From 0d9c8915b4c9deef17459f886ef136ad3d3b9440 Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期四, 04 七月 2024 16:50:04 +0800 Subject: [PATCH] 成员管理 分配部门 部门搜索 添加 修改 导入人员 下载导入模板 --- Source/plt-web/plt-web-ui/src/App.vue | 2 /dev/null | 158 -------------- Source/plt-web/plt-web-ui/src/views/system/user/index.vue | 258 ++++++++++++++++++++++- Source/plt-web/plt-web-ui/src/util/basic-option.js | 3 Source/plt-web/plt-web-ui/src/api/system/user/api.js | 32 ++ Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue | 13 Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue | 146 +++++++++++++ Source/plt-web/plt-web-ui/src/main.js | 4 Source/plt-web/plt-web-ui/src/views/system/user/option.js | 17 - 9 files changed, 441 insertions(+), 192 deletions(-) diff --git a/Source/plt-web/plt-web-ui/src/App.vue b/Source/plt-web/plt-web-ui/src/App.vue index 4b2c36e..32b2829 100644 --- a/Source/plt-web/plt-web-ui/src/App.vue +++ b/Source/plt-web/plt-web-ui/src/App.vue @@ -32,7 +32,7 @@ margin: 50px auto; } .avue-dialog .el-dialog{ - top:43%; + top:50%; max-height: calc(100% - 100px); -webkit-transform: translate(-50%, 0); transform: translate(-50%, -50%); diff --git a/Source/plt-web/plt-web-ui/src/api/system/user/api.js b/Source/plt-web/plt-web-ui/src/api/system/user/api.js index b24c646..ce644b2 100644 --- a/Source/plt-web/plt-web-ui/src/api/system/user/api.js +++ b/Source/plt-web/plt-web-ui/src/api/system/user/api.js @@ -25,7 +25,7 @@ // 瑙掕壊鍏ㄦ煡璇� export function gridRoles(page,limit) { return request({ - url: "/api/roleQueryController/gridRoles", + url: "/api/roleQueryController/refDataGrid", method: "get", params:{ page,limit @@ -101,3 +101,33 @@ data:formData }); } + +// 涓嬭浇妯℃澘鎺ュ彛 +export const download = (params) => { + return request({ + url: '/api/userQueryController/downloadImportTemplate', + method: 'get', + headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, + responseType: 'blob', + params + }) +} + +//鑾峰彇瀵嗙爜绛栫暐 +export function departmentQueryController(params) { + return request({ + url: "/api/departmentQueryController/refTree", + method: "get", + params + }); +} + +//鑾峰彇瀵嗙爜绛栫暐 +export function saveUsersDepts(params) { + return request({ + url: "/api/departmentQueryController/saveUsersDepts", + method: "post", + params + }); +} + diff --git a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/Upload-files.vue b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/Upload-files.vue deleted file mode 100644 index 35b1b6d..0000000 --- a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/Upload-files.vue +++ /dev/null @@ -1,158 +0,0 @@ -<template> - <el-dialog - :visible.sync="dialogVisible" - append-to-body - title="涓婁紶鏂囦欢" - > - <Divider left="30px" text="瀵煎叆鎻愮ず"></Divider> - <ul> - <li> - 1.绾㈣壊瀛椾綋琛ㄧず蹇呰緭椤� - </li> - <li> - 2.姣忔浠呰兘鏈�澶氬鍏�10000鏉℃暟鎹� - </li> - </ul> - <Divider left="30px" text="excel鏂囦欢锛岄�夋嫨鏂囦欢鍚庝細鑷姩涓婁紶"></Divider> - <el-upload - :before-upload="beforeUpload" - :headers="uploadHeaders" - :on-change="uploadChange" - :on-error="onError" - :on-success="onSuccess" - :show-file-list="false" - accept=".xlsx, .xls" - action="/api/ubcs-code/codeClassify/importClassify" - class="upload-demo"> - <el-button size="small" style="margin: 15px 35px" type="primary">娴忚鏂囦欢</el-button> - </el-upload> - <template #footer> - <el-button - :loading="downloadLoading" - size="small" - type="primary" - @click="downloadTemplateFun" - >涓嬭浇瀵煎叆妯℃澘 - </el-button - > - <el-button size="small" @click="dialogVisible = false">鍏抽棴</el-button> - </template> - </el-dialog> -</template> - -<script> -// import {downloadErrorFile,downloadBatchImportApplyTemplate} from '@/api/template/templateAttr' -import {getToken} from "@/util/auth"; -import func from "@/util/func"; - -export default { - name: "Upload-files", - props: { - visible: { - type: Boolean, - default: false, - }, - codeClassifyOid: { - type: String, - default: "", - }, - }, - data() { - return { - flga: true, - pageLoading: null, - downloadLoading: false, - } - }, - watch: { - visible: { - handler(newval, oldval) { - // console.log('newval',newval) - } - } - }, - computed: { - uploadHeaders() { - return { - "Blade-Auth": "bearer " + getToken(), - }; - }, - dialogVisible: { - get() { - return this.visible; - }, - set(val) { - this.$emit("update:visible", val); - }, - }, - }, - methods: { - //鏂囦欢涓婁紶鍓� - async beforeUpload(file) { - const fileType = file.name.split(".").pop(); - if (fileType !== "xlsx" && fileType !== "xls") { - // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� - this.$message.error("鍙厑璁镐笂浼爔lsx銆亁ls鏍煎紡鐨勬枃浠�"); - return Promise.reject(false); - } - this.pageLoading = this.$loading({ - lock: true, - text: "鏂囦欢涓婁紶涓�", - spinner: "el-icon-loading", - background: "rgba(0, 0, 0, 0.7)", - }); - return true; - }, - // 鏂囦欢涓婁紶鎴愬姛 - onSuccess(resbonse) { - if (Object.keys(resbonse.data).length === 0) { - this.$message.success("涓婁紶鎴愬姛锛�"); - this.dialogVisible = false; - return; - } - if (resbonse.data.fileOid) { - const fileName = resbonse.data.filePath.split("/").pop(); - this.$message.error("璇蜂笅杞介敊璇俊鎭枃浠惰繘琛屾煡鐪嬶紒"); - downloadErrorFile({uuid: resbonse.data.fileOid}).then((res) => { - func.downloadFileByBlobHandler(res); - }); - } - }, - //鐐瑰嚮涓嬭浇妯℃澘 - downloadTemplateFun() { - this.downloadLoading = true; - downloadBatchImportApplyTemplate({codeClassifyOid: this.codeClassifyOid}).then(res => { - this.$utilFunc.downloadFileByBlob(res.data, "妯℃澘鏂囦欢.xls"); - this.downloadLoading = false; - }).catch((res) => { - this.$message.warning(res) - this.downloadLoading = false; - }) - }, - //鏂囦欢涓婁紶澶辫触 - onError(res) { - this.pageLoading.close(); - }, - //鏂囦欢鐘舵�佹敼鍙� - uploadChange(file) { - if (file.status === "success" || file.status === "error") { - this.pageLoading.close(); - } - } - } -} -</script> - -<style lang="scss" scoped> -ul { - color: rgb(188, 188, 188); - margin: 20px 0 20px 0; - padding: 0 0 0 30px; - list-style: none; - - li { - margin-bottom: 5px; - font-size: 13px; - } -} -</style> diff --git a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue new file mode 100644 index 0000000..d75110c --- /dev/null +++ b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue @@ -0,0 +1,146 @@ +<template> + <el-dialog + v-dialogDrag + :close-on-click-modal="false" + :destroy-on-close="true" + :title="title" + :visible.sync="visible" + width="40%" + append-to-body + class="avue-dialog" + style="margin-top: -20vh !important;" + > + <Divider left="30px" text="瀵煎叆鎻愮ず"></Divider> + <ul> + <li> + 璇风偣鍑绘祻瑙堟枃浠惰繘琛屼笂浼� + </li> + </ul> + <Divider left="30px" text="閫夋嫨鏂囦欢鍚庝細鑷姩涓婁紶"></Divider> + <el-upload + :action="fileUrl" + :before-upload="beforeUpload" + :data="fileData" + :headers="uploadHeaders" + :on-change="uploadChange" + :on-error="onError" + :on-success="onSuccess" + :show-file-list="false" + class="upload-demo"> + <el-button size="small" style="margin: 15px 35px" type="primary">娴忚鏂囦欢</el-button> + </el-upload> + <template #footer> + <el-button size="small" @click="visible = false">鍏抽棴</el-button> + </template> + </el-dialog> +</template> + +<script> +import {getToken} from "@/util/auth"; +import func from "@/util/func"; +import {validatenull} from "@/util/validate"; + +export default { + name: "upload-file", + props: { + fileType: { + type: Array, + default: () => [] + }, + title: { + type: String, + default: '涓婁紶鏂囦欢' + }, + fileUrl: { + type: String, + default: '' + }, + fileData: { + type: Array, + default: () => [] + } + }, + data() { + return { + flga: true, + pageLoading: null, + downloadLoading: false, + visible: false, + } + }, + created() { + }, + watch: { + visible: { + handler(newval, oldval) { + // console.log('newval',newval) + } + } + }, + computed: { + uploadHeaders() { + return { + "Authorizationtoken": getToken(), + }; + }, + }, + methods: { + //鏂囦欢涓婁紶鍓� + async beforeUpload(file) { + // 鑾峰彇鏂囦欢鎵╁睍鍚� + const fileExtension = file.name.split(".").pop().toLowerCase(); // 杞崲涓哄皬鍐欎互閬垮厤澶у皬鍐欎笉鍖归厤鐨勯棶棰� + if (this.fileType) { + if (!this.fileType.includes(fileExtension)) { + // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� + this.$message.error(`鍙厑璁镐笂浼�${this.fileType.toString()}鏍煎紡鐨勬枃浠禶); + return Promise.reject(false); + } + } + this.pageLoading = this.$loading({ + lock: true, + text: "鏂囦欢涓婁紶涓�", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }); + + return true; + }, + // 鏂囦欢涓婁紶鎴愬姛 + onSuccess(resbonse) { + console.log(resbonse); + if (resbonse.code === 200) { + this.$message.success("瀵煎叆鎴愬姛锛�"); + this.visible = false; + } else { + this.$message.error(resbonse.msg); + } + }, + //鏂囦欢涓婁紶澶辫触 + onError(res) { + this.pageLoading.close(); + this.$message.error(res); + }, + //鏂囦欢鐘舵�佹敼鍙� + uploadChange(file) { + console.log( this.pageLoading); + if (file.status === "success" || file.status === "error") { + this.pageLoading.close(); + } + } + } +} +</script> + +<style lang="scss" scoped> +ul { + color: rgb(188, 188, 188); + margin: 20px 0 20px 0; + padding: 0 0 0 30px; + list-style: none; + + li { + margin-bottom: 5px; + font-size: 13px; + } +} +</style> diff --git a/Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue b/Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue index dc1c5b1..6b73c7c 100644 --- a/Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue +++ b/Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue @@ -118,14 +118,13 @@ async beforeUpload(file) { // 鑾峰彇鏂囦欢鎵╁睍鍚� const fileExtension = file.name.split(".").pop().toLowerCase(); // 杞崲涓哄皬鍐欎互閬垮厤澶у皬鍐欎笉鍖归厤鐨勯棶棰� - const allowedExtensions = this.paramVOS.fileType || ['css', 'csv', 'doc', 'gif', 'html', 'jpe', 'jpg', 'jpeg', 'png', 'js', 'json', - 'mp3', 'mp4', 'xlsx', 'xml', 'zip', 'xhtml', 'wps', 'ppt', 'xls', 'word', 'pdf', 'txt']; - // 妫�鏌ユ枃浠舵墿灞曞悕鏄惁鍦ㄥ厑璁哥殑鏂囦欢鎵╁睍鍚嶆暟缁勪腑 - if (!allowedExtensions.includes(fileExtension)) { - // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� - this.$message.error(`鍙厑璁镐笂浼�${allowedExtensions.toString()}鏍煎紡鐨勬枃浠禶); - return Promise.reject(false); + if(this.paramVOS.fileType){ + if (!this.paramVOS.fileType.includes(fileExtension)) { + // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� + this.$message.error(`鍙厑璁镐笂浼�${this.paramVOS.fileType.toString()}鏍煎紡鐨勬枃浠禶); + return Promise.reject(false); + } } this.pageLoading = this.$loading({ diff --git a/Source/plt-web/plt-web-ui/src/main.js b/Source/plt-web/plt-web-ui/src/main.js index 5471b03..05e9ed2 100644 --- a/Source/plt-web/plt-web-ui/src/main.js +++ b/Source/plt-web/plt-web-ui/src/main.js @@ -39,7 +39,7 @@ // 瀵屾枃鏈粍浠� import richText from '@/components/PLT-basic-component/richText' // 涓婁紶鏂囦欢缁勪欢 -import UploadFiles from '@/components/PLT-basic-component/Upload-files' +import uploadFile from '@/components/PLT-basic-component/upload-file' // 琛ㄥ崟涓婁紶鏂囦欢缁勪欢 import formUpload from "@/components/PLT-basic-component/formUpload"; // 绌挎妗嗙粍浠� @@ -56,7 +56,7 @@ Vue.component('dynamicTableForm', dynamicTableForm); Vue.component('dynamicForm', dynamicForm); Vue.component('richText', richText); -Vue.component('UploadFiles', UploadFiles); +Vue.component('uploadFile', uploadFile); Vue.component('formUpload', formUpload); Vue.component('Divider', Divider); Vue.component('transfer', transfer); diff --git a/Source/plt-web/plt-web-ui/src/util/basic-option.js b/Source/plt-web/plt-web-ui/src/util/basic-option.js index aa2feb4..1c2b03c 100644 --- a/Source/plt-web/plt-web-ui/src/util/basic-option.js +++ b/Source/plt-web/plt-web-ui/src/util/basic-option.js @@ -7,8 +7,11 @@ searchIcon:true, selection:true, stripe:true, + headerAlign: 'center', + align: 'center', // selection 鏄惁鏈夐�夋嫨妗� // indexFixed:true/left/right, 鍥哄畾鍒� // menu:false, 鏄惁鏈夋搷浣滄爮 // menuTitle:xxx, 鎿嶄綔鏍忔爣棰� + // stripe 鏉$汗 } diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue index f584d62..1970aa3 100644 --- a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue +++ b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue @@ -2,6 +2,7 @@ <basic-container> <avue-crud ref="userCrud" + :before-open="beforeOpen" :data="tableData" :option="option" :page.sync="page" @@ -16,8 +17,27 @@ @row-click="rowClickHandler" @row-save="rowSaveHandler" @row-update="rowUpdateHandler" - @row-del="rowDelHandler" > + <!-- 閮ㄩ棬澶撮儴鎼滅储鎻掓Ы --> + <template slot-scope="{disabled,size}" slot="pkDepartmentNameSearch"> + <div style="display: flex;gap: 5px"> + <el-select v-model="departSearchValue" clearable placeholder="璇烽�夋嫨閮ㄩ棬"> + <el-option :label="departSearchObj.name" :value="departSearchObj.oid"></el-option> + </el-select> + <el-button size="small" type="success" @click="dialogDepartSearchHandler">閫夋嫨閮ㄩ棬</el-button> + </div> + </template> + + <!-- 瀵硅瘽妗嗛儴闂ㄦ彃妲� --> + <template slot="pkDepartmentNameForm" slot-scope="scope"> + <div style="display: flex;gap: 5px"> + <el-select v-model="departValue" clearable placeholder="璇烽�夋嫨閮ㄩ棬"> + <el-option :label="departObj.name" :value="departObj.oid"></el-option> + </el-select> + <el-button size="small" type="success" @click="dialogDepartHandler">閫夋嫨閮ㄩ棬</el-button> + </div> + </template> + <template slot="status" slot-scope="{row}"> <el-tag v-if="row.status === 0" type="success">鍚敤</el-tag> <el-tag v-if="row.status === 1" type="danger">鍋滅敤</el-tag> @@ -29,7 +49,9 @@ </template> <template #menu="{row,index,size}"> - <el-button size="small" type="text" @click="stopUserHandler(row)"> + <el-button icon="el-icon-edit" size="small" type="text" @click.stop="rowEditHandler(row,index)">缂栬緫</el-button> + <el-button icon="el-icon-delete" size="small" type="text" @click.stop="rowDeleteHandler(row)">鍒犻櫎</el-button> + <el-button size="small" type="text" @click.stop="stopUserHandler(row)"> <span v-if="row.status === 0" style="color: #fa3434"><i class="el-icon-video-pause"></i> 鍋滅敤</span> <span v-if="row.status === 1" style="color: #55b61d"><i class="el-icon-video-pause"></i> 鍚敤</span> </el-button> @@ -38,12 +60,13 @@ <template slot="menuLeft" slot-scope="scope"> <el-button icon="el-icon-delete" plain size="small" type="danger" @click="allDelHandler">鍒犻櫎</el-button> <el-button icon="el-icon-user" plain size="small" type="primary" @click="roleHandler">鍒嗛厤瑙掕壊</el-button> - <el-button icon="el-icon-school" plain size="small" type="primary">鍒嗛厤閮ㄩ棬</el-button> + <el-button icon="el-icon-school" plain size="small" type="primary" @click="departmentHandler">鍒嗛厤閮ㄩ棬</el-button> <el-button icon="el-icon-key" plain size="small" type="success" @click="setPwsHandler">璁剧疆瀵嗙爜绛栫暐</el-button> - <el-button icon="el-icon-upload2" plain size="small" type="primary">瀵煎叆浜哄憳</el-button> - <el-button icon="el-icon-download" plain size="small" type="primary">涓嬭浇瀵煎叆妯℃澘</el-button> + <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadRole">瀵煎叆浜哄憳</el-button> + <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadHandler">涓嬭浇瀵煎叆妯℃澘</el-button> </template> </avue-crud> + <!-- 鍒嗛厤瑙掕壊绌挎妗� --> <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" :transferTitle="transferTitle" title="鍒嗛厤瑙掕壊" @@ -58,7 +81,7 @@ :visible.sync="pwdVisible" append-to-body="true" class="avue-dialog" - style="margin-top: -20vh !important;" + style="margin-top: -15vh !important;" title="璁剧疆瀵嗙爜绛栫暐" width="30%" > @@ -73,6 +96,33 @@ <div slot="footer" class="dialog-footer"> <el-button size="small" @click="pwdVisible = false">鍙� 娑�</el-button> <el-button size="small" type="primary" @click="savePwdHandler">纭� 瀹�</el-button> + </div> + </el-dialog> + + <!-- 瀵煎叆浜哄憳 --> + <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" title="瀵煎叆浜哄憳"></upload-file> + + <!-- 鍒嗛厤閮ㄩ棬瀵硅瘽妗� --> + <el-dialog + v-dialogDrag + v-loading="departLoading" + :destroy-on-close="true" + :visible.sync="departVisible" + append-to-body="true" + class="avue-dialog" + title="鍒嗛厤閮ㄩ棬" + width="50%" + > + <avue-crud + ref="departCrud" + :data="departData" + :option="departOption" + @current-row-change="handleCurrentRowChange" + > + </avue-crud> + <div slot="footer" class="dialog-footer"> + <el-button size="small" @click="departVisible = false">鍙� 娑�</el-button> + <el-button size="small" type="primary" @click="saveDepartHandler">纭� 瀹�</el-button> </div> </el-dialog> </basic-container> @@ -90,15 +140,55 @@ updateUser, deleteUser, selectPwdStrategyMap, - saveUserPasswordStrateg + saveUserPasswordStrateg, + download, + departmentQueryController, + saveUsersDepts } from '@/api/system/user/api' import {column} from "./option" import func from '@/util/func' export default { name: "userManage", - data() { + data: function () { return { + departSearchObj:{}, + departSearchValue:'', + loadKey: 0, + departStatus: '', // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + departValue: '', // 閮ㄩ棬瀵硅瘽妗嗕笅鎷夋缁戝畾鍊� + departObj: {}, // 閮ㄩ棬瀵硅瘽妗嗕笅鎷夋閫夐」缁戝畾鍊� + departCurrenRow: {}, + departOption: { + ...basicOption, + rowKey: 'oid', + rowParentKey: 'parentId', + selection: false, + highlightCurrentRow: true, + stripe: false, + menu: false, + refreshBtn: false, + gridBtn: false, + column: [ + { + label: '鍚嶇О', + prop: 'name', + }, + { + label: '缂栧彿', + prop: 'id', + }, + { + label: '鎻忚堪', + prop: 'description', + }, + ] + }, + departData: [], + departLoading: false, + departVisible: false, + upFileType: ['xls', 'xlsx'], + fileUrl: 'api/userQueryController/importUser', pwdVisible: false, pwdLoading: false, pwdValue: '', @@ -107,6 +197,8 @@ tableData: [], option: { ...basicOption, + editBtn: false, + delBtn: false, dialogWidth: '50%', calcHeight: -60, column: column @@ -127,6 +219,14 @@ created() { }, methods: { + // 鏂板鎴栦慨鏀瑰璇濇鎵撳紑鍓� + beforeOpen(done, type) { + if(type == 'add'){ + this.departObj = {}; + this.departValue = ""; + } + done(); + }, // 琛ㄦ牸璇锋眰 getTableList() { this.tableLoading = true; @@ -147,6 +247,11 @@ // 鎼滅储鏌ヨ handleSearch(params, done) { + this.searchParams = {}; + if(this.departSearchObj && this.departSearchValue){ + this.searchParams['conditionMap["pkDepartment"]'] = this.departSearchValue; + } + if (!func.isEmptyObject(params)) { for (let key in params) { if (params.hasOwnProperty(key)) { @@ -155,15 +260,20 @@ this.searchParams[`conditionMap["${newKey}"]`] = params[key]; } } - } else { + } + + if (func.isEmptyObject(params) && !this.departSearchValue) { this.searchParams = {}; } + this.getTableList(); done(); }, // 閲嶇疆鎼滅储鏉′欢 handleReset() { + this.departSearchObj = {}; + this.departSearchValue = ""; this.searchParams = {}; this.getTableList(); }, @@ -282,6 +392,7 @@ this.$message.error('璇锋鏌ヤ袱娆″瘑鐮佹槸鍚﹁緭鍏ヤ竴鑷达紒') return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; } + row.pkDepartment = this.departValue; // 灏嗗綋鍓嶈鐨勯儴闂ㄥ弬鏁皃kDepartment 璧嬪�间负涓嬫媺妗嗙粦瀹氱殑鍊� addUser(row).then(res => { if (res.data.code === 200) { this.$message.success(res.data.obj); @@ -293,12 +404,25 @@ done() }, + // 鎿嶄綔鏍忕紪杈� + rowEditHandler(row, index) { + let obj = { name: row.pkDepartmentName, oid: row.pkDepartment, rowOid: row.oid }; + this.departValue = row.pkDepartment; + this.departObj = obj; + + if (this.departObj.rowOid) { + this.$refs.userCrud.rowEdit(row, index); + } + + }, + // 缂栬緫 rowUpdateHandler(row, index, done) { if (row.password != row.confirmPassword) { this.$message.error('璇锋鏌ヤ袱娆″瘑鐮佹槸鍚﹁緭鍏ヤ竴鑷达紒') return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; } + row.pkDepartment = this.departValue; // 灏嗗綋鍓嶈鐨勯儴闂ㄥ弬鏁皃kDepartment 璧嬪�间负涓嬫媺妗嗙粦瀹氱殑鍊� updateUser(row).then(res => { if (res.data.code === 200) { this.$message.success(res.data.obj); @@ -311,7 +435,7 @@ }, // 鍒犻櫎 - rowDelHandler(row) { + rowDeleteHandler(row) { let params = { ids: row.oid } @@ -351,7 +475,119 @@ message: '宸插彇娑堝垹闄�' }); }); - } + }, + + // 涓嬭浇瀵煎叆妯℃澘 + downloadHandler() { + download().then(res => { + console.log(res); + func.downloadFileByBlobHandler(res); + this.$message.success('涓嬭浇鎴愬姛') + }).catch(err => { + this.$message.error(err); + }) + }, + + // 瀵煎叆浜哄憳 + uploadRole() { + this.$refs.upload.visible = true; + }, + + // 鍒嗛厤閮ㄩ棬 + departmentHandler() { + if (this.selectList.length <= 0) { + this.$message.warning('娓呭厛閫夋嫨浜哄憳鍐嶈繘琛屾搷浣滐紒') + return; + } + this.departStatus = 'default'; // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + this.departmentQueryOnLoad(); + }, + + // 鍒嗛厤閮ㄩ棬琛ㄦ牸鍒濆鍖栬姹� + departmentQueryOnLoad() { + departmentQueryController({queryAllLevel: true}).then(res => { + const data = res.data.treeData; + this.departData = this.departDtaFormAtter(data); + this.departVisible = true; + }).catch(err => { + this.$message.error(err); + }) + }, + + // 鍒嗛厤閮ㄩ棬鏁版嵁杞崲 + departDtaFormAtter(items) { + return items.map(item => { + // 杞崲褰撳墠鑺傜偣鐨勫睘鎬� + const formList = { + oid: item.oid, + id: item.attributes.id, + name: item.attributes.name, + description: item.attributes.description, + parentId: item.parentId, + parentName: item.parentName, + parentBtmName: item.parentBtmName, + // 濡傛灉children瀛樺湪涓斾笉涓虹┖锛屽垯閫掑綊杞崲children + children: item.children && item.children.length > 0 ? this.departDtaFormAtter(item.children) : undefined + }; + return formList; + }); + }, + + // 鍒嗛厤閮ㄩ棬 琛屽崟閫� + handleCurrentRowChange(row) { + this.departCurrenRow = row; + }, + + // 鍒嗛厤閮ㄩ棬 淇濆瓨 + saveDepartHandler() { + if (func.isEmptyObject(this.departCurrenRow)) { + this.$message.warning('璇烽�夋嫨閮ㄩ棬鑺傜偣锛�') + return; + } + + if (this.departStatus == 'default') { + let params = { + userOIds: this.selectList.map(item => item.oid).join(','), + deptId: this.departCurrenRow.oid, + }; + saveUsersDepts(params).then(res => { + if (res.data.code === 200) { + this.departVisible = false; + this.getTableList(); + this.$message.success('鍒嗛厤鎴愬姛锛�') + } + }).catch(err => { + console.log(err); + }) + return; + } + + if (this.departStatus == 'handle') { + this.departObj = this.departCurrenRow; + this.departValue = this.departCurrenRow.oid; + this.departVisible = false; + return;; + } + + if(this.departStatus == 'search'){ + this.departSearchObj = this.departCurrenRow; + this.departSearchValue = this.departCurrenRow.oid; + this.departVisible = false; + return; + } + }, + + // 瀵硅瘽妗嗗垎閰嶉儴闂ㄦ寜閽� + dialogDepartHandler() { + this.departmentQueryOnLoad(); + this.departStatus = 'handle'; // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + }, + + // 鎼滅储瀵硅瘽妗嗗垎閰嶉儴闂ㄦ寜閽� + dialogDepartSearchHandler(){ + this.departmentQueryOnLoad(); + this.departStatus = 'search'; // 鍖哄垎涓嶅悓鏂瑰紡鎵撳紑閮ㄩ棬瀵硅瘽妗� + }, } } diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/option.js b/Source/plt-web/plt-web-ui/src/views/system/user/option.js index 58c46e3..07f7c2b 100644 --- a/Source/plt-web/plt-web-ui/src/views/system/user/option.js +++ b/Source/plt-web/plt-web-ui/src/views/system/user/option.js @@ -2,7 +2,6 @@ { label: '璐﹀彿', prop: 'id', - align:'center', search:true, sortable:true, rules: [ @@ -16,7 +15,6 @@ { label: '濮撳悕', prop: 'name', - align:'center', search:true, sortable:true, rules: [ @@ -61,7 +59,6 @@ { label: '鐘舵��', prop: 'status', - align: 'center', display:false, sortable:true, slot: true, @@ -75,7 +72,6 @@ { label: '閿佸畾鐘舵��', prop: 'lockFlag', - align:'center', sortable:true, display:false, }, @@ -86,20 +82,18 @@ search:true, sortable:true, searchslot:true, - row:true, + formslot:true, }, { label: '涓撲笟', prop: 'specialties', - align:'center', sortable:true, }, { label: '瑙掕壊', prop: 'pkPersonName', - align:'center', type:'select', - dicUrl: 'api/roleQueryController/gridRoles', + dicUrl: 'api/roleQueryController/refDataGrid', props: { label: 'name', value: 'oid' @@ -112,27 +106,26 @@ { label: '鐢靛瓙閭欢', prop: 'email', - align:'center', sortable:true, + overHidden: true, + row:true }, { label: '鎻忚堪', type:'textarea', prop: 'description', - align:'center', sortable:true, + overHidden: true, }, { label: '閮ㄩ棬棰嗗', prop: 'isDeptLeader', - align:'center', sortable:true, display:false, }, { label: '鎵�灞炲瘑绾�', prop: 'secretGradeText', - align:'center', sortable:true, display:false, }, -- Gitblit v1.9.3