From 25b727a5dc28f3c2d225c5e017da58f35c6b84b3 Mon Sep 17 00:00:00 2001 From: zzq <a13193816592@163.com> Date: 星期二, 26 九月 2023 19:38:40 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/zzq' --- src/views/overview/AddOverviewDialog.vue | 387 +++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 291 insertions(+), 96 deletions(-) diff --git a/src/views/overview/AddOverviewDialog.vue b/src/views/overview/AddOverviewDialog.vue index abf3d6d..cc0d9d5 100644 --- a/src/views/overview/AddOverviewDialog.vue +++ b/src/views/overview/AddOverviewDialog.vue @@ -8,7 +8,7 @@ > <!-- 澶� --> <div slot="title" class="dialog-header"> - <span>{{ editCommonConfig.title + addName }}</span> + <span>{{ editCommonConfig.title === "鏌ョ湅" ? editCommonConfig.title : editCommonConfig.title + addName }}</span> <div class="header_btns"> <span class="btn"> <i class="el-icon-printer"></i> @@ -33,18 +33,46 @@ > <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"> <el-row> <el-col :span="12"> - <el-form-item v-if="workType === '鏀惰揣'" label="瀹㈡埛" prop="client_name"> + <el-form-item prop="companyName"> + <span slot="label">{{ workType === 1 ? "瀹㈡埛" : workType === 2 ? "閫佽揣鍦板潃" : "鑱旂郴浜�" }}</span> <el-select - v-model="editConfig.infomation.memberId" + v-model="editConfig.infomation.companyName" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" + :disabled="!showFooter" + @change="companyChange" + > + <el-option + v-for="item in companyOptions" + :key="item.id" + :label="item.name" + :value="{ value: item.id, label: item.name }" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <!-- <el-col :span="12"> + <el-form-item v-if="workType === 3" label="鑱旂郴浜�" prop="contacterName"> + <el-select + v-model="editConfig.infomation.contacterName" + placeholder="璇烽�夋嫨" + size="mini" + style="width: 90%" :disabled="!showFooter" > <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> @@ -53,94 +81,82 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item v-if="workType === '鍐呴儴璋冩嫧'" label="鑱旂郴浜�" prop="client_name"> + <el-form-item v-if="workType === 2" label="閫佽揣鍦板潃" prop="client_name"> <el-select v-model="editConfig.infomation.memberId" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> </el-option> </el-select> </el-form-item> - </el-col> + </el-col> --> <el-col :span="12"> - <el-form-item v-if="workType === '鍙戣揣'" label="閫佽揣鍦板潃" prop="client_name"> - <el-select - v-model="editConfig.infomation.memberId" - placeholder="璇烽�夋嫨" - size="mini" - style="width: 63%" - :disabled="!showFooter" - > - <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鏃ユ湡" prop="refundDate"> + <el-form-item label="鏃ユ湡" prop="operationDate"> <el-date-picker - v-model="editConfig.infomation.refundDate" + v-model="editConfig.infomation.operationDate" value-format="yyyy-MM-dd" type="date" placeholder="閫夋嫨鏃ユ湡" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > </el-date-picker> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鍏ュ簱绫诲瀷" prop="client_name"> + <el-form-item label="鍏ュ簱绫诲瀷"> <el-select - v-model="editConfig.infomation.memberId" + v-if="showOperationType" + v-model="editConfig.infomation.operationTypeId" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > - <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> + <el-option v-for="item in operationTypeOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> + <el-input v-else v-model="receiptType" disabled style="width: 90%"></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鏉ユ簮鍗曟嵁" prop="memberId"> + <el-form-item label="鏉ユ簮鍗曟嵁" prop="sourceNumber"> <el-input - v-model="editConfig.infomation.memberId" + v-model="editConfig.infomation.sourceNumber" placeholder="渚嬪:PO0032" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" ></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item v-if="workType !== '鏀惰揣'" label="婧愪綅缃�" prop="client_name"> + <el-form-item v-if="workType !== 1" label="婧愪綅缃�" prop="fromLocationId"> <el-select - v-model="editConfig.infomation.memberId" + v-model="editConfig.infomation.fromLocationId" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > - <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :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> </el-col> <el-col :span="12"> - <el-form-item v-if="workType !== '鍙戣揣'" label="浠撳簱浣嶇疆" prop="client_name"> + <el-form-item v-if="workType !== 2" label="浠撳簱浣嶇疆" prop="toLocationId"> <el-select - v-model="editConfig.infomation.memberId" + v-model="editConfig.infomation.toLocationId" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > - <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :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> @@ -149,33 +165,39 @@ </div> <div class="bottom"> <el-tabs v-model="activeName" type="card"> - <el-tab-pane v-if="workType !== '鏀惰揣'" label="璇︽儏" name="detail"> </el-tab-pane> + <!-- <el-tab-pane v-if="workType !== 1" label="璇︽儏" name="detail"> </el-tab-pane> --> <el-tab-pane label="鎿嶄綔" name="first"> </el-tab-pane> <el-tab-pane label="鍏朵粬淇℃伅" name="second"> <div class="purchase-view"> <div class="left"> <div class="second-label">鍏朵粬淇℃伅</div> - <el-form-item v-if="workType !== '鏀惰揣'" label="閫佽揣绛栫暐" prop="client_name"> + <!-- <el-form-item v-if="workType !== 1" label="閫佽揣绛栫暐" prop="client_name"> <el-select v-model="editConfig.infomation.memberId" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + style="width: 90%" :disabled="!showFooter" > <el-option v-for="item in memberOptions" :key="item.id" :label="item.username" :value="item.id"> </el-option> </el-select> - </el-form-item> - <el-form-item label="璐熻矗浜�" prop="client_name"> + </el-form-item> --> + <el-form-item label="璐熻矗浜�" prop="contacterName"> <el-select - v-model="editConfig.infomation.memberId" + v-model="editConfig.infomation.contacterName" placeholder="璇烽�夋嫨" size="mini" - style="width: 63%" + 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> @@ -184,9 +206,9 @@ </div> </el-tab-pane> <el-tab-pane label="澶囨敞" name="third"> - <el-form-item label="澶囨敞" prop="desc"> + <el-form-item label="澶囨敞" prop="comment"> <el-input - v-model.trim="editConfig.infomation.desc" + v-model.trim="editConfig.infomation.comment" size="mini" type="textarea" style="width: 85%" @@ -216,7 +238,7 @@ </CommonFormTableView> </div> <!-- 璇︽儏 --> - <div v-if="activeName === 'detail'"> + <!-- <div v-if="activeName === 'detail'"> <CommonFormTableView :product-table-list="detailTableList" :detail-enter="!showFooter" @@ -233,7 +255,7 @@ </el-table-column> </template> </CommonFormTableView> - </div> + </div> --> </div> </div> </el-form> @@ -249,6 +271,15 @@ <script> import CommonFormTableView from "@/components/makepager/CommonFormTableView" +import { + getLocationList, + addOperation, + updateOperation, + updateStatus, + deleteOperation, + getOperationType +} from "@/api/overview/overview" +import { getCompanyList } from "@/api/common/other" export default { name: "AddOverviewDialog", props: { @@ -258,17 +289,22 @@ return { visible: false, title: "鏂板缓", + operationTypeId: 0, infomation: {} } } }, workType: { - type: String, - default: "鏀惰揣" + type: Number, + default: 1 }, addName: { type: String, default: "璋冩嫧" + }, + showOperationType: { + type: Boolean, + default: false } }, components: { CommonFormTableView }, @@ -278,26 +314,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" }] }, - memberOptions: [], - paymentTypeListOptions: [], + companyOptions: [], // 鍏徃 + 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, // 鏄惁鏄剧ず鍙栨秷淇濆瓨 @@ -306,41 +342,96 @@ detailTableData: [{ name: "ssss" }], detailId: 0, isNoDetail: false, // 娣诲姞璇︽儏鏄庣粏琛屾椂鏄惁鏈�夋嫨 - tableColumn: [] + tableColumn: [], + receiptType: "", // 鍏ュ簱绫诲瀷 + companyObj: {}, + contacterObj: {}, + isValidateClick: false, // 楠岃瘉鏄惁鏄剧ず + operationTypeOptions: [] // 鍏ュ簱绫诲瀷鍒楄〃 } }, created() { this.setTableForm() this.setBottonView() this.setDetailTableForm() - this.activeName = this.workType === "鏀惰揣" ? "first" : "detail" + this.getCompanyList() + this.getLocationList() + this.receiptType = this.editConfig.title === "鏌ョ湅" ? this.editConfig.infomation.operationTypeName : this.addName + if (this.showOperationType) { + this.getOperationType() + } }, methods: { + // 鑾峰彇鍏徃鍒楄〃 + async getCompanyList() { + await getCompanyList().then((res) => { + console.log(res) + if (res.data.code === 200) { + this.companyOptions = res.data.data + } + }) + }, + // 鑾峰彇浠撳簱浣嶇疆鍒楄〃 + async getLocationList() { + await getLocationList({ + keyWord: "", + page: 0, + pageSize: 0 + }).then((res) => { + console.log(res) + if (res.code === 200) { + this.toLocationOptions = res.data + } + }) + }, + // 鑾峰彇浠撳簱绫诲瀷 + async getOperationType() { + await getOperationType({ + keyword: "", + page: 0, + pageSize: 0 + }).then((res) => { + console.log(res.data.data) + if (res.data.code === 200) { + const list = res.data.data.map((item) => { + return { + name: item.name, + id: item.id + } + }) + this.operationTypeOptions = list || [] + } + }) + }, // 璁剧疆鍒犻櫎/鎵撳嵃/缂栬緫鏄惁鏄剧ず setBottonView() { if (this.editConfig.title === "鏂板缓") { this.showButton = false this.showEdit = false this.showFooter = true - } else if (this.editConfig.infomation.status === "瀹屾垚") { + this.isValidateClick = false + } else if (this.editConfig.infomation.status === 4) { this.showButton = true this.showEdit = false this.isDelClick = true this.showFooter = false - } else if (this.editConfig.infomation.status === "宸插彇娑�") { + this.isValidateClick = false + } else if (this.editConfig.infomation.status === 5) { 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" @@ -360,28 +451,115 @@ this.setTableForm() }, // 淇濆瓨 - saveClick() {}, + 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 + let companyID = 0 + let companyName = "" + let contacterID = 0 + let contacterName = "" + if (this.editConfig.title === "鏂板缓") { + companyID = Object.keys(this.companyObj).length === 0 ? 0 : this.companyObj.value + companyName = Object.keys(this.companyObj).length === 0 ? "" : this.companyObj.label + contacterID = Object.keys(this.contacterObj).length === 0 ? 0 : this.contacterObj.value + contacterName = Object.keys(this.contacterObj).length === 0 ? "" : this.contacterObj.label + } else { + companyID = Object.keys(this.companyObj).length === 0 ? data.companyID : this.companyObj.value + companyName = Object.keys(this.companyObj).length === 0 ? data.companyName : this.companyObj.label + contacterID = Object.keys(this.contacterObj).length === 0 ? data.contacterID : this.contacterObj.value + contacterName = Object.keys(this.contacterObj).length === 0 ? data.contacterName : this.contacterObj.label + } + let params = { + comment: data.comment || "", + companyID: companyID, + companyName: companyName, + contacterID: contacterID, + contacterName: contacterName, + details: this.tableData, + fromLocationId: data.fromLocationId || 0, + id: data.id, + number: data.number || "", + operationDate: data.operationDate || "", + operationTypeId: this.showOperationType ? data.operationTypeId : this.editConfig.operationTypeId, + operationTypeName: this.receiptType, + sourceNumber: data.sourceNumber || "", + status: 3, + toLocationId: data.toLocationId || 0 + } + 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() { + if (this.editConfig.title !== "鏂板缓") { + const list = this.editConfig.infomation.details.map((item) => { + return { + ...item, + productName: item.product.name, + unit: item.product.unit + } + }) + this.tableData = list + } else { + this.tableData = [] + } + // this.tableData = this.editConfig.title !== "鏂板缓" ? list : [] this.productTableList = { tableData: this.tableData, tableColumn: [ - { label: "浜у搧", prop: "name", 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: "productName", productName: true, isRequird: true }, + // { label: "璇存槑", prop: "number", input: true }, + // { label: "鏃ユ湡", prop: "amount", date: true, isRequird: true }, + // { label: "鎴鏃ユ湡", prop: "price", date: 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 } }) @@ -391,24 +569,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 { @@ -479,6 +654,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() + } + }) } } } @@ -531,7 +726,7 @@ ::v-deep { .el-dialog__headerbtn { position: absolute; - top: 18px; + top: 15px; } .el-button { &:hover { -- Gitblit v1.8.0