From 4c810c1feb3f78c458084d73e89adc6c4f2256f1 Mon Sep 17 00:00:00 2001
From: lzhe <lzhe@example.com>
Date: 星期四, 06 六月 2024 18:22:55 +0800
Subject: [PATCH] 1

---
 src/views/console/system/data-scope-manager.vue |  226 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 126 insertions(+), 100 deletions(-)

diff --git a/src/views/console/system/data-scope-manager.vue b/src/views/console/system/data-scope-manager.vue
index 37ac3d9..1c0d827 100644
--- a/src/views/console/system/data-scope-manager.vue
+++ b/src/views/console/system/data-scope-manager.vue
@@ -2,18 +2,18 @@
  * @Author: lzhe lzhe@example.com
  * @Date: 2024-03-26 10:28:33
  * @LastEditors: lzhe lzhe@example.com
- * @LastEditTime: 2024-04-17 18:02:12
+ * @LastEditTime: 2024-05-02 22:20:47
  * @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
 -->
 <template>
 	<div class="dict-main">
-		<el-form :inline="true" :model="searchData" abel-width="120px">
+		<el-form :inline="true" :model="searchData" label-width="80px">
 			<el-form-item label="鏉冮檺鍚嶇О">
-				<el-input v-model="searchData.name" placeholder="鏉冮檺鍚嶇О" clearable />
+				<el-input v-model="searchData.deptName" placeholder="鏉冮檺鍚嶇О" clearable />
 			</el-form-item>
 			<el-form-item label="鏉冮檺鎻忚堪">
-				<el-input v-model="searchData.code" placeholder="鏉冮檺鎻忚堪" clearable></el-input>
+				<el-input v-model="searchData.deptName" placeholder="鏉冮檺鎻忚堪" clearable></el-input>
 			</el-form-item>
 			<el-form-item>
 				<el-button type="primary" @click="searchclick">鎼滅储</el-button>
@@ -22,26 +22,42 @@
 		</el-form>
 		<div>
 			<div style="margin-bottom: 12px;">
-				<el-button type="primary">娣诲姞</el-button>
+				<el-button type="primary" @click="addData">娣诲姞</el-button>
 				<el-button type="danger" @click="delData">鍒犻櫎</el-button>
 				<el-button type="primary" @click="addAuthority">鏉冮檺璁剧疆</el-button>
 			</div>
 			<div class="dict-table">
-				<el-table ref="multipleTableRef" :data="tableData" border row-key="id" style="width: 100%" class="multipleTableRef" @selection-change="handleSelectionChange" :tree-props="{ children: 'children', hasChildren: 'has' }">
+				<el-table ref="multipleTableRef" :data="tableData" border row-key="id" style="width: 100%" class="multipleTableRef" @selection-change="handleSelectionChange" lazy
+      :load="tableLoad" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" default-expand-all>
 					<el-table-column type="selection" width="55" />
-					<el-table-column prop="test" label="鏉冮檺鍚嶇О"></el-table-column>
-					<el-table-column prop="test" label="鏉冮檺鎻忚堪"></el-table-column>
-					<el-table-column prop="test" label="鏉冮檺绫诲瀷"></el-table-column>
-					<el-table-column prop="test" label="鎺掑簭"></el-table-column>
-					<el-table-column fixed="right" label="鎿嶄綔">
+					<el-table-column prop="deptName" label="鏉冮檺鍚嶇О"></el-table-column>
+					<el-table-column prop="fullName" label="鏉冮檺鎻忚堪"></el-table-column>
+					<el-table-column prop="deptCategoryName" label="鏉冮檺绫诲瀷"></el-table-column>
+					<el-table-column prop="sort" label="鎺掑簭"></el-table-column>
+					<el-table-column fixed="right" label="鎿嶄綔" width="280">
 						<template #default="scope">
