From b0edff4c02128b722a9a6674b016536d4395872d Mon Sep 17 00:00:00 2001 From: 廖井涛 <2265517004@qq.com> Date: 星期五, 23 二月 2024 13:39:44 +0800 Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override --- north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue | 566 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 462 insertions(+), 104 deletions(-) diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue index 94408ab..c9978b9 100644 --- a/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue +++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/AddProcessCard.vue @@ -1,89 +1,401 @@ <script setup> -import {ArrowLeftBold} from "@element-plus/icons-vue"; -import {useRouter} from "vue-router"; -const router = useRouter() -let flag = $ref(true) -function intoCreateProduct(){ - if(flag){ - router.push('/main/processCard/SplittingDetails') - }else { - router.push('/main/processCard/SplittingDetails') + +import request from "@/utils/request" +import deepClone from "@/utils/deepClone" +import {ElDatePicker, ElMessage} from "element-plus" +import useProductGlassTypeStore from "@/stores/sd/product/productGlassType" +import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue" +import {Search} from "@element-plus/icons-vue" +import GlassType from "@/components/sd/product/GlassType.vue" +import {useRouter} from 'vue-router' +import Sortable from 'sortablejs' +import BasicTable from '@/components/basic/BasicTable.vue' +import {VXETable} from "vxe-table"; + +let productGlassTypeStore = useProductGlassTypeStore() +let router = useRouter() +const getTableRow = (row, type) => { + switch (type) { + case 'edit' : { + router.push({path: '/main/processCard/PrintFlowCard', query: {id: row.id}}) + break + } + case 'setType': { + alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅') + break + } + case 'delete': { + request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => { + if (res.code == 200) { + ElMessage.success("鍒犻櫎鎴愬姛") + location.reload(); + } else { + ElMessage.warning(res.msg) + router.push("/login") + } + }) + break + } } - flag=!flag } -const tableData = [ - { - processCard: 'NG231201A01', - orderSequence: '1', - landingSequence: '1', - floorNumber: '14-BSGB05', - shape: '鏅舰', - longSide: '5000', - shortSide: '4400', - total: '24', - totalThickness: '26', + + +//瀹氫箟鏃堕棿 +const form = reactive({ + date1: '', +}) + +//琛ㄥ熬姹傚拰 +const sumNum = (list, field) => { + let count = 0 + list.forEach(item => { + count += Number(item[field]) + }) + return count.toFixed(2) +} + +//瀹氫箟婊氬姩鏉¢珮搴� +let scrollTop = ref(null) +let scrollHeight = ref(null) +let clientHeight = ref(null) +const scrollEvnt = (row) => { + // 鍐呭楂樺害 + scrollTop.value = row.$event.target.scrollTop + scrollHeight.value = row.$event.target.scrollHeight + clientHeight.value = row.$event.target.clientHeight +} +//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹� +let filterData = ref({ + product: { + thickness: '', + totalThickness:'' }, - { - processCard: 'NG231201A01', - orderSequence: '2', - landingSequence: '2', - floorNumber: '15-BSGB05', - shape: '鏅舰', - longSide: '5000', - shortSide: '4400', - total: '24', - totalThickness: '26', + orderDetail: { + orderNumber: '', + height: '', + computeGrossArea: '', + quantity: '', + shape:'', + width:'', + weight:'' + } + +}) +//瀹氫箟椤甸潰鎬婚〉鏁� +let pageTotal = ref('') +//瀹氫箟鏁版嵁杩斿洖缁撴灉 +let produceList = ref([]) +//瀹氫箟褰撳墠椤垫暟 +let pageNum = $ref(1) +let pageState = null + +const {currentRoute} = useRouter() +const route = currentRoute.value + +let orderId = route.query.orderId +let productionId = route.query.productionId +//绗竴娆″姞杞芥暟鎹� + +request.post(`/processCard/selectNoCard/${orderId}/${productionId}`, filterData.value).then((res) => { + + if (res.code == 200) { + //console.log(res.data) + pageTotal.value = res.data.total + produceList = produceList.value.concat(deepClone(res.data.data)) + xGrid.value.reloadData(produceList) + gridOptions.loading = false + } else { + ElMessage.warning(res.msg) + } +}) + +/*浣跨敤绛涢�夛紝鍚庣鑾峰彇鏁版嵁*/ +const changeFilterEvent = (event, option, $panel,) => { + // 鎵嬪姩瑙﹀彂绛涢�� + $panel.changeOption(event, !!option.data, option) +} +function padLeftZero(str) { + return ('00' + str).substr(str.length) +} +function filterChanged(column) { + gridOptions.loading = true + //绛涢�夋潯浠跺彂鐢熷彉鍖栨潯浠跺彂鐢熷彉鍖� + let value = column.datas[0] != undefined ? column.datas[0] : '' + value = value.trim() + //鍒ゆ柇鏄惁瀛樺湪澶栭敭 + if (column.property.indexOf('.') > -1) { + const columnArr = column.property.split('.') + filterData.value[columnArr[0]] = { + [columnArr[1]]: value + } + } else { + filterData.value[column.property] = value + } + + + request.post(`/processCard/selectNoCard/${orderId}/${productionId}`, filterData.value).then((res) => { + if(res.code==200){ + pageTotal.value=res.data.total + produceList = deepClone(res.data.data) + xGrid.value.loadData(produceList) + gridOptions.loading=false + }else{ + ElMessage.warning(res.msg) + } + }) +} + +/*鍚庣杩斿洖缁撴灉澶氬眰宓屽灞曠ず*/ +const hasDecimal = (value) => { + const regex = /\./; // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐� + return regex.test(value); // 杩斿洖true/false +} + +//鍙充晶瀛愮粍浠舵帴鏀跺弬鏁� +const xGrid = ref() +const gridOptions = reactive({ + border: "full",//琛ㄦ牸鍔犺竟妗� + keepSource: true,//淇濇寔婧愭暟鎹� + align: 'center',//鏂囧瓧灞呬腑 + stripe:true,//鏂戦┈绾� + rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒 + id: 'CustomerList', + showFooter: true,//鏄剧ず鑴� + printConfig: {}, + importConfig: {}, + exportConfig: {}, + scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔� + showOverflow:true, + columnConfig: { + resizable: true, + useKey: true }, - { - processCard: 'NG231201A02', - orderSequence: '3', - landingSequence: '3', - floorNumber: '16-BSGB05', - shape: '鏅舰', - longSide: '5000', - shortSide: '4400', - total: '24', - totalThickness: '26', + filterConfig: { //绛涢�夐厤缃」 + remote: true }, -] -const tableData2 = [ - { - orderSequence: '4', - floorNumber: '17-BSGB08', - shape: '鏅舰', - longSide: '4600', - shortSide: '3880', - undividedQuantity: '15', - undividedArea: '99.84', - totalThickness:'28', - glassThickness:'24', - undividedWeight:'111' + customConfig: { + storage: true }, - { - orderSequence: '5', - floorNumber: '18-BSGB08', - shape: '鏅舰', - longSide: '4600', - shortSide: '3880', - undividedQuantity: '15', - undividedArea: '99.84', - totalThickness:'28', - glassThickness:'24', - undividedWeight:'111' + editConfig: { + trigger: 'click', + mode: 'row', + showStatus: true + },//琛ㄥご鍙傛暟 + columns:[ + {type: 'checkbox', fixed: "left", title: '閫夋嫨'}, + {field: 'orderNumber', title: '璁㈠簭',filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, + {field: 'shape', title: '褰㈢姸', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'width', title: '瀹�', filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'height', title: '楂�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'baiscQuantity', title: '鏁伴噺', showOverflow:"ellipsis"}, + {field: 'computeGrossArea', title: '闈㈢Н'}, + {field: 'totalThickness', title: '鎬诲帤搴�'}, + {field: 'thickness', title: '鐜荤拑鍘氬害'}, + {field: 'weight', title: '閲嶉噺'} + ],//琛ㄥご鎸夐挳 + + toolbarConfig: { + // buttons: [{ + // + // }], + // import: false, + // export: true, + // print: true, + zoom: true, + custom: true }, - { - orderSequence: '6', - floorNumber: '19-BSGB08', - shape: '鏅舰', - longSide: '4600', - shortSide: '3880', - undividedQuantity: '15', - undividedArea: '99.84', - totalThickness:'28', - glassThickness:'24', - undividedWeight:'111' + data: [ + + ],//table body瀹為檯鏁版嵁 + //鑴氶儴姹傚拰 + footerMethod ({ columns, data }) {//椤佃剼鍑芥暟 + let footList=['鎬绘暟閲�','鎬婚潰绉�','鍒嗙鏁�'] + return[ + columns.map((column, columnIndex) => { + if (columnIndex === 0) { + return '鍚堣:' + } + if (footList.includes(column.field)) { + return sumNum(data, column.field) + } + return '' + }) + ] + } + +}) + + +//宸︿晶瀛愮粍浠舵帴鏀跺弬鏁� +const xGridLeft = ref() +const gridLeftOptions = reactive({ + border: "full",//琛ㄦ牸鍔犺竟妗� + keepSource: true,//淇濇寔婧愭暟鎹� + align: 'center',//鏂囧瓧灞呬腑 + stripe:true,//鏂戦┈绾� + rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒 + id: 'CustomerList', + showFooter: true,//鏄剧ず鑴� + printConfig: {}, + importConfig: {}, + exportConfig: {}, + scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔� + showOverflow:true, + columnConfig: { + resizable: true, + useKey: true }, -] + filterConfig: { //绛涢�夐厤缃」 + remote: true + }, + customConfig: { + storage: true + }, + editConfig: { + trigger: 'click', + mode: 'row', + showStatus: true + },//琛ㄥご鍙傛暟 + columns:[ + {type: 'checkbox', fixed: "left", title: '閫夋嫨'}, + {field: 'processId', title: '娴佺▼鍗″彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width:130 }, + {field: 'orderNumber', title: '璁㈠簭', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'landingSequence', title: '钀芥灦椤哄簭', filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'shape', title: '褰㈢姸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, + {field: 'width', title: '瀹�', showOverflow:"ellipsis"}, + {field: 'height', title: '楂�'}, + {field: 'quantity', title: '鎬绘暟閲�'}, + {field: 'totalThickness', title: '鎬诲帤搴�'}, + ],//琛ㄥご鎸夐挳 + + toolbarConfig: { + // buttons: [{ + // + // }], + import: false, + export: true, + print: true, + zoom: true, + custom: true + }, + data: [ + + ],//table body瀹為檯鏁版嵁 + //鑴氶儴姹傚拰 + footerMethod ({ columns, data }) {//椤佃剼鍑芥暟 + let footList=['鎬绘暟閲�','鎬婚潰绉�','鍒嗙鏁�'] + return[ + columns.map((column, columnIndex) => { + if (columnIndex === 0) { + return '鍚堣:' + } + if (footList.includes(column.field)) { + return sumNum(data, column.field) + } + return '' + }) + ] + } + +}) +//鍒涘缓娴佺▼鍗� +const createProcessCard = () => { + const $grid = xGrid.value + const checkedList = $grid.getCheckboxRecords() + if(checkedList.length===0){ + ElMessage.warning("璇峰厛閫夋嫨鍙充晶鏁版嵁") + return + } + //productionId + const $gridLeft = xGridLeft.value + const leftData = $gridLeft.getTableData().fullData + let index = 1 + if(leftData.length!==0){ + index = leftData[0].landingSequence + 1 + //index = index.toString().padStart(2, '0') + } + const processId = productionId + index.toString().padStart(2, '0') + checkedList.forEach((item) => { + item.processId = processId + item.landingSequence = index + }) + $gridLeft.insertAt(checkedList) + $grid.remove(checkedList) +} + +let checkedNum = ref('') + +//鍚戝彸杈硅〃鏍兼坊鍔犳暟鎹� +const addRight = () => { + try{ + //宸﹁竟琛ㄦ牸瀹氫箟 + const $gridLeft = xGridLeft.value + //鍙宠竟琛ㄦ牸瀹氫箟 + const $grid = xGrid.value + //鑾峰彇宸﹁竟琛ㄦ牸checkbox閫変腑鐨勬暟鎹� + const checkedList = $gridLeft.getCheckboxRecords() + //鍒ゆ柇宸﹁竟琛ㄦ牸鏄惁鏈夐�変腑鐨勬暟鎹� + if(checkedList.length===0){ + ElMessage.warning("璇峰厛閫夋嫨宸︿晶鏁版嵁") + return + } + const regex = /^(\d+|)$/; + if(!regex.test(checkedNum.value)){ + ElMessage.warning("璇疯緭鍏ユ鏁存暟") + return + } + //鍒ゆ柇姝f暣鏁� + if(/^[1-9]\d*$/.test(checkedNum.value)){ + //瀵归�変腑鐨勫乏杈硅〃鏍兼暟鎹繘琛屽惊鐜� + checkedList.forEach((item)=> { + //鍒ゆ柇鍙敤鏁伴噺鏄惁澶т簬绛変簬杈撳叆鐨勬暟閲�,涓嶆弧瓒冲垯鎶涘嚭寮傚父 + if(item.quantity <checkedNum.value) throw new Error("璇疯緭鍏ュ皬浜庣瓑浜庡彲鐢ㄦ暟閲忕殑鏁板瓧"); + //宸﹁竟琛ㄦ牸鍙敤鏁伴噺鍑忓幓杈撳叆鐨勬暟閲� + item.quantity = item.quantity-checkedNum.value + //鍙宠竟琛ㄦ牸鏁版嵁 + let rightData = $grid.getTableData().fullData + //鍙宠竟琛ㄦ牸鏁版嵁涓煡鎵惧綋鍓嶆暟鎹笅鏍� + let filterIndex = rightData.findIndex(item1 => item1.orderNumber === item.orderNumber) + //濡傛灉鍙宠竟琛ㄦ牸鏁版嵁涓瓨鍦ㄥ綋鍓嶆暟鎹垯鏁伴噺鐩稿姞 + if (filterIndex>=0){ + rightData[filterIndex].baiscQuantity =rightData[filterIndex].baiscQuantity*1+ checkedNum.value*1 + //濡傛灉宸﹁竟鏁伴噺涓�0鏃跺垹闄ゆ鏉℃暟鎹� + if(item.quantity=== 0){ + $gridLeft.remove(item) + } + }else { + //鍙宠竟琛ㄦ牸娌℃湁姝ゆ潯鏁版嵁鍒欏線鍙宠竟琛ㄦ牸鎻掑叆鏁版嵁 + item.baiscQuantity = checkedNum.value + $grid.insert(item) + } + }) + }else if(checkedNum.value===''){//鍒ゆ柇鏁伴噺杈撳叆妗嗘湁鏃犺緭鍏ユ暟瀛� + + checkedList.forEach((item)=> { + let rightData = $grid.getTableData().fullData + let filterIndex = rightData.findIndex(item1 => item1.orderNumber === item.orderNumber) + //鏃犺緭鍏ュ苟涓斿鏋滃彸杈硅〃鏍兼暟鎹腑瀛樺湪褰撳墠鏁版嵁鍒欐暟閲忕浉鍔� + if(filterIndex>-1){ + rightData[filterIndex].baiscQuantity =rightData[filterIndex].baiscQuantity*1+ item.quantity*1 + }else{ + $grid.insert(item) + } + + $gridLeft.remove(item) + }) + } + + } + catch (e){ + ElMessage.warning(e.message) + } +} +//鍚戝乏杈硅〃鏍兼坊鍔犳暟鎹� +const addLeft = () => { + +} + + </script> <template> @@ -107,46 +419,92 @@ <div class="common-layout"> <el-container height="100%"> <el-aside width="44%" style=""> - <el-table :data="tableData" border style="width: 100%" height="100%"> - <el-table-column sortable prop="processCard" label="娴佺▼鍗″彿" width="120" /> - <el-table-column prop="orderSequence" label="璁㈠簭" width="60" /> - <el-table-column prop="landingSequence" label="钀芥灦椤哄簭" width="85" /> - <el-table-column prop="floorNumber" label="妤煎眰缂栧彿" :show-overflow-tooltip='true' width="120" /> - <el-table-column prop="shape" label="褰㈢姸" width="65" /> - <el-table-column prop="longSide" label="闀胯竟" width="65" /> - <el-table-column prop="shortSide" label="鐭竟" width="65" /> - <el-table-column prop="total" label="鎬绘暟閲�" width="75" /> - <el-table-column prop="totalThickness" label="鎬诲帤搴�" width="75" /> - </el-table><!-- <h1>{{msg}}</h1> --> + <vxe-grid + max-height="100%" + @filter-change="filterChanged" + class="mytable-scrollbar" + ref="xGridLeft" + v-bind="gridLeftOptions" + > + <!-- @toolbar-button-click="toolbarButtonClickEvent"--> + <!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�--> + <template #content="{ row }"> + <ul class="expand-wrapper"> + <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined "> + <span style="font-weight: bold">{{ item.title + ': ' }}</span> + <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span> + <span v-else>{{ row[item.field] }}</span> + </li> + </ul> + </template> + <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�--> + <template #button_slot="{ row }"> + <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">鎵撳嵃</el-button> + <el-button @click="getTableRow(row,'setType')" link type="primary" size="small">鎺掔増</el-button> + <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">鍒犻櫎</el-button> + </template> + <template #num1_filter="{ column, $panel }"> + <div> + <div v-for="(option, index) in column.filters" :key="index"> + <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/> + </div> + </div> + </template> + + + </vxe-grid> + </el-aside> <el-main width="12%" style=""> <span>鏈垎鏁伴噺:45</span><br> <span>鏈垎閲嶉噺:333</span><br> - <span>閫変腑鏁伴噺:</span><br> - <el-button type="primary"> 鈫� </el-button> + <span>閫変腑鏁伴噺:<el-input type="number" v-model="checkedNum"></el-input></span><br> + <el-button type="primary" @click="addRight"> 鈫� </el-button> <br> <br> - <el-button type="primary"> 鈫� </el-button> + <el-button type="primary" @click="addLeft"> 鈫� </el-button> <br> <br> - <el-button type="primary">寤虹珛娴佺▼鍗�</el-button> + <el-button @click="createProcessCard" type="primary">寤虹珛娴佺▼鍗�</el-button> </el-main> <el-aside width="44%" style=""> - <el-table :data="tableData2" border style="width: 100%" height="100%"> - <el-table-column prop="orderSequence" label="璁㈠簭" width="60" /> - <el-table-column prop="floorNumber" label="妤煎眰缂栧彿" :show-overflow-tooltip='true' width="100" /> - <el-table-column prop="shape" label="褰㈢姸" width="65" /> - <el-table-column prop="longSide" label="闀胯竟" width="60" /> - <el-table-column prop="shortSide" label="鐭竟" width="60" /> - <el-table-column prop="undividedQuantity" label="寰呭垎鏁伴噺" width="85" /> - <el-table-column prop="undividedArea" label="寰呭垎闈㈢Н" width="85" /> - <el-table-column prop="totalThickness" label="鎬诲帤搴�" width="75" /> - <el-table-column prop="glassThickness" label="鐜荤拑鍘氬害" width="85" /> - <el-table-column prop="undividedWeight" label="寰呭垎閲嶉噺" width="85" /> - </el-table><!-- <h1>{{msg}}</h1> --> + <vxe-grid + max-height="100%" + @filter-change="filterChanged" + class="mytable-scrollbar" + ref="xGrid" + v-bind="gridOptions" + > + <!-- @toolbar-button-click="toolbarButtonClickEvent"--> + <!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�--> + <template #content="{ row }"> + <ul class="expand-wrapper"> + <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined "> + <span style="font-weight: bold">{{ item.title + ': ' }}</span> + <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span> + <span v-else>{{ row[item.field] }}</span> + </li> + </ul> + </template> + + <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�--> + <template #button_slot="{ row }"> + <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">鎵撳嵃</el-button> + <el-button @click="getTableRow(row,'setType')" link type="primary" size="small">鎺掔増</el-button> + <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">鍒犻櫎</el-button> + </template> + + <template #num1_filter="{ column, $panel }"> + <div> + <div v-for="(option, index) in column.filters" :key="index"> + <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/> + </div> + </div> + </template> + </vxe-grid> </el-aside> </el-container> </div> -- Gitblit v1.8.0