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();
}