From 562a766257c5938c5c62c80299fc648df4c24dfb Mon Sep 17 00:00:00 2001 From: lzhizhao <790086754@qq.com> Date: Fri, 8 Aug 2025 23:14:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=9A=E5=91=98=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/full-routers.js | 2 +- src/router/index.js | 6 + src/utils/httpRequest.js | 106 +-- src/views/modules/marketing-level/detail.vue | 1 - src/views/modules/marketing/user/index.vue | 294 ++++---- .../marketing/user/popup/growth-detail.vue | 153 +++++ .../marketing/user/popup/points-detail.vue | 168 +++++ .../marketing/user/popup/view-details.vue | 644 ++++++++++++++++-- src/views/test-member-detail.vue | 160 +++++ 9 files changed, 1244 insertions(+), 290 deletions(-) create mode 100644 src/views/modules/marketing/user/popup/growth-detail.vue create mode 100644 src/views/modules/marketing/user/popup/points-detail.vue create mode 100644 src/views/test-member-detail.vue diff --git a/src/router/full-routers.js b/src/router/full-routers.js index 1e7aeb1..27a4f9e 100644 --- a/src/router/full-routers.js +++ b/src/router/full-routers.js @@ -414,7 +414,7 @@ export default { menuId: getUUID(), parentId: 0, parentName: null, - name: "用户管理", + name: "会员列表", url: "marketing/user/index", perms: "", type: 1, diff --git a/src/router/index.js b/src/router/index.js index 38b80a2..518cd77 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -32,6 +32,12 @@ const globalRoutes = [ component: _import("common/login"), name: "login", meta: { title: "登录" } + }, + { + path: "/test-member-detail", + component: _import("test-member-detail"), + name: "test-member-detail", + meta: { title: "会员详情样式测试" } } //test用,会员管理 ]; diff --git a/src/utils/httpRequest.js b/src/utils/httpRequest.js index 58e026c..a3243fc 100644 --- a/src/utils/httpRequest.js +++ b/src/utils/httpRequest.js @@ -6,34 +6,34 @@ * @Description: * @FilePath: \background-front-end\src\utils\httpRequest.js */ -import Vue from 'vue' -import axios from 'axios' -import router from '@/router' -import qs from 'qs' -import merge from 'lodash/merge' -import { Message } from 'element-ui' -import { clearLoginInfo } from '@/utils' -import commonUtil from './common' -import des from './des.js' +import Vue from "vue"; +import axios from "axios"; +import router from "@/router"; +import qs from "qs"; +import merge from "lodash/merge"; +import { Message } from "element-ui"; +import { clearLoginInfo } from "@/utils"; +import commonUtil from "./common"; +import des from "./des.js"; const http = axios.create({ baseURL: - process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY - ? '/proxyApi/' + process.env.NODE_ENV !== "production" && process.env.OPEN_PROXY + ? "/proxyApi/" : window.SITE_CONFIG.baseUrl, timeout: 1000 * 30, withCredentials: true, headers: { - 'Content-Type': 'application/json; charset=utf-8' + "Content-Type": "application/json; charset=utf-8" } -}) +}); /** * 请求拦截 */ http.interceptors.request.use( config => { - config.headers['token'] = `Bearer ${Vue.cookie.get('token')}` // 请求头带上token + config.headers["token"] = `Bearer ${Vue.cookie.get("token")}`; // 请求头带上token // 针对post请求加密 // if (config.method.toLowerCase() === "post" && process.env.NODE_ENV === "production" ) { // //如果已经转成字符串了,就不用再转了 @@ -47,16 +47,16 @@ http.interceptors.request.use( // ); // } // } - if (process.env.NODE_ENV !== 'production') { - console.log(`【请求】${config.url}`, config) + if (process.env.NODE_ENV !== "production") { + console.log(`【请求】${config.url}`, config); } - return config + return config; }, error => { - return Promise.reject(error) + return Promise.reject(error); } -) +); // /** // * 响应拦截 @@ -147,56 +147,56 @@ http.interceptors.request.use( http.interceptors.response.use( response => { //开发环境下才可以打印日志 - if (process.env.NODE_ENV !== 'production') { - console.log(`【响应】${response.config.url}`, response) + if (process.env.NODE_ENV !== "production") { + console.log(`【响应】${response.config.url}`, response); } if (response.data && response.data.code == 401) { // 401, 权限未认证 - clearLoginInfo() - router.push({ name: 'login' }) - return Promise.resolve(response) + clearLoginInfo(); + router.push({ name: "login" }); + return Promise.resolve(response); } else if (response.data && response.data.code != 200) { // Message.closeAll(); Message({ message: response.data.msg || response.data.message, - type: 'error' - }) - return Promise.reject(response) + type: "error" + }); + return Promise.reject(response); } else { //请求成功的情况 //如果是开发模式下,都要弹出 - if (process.env.NODE_ENV !== 'production') { + if (process.env.NODE_ENV !== "production") { // Message.closeAll(); if (!response.config.hidemsg) { - Message({ - message: response.data.msg || response.data.message, - type: 'success' - }) + // Message({ + // message: response.data.msg || response.data.message, + // type: 'success' + // }) } } // 生产环境下限制性弹出 else { if ( - response.data.msg != 'success' && - response.data.msg != '查询成功' && - Object.prototype.toString.call(response.data) === '[object Object]' + response.data.msg != "success" && + response.data.msg != "查询成功" && + Object.prototype.toString.call(response.data) === "[object Object]" ) { // Message.closeAll(); if (!response.config.hidemsg) { Message({ message: response.data.msg || response.data.message, - type: 'success' - }) + type: "success" + }); } } } - return Promise.resolve(response) + return Promise.resolve(response); } }, error => { - return Promise.reject(error) + return Promise.reject(error); } -) +); /** * 请求地址处理 @@ -205,11 +205,11 @@ http.interceptors.response.use( http.adornUrl = actionName => { // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截! return ( - (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY - ? '/proxyApi/' + (process.env.NODE_ENV !== "production" && process.env.OPEN_PROXY + ? "/proxyApi/" : window.SITE_CONFIG.baseUrl) + actionName - ) -} + ); +}; /** * get请求参数处理 @@ -219,9 +219,9 @@ http.adornUrl = actionName => { http.adornParams = (params = {}, openDefultParams = true) => { var defaults = { t: new Date().getTime() - } - return openDefultParams ? merge(defaults, params) : params -} + }; + return openDefultParams ? merge(defaults, params) : params; +}; /** * post请求数据处理 @@ -231,12 +231,12 @@ http.adornParams = (params = {}, openDefultParams = true) => { * json: 'application/json; charset=utf-8' * form: 'application/x-www-form-urlencoded; charset=utf-8' */ -http.adornData = (data = {}, openDefultdata = true, contentType = 'json') => { +http.adornData = (data = {}, openDefultdata = true, contentType = "json") => { var defaults = { t: new Date().getTime() - } - data = openDefultdata ? merge(defaults, data) : data - return contentType === 'json' ? JSON.stringify(data) : qs.stringify(data) -} + }; + data = openDefultdata ? merge(defaults, data) : data; + return contentType === "json" ? JSON.stringify(data) : qs.stringify(data); +}; -export default http +export default http; diff --git a/src/views/modules/marketing-level/detail.vue b/src/views/modules/marketing-level/detail.vue index d751451..0c95e13 100644 --- a/src/views/modules/marketing-level/detail.vue +++ b/src/views/modules/marketing-level/detail.vue @@ -951,7 +951,6 @@ export default { \ No newline at end of file + diff --git a/src/views/modules/marketing/user/popup/growth-detail.vue b/src/views/modules/marketing/user/popup/growth-detail.vue new file mode 100644 index 0000000..ee10b80 --- /dev/null +++ b/src/views/modules/marketing/user/popup/growth-detail.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/modules/marketing/user/popup/points-detail.vue b/src/views/modules/marketing/user/popup/points-detail.vue new file mode 100644 index 0000000..7a157ec --- /dev/null +++ b/src/views/modules/marketing/user/popup/points-detail.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/modules/marketing/user/popup/view-details.vue b/src/views/modules/marketing/user/popup/view-details.vue index 5648073..da34112 100644 --- a/src/views/modules/marketing/user/popup/view-details.vue +++ b/src/views/modules/marketing/user/popup/view-details.vue @@ -9,55 +9,285 @@ :modalHandles="modalHandles" > + + + + + + \ No newline at end of file +.user-info-header { + border-bottom: 1px solid #ebeef5; + display: flex; + justify-content: space-between; + align-items: flex-start; +} + +.user-basic-info { + flex: 1; +} + +.info-row { + display: flex; + margin-bottom: 15px; +} + +.info-item { + margin-right: 40px; +} + +.label { + color: #606266; + font-weight: 500; +} + +.value { + color: #303133; + margin-left: 5px; +} + +.user-stats { + display: flex; + gap: 20px; +} + +.stat-card { + text-align: center; + padding: 15px 20px; + border: 1px solid #ebeef5; + border-radius: 4px; + min-width: 100px; +} + +.stat-number { + font-size: 24px; + font-weight: bold; + color: #409eff; + margin-bottom: 5px; +} + +.stat-label { + font-size: 12px; + color: #909399; +} + diff --git a/src/views/test-member-detail.vue b/src/views/test-member-detail.vue new file mode 100644 index 0000000..3b9be57 --- /dev/null +++ b/src/views/test-member-detail.vue @@ -0,0 +1,160 @@ + + + + +