From d1fc2acdbe31d3fd460df7bf73f791c7d1007597 Mon Sep 17 00:00:00 2001 From: qx <1084500556@qq.com> Date: 星期一, 17 三月 2025 17:31:45 +0800 Subject: [PATCH] Merge branch 'master' of http://101.42.27.146:5001/r/ltkj_peisweb --- src/views/system/package/index.vue | 819 +++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 525 insertions(+), 294 deletions(-) diff --git a/src/views/system/package/index.vue b/src/views/system/package/index.vue index 651a6e9..2a1edc4 100644 --- a/src/views/system/package/index.vue +++ b/src/views/system/package/index.vue @@ -7,9 +7,10 @@ <el-form-item label="濂楅鎻忚堪" prop="pacRemark"> <el-input v-model="queryParams.pacRemark" placeholder="璇疯緭鍏ュ椁愭弿杩�" clearable @keyup.enter.native="handleQuery" /> </el-form-item> - <el-form-item label="濂楅鍒嗙被" prop="categoryId"> - <el-select v-model="queryParams.categoryId" placeholder="璇烽�夋嫨鐘舵��" style="width: 200px" filterable clearable> - <el-option v-for="dict in categoryList" :key="dict.id" :label="dict.name" :value="dict.id"></el-option> + <el-form-item label="浣撴绫诲埆" prop="tjCategory"> + <el-select v-model="queryParams.tjCategory" placeholder="璇烽�夋嫨鐘舵��" style="width: 200px" filterable clearable> + <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.id" :label="dict.label" + :value="dict.value"></el-option> </el-select> </el-form-item> <el-form-item> @@ -48,9 +49,15 @@ <el-table-column fixed type="selection" width="40" align="center" :show-overflow-tooltip="true" /> <el-table-column label="搴忓彿" align="center" width="50" prop="newID" fixed /> <!-- <el-table-column label="缂栧彿" align="center" prop="pacId" /> --> - <el-table-column label="濂楅鍒嗙被" width="100px" align="center" prop="categoryNames" fixed></el-table-column> + <el-table-column label="浣撴绫诲埆" width="100px" align="center" prop="categoryNames" fixed> + <template slot-scope="scope"> + <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" /> + </template> + </el-table-column> <el-table-column label="濂楅鍚嶇О" align="center" prop="pacName" width="150px" fixed /> - <el-table-column label="浠锋牸" width="80px" align="center" prop="price" fixed> + <el-table-column label="鍘熶环" width="80px" align="center" prop="price" fixed></el-table-column> + <el-table-column label="鎶樻墸" width="80px" align="center" prop="limits" fixed></el-table-column> + <el-table-column label="鐜颁环" width="80px" align="center" prop="newPrice" fixed> </el-table-column> <el-table-column label="鍗曢」鍒楄〃" align="center" prop="allProName" width="1200px"> </el-table-column> @@ -93,7 +100,12 @@ ></el-table-column> --> <el-table-column label="鎺掑簭" width="50px" align="center" prop="sort"></el-table-column> <el-table-column label="灏忕▼搴忎环鏍�" width="90px" align="center" prop="retailPrice"></el-table-column> - <el-table-column label="鍘熶环" width="90px" align="center" prop="counterPrice"></el-table-column> + <!-- <el-table-column + label="鍘熶环" + width="90px" + align="center" + prop="counterPrice" + ></el-table-column> --> <el-table-column label="宸插敭鏁伴噺" width="90px" align="center" prop="saleNum"></el-table-column> <el-table-column label="鐘舵��" align="center" prop="pacStatus" fixed="right" width="100px"> <template slot-scope="scope"> @@ -122,7 +134,7 @@ </template> <!-- 淇敼浣撴濂楅瀵硅瘽妗� --> - <el-dialog :title="title" :visible.sync="open" width="1100px" append-to-body> + <el-dialog :title="title" :visible.sync="open" width="1400px" append-to-body :close-on-click-modal="false"> <el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true"> <!-- <div class="dialo"> <div class="dialo1"> --> @@ -143,30 +155,36 @@ </el-select> </el-form-item> - <el-form-item label="濂楅绫荤洰" prop="categoryId"> - <!-- <el-input - v-model="form.createId" - placeholder="璇疯緭鍏ュ晢鍝佺被鐩�" - style="width: 200px" - /> --> - <el-select v-model="form.categoryId" placeholder="璇烽�夋嫨濂楅绫荤洰" style="width: 150px" @change="shangpin" filterable - clearable> - <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id"></el-option> + <!-- <el-form-item label="濂楅绫荤洰" prop="categoryId"> + <el-select + v-model="form.categoryId" + placeholder="璇烽�夋嫨濂楅绫荤洰" + style="width: 150px" + @change="shangpin" + filterable + clearablez + > + <el-option + v-for="item in categoryList" + :key="item.id" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + </el-form-item> --> + <el-form-item label="浣撴绫诲埆" prop="tjCategory"> + <el-select v-model="form.tjCategory" placeholder="璇烽�夋嫨浣撴绫诲埆" style="width: 150px" filterable clearable> + <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label" + :value="dict.value"></el-option> </el-select> </el-form-item> - <el-form-item label="鍏抽敭瀛�" prop="keywords"> - <el-select multiple v-model="form.keywords" placeholder="璇烽�夋嫨鍏抽敭瀛�" style="width: 150px" @change="sel" filterable - clearable> - <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id"></el-option> - </el-select> - </el-form-item> <el-form-item label="鏄惁涓婃灦" prop="isOnSale"> <!-- <el-radio-group v-model="form.pacStatus"> <el-radio :label="0">鍚敤</el-radio> <el-radio :label="1">鍋滅敤</el-radio> </el-radio-group> --> - <el-select v-model="form.isOnSale" placeholder="璇烽�夋嫨鏄惁涓婃灦" style="width: 150px" filterable clearable> + <el-select v-model="form.isOnSale" placeholder="璇烽�夋嫨鏄惁涓婃灦" style="width: 140px" filterable clearable> <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> </el-select> @@ -178,11 +196,26 @@ <el-form-item label="灏忕▼搴忎环鏍�" prop="retailPrice"> <el-input v-model="form.retailPrice" placeholder="璇疯緭鍏ュ皬绋嬪簭浠锋牸" style="width: 150px" /> </el-form-item> - <el-form-item label="鍘熶环" prop="counterPrice"> - <el-input v-model="form.counterPrice" placeholder="璇疯緭鍏ュ師浠�" style="width: 150px" /> + <el-form-item label="鍘熶环" prop="pics"> + <el-input v-model="pics" placeholder="璇疯緭鍏ュ師浠�" style="width: 150px" /> + </el-form-item> + <el-form-item label="鎶樻墸"> + <el-input-number style="width: 150px" v-model="youhui" :precision="2" :step="0.1" :max="10" :min="0.1" + @change="debounceNumberChange" :debounce="3000"></el-input-number> </el-form-item> - <div v-if="!isCollapsed" style="display:flex"> + <el-form-item label="鐜颁环" prop="xianprice"> + <el-input v-model="form.xianprice" placeholder="鐜颁环" clearable style="width: 140px" @input="changeXianjia" + @blur="numberChangeXianPrice(youhui, youhui)" type="number" :debounce="3000"/> + </el-form-item> + <el-form-item label="鍏抽敭瀛�" prop="keywords"> + <el-select multiple v-model="form.keywords" placeholder="璇烽�夋嫨鍏抽敭瀛�" style="width: 160px" @change="sel" filterable + clearable> + <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id"></el-option> + </el-select> + </el-form-item> + + <div v-if="!isCollapsed" style="display: flex"> <div> <el-form-item label="濂楅鎻忚堪" prop="pacRemark"> <el-input type="textarea" v-model="form.pacRemark" placeholder="璇疯緭鍏ュ椁愭弿杩�" style="width: 670px" @@ -209,7 +242,7 @@ <el-button type="primary" plain size="mini" @click="toggleCollapse">{{ isCollapsed ? "灞曞紑" : "鏀惰捣" }}</el-button> - <el-button type="primary" plain size="mini" icon="el-icon-plus" @click="addmembers()">鏂板鍗曢」</el-button> + <!-- <el-button type="primary" plain size="mini" icon="el-icon-plus" @click="addmembers()">鏂板鍗曢」</el-button> <el-table v-loading="loading" :data="form.tjProjectList" @selection-change="handleSelectionChange" border max-height="275" style="margin: 10px 0"> <el-table-column label="搴忓彿" align="center" type="index" /> @@ -237,7 +270,104 @@ v-hasPermi="['hosp:consumables:remove']" title="鍒犻櫎"></el-button> </template> </el-table-column> - </el-table> + </el-table> --> + + <el-row style="display: flex; width: 1300px"> + <el-col> + <div style="text-align: center; margin-bottom: 10px; margin-top: 10px"> + 椤圭洰鍒楄〃 + </div> + <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" @input="handleFilterInput" v-model="queryParams1.nr" clearable /> + <div class="tab3" style="height: 365px"> + <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps" show-checkbox + node-key="proId" @check-change="handleCurrentChecked" :default-checked-keys="checkedkey" + :filter-node-method="filterNode" ref="tree" :render-content="renderContent"> + </el-tree> + <pagination small v-show="total1 > 0" :total="total1" :page.sync="queryParams1.page" + :limit.sync="queryParams1.pageSize" @pagination="getDataList" /> + </div> + </el-col> + <!-- <el-col :span="6"> + <div + style="text-align: center; margin-bottom: 10px; margin-top: 10px" + > + 鏄庣粏椤圭洰鍒楄〃 + </div> + <div class="tab3"> + <el-tree + class="filter-tree" + v-loading="loading" + :data="TreedataList" + node-key="proId" + :props="defaultProps" + :filter-node-method="filterNode" + show-checkbox + @check-change="handleCurrentChecked1" + :default-checked-keys="checkedListkey" + ref="trees" + :render-content="renderContent" + > + </el-tree> + </div> + </el-col> --> + <el-col> + <div class="grid-content bg-purple"> + <div style=" + text-align: center; + margin-bottom: 10px; + margin-top: 10px; + margin-left: 8%; + "> + 宸查�夐」鐩垪琛� + </div> + <el-table :data="DataList" border style="width: 90%; margin-left: 20px" height="400" + :span-method="objectSpanMethod"> + <el-table-column prop="proName" label="妫�鏌ラ」鐩�"> + </el-table-column> + + <el-table-column prop="priceOrd" label="鍘熶环" align="center" width="80px"> + </el-table-column> + <el-table-column label="鎶樻墸" width="100px"> + <template slot-scope="scope"> + <!-- 鍙緭鍏ョ函鏁板瓧鎶樻墸 --> + <el-input v-model.number="scope.row.limits" @input="calculateDiscount(scope.row)" placeholder="杈撳叆鎶樻墸" + size="small" type="number" min="0" step="0.1" max="10"> + </el-input> + </template> + </el-table-column> + <el-table-column prop="priceNow" label="鐜颁环" width="80px" align="center"> + </el-table-column> + <el-table-column label="鎿嶄綔" align="center" width="80px"> + <template slot-scope="scope"> + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete1(scope.row)" title="鍒犻櫎"> + </el-button> + </template> + </el-table-column> + <!-- <el-table-column prop="proName" label="鏄庣粏椤圭洰" width="260px"> + </el-table-column> --> + + <!-- <el-table-column + label="鎿嶄綔" + align="center" + fixed="right" + class-name="small-padding fixed-width" + width="50px" + > + <template slot-scope="scope"> + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDeletes(scope.row)" + title="鍒犻櫎" + ></el-button> + </template> + </el-table-column>--> + </el-table> + <h4 style="font-weight: 600;padding-left:20px">涓�鍏遍�変腑{{DataList.length}}椤癸紝鍚堣锛歿{ form.xianprice }}鍏�</h4> + </div> + </el-col> + </el-row> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> @@ -269,6 +399,7 @@ import Packages from "@/components/Packages"; import { listCategory } from "@/api/mall/category"; import { listKeyword } from "@/api/mall/keyword"; +import { getProParentIdDxList, search, getProSonDxList } from "@/api/system/package"; import { getPacList, getPacInFo, @@ -281,101 +412,82 @@ updateStatus, getAllList, updateProject, - getPacTjProjectList + getPacTjProjectList, + saveOreditTjPacNew, } from "@/api/system/package"; import { Message } from "element-ui"; +import Big from 'big.js'; + export default { name: "Package", - dicts: ["sys_normal_disable", "sys_yes_no"], + dicts: ["sys_normal_disable", "sys_yes_no", "dict_tjtype"], components: { Packages }, data() { - let checkPhoneNum = (rule, value, callback) => { - console.log(value); - let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/); - if (value == "" && value == undefined && !value) { - return callback(""); - } else if (value != undefined && value != "") { - return callback(); - } else if (!patter.test(value)) { - return callback(""); - } - }; return { - isCollapsed: true, // 榛樿涓烘姌鍙犵姸鎬� + pics: 0, + filterText: "", + DataList: [], + list1: true, + activeName: "1", + num: 1, + checkedObj: {}, + dataObj: {}, + Treedata: [], + TreedataList: [], + treedataList: [], + checkedkey: [], + checkedListkey: [], + defaultProps: { + children: [], + label: "proName", + }, + isCollapsed: true, categoryList: [], keys: "", keywordList: [], dataListAll: [], - // 澶氶�夋 priceNow: "", checkAll: false, isIndeterminate: true, - // 閬僵灞� loading: false, radio: 3, - // 閫変腑鏁扮粍 ids: [], - // 闈炲崟涓鐢� single: true, - // 闈炲涓鐢� multiple: true, - // 鏄剧ず鎼滅储鏉′欢 showSearch: true, - // 鎬绘潯鏁� - total: 0, - // 浣撴濂楅琛ㄦ牸鏁版嵁 packageList: [], - // 濂楅閫変腑鐨勭埗椤� allpackageList: [], - // 宸查�� newproName: [], - // 鎵�鏈変綋妫�椤圭洰路 allList: [], - // 鎵�鏈夊椁愭暟鎹� - // allpackage:[], - // 寮瑰嚭灞傛爣棰� + treeList: [], title: "", - // 鏄惁鏄剧ず寮瑰嚭灞� + lastXianPrice: 0, open: false, Seachopen: false, + checkedNodes: [], pacId: "", - // 鏌ヨ鍙傛暟 + total: 0, + total1: 0, queryParams: { pageNum: 1, pageSize: 10, pacName: null, pacRemark: null, }, - // 琛ㄥ崟鍙傛暟 - form: {}, - // 琛ㄥ崟鏍¢獙 - rules: { - deleted: [ - { required: true, validator: checkPhoneNum, trigger: "blur" }, - ], - pacName: [ - { required: true, validator: checkPhoneNum, trigger: "blur" }, - ], - pacStatus: [ - { required: true, validator: checkPhoneNum, trigger: "change" }, - ], - // categoryId: [ - // { required: true, validator: checkPhoneNum, trigger: "change" }, - // ], - keywords: [ - { required: true, validator: checkPhoneNum, trigger: "change" }, - ], - isOnSale: [ - { required: true, validator: checkPhoneNum, trigger: "change" }, - ], - sort: [{ required: true, validator: checkPhoneNum, trigger: "blur" }], - retailPrice: [ - { required: true, validator: checkPhoneNum, trigger: "blur" }, - ], - counterPrice: [ - { required: true, validator: checkPhoneNum, trigger: "blur" }, - ], + queryParams1: { + page: 1, + pageSize: 30, + nr: "", }, + form: { + xianprice: null, + counterPrice: null, + limits: 10, + }, + forms: {}, + youhui: 10, + debounceTimer: null, + rules: {}, }; }, created() { @@ -384,34 +496,76 @@ this.getCategory(); }, methods: { - toggleCollapse() { - this.isCollapsed = !this.isCollapsed; // 鐐瑰嚮鎸夐挳鏃跺垏鎹sCollapsed鐨勫�� + debounceNumberChange(currentValue, oldValue) { + clearTimeout(this.debounceTimer); + this.debounceTimer = setTimeout(() => { + this.numberChange(currentValue, oldValue); + }, 300); }, - /** 鏌ヨ浣撴濂楅鍒楄〃 */ + numberChange(currentValue, oldValue) { + this.$confirm("纭畾淇敼鎵�鏈夊瓙椤圭殑鎶樻墸鍚楋紵", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + this.youhui = currentValue; + this.DataList.forEach((item) => { + item.limits = this.youhui; + const proPrice = new Big(item.priceOrd); + const limits = new Big(item.limits); + const result = proPrice.times(limits.div(10)); + item.priceNow = result.toNumber(); + }); + this.form.xianprice = this.DataList.reduce((sum, item) => { + return sum.plus(new Big(item.priceNow || "0")); + }, new Big(0)).toNumber(); + this.lastXianPrice = this.form.xianprice; + }) + .catch(() => { + this.youhui = oldValue; + }); + }, + updateProPrice(row) { + const proPrice = new Big(row.priceOrd); + const limits = new Big(row.limits); + const result = proPrice.times(limits.div(10)); + row.priceNow = result.toNumber(); + this.form.xianprice = this.DataList.reduce((sum, item) => { + return sum.plus(new Big(item.priceNow || "0")); + }, new Big(0)).toNumber(); + this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; + }, + calculateDiscount(row) { + if (row.limits > 10) { + row.limits = 10; + } else if (row.limits < 0) { + row.limits = 0; + } + this.updateProPrice(row); + }, + toggleCollapse() { + this.isCollapsed = !this.isCollapsed; + }, + filterNode(value, data) { + if (!value) return true; + return data.proName.indexOf(value) !== -1 || data.proEngName.indexOf(value) !== -1; + }, getList() { this.loading = true; getPacTjProjectList().then((response) => { this.allList = response.data; - if (this.allList.proStatus === 0) { - this.allList.proStatus = "鍚敤"; - } else { - this.allList.proStatus = "鍋滅敤"; - } this.loading = false; }); getPacList(this.queryParams).then((response) => { response.rows.forEach((item, index) => { - item.newID = - (this.queryParams.pageNum - 1) * this.queryParams.pageSize + - index + - 1; + item.newID = (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1; }); this.total = response.total; this.packageList = response.rows; this.loading = false; }); }, - /** 鏌ヨ鍏抽敭瀛楀垪琛� */ getKeyword() { this.loading = true; listKeyword(this.queryParams).then((response) => { @@ -420,28 +574,20 @@ }, sel(val) { let id = val; - this.keys = ""; - id.forEach((item) => { - this.keys += item + ","; - }); + this.keys = id.join(","); }, - /** 鏌ヨ绫荤洰鍒楄〃 */ getCategory() { this.loading = true; listCategory(this.queryParams).then((response) => { this.categoryList = response.rows; }); }, - shangpin(vals) { - console.log(vals); - }, - // 鍙栨秷鎸夐挳 + shangpin(vals) {}, cancel() { this.open = false; this.Seachopen = false; this.reset(); }, - // 琛ㄥ崟閲嶇疆 reset() { this.form = { pacId: null, @@ -456,16 +602,16 @@ allProName: null, priceNow: null, proId: null, - // pacStatus: "鍚敤", + xianprice: null, + counterPrice: null, + limits: 10, }; this.resetForm("form"); }, - /** 鎼滅储鎸夐挳鎿嶄綔 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, - handlePackage() { this.$refs.aaa.open = true; this.$refs.aaa.getList(); @@ -479,51 +625,29 @@ this.form.retailPrice = param1[0].price; } }, - /** 閲嶇疆鎸夐挳鎿嶄綔 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, - // 澶氶�夋閫変腑鏁版嵁 handleSelectionChange(selection) { - if (!selection[0]) { - return; - } - this.form = selection[0]; + if (!selection[0]) return; + this.forms = selection[0]; this.ids = selection.map((item) => item.pacId); this.single = selection.length !== 1; this.multiple = !selection.length; }, - /** 鏂板鎸夐挳鎿嶄綔 */ handleAdd() { this.reset(); this.open = true; this.title = "浣撴濂楅淇℃伅缁存姢"; - - // getAllList().then((response) => { - // this.allList = response.data; - // if (this.allList.proStatus === 0) { - // this.allList.proStatus = "鍚敤"; - // } else { - // this.allList.proStatus = "鍋滅敤"; - // } - // this.loading = false; - // }); - // if (!this.form.tjProjectList) { - // this.form.tjProjectList = [] - // this.form.tjProjectList.push({ - // id: parseInt(length), - // proName: "", - // allSonProName: "", - // proPrice: "", - // priceNow: "", - // proId: "", - // Selection, - // }); - // } + this.DataList = []; + this.checkedkey = []; + this.queryParams1.nr = ""; + this.queryParams1.page = 1; + this.checkedListkey = []; + this.checkedNodes = []; + this.getDataList(); }, - - // 鏄惁鍚敤 handleStatusChange(row) { let data = { pacId: row.pacId, @@ -531,46 +655,70 @@ }; let text = row.pacStatus === "0" ? "鍚敤" : "鍋滅敤"; this.$confirm("纭瑕�" + text + row.pacName + "濂楅鍚楋紵") - .then(function () { - return updateStatus(data); - }) + .then(() => updateStatus(data)) .then(() => { this.msgSuccess(text + "鎴愬姛"); }) - .catch(function () { + .catch(() => { row.pacStatus = row.pacStatus === "0" ? "0" : "1"; }); }, - handleUp() { this.title = "浣撴濂楅淇℃伅缁存姢"; this.open = true; - getPacTjProjectList().then((response) => { - this.allList = response.data; - this.loading = false; + getPacInFo(this.forms.pacId).then((response) => { + Object.keys(response.data).forEach((key) => { + this.$set(this.form, key, response.data[key]); + }); + this.youhui = response.data.limits || 10; + this.pics = response.data.price || 0; + this.form.xianprice = response.data.newPrice || 0; + this.lastXianPrice = this.form.xianprice; + this.form.keywords = response.data.keywords && response.data.keywords.length > 0 + ? response.data.keywords.slice(0, -1).split(",") + : []; + this.DataList = response.data.packageProjects || []; + this.checkedkey = this.DataList.map(item => item.proId || ''); + this.checkedListkey = [...this.checkedkey]; + this.checkedNodes = [...this.checkedkey]; + this.getDataList(); }); }, - /** 淇敼鎸夐挳鎿嶄綔 */ handleUpdate(row) { - // this.form = row; - // this.form.keywords = this.form.keyIds; - // if (this.form.pacStatus === 0) { - // this.form.pacStatus = "鍚敤"; - // } else { - // this.form.pacStatus = "鍋滅敤"; - // } + this.reset(); this.title = "浣撴濂楅淇℃伅缁存姢"; this.open = true; + this.loading = true; getPacInFo(row.pacId).then((response) => { - this.form = response.data; - this.form.keywords = this.form.keyIds; + const data = response.data || {}; + Object.keys(data).forEach((key) => { + this.$set(this.form, key, data[key]); + }); + this.youhui = data.limits || 10; + this.pics = data.price || 0; + this.form.xianprice = data.newPrice || 0; + this.lastXianPrice = this.form.xianprice; + this.form.keywords = data.keywords && data.keywords.length > 0 + ? data.keywords.slice(0, -1).split(",") + : []; + this.DataList = data.packageProjects || []; + this.checkedkey = this.DataList.map(item => item.proId || ''); + this.checkedListkey = [...this.checkedkey]; + this.checkedNodes = [...this.checkedkey]; + return this.getDataList(); + }).then(() => { + this.loading = false; + this.$nextTick(() => { + this.$refs.form.validate(); + }); + }).catch((error) => { + this.loading = false; + this.$message.error("鍔犺浇鏁版嵁澶辫触"); + console.error(error); }); }, - - // 鏂板琛� addmembers() { if (this.form.pacName) { - if (!this.form.tjProjectList) { this.form.tjProjectList = []; this.form.tjProjectList.push({ @@ -580,7 +728,6 @@ proPrice: "", priceNow: "", proId: "", - Selection, }); } else { this.form.tjProjectList.push({ @@ -590,7 +737,6 @@ proPrice: "", priceNow: "", proId: "", - Selection, }); } } else { @@ -598,179 +744,255 @@ } this.$forceUpdate(); }, - - // 鍒犻櫎琛� Delete(index) { - if (this.form.tjProjectList.length == 0) { - this.$alert("璇峰厛閫夋嫨瑕佸垹闄ょ殑鏁版嵁", "鎻愮ず", { - confirmButtonText: "纭畾", - }); + if (this.form.tjProjectList.length === 0) { + this.$alert("璇峰厛閫夋嫨瑕佸垹闄ょ殑鏁版嵁", "鎻愮ず", { confirmButtonText: "纭畾" }); } else { this.form.tjProjectList.splice(index, 1); } }, - + handleDelete1(row) { + this.DataList = this.DataList.filter((item) => item.proId !== row.proId); + const index = this.checkedNodes.indexOf(row.proId); + if (index > -1) { + this.checkedNodes.splice(index, 1); + } + const tree = this.$refs.tree; + const node = tree.getNode(row.proId); + if (node) { + node.setChecked(false); + } + this.updateTotalPrice(); + }, getSelectValue(val) { this.form.tjProjectList.forEach((formitem) => { - if (formitem.proName == val) { + if (formitem.proName === val) { formitem.allSonProName = ""; this.allList.find((item) => { - if (item.proName == val) { + if (item.proName === val) { formitem.proId = item.proId; formitem.proPrice = item.proPrice; formitem.priceNow = item.proPrice; - formitem.allSonProName =item.allSonProName; - // item.tjProjectList.forEach((item1) => { - // this.$nextTick(() => { - // formitem.allSonProName = - // formitem.allSonProName + "," + item1.proName; - // }); - // // this.form.tjProjectList.allSonProName = this.form.tjProjectList.allSonProName+','+item1.proName - // }); + formitem.allSonProName = item.allSonProName; } }); } }); - for (let i = 0; i < this.form.tjProjectList.length; i++) { for (let j = i + 1; j < this.form.tjProjectList.length; j++) { - if ( - this.form.tjProjectList[i].proId == this.form.tjProjectList[j].proId - ) { + if (this.form.tjProjectList[i].proId === this.form.tjProjectList[j].proId) { this.form.tjProjectList.splice(j, 1); j--; this.$modal.msgError("姝ら」鐩凡褰曞叆锛屼笉鍙噸澶嶅綍鍏�"); } } } - return this.form.tjProjectList; }, - /** 鎻愪氦鎸夐挳 */ - submitForm() { - this.$refs["form"].validate((valid) => { - if (valid) { - if (this.form.pacId != null) { - // if (this.form.pacStatus === "鍚敤") { - // this.form.pacStatus = 0; - // } else { - // this.form.pacStatus = 1; - // } - this.form.keywords = this.keys; - updatePackage(this.form).then((response) => { - this.$modal.msgSuccess("淇敼鎴愬姛"); - this.open = false; - this.getList(); - }); - } else { - this.form.keywords = this.keys; - // if (this.form.pacStatus === "鍚敤") { - // this.form.pacStatus = 0; - // } else { - // this.form.pacStatus = 1; - // } - addPackage(this.form).then((response) => { - this.$modal.msgSuccess("鏂板鎴愬姛"); - this.open = false; - this.getList(); - }); + objectSpanMethod({ row, column, rowIndex, columnIndex }) { + let fields = ["propinName"]; + let cellValue = row[column.property]; + if (cellValue && fields.includes(column.property)) { + let prevRow = this.DataList[rowIndex - 1]; + let nextRow = this.DataList[rowIndex + 1]; + if (prevRow && prevRow[column.property] === cellValue) { + return { rowspan: 0, colspan: 0 }; + } else { + let countRowspan = 1; + while (nextRow && nextRow[column.property] === cellValue) { + nextRow = this.DataList[++countRowspan + rowIndex]; + } + if (countRowspan > 1) { + return { rowspan: countRowspan, colspan: 1 }; } } + } + }, + renderContent(h, { node, data, store }) { + return ( + <span class="custom-tree-node"> + <span>{node.label}</span> + <span>({data.proPrice}鍏�)</span> + </span> + ); + }, + getDataList() { + this.loading = true; + search(this.queryParams1).then((response) => { + this.Treedata = response.data.list; + this.total1 = response.data.total; + this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0); + this.$nextTick(() => { + this.$refs.tree.setCheckedKeys(this.checkedNodes); + }); + }); + this.loading = false; + }, + handleFilterInput() { + this.queryParams1.page = 1; + this.getDataList(); + this.$nextTick(() => { + this.$refs.tree.setCheckedKeys(this.checkedNodes); }); }, - /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleCurrentChecked(data, checked, indeterminate) { + if (checked) { + if (!this.DataList.some((item) => item.proId === data.proId)) { + this.DataList.push({ + proId: data.proId, + proName: data.proName, + priceOrd: data.proPrice, + limits: 10, + priceNow: data.proPrice, + }); + } + if (!this.checkedNodes.includes(data.proId)) { + this.checkedNodes.push(data.proId); + } + } else { + this.DataList = this.DataList.filter((item) => item.proId !== data.proId); + const index = this.checkedNodes.indexOf(data.proId); + if (index > -1) { + this.checkedNodes.splice(index, 1); + } + } + this.updateTotalPrice(); + }, + updateTotalPrice() { + this.form.xianprice = this.DataList.reduce((sum, item) => { + return sum.plus(new Big(item.priceNow || "0")); + }, new Big(0)).toNumber(); + this.pics = this.DataList.reduce((total, item) => total + item.priceOrd, 0); + }, + changeXianjia() { + if (this.form.xianprice !== 0) { + this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; + } + }, + numberChangeXianPrice(currentValue, oldValue) { + if (this.form.xianprice === this.lastXianPrice || !this.form.xianprice) return; + clearTimeout(this.debounceTimer); + this.debounceTimer = setTimeout(() => { + this.$confirm("纭畾淇敼鎵�鏈夊瓙椤圭殑鎶樻墸鍚楋紵", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + this.youhui = currentValue; + let totalYsprice = new Big(0); + this.DataList.forEach((item) => { + item.limits = this.youhui; + const ordPrice = new Big(item.priceOrd); + const discount = new Big(item.limits); + const result = ordPrice.times(discount.div(10)); + item.priceNow = result.toNumber(); + totalYsprice = totalYsprice.plus(new Big(item.priceNow)); + }); + if (!totalYsprice.eq(this.form.xianprice)) { + const diff = new Big(this.form.xianprice).minus(totalYsprice); + if (this.DataList.length > 0) { + const lastItem = this.DataList[this.DataList.length - 1]; + const newYsPrice = new Big(lastItem.priceNow).plus(diff).toNumber(); + this.$set(this.DataList[this.DataList.length - 1], "priceNow", newYsPrice); + } + } + this.lastXianPrice = this.form.xianprice; + }) + .catch(() => { + this.youhui = oldValue; + }); + }, 500); + }, + spliceData() { + for (var i = 0; i < this.DataList.length; i++) { + for (var j = i + 1; j < this.DataList.length; j++) { + if (this.DataList[i].proId === this.DataList[j].proId) { + this.DataList.splice(j, 1); + j--; + } + } + } + return this.DataList; + }, + handleCurrentChecked1(data, checked, checkedNodes) { + if (!checked) { + this.DataList = this.DataList.filter((item) => item.proId !== data.proId); + this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); + this.pics = this.TotalPrice1; + } else { + this.DataList.push(data); + this.pics = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); + this.spliceData(); + this.TotalPrice1 = this.pics; + } + }, + handleDeletes(row) { + this.DataList = this.DataList.filter((item) => item.proParentId !== row.proParentId); + this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + item.priceOrd, 0); + }, + submitForm() { + this.form.limits = this.youhui; + this.form.price = this.pics; + this.form.priceNow = this.form.xianprice; + if (this.keys) { + this.form.keywords = this.keys; + } + let packageProjects = []; + this.DataList.forEach((item) => { + packageProjects.push({ + proName: item.proName, + proId: item.proId, + priceNow: item.priceNow, + limits: item.limits, + priceOrd: item.priceOrd, + }); + }); + let data = { + pacName: this.form.pacName, + limits: this.form.limits, + pacStatus: this.form.pacStatus, + packageProjects: packageProjects, + newPrice: this.form.xianprice, + price: this.pics, + pacId: this.form.pacId || null, + isOnSale: this.form.isOnSale, + sort: this.form.sort, + retailPrice: this.form.retailPrice, + tjCategory: this.form.tjCategory, + pacRemark: this.form.pacRemark, + detail: this.form.detail, + }; + saveOreditTjPacNew(data).then((res) => { + this.open = false; + this.getList(); + }); + }, handleDelete(row) { const pacIds = row.pacId || this.ids; this.$modal .confirm('鏄惁纭鍒犻櫎浣撴濂楅缂栧彿涓�"' + pacIds + '"鐨勬暟鎹」锛�') - .then(function () { - return delPackage(pacIds); - }) + .then(() => delPackage(pacIds)) .then(() => { this.getList(); this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); }) - .catch(() => { }); + .catch(() => {}); }, - - /** 鍒嗛厤濂楅鍐呴」鐩搷浣� */ - handleProject: function (row) { + handleProject(row) { const pacId = row.pacId; this.$router.push("/system/user-auth/role/" + pacId); }, - - /** 瀵煎嚭鎸夐挳鎿嶄綔 */ handleExport() { this.download( "system/package/export", - { - ...this.queryParams, - }, + { ...this.queryParams }, `package_${new Date().getTime()}.xlsx` ); - }, - // 濂楅璇︽儏 - // handleSeach(row) { - // this.Seachopen = true; - // this.loading = true; - // const pacId = row.pacId; - // this.pacId = row.pacId - // let data = { - // pacId: pacId, - // }; - // getAllPackage(data).then((response) => { - // this.allpackageList = response.data.tjProjectList; - // this.loading = false; - // let arr = []; - // this.allpackageList.forEach((item) => { - // arr.push(item.proName); - // }); - // this.newproName = arr; - // }); - - // getAllPackageList().then((response) => { - // this.allList = response.data; - // this.loading = false; - // }); - // }, - // // 鍏ㄩ�� - // handleCheckAllChange(val) { - // this.newproName = val ? this.allList : []; - // this.isIndeterminate = false; - // }, - - // handleCheckedCitiesChange(value) { - // let checkedCount = value.length; - // this.checkAll = checkedCount === this.allList.length; - // this.isIndeterminate = - // checkedCount > 0 && checkedCount < this.allList.length; - // }, - - submitcheckbox() { - let _this = this; - let proIds = []; - this.allList.forEach((item) => { - _this.newproName.forEach((item1) => { - if (item.proName == item1) { - proIds.push(item.proId); - } - }); - }); - let data = { - pacid: Number(this.pacId), - proIds: proIds.toString(), - }; - - updateProject(data).then((response) => { - this.$modal.msgSuccess("鎴愬姛"); - this.Seachopen = false; - }); }, }, }; </script> - - <style> .el-tooltip__popper { max-width: 800px; @@ -801,9 +1023,18 @@ bottom: 2%; } -/* .dialo{ - display: flex; - flex-direction: row; +.tab3 { + max-height: 400px; + overflow-y: auto; + border: 1px solid #d9d9d9; +} + +/* .custom-tree-node { + flex: 1; + display: flex; align-items: center; -} */ + justify-content: space-between; + font-size: 14px; + padding-right: 8px; + } */ </style> \ No newline at end of file -- Gitblit v1.8.0