From b1843402c0117e6017f1636867b422d825c47bb7 Mon Sep 17 00:00:00 2001
From: qsh <>
Date: Mon, 26 Jan 2026 15:36:37 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 21 +
.env.production | 19 +
.gitignore | 23 +
README.md | 0
index.html | 20 +
package.json | 47 +
project.config.json | 28 +
project.private.config.json | 7 +
src/App.vue | 37 +
src/api/login.js | 59 +
src/api/system/dict/data.js | 52 +
src/api/system/dict/type.js | 60 +
src/api/system/user.js | 41 +
src/components/uni-section/uni-section.vue | 167 +
src/config.js | 26 +
src/main.js | 14 +
src/manifest.json | 96 +
src/package.json | 18 +
src/pages.json | 119 +
src/pages/common/textview/index.vue | 43 +
src/pages/common/webview/index.vue | 34 +
src/pages/index.vue | 36 +
src/pages/login.vue | 213 +
src/pages/mine/about/index.vue | 71 +
src/pages/mine/avatar/index.vue | 618 +++
src/pages/mine/help/index.vue | 108 +
src/pages/mine/index.vue | 187 +
src/pages/mine/info/edit.vue | 124 +
src/pages/mine/info/index.vue | 37 +
src/pages/mine/pwd/index.vue | 79 +
src/pages/mine/setting/index.vue | 78 +
src/pages/register.vue | 187 +
src/pages/work/index.vue | 171 +
src/permission.js | 39 +
src/plugins/auth.js | 60 +
src/plugins/index.js | 12 +
src/plugins/modal.js | 78 +
src/plugins/tab.js | 30 +
src/readme.md | 0
src/static/favicon.ico | Bin 0 -> 16958 bytes
src/static/font/iconfont.css | 90 +
src/static/font/iconfont.ttf | Bin 0 -> 6724 bytes
src/static/images/banner/banner01.jpg | Bin 0 -> 39640 bytes
src/static/images/banner/banner02.jpg | Bin 0 -> 37061 bytes
src/static/images/banner/banner03.jpg | Bin 0 -> 38123 bytes
src/static/images/profile.jpg | Bin 0 -> 81131 bytes
src/static/images/tabbar/home.png | Bin 0 -> 3265 bytes
src/static/images/tabbar/home_.png | Bin 0 -> 3229 bytes
src/static/images/tabbar/mine.png | Bin 0 -> 4235 bytes
src/static/images/tabbar/mine_.png | Bin 0 -> 4219 bytes
src/static/images/tabbar/work.png | Bin 0 -> 4108 bytes
src/static/images/tabbar/work_.png | Bin 0 -> 5008 bytes
src/static/index.html | 20 +
src/static/logo.png | Bin 0 -> 3616 bytes
src/static/logo200.png | Bin 0 -> 7995 bytes
src/static/scss/colorui.css | 5142 ++++++++++++++++++++
src/static/scss/global.scss | 90 +
src/static/scss/index.scss | 6 +
src/store/index.js | 9 +
src/store/modules/config.js | 13 +
src/store/modules/dict.js | 56 +
src/store/modules/user.js | 117 +
src/uni.scss | 74 +
src/utils/auth.js | 13 +
src/utils/common.js | 54 +
src/utils/constant.js | 9 +
src/utils/dict.js | 25 +
src/utils/errorCode.js | 6 +
src/utils/permission.js | 51 +
src/utils/request.js | 68 +
src/utils/storage.js | 32 +
src/utils/upload.js | 70 +
src/utils/validate.js | 114 +
vite.config.js | 14 +
74 files changed, 9132 insertions(+)
create mode 100644 .env.development
create mode 100644 .env.production
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 index.html
create mode 100644 package.json
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 src/App.vue
create mode 100644 src/api/login.js
create mode 100644 src/api/system/dict/data.js
create mode 100644 src/api/system/dict/type.js
create mode 100644 src/api/system/user.js
create mode 100644 src/components/uni-section/uni-section.vue
create mode 100644 src/config.js
create mode 100644 src/main.js
create mode 100644 src/manifest.json
create mode 100644 src/package.json
create mode 100644 src/pages.json
create mode 100644 src/pages/common/textview/index.vue
create mode 100644 src/pages/common/webview/index.vue
create mode 100644 src/pages/index.vue
create mode 100644 src/pages/login.vue
create mode 100644 src/pages/mine/about/index.vue
create mode 100644 src/pages/mine/avatar/index.vue
create mode 100644 src/pages/mine/help/index.vue
create mode 100644 src/pages/mine/index.vue
create mode 100644 src/pages/mine/info/edit.vue
create mode 100644 src/pages/mine/info/index.vue
create mode 100644 src/pages/mine/pwd/index.vue
create mode 100644 src/pages/mine/setting/index.vue
create mode 100644 src/pages/register.vue
create mode 100644 src/pages/work/index.vue
create mode 100644 src/permission.js
create mode 100644 src/plugins/auth.js
create mode 100644 src/plugins/index.js
create mode 100644 src/plugins/modal.js
create mode 100644 src/plugins/tab.js
create mode 100644 src/readme.md
create mode 100644 src/static/favicon.ico
create mode 100644 src/static/font/iconfont.css
create mode 100644 src/static/font/iconfont.ttf
create mode 100644 src/static/images/banner/banner01.jpg
create mode 100644 src/static/images/banner/banner02.jpg
create mode 100644 src/static/images/banner/banner03.jpg
create mode 100644 src/static/images/profile.jpg
create mode 100644 src/static/images/tabbar/home.png
create mode 100644 src/static/images/tabbar/home_.png
create mode 100644 src/static/images/tabbar/mine.png
create mode 100644 src/static/images/tabbar/mine_.png
create mode 100644 src/static/images/tabbar/work.png
create mode 100644 src/static/images/tabbar/work_.png
create mode 100644 src/static/index.html
create mode 100644 src/static/logo.png
create mode 100644 src/static/logo200.png
create mode 100644 src/static/scss/colorui.css
create mode 100644 src/static/scss/global.scss
create mode 100644 src/static/scss/index.scss
create mode 100644 src/store/index.js
create mode 100644 src/store/modules/config.js
create mode 100644 src/store/modules/dict.js
create mode 100644 src/store/modules/user.js
create mode 100644 src/uni.scss
create mode 100644 src/utils/auth.js
create mode 100644 src/utils/common.js
create mode 100644 src/utils/constant.js
create mode 100644 src/utils/dict.js
create mode 100644 src/utils/errorCode.js
create mode 100644 src/utils/permission.js
create mode 100644 src/utils/request.js
create mode 100644 src/utils/storage.js
create mode 100644 src/utils/upload.js
create mode 100644 src/utils/validate.js
create mode 100644 vite.config.js
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..994bb5f
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,21 @@
+# 页面标题
+VITE_APP_TITLE = 寻驾
+
+# 租户id
+VITE_APP_TENANT_ID = 10001
+
+VITE_APP_PHONE = 18056811878
+
+# 开发环境配置
+VITE_APP_ENV = 'development'
+
+# 寻驾/开发环境
+VITE_APP_BASE_API = 'https://cloud.ahduima.com/'
+# VITE_APP_BASE_API = 'https://xj.ahduima.com/'
+# VITE_APP_BASE_API = 'http://localhost:8889/'
+#
+VITE_WEB_BASE_URL = 'https://xj.ahduima.com'
+# VITE_WEB_BASE_URL = 'https://xj.ahduima.com'
+# VITE_APP_BASE_API = 'http://localhost:8889/'
+# 资源地址
+VITE_RESOURSE_URL = 'http://huodong.ahduima.com'
\ No newline at end of file
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..6dfc581
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,19 @@
+# 页面标题
+VITE_APP_TITLE = 寻驾
+# 租户id
+VITE_APP_TENANT_ID = 10001
+
+VITE_APP_PHONE = 18056811878
+
+# 开发环境配置
+VITE_APP_ENV = 'production'
+
+#开发环境
+# VITE_APP_BASE_API = 'https://xj.ahduima.com/'
+VITE_APP_BASE_API = 'https://cloud.ahduima.com/'
+
+#
+VITE_WEB_BASE_URL = 'https://xj.ahduima.com'
+
+# 资源地址
+VITE_RESOURSE_URL = 'http://huodong.ahduima.com'
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..78a752d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..fb81ddc
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..02947d3
--- /dev/null
+++ b/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "xj-manage-h5",
+ "version": "2.0.0",
+ "scripts": {
+ "dev:h5": "uni",
+ "dev": "uni -p mp-weixin",
+ "dev:dy": "uni -p mp-toutiao",
+ "build:h5": "uni build",
+ "build": "uni build -p mp-weixin",
+ "build:dy": "uni build -p mp-toutiao",
+ "build-test:mp-weixin": "uni --mode test -p mp-weixin"
+ },
+ "dependencies": {
+ "@dcloudio/uni-app": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-app-harmony": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-app-plus": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-components": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-h5": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-alipay": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-baidu": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-harmony": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-jd": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-lark": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-qq": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-weixin": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-mp-xhs": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-4080720251125001",
+ "pinia": "2.0.36",
+ "pinia-plugin-persist-uni": "^1.2.0",
+ "vue": "^3.4.21",
+ "vue-i18n": "^9.1.9"
+ },
+ "devDependencies": {
+ "@dcloudio/types": "^3.4.8",
+ "@dcloudio/uni-automator": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-cli-shared": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/uni-stacktracey": "3.0.0-alpha-4080720251125001",
+ "@dcloudio/vite-plugin-uni": "3.0.0-alpha-4080720251125001",
+ "@vue/runtime-core": "^3.4.21",
+ "postcss": "^8.5.6",
+ "sass": "^1.63.6",
+ "sass-loader": "^13.3.2",
+ "vite": "5.2.8"
+ }
+}
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..574d031
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,28 @@
+{
+ "appid": "wx26785eb35bd950b0",
+ "compileType": "miniprogram",
+ "libVersion": "3.3.3",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "enhance": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ }
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..9912643
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "xunjia-applet",
+ "setting": {
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..0b7b909
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,37 @@
+
+
+
diff --git a/src/api/login.js b/src/api/login.js
new file mode 100644
index 0000000..6ce7e7c
--- /dev/null
+++ b/src/api/login.js
@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ 'url': '/login',
+ headers: {
+ isToken: false
+ },
+ 'method': 'post',
+ 'data': data
+ })
+}
+
+// 注册方法
+export function register(data) {
+ return request({
+ url: '/register',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ 'url': '/getInfo',
+ 'method': 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ 'url': '/logout',
+ 'method': 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ 'url': '/captchaImage',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
diff --git a/src/api/system/dict/data.js b/src/api/system/dict/data.js
new file mode 100644
index 0000000..6c9eb79
--- /dev/null
+++ b/src/api/system/dict/data.js
@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+ return request({
+ url: '/system/dict/data/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'get'
+ })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+ return request({
+ url: '/system/dict/data/type/' + dictType,
+ method: 'get'
+ })
+}
+
+// 新增字典数据
+export function addData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典数据
+export function updateData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'delete'
+ })
+}
diff --git a/src/api/system/dict/type.js b/src/api/system/dict/type.js
new file mode 100644
index 0000000..a0254ba
--- /dev/null
+++ b/src/api/system/dict/type.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+ return request({
+ url: '/system/dict/type/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'get'
+ })
+}
+
+// 新增字典类型
+export function addType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典类型
+export function updateType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'delete'
+ })
+}
+
+// 刷新字典缓存
+export function refreshCache() {
+ return request({
+ url: '/system/dict/type/refreshCache',
+ method: 'delete'
+ })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+ return request({
+ url: '/system/dict/type/optionselect',
+ method: 'get'
+ })
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
new file mode 100644
index 0000000..0e307ea
--- /dev/null
+++ b/src/api/system/user.js
@@ -0,0 +1,41 @@
+import upload from '@/utils/upload'
+import request from '@/utils/request'
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ data: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return upload({
+ url: '/system/user/profile/avatar',
+ name: data.name,
+ filePath: data.filePath
+ })
+}
diff --git a/src/components/uni-section/uni-section.vue b/src/components/uni-section/uni-section.vue
new file mode 100644
index 0000000..9a52e0b
--- /dev/null
+++ b/src/components/uni-section/uni-section.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/config.js b/src/config.js
new file mode 100644
index 0000000..4643cd8
--- /dev/null
+++ b/src/config.js
@@ -0,0 +1,26 @@
+// 应用全局配置
+export default {
+ baseUrl: 'https://vue.ruoyi.vip/prod-api',
+ // baseUrl: 'http://localhost:8080',
+ // 应用信息
+ appInfo: {
+ // 应用名称
+ name: '小程序管理后台',
+ // 应用版本
+ version: '1.2.0',
+ // 应用logo
+ logo: '/static/logo.png',
+ // 官方网站
+ // 政策协议
+ agreements: [
+ {
+ title: '隐私政策',
+ url: 'https://ruoyi.vip/protocol.html'
+ },
+ {
+ title: '用户服务协议',
+ url: 'https://ruoyi.vip/protocol.html'
+ }
+ ]
+ }
+};
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..3d06162
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,14 @@
+import { createSSRApp } from 'vue';
+import App from './App';
+import store from './store'; // store
+import { install } from './plugins'; // plugins
+import './permission'; // permission
+
+export function createApp() {
+ const app = createSSRApp(App);
+ app.use(store);
+ install(app);
+ return {
+ app
+ };
+}
diff --git a/src/manifest.json b/src/manifest.json
new file mode 100644
index 0000000..163e4fa
--- /dev/null
+++ b/src/manifest.json
@@ -0,0 +1,96 @@
+{
+ "name": "小程序管理后台",
+ "appid": "__UNI__59447F7",
+ "description": "",
+ "versionName": "1.0.1",
+ "versionCode": "101",
+ "transformPx": false,
+ "app-plus": {
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ "modules": {},
+ "distribute": {
+ "android": {
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios": {},
+ "sdkConfigs": {}
+ }
+ },
+ "quickapp": {},
+ "mp-weixin": {
+ "appid": "wx26785eb35bd950b0",
+ "setting": {
+ "urlCheck": true,
+ "minified": true,
+ "es6": true,
+ "postcss": true
+ },
+ "usingComponents": true,
+ "permission": {
+ "scope.userLocation": {
+ "desc": "根据城市获取不同题库"
+ },
+ "scope.userInfo": {
+ "desc": "用于用户登录和身份验证"
+ },
+ "scope.phoneNumber": {
+ "desc": "用于用户登录和身份验证"
+ }
+ },
+ "privacy": {
+ "requiredPrivateInfos": ["getPhoneNumber"],
+ "usePrivacyCheck": true
+ },
+ "plugins": {
+ "WechatSI": {
+ "version": "0.3.6",
+ "provider": "wx069ba97219f66d99"
+ }
+ }
+ },
+ "mp-alipay": {
+ "usingComponents": true
+ },
+ "mp-baidu": {
+ "usingComponents": true
+ },
+ "mp-toutiao": {
+ "usingComponents": true,
+ "appid": "ttbbd1cd6c24e1c00801",
+ "setting": {
+ "es6": true,
+ "postcss": true,
+ "minified": true
+ }
+ },
+ "uniStatistics": {
+ "enable": false
+ },
+ "vueVersion": "3",
+ "fallbackLocale": "zh-Hans",
+ "locale": "zh-Hans"
+}
diff --git a/src/package.json b/src/package.json
new file mode 100644
index 0000000..3341673
--- /dev/null
+++ b/src/package.json
@@ -0,0 +1,18 @@
+{
+ "id": "yan-qr",
+ "name": "动态生成二维码",
+ "displayName": "动态生成二维码",
+ "version": "1.0.0",
+ "description": "动态生成二维码",
+ "keywords": [
+ "二维码",
+ "生成二维码",
+ "动态二维码"
+ ],
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/pages.json b/src/pages.json
new file mode 100644
index 0000000..40cac8e
--- /dev/null
+++ b/src/pages.json
@@ -0,0 +1,119 @@
+{
+ "pages": [
+ {
+ "path": "pages/login",
+ "style": {
+ "navigationBarTitleText": "登录"
+ }
+ },
+ {
+ "path": "pages/register",
+ "style": {
+ "navigationBarTitleText": "注册"
+ }
+ },
+ {
+ "path": "pages/index",
+ "style": {
+ "navigationBarTitleText": "小程序管理后台"
+ }
+ },
+ {
+ "path": "pages/work/index",
+ "style": {
+ "navigationBarTitleText": "工作台"
+ }
+ },
+ {
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "我的"
+ }
+ },
+ {
+ "path": "pages/mine/avatar/index",
+ "style": {
+ "navigationBarTitleText": "修改头像"
+ }
+ },
+ {
+ "path": "pages/mine/info/index",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ },
+ {
+ "path": "pages/mine/info/edit",
+ "style": {
+ "navigationBarTitleText": "编辑资料"
+ }
+ },
+ {
+ "path": "pages/mine/pwd/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ },
+ {
+ "path": "pages/mine/setting/index",
+ "style": {
+ "navigationBarTitleText": "应用设置"
+ }
+ },
+ {
+ "path": "pages/mine/help/index",
+ "style": {
+ "navigationBarTitleText": "常见问题"
+ }
+ },
+ {
+ "path": "pages/mine/about/index",
+ "style": {
+ "navigationBarTitleText": "关于我们"
+ }
+ },
+ {
+ "path": "pages/common/webview/index",
+ "style": {
+ "navigationBarTitleText": "浏览网页"
+ }
+ },
+ {
+ "path": "pages/common/textview/index",
+ "style": {
+ "navigationBarTitleText": "浏览文本"
+ }
+ }
+ ],
+ "tabBar": {
+ "color": "#000000",
+ "selectedColor": "#000000",
+ "borderStyle": "white",
+ "backgroundColor": "#ffffff",
+ "list": [
+ {
+ "pagePath": "pages/index",
+ "iconPath": "static/images/tabbar/home.png",
+ "selectedIconPath": "static/images/tabbar/home_.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/work/index",
+ "iconPath": "static/images/tabbar/work.png",
+ "selectedIconPath": "static/images/tabbar/work_.png",
+ "text": "工作台"
+ },
+ {
+ "pagePath": "pages/mine/index",
+ "iconPath": "static/images/tabbar/mine.png",
+ "selectedIconPath": "static/images/tabbar/mine_.png",
+ "text": "我的"
+ }
+ ]
+ },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "小程序管理后台",
+ "navigationBarBackgroundColor": "#FFFFFF"
+ }
+}
diff --git a/src/pages/common/textview/index.vue b/src/pages/common/textview/index.vue
new file mode 100644
index 0000000..e9b05fb
--- /dev/null
+++ b/src/pages/common/textview/index.vue
@@ -0,0 +1,43 @@
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
diff --git a/src/pages/common/webview/index.vue b/src/pages/common/webview/index.vue
new file mode 100644
index 0000000..8388c76
--- /dev/null
+++ b/src/pages/common/webview/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/src/pages/index.vue b/src/pages/index.vue
new file mode 100644
index 0000000..4489eb5
--- /dev/null
+++ b/src/pages/index.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ Hello RuoYi
+
+
+
+
+
diff --git a/src/pages/login.vue b/src/pages/login.vue
new file mode 100644
index 0000000..ce1c95e
--- /dev/null
+++ b/src/pages/login.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+ 若依移动端登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 没有账号?
+ 立即注册
+
+
+ 登录即代表同意
+ 《用户协议》
+ 《隐私协议》
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/about/index.vue b/src/pages/mine/about/index.vue
new file mode 100644
index 0000000..205ada6
--- /dev/null
+++ b/src/pages/mine/about/index.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+ Copyright © 2025 ruoyi.vip All Rights Reserved.
+
+
+
+
+
+
+
diff --git a/src/pages/mine/avatar/index.vue b/src/pages/mine/avatar/index.vue
new file mode 100644
index 0000000..c43806e
--- /dev/null
+++ b/src/pages/mine/avatar/index.vue
@@ -0,0 +1,618 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/help/index.vue b/src/pages/mine/help/index.vue
new file mode 100644
index 0000000..bc2399b
--- /dev/null
+++ b/src/pages/mine/help/index.vue
@@ -0,0 +1,108 @@
+
+
+
+
+ {{ item.title }}
+
+
+
+ {{ child.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/index.vue b/src/pages/mine/index.vue
new file mode 100644
index 0000000..be9435f
--- /dev/null
+++ b/src/pages/mine/index.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+ 交流群
+
+
+
+ 在线客服
+
+
+
+ 反馈社区
+
+
+
+ 点赞我们
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/info/edit.vue b/src/pages/mine/info/edit.vue
new file mode 100644
index 0000000..a145bb5
--- /dev/null
+++ b/src/pages/mine/info/edit.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/info/index.vue b/src/pages/mine/info/index.vue
new file mode 100644
index 0000000..f1eddbd
--- /dev/null
+++ b/src/pages/mine/info/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/pwd/index.vue b/src/pages/mine/pwd/index.vue
new file mode 100644
index 0000000..4074320
--- /dev/null
+++ b/src/pages/mine/pwd/index.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/setting/index.vue b/src/pages/mine/setting/index.vue
new file mode 100644
index 0000000..1215df6
--- /dev/null
+++ b/src/pages/mine/setting/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/register.vue b/src/pages/register.vue
new file mode 100644
index 0000000..a791c87
--- /dev/null
+++ b/src/pages/register.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+ 若依移动端注册
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用已有账号登录
+
+
+
+
+
+
+
diff --git a/src/pages/work/index.vue b/src/pages/work/index.vue
new file mode 100644
index 0000000..4a339d5
--- /dev/null
+++ b/src/pages/work/index.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户管理
+
+
+
+
+
+ 角色管理
+
+
+
+
+
+ 菜单管理
+
+
+
+
+
+ 部门管理
+
+
+
+
+
+ 岗位管理
+
+
+
+
+
+ 字典管理
+
+
+
+
+
+ 参数设置
+
+
+
+
+
+ 通知公告
+
+
+
+
+
+ 日志管理
+
+
+
+
+
+
+
+
+
+
diff --git a/src/permission.js b/src/permission.js
new file mode 100644
index 0000000..cbaec53
--- /dev/null
+++ b/src/permission.js
@@ -0,0 +1,39 @@
+import { getToken } from '@/utils/auth'
+
+// 登录页面
+const loginPage = "/pages/login"
+
+// 页面白名单
+const whiteList = [
+ '/pages/login', '/pages/register', '/pages/common/webview/index'
+]
+
+// 检查地址白名单
+function checkWhite(url) {
+ const path = url.split('?')[0]
+ return whiteList.indexOf(path) !== -1
+}
+
+// 页面跳转验证拦截器
+let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
+list.forEach(item => {
+ uni.addInterceptor(item, {
+ invoke(to) {
+ if (getToken()) {
+ if (to.url === loginPage) {
+ uni.reLaunch({ url: "/" })
+ }
+ return true
+ } else {
+ if (checkWhite(to.url)) {
+ return true
+ }
+ uni.reLaunch({ url: loginPage })
+ return false
+ }
+ },
+ fail(err) {
+ console.log(err)
+ }
+ })
+})
diff --git a/src/plugins/auth.js b/src/plugins/auth.js
new file mode 100644
index 0000000..bdcfd9d
--- /dev/null
+++ b/src/plugins/auth.js
@@ -0,0 +1,60 @@
+import { useUserStore } from '@/store'
+
+function authPermission(permission) {
+ const all_permission = "*:*:*"
+ const permissions = useUserStore().permissions
+ if (permission && permission.length > 0) {
+ return permissions.some(v => {
+ return all_permission === v || v === permission
+ })
+ } else {
+ return false
+ }
+}
+
+function authRole(role) {
+ const super_admin = "admin"
+ const roles = useUserStore().roles
+ if (role && role.length > 0) {
+ return roles.some(v => {
+ return super_admin === v || v === role
+ })
+ } else {
+ return false
+ }
+}
+
+export default {
+ // 验证用户是否具备某权限
+ hasPermi(permission) {
+ return authPermission(permission)
+ },
+ // 验证用户是否含有指定权限,只需包含其中一个
+ hasPermiOr(permissions) {
+ return permissions.some(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否含有指定权限,必须全部拥有
+ hasPermiAnd(permissions) {
+ return permissions.every(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否具备某角色
+ hasRole(role) {
+ return authRole(role)
+ },
+ // 验证用户是否含有指定角色,只需包含其中一个
+ hasRoleOr(roles) {
+ return roles.some(item => {
+ return authRole(item)
+ })
+ },
+ // 验证用户是否含有指定角色,必须全部拥有
+ hasRoleAnd(roles) {
+ return roles.every(item => {
+ return authRole(item)
+ })
+ }
+}
diff --git a/src/plugins/index.js b/src/plugins/index.js
new file mode 100644
index 0000000..74fa5c7
--- /dev/null
+++ b/src/plugins/index.js
@@ -0,0 +1,12 @@
+import tab from './tab'
+import auth from './auth'
+import modal from './modal'
+
+export function install(app) {
+ // 页签操作
+ app.config.globalProperties.$tab = tab
+ // 认证对象
+ app.config.globalProperties.$auth = auth
+ // 模态框对象
+ app.config.globalProperties.$modal = modal
+}
diff --git a/src/plugins/modal.js b/src/plugins/modal.js
new file mode 100644
index 0000000..46af2f5
--- /dev/null
+++ b/src/plugins/modal.js
@@ -0,0 +1,78 @@
+export default {
+ // 消息提示
+ msg(content) {
+ uni.showToast({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 错误消息
+ msgError(content) {
+ uni.showToast({
+ title: content,
+ icon: 'error'
+ })
+ },
+ // 成功消息
+ msgSuccess(content) {
+ uni.showToast({
+ title: content,
+ icon: 'success'
+ })
+ },
+ // 隐藏消息
+ hideMsg(content) {
+ uni.hideToast()
+ },
+ // 弹出提示
+ alert(content, title) {
+ uni.showModal({
+ title: title || '系统提示',
+ content: content,
+ showCancel: false
+ })
+ },
+ // 确认窗体
+ confirm(content, title) {
+ return new Promise((resolve, reject) => {
+ uni.showModal({
+ title: title || '系统提示',
+ content: content,
+ cancelText: '取消',
+ confirmText: '确定',
+ success: function(res) {
+ if (res.confirm) {
+ resolve(res.confirm)
+ }
+ }
+ })
+ })
+ },
+ // 提示信息
+ showToast(option) {
+ if (typeof option === "object") {
+ uni.showToast(option)
+ } else {
+ uni.showToast({
+ title: option,
+ icon: "none",
+ duration: 2500
+ })
+ }
+ },
+ // 打开遮罩层
+ loading(content) {
+ uni.showLoading({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 关闭遮罩层
+ closeLoading() {
+ try {
+ uni.hideLoading()
+ } catch (e) {
+ console.log(e)
+ }
+ }
+}
diff --git a/src/plugins/tab.js b/src/plugins/tab.js
new file mode 100644
index 0000000..5d1b305
--- /dev/null
+++ b/src/plugins/tab.js
@@ -0,0 +1,30 @@
+export default {
+ // 关闭所有页面,打开到应用内的某个页面
+ reLaunch(url) {
+ return uni.reLaunch({
+ url: url
+ })
+ },
+ // 跳转到tabBar页面,并关闭其他所有非tabBar页面
+ switchTab(url) {
+ return uni.switchTab({
+ url: url
+ })
+ },
+ // 关闭当前页面,跳转到应用内的某个页面
+ redirectTo(url) {
+ return uni.redirectTo({
+ url: url
+ })
+ },
+ // 保留当前页面,跳转到应用内的某个页面
+ navigateTo(url) {
+ return uni.navigateTo({
+ url: url
+ })
+ },
+ // 关闭当前页面,返回上一页面或多级页面
+ navigateBack() {
+ return uni.navigateBack()
+ }
+}
diff --git a/src/readme.md b/src/readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/src/static/favicon.ico b/src/static/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6f07782abfc7881a73d3f47a00b761c183e06ff9
GIT binary patch
literal 16958
zcmeI1Z)lW95XSfJqDezYN}8rYBqt&wBDRQ#NH9S}`awjB6cH&RR+IaarXpfR)DlFb
zh=>#s5s}vV!CI~H?vjewAT~$|B0)q%Ob{C+NR$wa5bpYW-n+GzGl`d)Tq3*|=4RjB
z*`1kZW@q=k7~|ourpE9+%gkG0Ot~>;9z>Vf52@ez)Fhev?IPeJ;3D86;3D86;3D86
z;3D86;3D86;3D86;3AMK1foH+JQgzNVqw$JTyN&&O7CRrX%3nX@p%uvKY@CnM03cT
znQXfzT7Og6l;L{_e_Np!&@9ENFH|L#8|$Hr`0cY^U!cbeg`kk)SChPo___Z4ztn|9kuk&0*mkI7e>91WFMsH5xfu5*mkfh9dBF5b3Nj;06R}W
zvR`>_rM4$Rk}X%U^tqnEmN0w108jo8jZ-YY|C&!zo^+VDAGbdNd8
z^X;_r)DI@*&`$c=Az`Yug@I(Bw1mx*OSK;#{bkF-oS&cQFN9>|bU)uK3F~%OJ(^qqrLJGAGu
z?j}2Kc_ipv#X470UaP|ben>-UnGpzi(a@JbHe*Fn9UzC5+C9XQuiVy1usIW{8{7K@^JlQ0
za@YDTZu9&aHjaoZa=PEQ!L1z~Jim+tOpR<#<)$6ens@PGf%V6cQLX$BBjKQWx;|Yd
zvmFh1%A>*Qp=ii=p7nZ&o#LgO&>j-bJE+G+ne*&3;|16`8-55<+!B!HYMn=n-Gpx@
z4ny+X&bJ&pw<71%FSz2M7+k$lo7BzoQONqQaplQrJ71i5?x0V)wQnTT5B-=fGg3Pm
z_D*jKez5rBwu;Xqf$6)McNI$JZP;7@oB6}dMP?SHJu5$NLru_m=#*-BOZ}U9p1BUb
z>)vu2lI^lv_V=Q*-pb;e-u>jW#zo2j;Zb8{n(B%xqam;Mzv3pD2h_%gzi$0xNS;{v
z(KxmjP(O-d4W>9&Z)TIbZ|v9f`I5(vGISQC_h-{)ZPg3a2fOdp{+qL@*v{uU09kx2
z27TbN*UE^;g1*Dx_Bu~kqwlw^GD&djlGBQP5Z_Ar8p0%72vD=@iI+Dvcl^Q
zF|M$F!~&j5&U59D&cY7X?urJdowwstjbq;;>{Kqx7v=6#_I-?Z_#t_O|4ULbPVJ*D
z|0Ul;{y6tV>)VCeiq*tj7^(&ei|$A;f2AFtN*vpCZ?XGYG3&zDk!sD^G+CP~kJ$q|
zGkqc_4j`-jB3!${`6hi+>K&N+qI;qCs^WAXzx#Q=e_iu3eZq&M$fchV!a%jIHB%N}
z3#f%>7!w9szZaZ_eV5Ffn~P`e?|PTfd9SlpdE7_Nj(S#Isx7Ta?QQvEC`UTs$WO4T{jx?SYNFF&i-bdhSAob
zrdEO5HRNLgrwsXcqj(T5-
z&g0no<-4p$O>0d0?9>4A-_sQdO&fAw%4U6R8S%X)oB3mv;Z9SC&UZe8@!kFor2JPN
zv{M&`y)%r}#`i%Ue^mpu=jFf7|C`|YUjM&mEV$#Z-i7)h$A9Yj?_-(&zRTjT-t!gz
z4(OTgk?*@t+1k(VLHZr}6n^X8=}!t3A6C)>7M
z=;z$tsGOJYkn?|mT
z>h3?Q;rsvj_PIZii2MH9HIUD6Nztyo9)_0}?Wx|+aJ;C>-&q~^4OUe72mAvigB6t}
ziG$Cp2ddzFEPuYIgz1R{{GfQ}U`eBR*I@n)@z!{Lm-vl%{($(wME>ADxIf{Gi&rNc
k^WuqwvkX1XGQ;pA^y%ZMhx_%w$M1Y6;?*ghWE1=SFG{UvNdN!<
literal 0
HcmV?d00001
diff --git a/src/static/font/iconfont.css b/src/static/font/iconfont.css
new file mode 100644
index 0000000..afd7102
--- /dev/null
+++ b/src/static/font/iconfont.css
@@ -0,0 +1,90 @@
+@font-face {
+ font-family: "iconfont";
+ src: url('@/static/font/iconfont.ttf') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ display: inline-block;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-user:before {
+ content: "\e7ae";
+}
+
+.icon-password:before {
+ content: "\e8b2";
+}
+
+.icon-code:before {
+ content: "\e699";
+}
+
+.icon-setting:before {
+ content: "\e6cc";
+}
+
+.icon-share:before {
+ content: "\e739";
+}
+
+.icon-edit:before {
+ content: "\e60c";
+}
+
+.icon-version:before {
+ content: "\e63f";
+}
+
+.icon-service:before {
+ content: "\e6ff";
+}
+
+.icon-friendfill:before {
+ content: "\e726";
+}
+
+.icon-community:before {
+ content: "\e741";
+}
+
+.icon-people:before {
+ content: "\e736";
+}
+
+.icon-dianzan:before {
+ content: "\ec7f";
+}
+
+.icon-right:before {
+ content: "\e7eb";
+}
+
+.icon-logout:before {
+ content: "\e61d";
+}
+
+.icon-help:before {
+ content: "\e616";
+}
+
+.icon-github:before {
+ content: "\e628";
+}
+
+.icon-aixin:before {
+ content: "\e601";
+}
+
+.icon-clean:before {
+ content: "\e607";
+}
+
+.icon-refresh:before {
+ content: "\e604";
+}
+
diff --git a/src/static/font/iconfont.ttf b/src/static/font/iconfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..53915cafcb782962308dc5f2bea68bb528f84de4
GIT binary patch
literal 6724
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
literal 0
HcmV?d00001
diff --git a/src/static/images/banner/banner01.jpg b/src/static/images/banner/banner01.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c44d84c908b2bcb048e4dbe438d1f3ff48058f01
GIT binary patch
literal 39640
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