-							<el-button text type="primary" size="small" @click="showDrawer(scope.row, scope.$index)">鏉冮檺閰嶇疆</el-button>
+							<el-button text type="primary" size="small" @click="table_show(scope.row, scope.$index)">鏌ョ湅</el-button>
+							<el-button text type="primary" size="small" @click="table_edit(scope.row, scope.$index)">缂栬緫</el-button>
+							<el-button text type="primary" size="small" @click="table_del(scope.row, scope.$index)">鍒犻櫎</el-button>
+							<el-button text type="primary" size="small" @click="table_edit(scope.row, scope.$index,'fixed')">鏂板瀛愰」</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
 			</div>
 		</div>
-		<save-dialog v-if="dialog.save" ref="saveDialog" :scopeTypeNameList="scopeTypeNameList" :tableRow="tableRow" @success="addDatascopeSuccess" @closed="dialog.save=false"></save-dialog>
+		<save-dialog v-if="dialog.save" ref="saveDialog" :deptCategoryList="deptCategoryList" :parentIdList ="parentIdList" @success="addDatascopeSuccess" @closed="dialog.save=false"></save-dialog>
+
+		<el-dialog title="鏉冮檺閰嶇疆" v-model="authorityVisible" :width="800" destroy-on-close>
+			<el-tabs type="border-card">
+			    <el-tab-pane label="鏁版嵁鏉冮檺">
+			    	<el-tree ref="authorityTree" :data="authorityTreeData" :props="{ label: 'title',children: 'children'}" node-key="id" show-checkbox @check-change="treeHandleCheckChange" :default-checked-keys="treeCheck" />
+			    </el-tab-pane>
+			</el-tabs>
+		<template #footer>
+			<el-button @click="authorityVisible=false" >鍙� 娑�</el-button>
+			<el-button type="primary" :loading="authoritySaveing" @click="authoritySubmit">纭畾</el-button>
+		</template>
+	</el-dialog>
 	</div>
 </template>
 <script>
