From 781e1ea65273cf10d6e5ed39e435107d67a8c667 Mon Sep 17 00:00:00 2001 From: 晏有为 <13214124+yan-youwei@user.noreply.gitee.com> Date: 星期四, 16 五月 2024 17:21:59 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/view/b2-standard.vue | 367 ++++++++++++- src/view/notice.vue | 3 src/components/view/b1-report-preparation.vue | 70 +- index.html | 1 src/components/view/system-log.vue | 2 src/components/view/b3-classes.vue | 2 src/components/tool/onlyoffice.vue | 193 +++++++ src/components/view/person-manage.vue | 925 ++++++++++++++++++++------------- src/router/index.js | 5 src/assets/api/controller.js | 8 10 files changed, 1,139 insertions(+), 437 deletions(-) diff --git a/index.html b/index.html index ba5e1c3..93c7f79 100644 --- a/index.html +++ b/index.html @@ -21,6 +21,7 @@ </head> <body> <div id="app"></div> + <script type='text/javascript' src='http://192.168.73.130:9001/web-apps/apps/api/documents/api.js'></script> <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/plugins/js/plugin.js"></script> <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/luckysheet.umd.js"></script> </body> diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index 4ac4421..a843e5a 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -25,6 +25,7 @@ performanceShift, auxiliaryWorkingHours, unPass, + companies } } @@ -182,6 +183,7 @@ selectStandardProductListByMethodId: "/standardTree/selectStandardProductListByMethodId", //閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩� selectStandardMethodEnum: "/standardTree/selectStandardMethodEnum", //鑾峰彇鏍囧噯鏍戜笅鏍囧噯鏂规硶鏋氫妇 getStandardTree2: "/standardTree/getStandardTree2", //鑾峰彇浜у搧鏋舵瀯 + upStandardProducts: "/standardTree/upStandardProducts", //鑾峰彇浜у搧鏋舵瀯 } const standardMethod = { @@ -277,3 +279,9 @@ const unPass = { pageInsUnPass:"/unPass/pageInsUnPass", // 鏌ヨ涓嶅悎鏍兼牱鍝佹暟鎹� } + +const companies = { + selectCompaniesList: "/companies/selectCompaniesList", //鑾峰彇浜轰簨绯荤粺缁勭粐 + selectSimpleList: "/companies/selectSimpleList", //鑾峰彇浜轰簨绯荤粺缁勭粐涓嬬殑浜哄憳 + addPersonUser: "/companies/addPersonUser", //鑾峰彇浜轰簨绯荤粺缁勭粐涓嬬殑浜哄憳 +} diff --git a/src/components/tool/onlyoffice.vue b/src/components/tool/onlyoffice.vue new file mode 100644 index 0000000..f9865c6 --- /dev/null +++ b/src/components/tool/onlyoffice.vue @@ -0,0 +1,193 @@ +<!--onlyoffice 缂栬緫鍣�--> +<template> + <div id="vabOnlyOffice"></div> +</template> + +<script> +export default { + name: "VabOnlyOffice", + data() { + return { + doctype: "", + docEditor: null, + //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆 + option: { + url: "", + isEdit: false, + fileType: "", + title: "", + lang: "zh-CN", + isPrint: true, + user: {}, + editUrl: "" + } + }; + }, + created() { + const option = this.$route.query + this.option.url = option.url + this.option.isEdit = option.isEdit === "true" ? true : false + this.option.fileType = option.fileType + this.option.title = option.title + this.option.lang = option.lang + this.option.isPrint = option.isPrint + this.option.user.id = option.user_id + this.option.user.name = option.user_name + this.option.editUrl = option.editUrl + }, + beforeDestroy() { + if (this.docEditor !== null) { + this.docEditor.destroyEditor(); + this.docEditor = null; + } + }, + watch: { + option: { + handler: function(n) { + this.setEditor(n); + this.doctype = this.getFileType(n.fileType); + }, + deep: true + } + }, + mounted() { + if (this.option.url) { + this.setEditor(this.option); + } + }, + methods: { + async setEditor(option) { + console.log(`output->option`,option) + if (this.docEditor !== null) { + this.docEditor.destroyEditor(); + this.docEditor = null; + } + this.doctype = this.getFileType(option.fileType); + let config = { + document: { + //鍚庣紑 + fileType: option.fileType, + key: option.key || "", + title: option.title, + permissions: { + edit: option.isEdit, //鏄惁鍙互缂栬緫: 鍙兘鏌ョ湅锛屼紶false + print: option.isPrint, + download: false + // "fillForms": true,//鏄惁鍙互濉啓琛ㄦ牸锛屽鏋滃皢mode鍙傛暟璁剧疆涓篹dit锛屽垯濉啓琛ㄥ崟浠呭鏂囨。缂栬緫鍣ㄥ彲鐢ㄣ�� 榛樿鍊间笌edit鎴杛eview鍙傛暟鐨勫�间竴鑷淬�� + // "review": true //璺熻釜鍙樺寲 + }, + url: option.url + }, + documentType: this.doctype, + editorConfig: { + callbackUrl: option.editUrl, //"缂栬緫word鍚庝繚瀛樻椂鍥炶皟鐨勫湴鍧�锛岃繖涓猘pi闇�瑕佽嚜宸卞啓浜嗭紝灏嗙紪杈戝悗鐨勬枃浠堕�氳繃杩欎釜api淇濆瓨鍒拌嚜宸辨兂瑕佺殑浣嶇疆 + lang: option.lang, //璇█璁剧疆 + //瀹氬埗 + customization: { + autosave: false, //鏄惁鑷姩淇濆瓨 + chat: true, + comments: false, + help: false, + // "hideRightMenu": false,//瀹氫箟鍦ㄧ涓�娆″姞杞芥椂鏄樉绀鸿繕鏄殣钘忓彸渚ц彍鍗曘�� 榛樿鍊间负false + //鏄惁鏄剧ず鎻掍欢 + plugins: false + }, + user: { + id: option.user.id, + name: option.user.name + }, + mode: option.model ? option.model : "edit" + }, + width: "100%", + height: "100%", + token: option.token || "" + }; + + // eslint-disable-next-line no-undef,no-unused-vars + this.docEditor = new DocsAPI.DocEditor("vabOnlyOffice", config); + }, + getFileType(fileType) { + let docType = ""; + let fileTypesDoc = [ + "doc", + "docm", + "docx", + "dot", + "dotm", + "dotx", + "epub", + "fodt", + "htm", + "html", + "mht", + "odt", + "ott", + "pdf", + "rtf", + "txt", + "djvu", + "xps" + ]; + let fileTypesCsv = [ + "csv", + "fods", + "ods", + "ots", + "xls", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx" + ]; + let fileTypesPPt = [ + "fodp", + "odp", + "otp", + "pot", + "potm", + "potx", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx" + ]; + if (fileTypesDoc.includes(fileType)) { + docType = "text"; + } + if (fileTypesCsv.includes(fileType)) { + docType = "spreadsheet"; + } + if (fileTypesPPt.includes(fileType)) { + docType = "presentation"; + } + return docType; + } + } +}; +</script> + +<style> +html, +body { + height: 100%; +} +#app { + font-family: Avenir, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + color: #2c3e50; + height: 100%; +} +.qualityManual-container { + padding: 0 !important; + height: 100%; +} +.qualityManual-container-office { + width: 100%; + height: calc(100% - 55px); +} +</style> diff --git a/src/components/view/b1-report-preparation.vue b/src/components/view/b1-report-preparation.vue index 82269a0..5bfb65e 100644 --- a/src/components/view/b1-report-preparation.vue +++ b/src/components/view/b1-report-preparation.vue @@ -181,15 +181,15 @@ showSelect: false, select: false, do: [ - // { - // id: 'handleWeave', - // font: '鍦ㄧ嚎缂栧埗', - // type: 'text', - // method: 'handleWeave', - // disabFun: (row, index) => { - // return row.isExamine != null - // } - // }, + { + id: 'handleWeave', + font: '鍦ㄧ嚎缂栧埗', + type: 'text', + method: 'handleWeave', + disabFun: (row, index) => { + return row.isExamine != null + } + }, { id: 'download', font: '涓嬭浇', @@ -243,9 +243,9 @@ } ], linkEvent: { - // code: { - // method: 'selectAllByOne' - // } + code: { + method: 'selectAllByOne' + } }, tagField: { isRatify: { @@ -344,22 +344,22 @@ this.upIndex++ }, async handleWeave(row) { - // this.value = await file.convertFileToHtml(row.url) - // this.claimVisible = true; - this.$axios.post(this.$api.insReport.wordToHtml, { - path: row.urlS ? row.urlS : row.url - }).then(res => { - if (res.code === 200) { - // console.log(11111111,res.data) - this.value = res.data - .replace(/<a [^>]*>/g, "") - .replace(/<\/a>/g, "") - .replace(/ /g, " "); - this.claimVisible = true; + const userName = JSON.parse(localStorage.getItem("user")).name; + //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆 + const { href } = this.$router.resolve({ + path: `/wordEdit`, + query: { + url: this.javaApi + "/word/" + row.entrustCode + ".docx", + isEdit: true, + fileType: "docx", + title: row.entrustCode + ".docx", + lang: 'zh-CN', + isPrint: true, + user: { id: 1, name: userName}, + editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + row.entrustCode + ".docx" } - }).catch(error => { - console.error(error) }) + window.open(href, '_blank'); }, // 鏉冮檺鍒嗛厤 getPower(radio) { @@ -407,7 +407,23 @@ // console.log(this.$refs.Word.getValue()) }, async selectAllByOne(row) { - console.log(row, await file.convertFileToHtml(row.url)); + const userName = JSON.parse(localStorage.getItem("user")).name; + //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆 + const { href } = this.$router.resolve({ + path: `/wordEdit`, + query: { + url: this.javaApi + "/word/" + row.entrustCode + ".docx", + isEdit: "false", + fileType: "docx", + title: row.entrustCode + ".docx", + lang: 'zh-CN', + isPrint: true, + user_id: 1, + user_name: userName + } + }) + window.open(href, '_blank'); + console.log(`output->row`,row) }, download(row) { let url = row.urlS ? row.urlS : row.url; diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue index 986d535..bcfa0ab 100644 --- a/src/components/view/b2-standard.vue +++ b/src/components/view/b2-standard.vue @@ -79,6 +79,38 @@ >>>.el-table__row{ height: 35px !important; } + .search{ + height: 20%; + border-bottom: 1px solid #ebeef5; + margin-bottom: 16px; + display: flex; + align-items: center; + box-sizing: border-box; + padding-bottom: 10px; + } + .search-item{ + display: flex; + align-items: center; + flex-wrap: wrap; + } + .search-item .el-row{ + display: flex; + align-items: center; + } + .search-item .el-col{ + margin-left: 0; + } + .more-edit .dialog-footer{ + position: absolute; + top: 15px; + right: 70px; + } + >>>.more-edit .el-dialog__body{ + height: calc(100vh - 90px); + } + >>>.is-disabled .el-textarea__inner{ + background: rgba(0, 0, 0, 0.05) !important; + } </style> <style> .standard .el-tree-node__content { @@ -133,7 +165,7 @@ :class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> - <el-col :span="2" style="text-align: right;" v-if="delStandardTree"> + <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level==5"> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> @@ -143,8 +175,9 @@ </el-tree> </div> <div class="right"> - <el-row class="title"> - <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> + <el-row class="title" style="width: 100%;"> + <el-col :span="20" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> + <el-button size="small" type="primary" @click="handleMore" style="position: absolute;right: 0px;top: 1px;" v-if="upStandardProduct">鎵归噺缂栬緫</el-button> </el-row> <el-row class="standard_table" v-loading="tableLoad"> <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220" tooltip-effect="dark" @@ -227,7 +260,7 @@ <el-table-column prop="manHourGroup" label="宸ユ椂鍒嗙粍" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="templateId" label="妯℃澘" width="200"> <template slot-scope="scope"> - <el-select v-model="scope.row.templateId" size="small" filterable + <el-select v-model="scope.row.templateId" size="small" filterable :disabled="!upStandardProduct" @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)"> <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> </el-select> @@ -244,8 +277,8 @@ style="position: absolute;right: 16px;bottom: 1px;" @current-change="handleCurrentChange" :current-page="currentPage" - :page-size="pageSize" layout="total, prev, pager, next, jumper" + :page-size="50" :total="total"> </el-pagination> </el-row> @@ -289,6 +322,113 @@ <el-button @click="addDia = false">鍙� 娑�</el-button> <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> </span> + </el-dialog> + <el-dialog title="鎵归噺缂栬緫" :visible.sync="moreEdit" width="90%" style="height: 100vh;" class="more-edit"> + <div class="body" style="height: 100%;display: flex;flex-direction: column;"> + <div class="search"> + <div class="search-item"> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 瑕佹眰鍊硷細</el-col> + <el-col :span="16"> + <el-input size="small" v-model="moreInfo.ask" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 瑕佹眰鎻忚堪锛�</el-col> + <el-col :span="16" style="display: flex;align-items: flex-start;height: 100%;"> + <el-input size="small" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}" v-model="moreInfo.tell" :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 璇曢獙鏂规硶锛�</el-col> + <el-col :span="16"> + <el-select v-model="moreInfo.methodS" size="small" filterable style="width: 100%;" :disabled="moreSelects.length==0"> + <el-option v-for="(a, ai) in methodList" :key="ai" :label="a.label" :value="a.value"></el-option> + </el-select> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 鍗曚环(鍏�)锛�</el-col> + <el-col :span="16" > + <el-input size="small" v-model="moreInfo.price" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 宸ユ椂绯绘暟锛�</el-col> + <el-col :span="16"> + <el-input size="small" v-model="moreInfo.manHour" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 妯℃澘锛�</el-col> + <el-col :span="16"> + <el-select v-model="moreInfo.templateId" size="small" filterable placeholder="妯℃澘" style="width: 100%;" :disabled="moreSelects.length==0"> + <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> + </el-select> + </el-col> + </el-row> + <el-row style="width: 50%;"> + <el-col :span="23" style="display: flex;align-items: center;justify-content: end;"> + <el-button type="primary" size="small" @click="sectionUp(moreSelects)">璁剧疆鍖洪棿</el-button> + <el-button @click="moreEdit = false" size="small">鍙� 娑�</el-button> + <el-button type="primary" @click="subMoreEdit" :loading="moreEditLoad" size="small">淇� 瀛�</el-button> + </el-col> + </el-row> + </div> + </div> + <div style="flex: 1;overflow-y: auto;" v-loading="productTableLoading0"> + <el-table :data="productList0" ref="productTable0" style="width: 100%;" height="94%" tooltip-effect="dark" + stripe + :fit="true" border + @select-all="handleSelectAll0" + @select="handleSelectionChange0" + header-row-class-name="header-class" + :row-key="row=>row.id" + > + <el-table-column type="selection" width="50" > + </el-table-column> + <el-table-column prop="model" label="鍨嬪彿" min-width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="inspectionItem" label="妫�楠岄」" min-width="140" show-overflow-tooltip></el-table-column> + <el-table-column prop="inspectionItemSubclass" label="妫�楠岄」瀛愰」" min-width="140" + show-overflow-tooltip></el-table-column> + <el-table-column prop="sonLaboratory" label="瀛愬疄楠屽" width="130" show-overflow-tooltip :filters="filters" + :filter-method="filterHandler"></el-table-column> + <el-table-column prop="ask" label="瑕佹眰鍊�" min-width="200px"></el-table-column> + <el-table-column prop="tell" label="瑕佹眰鎻忚堪" min-width="220px"></el-table-column> + <el-table-column prop="method" label="璇曢獙鏂规硶" width="200"></el-table-column> + <el-table-column prop="unit" label="璁¢噺鍗曚綅" width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="price" label="鍗曚环(鍏�)" width="120"></el-table-column> + <el-table-column prop="manHour" label="宸ユ椂绯绘暟" width="120"></el-table-column> + <el-table-column prop="manHourGroup" label="宸ユ椂鍒嗙粍" width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="templateId" label="妯℃澘" width="200"> + <template slot-scope="scope"> + {{ templateList.find(item => item.id == scope.row.templateId)?templateList.find(item => item.id == scope.row.templateId).name:'' }} + </template> + </el-table-column> + <el-table-column prop="section" label="鍖洪棿" width="120" show-overflow-tooltip></el-table-column> + </el-table> + <el-pagination + style="position: absolute;right: 16px;bottom: 4px;" + @current-change="handleCurrentChange0" + :current-page="currentPage0" + layout="total, prev, pager, next, jumper" + :page-size="50" + :total="total0"> + </el-pagination> + </div> + </div> </el-dialog> <!-- <el-dialog title="鏂板鏍囧噯" :visible.sync="addStandardDia" width="400px"> <div class="body"> @@ -447,9 +587,42 @@ sectionList: [], templateList: [], total:0, - pageSize:100, currentPage:1, - standardId: 0 + standardId: 0, + moreEdit:false, + moreEditLoad:false, + moreSelects:[], + total0:0, + currentPage0:1, + productList0: [], + moreInfo:{ + ask:'', + tell:'', + methodS:'', + price:'', + manHour:'', + templateId:'' + }, + methodList:[], + productTableLoading0:false + } + }, + watch: { + moreEdit(val) { + if(!val){ + this.$refs.productTable0.clearSelection() + this.moreSelects = [] + this.currentPage0 = 1; + this.productList0 = [] + this.moreInfo = { + ask:'', + tell:'', + methodS:'', + price:'', + manHour:'', + templateId:'' + } + } } }, mounted() { @@ -480,6 +653,8 @@ this.upIndex++ }, handleNodeClick(val, node, el) { //鏍戠殑鍊� + this.total = 0 + this.currentPage = 1 this.selectTree = '' this.getNodeParent(node) this.selectTree = this.selectTree.replace(' - ', '') @@ -993,19 +1168,29 @@ } }, sectionUp(row) { - this.sectionRow = row - this.sectionUpDia = true - this.sectionList = [] - if (this.sectionRow.section != null && this.sectionRow.section != '') { - JSON.parse(this.sectionRow.section).forEach((a, ai) => { - this.sectionList.push({ - thing: a, - ask: JSON.parse(this.sectionRow.ask)[ai], - tell: JSON.parse(this.sectionRow.tell)[ai], - price: JSON.parse(this.sectionRow.price)[ai], - manHour: JSON.parse(this.sectionRow.manHour)[ai] + if (Array.isArray(row)) { + // 鍊兼槸涓�涓暟缁� + if(row.length === 0){ + return this.$message.error('璇烽�夋嫨妫�楠岄」') + } + this.sectionRow = {} + this.sectionUpDia = true + } else { + // 鍊兼槸涓�涓璞� + this.sectionRow = row + this.sectionUpDia = true + this.sectionList = [] + if (this.sectionRow.section != null && this.sectionRow.section != '') { + JSON.parse(this.sectionRow.section).forEach((a, ai) => { + this.sectionList.push({ + thing: a, + ask: JSON.parse(this.sectionRow.ask)[ai], + tell: JSON.parse(this.sectionRow.tell)[ai], + price: JSON.parse(this.sectionRow.price)[ai], + manHour: JSON.parse(this.sectionRow.manHour)[ai] + }) }) - }) + } } }, sectionLoadAdd() { @@ -1037,18 +1222,42 @@ this.sectionRow.manHour = JSON.stringify(manHourList) } this.sectionLoad = true - this.$axios.post(this.$api.standardTree.upStandardProductList, { - id: this.sectionRow.id, - section: this.sectionRow.section, - ask: this.sectionRow.ask, - tell: this.sectionRow.tell, - price: this.sectionRow.price, - manHour: this.sectionRow.manHour - }, { - headers: { - 'Content-Type': 'application/json' + if(this.moreSelects.length === 0){ + this.$axios.post(this.$api.standardTree.upStandardProductList, { + id: this.sectionRow.id, + section: this.sectionRow.section, + ask: this.sectionRow.ask, + tell: this.sectionRow.tell, + price: this.sectionRow.price, + manHour: this.sectionRow.manHour + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.sectionLoad = false + if (res.code == 201) { + this.$message.error('鏈繚瀛�') + return + } + this.$message.success('宸蹭繚瀛�') + this.sectionUpDia = false + }) + }else{ + this.$axios.post(this.$api.standardTree.upStandardProducts, { + ids:this.moreSelects.map(a=>a.id), + standardProductList:{ + section: this.sectionRow.section, + ask: this.sectionRow.ask, + tell: this.sectionRow.tell, + price: this.sectionRow.price, + manHour: this.sectionRow.manHour } - }).then(res => { + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { this.sectionLoad = false if (res.code == 201) { this.$message.error('鏈繚瀛�') @@ -1056,7 +1265,10 @@ } this.$message.success('宸蹭繚瀛�') this.sectionUpDia = false + this.currentPage0 = 1; + this.getList() }) + } }, getStandardTemplate() { this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => { @@ -1080,6 +1292,101 @@ this.tableLoad2 = false }) }, + async handleMore(){ + if((!this.standardId&&this.standardId!=0)||this.standardList.length==0){ + return this.$message.error('璇烽�夋嫨瀹為獙瀹ゃ�佹牱鍝�') + } + await this.getList() + this.selectStandardMethods() + this.moreEdit = true + }, + selectStandardMethods() { + this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.code, + value: a.code + }) + }) + this.methodList = data + }) + }, + subMoreEdit(){ + if(this.moreSelects.length===0){ + return this.$message.error('璇烽�夋嫨妫�楠岄」') + } + this.moreEditLoad = true + this.$axios.post(this.$api.standardTree.upStandardProducts, { + ids:this.moreSelects.map(a=>a.id), + standardProductList:this.moreInfo + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.moreEditLoad = false + if (res.code == 201) { + this.$message.error('鏈繚瀛�') + return + } + this.$message.success('宸蹭繚瀛�') + this.currentPage0 = 1; + this.getList() + // this.moreInfo = { + // ask:'', + // tell:'', + // methodS:'', + // price:'', + // manHour:'', + // templateId:'' + // } + }) + }, + handleSelectAll0(rows){ + if(rows.length){ + rows.forEach(a=>{ + if(!this.moreSelects.find(b=>a.id===b.id)){ + this.moreSelects.push(a) + } + }) + }else{ + this.productList0.forEach(a=>{ + this.moreSelects = this.moreSelects.filter(b=>b.id!=a.id ) + }) + } + }, + handleSelectionChange0(val,row){ + if(this.moreSelects.find(a=>a.id===row.id)){ + this.moreSelects = this.moreSelects.filter(a=>a.id!=row.id) + }else{ + this.moreSelects.push(row) + } + }, + getList(){ + this.productTableLoading0 = true + this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { + id: this.standardId, + tree: this.selectTree, + page: this.currentPage0 + }).then(res => { + this.productList0 = res.data.productList + this.total0 = res.data.total + this.productTableLoading0 = false + this.$nextTick(()=>{ + this.productList0.forEach((a,i) => { + if(this.moreSelects.find(b=>a.id==b.id)){ + // console.log(111111111,a) + this.$refs.productTable0.toggleRowSelection(this.productList0[i],true) + } + }) + }) + }) + }, + handleCurrentChange0(e){ + this.currentPage0 = e; + this.getList() + } } } </script> diff --git a/src/components/view/b3-classes.vue b/src/components/view/b3-classes.vue index 684829a..e4fc53a 100644 --- a/src/components/view/b3-classes.vue +++ b/src/components/view/b3-classes.vue @@ -87,7 +87,7 @@ <!-- <div class="work-box-left"> <span>{{ getShiftByDic(m.shift) }}</span> </div> --> - <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!downPower"> + <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!upPower"> <!-- <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i> --> <span style="cursor: pointer;" :style="`opacity: ${getShiftByDic(m.shift)=='鏃�'?0:1};`">{{ getShiftByDic(m.shift) }}</span> <el-dropdown-menu slot="dropdown"> diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue index 1361188..791815b 100644 --- a/src/components/view/person-manage.vue +++ b/src/components/view/person-manage.vue @@ -1,80 +1,83 @@ <style scoped> - .person_manage{ + .person_manage { padding: 20px 0; - display: flex; + display: flex; } + .left { - width: 270px; - height: calc(100% - 40px); - background-color: white; - padding: 15px; - } - .el-tree{ + width: 270px; + height: calc(100% - 40px); + background-color: white; + padding: 15px; + } + + .el-tree { height: calc(100% - 37px); overflow-y: auto; } - .custom-tree-node { - width: 100%; - line-height: 32px; - } + .custom-tree-node { + width: 100%; + line-height: 32px; + } - .custom-tree-node .el-icon-delete { - color: #3A7BFA; - opacity: 0; - font-size: 18px; - } + .custom-tree-node .el-icon-delete { + color: #3A7BFA; + opacity: 0; + font-size: 18px; + } - .custom-tree-node:hover .el-icon-delete { - opacity: 1; - } + .custom-tree-node:hover .el-icon-delete { + opacity: 1; + } - .node_i { - color: orange; - font-size: 18px; - } + .node_i { + color: orange; + font-size: 18px; + } - .right { - margin-left: 5px; - width: calc(100% - 305px); - height: calc(100% - 40px); - } - .title { - height: 60px; - line-height: 60px; - } + .right { + margin-left: 5px; + width: calc(100% - 305px); + height: calc(100% - 40px); + } - .search { - background-color: #fff; - height: 60px; - display: flex; - align-items: center; - } + .title { + height: 60px; + line-height: 60px; + } - .search_thing { - width: 250px; - display: flex; - align-items: center; - } + .search { + background-color: #fff; + height: 60px; + display: flex; + align-items: center; + } - .search_label { - width: 90px; - font-size: 14px; - text-align: right; - } + .search_thing { + width: 250px; + display: flex; + align-items: center; + } - .search_input { - width: calc(100% - 90px); - } + .search_label { + width: 90px; + font-size: 14px; + text-align: right; + } - .table { - margin-top: 4px; - background-color: #fff; - height: calc(100% - 44px); - } + .search_input { + width: calc(100% - 90px); + } + + .table { + margin-top: 4px; + background-color: #fff; + height: calc(100% - 44px); + } </style> <style> - .el-upload--text{ + .el-upload--text { width: 100%; height: 100%; display: flex; @@ -82,45 +85,66 @@ justify-content: center; } </style> +<style> + .person_manage .el-tree-node__content { + height: 32px; + font-size: 14px; + border-radius: 2px; + } + .person_manage .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + color: #3A7BFA; + } + + .person_manage .has-gutter .el-table__cell .cell { + line-height: 34px; + background-color: #f8f8f8; + } + + .person_manage .has-gutter .el-table__cell { + background-color: #fafafa !important; + } + + .person_manage .el-table__row .cell { + font-size: 14px; + } + + .person_manage .el-table .warning-row .cell { + color: #bababa; + } +</style> <template> - <div class="person_manage"> - <!-- <el-row class="title"> - <el-col :span="12" style="padding-left: 20px;">鐢ㄦ埛绠$悊</el-col> - <el-col :span="12" style="text-align: right;"> - - </el-col> - </el-row> --> + <div class="person_manage"> <div class="left"> <el-row> - <el-col :span="20"> - <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" suffix-icon="el-icon-search" v-model="search" size="small" - style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input> - </el-col> - <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower"> - <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="handleAdd"></el-button> - </el-col> - </el-row> - <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'name' }" node-key="id" - :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" - @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" - :default-expanded-keys="expandedKeys" - :default-checked-keys="[1]"> - <div class="custom-tree-node" slot-scope="{ node, data }"> - <el-row style="width: 100%;"> - <el-col :span="21" :class="{sort:node.level>3}"> - <span><i - :class="`node_i ${data.children != undefined&&data.children.length>0 ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> - {{ data.name }}</span> - </el-col> - <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level>1"> - <el-button type="text" size="mini" @click.stop="remove(node, data)"> - <i class="el-icon-delete"></i> - </el-button> - </el-col> - </el-row> - </div> - </el-tree> + <el-col :span="20"> + <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" suffix-icon="el-icon-search" v-model="search" size="small" + style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter" + @keyup.enter.native="searchFilter()"></el-input> + </el-col> + <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower"> + <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="handleAdd"></el-button> + </el-col> + </el-row> + <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'name' }" node-key="id" + :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" + @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" + :default-expanded-keys="expandedKeys" :default-checked-keys="[1]"> + <div class="custom-tree-node" slot-scope="{ node, data }"> + <el-row style="width: 100%;"> + <el-col :span="21" :class="{sort:node.level>3}"> + <span><i + :class="`node_i ${data.children != undefined&&data.children.length>0 ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> + {{ data.name }}</span> + </el-col> + <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level>1"> + <el-button type="text" size="mini" @click.stop="remove(node, data)"> + <i class="el-icon-delete"></i> + </el-button> + </el-col> + </el-row> + </div> + </el-tree> </div> <div class="right"> <div class="search"> @@ -142,7 +166,8 @@ <div class="search_thing"> <div class="search_label">鍏徃鍚嶇О锛�</div> <div class="search_input"> - <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.company" @keyup.enter.native="refreshTable()"></el-input> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.company" + @keyup.enter.native="refreshTable()"></el-input> </div> </div> <div class="search_thing" style="padding-left: 30px;"> @@ -150,148 +175,151 @@ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> </div> <div class="search_thing"> - <el-button size="small" type="primary" @click="openthirdParty">鑾峰彇涓夋柟浜哄憳</el-button> + <el-button size="small" type="primary" @click="openthirdParty" v-if="addUserPower">鑾峰彇涓夋柟浜哄憳</el-button> <el-button size="small" type="primary" @click="opeaAdd" v-if="addPower">鏂板鐢ㄦ埛</el-button> </div> </div> <div class="table"> - <ValueTable ref="ValueTable" :url="$api.user.selectUserList" :upUrl="$api.user.updateUser" :componentData="componentData" :key="upIndex" @upUser="upUser"/> + <ValueTable ref="ValueTable" :url="$api.user.selectUserList" :upUrl="$api.user.updateUser" + :componentData="componentData" :key="upIndex" /> </div> </div> - <el-dialog title="鏋舵瀯鏂板" :visible.sync="addDia" width="400px"> - <div class="body"> - <el-row style="line-height: 50px;"> - <el-col :span="6" style="text-align: right;"> - <span class="required-span">* </span>鏋舵瀯鍚嶇О锛� - </el-col> - <el-col :span="16" :offset="1"> - <el-input v-model="addOb.name" placeholder="璇疯緭鍏ユ灦鏋勫悕绉�" clearable size="small"></el-input> - </el-col> - </el-row> - </div> - <span slot="footer" class="dialog-footer"> - <el-button @click="addDia = false">鍙� 娑�</el-button> - <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> - </span> - </el-dialog> - <el-dialog title="娣诲姞涓夋柟浜哄憳" :visible.sync="addthirdParty" width="400px"> + <el-dialog title="鏋舵瀯鏂板" :visible.sync="addDia0" width="400px"> <div class="body"> - <el-tree - :data="datathirdParty" - show-checkbox - node-key="id" - :default-expanded-keys="[2, 3]" - :default-checked-keys="[5]" - :props="defaultProps"> - </el-tree> - <span slot="footer" style="padding-left: 200px"> - <el-button @click="addthirdParty = false" size="mini">鍙� 娑�</el-button> - <el-button type="primary" @click="" :loading="addLoad" size="mini">纭� 瀹�</el-button> - </span> + <el-row style="line-height: 50px;"> + <el-col :span="6" style="text-align: right;"> + <span class="required-span">* </span>鏋舵瀯鍚嶇О锛� + </el-col> + <el-col :span="16" :offset="1"> + <el-input v-model="addOb.name" placeholder="璇疯緭鍏ユ灦鏋勫悕绉�" clearable size="small"></el-input> + </el-col> + </el-row> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDia0 = false">鍙� 娑�</el-button> + <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="鑾峰彇浜轰簨绯荤粺浜哄憳淇℃伅" :visible.sync="addthirdParty" width="70%"> + <div class="body"> + <el-row> + <el-col :span="9" style="height: 70vh;overflow: hidden;"> + <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="search2" size="small" style="width: 90%;padding: 0 5% 10px 5%;" + clearable @blur="searchFilter2" @clear="searchFilter2" @keyup.enter.native="searchFilter2()"> + </el-input> + <el-tree :data="datathirdParty" node-key="id" :props="defaultProps" @node-click="nodeClick2" + style="height: calc(100% - 42px);" + @node-expand="nodeOpen0" :filter-node-method="filterNode2" ref="tree2" highlight-current> + </el-tree> + </el-col> + <el-col :span="15" style="height: 70vh;padding-left: 8px;"> + <div class="search_thing" style="width: 360px;margin-bottom: 10px;"> + <div class="search_label" style="width: 140px;">鍛樺伐鍙�/鍛樺伐濮撳悕锛�</div> + <div class="search_input"> + <el-input + size="small" + placeholder="璇疯緭鍏ュ伐鍙�/鍛樺伐濮撳悕" + @clear="searchPerson" + clearable + v-model="userSearch2" + @keyup.enter.native="searchPerson()"> + <i slot="suffix" class="el-input__icon el-icon-search" style="cursor: pointer;" @click="searchPerson"></i></el-input> + </div> + </div> + <el-table height="67vh" border stripe :data="personList" v-loading="personLoad" ref="personTable" + @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="50"> + </el-table-column> + <el-table-column prop="employeeID" label="鍛樺伐鍙�"> + </el-table-column> + <el-table-column prop="name" label="鍛樺伐濮撳悕"> + </el-table-column> + <el-table-column prop="isLive" label="宸插瓨鍦�" width="80" align="center"> + <template slot-scope="scope"> + <el-tag type="success" effect="dark" v-if="scope.row.isLive === 1">鈭�</el-tag> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + </div> + <div slot="footer" class="dialog-footer"> + <el-button @click="addthirdParty = false" size="mini">鍙� 娑�</el-button> + <el-button type="primary" @click="addUser2" :loading="addLoad" size="mini">纭� 瀹�</el-button> </div> </el-dialog> - </div> + </div> </template> <script> - import ValueTable from '../tool/value-table.vue' - export default { - components: { - ValueTable - }, - data() { - return { - datathirdParty:[{ - id: 1, - label: '涓�绾� 1', - children: [{ - id: 4, - label: '浜岀骇 1-1', - children: [{ - id: 9, - label: '涓夌骇 1-1-1' - }, { - id: 10, - label: '涓夌骇 1-1-2' - }] - }] - }, { - id: 2, - label: '涓�绾� 2', - children: [{ - id: 5, - label: '浜岀骇 2-1' - }, { - id: 6, - label: '浜岀骇 2-2' - }] - }, { - id: 3, - label: '涓�绾� 3', - children: [{ - id: 7, - label: '浜岀骇 3-1' - }, { - id: 8, - label: '浜岀骇 3-2' - }] - }], + import { + compileToFunctions + } from 'vue-template-compiler' + import ValueTable from '../tool/value-table.vue' + export default { + components: { + ValueTable + }, + data() { + return { + datathirdParty: [], defaultProps: { children: 'children', label: 'label' }, - addthirdParty:false, - componentData: { - entity: { - name: null, - state: null, - company: null, - orderBy:{ - field: 'id', - order: 'asc' - } - }, + addthirdParty: false, + componentData: { + entity: { + name: null, + state: null, + company: null, + departId: null, + orderBy: { + field: 'id', + order: 'asc' + } + }, row: 2, - isIndex: true, - showSelect: false, - select: false, - init:false, - do: [{ - id: 'update', - font: '缂栬緫', - type: 'text', - method: 'doDiy', - field:['createUserName','updateUserName','roleName','瑙掕壊=roleId','瀵嗙爜=password'] - }], - tagField: { - state: { - select: [{ - value: 1, - type: 'success', - label: '鍚敤' - },{ - value: 0, - type: 'danger', - label: '鍋滅敤' - }] - } - }, - selectField: { - state: { - select: [{ - value: 1, - type: 'success', - label: '鍚敤' - },{ - value: 0, - type: 'danger', - label: '鍋滅敤' - }] - }, - roleId: { - select: [] - } - }, + isIndex: true, + showSelect: false, + select: false, + init: false, + do: [{ + id: 'update', + font: '缂栬緫', + type: 'text', + method: 'doDiy', + field: ['createUserName', 'updateUserName', 'roleName', '瑙掕壊=roleId', '瀵嗙爜=password'] + }], + tagField: { + state: { + select: [{ + value: 1, + type: 'success', + label: '鍚敤' + }, { + value: 0, + type: 'danger', + label: '鍋滅敤' + }] + } + }, + selectField: { + state: { + select: [{ + value: 1, + type: 'success', + label: '鍚敤' + }, { + value: 0, + type: 'danger', + label: '鍋滅敤' + }] + }, + roleId: { + select: [] + } + }, /* cascaderField:{ departId:{ tree:[] @@ -303,199 +331,344 @@ checkStrictly: true } }, */ - requiredAdd:['account','name','state','roleId','password','nameEn','phone'], - requiredUp:['account','name','state','roleId','nameEn','phone'], - addUpload:['pictureUrl','signatureUrl'], - addUploadConfig:{ - accept:'.png, .jpg, .jpeg, .gif', - url:this.$api.deviceScope.uploadFile + requiredAdd: ['account', 'name', 'state', 'roleId', 'password', 'nameEn', 'phone'], + requiredUp: ['account', 'name', 'state', 'roleId', 'nameEn', 'phone'], + // disabledUp:['departId'], + addUpload: ['pictureUrl', 'signatureUrl'], + addUploadConfig: { + accept: '.png, .jpg, .jpeg, .gif', + url: this.$api.deviceScope.uploadFile }, - }, - entityCopy: {}, - upIndex: 0, - addDia: false, - addPower: true, - delStandardTree:true, - addDia0:false, - addOb:{ - fatherId:'', - name:'', + }, + entityCopy: {}, + upIndex: 0, + addDia: false, + addPower: true, + addUserPower: true, + delStandardTree: true, + addDia0: false, + addOb: { + fatherId: '', + name: '', }, search: null, - list: [], - selectTree: '', - treeLoad:false, + list: [], + selectTree: '', + treeLoad: false, expandedKeys: [], - addLoad:false, - } - }, - mounted() { + addLoad: false, + personList: [], + personListCopy:[], + treeLoad: false, + personLoad: false, + search2: '', + multipleSelection: [], + companiesList:[], + currentCompaniesList: [], + userSearch2:'' + } + }, + // watch: { + // userSearch2(val){} + // }, + mounted() { this.selectTreeList() - this.selectRole() - this.entityCopy = this.HaveJson(this.componentData.entity) - this.getPower() - }, - methods: { - openthirdParty(){ - this.addthirdParty=true; - + this.selectRole() + this.entityCopy = this.HaveJson(this.componentData.entity) + this.getPower() + }, + methods: { + openthirdParty() { + this.addthirdParty = true; + this.$axios.get(this.$api.companies.selectCompaniesList).then(res => { + this.companiesList = JSON.parse(JSON.stringify(res.data)); + this.datathirdParty = [] + for (let ai = 0; ai < res.data.length; ai++) { + let a = res.data[ai] + if (a.parentCompanyId === 'ROOT') { + this.datathirdParty.push({ + id: a.companyId, + label: a.companyName, + children: [] + }) + res.data.splice(ai, 1) + ai-- + } else { + this.getOrganizational(a, ai, this.datathirdParty, res.data) + } + } + }) }, - refreshTable() { - this.$refs['ValueTable'].selectList() - }, - refresh() { - this.componentData.entity = this.HaveJson(this.entityCopy) - this.upIndex++ - }, - upUser(row){ - console.log(row); - }, - selectRole(){ - this.$axios.get(this.$api.user.selectRoleList).then(res=>{ - var str = [] - res.data.forEach(a=>{ - str.push({ - label: a.name, - value: a.id - }) - }) - this.componentData.selectField.roleId.select = str - }) - }, - opeaAdd(){ - this.$refs.ValueTable.openAddDia(this.$api.user.addUser); - }, - selectTreeList(){ - /* this.$axios.get(this.$api.department.selectDepartment).then(res => { + getOrganizational(a, ai, children, list) { + for (let bi = 0; bi < children.length; bi++) { + let b = children[bi] + if (a.parentCompanyId === b.id) { + b.children.push({ + id: a.companyId, + label: a.companyName, + children: [] + }) + list.splice(ai, 1) + ai-- + break + } else { + this.getOrganizational(a, ai, b.children, list) + } + } + }, + refreshTable() { + this.$refs['ValueTable'].selectList() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + // this.upIndex++ + this.refreshTable() + }, + selectRole() { + this.$axios.get(this.$api.user.selectRoleList).then(res => { + var str = [] + res.data.forEach(a => { + str.push({ + label: a.name, + value: a.id + }) + }) + this.componentData.selectField.roleId.select = str + }) + }, + opeaAdd() { + if (!this.addOb.fatherId || this.selectTree == '' || this.selectTree == '鍏ㄩ儴') { + this.$message.error('璇烽�夋嫨涓�涓粍缁�') + return + } + this.$refs.ValueTable.openAddDia(this.$api.user.addUser); + this.$refs['ValueTable'].upData.departId = this.selectTree + }, + selectTreeList() { + /* this.$axios.get(this.$api.department.selectDepartment).then(res => { this.componentData.cascaderField.departId.tree = this.handleTree(res.data[0].children) }) */ this.$refs.ValueTable.selectList() }, - handleTree(arr){ + handleTree(arr) { arr.forEach(a => { - if(a.children.length==0){ + if (a.children.length == 0) { a.children = null; - }else{ + } else { this.handleTree(a.children) } }) return arr }, - // 鏉冮檺鍒嗛厤 - getPower(){ - let power = JSON.parse(sessionStorage.getItem('power')) - let up = false - let add = false - for (var i = 0; i < power.length; i++) { - if(power[i].menuMethod=='updateUser'){ - up = true - } - if(power[i].menuMethod=='addUser'){ - add = true - } - } - if(!up){ - this.componentData.do.splice(0, 1) - } - this.addPower = add - }, - handleAdd(){ - if(this.addOb.fatherId){ + // 鏉冮檺鍒嗛厤 + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let up = false + let add = false + let addUserPower = false + let delStandardTree = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'updateUser') { + up = true + } + if (power[i].menuMethod == 'addUser') { + add = true + } + if (power[i].menuMethod == 'delDepartment') { + delStandardTree = true + } + if (power[i].menuMethod == 'addPersonUser') { + addUserPower = true + } + } + if (!up) { + this.componentData.do.splice(0, 1) + } + this.delStandardTree = delStandardTree + this.addPower = add + this.addUserPower = addUserPower + }, + handleAdd() { + if (this.addOb.fatherId||this.addOb.name=='鍏ㄩ儴') { this.addDia0 = true; - }else{ + } else { this.$message.error('璇烽�夋嫨涓�涓灦鏋勫眰绾�') } }, searchFilter() { - this.$refs.tree.filter(this.search) - }, + this.$refs.tree.filter(this.search) + }, + searchFilter2() { + this.$refs.tree2.filter(this.search2) + }, filterNode(value, data) { - if (!value) return true; - return data.name.indexOf(value) !== -1; - }, + console.log(data); + if (!value) return true; + return data.name.indexOf(value) !== -1; + }, + filterNode2(value, data) { + if (!value) return true; + return data.label.indexOf(value) !== -1; + }, handleNodeClick(val, node, el) { //鏍戠殑鍊� - this.selectTree = '' - this.getNodeParent(node) - this.selectTree = this.selectTree.replace(' - ', '') - let data = this.selectTree.split(' - ') - let data2 = '' - for (let index = data.length - 1; index >= 0; index--) { - data2 += " - " + data[index] - } - this.selectTree = data2.replace(' - ', '') + this.selectTree = '' + this.getNodeParent(node) + this.selectTree = this.selectTree.replace(' - ', '') + let data = this.selectTree.split(' - ') + let data2 = '' + for (let index = data.length - 1; index >= 0; index--) { + data2 += " - " + data[index] + } + this.selectTree = data2.replace(' - ', '') this.addOb.fatherId = val.id; this.componentData.entity.departId = val.id; this.refreshTable() - }, + }, nodeOpen(data, node, el) { - $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') - }, + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') + }, + nodeOpen0(data, node, el){ + this.currentCompaniesList[node.level-1] = data.id + }, nodeClose(data, node, el) { - $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') - }, + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') + }, getNodeParent(val) { - if (val.parent != null) { - this.selectTree += ' - ' + val.label - this.getNodeParent(val.parent) - } - }, + if (val.parent != null) { + this.selectTree += ' - ' + val.label + this.getNodeParent(val.parent) + } + }, remove(node, data) { - this.$confirm("鏄惁鍒犻櫎璇ュ眰绾�", "鎻愮ず", { - type: "error" - }).then(() => { - this.treeLoad = true - this.$axios.post(this.$api.department.delDepartment, { - id: data.id - }).then(res => { - if (res.code == 201) return - this.$message.success('宸插垹闄�') - this.selectTreeList() - }) - }).catch(e => {}) - }, + this.$confirm("鏄惁鍒犻櫎璇ュ眰绾�", "鎻愮ず", { + type: "error" + }).then(() => { + this.treeLoad = true + this.$axios.post(this.$api.department.delDepartment, { + id: data.id + }).then(res => { + if (res.code == 201) return + this.$message.success('宸插垹闄�') + this.selectTreeList() + }) + }).catch(e => {}) + }, selectTreeList() { - this.treeLoad = true - this.$axios.get(this.$api.department.selectDepartment).then(res => { - this.list = res.data - this.list.forEach(a => { - a.children.forEach(b => { - b.children.forEach(c => { - this.expandedKeys.push(c.id) - }) - }) - }) - this.treeLoad = false + this.treeLoad = true + this.$axios.get(this.$api.department.selectDepartment).then(res => { + this.list = res.data + this.list.forEach(a => { + a.children.forEach(b => { + b.children.forEach(c => { + this.expandedKeys.push(c.id) + }) + }) + }) + this.treeLoad = false this.componentData.entity.departId = this.list[0].id; this.selectTree = '鍏ㄩ儴' this.refreshTable() - }) - }, + }) + }, addStandardTree() { - if (this.addOb.name == null || this.addOb.factory == '') { - this.$message.error('鏋勬灦鍚嶇О鏄繀濉」') - return - } - this.addLoad = true - this.$axios.post(this.$api.department.addDepartment, this.addOb, { - headers: { - 'Content-Type': 'application/json' - } - }).then(res => { - if (res.code === 201) { - this.addLoad = false - return - } - this.$message.success('娣诲姞鎴愬姛') - this.addDia0 = false - this.selectTreeList() - this.addLoad = false + if (this.addOb.name == null || this.addOb.factory == '') { + this.$message.error('鏋勬灦鍚嶇О鏄繀濉」') + return + } + this.addLoad = true + this.$axios.post(this.$api.department.addDepartment, this.addOb, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 201) { + this.addLoad = false + return + } + this.$message.success('娣诲姞鎴愬姛') + this.addDia0 = false + this.selectTreeList() + this.addLoad = false this.addOb.name = '' this.addOb.fatherId = '' - }).catch(e => { - this.addDia0 = false - this.addLoad = false - }) - }, - } - } + }).catch(e => { + this.addDia0 = false + this.addLoad = false + }) + }, + nodeClick2(ob, node, el) { + this.currentCompaniesList[node.level-1] = ob.id + if (ob.id !== 'SC21') { + this.personLoad = true + this.$axios.post(this.$api.companies.selectSimpleList, { + companyId: ob.id + }).then(res => { + this.personListCopy = JSON.parse(JSON.stringify(res.data)) + this.personList = res.data + this.personLoad = false + this.$refs.personTable.doLayout() + }) + } + }, + handleSelectionChange(val) { + this.multipleSelection = val; + }, + addUser2(){ + if(this.multipleSelection.length === 0){ + return this.$message.error('璇烽�夋嫨浜哄憳') + } + if(this.currentCompaniesList.length === 0){ + return this.$message.error('璇烽�夋嫨缁勭粐') + } + for (let index = this.currentCompaniesList.length-1; index >1; index--) { + let obj = this.multipleSelection.find(a=>a.companyId==this.currentCompaniesList[index]) + if(!obj){ + this.currentCompaniesList.splice(index,1) + }else{ + return + } + } + let arr = [] + this.currentCompaniesList.forEach(b=>{ + this.companiesList.forEach(a=>{ + if(a.companyId===b){ + console.log(a) + } + }) + let obj = this.companiesList.find(a=>a.companyId==b) + arr.push(obj) + }) + this.addLoad = true + this.$axios.post(this.$api.companies.addPersonUser, { + company: arr, + person: this.multipleSelection + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 201) { + this.addLoad = false + return + } + this.$message.success('鎿嶄綔鎴愬姛') + this.refresh() + this.multipleSelection = [] + this.$refs.personTable.clearSelection() + this.addthirdParty = false + }).catch(e => { + this.addthirdParty = false + this.addLoad = false + }) + }, + searchPerson(){ + let arr = JSON.parse(JSON.stringify(this.personListCopy)) + this.personList = arr.filter(a=>{ + if(a.employeeID.includes(this.userSearch2)||a.name.includes(this.userSearch2)){ + return true + } + }) + } + } + } </script> diff --git a/src/components/view/system-log.vue b/src/components/view/system-log.vue index a415609..519b37c 100644 --- a/src/components/view/system-log.vue +++ b/src/components/view/system-log.vue @@ -106,4 +106,4 @@ } } } -</script> +</script> \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index cdde777..2c7ef5b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -26,5 +26,8 @@ },{ path: "/test/excel", component: () => import("../components/tool/excel.vue") - }] + },{ + path: "/wordEdit", + component: () => import("../components/tool/onlyoffice.vue") + }] }) diff --git a/src/view/notice.vue b/src/view/notice.vue index be68420..99f4985 100644 --- a/src/view/notice.vue +++ b/src/view/notice.vue @@ -190,8 +190,8 @@ }, goNoticeDetail(row){ this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => { - this.drawer = false; row.num = Math.random(100); + localStorage.setItem("noticeInfo", JSON.stringify(row)) this.$bus.$emit("change", JSON.stringify(row)); this.$parent.addTab({ v: "娑堟伅璇︽儏", @@ -206,6 +206,7 @@ this.refresh(); this.$emit('goNoticeDetail') }) + this.drawer = false; }, handleDropdown(e,row){ switch(e){ -- Gitblit v1.9.3