From bc6c0b93d864517ede9bb0ae699c74965f97ac08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=93=B2=E5=A5=87?= <13840175730@139.com> Date: Wed, 14 May 2025 17:20:06 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E4=BD=99=E6=96=99=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=202.=E5=88=87=E5=89=B2=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E,=E5=AD=98=E5=9C=A8=E4=BD=99=E6=96=99?= =?UTF-8?q?=E7=9A=84,=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E5=B8=A6?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E5=9B=BE=E7=BA=B8=E7=9A=84=E4=BD=99=E6=96=99?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=203.=E4=BD=99=E6=96=99=E4=B8=8A=E6=96=99,?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5=E4=BD=99=E6=96=99=E5=BA=93?= =?UTF-8?q?=E5=AD=98,=E4=BD=99=E6=96=99=E8=A2=AB=E5=93=AA=E4=B8=AA?= =?UTF-8?q?=E5=A5=97=E6=96=99=E5=9B=BE=E4=BD=BF=E7=94=A8=204.=E4=BD=99?= =?UTF-8?q?=E6=96=99=E6=8A=A5=E5=B7=A5,=E5=88=87=E5=89=B2=E5=AE=8C?= =?UTF-8?q?=E6=88=90,=E5=AD=98=E5=9C=A8=E4=BD=99=E6=96=99=E7=9A=84,?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E5=B8=A6=E6=9D=A5=E6=BA=90?= =?UTF-8?q?=E5=9B=BE=E7=BA=B8=E4=BD=99=E6=96=99=E4=BF=A1=E6=81=AF=205.?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8A=80=E6=9C=AF=E5=87=86=E5=A4=87,?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=95=B0=E6=8D=AE=E7=AD=9B=E9=80=89=E4=BB=8E?= =?UTF-8?q?=E5=A5=97=E6=96=99=E5=9B=BE=E5=8F=B7=E4=B8=AD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=206.=E6=8A=9B=E4=B8=B8=E5=AE=8C=E6=88=90=E5=90=8E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=AE=BE=E7=BD=AE=E5=85=89=E7=94=B5=E4=B8=BA=E5=85=AD?= =?UTF-8?q?=E5=8C=BA,=E8=BF=9B=E8=A1=8C=E5=88=87=E5=89=B2=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5=207.=E5=A2=9E=E5=8A=A0=E7=9C=8B=E6=9D=BF=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=A1=A8=E6=98=BE=E7=A4=BA=E7=9C=8B=E6=9D=BF=E5=9B=BE?= =?UTF-8?q?=E5=BD=A2=E5=AF=B9=E5=BA=94=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/kban.js | 4 + src/views/cxtj/index.js | 9 +- src/views/cxtj/new_index.vue | 184 ++++++++++++++++++++++++ src/views/cxtj/技术准备.js | 8 +- src/views/cxtj/看板对应数据表.js | 157 ++++++++++++++++++++ src/views/jhzxgl/ylgl/index.vue | 103 +++++++++++++ 6 files changed, 460 insertions(+), 5 deletions(-) create mode 100644 src/views/cxtj/new_index.vue create mode 100644 src/views/cxtj/看板对应数据表.js create mode 100644 src/views/jhzxgl/ylgl/index.vue diff --git a/src/api/kban.js b/src/api/kban.js index b9a1630..b0fd24f 100644 --- a/src/api/kban.js +++ b/src/api/kban.js @@ -59,3 +59,7 @@ export const getKqData=function(){ method: 'get', }) } + +export const getData=()=>{ + return request({url:'/sc/getYdjhByMonth'}) +} diff --git a/src/views/cxtj/index.js b/src/views/cxtj/index.js index ac3e721..ff81d37 100644 --- a/src/views/cxtj/index.js +++ b/src/views/cxtj/index.js @@ -1,9 +1,16 @@ import 作业计划完成量统计 from "@/views/cxtj/作业计划完成量统计"; import 技术准备 from "@/views/cxtj/技术准备"; +import 看板对应数据 from "@/views/cxtj/看板对应数据表"; const methods={ '/scgl/jh/cxtj1':作业计划完成量统计(), - '/scgl/sc/cxtj_jszb':技术准备() + '/scgl/sc/cxtj_jszb':技术准备(), + '/scgl/jh/cxtj_rikwc':看板对应数据('riwc'), + '/scgl/jh/cxtj_zkwc':看板对应数据('zhouwc'), + '/scgl/jh/cxtj_ykwc':看板对应数据('yuewc'), + '/scgl/jh/cxtj_rikcl':看板对应数据('ricl'), + '/scgl/jh/cxtj_zkcl':看板对应数据('zhoucl'), + '/scgl/jh/cxtj_ykcl':看板对应数据('yuecl'), } const init=(page)=>{ diff --git a/src/views/cxtj/new_index.vue b/src/views/cxtj/new_index.vue new file mode 100644 index 0000000..e4dd492 --- /dev/null +++ b/src/views/cxtj/new_index.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/views/cxtj/技术准备.js b/src/views/cxtj/技术准备.js index 7a57eb0..8ef6c10 100644 --- a/src/views/cxtj/技术准备.js +++ b/src/views/cxtj/技术准备.js @@ -1,12 +1,12 @@ import request from '@/utils/request' import XLSX from 'xlsx' +import { VXETable } from 'vxe-table' const 技术准备=()=>{ const list=()=>{ request({url:'/jszb/getFlowInfoList',method:'get',params:data.formData}) .then(res => { - console.log(res.data) data.options.data=res.data }) } @@ -29,7 +29,7 @@ const 技术准备=()=>{ const exportMethod=({options})=>{ const workBook = XLSX.utils.book_new(); - const T型材Group=['SG2'] + const T型材Group=['S2T','N2T'] const {sheet:T型材重量sheet}=处理数据(T型材Group,(list)=>{ return list.map(item=>{ @@ -130,7 +130,7 @@ const 技术准备=()=>{ XLSX.utils.book_append_sheet(workBook, 曲外板sheet, "曲外板"); const {sheet:lastSheet}=处理数据(['NCA','NCB','NCC','NCG','NCJ','NCL','NCP','NCT'],(list)=>{ - return list.map(item=>{ + return list.filter(item=>['Z','D'].includes(item.option3)).map(item=>{ return { 船名:item.ch, 分段号:item.fd, @@ -154,7 +154,7 @@ const 技术准备=()=>{ } const 处理数据=(groups,fun)=>{ - const list=data.filter(item=>groups.includes(item.type0)) + const list=data.filter(item=>groups.includes(item.nestingInfo?.substring(4,7))) return {list:fun(list),sheet:XLSX.utils.json_to_sheet(_data)} } diff --git a/src/views/cxtj/看板对应数据表.js b/src/views/cxtj/看板对应数据表.js new file mode 100644 index 0000000..b56d625 --- /dev/null +++ b/src/views/cxtj/看板对应数据表.js @@ -0,0 +1,157 @@ +import request from '@/utils/request' +import XEUtils from 'xe-utils' + +const 看板对应数据=(type)=>{ + const init=()=>{ + getData().then(res=>{ + const _data=JSON.parse(res.data) + + let begin=XEUtils.toDateString(XEUtils.now(),'yyyy/MM/dd') + let end=XEUtils.toDateString(XEUtils.getWhatDay(XEUtils.now(), 1),'yyyy/MM/dd') + const endOfMonth=XEUtils.toDateString(XEUtils.getWhatMonth(XEUtils.now(), 0,'last'),'yyyy/MM/dd') + switch (type){ + case 'riwc': + data.options.data= 完成率计算(_data,begin,end,endOfMonth).point + break + case 'zhouwc': + begin=XEUtils.toDateString(XEUtils.getWhatWeek (XEUtils.now(), 0,1,0),'yyyy/MM/dd') + end=XEUtils.toDateString(XEUtils.getWhatWeek (XEUtils.now(), 1,1,0),'yyyy/MM/dd') + data.options.data= 完成率计算(_data,begin,end,endOfMonth).point + break + case 'yuewc': + begin=XEUtils.toDateString(XEUtils.getWhatMonth(XEUtils.now(), 0,'first'),'yyyy/MM/dd') + end=XEUtils.toDateString(XEUtils.getWhatMonth(XEUtils.now(), 0,'last'),'yyyy/MM/dd') + data.options.data=完成率计算(_data,begin,end,endOfMonth).point + break + case 'ricl': + data.options.data=完成率计算(_data,begin,end,endOfMonth).wc + break + case 'zhoucl': + begin=XEUtils.toDateString(XEUtils.getWhatWeek (XEUtils.now(), 0,1,0),'yyyy/MM/dd') + end=XEUtils.toDateString(XEUtils.getWhatWeek (XEUtils.now(), 1,1,0),'yyyy/MM/dd') + data.options.data= 完成率计算(_data,begin,end,endOfMonth).wc + break + case 'yuecl': + begin=XEUtils.toDateString(XEUtils.getWhatMonth(XEUtils.now(), 0,'first'),'yyyy/MM/dd') + end=XEUtils.toDateString(XEUtils.getWhatMonth(XEUtils.now(), 0,'last'),'yyyy/MM/dd') + data.options.data= 完成率计算(_data,begin,end,endOfMonth).wc + break + } + }) + } + + const data={ + options:{ + align:'center', + border: true, + resizable: true, + keepSource:true, + size:'mini', + showOverflow: true, + editConfig:{trigger: 'click', mode: 'cell', showStatus: true}, + highlightCurrentRow:true, + columns:[], + data:[], + }, + } + + switch (type){ + case 'riwc': + case 'zhouwc': + case 'yuewc': + data.columns=columns0 + break + case 'ricl': + case 'zhoucl': + case 'yuecl': + data.columns=columns1 + break + default: + data.columns=columns0 + } + + return {data,init} +} + +const columns0=[ + { type: 'seq', width: 60, title: '序号' }, + { field: 'kua', title: '跨',}, + { field: 'c', title: '完成',}, + { field: 'n', title: '未完成',}, +] + +const columns1=[ + { type: 'seq', width: 60, title: '序号' }, + { field: 'dc_ch', title: '船号',}, + { field: 'c', title: '完成',}, + { field: 'n', title: '未完成',}, +] + +const 完成率计算=(data,date,nextDate,endOfMonth)=>{ + + const wc=[],point=[] + + const 一跨完成数据=data.filter(item=> item.qgfkrq >= date && item.qgfkrq < nextDate && item.zyq1 === '二区'&&['7','8'].includes(item.kw)) + const 一跨计划数量=data.filter(item=> item.qgjhrq >= date && item.qgjhrq < endOfMonth && item.zyq1 === '二区'&&['7','8'].includes(item.kw)).length + + let 一跨完成率='100' + if (一跨计划数量){ + 一跨完成率=(一跨完成数据.length/一跨计划数量*100).toFixed(2) + } + + point.push({kua:'1跨',c:一跨完成率,n:一跨完成率>100?'0':(100-一跨完成率).toFixed(2)}) + + wc.push({ label: '1跨', quantity: 一跨完成数据.length, weight: 一跨完成数据.reduce((accumulator, currentValue) => { + return accumulator + (currentValue?.bcshzl||0)/1000; + }, 0) },) + + const 二跨完成数据=data.filter(item=> item.qgfkrq >= date && item.qgfkrq < nextDate && item.zyq1 === '三区') + const 二跨计划数量=data.filter(item=> item.qgjhrq >= date && item.qgjhrq < endOfMonth && item.zyq1 === '三区').length + + let 二跨完成率='100' + if (二跨计划数量){ + 二跨完成率=(二跨完成数据.length/二跨计划数量*100).toFixed(2) + } + + point.push({kua:'2跨',c:二跨完成率,n:二跨完成率>100?'0':(100-二跨完成率).toFixed(2)}) + + wc.push({ label: '2跨', quantity: 二跨完成数据.length, weight: 二跨完成数据.reduce((accumulator, currentValue) => { + return accumulator + (currentValue.bcshzl||0)/1000; + }, 0) },) + + const 三跨完成数据=data.filter(item=> item.qgfkrq >= date && item.qgfkrq < nextDate && item.zyq1 === '二区'&&['6','13','14'].includes(item.kw)) + const 三跨计划数量=data.filter(item=> item.qgjhrq >= date && item.qgjhrq < endOfMonth && item.zyq1 === '二区'&&['6','13','14'].includes(item.kw)).length + + let 三跨完成率='100' + if (三跨计划数量){ + 三跨完成率=(三跨完成数据.length/三跨计划数量*100).toFixed(2) + } + + point.push({kua:'3跨',c:三跨完成率,n:三跨完成率>100?'0':(100-三跨完成率).toFixed(2)}) + + wc.push({ label: '3跨', quantity: 三跨完成数据.length, weight: 三跨完成数据.reduce((accumulator, currentValue) => { + return accumulator + (currentValue.bcshzl||0)/1000; + }, 0) },) + + const 四跨完成数据=data.filter(item=> item.qgfkrq >= date && item.qgfkrq < nextDate && item.zyq1 === '四区') + const 四跨计划数量=data.filter(item=> item.qgjhrq >= date && item.qgjhrq < endOfMonth && item.zyq1 === '四区').length + + let 四跨完成率='100' + if (四跨计划数量){ + 四跨完成率=(四跨完成数据.length/四跨计划数量*100).toFixed(2) + } + + point.push({kua:'4,5,6跨',c:四跨完成率,n:四跨完成率>100?'0':(100-四跨完成率).toFixed(2)}) + + wc.push({ label: '4、5、6跨', quantity: 四跨完成数据.length, weight: 四跨完成数据.reduce((accumulator, currentValue) => { + return accumulator + (currentValue.bcshzl||0)/1000; + }, 0) },) + + return {point,wc} +} + +const getData=()=>{ + return request({url:'/sc/getYdjhByMonth'}) +} + +export default 看板对应数据 diff --git a/src/views/jhzxgl/ylgl/index.vue b/src/views/jhzxgl/ylgl/index.vue new file mode 100644 index 0000000..dd2920d --- /dev/null +++ b/src/views/jhzxgl/ylgl/index.vue @@ -0,0 +1,103 @@ + + + +