From 1ed83e98d5bc89f4e87b8ae6692eb31888e55579 Mon Sep 17 00:00:00 2001 From: yangfeng <wanwan926_4@163.com> Date: 星期四, 21 九月 2023 16:45:09 +0800 Subject: [PATCH] 入库、出库、内部调拨列表及新建接口联调 --- src/views/overview/AddOverviewDialog.vue | 209 +++++++++++++++++++++++++--------- src/views/overview/OverviewListView.vue | 29 +++- src/components/makepager/TableCommonView.vue | 23 +-- src/components/makepager/CommonFormTableView.vue | 49 +++++--- src/components/makepager/StatusCommonView.vue | 10 + src/api/overview/overview.js | 17 ++ 6 files changed, 238 insertions(+), 99 deletions(-) diff --git a/src/api/overview/overview.js b/src/api/overview/overview.js index 90d7bf6..e46a1ad 100644 --- a/src/api/overview/overview.js +++ b/src/api/overview/overview.js @@ -62,3 +62,20 @@ data }) } +// 楠岃瘉 鏇存敼璁板綍鐘舵�� +export function updateStatus(id) { + return request({ + url: `/api-wms/v1/operation/finish/${id}`, + method: "put", + id + }) +} + +// 鑾峰彇浣嶇疆鍒楄〃 +export function getLocationList(data) { + return request({ + url: "/api-wms/v1/location/getLocationList", + method: "post", + data + }) +} diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue index 640f96d..60108e2 100644 --- a/src/components/makepager/CommonFormTableView.vue +++ b/src/components/makepager/CommonFormTableView.vue @@ -50,10 +50,19 @@ v-model="scope.row[item.prop]" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" - @change="selProductClick" + style="width: 80%" + @change=" + (val) => { + selProductClick(val) + } + " > - <el-option v-for="item in productNameOptions" :key="item.id" :label="item.name" :value="item"> + <el-option + v-for="item in productNameOptions" + :key="item.id" + :label="item.name" + :value="{ value: item.id, label: item.name, amount: item.amount, unit: item.unit }" + > </el-option> </el-select> </div> @@ -144,7 +153,7 @@ </template> <script> -// import { getProductListFromGrpc, getProductList } from "@/api/productManage/product" +import { getProductList } from "@/api/product/product" // import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog" export default { name: "CommmonFormTableView", @@ -182,10 +191,7 @@ infomation: {} }, productIndex: 0, - productNameOptions: [ - { id: 1, name: "aaaaa" }, - { id: 2, name: "bbbbbbbbbb" } - ], + productNameOptions: [], selOptions: [ { id: 1, name: "浠�" }, { id: 2, name: "鎵�" } @@ -193,7 +199,7 @@ } }, created() { - // this.getProductList() + this.getProductList() this.tableList = this.productTableList }, computed: {}, @@ -205,24 +211,29 @@ methods: { // 浜у搧鍚嶇О async getProductList() { - // let fn = this.sign == "purchase" ? getProductList : getProductListFromGrpc - let fn - await fn({ + await getProductList({ page: 1, pageSize: 100 }).then((res) => { - console.log(res.data) - if (res.data.code === 200) { - if (res.data.data.list && res.data.data.list.length > 0) { - this.productList = res.data.data.list + // console.log(res.data) + if (res.code === 200) { + if (res.data && res.data.length > 0) { + this.productNameOptions = res.data } } }) }, // 閫夋嫨浜у搧 - selProductClick(val) { - console.log("aaa") - console.log(val) + selProductClick(item) { + this.tableList.tableData.map((ite) => { + if (ite.productName.label === item.label) { + ite.productId = item.value + ite.productName = item.label + ite.amount = item.amount + ite.unit = item.unit + } + }) + console.log(this.tableList.tableData) }, // 閫夋嫨鍗曚綅 selCommonClick(item) { diff --git a/src/components/makepager/StatusCommonView.vue b/src/components/makepager/StatusCommonView.vue index dd91c7d..51012b8 100644 --- a/src/components/makepager/StatusCommonView.vue +++ b/src/components/makepager/StatusCommonView.vue @@ -1,6 +1,7 @@ <template> <div class="common-status"> <div v-if="showButton" style="margin-left: 30px"> + <el-button v-if="isValidateClick" plain size="mini" @click="validateClick">楠岃瘉</el-button> <el-button plain size="mini" @click="delClick" :disabled="isDelClick">鍒犻櫎</el-button> <el-button plain size="mini" disabled>鎵撳嵃</el-button> </div> @@ -57,12 +58,21 @@ isDelClick: { type: Boolean, default: false + }, + isValidateClick: { + type: Boolean, + default: false } }, data() { return {} }, methods: { + // 楠岃瘉 + validateClick() { + this.$emit("validateClick") + }, + // 鍒犻櫎 delClick() { this.$emit("delClick") } diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue index 5133ded..b32674a 100644 --- a/src/components/makepager/TableCommonView.vue +++ b/src/components/makepager/TableCommonView.vue @@ -35,21 +35,19 @@ > <template slot-scope="scope"> <span v-if="item.price">{{ "锟�" + number_format(scope.row[item.prop], 2, ".", ",") }}</span> - <!-- 甯︾偣鐨勫姛鑳� --> + <!-- 鐘舵�佹樉绀� --> <div v-else-if="item.status"> - <!-- <span v-if="scope.row.status == '瀹屾垚'" class="Badge greenSlot"></span> - <span v-else-if="scope.row.status == '鑽夌'" class="Badge redSlot"></span> - <span v-else-if="scope.row.status == '灏辩华'" class="Badge redSlot"></span> - <span v-else-if="scope.row.status == '宸插彇娑�'" class="Badge yellowSlot"></span> --> <span class="Badge" :class="{ - greenSlot: scope.row.status == '瀹屾垚', - redSlot: scope.row.status == '宸插彇娑�', - blueSlot: scope.row.status == '灏辩华', - graySlot: scope.row.status == '鑽夌' + greenSlot: scope.row.status == '4', + redSlot: scope.row.status == '5', + blueSlot: scope.row.status == '3', + graySlot: scope.row.status == '1' }" - >{{ scope.row[item.prop] }}</span + >{{ + item.isCallMethod ? item.getCallMethod(scope.row[item.prop], scope.row) : scope.row[item.prop] + }}</span > </div> <!-- 璋冪敤鏂规硶鏄剧ず鏂囧瓧 --> @@ -68,13 +66,12 @@ @click="selCommonClick(scope.row)" >{{ scope.row[item.prop] }}</span > - <span v-else-if="item.propType=='mulitple'"> - {{ scope.row[item.prop][item.propTwo]?scope.row[item.prop][item.propTwo]:'--' }} + <span v-else-if="item.propType == 'mulitple'"> + {{ scope.row[item.prop][item.propTwo] ? scope.row[item.prop][item.propTwo] : "--" }} </span> <span :class="item.className ? item.className : ''" v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : scope.row[item.prop] === 0 ? scope.row[item.prop] : "--" }}</span> - </template> </el-table-column> <slot name="tableButton" /> diff --git a/src/views/overview/AddOverviewDialog.vue b/src/views/overview/AddOverviewDialog.vue index 1f8f11f..7e31f48 100644 --- a/src/views/overview/AddOverviewDialog.vue +++ b/src/views/overview/AddOverviewDialog.vue @@ -33,7 +33,14 @@ > <div> <!-- <div>aaa</div> --> - <StatusCommonView :showButton="showButton" :isDelClick="isDelClick" :list="list" @delClick="delClick" /> + <StatusCommonView + :showButton="showButton" + :isValidateClick="isValidateClick" + :isDelClick="isDelClick" + :list="list" + @delClick="delClick" + @validateClick="validateClick" + /> </div> <div class="basic-info"> <div class="basic-info-view"> @@ -42,11 +49,12 @@ <el-form-item prop="companyName"> <span slot="label">{{ workType === 1 ? "瀹㈡埛" : workType === 2 ? "閫佽揣鍦板潃" : "鑱旂郴浜�" }}</span> <el-select - v-model="editConfig.infomation.company" + v-model="editConfig.infomation.companyName" placeholder="璇烽�夋嫨" size="mini" style="width: 90%" :disabled="!showFooter" + @change="companyChange" > <el-option v-for="item in companyOptions" @@ -123,7 +131,7 @@ style="width: 90%" :disabled="!showFooter" > - <el-option v-for="item in fromLocationOptions" :key="item.id" :label="item.name" :value="item.id"> + <el-option v-for="item in toLocationOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> @@ -171,8 +179,14 @@ size="mini" style="width: 90%" :disabled="!showFooter" + @change="contacterChange" > - <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> + <el-option + v-for="item in memberOptions" + :key="item.id" + :label="item.name" + :value="{ value: item.id, label: item.name }" + > </el-option> </el-select> </el-form-item> @@ -246,7 +260,7 @@ <script> import CommonFormTableView from "@/components/makepager/CommonFormTableView" -// import { addOperation } from "@/api/overview/overview" +import { getLocationList, addOperation, updateOperation, updateStatus, deleteOperation } from "@/api/overview/overview" import { getCompanyList } from "@/api/common/other" export default { name: "AddOverviewDialog", @@ -257,6 +271,7 @@ return { visible: false, title: "鏂板缓", + operationTypeId: 0, infomation: {} } } @@ -277,28 +292,26 @@ dialogWidth: "50%", editConfig: this.editCommonConfig, rules: { - client_name: [{ required: true, message: "璇烽�夋嫨瀹㈡埛鍚嶇О", trigger: "change" }], - number: [{ required: true, message: "璇疯緭鍏ラ��娆惧崟缂栧彿", trigger: "blur" }], - refundDate: [{ required: true, message: "璇烽�夋嫨閫�娆炬棩鏈�", trigger: "change" }], - memberId: [{ required: true, message: "璇烽�夋嫨閿�鍞礋璐d汉", trigger: "change" }], - sale_return_nunber: [{ required: true, message: "璇烽�夋嫨閿�鍞��璐у崟", trigger: "change" }] + sourceNumber: [{ required: true, message: "璇疯緭鍏ユ潵婧愬崟鎹�", trigger: "blur" }], + operationDate: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" }], + toLocationId: [{ required: true, message: "璇烽�夋嫨浠撳簱浣嶇疆", trigger: "change" }], + fromLocationId: [{ required: true, message: "璇烽�夋嫨婧愪綅缃�", trigger: "change" }] }, companyOptions: [], // 鍏徃 - memberOptions: [], - fromLocationOptions: [], // 婧愪綅缃� - toLocationOptions: [], // 浠撳簱浣嶇疆 + memberOptions: [{ id: 1, name: "绠$悊鍛�" }], + toLocationOptions: [], // 婧愪綅缃� 浠撳簱浣嶇疆 list: [ - { label: "鑽夌", status: "todo" }, - { label: "姝e湪绛夊緟", status: "todo" }, - { label: "灏辩华", status: "todo" }, - { label: "瀹屾垚", status: "todo" } + { label: "鑽夌", status: "todo", value: 1 }, + { label: "姝e湪绛夊緟", status: "todo", value: 2 }, + { label: "灏辩华", status: "todo", value: 3 }, + { label: "瀹屾垚", status: "todo", value: 4 } ], showButton: true, activeName: "first", productTableList: {}, - tableData: [{ name: "ssss" }], - productId: 0, - isNoProduct: false, // 娣诲姞鏄庣粏琛屾椂鏄惁鏈変骇鍝佹湭閫夋嫨 + tableData: [], + countId: 0, + isNoProduct: true, // 娣诲姞鏄庣粏琛屾椂鏄惁鏈変骇鍝佹湭閫夋嫨 showEdit: false, // 鏄惁鏄剧ず缂栬緫鎸夐挳 isDelClick: false, // 鍒犻櫎鎸夐挳鏄惁鍙偣鍑� showFooter: false, // 鏄惁鏄剧ず鍙栨秷淇濆瓨 @@ -310,15 +323,16 @@ tableColumn: [], receiptType: this.addName, // 鍏ュ簱绫诲瀷 companyObj: {}, - contacterObj: {} + contacterObj: {}, + isValidateClick: false // 楠岃瘉鏄惁鏄剧ず } }, created() { this.setTableForm() this.setBottonView() this.setDetailTableForm() - this.activeName = this.workType === 1 ? "first" : "detail" this.getCompanyList() + this.getLocationList() }, methods: { // 鑾峰彇鍏徃鍒楄〃 @@ -330,31 +344,48 @@ } }) }, + // 鑾峰彇浠撳簱浣嶇疆鍒楄〃 + async getLocationList() { + await getLocationList({ + keyWord: "", + page: 0, + pageSize: 0 + }).then((res) => { + console.log(res) + if (res.code === 200) { + this.toLocationOptions = res.data + } + }) + }, // 璁剧疆鍒犻櫎/鎵撳嵃/缂栬緫鏄惁鏄剧ず setBottonView() { if (this.editConfig.title === "鏂板缓") { this.showButton = false this.showEdit = false this.showFooter = true + this.isValidateClick = false } else if (this.editConfig.infomation.status === "瀹屾垚") { this.showButton = true this.showEdit = false this.isDelClick = true this.showFooter = false + this.isValidateClick = false } else if (this.editConfig.infomation.status === "宸插彇娑�") { this.showButton = true this.showEdit = false this.showFooter = false + this.isValidateClick = false } else { this.showButton = true this.showEdit = true this.showFooter = false + this.isValidateClick = true } if (this.editConfig.title === "鏂板缓") { this.list[0].status = "active" } else { this.list.map((item) => { - if (item.label === this.editConfig.infomation.status) { + if (item.value === this.editConfig.infomation.status) { item.status = "active" } else { item.status = "todo" @@ -374,30 +405,65 @@ this.setTableForm() }, // 淇濆瓨 - saveClick() { - this.saveParams() + saveClick(formName) { + this.$refs[formName].validate((valid) => { + if (valid) { + for (let i = 0; i < this.tableData.length; i++) { + if (this.tableData[i].productName.length === 0) { + this.isNoProduct = true + break + } else { + this.isNoProduct = false + } + } + if (this.isNoProduct) { + this.$message.error("璇锋坊鍔犳槑缁嗚鎴栭�夋嫨浜у搧涓嶈兘涓虹┖") + } else { + let requestUrl = this.editConfig.title === "鏂板缓" ? addOperation : updateOperation + let params = this.saveParams() + requestUrl({ + ...params + }).then((res) => { + console.log(res) + this.editConfig.visible = false + if (res.code === 200) { + this.$message.success("娣诲姞鎴愬姛") + this.$parent.getData() + } + }) + } + } + }) }, saveParams() { let data = this.editConfig.infomation - console.log(this.companyObj) + let companyID = 0 + let companyName = "" + let contacterID = 0 + let contacterName = "" + if (this.editConfig.title === "鏂板缓") { + companyID = this.companyObj.length === 0 ? 0 : this.companyObj.value + companyName = this.companyObj.length === 0 ? 0 : this.companyObj.label + contacterID = this.contacterObj.length === 0 ? 0 : this.contacterObj.value + contacterName = this.contacterObj.length === 0 ? 0 : this.contacterObj.label + } else { + companyID = this.companyObj.length === 0 ? data.companyID : this.companyObj.value + companyName = this.companyObj.length === 0 ? data.companyName : this.companyObj.label + contacterID = this.contacterObj.length === 0 ? data.contacterID : this.contacterObj.value + contacterName = this.contacterObj.length === 0 ? data.contacterName : this.contacterObj.label + } let params = { - companyID: data.company.value || 0, - companyName: data.company.label || "", - contacterID: 0, - contacterName: "string", - details: [ - { - finishQuantity: 0, - productId: 0, - productName: "string", - quantity: 0 - } - ], + comment: data.comment || "", + companyID: companyID, + companyName: companyName, + contacterID: contacterID, + contacterName: contacterName, + details: this.tableData, fromLocationId: data.fromLocationId || 0, - id: 0, + id: data.id, number: "", operationDate: data.operationDate || "", - operationTypeId: data.operationTypeId, + operationTypeId: this.editConfig.operationTypeId, sourceNumber: data.sourceNumber || "", status: 3, toLocationId: data.toLocationId || 0 @@ -405,26 +471,36 @@ return params }, // 鍒犻櫎 - delClick() {}, + async delClick() { + await deleteOperation(this.editConfig.infomation.id).then((res) => { + console.log(res) + this.editConfig.visible = false + if (res.code === 200) { + this.$message.success("鍒犻櫎鎴愬姛") + this.$parent.getData() + } + }) + }, // 鎿嶄綔鍒楄〃 setTableForm() { + this.tableData = this.editConfig.title !== "鏂板缓" ? this.editConfig.infomation.details : [] this.productTableList = { tableData: this.tableData, tableColumn: [ - { label: "浜у搧", prop: "name", productName: true, isRequird: true }, + { label: "浜у搧", prop: "productName", productName: true, isRequird: true }, // { label: "璇存槑", prop: "number", input: true }, // { label: "鏃ユ湡", prop: "amount", date: true, isRequird: true }, // { label: "鎴鏃ユ湡", prop: "price", date: true }, - { label: "瀹屾垚", prop: "total", inputFloat: true }, - { label: "璁¢噺鍗曚綅", prop: "total", select: true } + { label: "瀹屾垚", prop: "amount", inputFloat: true }, + { label: "璁¢噺鍗曚綅", prop: "unit" } ] } }, // 鎿嶄綔杈撳叆 inputContent(val, prop, row) { - this.productId = row.productId + this.countId = row.countId this.tableData.map((item) => { - if (item.productId === row.productId) { + if (item.countId === row.countId) { item[prop] = val } }) @@ -434,24 +510,21 @@ if (value === "鎿嶄綔") { console.log(this.tableData) for (let i = 0; i < this.tableData.length; i++) { - if (this.tableData[i].name.length === 0) { - this.isNoProduct = true + if (this.tableData[i].productName.length === 0) { + this.isNoProduct = false break } else { - this.isNoProduct = false + this.isNoProduct = true } } - if (!this.isNoProduct) { - this.productId++ + if (this.isNoProduct) { + this.countId++ this.tableData.push({ - productId: this.productId, - id: 0, + countId: this.countId, + productId: "", amount: 0, - desc: "", - name: "", - number: "", - price: 0, - total: 0 + unit: "", + productName: "" }) } } else { @@ -522,6 +595,26 @@ item[prop] = val } }) + }, + // 瀹㈡埛閫夋嫨 + companyChange(val) { + console.log(val) + this.companyObj = val + }, + // 璐熻矗浜洪�夋嫨 + contacterChange(val) { + this.contacterObj = val + }, + // 楠岃瘉 + async validateClick() { + await updateStatus(this.editConfig.infomation.id).then((res) => { + console.log(res) + this.editConfig.visible = false + if (res.code === 200) { + this.$message.success("楠岃瘉鎴愬姛") + this.$parent.getData() + } + }) } } } diff --git a/src/views/overview/OverviewListView.vue b/src/views/overview/OverviewListView.vue index 54e79fe..aab7906 100644 --- a/src/views/overview/OverviewListView.vue +++ b/src/views/overview/OverviewListView.vue @@ -89,37 +89,37 @@ let tableColumn = [ { label: "鍗曞彿", - prop: "id", + prop: "number", isShowColumn: true, default: true }, { label: "浠�", - prop: "deviceName", + prop: "from", isShowColumn: showcol.includes("浠�"), default: false }, { label: "鑷�", - prop: "id", + prop: "to", isShowColumn: showcol.includes("鑷�"), default: false }, { label: "鑱旂郴浜�", - prop: "deviceId", + prop: "companyName", isShowColumn: showcol.includes("鑱旂郴浜�"), default: false }, { label: "璐熻矗浜�", - prop: "shopName", + prop: "contacterName", isShowColumn: showcol.includes("璐熻矗浜�"), default: false }, { label: "鏃ユ湡", - prop: "preTime", + prop: "operationDate", isShowColumn: showcol.includes("鏃ユ湡"), default: false, date: true @@ -144,7 +144,7 @@ }, { label: "鏉ユ簮鍗曟嵁", - prop: "faultLevel", + prop: "sourceNumber", isShowColumn: showcol.includes("鏉ユ簮鍗曟嵁"), default: false }, @@ -166,7 +166,9 @@ width: 120, isShowColumn: showcol.includes("鐘舵��"), default: false, - status: true + status: true, + isCallMethod: true, + getCallMethod: this.getStatus } ] return tableColumn @@ -186,7 +188,9 @@ if (res.data.code === 200) { const list = res.data.data.map((item) => { return { - ...item + ...item, + from: item.fromLocation.name, + to: item.toLocation.name } }) this.tableList.tableInfomation = list || [] @@ -203,12 +207,19 @@ console.log(row) this.editConfig.visible = true this.editConfig.title = "缂栬緫" + this.editConfig.operationTypeId = this.$route.params.id this.editConfig.infomation = { ...row } }, // 鏂板缓 addBtnClick() { this.editConfig.visible = true this.editConfig.title = "鏂板缓" + this.editConfig.operationTypeId = this.$route.params.id + this.editConfig.infomation = {} + }, + // 鐘舵�� + getStatus(val) { + return val === 1 ? "鑽夌" : val === 3 ? "灏辩华" : "瀹屾垚" } } } -- Gitblit v1.8.0