哦吼吼 6 rokov pred
rodič
commit
eee5fedb9e

+ 84 - 23
admin-update/src/components/role-set.vue

@@ -1,26 +1,36 @@
 <template>
 	<el-drawer title="权限设置" :visible.sync="showStatus" size="70%" :before-close="closeFn">
 		<div class="role-set-wrap">
-			<div class="role-list">
+			<div class="role-list" v-for="(item, index) in permTree" :key="index">
 				<el-checkbox
-					:indeterminate="isIndeterminate"
-					v-model="checkAll"
-					@change="handleCheckAllChange"
-					>全选</el-checkbox
+					:indeterminate="isIndeterminate[index]"
+					v-model="checkAll[index]"
+					@change="handleCheckAllChange($event, index)"
+					>{{ item.authName }}</el-checkbox
 				>
 				<div style="margin: 15px 0;"></div>
-				<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
-					<el-checkbox v-for="city in cities" :label="city" :key="city">{{
-						city
-					}}</el-checkbox>
+				<el-checkbox-group
+					v-model="checkedPerm"
+					@change="handlecheckedPermChange($event, index)"
+				>
+					<el-checkbox
+						v-for="(items, subIndex) in item.children"
+						:label="items.id"
+						:key="items.id"
+						>{{ items.authName }}</el-checkbox
+					>
 				</el-checkbox-group>
 			</div>
 		</div>
+		<!-- button -->
+		<div class="button-wrap flex-center">
+			<el-button size="mini" @click="closeFn">关闭</el-button>
+			<el-button type="primary" size="mini" @click="saveFn">保存</el-button>
+		</div>
 	</el-drawer>
 </template>
 
 <script>
