权限管理
This commit is contained in:
parent
22cdb23ac1
commit
e5d8ebe25c
|
@ -25,8 +25,16 @@ export const role = {
|
|||
data,
|
||||
});
|
||||
},
|
||||
//删除角色列表
|
||||
deleteRoleList: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/role/delete`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
//更新角色权限
|
||||
updateRoleList: (data) => {
|
||||
updatePermissionUpdate: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/role/permission/update`,
|
||||
method: "put",
|
||||
|
@ -34,11 +42,11 @@ export const role = {
|
|||
});
|
||||
},
|
||||
//获取角色权限列表
|
||||
updateRoleList: (data) => {
|
||||
getRoleList: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/role/permission/update`,
|
||||
method: "put",
|
||||
data,
|
||||
url: `/merchant-api/role/permission/list`,
|
||||
method: "get",
|
||||
params: data,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -102,8 +102,12 @@ router.beforeEach((to, from, next) => {
|
|||
});
|
||||
$api
|
||||
.getUserInfo()
|
||||
.then(({ data }) => {
|
||||
.then(async ({ data }) => {
|
||||
let permissionsData = getMenu(data.data.role);
|
||||
if (permissionsData === null) {
|
||||
let res = await $api.role.getRoleList({ roleId: data.data.role });
|
||||
permissionsData = res.data.data;
|
||||
}
|
||||
const filterTreeData = (data, permissions) => {
|
||||
console.log(data);
|
||||
|
||||
|
@ -167,7 +171,7 @@ router.beforeEach((to, from, next) => {
|
|||
// FULL_ROUTERS.menuList,
|
||||
// data.data.permissions
|
||||
// );
|
||||
console.log(permissionsData);
|
||||
console.log(permissionsData, "11111111111111111111111111111");
|
||||
|
||||
let _menu = filterTreeData(FULL_ROUTERS.menuList, permissionsData);
|
||||
fnAddDynamicMenuRoutes(_menu);
|
||||
|
|
|
@ -180,7 +180,7 @@ export function getMenu(role) {
|
|||
"operation-management/brand-store/index",
|
||||
// "operation-management/order/index",
|
||||
"operation-management/brand-order/index",
|
||||
"operation-management/role/index",
|
||||
// "operation-management/role/index",
|
||||
"datacenter",
|
||||
"datacenter/customer-analysis/index",
|
||||
"datacenter/product-analysis/index",
|
||||
|
@ -189,7 +189,7 @@ export function getMenu(role) {
|
|||
"brand/config/index",
|
||||
"local-course/resources",
|
||||
"wallet/index",
|
||||
"operation-management/accountNumber/index",
|
||||
// "operation-management/accountNumber/index",
|
||||
];
|
||||
} else if (role == "ROLE_AGENT") {
|
||||
return [
|
||||
|
@ -198,15 +198,17 @@ export function getMenu(role) {
|
|||
"operation-management/market-list/index",
|
||||
// "operation-management/order/index",
|
||||
"operation-management/brand-order/index",
|
||||
"operation-management/role/index",
|
||||
// "operation-management/role/index",
|
||||
"datacenter",
|
||||
"datacenter/customer-analysis/index",
|
||||
"datacenter/product-analysis/index",
|
||||
"datacenter/order-analysis/index",
|
||||
"local-course/resources",
|
||||
"wallet/index",
|
||||
"operation-management/accountNumber/index",
|
||||
// "operation-management/accountNumber/index",
|
||||
];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -70,41 +70,117 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [
|
||||
{
|
||||
label: "姓名",
|
||||
prop: "username",
|
||||
type: "Input",
|
||||
required: true,
|
||||
rules: {
|
||||
if (this.isAdd) {
|
||||
return [
|
||||
{
|
||||
label: "姓名",
|
||||
prop: "username",
|
||||
type: "Input",
|
||||
required: true,
|
||||
message: "请输入姓名",
|
||||
trigger: "blur",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入姓名",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "账号",
|
||||
prop: "mobile",
|
||||
type: "Input",
|
||||
required: true,
|
||||
rules: {
|
||||
{
|
||||
label: "账号",
|
||||
prop: "mobile",
|
||||
type: "Input",
|
||||
required: true,
|
||||
message: "请输入角色编码",
|
||||
trigger: "blur",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入角色编码",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "密码",
|
||||
prop: "password",
|
||||
type: "Input",
|
||||
required: true,
|
||||
rules: {
|
||||
{
|
||||
label: "密码",
|
||||
prop: "password",
|
||||
type: "Input",
|
||||
required: true,
|
||||
message: "请输入权限字段",
|
||||
trigger: "blur",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入权限字段",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
{
|
||||
label: "角色",
|
||||
prop: "subRole",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请绑定角色",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.subRole}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{this.roleList.map((item) => {
|
||||
return (
|
||||
<el-option label={item.name} value={item.id}></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
{
|
||||
label: "姓名",
|
||||
prop: "username",
|
||||
type: "Input",
|
||||
required: true,
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入姓名",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "账号",
|
||||
prop: "mobile",
|
||||
type: "Input",
|
||||
required: true,
|
||||
disabled: true,
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入角色编码",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "角色",
|
||||
prop: "subRole",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请绑定角色",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.subRole}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{this.roleList.map((item) => {
|
||||
return (
|
||||
<el-option label={item.name} value={item.id}></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
|
@ -134,17 +210,30 @@ export default {
|
|||
this.$emit("queryList");
|
||||
});
|
||||
} else {
|
||||
this.$api.mer_admin.noticeUpdate(this.modalData).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
this.$api.accountNumber
|
||||
.updateAccount(this.modalData)
|
||||
.then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
asyncComputed: {
|
||||
async roleList() {
|
||||
let res = await this.$api.role.roleList({
|
||||
ownerId: JSON.parse(sessionStorage.getItem("userInfo")).managerId
|
||||
? JSON.parse(sessionStorage.getItem("userInfo")).managerId
|
||||
: JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
|
||||
});
|
||||
console.log(res);
|
||||
|
||||
return res.data.data;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
@ -68,7 +68,9 @@
|
|||
<div class="stat-right">
|
||||
<div class="stat-title">总商品数量(个)</div>
|
||||
<div class="stat-value">
|
||||
<span style="font-size: 20px">{{overview.productCount}}</span>
|
||||
<span style="font-size: 20px">{{
|
||||
overview.productCount
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -77,7 +79,9 @@
|
|||
<div class="stat-right">
|
||||
<div class="stat-title">上架中商品数量(个)</div>
|
||||
<div class="stat-value">
|
||||
<span style="font-size: 20px">{{overview.productOnSaleCount}}</span>
|
||||
<span style="font-size: 20px">{{
|
||||
overview.productOnSaleCount
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -86,7 +90,9 @@
|
|||
<div class="stat-right">
|
||||
<div class="stat-title">折扣商品数量(个)</div>
|
||||
<div class="stat-value">
|
||||
<span style="font-size: 20px">{{overview.productDiscountCount}}</span>
|
||||
<span style="font-size: 20px">{{
|
||||
overview.productDiscountCount
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -95,7 +101,9 @@
|
|||
<div class="stat-right">
|
||||
<div class="stat-title">仓库中商品数量(个)</div>
|
||||
<div class="stat-value">
|
||||
<span style="font-size: 20px">{{overview.productWarehouseCount}}</span>
|
||||
<span style="font-size: 20px">{{
|
||||
overview.productWarehouseCount
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -166,7 +174,7 @@ export default {
|
|||
},
|
||||
productFilterType: "SALE",
|
||||
selectList: [],
|
||||
overview:{}
|
||||
overview: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -241,7 +249,7 @@ export default {
|
|||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
this.$api.mer_admin.getProductOverview(this.formInline).then((res) => {
|
||||
console.log(res,'概况');
|
||||
console.log(res, "概况");
|
||||
this.overview = res.data.data;
|
||||
});
|
||||
},
|
||||
|
@ -387,15 +395,13 @@ export default {
|
|||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
title: "操作 (提示:下架后可进行操作)",
|
||||
fixed: "right",
|
||||
type: "jsx",
|
||||
align: "center",
|
||||
width: "340px",
|
||||
render: ({ row }) => {
|
||||
let edit = () => {
|
||||
console.log(row);
|
||||
|
||||
this.$refs.addOrUpdate.toggle(row).update();
|
||||
};
|
||||
let priceAdjustment = () => {
|
||||
|
|
|
@ -73,9 +73,10 @@ export default {
|
|||
};
|
||||
},
|
||||
init(row) {
|
||||
console.log(row);
|
||||
this.ProductData = {
|
||||
merchantId: JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
|
||||
shopId: JSON.parse(sessionStorage.getItem("userInfo")).shopId,
|
||||
shopId: row.shopId,
|
||||
productIds: [row.id],
|
||||
type: "DISCOUNT",
|
||||
};
|
||||
|
|
|
@ -38,7 +38,11 @@
|
|||
ref="addOrUpdate"
|
||||
@queryList="$refs.oTable.reload()"
|
||||
></addOrUpdate>
|
||||
<el-dialog title="菜单权限" :visible.sync="dialogTableVisible">
|
||||
<el-dialog
|
||||
v-if="isShow"
|
||||
title="菜单权限"
|
||||
:visible.sync="dialogTableVisible"
|
||||
>
|
||||
<el-form ref="form" :model="form" label-width="120px">
|
||||
<el-form-item label="角色权限:">
|
||||
<el-tree
|
||||
|
@ -46,16 +50,17 @@
|
|||
ref="tree"
|
||||
:data="data"
|
||||
show-checkbox
|
||||
node-key="id"
|
||||
node-key="url"
|
||||
:default-expand-all="true"
|
||||
:default-checked-keys="menuCheckKeys"
|
||||
:props="defaultProps"
|
||||
@node-click="handleNodeClick"
|
||||
>
|
||||
</el-tree>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary">确定</el-button>
|
||||
<el-button type="primary" @click="sure">确定</el-button>
|
||||
<el-button @click="dialogTableVisible = false">取消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
@ -63,6 +68,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { getMenu } from "@/utils";
|
||||
import addOrUpdate from "./popup/add-or-update.vue";
|
||||
import { mapState } from "vuex";
|
||||
import FULL_ROUTERS from "@/router/full-routers";
|
||||
|
@ -90,9 +96,11 @@ export default {
|
|||
defaultProps: {
|
||||
children: "list",
|
||||
label: "name",
|
||||
value: "menuId",
|
||||
value: "url",
|
||||
},
|
||||
menuCheckKeys: [],
|
||||
roleId: "",
|
||||
isShow: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
|
@ -100,6 +108,11 @@ export default {
|
|||
this.$refs.addOrUpdate.toggle().add(this.formInline);
|
||||
},
|
||||
queryList(pageNo, pageSize) {
|
||||
let permissionsData = getMenu(
|
||||
JSON.parse(sessionStorage.getItem("userInfo")).role
|
||||
);
|
||||
this.data = this.filterTreeData(FULL_ROUTERS.menuList, permissionsData);
|
||||
|
||||
this.$api.role
|
||||
.roleList({
|
||||
ownerId: JSON.parse(sessionStorage.getItem("userInfo")).managerId
|
||||
|
@ -108,10 +121,7 @@ export default {
|
|||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.oTable.complete(
|
||||
res.data.data,
|
||||
Number(res.data.total)
|
||||
);
|
||||
this.$refs.oTable.complete(res.data.data, Number(res.data.total));
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.complete(false);
|
||||
|
@ -123,6 +133,50 @@ export default {
|
|||
};
|
||||
this.$refs.oTable.reload();
|
||||
},
|
||||
sure() {
|
||||
console.log(this.$refs.tree.getHalfCheckedKeys());
|
||||
console.log(this.$refs.tree.getCheckedKeys());
|
||||
this.$api.role
|
||||
.updatePermissionUpdate({
|
||||
roleId: this.roleId,
|
||||
permissions: [
|
||||
...this.$refs.tree.getHalfCheckedKeys(),
|
||||
...this.$refs.tree.getCheckedKeys(),
|
||||
],
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.dialogTableVisible = false;
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
},
|
||||
handleNodeClick(data) {
|
||||
console.log(data);
|
||||
},
|
||||
filterTreeData(data, permissions) {
|
||||
console.log(data);
|
||||
// return data; //临时性返回所有菜单方便调试
|
||||
return data.reduce((filtered, node) => {
|
||||
// 如果节点的权限在权限数组中
|
||||
if (permissions.includes(node.url)) {
|
||||
// 递归过滤子节点
|
||||
const list = this.filterTreeData(node.list || [], permissions);
|
||||
// 创建一个新的节点,包含过滤后的子节点
|
||||
filtered.push({
|
||||
...node,
|
||||
list,
|
||||
});
|
||||
}
|
||||
return filtered;
|
||||
}, []);
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
dialogTableVisible(e) {
|
||||
if (!e) {
|
||||
this.isShow = false;
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
|
@ -154,14 +208,29 @@ export default {
|
|||
render: ({ row }) => {
|
||||
//权限
|
||||
let permission = () => {
|
||||
this.dialogTableVisible = true;
|
||||
this.roleId = row.id;
|
||||
this.isShow = true;
|
||||
this.$api.role.getRoleList({ roleId: row.id }).then((res) => {
|
||||
let arr = [
|
||||
"operation-management",
|
||||
"datacenter",
|
||||
"presale",
|
||||
"marketing",
|
||||
];
|
||||
this.menuCheckKeys = res.data.data.filter((item) => {
|
||||
return !arr.includes(item);
|
||||
});
|
||||
this.dialogTableVisible = true;
|
||||
});
|
||||
};
|
||||
let updateBanner = () => {
|
||||
this.$refs.addOrUpdate.toggle(row).update();
|
||||
};
|
||||
let deleteBanner = () => {
|
||||
// this.$api.
|
||||
}
|
||||
this.$api.role.deleteRoleList({ id: row.id }).then((res) => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
};
|
||||
let onCancel = () => {};
|
||||
return (
|
||||
<div>
|
||||
|
@ -173,14 +242,6 @@ export default {
|
|||
>
|
||||
菜单权限
|
||||
</el-button>
|
||||
<el-button
|
||||
style="margin-right:10px"
|
||||
size="mini"
|
||||
type="success"
|
||||
onClick={updateBanner}
|
||||
>
|
||||
数据权限
|
||||
</el-button>
|
||||
<el-button
|
||||
style="margin-right:20px"
|
||||
size="mini"
|
||||
|
|
Loading…
Reference in New Issue