From 16edb612abbfeafe6e4d2f3f8089b689e3c14456 Mon Sep 17 00:00:00 2001 From: lzhe <181968431@qq.com> Date: 星期四, 11 四月 2024 23:51:06 +0800 Subject: [PATCH] 1 --- src/views/master/person/main/personDepartment.vue | 94 ++++++++++++++- src/views/master/person/main/personPerson.vue | 55 +++++++- src/views/master/person/main/department.vue | 111 +++++++----------- src/views/master/person/main/personPost.vue | 16 - src/views/master/person/main/save.vue | 14 + src/layout/components/importTable.vue | 55 +++++++++ 6 files changed, 243 insertions(+), 102 deletions(-) diff --git a/src/layout/components/importTable.vue b/src/layout/components/importTable.vue new file mode 100644 index 0000000..2b2ffe0 --- /dev/null +++ b/src/layout/components/importTable.vue @@ -0,0 +1,55 @@ +<template> + <div> + <el-steps direction="vertical" :active="1"> + <el-step title="鍑嗗鏁版嵁"> + <span class="desc">瀵煎叆鐨勬暟鎹釜鏁伴渶灏忎簬200,鎵�鏈夊厑璁稿鍏ョ殑瀛楁璇峰弬鑰冩ā鏉�; + <span class="bolder">瀛楁涓嶇鍚堣鍒欙紝鏁存潯鏁版嵁涓嶄簣浠ュ鍏�</span> + </span> + <button type="button" class="el-button more-btn el-button--text el-button--mini"><span>鏇村瀛楁瀵煎叆瑙勫垯 <i class="el-icon-arrow-down no-open"></i></span></button> + <div class="desc"> + <ul class="tip" style=""> + <li>1銆佸憳宸ュ伐鍙凤細蹇呭~锛涘伐鍙蜂笉鍙噸澶嶏紱鏀寔澶у皬鍐欏瓧姣嶃�佹暟瀛楃粍鍚堬紱</li> + <li>2銆佸憳宸ュ鍚嶏細蹇呭~锛涘鏋滈噸鍚嶏紝寤鸿鍔犳暟瀛楀尯鍒嗭紝濡傗�滃紶涓�1鈥濓紱</li> + <li>3銆佺姸鎬侊細蹇呭~锛涢�夋嫨鍦ㄨ亴/绂昏亴锛�</li> + <li>4銆佺數璇濓細蹇呭~锛涘湪鏈紒涓氬唴涓嶅彲閲嶅锛�</li> + <li>5銆丳IN鐮侊細蹇呭~锛涙敮鎸�4-6浣嶆暟瀛楋紱</li> + <li>6銆佸矖浣嶏細闈炲繀濉紱鍙互濉叆澶氫釜宀椾綅锛屼互鑻辨枃閫楀彿鈥�,鈥欓棿闅旓紱涓嶅彲閲嶅悕锛�</li> + <li>7銆侀偖绠憋細闈炲繀濉紱閭鏍煎紡鏍¢獙锛屾瘮濡傗��***@126.com鈥濓紱</li> + <li>8銆侀儴闂細闈炲繀濉紱璇峰~鍐欓儴闂ㄥ畬鏁村眰绾э紱涓棿闂撮殧锛岃鐢ㄨ嫳鏂囩鍙封��-鈥滈棿闅斻�傚鈥漻x鍏徃-xx閮ㄩ棬-xx鈥�</li> + <li>9銆佸叆鑱屾棩鏈燂細闈炲繀濉紱鏃ユ湡鏍煎紡鈥淵Y-MM-DD鈥�</li> + </ul> + <a class="download el-link el-link--primary is-underline"><i class="el-icon-download"></i><span class="el-link--inner">涓嬭浇妯℃澘</span></a> + </div> + </el-step> + <el-step title="涓婁紶鏁版嵁鏂囦欢"></el-step> + </el-steps> + </div> +</template> + +<script> + export default { + data() { + return { + } + }, + mounted() { + + }, + methods: { + + } + } +</script> + +<style scoped> +.desc { + color: #333; +} +.desc .bolder { + font-weight: bolder; +} +.tip { + font-size: 12px; + padding-left: 16px +} +</style> diff --git a/src/views/master/person/main/department.vue b/src/views/master/person/main/department.vue index e259fce..17136bb 100644 --- a/src/views/master/person/main/department.vue +++ b/src/views/master/person/main/department.vue @@ -1,27 +1,27 @@ <template> <el-dialog :title="titleMap[mode]" v-model="visible" :width="800" destroy-on-close @closed="$emit('closed')"> - <el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="center"> + <el-form :model="depatmentForm" :rules="depatmentRules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="center"> <el-row> <el-col :span="12"> - <el-form-item label="閮ㄩ棬鍚嶇О" prop="userName"> - <el-input v-model="form.userName" placeholder="閮ㄩ棬鍚嶇О" clearable></el-input> + <el-form-item label="閮ㄩ棬鍚嶇О" prop="name"> + <el-input v-model="depatmentForm.name" placeholder="閮ㄩ棬鍚嶇О" clearable></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="涓婄骇閮ㄩ棬" prop="name"> - <el-input v-model="form.name" placeholder="涓婄骇閮ㄩ棬" clearable></el-input> + <el-form-item label="涓婄骇閮ㄩ棬" prop="parentId"> + <el-tree-select @change= "parentIdChange" v-model="depatmentForm.parentId" clearable placeholder="涓婄骇閮ㄩ棬" default-expand-all check-on-click-nod :data="departmentList" check-strictly :props="{ label: 'name' }" node-key="id" ref="parentTree" style="width: 240px" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="浣跨敤鐘舵��" prop="name"> - <el-switch v-model="value1" /> + <el-switch v-model="depatmentForm.status" /> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <el-button @click="visible=false" >鍙� 娑�</el-button> - <el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="submit()">淇� 瀛�</el-button> + <el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="departmentSubmit()">淇� 瀛�</el-button> </template> </el-dialog> </template> @@ -31,6 +31,7 @@ emits: ['success', 'closed'], data() { return { + departmentList: [], value1: true, mode: "add", titleMap: { @@ -41,50 +42,17 @@ visible: false, isSaveing: false, //琛ㄥ崟鏁版嵁 - form: { - id:"", - userName: "", - avatar: "", + depatmentForm: { name: "", - dept: "", - group: [] + parentId: "", + groupCategory: 1, + groupType: "group_organization", + status: true }, //楠岃瘉瑙勫垯 - rules: { - avatar:[ - {required: true, message: '璇蜂笂浼犲ご鍍�'} - ], - userName: [ - {required: true, message: '璇疯緭鍏ョ櫥褰曡处鍙�'} - ], - name: [ - {required: true, message: '璇疯緭鍏ョ湡瀹炲鍚�'} - ], - password: [ - {required: true, message: '璇疯緭鍏ョ櫥褰曞瘑鐮�'}, - {validator: (rule, value, callback) => { - if (this.form.password2 !== '') { - this.$refs.dialogForm.validateField('password2'); - } - callback(); - }} - ], - password2: [ - {required: true, message: '璇峰啀娆¤緭鍏ュ瘑鐮�'}, - {validator: (rule, value, callback) => { - if (value !== this.form.password) { - callback(new Error('涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!')); - }else{ - callback(); - } - }} - ], - dept: [ - {required: true, message: '璇烽�夋嫨鎵�灞為儴闂�'} - ], - group: [ - {required: true, message: '璇烽�夋嫨鎵�灞炶鑹�', trigger: 'change'} - ] + depatmentRules: { + name: [{required: true, message: '璇疯緭鍏ラ儴闂ㄥ悕绉�'}], + parentId: [{required: true, message: '璇烽�夋嫨涓婄骇閮ㄩ棬'}] }, //鎵�闇�鏁版嵁閫夐」 groups: [], @@ -101,10 +69,20 @@ } }, mounted() { - // this.getGroup() - // this.getDept() + this.getOrganizationList(); }, methods: { + getOrganizationList() { + this.$HTTP.get(`/api/blade-cps/organization/tree?groupType=group_organization&groupCategory=1`).then(res=> { + if(res.code == 200) { + this.departmentList = res.data; + } + }) + }, + parentIdChange(val) { + // var $parentId = this.$refs.parentTree.getCurrentNode().title; + // this.depatmentForm.$parentId = $parentId; + }, //鏄剧ず open(mode='add'){ this.mode = mode; @@ -121,19 +99,20 @@ this.depts = res.data; }, //琛ㄥ崟鎻愪氦鏂规硶 - submit(){ + departmentSubmit(){ + var obj = Object.assign({},this.depatmentForm); + obj.status = obj.status ? 1 : 0; this.$refs.dialogForm.validate(async (valid) => { if (valid) { - this.isSaveing = true; - var res = await this.$API.demo.post.post(this.form); - this.isSaveing = false; - if(res.code == 200){ - this.$emit('success', this.form, this.mode) - this.visible = false; - this.$message.success("鎿嶄綔鎴愬姛") - }else{ - this.$alert(res.message, "鎻愮ず", {type: 'error'}) - } + this.$HTTP.post("/api/blade-cps/group",obj).then(res=> { + if(res.code == 200) { + this.$emit('success', this.depatmentForm, this.mode); + this.visible = false; + this.$message.success("鎿嶄綔鎴愬姛"); + }else { + this.$alert(res.message, "鎻愮ず", {type: 'error'}); + } + }) }else{ return false; } @@ -141,15 +120,9 @@ }, //琛ㄥ崟娉ㄥ叆鏁版嵁 setData(data){ - this.form.id = data.id - this.form.userName = data.userName - this.form.avatar = data.avatar - this.form.name = data.name - this.form.group = data.group - this.form.dept = data.dept - + data.status = data.status=="1"? true:false; //鍙互鍜屼笂闈竴鏍峰崟涓敞鍏ワ紝涔熷彲浠ュ儚涓嬮潰涓�鏍风洿鎺ュ悎骞惰繘鍘� - //Object.assign(this.form, data) + Object.assign(this.depatmentForm, data) } } } diff --git a/src/views/master/person/main/personDepartment.vue b/src/views/master/person/main/personDepartment.vue index f2dde89..347dd2f 100644 --- a/src/views/master/person/main/personDepartment.vue +++ b/src/views/master/person/main/personDepartment.vue @@ -16,17 +16,19 @@ </div> <div> <el-select v-model="searchData.status" placeholder="鐘舵��" class="searchStatus"> - <el-option v-for="item in statusList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" size="small"/> + <el-option key="1" label="鍚敤" value="1" size="small"/> + <el-option key="0" label="鍋滅敤" value="0" size="small"/> </el-select> - <el-input v-model="searchData.name" style="width: 200px" size="small" placeholder="璇疯緭鍏ュ叧閿瓧杩涜杩囨护"> + <el-input v-model="searchData.keywords" style="width: 200px" size="small" placeholder="璇疯緭鍏ュ叧閿瓧杩涜杩囨护"> <template #append> - <el-button :icon="searchIcon" @click="getOrganizationList" /> + <el-button @click="getOrganizationList"> + <i class="el-icon"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704z"></path></svg></i> + </el-button> </template> </el-input> </div> </div> <div class="right-table"> - <!-- lazy :load="tableLoad" --> <el-table :data="departmentList" style="width: 100%;margin-bottom: 20px;" row-key="id" border default-expand-all ref="treeRef" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column prop="name" label="宀椾綅鍚嶇О"></el-table-column> @@ -50,8 +52,20 @@ </div> </div> </div> - - <save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSuccess" @closed="dialog.save=false"></save-dialog> + <!-- 鍒犻櫎 --> + <el-dialog title="" v-model="delPersonModel" :width="300" destroy-on-close> + <div> + <div style="margin-bottom: 6px;"><span class="delIcon">!</span>璇蜂綘璋ㄦ厧閫夋嫨锛�</div> + <div style="text-indent: 24px;">鍒犻櫎鏁版嵁浼氬奖鍝嶅凡鍏宠仈鐨勪笟鍔� ,鑻ユ偍鎯冲湪宸插叧鑱旂殑涓氬姟涓緷鐒舵樉绀鸿繖浜涙暟鎹�, 鎮ㄥ彲浠ラ�夋嫨 鍋滅敤 鎿嶄綔銆傚仠鐢ㄥ悗姝ゆ暟鎹皢涓嶈兘鍐嶈鏂颁笟鍔′娇鐢ㄣ��</div> + </div> + <template #footer> + <div class="footerDiv"> + <div class="delBtn" @click="delData(0)">鍒犻櫎</div> + <div class="delBtn" @click="delData(1)">鍋滅敤</div> + </div> + </template> + </el-dialog> + <save-dialog v-if="dialog.save" ref="saveDialog" @success="addHandleSuccess" @closed="dialog.save=false"></save-dialog> </template> <script> import saveDialog from './department' @@ -59,6 +73,7 @@ name: "bakalaka", data(){ return { + selectId: "", selection: [], total: 0, searchData: { @@ -72,7 +87,8 @@ dialog: { save: false }, - departmentList: [] + departmentList: [], + delPersonModel: false } }, created(){ @@ -86,6 +102,19 @@ saveDialog }, methods: { + addHandleSuccess() { + this.getOrganizationList(); + }, + delData(type) { + this.$HTTP.delete(`/api/blade-cps/organization?ids=${this.selectId}&type=${type}`).then(res=> { + if(res.code == 200) { + this.$message.success("鎿嶄綔鎴愬姛"); + this.delPersonModel = false; + this.selectId = ""; + this.getOrganizationList(); + } + }) + }, removeHasChildren(arr) { return arr.map(item => { // 鍒涘缓涓�涓笉鍖呭惈hasChildren鐨勬柊瀵硅薄 @@ -129,7 +158,21 @@ handleSelectionChange (selection) { this.selection = selection; }, - delPerson() {}, + delPerson() { + if(this.selection.length == 0) { + this.$message({ + message: '璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�', + type: 'warning' + }); + return; + } + var selStr = ""; + this.selection.map(item=> { + selStr += item.id + "," + }) + this.selectId = selStr.replace(/,$/, ''); + this.delPersonModel = true; + }, handleSizeChange(val) { console.log(`姣忛〉 ${val} 鏉); }, @@ -236,4 +279,39 @@ .multipleTableRef { margin-bottom: 8px; } + .footerDiv { + text-align: center; + } + .delBtn { + color: #fff; + width: 112px; + height: 32px; + display: inline-block; + color: #fa554c; + background-color: #fff; + border: 1px solid #fdbbb7; + text-align: center; + line-height: 32px; + cursor: pointer; + } + .delBtn:nth-child(1) { + margin-right:4px; + } + .delBtn:hover { + background-color: #f34d5b; + border-color: #f34d5b; + color: #fff; + } + .delIcon { + color: #fff; + background: red; + border-radius: 50%; + display: inline-block; + width: 20px; + height: 20px; + font-size: 14px; + text-align: center; + line-height: 20px; + margin-right: 6px; + } </style> diff --git a/src/views/master/person/main/personPerson.vue b/src/views/master/person/main/personPerson.vue index 05d504b..8886cb4 100644 --- a/src/views/master/person/main/personPerson.vue +++ b/src/views/master/person/main/personPerson.vue @@ -18,7 +18,6 @@ </div> <div class="person-tree"> <!-- 閮ㄩ棬 --> - <!-- <div v-for="(item,index) in titleList" :data-id="item.id" v-if="leftActive" :class="{treeActive: item.active}" @click="selectbtn(index)">{{item.name}}({{item.peopleNum}})</div> --> <el-tree style="max-width: 600px" :data="titleList" :expand-on-click-node="false" default-expand-all :props="{label: 'name', children: 'children'}" class="treeActive" @node-click="titleListNode" /> <!-- 宀椾綅 --> <div v-for="(item,index) in titleList" :data-id="item.id" v-if="!leftActive" :class="{treeActive: item.active}" @click="selectbtn(index)">{{item.postName}}</div> @@ -98,10 +97,8 @@ <el-form :model="departmentFrom" :rules="departmentVisibleRules" :disabled="mode=='show'" ref="dialogForm" label-width="80px" label-position="center"> <el-row> <el-col :span="24"> - <el-form-item label="閮ㄩ棬" prop="department"> - <el-select v-model="departmentFrom.department" style="width: 100%"> - <el-option v-for="item in groups" :key="item.id" :label="item.label" :value="item.id"/> - </el-select> + <el-form-item label="閮ㄩ棬" prop="parentId"> + <el-tree-select @change= "parentIdChange" v-model="departmentFrom.parentId" clearable placeholder="閮ㄩ棬" default-expand-all check-on-click-nod :data="titleList" check-strictly :props="{ label: 'name' }" node-key="id" ref="parentTree" /> </el-form-item> </el-col> </el-row> @@ -140,7 +137,7 @@ current: 1, size: 15, status: "1", - total: "0", + total: "1", keywords: "", postId: "", //postId organizationCode: "" //缁勭粐code @@ -152,9 +149,7 @@ department: "" }, departmentVisibleRules: { - department:[ - {required: true, message: '璇烽�夋嫨閮ㄩ棬'} - ] + parentId:[{required: true, message: '璇烽�夋嫨閮ㄩ棬'}] }, departmentVisible: false, dialog: { @@ -165,7 +160,10 @@ statusList: [], input3: '', tableData: [], - selection: [] + selection: [], + departmentFrom: { + parentId: "" + } } }, created(){ @@ -179,6 +177,10 @@ saveDialog }, methods: { + parentIdChange(val) { + // var $parentId = this.$refs.parentTree.getCurrentNode().title; + // this.depatmentForm.$parentId = $parentId; + }, titleListNode(data) { this.searchData.organizationCode = data.code; this.searchPerson(); @@ -260,7 +262,26 @@ }) }, departmentSubmit() { - this.departmentVisible=false; //閮ㄩ棬璋冩暣 + var employeeIds = []; + this.selection.forEach(item=> { + employeeIds.push(item.id); + }) + this.$refs.dialogForm.validate(async (valid) => { + if (valid) { + this.$HTTP.put(`/api/blade-cps/employee/change-organization?organizationId=${this.departmentFrom.parentId}&employeeIds=${employeeIds.join(",")}`).then(res=> { + if(res.code == 200) { + this.searchPerson(); + this.departmentVisible=false; //閮ㄩ棬璋冩暣 + this.departmentFrom.parentId = ""; + this.$message.success("鎿嶄綔鎴愬姛"); + }else { + this.$alert(res.message, "鎻愮ず", {type: 'error'}); + } + }) + }else{ + return false; + } + }) }, //娣诲姞 addPerson(){ @@ -299,6 +320,18 @@ this.delPersonModel = true; }, changeDepartment() { + if(this.selection.length == 0) { + this.$message({ + message: '璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�', + type: 'warning' + }); + return; + } + var selStr = ""; + this.selection.map(item=> { + selStr += item.id + "," + }) + this.selectId = selStr.replace(/,$/, ''); this.departmentVisible = true; }, changeTab(name) { diff --git a/src/views/master/person/main/personPost.vue b/src/views/master/person/main/personPost.vue index fd8cf6c..c1312b3 100644 --- a/src/views/master/person/main/personPost.vue +++ b/src/views/master/person/main/personPost.vue @@ -16,11 +16,14 @@ </div> <div> <el-select v-model="postSearchData.status" placeholder="鐘舵��" class="searchStatus"> - <el-option v-for="item in statusList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" size="small"/> + <el-option key="1" label="鍚敤" value="1" size="small"/> + <el-option key="0" label="鍋滅敤" value="0" size="small"/> </el-select> <el-input v-model="postSearchData.keywords" style="width: 200px" size="small" placeholder="璇疯緭鍏ュ叧閿瓧杩涜杩囨护"> <template #append> - <el-button :icon="searchIcon" @click="searchPerson" /> + <el-button @click="getPost"> + <i class="el-icon"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704z"></path></svg></i> + </el-button> </template> </el-input> </div> @@ -71,7 +74,6 @@ data(){ return { totle: "0", - statusList: [], postSearchData: { current: 1, size: 15, @@ -92,7 +94,6 @@ }, mounted(){ - this.getStatus(); this.getPost(); }, components: { @@ -111,13 +112,6 @@ }, postHandleSuccess() { this.getPost(); - }, - getStatus() { //鑾峰彇鍏ㄩ儴璐﹀彿 - this.$HTTP.get(`/api/blade-system/dict/dictionary?code=employee_status`).then(res=> { - if(res.code == 200) { - this.statusList = res.data; - } - }) }, getPost() { //宀椾綅 this.$HTTP.get(`/api/blade-system/post/page?`+this.$TOOL.qsStringify(this.postSearchData)).then(res=> { diff --git a/src/views/master/person/main/save.vue b/src/views/master/person/main/save.vue index c8f3180..c1659f4 100644 --- a/src/views/master/person/main/save.vue +++ b/src/views/master/person/main/save.vue @@ -219,10 +219,18 @@ setData(data){ this.$HTTP.get(`/api/blade-cps/employee/detail/${data.id}`).then(res=> { if(res.code == 200) { - res.data.postId = res.data.postId.split(","); - res.data.deptId = res.data.deptId.split(","); + if(res.data.postId) { + res.data.postId = res.data.postId.split(","); + }else { + res.data.postId = []; + } + if(res.data.deptId) { + res.data.deptId = res.data.deptId.split(","); + }else { + res.data.deptId = []; + } //鍙互鍜屼笂闈竴鏍峰崟涓敞鍏ワ紝涔熷彲浠ュ儚涓嬮潰涓�鏍风洿鎺ュ悎骞惰繘鍘� - Object.assign(this.addPersonForm, res.data) + Object.assign(this.addPersonForm, res.data); } }) } -- Gitblit v1.9.3