@@ -55,6 +71,10 @@
 		name: "datascope",
 		data(){
 			return {
+				treeCheck: [],
+				authorityTreeData: [],
+				authoritySaveing: false,
+				authorityVisible: false,
 				scopeTypeNameList: [],
 				dialog: {
 					save: false
@@ -77,57 +97,112 @@
 					size: 10
 				},
 				searchData: {
-					name: "",
-					code: "",
-					belongApplication: "",
-					parentId: ""
+					deptName: "",
+					fullName: "",
+					parentId: "0"
 				},
 				dialog: {
 					save: false,
 					allocation: false
 				},
 				tableData: [],
-				drawerTableData: [],
 				rowId: "",
-				tableRow: {}
+				tableRow: {},
+				parentIdList: [],
+				deptCategoryList: []
 			}
 		},
 		created(){
 			
 		},
 		mounted(){
-			this.getscopeTypeNameList();//瑙勫垯鍒嗙被鏋氫妇
 			this.searchBtn();
+			this.getDictionary();
+			this.getParentIdList();
 		},
 		components: {
 	    	...ElementPlusIconsVue,saveDialog
 	    },
 		methods: {
-			getscopeTypeNameList() {  //瑙勫垯鍒嗙被鏋氫妇
-				this.$HTTP.get("/api/blade-system/dict/dictionary?code=data_scope_type").then(res=> {
+			treeHandleCheckChange() {
+
+			},
+			authoritySubmit() {
+				var obj = {
+					dataScopeIds: this.$refs.authorityTree.getCheckedKeys(),
+					deptId: this.selectId
+				}
+				this.authoritySaveing = true;
+				this.$HTTP.post("/api/blade-system/data-scope-manager/grant",obj).then(res=> {
+					this.authoritySaveing = false;
 					if(res.code == 200) {
-						this.scopeTypeNameList = res.data;
+						this.authorityVisible = false;
+						this.$message.success("鎿嶄綔鎴愬姛");
+						this.searchClearBtn();
+					}else {
+						this.$alert(res.message, "鎻愮ず", {type: 'error'});
+					}
+				})
+			},
+			tableLoad(row,treeNode,resolve) {
+				this.$HTTP.get(`/api/blade-system/data-scope-manager/lazy-list?parentId=${row.id}`).then(res=> {
+					if(res.code == 200) {
+						resolve(res.data);
+					}
+				})
+			},
+			getParentIdList() {
+				this.$HTTP.get("/api/blade-system/data-scope-manager/tree").then(res=> {
+					if(res.code == 200) {
+						this.parentIdList = res.data;
+					}
+				})
+			},
+			getDictionary() {
+				this.$HTTP.get("/api/blade-system/dict/dictionary?code=data_scope_category").then(res=> {
+					if(res.code == 200) {
+						this.deptCategoryList = res.data;
 					}
 				})
 			},
 			addDatascopeSuccess() {
-				this.drawerSearchclick();
+				this.searchclick();
 			},
+			//娣诲姞
 			addData(){
-				this.dialog.save = true
+				this.dialog.save = true;
 				this.$nextTick(() => {
-					this.$refs.saveDialog.open()
+					this.$refs.saveDialog.open(this.parentIdList,this.deptCategoryList);
+				})
+			},
+			getTreeSelect(id) {
+				this.$HTTP.get(`/api/blade-system/data-scope-manager/grant-select?deptId=${id}`).then(res=> {
+					if(res.code == 200) {
+						this.treeCheck = res.data;
+					}
 				})
 			},
 			addAuthority() {
-				this.$message({
-					message: '鍙兘閫夋嫨涓�鏉℃暟鎹�',
-					type: 'warning'
-				});
+				if(this.selection.length != 1) {
+					this.$message({
+						message: '鍙兘閫夋嫨涓�鏉℃暟鎹�',
+						type: 'warning'
+					});
+			        return;
+				}
+				this.selectId = this.selection[0].id;
+				this.treeCheck = [];
+				this.$HTTP.get("/api/blade-system/menu/grant-tree").then(res=> {
+					if(res.code == 200) {
+						this.authorityTreeData = res.data.dataScope;
+						this.getTreeSelect(this.selectId);
+						this.authorityVisible = true;
+					}
+				})
 			},
 			// 鍒犻櫎
 			delData() {
-				if(this.drawerSelection.length == 0) {
+				if(this.selection.length == 0) {
 					this.$message({
 			          message: '璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�',
 			          type: 'warning'
@@ -135,34 +210,32 @@
 			        return;
 				}
 				var selStr = "";
-				this.drawerSelection.map(item=> {
+				this.selection.map(item=> {
 					selStr += item.id + ","
 				})
 				selStr = selStr.replace(/,$/, '');
 				var that = this;
-				this.$HTTP.post("/api/blade-system/data-scope/remove?ids="+selStr).then(res=> {
+				this.$HTTP.post("/api/blade-system/data-scope-manager/remove?ids="+selStr).then(res=> {
 					if(res.code == 200) {
 						that.$message.success("鎿嶄綔鎴愬姛");
-						that.drawerSearchclick();
+						that.searchclick();
 					}
 				})
 			},
-			table_edit(row){  //缂栬緫
+			table_edit(row,index,fixed){  //缂栬緫
 				this.dialog.save = true
-				this.$HTTP.get("/api/blade-system/data-scope/detail?id="+row.id).then(res=> {
-					if(res.code == 200) {
-						this.dialog.save = true;
-						this.$nextTick(() => {
-							this.$refs.saveDialog.open('edit').setData(res.data);
-						})
+				this.$nextTick(() => {
+					if(fixed) {  //鍒ゆ柇鏂板瀛愰」
+						row.fixed = "fixed";
 					}
+					this.$refs.saveDialog.open(this.parentIdList,this.deptCategoryList,'edit').setData(row)
 				})
 			},
 			//鏌ョ湅
 			table_show(row){  //鏌ョ湅
 				this.dialog.save = true
 				this.$nextTick(() => {
-					this.$refs.saveDialog.open('show').setData(row)
+					this.$refs.saveDialog.open(this.parentIdList,this.deptCategoryList,'show').setData(row)
 				})
 			},
 			table_del(row) {
@@ -170,20 +243,16 @@
 				this.$confirm(`纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?`, '', {
 					type: 'warning'
 				}).then(() => {
-					this.$HTTP.post("/api/blade-system/data-scope/remove?ids="+row.id).then(res=> {
+					this.$HTTP.post("/api/blade-system/data-scope-manager/remove?ids="+row.id).then(res=> {
 						if(res.code == 200) {
 							that.$message.success("鎿嶄綔鎴愬姛");
-							that.drawerSearchclick();
+							that.searchBtn();
 						}
 					})
 				}).catch(() => {
 
 				})
 			},
-			handleClose(done) {
-				this.drawerTableData = [];
-		        done();
-		    },
 			exportFile(row,index){
 				window.open(row.link);
 			},
@@ -192,9 +261,8 @@
 			},
 			searchClearBtn() {
 				this.searchData = {
-					name: "",
-					code: "",
-					belongApplication: "",
+					deptName: "",
+					fullName: "",
 					parentId: ""
 				}
 				this.searchBtn();
@@ -202,33 +270,7 @@
 			showDrawer(row){
 				this.rowId = row.id;
 				this.tableRow = row;  //鍚庨潰缁勪欢浼氱敤鍒�
-				this.drawerSearchclick();
 				this.drawer = true;
-			},
-			drawerSearchclick() {
-				var obj = {};
-				for(var key in this.drawerSearchData) {
-					if(this.drawerSearchData[key]) {
-						obj[key] = this.drawerSearchData[key];
-					}
-				}
-				obj.menuId = this.rowId;
-				this.$HTTP.get("/api/blade-system/data-scope/list?"+this.$TOOL.qsStringify(obj)).then(res=> {
-					if(res.code == 200) {
-						this.drawerTableData = res.data.records;
-						this.drawerTotal = res.data.total;
-					}
-				})
-			},
-			drawerSearchClearBtn() {
-				this.drawerSearchData = {
-					scopeName: "",
-					resourceCode: "",
-					menuId: this.rowId,
-					current: 1,
-					size: 10
-				}
-				this.drawerSearchclick();
 			},
 			searchclick() {
 				this.searchBtn();
@@ -240,31 +282,15 @@
 						obj[key] = this.searchData[key];
 					}
 				}
-				// this.$HTTP.get("/api/blade-system/menu/lazy-menu-list",obj).then(res=> {
-				// 	if(res.code == 200) {
-				// 		this.tableData = res.data;
-				// 	}
-				// })
+				this.tableData = [];
+				this.$HTTP.get("/api/blade-system/data-scope-manager/lazy-list?" + this.$TOOL.qsStringify(obj)).then(res=> {
+					if(res.code == 200) {
+						this.tableData = res.data;
+					}
+				})
 			},
 			handleSelectionChange(selection) {
 				this.selection = selection;
-			},
-			drawerHandleSelectionChange(selection) {
-				this.drawerSelection = selection;
-			},
-			changeDepartment() {
-				this.departmentVisible = true;
-			},
-			handleSizeChange(val) {
-				console.log(`姣忛〉 ${val} 鏉);
-				this.drawerSearchData.current = "1";
-				this.drawerSearchData.size = val;
-				this.drawerSearchclick();
-			},
-			handleCurrentChange(val) {
-				console.log(`褰撳墠椤�: ${val}`);
-				this.drawerSearchData.current = val;
-				this.drawerSearchclick();
 			}
 		}
 	}
@@ -299,7 +325,7 @@
 		margin-bottom: 8px;
 	}
 	.attachSize {
-		color:#3b8e8e;
+		color:#409eff;
 		padding: 0 10px;
     	font-size: 12px;
 		background-color: #ebf4f4;

--
Gitblit v1.9.3