-const cityOptions = ['上海', '北京', '广州', '深圳'];
 export default {
 	name: 'role-set',
 	props: {
@@ -37,11 +47,11 @@ export default {
 		return {
 			showStatus: false,
 			data: {},
+			permTree: [],
 
-			checkAll: false,
-			checkedCities: ['上海', '北京'],
-			cities: cityOptions,
-			isIndeterminate: true
+			checkAll: [],
+			checkedPerm: [],
+			isIndeterminate: []
 		};
 	},
 	watch: {
@@ -54,23 +64,70 @@ export default {
 	},
 	methods: {
 		init() {
-			this.$service.sassAuth.authList().then(res => {
-				console.log(res);
+			this._getTreeB().then(res => {
+				console.log('res', res);
+				// this._getAuthB
+			});
+		},
+		async _getTreeB() {
+			let data = {};
+			await this.$service.common.permTree({ endId: 1 }).then(res => {
+				this.permTree = res;
+				this.permTree.map(() => {
+					this.isIndeterminate.push(false);
+					this.checkAll.push(false);
+				});
+				data = res;
 			});
+			return data;
+		},
+		async _getAuthB() {
+			let data = {};
+			await this.$service.common.permAuth().then(res => {
+				data = res;
+			});
+			return data;
+		},
+
+		saveFn() {
+			console.log('this.info', this.info);
+			this.$service.auth
+				.authUpdate({
+					roleId: this.info.roleId,
+					authIdList: this.checkedPerm
+				})
+				.then(res => {
+					this.closeFn();
+					this.$message.success('保存成功!');
+				});
 		},
+
 		closeFn(done) {
 			this.$emit('update:show', false);
-			done();
+			if (done) {
+				done();
+			}
 		},
 
-		handleCheckAllChange(val) {
-			this.checkedCities = val ? cityOptions : [];
-			this.isIndeterminate = false;
+		handleCheckAllChange(val, index) {
+			let arr = this.permTree[index].children
+				? this.permTree[index].children
+				: this.permTree[index];
+
+			arr = arr.map(e => e.id);
+
+			this.checkedPerm = val ? arr : [];
+			this.$set(this.isIndeterminate, index, false);
 		},
-		handleCheckedCitiesChange(value) {
+		handlecheckedPermChange(value, index) {
 			let checkedCount = value.length;
-			this.checkAll = checkedCount === this.cities.length;
-			this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
+			let arrLen = this.permTree[index].children ? this.permTree[index].children.length : 0;
+
+			let checkAllStatus = checkedCount === arrLen;
+			this.$set(this.checkAll, index, checkAllStatus);
+
+			let isIndeterminateStatus = checkedCount > 0 && checkedCount < arrLen;
+			this.$set(this.isIndeterminate, index, isIndeterminateStatus);
 		}
 	}
 };
@@ -79,5 +136,9 @@ export default {
 <style lang="scss" scoped>
 .role-set-wrap {
 	padding: 0 20px;
+	height: calc(100% - 50px);
+}
+.button-wrap {
+	padding-left: 20px;
 }
 </style>

+ 2 - 0
admin-update/src/cool/request/index.js

@@ -17,6 +17,7 @@ import role from '@/service/role/index';
 import single from '@/service/single/index';
 import setting from '@/service/setting/index';
 import workbench from '@/service/workbench/index';
+import auth from '@/service/auth/index';
 // sass
 import sassShop from '@/service/sass/shop/index';
 import sassOrder from '@/service/sass/order/index';
@@ -47,6 +48,7 @@ export function SET_SERVICE({ store }) {
 		single,
 		setting,
 		workbench,
+		auth,
 		// sass
 		sassShop,
 		sassOrder,

+ 32 - 0
admin-update/src/service/auth/index.js

@@ -0,0 +1,32 @@
+import { BaseService, Service } from '@/cool';
+
+export class CommonService extends BaseService {
+	/**
+	 * 员工角色权限(B的子集C) b
+	 *
+	 * @returns
+	 * @memberof CommonService
+	 */
+	authList(data) {
+		return this.request({
+			url: '/admin-role-auth/auth',
+			params: data
+		});
+	}
+
+	/**
+	 * 员工角色权限修改 b
+	 *
+	 * @returns
+	 * @memberof CommonService
+	 */
+	authUpdate(data) {
+		return this.request({
+			url: '/admin-role-auth/update',
+			method: 'POST',
+			data: data
+		});
+	}
+}
+
+export default new CommonService();

+ 26 - 0
admin-update/src/service/common/index.js

@@ -141,6 +141,32 @@ export class CommonService extends BaseService {
 		});
 	}
 
+	/**
+	 * 权限树 b
+	 *
+	 * @returns
+	 * @memberof CommonService
+	 */
+	permTree() {
+		return this.request({
+			url: '/permission/tree'
+			// url: '/admin/get-login-auth'
+		});
+	}
+
+	/**
+	 * 当前商家的所有权限 b
+	 *
+	 * @returns
+	 * @memberof CommonService
+	 */
+	permAuth() {
+		return this.request({
+			url: '/merchant/auth'
+			// url: '/admin/get-login-auth'
+		});
+	}
+
 	/**
 	 * 图片验证码 svg
 	 *

+ 2 - 1
admin-update/src/views/staff/list.vue

@@ -142,7 +142,7 @@
 			@cancel="selMemberModal = false"
 		></sel-member>
 		<!-- 权限设置 -->
-		<role-set :show.sync="roleShow" />
+		<role-set :show.sync="roleShow" :info="modifyData" />
 	</div>
 </template>
 
@@ -212,6 +212,7 @@ export default {
 		},
 		// operate
 		authBtnFn(item) {
+			this.modifyData = item;
 			this.roleShow = true;
 		},
 		modifyBtnFn(item) {

+ 13 - 3
admin-update/src/views/staff/role-list.vue

@@ -52,13 +52,18 @@
 				<el-button type="primary" size="small" @click="submitForm('form')">确认</el-button>
 			</div>
 		</el-dialog>
+		<!-- 权限设置 -->
+		<role-set :show.sync="roleShow" :info="modifyData" />
 	</div>
 </template>
 
 <script>
+import roleSet from '@/components/role-set';
 export default {
 	name: 'list-ad',
-	components: {},
+	components: {
+		roleSet
+	},
 	data() {
 		return {
 			app: null,
@@ -72,7 +77,9 @@ export default {
 			},
 			ruleForm: {
 				roleName: [{ required: true, message: '请输入名称', trigger: 'blur' }]
-			}
+			},
+			// 权限设置
+			roleShow: false
 		};
 	},
 	methods: {
@@ -92,7 +99,10 @@ export default {
 				.catch();
 		},
 		// operate
-		authBtnFn(item) {},
+		authBtnFn(item) {
+			this.modifyData = item;
+			this.roleShow = true;
+		},
 		modifyBtnFn(item) {
 			this.addOrModify = 2;
 			this.modifyData = item;