From 2c1ab31f7314775cf0ee3624a0f4ed637bf31f10 Mon Sep 17 00:00:00 2001 From: qsh <> Date: Wed, 21 May 2025 18:49:14 +0800 Subject: [PATCH] sc --- .env.base | 4 +- src/api/customer/customer.js | 3 +- src/api/xjapplet/discount.js | 48 +++ src/api/xjapplet/resell.js | 32 ++ src/api/xjapplet/vip.js | 49 +++ src/api/xjapplet/vipdatabase.js | 67 ++++ src/api/xjapplet/xjdatabase.js | 48 +++ src/config/axios/service.ts | 2 +- src/permission.js | 18 +- src/router/modules/remaining.ts | 2 +- src/store/modules/dict.ts | 2 +- src/utils/auth.ts | 25 +- src/views/Customer/AppletUser/index.vue | 118 ++++++++ src/views/Customer/ExamRecord/index.vue | 2 +- src/views/Customer/Resell/index.vue | 194 ++++++++++++ .../Customer/Vip/components/Recharge.vue | 157 ++++++++++ .../Customer/Vip/components/UserDiscount.vue | 144 +++++++++ .../Customer/Vip/components/VipDiscount.vue | 286 ++++++++++++++++++ src/views/Customer/Vip/components/VipType.vue | 213 +++++++++++++ src/views/Customer/Vip/components/VipUser.vue | 155 ++++++++++ src/views/Customer/Vip/index.vue | 42 +++ 21 files changed, 1594 insertions(+), 17 deletions(-) create mode 100644 src/api/xjapplet/discount.js create mode 100644 src/api/xjapplet/resell.js create mode 100644 src/api/xjapplet/vip.js create mode 100644 src/api/xjapplet/vipdatabase.js create mode 100644 src/api/xjapplet/xjdatabase.js create mode 100644 src/views/Customer/AppletUser/index.vue create mode 100644 src/views/Customer/Resell/index.vue create mode 100644 src/views/Customer/Vip/components/Recharge.vue create mode 100644 src/views/Customer/Vip/components/UserDiscount.vue create mode 100644 src/views/Customer/Vip/components/VipDiscount.vue create mode 100644 src/views/Customer/Vip/components/VipType.vue create mode 100644 src/views/Customer/Vip/components/VipUser.vue create mode 100644 src/views/Customer/Vip/index.vue diff --git a/.env.base b/.env.base index 0552a5a..5a22736 100644 --- a/.env.base +++ b/.env.base @@ -6,9 +6,9 @@ VITE_DEV=true # 请求路径 # VITE_BASE_URL='http://localhost:48080' -# VITE_BASE_URL='http://47.98.161.246:48080' +VITE_BASE_URL='http://47.98.161.246:48080' # VITE_BASE_URL='http://114.55.169.15:48080' -VITE_BASE_URL='http://114.215.207.150:48080' +# VITE_BASE_URL='http://114.215.207.150:48080' # 上传路径 VITE_UPLOAD_URL='http://47.98.161.246:48080/admin-api/system/file/upload' diff --git a/src/api/customer/customer.js b/src/api/customer/customer.js index 8f040a0..16ed286 100644 --- a/src/api/customer/customer.js +++ b/src/api/customer/customer.js @@ -22,7 +22,8 @@ export const deleteCustomer = (userId) => { // 获取考试车型 export const getCustomerExamCarType = () => { - return request.get({ url: '/admin-api/applet/xunjia/car/simple-list' }) + return request.post({ url: 'https://cloud.ahduima.com//driver-api/tdTenantCar/list' }) + // return request.post({ url: import.meta.env.VITE_BASE_URL + '/driver-api/tdTenantCar/list' }) } // 导入学员 diff --git a/src/api/xjapplet/discount.js b/src/api/xjapplet/discount.js new file mode 100644 index 0000000..0956658 --- /dev/null +++ b/src/api/xjapplet/discount.js @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +export const getVipDiscountList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/member/discount/list', + params: params + }) +} + +export const addVipDiscount = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/member/discount/add', + data + }) +} + +export const updateVipDiscount = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/member/discount/update', + data + }) +} + +export const deleteVipDiscount = async (id) => { + return await request.delete({ + url: '/admin-api/applet/xunjia/member/discount/delete?discountId=' + id + }) +} + +export const getVipDiscountOptions = async () => { + return await request.get({ + url: '/admin-api/applet/xunjia/member/discount/simple-list' + }) +} + +export const getUserDiscountList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/user/discount/list', + params: params + }) +} + +export const giveUserDiscount = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/user/discount/send', + data + }) +} diff --git a/src/api/xjapplet/resell.js b/src/api/xjapplet/resell.js new file mode 100644 index 0000000..4042167 --- /dev/null +++ b/src/api/xjapplet/resell.js @@ -0,0 +1,32 @@ +import request from '@/config/axios' + +export const getResellList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/distribution/list', + params: params + }) +} + +export const addResell = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/distribution/add', + data + }) +} + +export const updateResell = async (data) => { + return await request.put({ + url: '/admin-api/applet/xunjia/distribution/update', + data + }) +} +export const deleteResell = async (id) => { + return await request.delete({ + url: '/admin-api/applet/xunjia/distribution/delete?distributionId=' + id + }) +} +export const getResellDetail = async (id) => { + return await request.get({ + url: '/admin-api/applet/xunjia/distribution/' + id + }) +} diff --git a/src/api/xjapplet/vip.js b/src/api/xjapplet/vip.js new file mode 100644 index 0000000..5581edd --- /dev/null +++ b/src/api/xjapplet/vip.js @@ -0,0 +1,49 @@ +import request from '@/config/axios' + +export const getUserMemberList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/user/member/list', + params: params + }) +} + +export const giveUserMember = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/user/member/add', + data + }) +} + +export const getVipTypeList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/member/list', + params: params + }) +} + +export const addVipType = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/member/add', + data + }) +} + +export const updateVipType = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/member/update', + data + }) +} + +export const deleteVipType = async (id) => { + return await request.delete({ + url: '/admin-api/applet/xunjia/member/memberId?id=' + id + }) +} + +export const getVipTypeOptions = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/member/simple-list', + params: params + }) +} diff --git a/src/api/xjapplet/vipdatabase.js b/src/api/xjapplet/vipdatabase.js new file mode 100644 index 0000000..2eca4d0 --- /dev/null +++ b/src/api/xjapplet/vipdatabase.js @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +export const addJx = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/question/jx/add', + data: data + }) +} + +export const getJxQuestionList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/question/jx/list', + params: params + }) +} + +export const delJxData = async (id) => { + return await request.delete({ + url: `/admin-api/applet/xunjia/question/jx/delete?id=${id}` + }) +} + +export const addMj = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/secret/add', + data: data + }) +} + +export const getMjList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/secret/list', + params: params + }) +} + +export const delMj = async (secretId) => { + return await request.delete({ + url: `/admin-api/applet/xunjia/secret/delete?secretId=${secretId}` + }) +} + +export const clearMj = async (secretId) => { + return await request.delete({ + url: `/admin-api/applet/xunjia/secret/clear?secretId=${secretId}` + }) +} + +export const getMjQuestionList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/secret/question/list', + params: params + }) +} + +export const addMjQuestion = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/secret/question/add', + data: data + }) +} + +export const delMjQuestion = async (id) => { + return await request.delete({ + url: `/admin-api/applet/xunjia/secret/question/delete?id=${id}` + }) +} diff --git a/src/api/xjapplet/xjdatabase.js b/src/api/xjapplet/xjdatabase.js new file mode 100644 index 0000000..3cebccf --- /dev/null +++ b/src/api/xjapplet/xjdatabase.js @@ -0,0 +1,48 @@ +import request from '@/config/axios' +export const searchQuestion = async (param) => { + return await request.get({ + url: '/admin-api/applet/xunjia/question/list', + params: param + }) +} + +export const updateQuestion = async (data) => { + return await request.put({ + url: '/admin-api/applet/xunjia/question/update', + data: data + }) +} + +export const addQuestion = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/question/add', + data: data + }) +} + +export const deleteQuestion = async (id) => { + return await request.delete({ + url: '/admin-api/applet/xunjia/question/delete?id=' + id + }) +} + +export const uploadFile = async (data) => { + return await request.post({ + url: '/admin-api/applet/xunjia/question/upload', + data: data + }) +} + +export const getQuestionSort = async (param) => { + return await request.get({ + url: '/admin-api/applet/xunjia/question/sort/list', + params: param + }) +} + +export const getMjList = async (params) => { + return await request.get({ + url: 'http://localhost/tiku-api/tiku/xunjia/secret/list', + params: params + }) +} diff --git a/src/config/axios/service.ts b/src/config/axios/service.ts index 620be60..0a0f094 100644 --- a/src/config/axios/service.ts +++ b/src/config/axios/service.ts @@ -202,7 +202,7 @@ service.interceptors.response.use( '
5 分钟搭建本地环境
' }) return Promise.reject(new Error(msg)) - } else if (code !== 200) { + } else if (code !== 200 && code !== '0000') { if (msg === '无效的刷新令牌') { // hard coding:忽略这个提示,直接登出 console.log(msg) diff --git a/src/permission.js b/src/permission.js index 991ff06..378929b 100644 --- a/src/permission.js +++ b/src/permission.js @@ -7,7 +7,8 @@ import { usePageLoading } from '@/hooks/web/usePageLoading' import { useDictStoreWithOut } from '@/store/modules/dict' import { useUserStoreWithOut } from '@/store/modules/user' import { usePermissionStoreWithOut } from '@/store/modules/permission' -import { getTenantId, getAppId } from '@/utils/auth' +import { useAppStoreWithOut } from '@/store/modules/app' +import { getTenantId, getAppId, setTenantId, setAppId } from '@/utils/auth' import cache from '@/plugins/cache' const { start, done } = useNProgress() @@ -30,6 +31,13 @@ router.beforeEach(async (to, from, next) => { } else { if (getAccessToken()) { if (to.path === '/login') { + // next({ path: '/' }) + if (to.query?.tenantId && to.query?.appId) { + setApp(to.query.tenantId, to.query.appId) + // setTimeout(() => { + // next({ path: '/' }) + // }, 1500) + } next({ path: '/' }) } else { // 获取所有字典 @@ -72,6 +80,14 @@ router.beforeEach(async (to, from, next) => { } }) +function setApp(tenantId, appId) { + setTenantId(tenantId) + + setAppId(appId) + const appStore = useAppStoreWithOut() + appStore.setAppInfo(appId) +} + router.afterEach((to) => { useTitle(to?.meta?.title) done() // 结束Progress diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 1d5f990..7c246dd 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -60,7 +60,7 @@ const remainingRouter: AppRouteRecordRaw[] = [ }, children: [ { - path: '/index', + path: 'index', component: () => import('@/views/Home/index.vue'), name: 'Home', meta: { diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts index 50a7ea3..a4d4d1c 100644 --- a/src/store/modules/dict.ts +++ b/src/store/modules/dict.ts @@ -75,7 +75,7 @@ export const useDictStore = defineStore('dict', { }, async resetDict() { cache.session.delete(CACHE_KEY.DICT_CACHE) - const res = await listSimpleDictData() + const res = (await listSimpleDictData()) || [] // 设置数据 const dictDataMap = new Map() res.forEach((dictData: DictDataVO) => { diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 8ceb741..bf91499 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,6 +1,5 @@ import { TokenType } from '@/api/login/types' import { decrypt, encrypt } from '@/utils/jsencrypt' - import cache from '@/plugins/cache' const AccessTokenKey = 'ACCESS_TOKEN' @@ -9,26 +8,34 @@ const RefreshTokenKey = 'REFRESH_TOKEN' // 获取token export const getAccessToken = () => { // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错 - return cache.local.get(AccessTokenKey) - ? cache.local.get(AccessTokenKey) - : cache.local.get('ACCESS_TOKEN') + return localStorage.getItem(AccessTokenKey) + ? localStorage.getItem(AccessTokenKey) + : localStorage.getItem('ACCESS_TOKEN') + // return cache.local.get(AccessTokenKey) + // ? cache.local.get(AccessTokenKey) + // : cache.local.get('ACCESS_TOKEN') } // 刷新token export const getRefreshToken = () => { - return cache.local.get(RefreshTokenKey) + return localStorage.getItem(RefreshTokenKey) + // return cache.local.get(RefreshTokenKey) } // 设置token export const setToken = (token: TokenType) => { - cache.local.set(RefreshTokenKey, token.refreshToken) - cache.local.set(AccessTokenKey, token.accessToken) + localStorage.setItem(AccessTokenKey, token.accessToken) + localStorage.setItem(RefreshTokenKey, token.refreshToken) + // cache.local.set(RefreshTokenKey, token.refreshToken) + // cache.local.set(AccessTokenKey, token.accessToken) } // 删除token export const removeToken = () => { - cache.local.delete(AccessTokenKey) - cache.local.delete(RefreshTokenKey) + localStorage.removeItem(AccessTokenKey) + localStorage.removeItem(RefreshTokenKey) + // cache.local.delete(AccessTokenKey) + // cache.local.delete(RefreshTokenKey) } /** 格式化token(jwt格式) */ diff --git a/src/views/Customer/AppletUser/index.vue b/src/views/Customer/AppletUser/index.vue new file mode 100644 index 0000000..7a43666 --- /dev/null +++ b/src/views/Customer/AppletUser/index.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/views/Customer/ExamRecord/index.vue b/src/views/Customer/ExamRecord/index.vue index a241973..38b20e4 100644 --- a/src/views/Customer/ExamRecord/index.vue +++ b/src/views/Customer/ExamRecord/index.vue @@ -103,7 +103,7 @@ const carTypeOptions = ref([]) const searchForm = ref({ userName: undefined, - carTypeId: 1011, + carTypeId: undefined, pageNo: 1, pageSize: 20 }) diff --git a/src/views/Customer/Resell/index.vue b/src/views/Customer/Resell/index.vue new file mode 100644 index 0000000..ba306b2 --- /dev/null +++ b/src/views/Customer/Resell/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/Customer/Vip/components/Recharge.vue b/src/views/Customer/Vip/components/Recharge.vue new file mode 100644 index 0000000..ad4f2ab --- /dev/null +++ b/src/views/Customer/Vip/components/Recharge.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/views/Customer/Vip/components/UserDiscount.vue b/src/views/Customer/Vip/components/UserDiscount.vue new file mode 100644 index 0000000..bee8940 --- /dev/null +++ b/src/views/Customer/Vip/components/UserDiscount.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/views/Customer/Vip/components/VipDiscount.vue b/src/views/Customer/Vip/components/VipDiscount.vue new file mode 100644 index 0000000..875e731 --- /dev/null +++ b/src/views/Customer/Vip/components/VipDiscount.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/src/views/Customer/Vip/components/VipType.vue b/src/views/Customer/Vip/components/VipType.vue new file mode 100644 index 0000000..beb17b2 --- /dev/null +++ b/src/views/Customer/Vip/components/VipType.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/src/views/Customer/Vip/components/VipUser.vue b/src/views/Customer/Vip/components/VipUser.vue new file mode 100644 index 0000000..fe5401f --- /dev/null +++ b/src/views/Customer/Vip/components/VipUser.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/Customer/Vip/index.vue b/src/views/Customer/Vip/index.vue new file mode 100644 index 0000000..3eef263 --- /dev/null +++ b/src/views/Customer/Vip/index.vue @@ -0,0 +1,42 @@ + + + + +