From 714ed2fda4d83bdc2da48ccfe7e42f220acbee99 Mon Sep 17 00:00:00 2001
From: guoyujie <guoyujie@ng.com>
Date: 星期五, 21 十一月 2025 16:49:06 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
---
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue | 504 ++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 385 insertions(+), 119 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
index b244763..d7a6c97 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
@@ -1,30 +1,113 @@
<script setup>
-import {reactive, ref} from "vue";
+import {nextTick, onMounted, reactive, ref, watch} from "vue";
import {useI18n} from "vue-i18n";
import {Search} from "@element-plus/icons-vue";
-const { t } = useI18n()
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import {ElMessage} from "element-plus";
+import useUserInfoStore from "@/stores/userInfo";
+import {changeFilterEvent, filterChanged} from "@/hook";
+
+const {t} = useI18n()
+const userStore = useUserInfoStore()
+const username = userStore.user.userId
+let rowClickIndex = ref(null)
+
+let props = defineProps({
+ processId: null,
+ technologyNumber: null
+})
+
+//鑶滅郴
+const optionVal = ref()
+//鑶滅郴
+const projectNmae = ref()
+//宸ョ▼缂栧彿涓暟
+let projectId = ref()
+//宸ョ▼缂栧彿
+const Id = ref()
+let oddNumbers = ref()
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+ processType: [],
+})
+
+const selectGlassType = () => {
+ //鏌ヨ鑶滅郴
+ request.post(`/glassOptimize/selectGlassType`).then((res) => {
+ if (res.code == 200) {
+ titleSelectJson.value.processType = res.data.data
+ } else {
+ ElMessage.warning(res.msg)
+ }
+ })
+}
+//鏌ヨ鏈�鏂板伐绋嬪彿
+const getProjectId = () => {
+ request.post(`/glassOptimize/getProjectId`).then((res) => {
+ if (res.code == 200) {
+ projectId = res.data.data[0].project_no
+ // 鑾峰彇瀛楃涓茬殑鏈�鍚庝袱浣嶆暟瀛�
+ let maximum = projectId.slice(-2);
+ let lastTwoInteger = parseInt(maximum, 10);
+ // 璁剧疆涓や綅涓嶅琛�0
+ let formattedNumber = (lastTwoInteger + 1).toString().padStart(2, '0');
+ // 鏍煎紡鍖栧綋鍓嶆棩鏈熶负 "yyMMdd"
+ let currentDate = new Date();
+ let formattedDate = currentDate.getFullYear().toString().slice(-2) +
+ (currentDate.getMonth() + 1).toString().padStart(2, '0') +
+ currentDate.getDate().toString().padStart(2, '0');
+
+ // 鎷兼帴鎴愭渶缁堢殑瀛楃涓�
+ oddNumbers.value = 'P' + formattedDate + formattedNumber;
+
+ } else {
+ ElMessage.warning(res.msg)
+ }
+ })
+}
+
+
+onMounted(() => {
+ console.log(userStore.user);
+ getProjectId();
+ selectGlassType();
+
+})
const xGrid = ref()
+// 娣诲姞鐩戝惉鍣� - 鐩戝惉鑶滅郴閫夋嫨鍙樺寲
+watch(optionVal, (newVal, oldVal) => {
+ if (oldVal !== undefined && newVal !== oldVal) {
+ // 褰撹啘绯绘敼鍙樻椂锛岃嚜鍔ㄥ埛鏂版暟鎹�
+ if (newVal) {
+ selectFlowCardList();
+ }
+ }
+}, { flush: 'post' });
+
+
const gridOptions = reactive({
- height:'100%',
+ height: '100%',
loading: false,
- border: "full",//琛ㄦ牸鍔犺竟妗�
+ border: "full",//琛ㄦ牸鍔犺竟妗�
keepSource: true,//淇濇寔婧愭暟鎹�
align: 'center',//鏂囧瓧灞呬腑
- stripe:true,//鏂戦┈绾�
- rowConfig: {isCurrent: true, isHover: true,height: 30, useKey: true},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+ stripe: true,//鏂戦┈绾�
+ rowConfig: {isCurrent: true, isHover: true, height: 30, useKey: true},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
id: 'ProcessCard',
- scrollX:{enabled: true},
- scrollY:{ enabled: true ,gt:0},//寮�鍚櫄鎷熸粴鍔�
- showOverflow:true,
+ scrollX: {enabled: true},
+ scrollY: {enabled: true, gt: 0},//寮�鍚櫄鎷熸粴鍔�
+ showOverflow: true,
columnConfig: {
resizable: true,
useKey: true
},
filterConfig: { //绛涢�夐厤缃」
- remote: true
+ //remote: true
},
customConfig: {
storage: true
@@ -34,138 +117,321 @@
mode: 'row',
showStatus: true
},
- /*formConfig: {
- data: {
- width: '',
- height: '',
- quantity: ''
+ columns: [
+
+ {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
+ {
+ field: 'process_id',
+ width: 150,
+ title: t('processCard.processId'),
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
},
- items: [
- { field: 'width', title: t('order.width')+':', itemRender: { name: 'VxeInput' } },
- { field: 'height', title: t('order.height')+':', itemRender: { name: 'VxeInput' } },
- { field: 'quantity', title: t('order.quantity')+':', itemRender: { name: 'VxeInput' } },
- {
- itemRender: {
- name: 'VxeButtonGroup',
- options: [
- { type: 'submit', content: t('craft.sure'), status: 'primary' },
- { type: 'reset', content: t('product.msg.reset') }
- ]
- }
- }
- ]
- },*/
- columns:[
- {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
- {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
- {field: 'processId',width: 150, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 70, title: '灞�',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
- {field: 'id',width: 150, title: '鎬诲眰鏁�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 100, title: '瑙勬牸',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
- {field: 'quantity',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'id',width: 150, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderDetail.productName',width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'order.project', width:150, title: t('order.project'), showOverflow: "ellipsis"},
- {field: 'orderDetail.computeGrossArea',width: 150, title: t('order.area'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {
+ field: 'technology_number',
+ width: 70,
+ title: '灞�',
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {
+ field: 'TotalFloors',
+ width: 150,
+ title: '鎬诲眰鏁�',
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {
+ field: 'TotalNumber',
+ width: 150,
+ title: '瑙勬牸',
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {
+ field: 'quantity',
+ width: 150,
+ title: t('order.quantity'),
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {
+ field: 'shape',
+ width: 150,
+ title: t('order.shape'),
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {
+ field: 'glass_child',
+ width: 150,
+ title: t('order.product'),
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },
+ {field: 'project', width: 150, title: t('order.project'), showOverflow: "ellipsis",filterMethod:filterChanged},
+ {
+ field: 'area',
+ width: 150,
+ title: t('order.area'),
+ filters: [{data: ''}],
+ slots: {filter: 'num1_filter'},
+ sortable: true,
+ filterMethod:filterChanged
+ },{
+ field: 'patch_state',
+ width: 100,
+ title: '琛ョ墖鐘舵��'
+ },
],//琛ㄥご鍙傛暟
- data:null,//琛ㄦ牸鏁版嵁
+ data: null,//琛ㄦ牸鏁版嵁
toolbarConfig: {
buttons: [],
- slots:{
+ slots: {
buttons: "toolbar_buttons"
},
},
-})
-let emit = defineEmits([
- 'changeDialog'
-])
-//鑶滅郴鍒楄〃
-const optionVal = ref('')
-const options = [
- {
- value: '0',
- label: '鐧界幓',
- },
- {
- value: '1',
- label: '鐏伴暅',
- },
- {
- value: '2',
- label: 'Low-e',
- },
-]
+})
+
+const gridEvents = {
+ cellClick({row}) {
+ rowClickIndex.value = row
+ // Emit 浜嬩欢灏嗘洿鏂板悗鐨勫�间紶閫掔粰鐖剁粍浠�
+ emit('updateProcessId', rowClickIndex.value.process_id);
+ emit('updateTechnologyNumber', rowClickIndex.value.technology_number);
+ }
+}
+const emit = defineEmits(['updateProcessId', 'updateTechnologyNumber', 'updateState']);
+
+
+//灏忓渾鐐瑰崟閫夋
+let radio = ref(1);
+let isButtonDisabledAdd = ref(false);
+let isButtonDisabledUpdate = ref(true);
+
+const selectFlowCardList = async () => {
+ request.post(`/glassOptimize/getFlowCardList/${optionVal.value}/${radio.value}`).then((res) => {
+ if (res.code == 200) {
+ getProjectId()
+ isButtonDisabledAdd.value=false
+ isButtonDisabledUpdate.value = true
+ xGrid.value.loadData(res.data.data)
+ } else {
+ ElMessage.warning(res.msg)
+ }
+ })
+}
+
+const getUpdateFlowCardList = async (projectNumber, type, thickness) => {
+ // 閲嶇疆鐘舵��
+ radio.value = 1;
+ isButtonDisabledAdd.value = true;
+ isButtonDisabledUpdate.value = false;
+
+ // 娓呯┖鐜版湁鏁版嵁
+ if (xGrid.value) {
+ xGrid.value.loadData([]);
+ }
+
+ // 寮哄埗鏇存柊琛ㄥ崟瀛楁
+ oddNumbers.value = projectNumber;
+ projectNmae.value = ''; // 鍏堟竻绌哄伐绋嬪悕绉�
+
+ // 鏋勯�犳纭殑鑶滅郴鍊�
+ const glassTypeValue = `${thickness}mm${type}`;
+ optionVal.value = glassTypeValue;
+
+ request.post(`/glassOptimize/getUpdateFlowCardList/${type}/${thickness}/${radio.value}/${projectNumber}`).then((res) => {
+ if (res.code == 200) {
+ // 鏇存柊宸ョ▼缂栧彿
+ oddNumbers.value = projectNumber;
+
+ // 鏇存柊宸ョ▼鍚嶇О锛堝鏋滃悗绔繑鍥烇級
+ if (res.data.projectName) {
+ projectNmae.value = res.data.projectName;
+ }
+
+ // 纭繚鑶滅郴閫夋嫨姝g‘
+ optionVal.value = glassTypeValue;
+
+ isButtonDisabledAdd.value = true;
+ isButtonDisabledUpdate.value = false;
+
+ // 浣跨敤 $nextTick 纭繚DOM鏇存柊鍚庡啀鍔犺浇鏁版嵁
+ nextTick(() => {
+ if (xGrid.value) {
+ xGrid.value.loadData(deepClone(res.data.data));
+ // 璁剧疆閫変腑鐘舵��
+ nextTick(() => {
+ const tableData = xGrid.value.getTableData().fullData;
+ tableData.forEach(item => {
+ if(item.occupyState === 0){
+ xGrid.value.setCheckboxRow(item, true);
+ }
+ });
+ });
+ }
+ });
+ } else {
+ ElMessage.warning(res.msg);
+ }
+ }).catch(error => {
+ ElMessage.error('鑾峰彇娴佺▼鍗℃暟鎹け璐�');
+ console.error(error);
+ });
+};
+
+//鍒涘缓宸ョ▼
+const addProject = (type) => {
+ const $table = xGrid.value
+ if ($table) {
+ const selectRecords = $table.getCheckboxRecords()
+ if($table.getCheckedFilters().length!==0){
+ ElMessage.error(t('order.msg.pleaseCancelTheFilteringFirst'))
+ return
+ }
+ if (selectRecords.length == 0) {
+ ElMessage.warning(t('reportingWorks.selectProcessCardData'))
+ return;
+ }
+
+ let projectData = ref({
+ projectdetail: selectRecords,
+ userName : username,
+ projectType: type
+ })
+ let inputProject = projectNmae.value
+ if (inputProject == undefined) {
+ inputProject = null
+ }
+ request.post(`/glassOptimize/addProject/${optionVal.value}/${oddNumbers.value}/${inputProject}`, projectData.value).then((res) => {
+ if (res.code == 200 && res.data === "true") {
+ emit('updateState', 1);
+ ElMessage.success(t('basicData.msg.saveSuccess'))
+ selectFlowCardList()
+ getProjectId();
+ }else if(res.data === "false1") {
+ ElMessage.warning("宸ョ▼鍙峰凡瀛樺湪璇烽噸鏂板埛鏂扮晫闈�")
+ } else {
+ ElMessage.warning(res.msg)
+ }
+ })
+
+ }
+}
+
+watch(optionVal, (newVal, oldVal) => {
+ if (newVal) {
+ // 褰撹啘绯绘敼鍙樻椂锛屾洿鏂板伐绋嬪悕绉颁负褰撳墠鑶滅郴鍊�
+ projectNmae.value = newVal;
+
+ // 褰撹啘绯绘敼鍙樻椂锛岃嚜鍔ㄥ埛鏂版暟鎹�
+ selectFlowCardList();
+ }
+}, { flush: 'post' });
+
+const handleRowClassName = ({ row, rowIndex }) => {
+ if (row.patch_state === 1) {
+ return 'high-score';
+ }
+ if (row.occupyState === 0) {
+ return 'high-score2';
+ }
+}
+
+//鎶涘嚭鏂规硶鍒扮埗鐣岄潰
+defineExpose({getProjectId,selectFlowCardList,selectGlassType,getUpdateFlowCardList})
</script>
<template>
- <div style="width: 100%;height: 100%">
- <h1>娴佺▼鍗″垪琛�</h1>
+ <div style="width: 100%;height: 110%; margin-top: -36px">
+ <div>
+ 娴佺▼鍗″垪琛�
+ <span style="margin-left: 140px;font-size: 14px">宸ョ▼缂栧彿锛�</span>
+<!-- <span>{{oddNumbers}}</span>-->
+ <el-input disabled v-model="oddNumbers" style="width: 100px"></el-input>
+<!-- <vxe-input :disabled="isDisabled" placeholder="" v-model="oddNumbers" size="small" style="color:black;"></vxe-input> -->
+ <span style="font-size: 14px">宸ョ▼鍚嶇О锛�</span>
+ <el-input style="width: 150px" placeholder="" v-model="projectNmae" size="small"></el-input>
+ <el-button style="margin-left: 20px" type="primary" :disabled="isButtonDisabledAdd" @click="addProject(1)">鍒涘缓</el-button>
+ <el-button style="margin-left: 20px;" type="primary" :disabled="isButtonDisabledUpdate" @click="addProject(2)">淇敼</el-button>
+ </div>
<vxe-grid
- size="small"
- @filter-change="filterChanged"
- height="100%"
- class="mytable-scrollbar"
- ref="xGrid"
- v-bind="gridOptions"
- v-on="gridEvents"
- >
- <template #num2_filter="{ column, $panel }">
- <div>
- <div v-for="(option, index) in column.filters" :key="index">
- <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')" @change="changeFilterEvent($event, option, $panel)">
- <vxe-option value="0" :label="$t('basicData.unchecked')"></vxe-option>
- <vxe-option value="1" :label="$t('basicData.selected')"></vxe-option>
- </vxe-select>
- </div>
+ ref="xGrid"
+ class="mytable-scrollbar"
+ height="100%"
+ size="small"
+ v-bind="gridOptions"
+ v-on="gridEvents"
+ :row-class-name="handleRowClassName"
+ >
+ <template #num2_filter="{ column, $panel }">
+ <div>
+ <div v-for="(option, index) in column.filters" :key="index">
+ <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')"
+ @change="changeFilterEvent($event, option, $panel)">
+ <vxe-option :label="$t('basicData.unchecked')" value="0"></vxe-option>
+ <vxe-option :label="$t('basicData.selected')" value="1"></vxe-option>
+ </vxe-select>
</div>
- </template>
+ </div>
+ </template>
- <template #num1_filter="{ column, $panel }">
- <div>
- <div v-for="(option, index) in column.filters" :key="index">
- <input
-
- type="type"
- v-model="option.data"
- @keyup.enter.native="$panel.confirmFilter()"
- @input="changeFilterEvent($event, option, $panel)"/>
- </div>
+ <template #num1_filter="{ column, $panel }">
+ <div>
+ <div v-for="(option, index) in column.filters" :key="index">
+ <input type="type" v-model="option.data" @keyup.enter.native="$panel.confirmFilter()" @input="changeFilterEvent($event, option, $panel)"/>
</div>
- </template>
+ </div>
+ </template>
- <template #toolbar_buttons>
- <h1>鑶滅郴绛涢�夛細</h1>
- <el-select
- placeholder="閫夋嫨鑶滅郴"
- style="margin-left:10px; width: 170px "
- ref="getSelect"
- v-model="optionVal"
- clearable
- class="m-2"
- @change="getWorkOrder"
- >
+ <template #toolbar_buttons>
+ <h2>鑶滅郴绛涢�夛細</h2>
+ <el-select v-model="optionVal" clearable default-value="default_city" placeholder="閫夋嫨鑶滅郴"
+ style="width: 120px">
+ <el-option
+ v-for="item in titleSelectJson['processType']"
+ :key="item.id"
+ :label="item.glassType"
+ :value="item.glassType"
+ />
+ </el-select>
+ <el-button :icon="Search" style="margin-left: 20px" type="primary" @click="selectFlowCardList">鏌ヨ</el-button>
+ <vxe-radio-group v-model="radio" style="margin-left: 20px">
+ <vxe-radio content="鍏ㄩ儴" label="1"></vxe-radio>
+ <vxe-radio content="姝e崟" label="2"></vxe-radio>
+ <vxe-radio content="琛ュ崟" label="3"></vxe-radio>
+ </vxe-radio-group>
+ </template>
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- <el-button type="primary" :icon="Search" style="margin-left: 20px">鏌ヨ</el-button>
- <vxe-select style="margin-left: 40px" placeholder="鍏ㄩ儴娴佺▼鍗�" clearable></vxe-select>
- <vxe-select style="margin-left: 20px" placeholder="鍏ㄩ儴椤圭洰" clearable></vxe-select>
- <el-button type="primary" style="margin-left: 10px">绛涢��</el-button>
- </template>
</vxe-grid>
</div>
</template>
-<style scoped>
-
+<style lang="css">
+.high-score {
+ background-color: #d4baba !important;
+}
+.high-score2 {
+ background-color: #a5aec9 !important;
+}
</style>
\ No newline at end of file
--
Gitblit v1.8.0