From dcf9c9e0410fe1186239e3f8d6f7bdc789c08010 Mon Sep 17 00:00:00 2001 From: lzhe <lzhe@example.com> Date: 星期三, 05 六月 2024 18:00:39 +0800 Subject: [PATCH] 1 --- src/views/notification/business.vue | 258 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 230 insertions(+), 28 deletions(-) diff --git a/src/views/notification/business.vue b/src/views/notification/business.vue index 532e799..1eb3d8b 100644 --- a/src/views/notification/business.vue +++ b/src/views/notification/business.vue @@ -2,7 +2,7 @@ * @Author: lzhe lzhe@example.com * @Date: 2024-03-26 10:28:33 * @LastEditors: lzhe lzhe@example.com - * @LastEditTime: 2024-04-19 18:18:19 + * @LastEditTime: 2024-05-10 12:08:41 * @FilePath: /smart-web/src/views/master/person/main/index.vue * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE --> @@ -23,16 +23,16 @@ <div class="right-content"> <div class="content-title"> <span class="ct-span">閫氱煡鏂瑰紡</span> - <el-icon><Setting /></el-icon> + <el-icon @click="gojob"><Setting /></el-icon> </div> <el-row class="template-content-box"> - <el-col :span="8" v-for="item in contentData"> - <el-checkbox v-model="checked1" label="閫夋嫨" size="large" /> + <el-col :span="8" v-for="(item,index) in contentData"> + <el-checkbox v-model="item.checked" label="閫夋嫨" size="large" @change="checkboxChange($event,index,item)"/> <div class="box-top"> - <div>{{item.notifyName}}</div> - <div>{{item.notifyTemplateName}}</div> - <div> - <span><el-icon><EditPen /></el-icon>缂栬緫</span> + <div class="box-top-name">{{item.notifyName}}</div> + <div class="box-top-title">{{item.notifyTemplateName}}</div> + <div class="box-top-btn"> + <span @click="table_edit(item, index)"><el-icon><EditPen /></el-icon>缂栬緫</span> <span><el-icon><Delete /></el-icon>鍒犻櫎</span> </div> </div> @@ -42,18 +42,32 @@ <span class="ct-span">榛樿瀵硅薄</span> </div> <div class="template-content-box"> - <el-radio-group v-model="radio1"> + <el-radio-group v-model="radio1" @change="radio1Change"> <el-radio :label="1">閮ㄩ棬</el-radio> <el-radio :label="2">鍛樺伐</el-radio> </el-radio-group> <div class="content"> - <el-button type="primary" plain>鐐瑰嚮娣诲姞+</el-button> + <el-button type="primary" plain @click="addOrganization" v-show="isaddOrganization">鐐瑰嚮娣诲姞+</el-button> + <!-- 閮ㄩ棬閫夋嫨 --> + <span v-if="radio1 == 1" v-for="(item,index) in organizationLi" class="tagItem">{{item.name}}<el-icon @click="delOrganizationLi(index)" style="cursor: pointer;"><Close /></el-icon></span> + <el-select v-if="radio1 == 1" v-show="!isaddOrganization" v-model="organization" style="width: 20%" @change="organizationChange"> + <el-option v-for="item in organizationList" :key="item.parentId" :label="item.name" :value="item.parentId"/> + </el-select> + <!-- 鍛樺伐閫夋嫨 --> + <span v-if="radio1 == 2" v-for="(item,index) in employeeLi" class="tagItem">{{item.name}}<el-icon @click="delEmployeeLi(index)" style="cursor: pointer;"><Close /></el-icon></span> + <el-select v-if="radio1 == 2" v-show="!isaddOrganization" v-model="employee" style="width: 20%" @change="employeeChange"> + <el-option v-for="item in employeeList" :key="item.id" :label="item.organizationName + '-' + item.name" :value="item.id"/> + </el-select> + </div> + <div class="bottom-btn"> + <el-button @click="resetData">閲嶇疆</el-button> + <el-button type="primary" :loading="isSaveing" @click="saveSubmit">淇濆瓨</el-button> </div> </div> </div> </div> </div> -<!-- <save-dialog v-if="dialog.save" ref="saveDialog" :feedBackStatusList="feedBackStatusList" :workstationId="lastLevelId" @success="addfeedbackSuccess" @closed="dialog.save=false"></save-dialog> --> + <save-dialog v-if="dialog.save" ref="saveDialog" @success="addbusinessSuccess" @closed="dialog.save=false"></save-dialog> </template> <script> import * as ElementPlusIconsVue from '@element-plus/icons-vue' @@ -61,11 +75,20 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) { icons.push(key) } - // import saveDialog from './add-feedback' + import saveDialog from './editbusiness' export default { name: "business", data(){ return { + businessKey: "", + isSaveing: false, + employeeLi: [], + organizationLi: [], + isaddOrganization: true, + organizationList: [], + employeeList: [], + organization: "", + employee: "", radio1: 1, checked1: true, tableData: [], @@ -89,35 +112,170 @@ }, mounted(){ this.getTreeList(); - this.getbusiness(); + this.getgroupType(); + this.getEmployeeList(); }, components: { - ...ElementPlusIconsVue - //saveDialog + ...ElementPlusIconsVue,saveDialog }, methods: { - getbusiness() { - this.$HTTP.get("/api/blade-notify/business-notify?businessKey=maintenance").then(res=> { + gojob() { + window.open('http://116.63.148.72:8080/xxl-job-admin'); + }, + checkboxChange(e,index,item) { + var obj = { + businessKey: item.businessKey, + notifyType: item.notifyType, + status: e?"1":"0" + } + this.$HTTP.put("/api/blade-notify/business-notify/changeStatus",obj).then(res=> { if(res.code == 200) { + this.getbusiness(); //鍒锋柊鍒楄〃 + } + }) + }, + saveSubmit() { + var empIds = []; + var orgIds = []; + this.employeeLi.forEach(item=> { + empIds.push(item.id); + }) + this.organizationLi.forEach(item=> { + orgIds.push(item.id); + }) + var obj = { + businessKey: this.businessKey,empIds,orgIds + } + this.$HTTP.post("/api/blade-notify/business-notify",obj).then(res=> { + if(res.code == 200) { + this.$message.success("淇濆瓨鎴愬姛"); + } + }) + }, + resetData() { + this.employeeLi = []; + this.organizationLi = []; + }, + radio1Change(val) { + if(val == 1) { + this.getgroupType(); + }else if(val == 2) { + this.getEmployeeList(); + } + }, + addOrganization() { + this.isaddOrganization = false; + }, + organizationChange(val) { + var flag = this.organizationLi.some(function(item) { + return item.parentId === val; + }); + this.organizationList.forEach(item=> { + if(item.parentId == val && !flag) { + this.organizationLi.push(item); + } + }) + }, + employeeChange(val) { + var flag = this.employeeLi.some(function(item) { + return item.id === val; + }); + this.employeeList.forEach(item=> { + if(item.id == val && !flag) { + this.employeeLi.push(item); + } + }) + }, + delOrganizationLi(index) { + this.organizationLi.splice(index,1); + }, + delEmployeeLi(index) { + this.employeeLi.splice(index,1); + }, + getgroupType() { + this.$HTTP.get("/api/blade-cps/organization/list?groupType=group_organization&groupCategory=1").then(res=> { + if(res.code == 200) { + this.organizationList = res.data; + } + }) + }, + getEmployeeList() { + this.$HTTP.get("/api/blade-cps/employee/get/list?organizationCode=00001&status=1").then(res=> { + if(res.code == 200) { + this.employeeList = res.data; + } + }) + }, + table_edit(row){ + if(row.notifyName == "閽夐拤") { + var url = `/api/blade-notify/notifier/template/dingTalk/dingTalkMessage/config/metadata`; + }else if(row.notifyName == "浼佷笟寰俊") { + var url = `/api/blade-notify/notifier/template/weiXinQY/qyTextMessage/config/metadata`; + }else if(row.notifyName == "绔欏唴淇�") { + var url = `/api/blade-notify/notifier/template/internalMessage/systemDefault/config/metadata`; + }else if(row.notifyName == "閭欢") { + var url = `/api/blade-notify/notifier/template/email/embedded/config/metadata`; + } + this.dialog.save = true + this.$HTTP.get(url).then(res=> { + if(res.code == 200) { + this.dialog.save = true; + this.$nextTick(() => { + var obj = Object.assign(row,res.data); + this.$refs.saveDialog.open('edit').setData(obj); + }) + } + }) + }, + getbusiness() { + this.$HTTP.get(`/api/blade-notify/business-notify?businessKey=${this.businessKey}`).then(res=> { + if(res.code == 200) { + res.data.businessNotifyDTOList.forEach(item=> { + item.checked = (item.status == '0'?false: true); + }) this.contentData = res.data.businessNotifyDTOList; + this.employeeLi = res.data.defaultObject.empList || []; //閮ㄩ棬鍙嶆樉 + this.organizationLi = res.data.defaultObject.orgList || []; //鍛樺伐鍙嶆樉 + if(this.organizationLi != null ) { + this.isaddOrganization = false; + } } }) }, handleNodeClick(data) { - if(data.code) { - this.lastLevelId = data.id; - // this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> { - // if(res.code == 200) { - // this.searchDataList = res.data.records; - // } - // }) + if(data.businessKey) { + this.businessKey = data.businessKey; + this.getbusiness(); } + }, + getLastLevelIds(tree) { + if (tree.length === 0) return ""; // 濡傛灉娌℃湁鏍硅妭鐐癸紝杩斿洖绌� + const lastLevelIds = []; + const lastLevelCodes = []; + function traverseTree(node) { + if(!node.children) { + lastLevelCodes.push(node); + } + if (node.children) { + node.children.forEach(traverseTree); // 閫掑綊閬嶅巻瀛愯妭鐐� + } else { + lastLevelIds.push(node.id); + } + } + // 鍙亶鍘嗙涓�涓牴鑺傜偣 + traverseTree(tree[0]); + return {lastLevelCodes,lastLevelId:lastLevelIds[0]}; // 杩斿洖lastLevelCodes锛氭病鏈塩ode鐨勬暟缁勩�俵astLevelId锛氭湁code鐨勭涓�涓猧d }, getTreeList() { this.$HTTP.get("/api/blade-notify/business-notify/tree").then(res=> { if(res.code == 200) { this.tableData = res.data; - console.log(this.tableData,123) + this.lastLevelId = this.getLastLevelIds(this.tableData).lastLevelId; + this.$nextTick(()=>{ + this.$refs.treeRef.setCurrentKey(this.lastLevelId); //绗竴涓妭鐐圭殑绗竴涓瓙鑺傜偣鏈�鍚庝竴绾ч粯璁ら�変腑 + }) + this.businessKey = this.getLastLevelIds(this.tableData).lastLevelCodes[0].businessKey; + this.getbusiness(); } }) }, @@ -136,8 +294,8 @@ // }) // }, - addfeedbackSuccess() { - //this.getlist(); + addbusinessSuccess() { + this.getbusiness(); } } } @@ -185,7 +343,7 @@ justify-content: space-between; margin: 24px 0 0 0; padding: 0 20px 0 10px; - border-left: 6px solid #3b8e8e; + border-left: 6px solid #409eff; } .ct-span { color: #101010; @@ -206,6 +364,7 @@ background: #fff; margin-right: 20px; box-shadow: 0 1px 3px rgba(0,0,0,.16); + position: relative; } .content { padding: 10px; @@ -214,4 +373,47 @@ height: 200px; overflow: auto; } +.box-top-name { + font-weight: 700; + font-size: 18px; + text-align: left; + color: #333; + display: block; + margin-top: -30px; + margin-left: 56px; +} +.box-top-title { + font-size: 14px; + text-align: left; + color: #333; + display: block; + margin-top: -30px; + margin-left: 56px; + padding: 0 20px 0 33px; + margin: 20px 0 10px 24px; +} +.box-top-btn { + position: absolute; + font-size: 14px; + right: 12px; + bottom: 12px; + cursor: pointer; +} +.box-top-btn span:nth-child(1) { + margin-right: 12px; +} +.tagItem { + margin: 10px 10px 10px 0; + background-color: #409eff; + color: #fff; + border-color: #409eff; + display: inline-block; + font-size: 12px; + padding: 4px 10px; + border-radius: 4px; +} +.bottom-btn { + margin-top: 20px; + text-align: center; +} </style> \ No newline at end of file -- Gitblit v1.9.3