From e39a46f97bd95687c882f81bb373e50db25d4286 Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期四, 16 五月 2024 18:03:56 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/tool/value-table.vue | 10 src/components/view/role-manage.vue | 2 src/components/view/b3-classes.vue | 4 src/components/view/person-manage.vue | 100 ++++++ src/router/index.js | 5 src/assets/api/controller.js | 2 src/components/view/b2-standard.vue | 393 +++++++++++++++++++++++---- src/view/notice.vue | 3 src/components/view/b1-report-preparation.vue | 71 +++- src/main.js | 3 index.html | 1 src/components/view/system-log.vue | 2 src/components/tool/onlyoffice.vue | 193 +++++++++++++ src/components/view/b1-unpass.vue | 20 14 files changed, 684 insertions(+), 125 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 708a484..a843e5a 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -183,6 +183,7 @@ selectStandardProductListByMethodId: "/standardTree/selectStandardProductListByMethodId", //閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩� selectStandardMethodEnum: "/standardTree/selectStandardMethodEnum", //鑾峰彇鏍囧噯鏍戜笅鏍囧噯鏂规硶鏋氫妇 getStandardTree2: "/standardTree/getStandardTree2", //鑾峰彇浜у搧鏋舵瀯 + upStandardProducts: "/standardTree/upStandardProducts", //鑾峰彇浜у搧鏋舵瀯 } const standardMethod = { @@ -282,4 +283,5 @@ 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/tool/value-table.vue b/src/components/tool/value-table.vue index 20b9a47..0387ae4 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -564,14 +564,17 @@ }, sizeChange(val) { this.page.size = val - this.selectList() + this.selectList('page') }, currentChange(val) { this.page.current = val - this.selectList() + this.selectList('page') }, - selectList() { + selectList(val) { this.loading = true + if(val===undefined){ + this.page.current = 1; + } if (this.data.isPage != undefined && this.data.isPage != true) { this.page = { current: -1, @@ -593,6 +596,7 @@ this.total = res.data.body.total this.tableHead = res.data.head this.tableData = res.data.body.records + // console.log(JSON.stringify(this.tableHead)+"---------"+JSON.stringify(this.tableData)) for (var a in this.data.selectField) { if (this.data.selectField[a].choose == true) { this.tableData.map(b => { diff --git a/src/components/view/b1-report-preparation.vue b/src/components/view/b1-report-preparation.vue index 3a85cb3..5bfb65e 100644 --- a/src/components/view/b1-report-preparation.vue +++ b/src/components/view/b1-report-preparation.vue @@ -160,6 +160,7 @@ import { convertToHtml } from 'mammoth'; + import axios from "axios"; export default { components: { ValueTable, @@ -180,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: '涓嬭浇', @@ -242,9 +243,9 @@ } ], linkEvent: { - // code: { - // method: 'selectAllByOne' - // } + code: { + method: 'selectAllByOne' + } }, tagField: { isRatify: { @@ -343,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) { @@ -406,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/b1-unpass.vue b/src/components/view/b1-unpass.vue index dd63b44..945cd80 100644 --- a/src/components/view/b1-unpass.vue +++ b/src/components/view/b1-unpass.vue @@ -45,8 +45,8 @@ <div class="search_thing"> <div class="search_label">瑙勬牸鍨嬪彿锛�</div> <div class="search_input"> - <el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="componentData.entity.model" @keyup.enter.native="refreshTable()"></el-input></div> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.model" + @keyup.enter.native="refreshTable()"></el-input></div> </div> <div class="search_thing"> <div class="search_label">鏍峰搧鍚嶇О锛�</div> @@ -86,23 +86,24 @@ entity: { sample: null, model: null, + orderBy: { + field: 'id', + order: 'asc' + } }, isIndex: true, showSelect: false, select: false, do: [ ], - linkEvent: { - // code: { - // method: 'selectAllByOne' - // } - }, - + tagField: [], + selectField: [], + requiredAdd: ['model','sample',], + requiredUp: [] }, entityCopy: {}, upIndex: 0, statusList: [], - } }, mounted() { @@ -124,4 +125,3 @@ } } </script> - diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue index ff51e17..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,11 +175,9 @@ </el-tree> </div> <div class="right"> - <el-row class="title"> + <el-row class="title" style="width: 100%;"> <el-col :span="20" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> - <!-- <el-col :span="4"> - <el-button size="small" type="primary" @click="handleMore">鎵归噺缂栬緫</el-button> - </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" @@ -293,45 +323,112 @@ <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> </span> </el-dialog> - <el-dialog title="鎵归噺缂栬緫" :visible.sync="moreEdit" width="90%"> - <div class="body"> - <!-- <el-row style="line-height: 50px;"> - <el-col :span="6" style="text-align: right;">宸ュ巶锛�</el-col> - <el-col :span="16" :offset="1"> - <el-input size="small" readonly v-model="addOb.factory"></el-input> - </el-col> - </el-row> - <el-row style="line-height: 50px;"> - <el-col :span="6" style="text-align: right;">瀹為獙瀹わ細</el-col> - <el-col :span="16" :offset="1"> - <el-input size="small" readonly v-model="addOb.laboratory"></el-input> - </el-col> - </el-row> - <el-row style="line-height: 50px;"> - <el-col :span="6" style="text-align: right;">鏍峰搧澶х被锛�</el-col> - <el-col :span="16" :offset="1"> - <el-input size="small" readonly v-model="addOb.sampleType"></el-input> - </el-col> - </el-row> - <el-row style="line-height: 50px;"> - <el-col :span="6" style="text-align: right;">鏍峰搧鍚嶇О锛�</el-col> - <el-col :span="16" :offset="1"> - <el-input v-model="addOb.sample" readonly size="small"></el-input> - </el-col> - </el-row> - <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.model" placeholder="璇疯緭鍏ュ瀷鍙�" clearable size="small"></el-input> - </el-col> - </el-row> --> + <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> - <span slot="footer" class="dialog-footer"> - <el-button @click="moreEdit = false">鍙� 娑�</el-button> - <el-button type="primary" @click="subMoreEdit" :loading="moreEditLoad">纭� 瀹�</el-button> - </span> </el-dialog> <!-- <el-dialog title="鏂板鏍囧噯" :visible.sync="addStandardDia" width="400px"> <div class="body"> @@ -494,6 +591,38 @@ 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() { @@ -1039,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() { @@ -1083,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('鏈繚瀛�') @@ -1102,7 +1265,10 @@ } this.$message.success('宸蹭繚瀛�') this.sectionUpDia = false + this.currentPage0 = 1; + this.getList() }) + } }, getStandardTemplate() { this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => { @@ -1126,10 +1292,101 @@ this.tableLoad2 = false }) }, - handleMore(){ + async handleMore(){ + if((!this.standardId&&this.standardId!=0)||this.standardList.length==0){ + return this.$message.error('璇烽�夋嫨瀹為獙瀹ゃ�佹牱鍝�') + } + await this.getList() + this.selectStandardMethods() this.moreEdit = true }, - subMoreEdit(){} + 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 e4fc53a..6952c90 100644 --- a/src/components/view/b3-classes.vue +++ b/src/components/view/b3-classes.vue @@ -767,7 +767,7 @@ display: flex; align-items: center; justify-content: space-around; - background: #F5F7FB; + background: #edeff2; border-radius: 8px 8px 8px 8px; color: #999; font-size: 14px; @@ -869,7 +869,7 @@ margin-left: 10px; } .hoverType{ - background: rgba(58,123,250,0.05); + background: rgba(58,123,250,0.03); } .year-table{ width: 100%; diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue index 739eebf..3e2f59d 100644 --- a/src/components/view/person-manage.vue +++ b/src/components/view/person-manage.vue @@ -208,11 +208,25 @@ 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);" :filter-node-method="filterNode2" ref="tree2" highlight-current> + 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;"> - <el-table height="70vh" border stripe :data="personList" v-loading="personLoad" ref="personTable" + <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> @@ -330,8 +344,8 @@ upIndex: 0, addDia: false, addPower: true, + addUserPower: true, delStandardTree: true, - selectCompaniesList: true, addDia0: false, addOb: { fatherId: '', @@ -344,12 +358,19 @@ expandedKeys: [], addLoad: false, personList: [], + personListCopy:[], treeLoad: false, personLoad: false, search2: '', - multipleSelection: [] + multipleSelection: [], + companiesList:[], + currentCompaniesList: [], + userSearch2:'' } }, + // watch: { + // userSearch2(val){} + // }, mounted() { this.selectTreeList() this.selectRole() @@ -360,6 +381,7 @@ 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] @@ -443,8 +465,8 @@ let power = JSON.parse(sessionStorage.getItem('power')) let up = false let add = false + let addUserPower = false let delStandardTree = false - let selectCompaniesList = false for (var i = 0; i < power.length; i++) { if (power[i].menuMethod == 'updateUser') { up = true @@ -455,8 +477,8 @@ if (power[i].menuMethod == 'delDepartment') { delStandardTree = true } - if(power[i].menuMethod == 'selectCompaniesList'){ - selectCompaniesList = true + if (power[i].menuMethod == 'addPersonUser') { + addUserPower = true } } if (!up) { @@ -464,10 +486,10 @@ } this.delStandardTree = delStandardTree this.addPower = add - this.selectCompaniesList = selectCompaniesList + this.addUserPower = addUserPower }, handleAdd() { - if (this.addOb.fatherId) { + if (this.addOb.fatherId||this.addOb.name=='鍏ㄩ儴') { this.addDia0 = true; } else { this.$message.error('璇烽�夋嫨涓�涓灦鏋勫眰绾�') @@ -504,6 +526,9 @@ }, nodeOpen(data, node, el) { $($(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') @@ -572,11 +597,13 @@ }) }, 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() @@ -585,9 +612,62 @@ }, handleSelectionChange(val) { this.multipleSelection = val; - console.log(this.multipleSelection); }, 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 + } + }) } } } diff --git a/src/components/view/role-manage.vue b/src/components/view/role-manage.vue index 6b41247..2b4d91b 100644 --- a/src/components/view/role-manage.vue +++ b/src/components/view/role-manage.vue @@ -115,7 +115,7 @@ entity: { name: null, orderBy: { - field: 'id', + field: 'id', order: 'asc' } }, 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/main.js b/src/main.js index 24fdc91..580b072 100644 --- a/src/main.js +++ b/src/main.js @@ -13,10 +13,11 @@ //鏈湴 Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; -const javaApi = 'http://192.168.11.200:8001';//鏉� +// const javaApi = 'http://192.168.11.200:8001';//鏉� // const javaApi = 'http://10.20.102.168:8001';//寮� // const javaApi = 'http://172.20.10.3:8001';//濮� // const javaApi = 'http://192.168.11.2:8001';//鏌� + const javaApi = 'http://127.0.0.1:8001';//鏅� // const javaApi = 'http://114.132.189.42:1234';//娴嬭瘯鏈� //鑳滀簯鏈嶅姟鍣� // Vue.prototype.LOCATIONVUE = "http://syxt.shxiao2.cn"; 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