From c18b61164fa4d9dcbeaa471ba3043334c576b1bc Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 28 二月 2024 17:25:18 +0800
Subject: [PATCH] 主生产计划
---
src/views/plan/customerorder/index.vue | 413 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 275 insertions(+), 138 deletions(-)
diff --git a/src/views/plan/customerorder/index.vue b/src/views/plan/customerorder/index.vue
index c2a7289..e69e1ae 100644
--- a/src/views/plan/customerorder/index.vue
+++ b/src/views/plan/customerorder/index.vue
@@ -8,26 +8,11 @@
:prelang="prelang"
:options="options"
:ajaxFun="ajaxFun"
+ :toolbarMaxLength="4"
:paramArr="type"
ref="customerOrderTable"
>
<template #toolbar>
- <!-- <el-dropdown
- v-if="permissions.customerorder_state_change"
- @command="handleCommand"
- >
- <el-button>
- 鐘舵�佹敼鍙�<i class="el-icon-arrow-down el-icon--right"></i>
- </el-button>
- <el-dropdown-menu slot="dropdown">
- <el-dropdown-item
- :command="item.command"
- v-for="item in stateTagArr"
- :disabled="item.disabled">
- {{ item.label }}
- </el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown> -->
<el-dropdown
v-if="permissions.customerorder_doc_relate"
@command="documentHandle"
@@ -38,10 +23,10 @@
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
+ :key="index"
:command="item.command"
- v-for="item in documentTagArr"
- :disabled="item.disabled"
- >
+ v-for="(item,index) in documentTagArr"
+ :disabled="item.disabled">
{{ item.label }}
</el-dropdown-item>
</el-dropdown-menu>
@@ -57,42 +42,21 @@
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
+ :key="index"
:command="item.command"
- v-for="item in commitStateTagArr"
+ v-for="(item,index) in commitStateTagArr"
:disabled="item.disabled"
>{{ item.label }}</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
- <!-- <el-button
- v-if="permissions.customerorder_push_otc"
- style="margin-left:10px;"
- type="primary"
- @click="pushOtc"
- >鎺ㄩ�丒RP</el-button
- > -->
- <!-- <el-button
- style="margin-left:10px;"
- type="primary"
- @click="importOutPutBatch"
- >瀵煎叆浜у嚭鎵规</el-button
- > -->
<el-button
style="margin-left:10px;"
type="primary"
- @click="exportStandBook"
- >瀵煎嚭鍙拌处</el-button
- >
- <el-button
- v-if="permissions.plan_customerorder_return"
- style="margin-left:10px;"
- type="primary"
- @click="returnOrder"
- >璁㈠崟閫�鍥�</el-button
- >
+ @click="()=>exportDialogVisible=true"
+ >瀵煎嚭鍙拌处</el-button>
</template>
</ttable>
-
<!-- 寮圭獥, 鏃ユ湡閫夋嫨 -->
<ConfirmPullCustomerorder
v-if="showPullCustomerOrderVisible"
@@ -189,6 +153,26 @@
</span>
<span slot="footer" class="dialog-footer"> </span>
</el-dialog>
+ <!-- 瀵煎嚭 -->
+ <el-dialog title="瀵煎嚭鍙拌处" :visible.sync="exportDialogVisible" width="20%">
+ <div style="display: flex;justify-content: center">
+ <el-form :model="dataForm" :inline="true" :rules="dataRule" ref="exportForm" class="l-mes">
+ <el-form-item label="鏃ユ湡" prop="exportTime">
+ <el-date-picker
+ v-model="dataForm.exportTime"
+ type="datetime"
+ style="width:100%"
+ placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+ value-format="yyyy-MM-dd HH:mm:ss">
+ </el-date-picker>
+ </el-form-item>
+ </el-form>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="exportDialogVisible=false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="exportStandBook">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
<!-- 绠辩爜淇℃伅瀵煎嚭 -->
<el-dialog
title="绠辩爜淇℃伅瀵煎嚭"
@@ -258,10 +242,35 @@
<el-button type="primary" @click="startSync">纭� 瀹�</el-button>
</span>
</el-dialog>
+ <el-dialog
+ title="宸插叧鑱旈攢鍞鍗�"
+ :visible.sync="showInterrelatedOrderDialog"
+ width="60%">
+ <el-table border height="100" :data="interrelatedOrderData">
+ <el-table-column type="index" align="center" label="搴忓彿"></el-table-column>
+ <el-table-column prop="contractNo" show-overflow-tooltip align="center" label="鍚堝悓缂栧彿"></el-table-column>
+ <el-table-column prop="entityName" show-overflow-tooltip align="center" label="宸ョ▼鍚嶇О"></el-table-column>
+ <el-table-column prop="sourceId" show-overflow-tooltip align="center" label="娣诲姞鏉ユ簮">
+ <template scope="scope">
+ <el-tag v-if="scope.row.sourceId == 0" type="success">鍚屾</el-tag>
+ <el-tag v-if="scope.row.sourceId == 1" type="info">鎵嬪姩</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="placeOrderDate" show-overflow-tooltip align="center" label="涓嬪崟鏃ユ湡"></el-table-column>
+ <el-table-column prop="customerName" show-overflow-tooltip align="center" label="瀹㈡埛鍚嶇О"></el-table-column>
+ <el-table-column prop="coState" min-width="100" show-overflow-tooltip align="center" label="閿�鍞鍗曠姸鎬�"></el-table-column>
+ <el-table-column prop="partNo" show-overflow-tooltip align="center" label="浜у搧缂栧彿"></el-table-column>
+ <el-table-column prop="productName" show-overflow-tooltip align="center" label="浜у搧鍚嶇О"></el-table-column>
+ <el-table-column prop="productType" show-overflow-tooltip align="center" label="闅跺睘鍝佺墝"></el-table-column>
+ <el-table-column prop="otcUnit" show-overflow-tooltip align="center" label="鍗曚綅"></el-table-column>
+ <el-table-column prop="buyQtyDue" show-overflow-tooltip align="center" label="鏁伴噺"></el-table-column>
+ </el-table>
+ </el-dialog>
</div>
</template>
<script>
+import {interrelatedOrder,getInterrelatedOrder,checkHanderOrder} from '@/api/plan/customerOrderInterrelated'
import ConfirmPullCustomerorder from './confirm-pull-customerorder'
import TableForm from './customerorder-form'
import TableFormDEesc from './customerorder-form-desc'
@@ -289,7 +298,8 @@
exportCustomerOrder,
exportCustomerOrderSplit,
syncOrder,
- dropByContractNo
+ dropByContractNo,
+ downloadWordFile
} from '../../../api/plan/customerorder'
import DocumentTable from '@/views/common/document.vue'
import { remote } from '@/api/admin/dict'
@@ -301,10 +311,17 @@
export default {
data() {
return {
+ interrelatedOrderId: null,
+ interrelatedOrderData: [],
+ showInterrelatedOrderDialog: false,
+ uniqueStateArr: [],
dataForm: {
- selectTime: null
+ selectTime: null,
+ exportTime: null
},
- dataRule: {},
+ dataRule: {
+ exportTime:[{required:true,message:'瀵煎嚭鏃ユ湡涓嶈兘涓虹┖',trigger:'change'}]
+ },
pickerOptions: {
onPick: ({ maxDate, minDate }) => {
if (minDate && this.pickerMinDate) {
@@ -323,6 +340,7 @@
return false
}
},
+ exportDialogVisible: false,
syncDateVisible: false,
syncDate: [],
showCustomerorderReturn: false,
@@ -411,7 +429,7 @@
isRefresh: true, // 鏄惁鏄剧ず鍒锋柊鎸夐挳
isShowHide: true, // 鏄惁鏄剧ず鏄惧奖鎸夐挳H
isSearch: true, // 楂樼骇鏌ヨ鎸夐挳
- defaultOrderBy: { column: 'createTime', direction: 'desc' },
+ defaultOrderBy: { column: 'placeOrderDate', direction: 'desc' },
cancelRunCreated: true
},
table: {
@@ -450,7 +468,7 @@
searchInfoType: 'text'
},
{
- minWidth: '120',
+ minWidth: '100',
prop: 'sourceId',
label: '娣诲姞鏉ユ簮',
isTag: true,
@@ -508,7 +526,7 @@
{
minWidth: '120',
prop: 'isAudit',
- label: '瀹℃牳鐘舵��',
+ label: 'PLM瀹℃牳鐘舵��',
sort: true,
isTrue: true,
isSearch: true,
@@ -518,15 +536,19 @@
return this.isAuditList
}
},
- // {
- // minWidth: '80',
- // prop: 'sourceId',
- // label: '璁㈠崟鏉ユ簮',
- // sort: true,
- // isTrue: true,
- // isSearch: true,
- // searchInfoType: 'text'
- // },
+ {
+ minWidth: '120',
+ prop: 'isPass',
+ label: '瀹℃牳閫氳繃鐘舵��',
+ sort: true,
+ isTrue: true,
+ isSearch: true,
+ searchInfoType: 'select',
+ formatter: this.checkIsPass,
+ optList: () => {
+ return this.isPassList
+ }
+ },
{
minWidth: '120',
width: '100px',
@@ -551,7 +573,7 @@
minWidth: '120',
width: '100px',
prop: 'productType',
- label: '浜у搧绫诲瀷',
+ label: '闅跺睘鍝佺墝',
isTrue: true,
isSearch: true,
searchInfoType: 'text'
@@ -666,7 +688,26 @@
// fun: this.packageExportHandle
// },
{
- text: '浣滃簾',
+ text: '瀹℃牳',
+ type: 'text',
+ size: 'small',
+ fun: this.checkHandOrder,
+ showFun: (row)=>{return row.sourceId==='1'},
+ show: {
+ val: [
+ false,
+ ],
+ key: 'isPass'
+ }
+ },
+ {
+ text: '宸插叧鑱旇鍗�',
+ type: 'text',
+ size: 'small',
+ fun: this.showInterrelatedOrder,
+ },
+ {
+ text: '鍒犻櫎',
type: 'text',
size: 'small',
fun: this.cancelHandle,
@@ -684,8 +725,8 @@
operatorConfig: {
fixed: 'right',
label: '鎿嶄綔',
- width: 100,
- minWidth: 100
+ width: 200,
+ minWidth: 200
}
},
addOrUpdateVisible: false,
@@ -745,10 +786,10 @@
],
sourceIdList: [{
label: '鍚屾',
- value: '0'
+ value: "0"
},{
label: '鎵嬪姩',
- value: '1'
+ value: "1"
}],
stockVisible: false,
partName: null,
@@ -791,7 +832,8 @@
}
],
showSalesPartBatch: false,
- addOrUpdateEescVisible: false
+ addOrUpdateEescVisible: false,
+ isPassList: [{label:'鏈�氳繃',value: false},{label: '閫氳繃',value: true}]
}
},
components: {
@@ -811,6 +853,11 @@
...mapGetters(['permissions'])
},
watch: {
+ exportDialogVisible(newVal) {
+ if (!newVal) {
+ this.$refs.exportForm.resetFields()
+ }
+ },
coState: {
handler(newValue, oldValue) {
if (newValue) {
@@ -818,6 +865,17 @@
}
},
immediate: true
+ },
+ interrelatedOrderId(newVal){
+ if(newVal){
+ getInterrelatedOrder(newVal).then(res=>{
+ if(res.status===200){
+ this.interrelatedOrderData = res.data.data
+ }
+ }).catch(error=>{
+ console.error(error)
+ })
+ }
}
},
mounted() {
@@ -826,36 +884,6 @@
created() {
// this.getManufactureAttrs()
this.getTitles()
- /**
- * {
- text: '鑾峰彇閿�鍞鍗�',
- type: 'primary',
- fun: this.pullCustomerOrder,
- disabled: false,
- permitArr: []
- },
- {
- text: '鑾峰彇IFS琛屽彿',
- type: 'primary',
- fun: this.pullIfsLineNo,
- disabled: false,
- permitArr: [],
- loading: false
- },
- {
- text: '鎻愪氦瀹℃牳',
- type: 'primary',
- fun: this.auditCustomerOrder,
- disabled: false,
- permitArr: [],
- loading: false
- },
- {
- text: '涓荤敓浜ц鍒�',
- disabled: false,
- fun: this.masterPlanHandle
- }
- */
this.table.toolbar.push({
text: '鏂板閿�鍞鍗�',
type: 'primary',
@@ -863,14 +891,6 @@
disabled: false,
permitArr: []
})
- // this.table.toolbar.push({
- // text: '鍚屾ERP',
- // type: 'primary',
- // fun: this.syncERP,
- // loading: false,
- // disabled: false,
- // permitArr: []
- // })
if (this.permissions.customerorder_from_otc) {
this.table.toolbar.push({
text: '鑾峰彇閿�鍞鍗�',
@@ -880,43 +900,125 @@
permitArr: []
})
}
- // if (this.permissions.customerorder_ifs_line) {
- // this.table.toolbar.push({
- // text: '鑾峰彇ERP琛屽彿',
- // type: 'primary',
- // fun: this.pullIfsLineNo,
- // disabled: false,
- // permitArr: [],
- // loading: false
- // })
- // }
if (this.permissions.customerorder_submit_oa) {
- // this.table.toolbar.push({
- // text: '鎻愪氦瀹℃牳',
- // type: 'primary',
- // fun: this.auditCustomerOrder,
- // disabled: false,
- // permitArr: [],
- // loading: false
- // })
+ this.table.toolbar.push({
+ text: '鎻愪氦瀹℃牳',
+ type: 'primary',
+ fun: this.auditCustomerOrder,
+ disabled: false,
+ permitArr: [],
+ loading: false
+ })
}
if (this.permissions.customerorder_set_salesparts) {
this.table.toolbar.push({
text: '璁剧疆閿�鍞欢',
type: 'primary',
fun: this.setSalesPart,
- disabled: false
+ disabled: false,
+ permitArr: []
})
}
+ this.table.toolbar.push({
+ text: '涓嬭浇Word',
+ disabled: false,
+ type: 'primary',
+ fun: this.downloadWord,
+ permitArr: ['03plan','04planed'],
+ })
+ this.table.toolbar.push({
+ text: '鍏宠仈璁㈠崟',
+ disabled: false,
+ type: 'primary',
+ fun: this.interrelatedOrderFun,
+ permitArr: [],
+ })
if (this.permissions.customerorder_create_masterplan) {
this.table.toolbar.push({
text: '涓荤敓浜ц鍒�',
disabled: false,
- fun: this.masterPlanHandle
+ fun: this.masterPlanHandle,
+ permitArr: []
})
}
},
methods: {
+ checkHandOrder(val){
+ this.$confirm('纭瀹℃牳閫氳繃璇ラ攢鍞鍗曞悧?', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ checkHanderOrder(val.id).then(res=>{
+ if(res.status===200){
+ this.$message.success("瀹℃牳閫氳繃")
+ this.getData()
+ }
+ }).catch(error=>{
+ console.error(error)
+ })
+ }).catch(() => {});
+ },
+ interrelatedOrderFun(){
+ if(this.multipleSelection.length!=2){
+ this.$message.error("璇烽�夋嫨涓ゆ潯閿�鍞鍗�")
+ return
+ }
+ let autoId = null
+ let handId = null
+ this.multipleSelection.forEach(ele=>{
+ if(ele.sourceId==0){
+ autoId = ele.id
+ }else if(ele.sourceId==1){
+ handId = ele.id
+ }
+ })
+ if(autoId==null || handId==null){
+ this.$message.error("娣诲姞鏉ユ簮椤讳负鎵嬪姩鍜屽悓姝�")
+ return
+ }
+ interrelatedOrder({
+ customerOrderAutoId: autoId,
+ customerOrderHandId: handId
+ }).then(res=>{
+ if(res.status===200){
+ this.$message.success("鍏宠仈鎴愬姛")
+ }
+ }).catch(error=>{
+ console.error(error)
+ })
+ },
+ //灞曠ず宸插叧鑱旇鍗�
+ showInterrelatedOrder(currentOrder){
+ this.interrelatedOrderId = currentOrder.id
+ this.showInterrelatedOrderDialog = true
+ },
+
+ //涓嬭浇word
+ downloadWord(){
+ let ids = this.multipleSelection.map(ele=>ele.id)
+ if(ids.length<1){
+ this.$message.error("璇烽�夋嫨涓�鏉℃暟鎹�")
+ return
+ }
+ downloadWordFile(ids).then(response=>{
+ // 澶勭悊杩斿洖鐨勬枃浠舵祦
+ const blob = response.data
+ const link = document.createElement('a')
+ link.href = URL.createObjectURL(blob)
+ const disposition = response.headers["content-disposition"]
+ let temp = disposition.substring(disposition.lastIndexOf('=') + 1)
+ link.download = decodeURI(temp)
+ document.body.appendChild(link)
+ link.click()
+ window.setTimeout(function() {
+ URL.revokeObjectURL(blob)
+ document.body.removeChild(link)
+ }, 0)
+ }).catch(error=>{
+ console.error(error);
+ })
+ },
getOtcPartSyncOptionList() {
return this.otcPartSyncOptionList
},
@@ -925,7 +1027,7 @@
queryParam.push(
Object.assign({
prop: 'coState',
- searchInfoType: 'select',
+ searchInfoType: 'select'
// propVal: '01partUnCheck'
// propVal: '02technologyUnCheck'
})
@@ -946,7 +1048,6 @@
},
// 鍒涘缓涓荤敓浜ц鍒�
masterPlanHandle() {
- console.log(this.multipleSelection);
if (this.multipleSelection && this.multipleSelection.length > 0) {
if (this.judgeCoState(this.multipleSelection)) {
// 鍒ゆ柇涓�涓嬪墿浣欐暟閲忔槸鍚﹀ぇ浜�0
@@ -981,6 +1082,18 @@
} else {
this.$message.error('璇烽�夋嫨閿�鍞鍗�')
}
+ },
+ checkIsPass(row, column, cellValue){
+ this.isPassList.forEach((obj) => {
+ if (obj.value === cellValue) {
+ if(obj.value){
+ cellValue = "<span style='color:#34BD66;'>"+obj.label+"</span>"
+ }else{
+ cellValue = "<span style='color:#E84738;'>"+obj.label+"</span>"
+ }
+ }
+ })
+ return cellValue
},
formatDutyDate(row, column, cellValue) {
if (cellValue) {
@@ -1063,15 +1176,15 @@
let flag = true
const ids = []
this.multipleSelection.forEach((item) => {
- if (item.salesPartNo != null && item.salesPartNo !== '') {
+ if (item.partNo != null && item.partNo !== '') {
ids.push(item.id)
} else {
flag = false
}
})
if (flag) {
- checkOA(this.multipleSelection.map((e) => e.id)).then((res) => {
- console.log(res)
+
+ checkOA(this.multipleSelection.map((e) => e.id),{}).then((res) => {
if (!res.data.data.success) {
this.$confirm(`${res.data.data.message}`, '鎻愮ず', {
confirmButtonText: '纭畾',
@@ -1120,7 +1233,6 @@
// 绠辩爜淇℃伅瀵煎嚭
packageExportHandle(row) {
- console.log(row.otcQuantity)
if (row.otcQuantity) {
this.packageExport.visible = true
this.packageExport.form = {
@@ -1157,13 +1269,13 @@
},
// 浣滃簾
cancelHandle(row) {
- this.$confirm('鏄惁纭浣滃簾閿�鍞鍗曞彿涓�' + row.customerOrderNo + '鎻愮ず', {
+ this.$confirm('纭浣滃簾id涓恒��' + row.id + '銆戠殑鏁版嵁?','鎻愮ず' , {
confirmButtonText: '纭畾',
cancelButtonText: '鍙栨秷',
closeOnClickModal: false,
type: 'warning'
}).then(() => {
- dropByContractNo(row.customerOrderNo).then((res) => {
+ dropByContractNo({id:row.id}).then((res) => {
if (res.data.code === 0) {
this.$message.success('浣滃簾鎴愬姛')
this.getData()
@@ -1234,6 +1346,21 @@
this.stateTagArr[i].disabled = false
} else {
this.stateTagArr[i].disabled = true
+ }
+ }
+ // 寰幆琛ㄥご鎸夐挳锛屽垽鏂瘡涓寜閽殑permitArr鏄惁瀹屽叏鍖呭惈閫変腑鐘舵�侊紝鑻ュ畬鍏ㄥ寘鍚紝鍒欐寜閽寒锛屽惁鍒欐寜閽伆
+ var toolbar = this.table.toolbar
+ for (var j = 0; j < toolbar.length; j++) {
+ if (
+ uniqueStateArr.every((val) =>
+ toolbar[j].permitArr.length <= 0
+ ? true
+ : toolbar[j].permitArr.includes(val)
+ )
+ ) {
+ toolbar[j].disabled = false
+ } else {
+ toolbar[j].disabled = true
}
}
this.multipleSelection = val
@@ -1411,6 +1538,10 @@
} else {
if (this.judgeCoState(this.multipleSelection)) {
if (event == 'RELEVANCE') {
+ if(!this.multipleSelection[0].isPass){
+ this.$message.error("璇峰厛瀹℃牳閫氳繃锛屽啀鍏宠仈宸ヨ壓鏂囦欢")
+ return
+ }
const firstPartNo = this.multipleSelection[0].partNo
this.multipleSelection.forEach((item) => {
if (item.isDocument) {
@@ -1549,7 +1680,6 @@
},
// 瀵煎嚭鍙拌处
exportStandBook() {
- // console.log(this.$refs.customerOrderTable.getQueryParam(),"SSS")
// if (this.multipleSelection.length > 0) {
// let ids = ''
// this.multipleSelection.forEach((item) => {
@@ -1574,11 +1704,18 @@
// } else {
// this.$message.error('璇烽�夋嫨鑷冲皯涓�鏉¢攢鍞鍗�')
// }
- exportCustomerOrder(this.$refs.customerOrderTable.getQueryParam())
- .then((response) => {
- transform(response)
- })
- .catch(() => {})
+ this.$refs['exportForm'].validate(valid => {
+ if(valid){
+ const exportTime = this.dataForm.exportTime
+ let queryParam=this.$refs.customerOrderTable.getQueryParam();
+ queryParam.selectTime = exportTime
+ exportCustomerOrder(queryParam)
+ .then((response) => {
+ transform(response)
+ })
+ .catch(() => {})
+ }
+ })
},
setSalesPart() {
if (this.multipleSelection.length > 0) {
--
Gitblit v1.9.3