From 2cc5a1afe8296d148f0a32989395d538e5323a8e Mon Sep 17 00:00:00 2001 From: hdy <1105738590@qq.com> Date: 星期四, 18 一月 2024 16:22:55 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- jcdm-ui/src/views/main/om/productionOrde/planStatistics.vue | 657 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 657 insertions(+), 0 deletions(-) diff --git a/jcdm-ui/src/views/main/om/productionOrde/planStatistics.vue b/jcdm-ui/src/views/main/om/productionOrde/planStatistics.vue new file mode 100644 index 0000000..3ab59dc --- /dev/null +++ b/jcdm-ui/src/views/main/om/productionOrde/planStatistics.vue @@ -0,0 +1,657 @@ +<template> + <div class="app-container"> + <el-card class="box-card"> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label-width="100" label="鐢熶骇閫氱煡鍗�" prop="productName"> + <el-input v-model="queryParams.productionNotice" placeholder="璇疯緭鍏ョ敓浜ч�氱煡鍗�" clearable @keyup.enter.native="handleQuery"/> + </el-form-item> + <el-form-item label-width="80" label="鐢熶骇璁㈠崟" prop="workOrderNo"> + <el-input v-model="queryParams.workOrderNo" placeholder="璇疯緭鍏ョ敓浜ц鍗�" clearable @keyup.enter.native="handleQuery"/> + </el-form-item> + <el-form-item label="鏈哄瀷" prop="typeZ"> + <el-input v-model="queryParams.typeZ" placeholder="璇疯緭鍏ユ満鍨�" clearable @keyup.enter.native="handleQuery"/> + </el-form-item> + <el-form-item style="float: right"> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> + <el-button type="warning" icon="el-icon-copy-document" size="mini" @click="advancedQuery">楂樼骇鏌ヨ</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + </el-form> + <el-form :model="queryParams" ref="queryParams" size="small" :inline="true" v-show="advancedShowSearch" label-width="68px"> + <el-form-item style="margin-left: 14px" label="浜у搧缂栧彿" prop="productCode"> + <el-input v-model="queryParams.productCode" placeholder="璇疯緭鍏ヤ骇鍝佺紪鍙�" clearable @keyup.enter.native="handleQuery"/> + </el-form-item> + </el-form> + </el-card> + + <el-card style="margin-top: 10px" class="box-card"> + <el-row :gutter="10" class="mb8"> + + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + + <el-table border v-loading="loading" :data="productionOrdeList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + <el-table-column label="鐢熶骇閫氱煡鍗曞彿" width="160" align="center" prop="productionNotice"> + </el-table-column> + <el-table-column label="鐢熶骇璁㈠崟" width="160" align="center" prop="workOrderNo"> + </el-table-column> + <el-table-column label="鏈哄瀷" width="160" align="center" prop="typeZ"> + </el-table-column> + <el-table-column label="浜у搧缂栧彿" width="150" align="center" prop="productCode"> + </el-table-column> + <el-table-column label="宸ュ崟鐘舵��" align="center" prop="orderStatus"> + <template slot-scope="scope"> + <dict-tag :options="dict.type.order_state" :value="scope.row.orderStatus"/> + </template> + </el-table-column> + <el-table-column label="闇�姹傛暟閲�" align="center" prop="planQty"> + </el-table-column> + <el-table-column label="宸ヤ綔涓�" align="center"> + </el-table-column> + <el-table-column label="宸插畬鎴�" width="160" align="center" prop="actualQty"> + </el-table-column> + <el-table-column label="宸叉姤搴�" width="160" align="center" prop="scrapQty"> + </el-table-column> + <el-table-column label="瀹屾垚鐜�" width="160" align="center"> + </el-table-column> + <el-table-column label="鍚堟牸鐜�" width="160" align="center"> + </el-table-column> + </el-table> + </el-card> + + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <!-- 娣诲姞鎴栦慨鏀圭敓浜у伐鍗曞璇濇 --> + <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="1000px" append-to-body> + <span slot="title"> + <i class="el-icon-s-order"></i> + {{titleName}} + </span> + <el-form ref="form" inline :model="form" :rules="rules" label-width="80px"> + <el-form-item label="宸ュ崟鍙�" prop="workOrderNo"> + <el-input v-model="form.workOrderNo" placeholder="璇疯緭鍏ョ敓浜ц鍗�" /> + </el-form-item> + <el-form-item label="璁㈠崟缂栧彿" prop="salesOrderCode"> + <el-input v-model="form.salesOrderCode" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�" /> + </el-form-item> + <el-form-item label="浜у搧缂栧彿" prop="productCode"> + <el-input v-model="form.productCode" placeholder="璇烽�夋嫨浜у搧" > + <el-button slot="append" @click="handleSelectProduct" icon="el-icon-search"></el-button> + </el-input> + <ItemSelect ref="itemSelect" @onSelected="onItemSelected" > </ItemSelect> + </el-form-item> + <el-form-item label="浜у搧鍚嶇О" prop="productName"> + <el-input v-model="form.productName" disabled placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" /> + </el-form-item> + <el-form-item label="绉嶇被" prop="productName"> + <el-input v-model="form.typeZ" disabled placeholder="璇疯緭鍏ョ绫�" /> + </el-form-item> + <el-form-item label="瀹為檯鏁伴噺" prop="actualQty"> + <el-input v-model="form.actualQty" placeholder="璇疯緭鍏ュ疄闄呮暟閲�" /> + </el-form-item> + <el-form-item label="杞﹂棿缂栧彿" prop="workshopCode"> + <el-select style="width: 93%" @change="handleSelectChange(form.workshopCode)" v-model="form.workshopCode" placeholder="璇烽�夋嫨杞﹂棿缂栧彿"> + <el-option + v-for="item in options" + :key="item.workshopCode" + :label="item.workshopName" + :value="item.workshopCode"> + </el-option> + </el-select> + </el-form-item> + <el-form-item style="margin-left: -15px" label="浜х嚎缂栧彿" prop="lineCode"> + <el-select style="width: 93%" v-model="form.lineCode" placeholder="璇烽�夋嫨浜х嚎缂栧彿"> + <el-option + v-for="item in lineOptions" + :key="item.lineCode" + :label="item.lineName" + :value="item.lineCode"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="宸ヨ壓娴佺▼" prop="routeCode"> + <el-input v-model="form.routeCode" disabled placeholder="璇疯緭鍏ュ伐鑹烘祦绋�" /> + </el-form-item> + <el-form-item label="浜у搧BOM" prop="bomCode"> + <el-input v-model="form.bomCode" disabled placeholder="璇疯緭鍏ヤ骇鍝丅OM" /> + </el-form-item> + <el-form-item label="宸ヨ壓閰嶆柟" prop="recipeCode"> + <el-input v-model="form.recipeCode" placeholder="璇疯緭鍏ュ伐鑹洪厤鏂�" /> + </el-form-item> + <el-form-item label="璁″垝鏁伴噺" prop="planQty"> + <el-input v-model="form.planQty" placeholder="璇疯緭鍏ヨ鍒掓暟閲�" /> + </el-form-item> + <el-form-item label="闇�姹傛棩鏈�" prop="demandDate"> + <el-date-picker style="width: 88%" clearable + v-model="form.demandDate" + type="date" + value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨闇�姹傛棩鏈�"> + </el-date-picker> + </el-form-item> + <el-form-item style="margin-left: -30px" label="澶囨敞" prop="remarks"> + <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" /> + </el-form-item> + <el-row> + <el-col :span="12"> + <el-form-item style="margin-left: 10px" label-width="120" label="璁″垝寮�濮嬫椂闂�" prop="planStartTime"> + <el-date-picker clearable + v-model="form.planStartTime" + type="date" + value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨璁″垝寮�濮嬫椂闂�"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item style="margin-left: 76px" label-width="120" label="璁″垝缁撴潫鏃堕棿" prop="planEndTime"> + <el-date-picker clearable + v-model="form.planEndTime" + type="date" + value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨璁″垝缁撴潫鏃堕棿"> + </el-date-picker> + </el-form-item> + </el-col> + + </el-row> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + + <el-dialog v-dialogpop-up :title="title" :visible.sync="Createopen" width="400px" append-to-body> + <span slot="title"> + <i class="el-icon-s-order"></i> + {{titleName}} + </span> + <el-form ref="form" inline :model="form" :rules="CreateRules" label-width="80px"> + <el-form-item label="绉嶇被" prop="typeZ"> + <el-input disabled v-model="form.typeZ" placeholder="璇疯緭鍏ョ绫�" /> + </el-form-item> + <el-form-item label="鏃ユ湡" prop="dateTime"> + <el-date-picker clearable + v-model="form.dateTime" + type="date" + value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨鏃ユ湡" @input="handleCodeChange"> + </el-date-picker> + </el-form-item> + <el-form-item class="hidden-form-item" label="鏃ユ湡瑙勫垯" prop="dateTimeRule"> + <el-input v-model="form.dateTimeRule"/> + </el-form-item> + <el-form-item label="璧峰缂栧彿" prop="startCode"> + <el-input type="number" :maxlength="3" :pattern="'[0-9]{3}'" v-model="form.startCode" placeholder="璇疯緭鍏ヨ捣濮嬬紪鍙�" @input="handleCodeChange"/> + </el-form-item> + <el-form-item label="璧锋缂栧彿" prop="startEndCode"> + <el-input disabled v-model="form.startEndCode"/> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitFormForBoxCode">纭� 瀹�</el-button> + <el-button @click="cancel">鍙� 娑�</el-button> + </div> + </el-dialog> + + </div> +</template> + +<script> +import { listLineInfo } from "@/api/main/bs/lineInfo/lineInfo"; +import { listWorkshop } from "@/api/main/bs/workshop/workshop"; +import { listProductBom } from "@/api/main/bs/ProductBom/ProductBom"; +import { listTechnologyRoute} from "@/api/main/bs/technologyRoute/technologyRoute"; +import ItemSelect from "@/components/itemSelect/single.vue"; +import { addOrderSchedulingForBoxCode,getProductionNotice, upDownMove, listProductionOrde, getProductionOrde, delProductionOrde, addProductionOrde, updateProductionOrde } from "@/api/main/om/productionOrde/productionOrde"; +import { + listOrderScheduling, + getOrderScheduling, + delOrderScheduling, + addOrderScheduling, + updateOrderScheduling, + generateNumbers +} from "@/api/main/bs/orderScheduling/orderScheduling"; +import {listMaterial} from "@/api/main/bs/material/material"; +import {listModelNumber} from "@/api/main/bs/modelNumber/modelNumber"; + +export default { + name: "ProductionOrde", + dicts: ['order_state','year','month','day'], + components: { + ItemSelect , + }, + data() { + return { + titleName: '', + options: [], + lineOptions: [], + outputArray: [], + showFlag:false, + advancedShowSearch: false, + workOrder: { + status: 'ss' + }, + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + move: true, + selectedRowIndex: -1, // 瀛樺偍閫変腑琛岀殑绱㈠紩 + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 鐢熶骇宸ュ崟琛ㄦ牸鏁版嵁 + productionOrdeList: [], + // 寮瑰嚭灞傛爣棰� + title: "", + // 鏄惁鏄剧ず寮瑰嚭灞� + open: false, + Createopen: false, + // 鏌ヨ鍙傛暟 + queryParams: { + pageNum: 1, + pageSize: 10, + workOrderNo: null, + salesOrderCode: null, + productCode: null, + productName: null, + workshopCode: null, + lineCode: null, + routeCode: null, + bomCode: null, + recipeCode: null, + orderStatus: "2", + custom: null, + marketAreaCode: null, + softwareVersionCode: null, + productCompanyCode: null, + frontEndId: 0, + idNums: null, + typeZ: null, + flag: null, + adds:null, + productionNotice: null, + }, + materialQueryParams: { + pageNum: 1, + pageSize: 10, + materialCode: null, + }, + + // 琛ㄥ崟鍙傛暟 + form: {}, + updateStatusParameter: { + id: null, + orderStatus: null + }, + // 琛ㄥ崟鏍¢獙 + rules: { + id: [ + { required: true, message: "ID涓嶈兘涓虹┖", trigger: "blur" } + ], + }, + CreateRules: { + day: [ + { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" } + ], + month: [ + { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" } + ], + year: [ + { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" } + ], + dateTime: [ + { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" } + ], + startCode: [ + { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" } + ], + }, + change: { + day: '', + month: '', + year: '', + }, + markNo: '', + }; + }, + created() { + this.getList(); + this.initWorkshop(); + }, + methods: { + //鏃ユ湡鎴栧紑濮嬬紪鍙疯緭鍏ユ椂 + handleCodeChange(data){ + let dateTime = this.form.dateTime; + let planQty = this.form.planQty; + let startCode = this.form.startCode + if(dateTime !== null && dateTime !== undefined + && startCode !== null && startCode !== undefined) { + let dateTimes = dateTime.split("-"); + let year = dateTimes[0]; + let month = dateTimes[1]; + let day = dateTimes[2]; + let dictYear = this.dict.type.year; + let dictMonth = this.dict.type.month; + let startCode = this.form.startCode + let dateTimeRule = ""; + + //骞� + for (let i = 0; i < dictYear.length; i++) { + if (year === dictYear[i].label) { + dateTimeRule = dictYear[i].value + // this.form.startEndCode = startEndCode; + } + } + //鏈� + for (let i = 0; i < dictMonth.length; i++) { + if (month === dictMonth[i].label) { + dateTimeRule = dateTimeRule + dictMonth[i].value; + } + } + //鏃� + dateTimeRule = dateTimeRule + day; + dateTimeRule = dateTimeRule + this.markNo; + this.form.dateTimeRule = dateTimeRule; + //璧嬪�艰捣濮嬬紪鐮� + this.form.startEndCode = dateTimeRule + startCode + "----" + dateTimeRule + String(parseInt(startCode) + parseInt(planQty)-1).padStart(3, '0') ; + } + }, + + getProductionNotice(){ + getProductionNotice(this.queryParams).then(response => { + this.$modal.msgSuccess("鎺ユ敹鎴愬姛"); + this.queryParams = {} + this.getList(); + }); + }, + //鏁扮粍鐢熸垚 + changeDay(day){ + this.change.day = day; + let adds =this.form.typeZ+this.change.year+this.change.month+this.change.day+this.form.actualQty; + this.form.adds = adds + }, + changeMonth(day){ + this.change.month = day; + let adds =this.form.typeZ+this.change.year+this.change.month+this.change.day+this.form.actualQty; + this.form.adds = adds + }, + changeYear(day){ + this.change.year = day; + let adds =this.form.typeZ+this.change.year+this.change.month+this.change.day+this.form.actualQty; + this.form.adds = adds + }, + moveUp(row, val){ + console.log(val) + const ids = row.id || this.ids + let str = JSON.stringify(ids); + let num = BigInt(str.replace(/[\[\]]/g, '')); + this.queryParams.frontEndId = num + this.queryParams.idNums = ids + this.queryParams.flag = val + upDownMove(this.queryParams).then(response => { + this.$modal.msgSuccess("绉诲姩鎴愬姛"); + this.getList(); + }); + }, + initWorkshop(){ + listWorkshop(this.queryParams).then(response => { + this.options = response.rows; + }); + }, + // 鍦ㄨ繖閲岀紪鍐欏鐞嗛�変腑浜嬩欢鐨勯�昏緫 + + + //鐗╂枡閫夋嫨寮瑰嚭妗� + onItemSelected(obj){ + if(obj !== undefined && obj !== null){ + let productCode = obj.materialCode; + this.form.productCode = productCode; + this.form.productName = obj.materialName; + this.form.typeZ = obj.typeZ; + this.typeL = obj.typeZ; + this.queryParams.productCode = productCode; + this.queryParams.typeZ = typeZ + listTechnologyRoute(this.queryParams).then(response => { + this.form.routeCode = response.rows[0].routeCode; + }); + listProductBom(this.queryParams).then(response => { + this.form.bomCode = response.rows[0].bomCode; + }); + } + }, + handleSelectProduct(){ + this.$refs.itemSelect.showFlag = true; + }, + advancedQuery(){ + this.advancedShowSearch = (this.advancedShowSearch) ? this.advancedShowSearch = false : this.advancedShowSearch = true; + }, + handleCommand(status,id) { + console.log(status) + this.updateStatusParameter.id = id; + this.updateStatusParameter.orderStatus = status; + updateProductionOrde(this.updateStatusParameter).then(response => { + this.$modal.msgSuccess("淇敼鎴愬姛"); + this.open = false; + this.getList(); + }); + }, + /** 鏌ヨ鐢熶骇宸ュ崟鍒楄〃 */ + getList() { + this.loading = true; + listProductionOrde(this.queryParams).then(response => { + this.productionOrdeList = response.rows; + this.total = response.total; + this.loading = false; + }); + }, + // 鍙栨秷鎸夐挳 + cancel() { + this.open = false; + this.Createopen = false; + this.reset(); + }, + // 琛ㄥ崟閲嶇疆 + reset() { + this.form = { + id: null, + workOrderNo: null, + salesOrderCode: null, + productCode: null, + productName: null, + workshopCode: null, + lineCode: null, + routeCode: null, + bomCode: null, + recipeCode: null, + planQty: null, + actualQty: null, + badQty: null, + scrapQty: null, + repairQty: null, + actualOnlineQty: null, + onlineCompletionMark: null, + demandDate: null, + planStartTime: null, + planEndTime: null, + actualStartTime: null, + actualEndTime: null, + serialNumber: null, + orderStatus: null, + createTime: null, + updateTime: null, + createUser: null, + updateUser: null, + remarks: null, + streamNumber: null, + custom: null, + marketAreaCode: null, + softwareVersionCode: null, + productCompanyCode: null, + spareField1: null, + spareField2: null, + spareField3: null, + typeZ: null, + spareField4: null, + adds:null + }; + this.resetForm("form"); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.resetForm("queryForm"); + this.handleQuery(); + }, + // 澶氶�夋閫変腑鏁版嵁 + handleSelectionChange(selection) { + this.ids = selection.map(item => item.id) + this.move = selection.length!==1 + if(!selection.length){ + this.single = true + this.multiple = true + }else { + if(selection[0].orderStatus === '1' && selection.length === 1){ + this.single = false + this.multiple = false + } + } + + }, + /** 鏂板鎸夐挳鎿嶄綔 */ + handleAdd() { + this.initWorkshop(); + this.reset(); + this.open = true; + this.titleName = "娣诲姞鐢熶骇璁㈠崟"; + }, + /** 鍚屾鎸夐挳鎿嶄綔 */ + CreatehandleUpdate(Row) { + this.initWorkshop(); + this.reset(); + const id = Row.id || this.ids + getProductionOrde(id).then(response => { + console.log(response.data) + console.log(response.data.productCode) + this.materialQueryParams.materialCode = response.data.productCode; + listMaterial(this.materialQueryParams).then(response => { + this.markNo = response.rows[0].mark + }); + this.form = response.data; + this.Createopen = true; + this.titleName = "鐢熸垚绠变綋鏉$爜"; + // return Array.from({ length: parseInt(this.actualQty) }, (_, index) => index + 1); + }); + }, + /** 淇敼鎸夐挳鎿嶄綔 */ + handleUpdate(row) { + this.initWorkshop(); + this.reset(); + const id = row.id || this.ids + getProductionOrde(id).then(response => { + console.log(response.data) + this.form = response.data; + this.open = true; + this.titleName = "淇敼鐢熶骇璁㈠崟"; + }); + }, + /** 鎻愪氦鎸夐挳 */ + submitForm() { + this.$refs["form"].validate(valid => { + if (valid) { + if (this.form.id != null) { + updateProductionOrde(this.form).then(response => { + this.$modal.msgSuccess("淇敼鎴愬姛"); + this.open = false; + this.getList(); + }); + } else { + addProductionOrde(this.form).then(response => { + this.$modal.msgSuccess("鏂板鎴愬姛"); + this.open = false; + this.getList(); + }); + } + } + }); + }, + + /** 鐢熸垚绠变綋鏉$爜鎻愪氦鎸夐挳 */ + submitFormForBoxCode() { + let startCode = parseInt(this.form.startCode); + let queryParams = { + model: this.form.typeZ, + modelDate: this.form.dateTimeRule, + } + listModelNumber(queryParams).then(response => { + if(response.rows.length === 0){ + this.saveBoxCode() + }else { + let maxNumValue = response.rows[0].maxnumValue; + if(startCode<maxNumValue){ + this.$message.error('鏂板缓鐨勪笉鑳芥瘮鏌ヨ鍑虹殑灏�'); + return; + }else { + this.saveBoxCode() + } + } + }); + }, + + saveBoxCode(){ + this.$refs["form"].validate(valid => { + if (valid) { + if (this.form.id != null) { + addOrderSchedulingForBoxCode(this.form).then(response => { + this.$modal.msgSuccess("淇濆瓨鎴愬姛"); + this.Createopen = false; + this.getList(); + }); + } + } + }); + }, + + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete(row) { + const ids = row.id || this.ids; + this.$modal.confirm('鏄惁纭鍒犻櫎鐢熶骇璁㈠崟缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() { + return delProductionOrde(ids); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }).catch(() => {}); + }, + /** 瀵煎嚭鎸夐挳鎿嶄綔 */ + handleExport() { + this.download('om/productionOrde/export', { + ...this.queryParams + }, `productionOrde_${new Date().getTime()}.xlsx`) + }, + + } +}; +</script> +<style lang="scss" scoped> +.hidden-form-item { + display: none; +} +</style> -- Gitblit v1.9.3