From 819b633897e5fbfdc3a370aca75fb6ed0e4b75cb Mon Sep 17 00:00:00 2001 From: junhong Date: Mon, 12 May 2025 20:34:18 +0800 Subject: [PATCH] edit --- public/favicon.ico | Bin 5663 -> 6147 bytes src/assets/images/fh.png | Bin 0 -> 6525 bytes src/components/prompt/api.js | 11 + src/components/prompt/index.vue | 121 ++++++++ src/layout/index.vue | 2 + src/main.js | 20 +- src/router/routes.js | 22 +- .../production-plan/index.vue | 17 +- .../production-plan/options.js | 28 +- .../progress-alert/api.js | 74 +++++ .../progress-alert/index.vue | 79 ++++++ .../progress-alert/options.js | 27 ++ .../progress-monitoring/api.js | 66 +++++ .../progress-monitoring/echartsOptions.js | 123 ++++++++ .../progress-monitoring/index.vue | 130 +++++++++ .../progress-monitoring/options.js | 94 +++++++ .../progress-tracking/index.vue | 121 +++++--- .../progress-tracking/options.js | 110 +++++++- src/views/large-screen/api.js | 34 +++ src/views/large-screen/echartsOptions.js | 20 +- src/views/large-screen/index.vue | 266 +++++++++++------- 21 files changed, 1169 insertions(+), 196 deletions(-) create mode 100644 src/assets/images/fh.png create mode 100644 src/components/prompt/api.js create mode 100644 src/components/prompt/index.vue create mode 100644 src/views/constructionScheduling/progress-alert/api.js create mode 100644 src/views/constructionScheduling/progress-alert/index.vue create mode 100644 src/views/constructionScheduling/progress-alert/options.js create mode 100644 src/views/constructionScheduling/progress-monitoring/api.js create mode 100644 src/views/constructionScheduling/progress-monitoring/echartsOptions.js create mode 100644 src/views/constructionScheduling/progress-monitoring/index.vue create mode 100644 src/views/constructionScheduling/progress-monitoring/options.js diff --git a/public/favicon.ico b/public/favicon.ico index e26376026420542212ed58d90d0ed34f554fa4ae..a5a461022eb04b8590c76a5dabf699354a9d586e 100644 GIT binary patch literal 6147 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 literal 5663 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 jBf3wpBecT8W~1& { + return axios.request({ + url: '/iproductionplan/querywarn', + method: 'get', + params: arg, + dataType: 'json', + + }) +} diff --git a/src/components/prompt/index.vue b/src/components/prompt/index.vue new file mode 100644 index 00000000..df0ba301 --- /dev/null +++ b/src/components/prompt/index.vue @@ -0,0 +1,121 @@ + + + \ No newline at end of file diff --git a/src/layout/index.vue b/src/layout/index.vue index 0923ca64..54c43f24 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -6,10 +6,12 @@ + + + + + diff --git a/src/views/constructionScheduling/progress-alert/options.js b/src/views/constructionScheduling/progress-alert/options.js new file mode 100644 index 00000000..51f437e9 --- /dev/null +++ b/src/views/constructionScheduling/progress-alert/options.js @@ -0,0 +1,27 @@ +export const baseModelOptions = () => { + function validatePhoneNumber(phoneNumber) { + const regex = /^1[3-9]\d{9}$/; + return regex.test(phoneNumber); + } + const validatePass2 = (rule, value, callback) => { + if (value === '') { + callback(new Error('请输入现场负责人联系方式')) + } else { + if (!validatePhoneNumber(value)) { + callback(new Error('手机号格式不正确')) + return + } + callback() + } + } + return [ + + ] +} + +export const baseFilterOptions = () => { + return [ + + + ] +} \ No newline at end of file diff --git a/src/views/constructionScheduling/progress-monitoring/api.js b/src/views/constructionScheduling/progress-monitoring/api.js new file mode 100644 index 00000000..ad461f82 --- /dev/null +++ b/src/views/constructionScheduling/progress-monitoring/api.js @@ -0,0 +1,66 @@ +import axios from '@/utils/request' +// 查询分页数据: +export const iresourcescheduleList = (arg) => { + return axios.request({ + url: '/iproductionplan/statistics', + method: 'get', + params: arg, + dataType: 'json', + + }) +} +// 查询详情数据: +export const iresourcescheduleGetById = (arg) => { + return axios.request({ + url: `/iresourceschedule/getById`, + method: 'get', + params: arg, + dataType: 'json', + + }) +} + +// 添加数据: +export const iresourcescheduleAdd = (arg) => { + return axios.request({ + url: '/iresourceschedule/add', + method: 'post', + data: arg, + dataType: 'json', + + }) +} + +// 修改数据: +export const iresourcescheduleUpdate = (arg) => { + return axios.request({ + url: '/iresourceschedule/update', + method: 'put', + data: arg, + dataType: 'json', + + }) +} + +// 删除数据: +export const iresourcescheduleDelete = (arg) => { + return axios.request({ + url: '/iresourceschedule/delete', + method: 'delete', + params: { + id:arg.id[0] + }, + dataType: 'json', + + }) +} +// 查询分页数据: +export const iproductionplanList = (arg) => { + return axios.request({ + url: '/iproductionplan/list', + method: 'get', + params: arg, + dataType: 'json', + + }) +} \ No newline at end of file diff --git a/src/views/constructionScheduling/progress-monitoring/echartsOptions.js b/src/views/constructionScheduling/progress-monitoring/echartsOptions.js new file mode 100644 index 00000000..96398040 --- /dev/null +++ b/src/views/constructionScheduling/progress-monitoring/echartsOptions.js @@ -0,0 +1,123 @@ +import * as echarts from "echarts"; +// import 'echarts-liquidfill/src/liquidFill.js'; //在这里引入 +export function echartsZhe({ ydata2, ydata1, xdata }) { + + let color = ['#027CFB', '#02FBD1', '#F1C342', '#10F3A4'] + let server = [{ + type: "line", + name: "计划进度", + symbolSize: 1, + animation: false, + itemStyle: { + normal: { + label: { + show: true, + textStyle: { + color: "#8a989f", + fontSize: 10, + }, + position: "top", + }, + color: color[0], + lineStyle: { + color: color[0], + width: 1, + }, + }, + }, + data: ydata1 ? ydata1 : [], + }, { + type: "line", + symbolSize: 1, + name: "实际进度", + animation: false, + itemStyle: { + normal: { + label: { + show: true, + textStyle: { + color: "#8a989f", + fontSize: 10, + }, + position: "top", + }, + color: color[1], + lineStyle: { + color: color[1], + width: 1, + }, + }, + }, + data: ydata2 ? ydata2 : [], + }] + return { + grid: { + left: "5%", + right: "12%", + top: "15%", + bottom: "10%", + }, + legend: { + top: "0%", + y: "35", + textStyle: { + fontSize: 14, + }, + data: xdata, + }, + tooltip: { + trigger: "axis", + }, + xAxis: [ + { + type: "category", + boundaryGap: false, + axisLabel: { + color: "#8a989f", + formatter: function (value) { + // 使用正则表达式每10个字符换行 + return value.replace(/^(.{10})/g, "$1\n"); + }, + }, + axisLine: { + show: false, + lineStyle: { + color: "#E9EAED", + }, + }, + axisTick: { + show: true, + }, + data: [1, 2, 3, 4], + }, + ], + yAxis: [ + { + type: "value", + offset: 0, + axisLabel: { + formatter: "{value}", + marginBottom: 20, + textStyle: { + color: "#8a989f", + }, + }, + axisLine: { + lineStyle: { + color: "#E9EAED", + }, + }, + axisTick: { + show: false, + }, + splitLine: { + show: true, + lineStyle: { + color: "#E9EAED", + }, + }, + }, + ], + series: server, + }; +} diff --git a/src/views/constructionScheduling/progress-monitoring/index.vue b/src/views/constructionScheduling/progress-monitoring/index.vue new file mode 100644 index 00000000..163f9b97 --- /dev/null +++ b/src/views/constructionScheduling/progress-monitoring/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/constructionScheduling/progress-monitoring/options.js b/src/views/constructionScheduling/progress-monitoring/options.js new file mode 100644 index 00000000..82a982ae --- /dev/null +++ b/src/views/constructionScheduling/progress-monitoring/options.js @@ -0,0 +1,94 @@ +export const baseModelOptions = () => { + return [ + { + tag: 'BaseSelect', + label: '计划名称:', + key: 'planId', + value: '', + default: '', + rules: [ + { required: true, message: '请选择计划名称', trigger: 'blur' }, + ], + attribute: { //属性 + placeholder: '请选择计划名称', + options: [] + }, + }, + { + tag: 'el-input-number', + label: '当前进度:', + key: 'currentProgress', + value: 0, + default: 0, + rules: [ + { required: true, message: '请输入当前进度', trigger: 'blur' }, + ], + attribute: {//属性 + min: 0, + max: 100, + placeholder: '请输入当前进度', + }, + }, + { + tag: "el-date-picker", + label: '计划开始时间:', + key: 'startTime', + value: '', + default: '', + rules: [ + { required: true, message: '请选择计划开始时间', trigger: 'blur' }, + ], + attribute: {//属性 + valueFormat: "YYYY-MM-DD", + type: "date", + placeholder: '请选择计划开始时间', + }, + }, + { + tag: "el-date-picker", + label: '计划结束时间:', + key: 'endTime', + value: '', + default: '', + rules: [ + { required: true, message: '请选择计划结束时间', trigger: 'blur' }, + ], + attribute: {//属性 + valueFormat: "YYYY-MM-DD", + type: "date", + placeholder: '请选择计划结束时间', + }, + }, + { + tag: 'el-input', + label: '调度建议:', + key: 'advises', + value: '', + default: '', + attribute: {//属性 + type: 'textarea', + placeholder: '请输入调度建议', + }, + }, + ] +} + +export const baseFilterOptions = () => { + return [ + { + tag: 'BaseSelect', + label: '计划名称:', + key: 'planId', + value: '', + default: '', + rules: [ + { required: true, message: '请选择计划名称', trigger: 'blur' }, + ], + attribute: { //属性 + placeholder: '请选择计划名称', + options: [] + }, + }, + + ] +} \ No newline at end of file diff --git a/src/views/constructionScheduling/progress-tracking/index.vue b/src/views/constructionScheduling/progress-tracking/index.vue index fad783aa..782bc039 100644 --- a/src/views/constructionScheduling/progress-tracking/index.vue +++ b/src/views/constructionScheduling/progress-tracking/index.vue @@ -2,9 +2,13 @@ import { reactive } from 'vue' import { iprogressList, iprogressAdd, iprogressUpdate, iprogressDelete, iprogressGetById, iproductionplanList } from './api' import { baseModelOptions, baseFilterOptions } from './options' - +const currentTime = new Date(); +const year = currentTime.getFullYear(); +const month = String(currentTime.getMonth() + 1).padStart(2, '0'); +const day = String(currentTime.getDate()).padStart(2, '0'); +const formattedTime = `${year}-${month}-${day}`; const { proxy } = getCurrentInstance(); - +const table = ref() const state = reactive({ baseModelOptions: baseModelOptions(), baseFilterOptions: baseFilterOptions(), @@ -19,6 +23,7 @@ const state = reactive({ editFn: iprogressUpdate, deleteFn: iprogressDelete, detailFn: iprogressGetById, + rowKey: 'id', showEditBtn: false, showDeleteBtn: false, columnCount: 1, @@ -34,68 +39,110 @@ const state = reactive({ }, hideselection: true, pageInfo: { total: 0, base: { limit: 8, current: 1 } }, + baseQuery: { processDate: formattedTime }, beforeSubmit: function (params) { - let item = state.planList.find((item) => item.id == params.planId) - if (item) { - params.planName = item.planName - } + let child = proxy.getNameById(state.planList, params.planId, 'id') + if (!params.parentId) params.parentId = 0 + params.planName = child.planName return params }, - planList: [] + planList: [], + handleAdd: function (params) { + getPlanList().then(() => { + table.value.handleAdd() + }) + }, + beforeEdit: function (params) { + if (params.parentId == 0) params.parentId = ' ' + return new Promise((resolve) => { + getPlanList().then(() => { + resolve(params) + }) + }) + }, }) onMounted(() => { getPlanList() }) function getPlanList(params) { - iproductionplanList({ pageNo: 1, pageSize: 9999 }).then((res) => { - if (res.code == 200) { - state.planList = res.data.list - state.baseModelOptions = proxy.$util.setOptions({ - attrName: 'options',//树形 - data: state.baseModelOptions, //待赋值数据源 - key: "planId", //配置项的key - res: res, //返回结果 - path: res.data.list, - relation: { key: 'value', name: 'label', resKey: 'id', resName: 'planName' }, - everClear: true, - hasChildren: true, - }); - state.baseFilterOptions = proxy.$util.setOptions({ - attrName: 'options',//树形 - data: state.baseFilterOptions, //待赋值数据源 - key: "planId", //配置项的key - res: res, //返回结果 - path: res.data.list, - relation: { key: 'value', name: 'label', resKey: 'id', resName: 'planName' }, - everClear: true, - hasChildren: true, - }); - } + return new Promise(async (resolve) => { + await iproductionplanList({ pageNo: 1, pageSize: 9999 }).then((res) => { + if (res.code == 200) { + state.planList = res.data.list + state.baseModelOptions = proxy.$util.setOptions({ + attrName: 'data',//树形 + data: state.baseModelOptions, //待赋值数据源 + key: "planId", //配置项的key + res: res, //返回结果 + path: res.data.list, + relation: { key: 'value', name: 'label', resKey: 'id', resName: 'planName' }, + everClear: true, + hasChildren: true, + }); + state.baseFilterOptions = proxy.$util.setOptions({ + attrName: 'data',//树形 + data: state.baseFilterOptions, //待赋值数据源 + key: "planId", //配置项的key + res: res, //返回结果 + path: res.data.list, + relation: { key: 'value', name: 'label', resKey: 'id', resName: 'planName' }, + everClear: true, + hasChildren: true, + }); + } + }) + await iprogressList({ pageNo: 1, pageSize: 9999 }).then((res) => { + if (res.code == 200) { + state.baseModelOptions = proxy.$util.setOptions({ + attrName: 'data',//树形 + data: state.baseModelOptions, //待赋值数据源 + key: "parentId", //配置项的key + res: res, //返回结果 + path: res.data.list, + relation: { key: 'value', name: 'label', resKey: 'id', resName: 'planName' }, + everClear: true, + hasChildren: true, + }); + } + }) + resolve(params) }) } +function handAdd(item) { + state.handleAdd() + nextTick(() => { + table.value.modelRef.setValueByKey('parentId', item.id) + }) +} +