From 28e887552e33bf2b5561f517dc3cb5d68c699e29 Mon Sep 17 00:00:00 2001 From: lzhizhao <790086754@qq.com> Date: Thu, 7 Aug 2025 23:34:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AD=89=E7=BA=A7=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/full-routers.js | 158 ++++-- src/utils/index.js | 355 ++++++------- src/views/modules/marketing/level/index.vue | 476 +++++++++++------- .../modules/member-list/member-list/index.vue | 29 ++ .../member-management/level-setting/index.vue | 367 ++++++++++++++ 5 files changed, 993 insertions(+), 392 deletions(-) create mode 100644 src/views/modules/member-list/member-list/index.vue create mode 100644 src/views/modules/member-management/level-setting/index.vue diff --git a/src/router/full-routers.js b/src/router/full-routers.js index 1bbc1ec..1e23ccc 100644 --- a/src/router/full-routers.js +++ b/src/router/full-routers.js @@ -49,7 +49,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -62,7 +62,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -75,7 +75,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -88,7 +88,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -101,7 +101,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -114,7 +114,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -128,7 +128,7 @@ export default { orderNum: 0, open: null, list: [], - hideInMenu: true, + hideInMenu: true }, { menuId: getUUID(), @@ -141,7 +141,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -154,7 +154,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -167,7 +167,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -180,7 +180,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -193,7 +193,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -206,7 +206,7 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -219,9 +219,9 @@ export default { elIcon: "el-icon-user", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -246,7 +246,7 @@ export default { elIcon: "el-icon-user", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -259,7 +259,7 @@ export default { elIcon: "el-icon-data-analysis", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -272,9 +272,9 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -288,7 +288,7 @@ export default { orderNum: 0, open: null, list: [], - hideInMenu: true, + hideInMenu: true }, { menuId: getUUID(), @@ -313,9 +313,9 @@ export default { elIcon: "el-icon-postcard", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -328,7 +328,7 @@ export default { elIcon: "el-icon-document-remove", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -353,7 +353,7 @@ export default { elIcon: "el-icon-postcard", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -366,9 +366,9 @@ export default { elIcon: "el-icon-postcard", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -386,14 +386,14 @@ export default { menuId: getUUID(), parentId: 0, parentName: null, - name: "会员等级管理", + name: "等级设置", url: "marketing/level/index", perms: "", type: 1, elIcon: "el-icon-user", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -406,7 +406,7 @@ export default { elIcon: "el-icon-data-analysis", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -419,7 +419,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -432,7 +432,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -445,9 +445,9 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -472,7 +472,7 @@ export default { elIcon: "el-icon-user", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -485,7 +485,7 @@ export default { elIcon: "el-icon-data-analysis", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -498,7 +498,7 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], + list: [] }, { menuId: getUUID(), @@ -511,10 +511,10 @@ export default { elIcon: "el-icon-shopping-cart-full", orderNum: 0, open: null, - list: [], - }, + list: [] + } ], - hideInMenu: true, + hideInMenu: true }, { menuId: getUUID(), @@ -539,9 +539,9 @@ export default { elIcon: "el-icon-menu", orderNum: 0, open: null, - list: [], - }, - ], + list: [] + } + ] }, { menuId: getUUID(), @@ -566,11 +566,65 @@ export default { elIcon: "el-icon-postcard", orderNum: 0, open: null, - list: [], - }, - ], - }, + list: [] + } + ] + } + // { + // menuId: getUUID(), + // parentId: 0, + // parentName: null, + // name: "会员管理", + // url: "member-management", + // perms: "", + // type: 0, + // elIcon: "el-icon-user-solid", + // orderNum: 0, + // open: null, + // list: [ + // { + // menuId: getUUID(), + // parentId: 0, + // parentName: null, + // name: "等级设置", + // url: "member-management/level-setting/index", + // perms: "", + // type: 1, + // elIcon: "el-icon-star-on", + // orderNum: 0, + // open: null, + // list: [] + // } + // ] + // }, + // { + // menuId: getUUID(), + // parentId: 0, + // parentName: null, + // name: "会员列表", + // url: "member-list", + // perms: "", + // type: 0, + // elIcon: "el-icon-user", + // orderNum: 0, + // open: null, + // list: [ + // { + // menuId: getUUID(), + // parentId: 0, + // parentName: null, + // name: "会员列表", + // url: "member-list/member-list/index", + // perms: "", + // type: 1, + // elIcon: "el-icon-user", + // orderNum: 0, + // open: null, + // list: [] + // } + // ] + // } ], code: 0, - permissions: [], + permissions: [] }; diff --git a/src/utils/index.js b/src/utils/index.js index c394af2..c1279c7 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,14 +1,16 @@ -import Vue from 'vue' -import router from '@/router' -import store from '@/store' +import Vue from "vue"; +import router from "@/router"; +import store from "@/store"; /** * 获取uuid */ export function getUUID() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { - return (c === 'x' ? (Math.random() * 16) | 0 : 'r&0x3' | '0x8').toString(16) - }) + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => { + return (c === "x" ? (Math.random() * 16) | 0 : "r&0x3" | "0x8").toString( + 16 + ); + }); } /** @@ -17,9 +19,9 @@ export function getUUID() { */ export function isAuth(key) { return ( - JSON.parse(sessionStorage.getItem('permissions') || '[]').indexOf(key) !== + JSON.parse(sessionStorage.getItem("permissions") || "[]").indexOf(key) !== -1 || false - ) + ); } /** @@ -28,87 +30,87 @@ export function isAuth(key) { * @param {*} id * @param {*} pid */ -export function treeDataTranslate(data, id = 'id', pid = 'parentId') { - var res = [] - var temp = {} +export function treeDataTranslate(data, id = "id", pid = "parentId") { + var res = []; + var temp = {}; for (var i = 0; i < data.length; i++) { - temp[data[i][id]] = data[i] + temp[data[i][id]] = data[i]; } for (var k = 0; k < data.length; k++) { if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) { - if (!temp[data[k][pid]]['children']) { - temp[data[k][pid]]['children'] = [] + if (!temp[data[k][pid]]["children"]) { + temp[data[k][pid]]["children"] = []; } - if (!temp[data[k][pid]]['_level']) { - temp[data[k][pid]]['_level'] = 1 + if (!temp[data[k][pid]]["_level"]) { + temp[data[k][pid]]["_level"] = 1; } - data[k]['_level'] = temp[data[k][pid]]._level + 1 - temp[data[k][pid]]['children'].push(data[k]) + data[k]["_level"] = temp[data[k][pid]]._level + 1; + temp[data[k][pid]]["children"].push(data[k]); } else { - res.push(data[k]) + res.push(data[k]); } } - return res + return res; } /** * 清除登录信息 */ export function clearLoginInfo() { - Vue.cookie.delete('token') - store.commit('resetStore') - sessionStorage.removeItem('password') - sessionStorage.removeItem('role') - sessionStorage.removeItem('userInfo') - router.options.isAddDynamicMenuRoutes = false + Vue.cookie.delete("token"); + store.commit("resetStore"); + sessionStorage.removeItem("password"); + sessionStorage.removeItem("role"); + sessionStorage.removeItem("userInfo"); + router.options.isAddDynamicMenuRoutes = false; } // 深拷贝对象 export function deepClone(obj) { - const _toString = Object.prototype.toString + const _toString = Object.prototype.toString; // null, undefined, non-object, function - if (!obj || typeof obj !== 'object') { - return obj + if (!obj || typeof obj !== "object") { + return obj; } // DOM Node - if (obj.nodeType && 'cloneNode' in obj) { - return obj.cloneNode(true) + if (obj.nodeType && "cloneNode" in obj) { + return obj.cloneNode(true); } // Date - if (_toString.call(obj) === '[object Date]') { - return new Date(obj.getTime()) + if (_toString.call(obj) === "[object Date]") { + return new Date(obj.getTime()); } // RegExp - if (_toString.call(obj) === '[object RegExp]') { - const flags = [] + if (_toString.call(obj) === "[object RegExp]") { + const flags = []; if (obj.global) { - flags.push('g') + flags.push("g"); } if (obj.multiline) { - flags.push('m') + flags.push("m"); } if (obj.ignoreCase) { - flags.push('i') + flags.push("i"); } - return new RegExp(obj.source, flags.join('')) + return new RegExp(obj.source, flags.join("")); } const result = Array.isArray(obj) ? [] : obj.constructor ? new obj.constructor() - : {} + : {}; for (const key in obj) { - result[key] = deepClone(obj[key]) + result[key] = deepClone(obj[key]); } - return result + return result; } /** @@ -117,22 +119,22 @@ export function deepClone(obj) { * @param {*} max */ export function getDay(day) { - let today = new Date() - let targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day - today.setTime(targetday_milliseconds) //注意,这行是关键代码 - let tYear = today.getFullYear() - let tMonth = today.getMonth() - let tDate = today.getDate() - tMonth = doHandleMonth(tMonth + 1) - tDate = doHandleMonth(tDate) - return tYear + '-' + tMonth + '-' + tDate + let today = new Date(); + let targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day; + today.setTime(targetday_milliseconds); //注意,这行是关键代码 + let tYear = today.getFullYear(); + let tMonth = today.getMonth(); + let tDate = today.getDate(); + tMonth = doHandleMonth(tMonth + 1); + tDate = doHandleMonth(tDate); + return tYear + "-" + tMonth + "-" + tDate; } function doHandleMonth(month) { - let m = month + let m = month; if (month.toString().length === 1) { - m = '0' + month + m = "0" + month; } - return m + return m; } /** * 权限 @@ -140,142 +142,151 @@ function doHandleMonth(month) { * @param {*} max */ export function getMenu(role, manageMode) { - if (role == 'ROLE_MANAGER') { + if (role == "ROLE_MANAGER") { return [ - 'operation-management', - 'operation-management/commodity/index', - 'operation-management/order/index', - 'operation-management/banner/index', - 'operation-management/notice/index', - 'operation-management/paynotice/index', - 'operation-management/role/index', - 'datacenter', - 'datacenter/customer-analysis/index', - 'datacenter/product-analysis/index', - 'datacenter/order-analysis/index', - 'coupon/index', - 'presale', - 'presale/products/index', - 'presale/order/index', - 'marketing', - 'marketing/level/index', - 'marketing/user/index', - 'marketing/points-setting/index', - 'marketing/points-mall/index', - 'marketing/points-order/index', - 'local-course/resources', - 'wallet/index', - 'ogistics-fare', - 'logistics-fare/logistics-template/index', - 'bank-card/index', - 'operation-management/total-order/index', - 'operation-management/accountNumber/index' - ] - } else if (role == 'ROLE_MERCHANT') { + "operation-management", + "operation-management/commodity/index", + "operation-management/order/index", + "operation-management/banner/index", + "operation-management/notice/index", + "operation-management/paynotice/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "coupon/index", + "presale", + "presale/products/index", + "presale/order/index", + "marketing", + "marketing/level/index", + "marketing/user/index", + "marketing/points-setting/index", + "marketing/points-mall/index", + "marketing/points-order/index", + // "member-management", + // "member-management/level-setting/index", + // "member-list", + // "member-list/member-list/index", + "local-course/resources", + "wallet/index", + "ogistics-fare", + "logistics-fare/logistics-template/index", + "bank-card/index", + "operation-management/total-order/index", + "operation-management/accountNumber/index" + ]; + } else if (role == "ROLE_MERCHANT") { if (manageMode === 1) { return [ - 'operation-management', - 'operation-management/commodity/index', - 'operation-management/order/index', - 'operation-management/banner/index', - 'operation-management/notice/index', - 'operation-management/paynotice/index', - 'operation-management/role/index', - 'datacenter', - 'datacenter/customer-analysis/index', - 'datacenter/product-analysis/index', - 'datacenter/order-analysis/index', - 'coupon/index', - 'presale', - 'presale/products/index', - 'presale/order/index', - 'marketing', - // 'marketing/level/index', - // 'marketing/user/index', - // 'marketing/points-setting/index', - 'marketing/points-mall/index', - 'marketing/points-order/index', - 'local-course/resources', - 'wallet/index', - 'ogistics-fare', - 'logistics-fare/logistics-template/index', - 'bank-card/index', - 'operation-management/total-order/index', - 'operation-management/accountNumber/index' - ] + "operation-management", + "operation-management/commodity/index", + "operation-management/order/index", + "operation-management/banner/index", + "operation-management/notice/index", + "operation-management/paynotice/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "coupon/index", + "presale", + "presale/products/index", + "presale/order/index", + "marketing", + "marketing/points-mall/index", + "marketing/points-order/index", + // "member-management", + // "member-management/level-setting/index", + // "member-list", + // "member-list/member-list/index", + "local-course/resources", + "wallet/index", + "ogistics-fare", + "logistics-fare/logistics-template/index", + "bank-card/index", + "operation-management/total-order/index", + "operation-management/accountNumber/index" + ]; } else { return [ - 'operation-management', - 'operation-management/commodity/index', - 'operation-management/order/index', - 'operation-management/banner/index', - 'operation-management/notice/index', - 'operation-management/paynotice/index', - 'operation-management/role/index', - 'datacenter', - 'datacenter/customer-analysis/index', - 'datacenter/product-analysis/index', - 'datacenter/order-analysis/index', - 'coupon/index', - 'presale', - 'presale/products/index', - 'presale/order/index', - 'marketing', - 'marketing/level/index', - 'marketing/user/index', - 'marketing/points-setting/index', - 'marketing/points-mall/index', - 'marketing/points-order/index', - 'local-course/resources', - 'wallet/index', - 'ogistics-fare', - 'logistics-fare/logistics-template/index', - 'bank-card/index', - 'operation-management/total-order/index', - 'operation-management/accountNumber/index' - ] + "operation-management", + "operation-management/commodity/index", + "operation-management/order/index", + "operation-management/banner/index", + "operation-management/notice/index", + "operation-management/paynotice/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "coupon/index", + "presale", + "presale/products/index", + "presale/order/index", + "marketing", + "marketing/level/index", + "marketing/user/index", + "marketing/points-setting/index", + "marketing/points-mall/index", + "marketing/points-order/index", + // "member-management", + // "member-management/level-setting/index", + // "member-list", + // "member-list/member-list/index", + "local-course/resources", + "wallet/index", + "ogistics-fare", + "logistics-fare/logistics-template/index", + "bank-card/index", + "operation-management/total-order/index", + "operation-management/accountNumber/index" + ]; } - } else if (role == 'ROLE_BRAND_MANAGER') { + } else if (role == "ROLE_BRAND_MANAGER") { return [ - 'operation-management', + "operation-management", // "operation-management/shop-list/index", - 'operation-management/brand-market/index', - 'operation-management/brand-store/index', - 'operation-management/distributor/index', + "operation-management/brand-market/index", + "operation-management/brand-store/index", + "operation-management/distributor/index", // "operation-management/order/index", - 'operation-management/brand-order/index', + "operation-management/brand-order/index", // "operation-management/role/index", - 'datacenter', - 'datacenter/customer-analysis/index', - 'datacenter/product-analysis/index', - 'datacenter/order-analysis/index', - 'brand', - 'brand/config/index', - 'local-course/resources', - 'wallet/index' + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "brand", + "brand/config/index", + "local-course/resources", + "wallet/index" // "operation-management/accountNumber/index", - ] - } else if (role == 'ROLE_AGENT') { + ]; + } else if (role == "ROLE_AGENT") { return [ - 'operation-management', - 'operation-management/shop-list/index', - 'operation-management/market-list/index', + "operation-management", + "operation-management/shop-list/index", + "operation-management/market-list/index", // "operation-management/order/index", - 'operation-management/brand-order/index', + "operation-management/brand-order/index", // "operation-management/role/index", - 'datacenter', - 'datacenter/customer-analysis/index', - 'datacenter/product-analysis/index', - 'datacenter/order-analysis/index', - 'local-course/resources', - 'wallet/index' + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "local-course/resources", + "wallet/index" // "operation-management/accountNumber/index", - ] + ]; } else { - return null + return null; } } export function isNumberStr(str) { - return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) + return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str); } diff --git a/src/views/modules/marketing/level/index.vue b/src/views/modules/marketing/level/index.vue index 71642e3..270c227 100644 --- a/src/views/modules/marketing/level/index.vue +++ b/src/views/modules/marketing/level/index.vue @@ -1,202 +1,342 @@ - \ No newline at end of file + diff --git a/src/views/modules/member-list/member-list/index.vue b/src/views/modules/member-list/member-list/index.vue new file mode 100644 index 0000000..1b8c9f0 --- /dev/null +++ b/src/views/modules/member-list/member-list/index.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/views/modules/member-management/level-setting/index.vue b/src/views/modules/member-management/level-setting/index.vue new file mode 100644 index 0000000..cbd19ab --- /dev/null +++ b/src/views/modules/member-management/level-setting/index.vue @@ -0,0 +1,367 @@ + + + + +