From a94874c773b96378ce3aaeee38c2175508d43360 Mon Sep 17 00:00:00 2001 From: XiaoRuby <3114200645@qq.com> Date: 星期二, 22 八月 2023 09:43:22 +0800 Subject: [PATCH] 8-21基础数据完成 --- src/api/basicData/index.js | 75 ++++++ src/views/basicData/index.vue | 551 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/standardLibrary/index.vue | 26 ++ 3 files changed, 648 insertions(+), 4 deletions(-) diff --git a/src/api/basicData/index.js b/src/api/basicData/index.js new file mode 100644 index 0000000..4e00b7a --- /dev/null +++ b/src/api/basicData/index.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' + +const Api = { + addStandardProjectGroup: "/productModel/selectfather", // 娣诲姞鏍囧噯-->閫夋嫨椤圭洰鍒嗙粍 + productModelSelectmater: "/productModel/selectmater", // 閫夋嫨鏍峰搧鍚嶇О + addproductModel: "/productModel/addproductModel", // 娣诲姞鏍囧噯 + selectproductModel: "/productModel/selectproductModel", // 鏌ヨ鏍囧噯妯$増鍒楄〃 + deleteProductModel: "/productModel/delproductModel", // 鍒犻櫎鏍囧噯妯$増 + selectproductModelById: "/productModel/selectproductModelById", // 鏍规嵁id鏌ヨ + updateProductModel: "/productModel/writeproductModel", // 鏇存柊鏍囧噯 -->缂栬緫 + deleteList: "/productModel/delAllproductModel", // 鎵归噺鍒犻櫎 + +} + +export function addStandardProjectGroupApi() { + return request({ + url: Api.addStandardProjectGroup, + method: 'get' + }) +} + +export function productModelSelectmaterApi() { + return request({ + url: Api.productModelSelectmater, + method: "get" + }) +} + +export function addproductModelApi(formData) { + return request({ + url: Api.addproductModel, + method: 'post', + data: formData + }) +} + +export function updateProductModelApi(formData) { + return request({ + url: Api.updateProductModel + '?id=' + formData.id, + method: 'post', + data: formData + }) +} + +export function selectproductModelApi(params) { + return request({ + url: Api.selectproductModel, + method: "get", + params: params + }) +} + +export function deleteProductModelApi(id){ + return request({ + url: Api.deleteProductModel, + method: "post", + params: {id: id} + }) +} + +export function selectproductModelByIdApi(id){ + return request({ + url: Api.selectproductModelById, + method: "get", + params: {id: id} + }) +} + +export function deleteListApi(id){ + return request({ + url: Api.deleteList, + method: "post", + params:{ids: id.toString()} + }) +} \ No newline at end of file diff --git a/src/views/basicData/index.vue b/src/views/basicData/index.vue new file mode 100644 index 0000000..576920a --- /dev/null +++ b/src/views/basicData/index.vue @@ -0,0 +1,551 @@ +<template> + <div class="main_div"> + <div class="top_div"> + <span>鏍峰搧鍚嶇О锛�</span> + <el-select + v-model="params.material" + size="small" + placeholder="璇烽�夋嫨鏍峰搧鍚嶇О" + > + <el-option + v-for="item in productModelSelectmater" + :value="item" + :key="item.index" + :label="item" + ></el-option> + </el-select> + <span class="top_div_span">椤圭洰鍒嗙粍锛�</span> + <el-input + v-model="params.father" + placeholder="璇疯緭鍏ラ」鐩垎缁�" + style="width: 10%" + size="small " + ></el-input> + <span class="top_div_span">椤圭洰鍚嶇О锛�</span> + <el-input + v-model="params.name" + placeholder="璇疯緭鍏ラ」鐩悕绉�" + style="width: 10%" + size="small " + ></el-input> + <el-button + type="primary" + class="top_div_button" + size="small" + @click="selectProductModelTable" + >鏌ヨ</el-button + > + <el-button class="top_div_button" size="small" @click="params = {}" + >閲嶇疆</el-button + > + <div style="float: right"> + <el-button + class="top_div_button" + type="primary" + size="small" + icon="el-icon-folder-add" + @click="centerDialogVisible = true" + >鏂板</el-button + > + <el-dialog + :visible.sync="centerDialogVisible" + width="30%" + right + :before-close="handleClose" + > + <template slot="title"> + <div class="addTop"> + <span>{{ isUpdate ? "鏇存柊" : "鏂板" }}鍩虹鏁版嵁</span> + </div> + </template> + <el-form :model="form" :rules="rules" ref="ruleForm" class="addForm"> + <el-form-item prop="material" required> + <span>鏍峰搧鍚嶇О锛�</span> + <el-select + v-model="form.material" + style="width: 85%" + placeholder="璇烽�夋嫨鏍峰搧鍚嶇О" + > + <el-option + v-for="(item, index) in productModelSelectmater" + :key="index" + :value="item" + :label="item" + ></el-option> + </el-select> + </el-form-item> + <el-form-item> + <span>椤圭洰鍒嗙粍锛�</span> + <el-select + v-model="form.father" + style="width: 85%" + placeholder="璇烽�夋嫨椤圭洰鍒嗙粍" + > + <el-option + v-for="(item, index) in projectGroupingOptions" + :key="index" + :value="item" + :label="item" + ></el-option> + </el-select> + </el-form-item> + <el-row :gutter="24"> + <el-col :span="12" + ><el-form-item prop="name" required + ><span>椤圭洰鍚嶇О锛�</span> + <el-input + style="width: 70%" + v-model="form.name" + placeholder="璇疯緭鍏ラ」鐩悕绉�" + ></el-input></el-form-item + ></el-col> + <el-col :span="12"> + <el-form-item prop="unit"> + <span + v-html="'鍗� 浣嶏細'" + ></span> + <el-input + style="width: 70%" + v-model="form.unit" + placeholder="璇疯緭鍏ュ崟浣�" + ></el-input></el-form-item + ></el-col> + </el-row> + </el-form> + + <span slot="footer" class="dialog-footer"> + <el-button @click="centerDialogVisible = false" size="small " + >鍙� 娑�</el-button + > + <el-button type="primary" @click="submitAdd" size="small ">{{ + isUpdate ? "鏇� 鏂�" : "淇� 瀛�" + }}</el-button> + </span> + </el-dialog> + <el-button + class="top_div_button" + icon="el-icon-delete-solid" + size="small" + style="color: #00a5ff" + @click="deleteListClick" + >鍒犻櫎</el-button + > + </div> + </div> + <div class="table_div"> + <el-table + :data="tableData" + style="width: 100%; margin-bottom: 20px" + row-key="name" + border + height="calc(100vh - 250px)" + default-expand-all + ref="multipleTable" + @select="selectTr" + @select-all="selectAll" + :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" + > + <el-table-column type="selection" label="搴忓彿"> </el-table-column> + <el-table-column + type="index" + width="50px" + label="搴忓彿" + ></el-table-column> + <el-table-column label="椤圭洰鍚嶇О" sortable> + <template scope="scope"> + <el-tag + ><div + class="firstDiv" + :style="`color: ${ + scope.row.code == '[1]' ? '#16a7ff' : '#58c173' + }`" + > + {{ scope.row.code == "[1]" ? "01" : "02" }} + </div> + <span style="color: black">{{ scope.row.name }}</span></el-tag + > + </template> + </el-table-column> + <el-table-column prop="unit" label="鍗曚綅" sortable></el-table-column> + <el-table-column label="鎿嶄綔"> + <template slot-scope="scope"> + <div v-if="scope.row.code == '[2]' || scope.row.edit == true"> + <el-button type="text" size="mini" @click="childrenClick(scope)" + >缂栬緫</el-button + > + <el-button + type="text" + size="mini" + @click="deleteTreeChildren(scope)" + >鍒犻櫎</el-button + > + </div> + </template> + </el-table-column> + </el-table> + </div> + </div> +</template> + +<script> +import { + addStandardProjectGroupApi, + productModelSelectmaterApi, + addproductModelApi, + selectproductModelApi, + deleteProductModelApi, + selectproductModelByIdApi, + updateProductModelApi, + deleteListApi, +} from "@/api/basicData/index"; +export default { + name: "BasicDataMessage", + data() { + return { + isAllSelect: false, + projectGroupingOptions: [], + productModelSelectmater: [], + value: "", + isUpdate: false, + projectName: "", + tableData: [], + centerDialogVisible: false, + deleteList: [], + form: { + material: "", // 鏍峰搧鍚嶇О + father: "", // 椤圭洰鍒嗙粍 + name: "", // 椤圭洰鍚嶇О + unit: "", // 鍗曚綅 + }, + params: { + material: "", + father: "", + name: "", + }, + rules: { + material: [ + { required: true, message: "璇烽�夋嫨鏍峰搧鍚嶇О", trigger: "change" }, + ], + name: [ + { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" }, + { + min: 2, + max: 25, + message: "闀垮害鍦� 2 鍒� 25 涓瓧绗�", + trigger: "blur", + }, + ], + unit: [ + { required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }, + { + min: 1, + max: 25, + message: "闀垮害鍦� 1 鍒� 25 涓瓧绗�", + trigger: "blur", + }, + ], + }, + }; + }, + methods: { + submitAdd() { + if (!this.isUpdate) { + this.$refs.ruleForm.validate((valid) => { + if (valid) { + addproductModelApi(this.form).then((res) => { + this.centerDialogVisible = false; + this.$message({ + message: res.message, + type: "success", + }); + this.selectProductModelTable(); + }); + } + }); + } else { + this.$refs.ruleForm.validate((valid) => { + if (valid) { + updateProductModelApi(this.form).then((res) => { + this.centerDialogVisible = false; + this.$message({ + message: res.message, + type: "success", + }); + this.selectProductModelTable(); + }); + } + }); + } + }, + async selectProductMaster() { + await productModelSelectmaterApi().then((res) => { + this.productModelSelectmater = res.data; + }); + }, + handleClose(done) { + this.$confirm("纭鍏抽棴锛�") + .then((_) => { + this.centerDialogVisible = false; + done(); + }) + .catch((_) => {}); + }, + selectProductModelTable() { + selectproductModelApi(this.params).then((res) => { + res.data.forEach((i) => { + if (i.name === undefined) { + i.name = i.children[0].name; + i.unit = i.children[0].unit; + i.id = i.children[0].id; + i.edit = true; + delete i.children; + } + }); + this.tableData = res.data; + this.selectDataList(); + }); + }, + childrenClick(scope) { + this.isUpdate = true; + let father = ""; + selectproductModelByIdApi(scope.row.id).then((res) => { + let result = res.data; + this.form.name = result.name; + this.form.material = result.material; + this.form.father = result.father; + this.form.unit = result.unit; + this.form.id = scope.row.id; + }); + this.centerDialogVisible = true; + }, + selectDataList() { + this.tableData.forEach((a) => { + a.code = "[1]"; + if (a.children != undefined) { + a.children.forEach((b) => { + b.code = "[2]"; + }); + } + }); + }, + deleteTreeChildren(scope) { + deleteProductModelApi(scope.row.id).then((res) => { + this.$message({ + message: res.message, + type: "success", + }); + this.selectProductModelTable(); + }); + }, + + // 琛ㄦ牸鏍戝叏閮ㄩ�変腑閰嶇疆 + // 鍏ㄩ��/鍙栨秷閫夋搷浣� + selectAll(val) { + this.isAllSelect = !this.isAllSelect; + let data = this.tableData; + this.toggleSelect(data, this.isAllSelect, "all"); + // 鑷畾涔� + if (this.isAllSelect) { + val.forEach((i) => { + let isExist = false; + this.deleteList.findIndex((c) => { + if (c === i.id) { + isExist = true; + } + }); + if (!isExist && i.id !== undefined) { + this.deleteList.push(i.id); + } + }); + } else { + this.deleteList.splice(0, this.deleteList.length); + } + // 鑷畾涔夌粨鏉� + }, + //閫夋嫨鏌愯 + selectTr(selection, row) { + this.$set(row, "isChecked", !row.isChecked); + this.$nextTick(() => { + this.isAllSelect = row.isChecked; + this.toggleSelect(row, row.isChecked, "tr"); + }); + + if (row.isChecked === true) { + if (row.children !== undefined) { + row.children.forEach((i) => { + this.deleteList.push(i.id); + }); + } else { + this.deleteList.push(row.id); + } + } else if (row.isChecked === false) { + if (row.children !== undefined) { + row.children.forEach((i) => { + this.deleteList.findIndex((c, index) => { + if (c === i.id) { + this.deleteList.splice(index, 1); + return; + } + }); + }); + } + this.deleteList.findIndex((c, index) => { + if (c === row.id) { + this.deleteList.splice(index, 1); + return; + } + }); + } + }, + //閫掑綊瀛愮骇 + toggleSelect(data, flag, type) { + if (type === "all") { + if (data.length > 0) { + data.forEach((item) => { + this.toggleSelection(item, flag); + if (item.children && item.children.length > 0) { + this.toggleSelect(item.children, flag, type); + } + }); + } + } else { + if (data.children && data.children.length > 0) { + data.children.forEach((item) => { + item.isChecked = !item.isChecked; + this.$refs.multipleTable.toggleRowSelection(item, flag); + this.toggleSelect(item, flag, type); + }); + } + } + }, + //鏀瑰彉閫変腑 + toggleSelection(row, flag) { + this.$set(row, "isChecked", flag); + this.$nextTick(() => { + if (flag) { + this.$refs.multipleTable.toggleRowSelection(row, flag); + } else { + this.$refs.multipleTable.clearSelection(); + } + }); + }, + // 琛ㄦ牸鏍戝叏閮ㄩ�変腑閰嶇疆 缁撴潫 + deleteListClick() { + deleteListApi(this.deleteList).then((res) => { + this.$message({ + message: res.message, + type: "success", + }); + this.selectProductModelTable(); + }); + }, + }, + mounted() { + this.selectProductMaster().then((res) => { + this.params.material = this.productModelSelectmater[0]; + this.selectProductModelTable(); + }); + }, + watch: { + centerDialogVisible: { + handler(newVal, oldVal) { + if (newVal == true) { + addStandardProjectGroupApi().then((res) => { + this.projectGroupingOptions = res.data; + }); + } else { + // 璇锋眰鎴愬姛娓呴櫎鏁版嵁 + this.form = {}; + // 鎻愪氦鎴愬姛娓呴櫎妫�楠� + this.$refs.ruleForm.resetFields(); + this.isUpdate = false; + } + }, + }, + }, +}; +</script> + +<style> +.el-tag.el-tag { + border-color: transparent; + background-color: transparent; +} +.el-tag.el-tag:hover { + border-color: transparent; + background-color: transparent; +} +.firstDiv { + float: left; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: #eff5ff; + margin-top: 5px; + justify-content: center; + display: flex; + align-items: center; + margin-right: 8px; +} +.main_div { + width: 100%; + position: relative; + padding: 0 10px 10px 10px; +} +.el-dialog__header { + padding: 0; +} +.el-dialog__headerbtn { + top: 0; +} +.el-dialog__close { + padding: 8px 0; + color: #ffffff !important; +} +.addForm { + padding: 20px 20px 0 20px; +} +.addForm .el-form-item__error { + left: 66px; +} +.el-dialog { + border-radius: 10px; +} +.el-dialog__body { + padding: 30px 20px 0 20px; +} +.addTop { + border-top-left-radius: 10px; + border-top-right-radius: 10px; + background-color: #00a5ff; + color: #ffffff; + padding: 8px 20px; + float: left; + height: 30px; + width: 100%; +} +.addTop span { + font-size: 16px; + font-weight: 700; +} +.table_div { + margin-top: 10px; + width: 100%; + height: calc(100vh - 230px); + background-color: #ffffff; + padding: 10px; +} + +.top_div { + height: 120px; + width: 100%; + padding: 30px 40px; + background-color: #ffffff; +} +.top_div_span { + margin-left: 50px; +} +.top_div_button { + margin-left: 20px; +} +</style> diff --git a/src/views/standardLibrary/index.vue b/src/views/standardLibrary/index.vue index 274125d..4a198f1 100644 --- a/src/views/standardLibrary/index.vue +++ b/src/views/standardLibrary/index.vue @@ -523,9 +523,26 @@ this.isAllSelect = row.isChecked; this.toggleSelect(row, row.isChecked, "tr"); }); + if (row.isChecked === true) { - this.deleteList.push(row.id); + if (row.children !== undefined) { + row.children.forEach((i) => { + this.deleteList.push(i.id); + }); + } else { + this.deleteList.push(row.id); + } } else if (row.isChecked === false) { + if (row.children !== undefined) { + row.children.forEach((i) => { + this.deleteList.findIndex((c, index) => { + if (c === i.id) { + this.deleteList.splice(index, 1); + return; + } + }); + }); + } this.deleteList.findIndex((c, index) => { if (c === row.id) { this.deleteList.splice(index, 1); @@ -533,7 +550,6 @@ } }); } - console.log(`output->this.deleteList`, this.deleteList); }, //閫掑綊瀛愮骇 toggleSelect(data, flag, type) { @@ -574,6 +590,7 @@ message: res.message, type: "success", }); + this.selectProductModelTable(); }); }, }, @@ -611,13 +628,14 @@ .library-bom { // padding-right: 10px; width: 300px; - // height: 100%; - max-height: 100%; + height: 100%; + // max-height: 100%; // margin-right: 12px; // overflow-y: scroll; .el-tree { // margin-top: width: 100%; + overflow: scroll; ::v-deep .el-tree-node__content { height: 24px !important; font-size: 18px; -- Gitblit v1.9.3