This commit is contained in:
KangKang0928 2025-01-20 17:44:08 +08:00
commit d0c77a1131
8 changed files with 328 additions and 157 deletions

52
src/api/modules/role.js Normal file
View File

@ -0,0 +1,52 @@
import $http from "@/utils/httpRequest.js";
export const role = {
//角色列表
roleList: (data) => {
return $http.request({
url: `/merchant-api/role/list`,
method: "get",
params: data,
});
},
//新增角色列表
addRoleList: (data) => {
return $http.request({
url: `/merchant-api/role/add`,
method: "post",
data,
});
},
//编辑角色列表
updateRoleList: (data) => {
return $http.request({
url: `/merchant-api/role/update`,
method: "post",
data,
});
},
//删除角色列表
deleteRoleList: (data) => {
return $http.request({
url: `/merchant-api/role/delete`,
method: "post",
data,
});
},
//更新角色权限
updatePermissionUpdate: (data) => {
return $http.request({
url: `/merchant-api/role/permission/update`,
method: "put",
data,
});
},
//获取角色权限列表
getRoleList: (data) => {
return $http.request({
url: `/merchant-api/role/permission/list`,
method: "get",
params: data,
});
},
};

View File

@ -102,8 +102,12 @@ router.beforeEach((to, from, next) => {
}); });
$api $api
.getUserInfo() .getUserInfo()
.then(({ data }) => { .then(async ({ data }) => {
let permissionsData = getMenu(data.data.role); 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) => { const filterTreeData = (data, permissions) => {
console.log(data); console.log(data);
@ -167,7 +171,7 @@ router.beforeEach((to, from, next) => {
// FULL_ROUTERS.menuList, // FULL_ROUTERS.menuList,
// data.data.permissions // data.data.permissions
// ); // );
console.log(permissionsData); console.log(permissionsData, "11111111111111111111111111111");
let _menu = filterTreeData(FULL_ROUTERS.menuList, permissionsData); let _menu = filterTreeData(FULL_ROUTERS.menuList, permissionsData);
fnAddDynamicMenuRoutes(_menu); fnAddDynamicMenuRoutes(_menu);

View File

@ -180,7 +180,7 @@ export function getMenu(role) {
"operation-management/brand-store/index", "operation-management/brand-store/index",
// "operation-management/order/index", // "operation-management/order/index",
"operation-management/brand-order/index", "operation-management/brand-order/index",
"operation-management/role/index", // "operation-management/role/index",
"datacenter", "datacenter",
"datacenter/customer-analysis/index", "datacenter/customer-analysis/index",
"datacenter/product-analysis/index", "datacenter/product-analysis/index",
@ -189,7 +189,7 @@ export function getMenu(role) {
"brand/config/index", "brand/config/index",
"local-course/resources", "local-course/resources",
"wallet/index", "wallet/index",
"operation-management/accountNumber/index", // "operation-management/accountNumber/index",
]; ];
} else if (role == "ROLE_AGENT") { } else if (role == "ROLE_AGENT") {
return [ return [
@ -198,15 +198,17 @@ export function getMenu(role) {
"operation-management/market-list/index", "operation-management/market-list/index",
// "operation-management/order/index", // "operation-management/order/index",
"operation-management/brand-order/index", "operation-management/brand-order/index",
"operation-management/role/index", // "operation-management/role/index",
"datacenter", "datacenter",
"datacenter/customer-analysis/index", "datacenter/customer-analysis/index",
"datacenter/product-analysis/index", "datacenter/product-analysis/index",
"datacenter/order-analysis/index", "datacenter/order-analysis/index",
"local-course/resources", "local-course/resources",
"wallet/index", "wallet/index",
"operation-management/accountNumber/index", // "operation-management/accountNumber/index",
]; ];
} else {
return null;
} }
} }

View File

@ -70,6 +70,7 @@ export default {
}, },
computed: { computed: {
modalCols() { modalCols() {
if (this.isAdd) {
return [ return [
{ {
label: "姓名", label: "姓名",
@ -104,7 +105,82 @@ export default {
trigger: "blur", 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() { modalHandles() {
return [ return [
@ -134,7 +210,9 @@ export default {
this.$emit("queryList"); this.$emit("queryList");
}); });
} else { } else {
this.$api.mer_admin.noticeUpdate(this.modalData).then((res) => { this.$api.accountNumber
.updateAccount(this.modalData)
.then((res) => {
this.toggle(); this.toggle();
this.$emit("queryList"); this.$emit("queryList");
}); });
@ -144,7 +222,18 @@ export default {
]; ];
}, },
}, },
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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -68,7 +68,9 @@
<div class="stat-right"> <div class="stat-right">
<div class="stat-title">总商品数量</div> <div class="stat-title">总商品数量</div>
<div class="stat-value"> <div class="stat-value">
<span style="font-size: 20px">{{overview.productCount}}</span> <span style="font-size: 20px">{{
overview.productCount
}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -77,7 +79,9 @@
<div class="stat-right"> <div class="stat-right">
<div class="stat-title">上架中商品数量</div> <div class="stat-title">上架中商品数量</div>
<div class="stat-value"> <div class="stat-value">
<span style="font-size: 20px">{{overview.productOnSaleCount}}</span> <span style="font-size: 20px">{{
overview.productOnSaleCount
}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -86,7 +90,9 @@
<div class="stat-right"> <div class="stat-right">
<div class="stat-title">折扣商品数量</div> <div class="stat-title">折扣商品数量</div>
<div class="stat-value"> <div class="stat-value">
<span style="font-size: 20px">{{overview.productDiscountCount}}</span> <span style="font-size: 20px">{{
overview.productDiscountCount
}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -95,7 +101,9 @@
<div class="stat-right"> <div class="stat-right">
<div class="stat-title">仓库中商品数量</div> <div class="stat-title">仓库中商品数量</div>
<div class="stat-value"> <div class="stat-value">
<span style="font-size: 20px">{{overview.productWarehouseCount}}</span> <span style="font-size: 20px">{{
overview.productWarehouseCount
}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -166,7 +174,7 @@ export default {
}, },
productFilterType: "SALE", productFilterType: "SALE",
selectList: [], selectList: [],
overview:{} overview: {},
}; };
}, },
created() { created() {
@ -241,7 +249,7 @@ export default {
this.$refs.oTable.complete(false); this.$refs.oTable.complete(false);
}); });
this.$api.mer_admin.getProductOverview(this.formInline).then((res) => { this.$api.mer_admin.getProductOverview(this.formInline).then((res) => {
console.log(res,'概况'); console.log(res, "概况");
this.overview = res.data.data; this.overview = res.data.data;
}); });
}, },
@ -387,15 +395,13 @@ export default {
}, },
}, },
{ {
title: "操作", title: "操作 (提示:下架后可进行操作)",
fixed: "right", fixed: "right",
type: "jsx", type: "jsx",
align: "center", align: "center",
width: "340px", width: "340px",
render: ({ row }) => { render: ({ row }) => {
let edit = () => { let edit = () => {
console.log(row);
this.$refs.addOrUpdate.toggle(row).update(); this.$refs.addOrUpdate.toggle(row).update();
}; };
let priceAdjustment = () => { let priceAdjustment = () => {

View File

@ -73,9 +73,10 @@ export default {
}; };
}, },
init(row) { init(row) {
console.log(row);
this.ProductData = { this.ProductData = {
merchantId: JSON.parse(sessionStorage.getItem("userInfo")).merchantId, merchantId: JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
shopId: JSON.parse(sessionStorage.getItem("userInfo")).shopId, shopId: row.shopId,
productIds: [row.id], productIds: [row.id],
type: "DISCOUNT", type: "DISCOUNT",
}; };

View File

@ -33,12 +33,16 @@
</template> </template>
</obj-table-plus> </obj-table-plus>
</div> </div>
<!-- 轮播图 --> <!-- 新增角色 -->
<addOrUpdate <addOrUpdate
ref="addOrUpdate" ref="addOrUpdate"
@queryList="$refs.oTable.reload()" @queryList="$refs.oTable.reload()"
></addOrUpdate> ></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 ref="form" :model="form" label-width="120px">
<el-form-item label="角色权限:"> <el-form-item label="角色权限:">
<el-tree <el-tree
@ -46,16 +50,17 @@
ref="tree" ref="tree"
:data="data" :data="data"
show-checkbox show-checkbox
node-key="id" node-key="url"
:default-expand-all="true" :default-expand-all="true"
:default-checked-keys="menuCheckKeys" :default-checked-keys="menuCheckKeys"
:props="defaultProps" :props="defaultProps"
@node-click="handleNodeClick"
> >
</el-tree> </el-tree>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <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> <el-button @click="dialogTableVisible = false">取消</el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -63,6 +68,7 @@
</template> </template>
<script> <script>
import { getMenu } from "@/utils";
import addOrUpdate from "./popup/add-or-update.vue"; import addOrUpdate from "./popup/add-or-update.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
import FULL_ROUTERS from "@/router/full-routers"; import FULL_ROUTERS from "@/router/full-routers";
@ -90,9 +96,11 @@ export default {
defaultProps: { defaultProps: {
children: "list", children: "list",
label: "name", label: "name",
value: "menuId", value: "url",
}, },
menuCheckKeys: [], menuCheckKeys: [],
roleId: "",
isShow: false,
}; };
}, },
methods: { methods: {
@ -100,72 +108,24 @@ export default {
this.$refs.addOrUpdate.toggle().add(this.formInline); this.$refs.addOrUpdate.toggle().add(this.formInline);
}, },
queryList(pageNo, pageSize) { queryList(pageNo, pageSize) {
console.log(FULL_ROUTERS); let permissionsData = getMenu(
this.data = FULL_ROUTERS.menuList; JSON.parse(sessionStorage.getItem("userInfo")).role
);
this.data = this.filterTreeData(FULL_ROUTERS.menuList, permissionsData);
setTimeout(() => { this.$api.role
let data = [ .roleList({
{ ownerId: JSON.parse(sessionStorage.getItem("userInfo")).managerId
col: "market_id", ? JSON.parse(sessionStorage.getItem("userInfo")).managerId
id: null, : JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
name: "市场经营者", })
operator: "eq", .then((res) => {
role: "ROLE_MANAGER", console.log(res);
}, this.$refs.oTable.complete(res.data.data, Number(res.data.total));
{ })
col: null, .catch((err) => {
id: null, this.$refs.oTable.complete(false);
name: "商户", });
operator: null,
role: "ROLE_MERCHANT",
},
{
col: null,
id: null,
name: "专员",
operator: null,
role: "ROLE_ASSISTANT",
},
{
col: null,
id: null,
name: "代理商",
operator: null,
role: "ROLE_AGENT",
},
{
col: "MarketId",
id: null,
name: "老师",
operator: null,
role: "123",
},
{
col: "",
id: null,
name: "测试",
operator: "",
role: "ROLE_cheshi",
},
];
this.$refs.oTable.complete(data, Number(5));
}, 500);
// this.$api.mer_admin
// .noticePage({
// pageNumber: pageNo,
// pageSize: pageSize,
// ...this.formInline,
// })
// .then((res) => {
// console.log(res);
// this.$refs.oTable.complete(
// res.data.data.data,
// Number(res.data.data.total)
// );
// })
// .catch((err) => {
// this.$refs.oTable.complete(false);
// });
}, },
Reset() { Reset() {
this.formInline = { this.formInline = {
@ -173,6 +133,50 @@ export default {
}; };
this.$refs.oTable.reload(); 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: { computed: {
tableCols() { tableCols() {
@ -204,12 +208,29 @@ export default {
render: ({ row }) => { render: ({ row }) => {
// //
let permission = () => { let permission = () => {
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; this.dialogTableVisible = true;
});
}; };
let updateBanner = () => { let updateBanner = () => {
this.$refs.addOrUpdate.toggle(row).update(); this.$refs.addOrUpdate.toggle(row).update();
}; };
let deleteBanner = () => {}; let deleteBanner = () => {
this.$api.role.deleteRoleList({ id: row.id }).then((res) => {
this.$refs.oTable.reload();
});
};
let onCancel = () => {}; let onCancel = () => {};
return ( return (
<div> <div>
@ -221,14 +242,6 @@ export default {
> >
菜单权限 菜单权限
</el-button> </el-button>
<el-button
style="margin-right:10px"
size="mini"
type="success"
onClick={updateBanner}
>
数据权限
</el-button>
<el-button <el-button
style="margin-right:20px" style="margin-right:20px"
size="mini" size="mini"

View File

@ -56,14 +56,15 @@ export default {
add: (row) => { add: (row) => {
console.log(row); console.log(row);
this.modalData = { this.modalData = {
targetId: row.targetId, roleCode: "",
title: "", name: "",
position: row.position, col: "",
type: 0, operator: "",
status: true, remark: "",
app: 1, ownerId: JSON.parse(sessionStorage.getItem("userInfo")).managerId
? JSON.parse(sessionStorage.getItem("userInfo")).managerId
: JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
}; };
this.fileList = [];
this.modalConfig.title = "添加角色"; this.modalConfig.title = "添加角色";
this.isAdd = true; this.isAdd = true;
}, },
@ -74,6 +75,8 @@ export default {
}; };
}, },
init(row) { init(row) {
console.log(row);
this.modalData = row; this.modalData = row;
}, },
}, },
@ -115,7 +118,7 @@ export default {
}, },
{ {
label: "数据范围", label: "数据范围",
prop: "range", prop: "operator",
maxlength: "30", maxlength: "30",
rules: { rules: {
required: true, required: true,
@ -126,7 +129,7 @@ export default {
render: () => { render: () => {
return ( return (
<el-select <el-select
v-model={this.modalData.range} v-model={this.modalData.operator}
placeholder="请选择销售单位" placeholder="请选择销售单位"
> >
{[ {[
@ -158,14 +161,8 @@ export default {
label: "备注", label: "备注",
prop: "remark", prop: "remark",
type: "Textarea", type: "Textarea",
required: true,
maxlength: "120", maxlength: "120",
rows: "5", rows: "5",
rules: {
required: true,
message: "请输入备注内容",
trigger: "blur",
},
}, },
]; ];
}, },
@ -183,18 +180,25 @@ export default {
submit: true, submit: true,
handle: () => { handle: () => {
console.log(this.modalData); console.log(this.modalData);
if (this.isAdd) {
this.$api.role.addRoleList(this.modalData).then((res) => {
this.toggle(); this.toggle();
// if (this.isAdd) { this.$emit("queryList");
// this.$api.mer_admin.noticeAdd(this.modalData).then((res) => { });
// this.toggle(); } else {
// this.$emit("queryList"); this.$api.role
// }); .updateRoleList({
// } else { ...this.modalData,
// this.$api.mer_admin.noticeUpdate(this.modalData).then((res) => { ownerId: JSON.parse(sessionStorage.getItem("userInfo"))
// this.toggle(); .managerId
// this.$emit("queryList"); ? JSON.parse(sessionStorage.getItem("userInfo")).managerId
// }); : JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
// } })
.then((res) => {
this.toggle();
this.$emit("queryList");
});
}
}, },
}, },
]; ];