From ec95ab4933f45390e9aeb24399fd161cc87dc0c5 Mon Sep 17 00:00:00 2001 From: qsh <> Date: Tue, 3 Feb 2026 11:46:59 +0800 Subject: [PATCH] sc --- .env.development | 2 + .env.production | 2 + src/App.vue | 4 + src/api/system/tenant.js | 18 +++ src/config.js | 6 + src/pages/member/setting-form.vue | 13 +- src/pages/member/setting.vue | 9 +- src/pages/mine/about-us.vue | 196 +++--------------------------- src/pages/mine/about/index.vue | 187 ---------------------------- src/pages/mine/help-center.vue | 147 +--------------------- src/pages/mine/index.vue | 156 ++---------------------- src/pages/mine/personal-info.vue | 166 +------------------------ src/pages/mine/school-info.vue | 174 +++++++++----------------- src/store/index.js | 13 +- src/store/modules/tenant.js | 45 +++++++ src/store/modules/user.js | 13 +- src/utils/constant.js | 7 +- src/utils/request.js | 6 +- 18 files changed, 197 insertions(+), 967 deletions(-) create mode 100644 src/api/system/tenant.js delete mode 100644 src/pages/mine/about/index.vue create mode 100644 src/store/modules/tenant.js diff --git a/.env.development b/.env.development index c3a1946..fb04383 100644 --- a/.env.development +++ b/.env.development @@ -3,6 +3,8 @@ VITE_APP_TITLE = 寻驾 # 租户id VITE_APP_TENANT_ID = 10001 +# instance id +VITE_APP_INSTANCE_ID = 1038 VITE_APP_PHONE = 18056811878 diff --git a/.env.production b/.env.production index 6dfc581..c4bf675 100644 --- a/.env.production +++ b/.env.production @@ -2,6 +2,8 @@ VITE_APP_TITLE = 寻驾 # 租户id VITE_APP_TENANT_ID = 10001 +# instance id +VITE_APP_INSTANCE_ID = 1038 VITE_APP_PHONE = 18056811878 diff --git a/src/App.vue b/src/App.vue index 58ed5a5..d8e75a6 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,7 +3,9 @@ import { getToken } from '@/utils/auth' import { useConfigStore } from '@/store' import { useUserStore } from '@/store' + import { getCurrentInstance } from "vue" + import { useTenantStore } from '@/store' import { onLaunch } from '@dcloudio/uni-app' const { proxy } = getCurrentInstance() @@ -24,6 +26,8 @@ function initConfig() { useConfigStore().setConfig(config) + // 初始化租户信息 + useTenantStore().getTenant({ id: config.tenantId }) } function checkLogin() { diff --git a/src/api/system/tenant.js b/src/api/system/tenant.js new file mode 100644 index 0000000..4e98740 --- /dev/null +++ b/src/api/system/tenant.js @@ -0,0 +1,18 @@ +import request from '@/utils/request'; + +export const getTenantInfo = params => { + return request({ + url: '/applet/xunjia/tenant/get', + method: 'get', + params + }); +}; + +// 修改租户 +export const updateTenant = data => { + return request({ + url: '/applet/xunjia/tenant/update', + method: 'put', + data + }); +}; diff --git a/src/config.js b/src/config.js index 408f148..a3d3e5c 100644 --- a/src/config.js +++ b/src/config.js @@ -7,6 +7,12 @@ export default { name: '小程序管理后台', // 应用版本 version: '1.0.0', + // 更新时间 + updateTime: '2026-02-03', + // 租户id + tenantId: import.meta.env.VITE_APP_TENANT_ID, + // instance id + instanceId: import.meta.env.VITE_APP_INSTANCE_ID, // 应用logo logo: '/static/logo.png' } diff --git a/src/pages/member/setting-form.vue b/src/pages/member/setting-form.vue index 904d3b9..9000a6c 100644 --- a/src/pages/member/setting-form.vue +++ b/src/pages/member/setting-form.vue @@ -112,6 +112,7 @@ - - diff --git a/src/pages/mine/help-center.vue b/src/pages/mine/help-center.vue index 77f2d48..2e7445f 100644 --- a/src/pages/mine/help-center.vue +++ b/src/pages/mine/help-center.vue @@ -69,7 +69,7 @@ - + @@ -524,149 +524,6 @@ color: #909399; } - /* 平板响应式 */ - @media screen and (min-width: 768px) { - .help-center-container { - max-width: 900px; - margin: 0 auto; - width: 100%; - } - - .page-header { - height: 140rpx; - padding: 0 48rpx; - } - - .header-title { - font-size: 36rpx; - } - - .back-icon { - font-size: 48rpx; - } - - .faq-section { - margin: 24rpx; - padding: 40rpx; - } - - .guide-section { - margin: 0 24rpx 24rpx; - padding: 40rpx; - } - - .contact-section { - margin: 0 24rpx 32rpx; - padding: 40rpx; - } - - .section-header { - margin-bottom: 40rpx; - } - - .section-title { - font-size: 36rpx; - } - - .search-input { - width: 350rpx; - height: 72rpx; - padding: 0 32rpx; - font-size: 28rpx; - } - - .faq-list { - gap: 24rpx; - } - - .faq-item { - border-radius: 16rpx; - } - - .faq-header { - padding: 32rpx; - } - - .faq-question { - font-size: 32rpx; - } - - .faq-icon { - font-size: 28rpx; - margin-left: 24rpx; - } - - .faq-answer { - padding: 0 32rpx 32rpx; - font-size: 28rpx; - } - - .guide-list { - gap: 24rpx; - margin-top: 32rpx; - } - - .guide-item { - padding: 32rpx; - border-radius: 16rpx; - } - - .guide-icon { - font-size: 56rpx; - margin-right: 32rpx; - } - - .guide-title { - font-size: 32rpx; - margin-bottom: 12rpx; - } - - .guide-desc { - font-size: 28rpx; - } - - .guide-arrow { - font-size: 36rpx; - } - - .contact-info { - gap: 32rpx; - margin-top: 32rpx; - } - - .contact-item { - padding: 32rpx; - border-radius: 16rpx; - } - - .contact-icon { - font-size: 56rpx; - margin-right: 32rpx; - } - - .contact-label { - font-size: 28rpx; - margin-bottom: 8rpx; - } - - .contact-value { - font-size: 32rpx; - } - - .contact-action { - padding: 16rpx 32rpx; - font-size: 28rpx; - } - - .empty-icon { - font-size: 120rpx; - margin-bottom: 32rpx; - } - - .empty-text { - font-size: 32rpx; - } - } /* 大屏设备响应式 */ @media screen and (min-width: 1024px) { diff --git a/src/pages/mine/index.vue b/src/pages/mine/index.vue index 7cd5c3a..da7f02b 100644 --- a/src/pages/mine/index.vue +++ b/src/pages/mine/index.vue @@ -9,8 +9,7 @@ {{ name }} - 驾校管理员 - 分销员 + {{ userRole?.name || '未分配角色' }} @@ -30,22 +29,12 @@ - - - - 管理员功能 - - - 分销员功能 - - - - + 驾校管理 - + 🏢 @@ -56,7 +45,7 @@ - + 📝 @@ -67,7 +56,7 @@ - + 📋 @@ -80,11 +69,11 @@ - + 个人设置 - + 👤 @@ -95,7 +84,7 @@ - + 🔒 @@ -104,17 +93,6 @@ 修改登录密码 - - - - - 🏢 - - - 驾校信息查看 - 查看本驾校基础信息 - - @@ -162,12 +140,13 @@ @@ -318,75 +325,6 @@ margin-bottom: 8rpx; } - /* 平板响应式 */ - @media screen and (min-width: 768px) { - .school-info-container { - max-width: 900px; - margin: 0 auto; - width: 100%; - } - - .page-header { - height: 140rpx; - padding: 0 48rpx; - } - - .header-title { - font-size: 36rpx; - } - - .back-icon { - font-size: 48rpx; - } - - .save-btn { - font-size: 32rpx; - } - - .form-section { - margin: 24rpx; - padding: 40rpx; - } - - .form-group { - margin-bottom: 40rpx; - } - - .form-label { - font-size: 32rpx; - margin-bottom: 16rpx; - } - - .form-input { - height: 96rpx; - font-size: 32rpx; - padding: 0 32rpx; - } - - .form-textarea { - min-height: 200rpx; - font-size: 32rpx; - padding: 32rpx; - } - - .tips-section { - margin: 0 24rpx 32rpx; - padding: 40rpx; - } - - .tips-title { - font-size: 32rpx; - margin-bottom: 24rpx; - } - - .tips-content { - font-size: 28rpx; - } - - .tip-item { - margin-bottom: 12rpx; - } - } /* 大屏设备响应式 */ @media screen and (min-width: 1024px) { diff --git a/src/store/index.js b/src/store/index.js index 3f0bcc9..3a24eda 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,9 +1,10 @@ -import { createPinia } from 'pinia' -import { useUserStore } from './modules/user' -import { useConfigStore } from './modules/config' +import { createPinia } from 'pinia'; +import { useUserStore } from './modules/user'; +import { useConfigStore } from './modules/config'; +import { useTenantStore } from './modules/tenant'; -const pinia = createPinia() +const pinia = createPinia(); -export default pinia +export default pinia; -export { useUserStore, useConfigStore } +export { useUserStore, useConfigStore, useTenantStore }; diff --git a/src/store/modules/tenant.js b/src/store/modules/tenant.js new file mode 100644 index 0000000..7f9a220 --- /dev/null +++ b/src/store/modules/tenant.js @@ -0,0 +1,45 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; +import config from '@/config'; +import storage from '@/utils/storage'; +import constant from '@/utils/constant'; +import { isEmpty } from '@/utils/validate'; +import { getTenantInfo, updateTenant } from '@/api/system/tenant'; + +export const useTenantStore = defineStore('tenant', () => { + const tenantInfo = ref(storage.get(constant.tenantInfo)); + + const SET_TENANT_INFO = val => { + tenantInfo.value = val; + storage.set(constant.tenantInfo, val); + }; + + const getTenant = () => { + return new Promise(resolve => { + getTenantInfo({ id: config.appInfo.tenantId }).then(res => { + if (!isEmpty(res.data)) { + SET_TENANT_INFO(res.data); + } + resolve(res); + }); + }); + }; + + const updateTenantInfo = data => { + return new Promise(resolve => { + updateTenant(data).then(res => { + if (!isEmpty(res.data)) { + getTenant(); + } + resolve(res); + }); + }); + }; + + return { + tenantInfo, + SET_TENANT_INFO, + getTenant, + updateTenantInfo + }; +}); diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 7749d64..1596318 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -14,6 +14,7 @@ export const useUserStore = defineStore('user', () => { const token = ref(getToken()); const id = ref(storage.get(constant.id)); const name = ref(storage.get(constant.name)); + const currentRole = ref(storage.get('currentRole')); const avatar = ref(storage.get(constant.avatar)); const roles = ref(storage.get(constant.roles)); const permissions = ref(storage.get(constant.permissions)); @@ -29,6 +30,10 @@ export const useUserStore = defineStore('user', () => { name.value = val; storage.set(constant.name, val); }; + const SET_CURRENT_ROLE = val => { + currentRole.value = val; + storage.set('currentRole', val); + }; const SET_AVATAR = val => { avatar.value = val; storage.set(constant.avatar, val); @@ -69,8 +74,9 @@ export const useUserStore = defineStore('user', () => { if (!isHttp(avatar)) { avatar = isEmpty(avatar) ? defAva : baseUrl + avatar; } - const userid = isEmpty(user) || isEmpty(user.userId) ? '' : user.userId; - const username = isEmpty(user) || isEmpty(user.userName) ? '' : user.userName; + const userid = isEmpty(user) || isEmpty(user.id) ? '' : user.id; + const username = isEmpty(user) || isEmpty(user.nickname) ? '' : user.nickname; + const role = isEmpty(user) || isEmpty(user.currentRole) ? '' : user.currentRole; if (res.data.roles && res.data.roles.length > 0) { SET_ROLES(res.data.roles); SET_PERMISSIONS(res.data.permissions); @@ -80,6 +86,7 @@ export const useUserStore = defineStore('user', () => { SET_ID(userid); SET_NAME(username); SET_AVATAR(avatar); + SET_CURRENT_ROLE(role); resolve(res); }) .catch(error => { @@ -95,6 +102,7 @@ export const useUserStore = defineStore('user', () => { .then(() => { SET_TOKEN(''); SET_ROLES([]); + SET_CURRENT_ROLE(''); SET_PERMISSIONS([]); removeToken(); storage.clean(); @@ -110,6 +118,7 @@ export const useUserStore = defineStore('user', () => { token, id, name, + currentRole, avatar, roles, permissions, diff --git a/src/utils/constant.js b/src/utils/constant.js index 6b93379..f0bb78b 100644 --- a/src/utils/constant.js +++ b/src/utils/constant.js @@ -3,7 +3,8 @@ const constant = { id: 'user_id', name: 'user_name', roles: 'user_roles', - permissions: 'user_permissions' - } + permissions: 'user_permissions', + tenantInfo: 'tenant_info' +}; - export default constant +export default constant; diff --git a/src/utils/request.js b/src/utils/request.js index 3aa08cd..04e670b 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -6,13 +6,15 @@ import { toast, showConfirm, tansParams } from '@/utils/common'; let timeout = 10000; const baseUrl = config.baseUrl; +const tenantId = config.appInfo.tenantId; +const instanceId = config.appInfo.instanceId; const request = config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false; config.header = config.header || {}; - config.header['tenant-id'] = 10001; - config.header['instance-id'] = 1038; + config.header['tenant-id'] = tenantId || 10001; + config.header['instance-id'] = instanceId || 1038; if (getToken() && !isToken) { config.header['Authorization'] = 'Bearer ' + getToken(); }