diff --git a/src/api/xjapplet/resell.js b/src/api/xjapplet/resell.js index 4042167..dc7975d 100644 --- a/src/api/xjapplet/resell.js +++ b/src/api/xjapplet/resell.js @@ -30,3 +30,10 @@ export const getResellDetail = async (id) => { url: '/admin-api/applet/xunjia/distribution/' + id }) } + +export const getResellSimpleList = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/distribution/simple-list', + params: params + }) +} diff --git a/src/api/xjapplet/vip.js b/src/api/xjapplet/vip.js index 5581edd..c9c50c0 100644 --- a/src/api/xjapplet/vip.js +++ b/src/api/xjapplet/vip.js @@ -37,7 +37,7 @@ export const updateVipType = async (data) => { export const deleteVipType = async (id) => { return await request.delete({ - url: '/admin-api/applet/xunjia/member/memberId?id=' + id + url: '/admin-api/applet/xunjia/member/delete?memberId=' + id }) } @@ -47,3 +47,10 @@ export const getVipTypeOptions = async (params) => { params: params }) } + +export const getRechargeRecords = async (params) => { + return await request.get({ + url: '/admin-api/applet/xunjia/pay/list', + params: params + }) +} diff --git a/src/permission.js b/src/permission.js index 115c8cd..bf1625c 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() @@ -39,13 +40,17 @@ router.beforeEach(async (to, from, next) => { } else { if (getAccessToken()) { if (to.path === '/login') { + if (to.query?.tenantId && to.query?.appId) { + setApp(to.query.tenantId, to.query.appId) + await waitTime(1500) + } next({ path: '/' }) } else { // 获取所有字典 const dictStore = useDictStoreWithOut() const userStore = useUserStoreWithOut() const permissionStore = usePermissionStoreWithOut() - if (!dictStore.getIsSetDict && to.path != '/nm-detail') { + if (!dictStore.getIsSetDict) { await dictStore.setDictMap() } if (!userStore.getIsSetUser) { @@ -81,6 +86,22 @@ router.beforeEach(async (to, from, next) => { } }) +async function waitTime(seconds) { + return new Promise((resolve) => { + setTimeout(() => { + resolve() + }, seconds) + }) +} + +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 fdd7af5..3720fda 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -51,7 +51,7 @@ const remainingRouter: AppRouteRecordRaw[] = [ } }, { - path: '', + path: '/', component: Layout, redirect: '/Home/index', name: '', @@ -59,6 +59,31 @@ const remainingRouter: AppRouteRecordRaw[] = [ title: '首页', hidden: true } + // children: [ + // { + // path: '/index', + // component: () => import('@/views/Home/Index.vue'), + // name: 'Home', + // meta: { + // title: '首页', + // icon: 'ep:home-filled', + // noTagsView: true, + // affix: true + // // hidden: true + // } + // } + // { + // path: 'menu', + // component: () => import('@/views/Basic/Menu/index.vue'), + // name: 'Menu', + // meta: { + // affix: true, + // noTagsView: true, + // icon: 'ep:user', + // title: '菜单管理' + // } + // } + // ] }, { path: '/swagger', @@ -133,8 +158,8 @@ const remainingRouter: AppRouteRecordRaw[] = [ // path: '/Basic', // component: Layout, // name: 'Basic', - // meta: { title: '菜单管理' }, // redirect: '/Basic/menu', + // meta: { title: '菜单管理' }, // children: [ // { // path: 'menu', diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts index bf8126a..cbf31ad 100644 --- a/src/store/modules/dict.ts +++ b/src/store/modules/dict.ts @@ -45,7 +45,7 @@ export const useDictStore = defineStore('dict', { this.dictMap = dictMap this.isSetDict = true } else { - const res = await listSimpleDictData() + const res = (await listSimpleDictData()) || [] // 设置数据 const dictDataMap = new Map() res.forEach((dictData: DictDataVO) => { @@ -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/store/modules/user.ts b/src/store/modules/user.ts index 25af179..a3d9b7e 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -64,7 +64,7 @@ export const useUserStore = defineStore('admin-user', { async loginOut() { await loginOut() removeToken() - cache.local.clear() + // cache.local.clear() this.resetState() }, resetState() { diff --git a/src/utils/auth.ts b/src/utils/auth.ts index f4d9c88..bf91499 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -8,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/XjApplet/Vip/components/Recharge.vue b/src/views/XjApplet/Vip/components/Recharge.vue new file mode 100644 index 0000000..ec68950 --- /dev/null +++ b/src/views/XjApplet/Vip/components/Recharge.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/XjApplet/Vip/components/VipType.vue b/src/views/XjApplet/Vip/components/VipType.vue index 39c80b8..2bc3b17 100644 --- a/src/views/XjApplet/Vip/components/VipType.vue +++ b/src/views/XjApplet/Vip/components/VipType.vue @@ -6,8 +6,8 @@ - 小车 - 摩托车 + 小车 + 摩托车 @@ -68,14 +68,14 @@ - - + + - - - - + + + + @@ -116,7 +116,7 @@ import { getVipTypeList, addVipType, updateVipType, deleteVipType } from '@/api/ const message = useMessage() const searchForm = ref({ memberName: undefined, - carTypeId: '1001', + carTypeId: 1001, pageNo: 1, pageSize: 50 }) @@ -146,7 +146,7 @@ const showDialog = ref(false) const form = ref({ memberName: '', carTypeId: undefined, - subjects: [], + subjectList: [], price: '', discount: '', duration: '', @@ -156,7 +156,7 @@ const form = ref({ const rules = ref({ memberName: [{ required: true, message: '请输入会员名称', trigger: 'blur' }], carTypeId: [{ required: true, message: '请输入车型', trigger: 'change' }], - subjects: [{ required: true, message: '请输入科目', trigger: 'blur' }], + subjectList: [{ required: true, message: '请输入科目', trigger: 'blur' }], price: [{ required: true, message: '请输入价格', trigger: 'blur' }], discount: [{ required: true, message: '请输入折扣价', trigger: 'blur' }], duration: [{ required: true, message: '请输入有效期', trigger: 'blur' }] @@ -165,10 +165,10 @@ const rules = ref({ function addVip() { showDialog.value = true - form.value.carTypeId = { + form.value = { memberName: '', carTypeId: searchForm.value.carTypeId, - subjects: [], + subjectList: [], price: '', discount: '', duration: '', @@ -178,7 +178,7 @@ function addVip() { } function editVip(row) { - form.value = { ...row, subjects: row.subjects.split(','), unit: Number(row.unit) } + form.value = { ...row, unit: Number(row.unit) } showDialog.value = true } diff --git a/src/views/XjApplet/Vip/index.vue b/src/views/XjApplet/Vip/index.vue index b73a841..e92be68 100644 --- a/src/views/XjApplet/Vip/index.vue +++ b/src/views/XjApplet/Vip/index.vue @@ -13,6 +13,9 @@ + + + @@ -23,6 +26,7 @@ import UserDiscount from './components/UserDiscount.vue' import VipDiscount from './components/VipDiscount.vue' import VipType from './components/VipType.vue' import VipUser from './components/VipUser.vue' +import Recharge from './components/Recharge.vue' const tabIndex = ref(1)