diff --git a/common/config.js b/common/config.js
index 8a35c82..93e2ed3 100644
--- a/common/config.js
+++ b/common/config.js
@@ -24,6 +24,6 @@ const config = {
}
// 设置后台接口服务的基础地址
-config.baseUrl = 'http://192.168.0.104:8080';
+config.baseUrl = 'http://tc.cqsznc.com:7080/api';
export default config;
\ No newline at end of file
diff --git a/common/http.api.js b/common/http.api.js
index 4aa590c..a8c9fce 100644
--- a/common/http.api.js
+++ b/common/http.api.js
@@ -12,11 +12,12 @@ const install = (Vue, vm) => {
login: (params = {}) => vm.$u.post(config.adminPath+'/auth/login', params),
+ getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/system/user/profile', params),
// 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等
lang: (params = {}) => vm.$u.get('/lang/'+params.lang),
index: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index', params),
- getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/user/getUserInfo', params),
+ // getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/user/getUserInfo', params),
// login: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/loginByPassword', params),
sendCode: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/sendCode', params),
registerUser: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/registerUser', params),
diff --git a/common/http.interceptor.js b/common/http.interceptor.js
index 1b0f8e9..a072c2d 100644
--- a/common/http.interceptor.js
+++ b/common/http.interceptor.js
@@ -30,10 +30,10 @@ const install = (Vue, vm) => {
if (!req.header[ajaxHeader]){
req.header[ajaxHeader] = 'json';
}
-
+ console.log('t1', req.url);
// 设定传递 Token 认证参数 aidex
- if (!req.header[sessionIdHeader] && vm.vuex_token){
- req.header[sessionIdHeader] = vm.vuex_token;
+ if (req.url!="/auth/login"&&!req.header[sessionIdHeader] && vm.vuex_token){
+ req.header[sessionIdHeader] = "Bearer "+vm.vuex_token;
}
// 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录 aidex
diff --git a/pages.json b/pages.json
index d0d8ed5..dde8d6e 100644
--- a/pages.json
+++ b/pages.json
@@ -2,207 +2,405 @@
"easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
},
- "pages": [
- {
- "path": "pages/sys/login/index",
- "style": {
- "navigationBarTitleText": "登录"
- }
- },
- {
- "path": "pages/sys/login/forget",
- "style": {
- "navigationBarTitleText": "忘记密码"
- }
- },
- {
- "path": "pages/sys/login/reg",
- "style": {
- "navigationBarTitleText": "注册账号"
- }
- },
- {
- "path": "pages/sys/msg/index",
- "style": {
- "navigationBarTitleText": "消息"
- }
- },
- {
- "path": "pages/sys/msg/form",
- "style": {
- "navigationBarTitleText": "查看详情"
- }
- },
- {
- "path": "pages/sys/home/index",
- "style": {
- "navigationBarTitleText": "工作台",
- "navigationStyle": "custom" // 隐藏系统导航栏
+ //案列页面
+ // "pages": [
+ // {
+ // "path": "pages/sys/login/index",
+ // "style": {
+ // "navigationBarTitleText": "登录"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/login/forget",
+ // "style": {
+ // "navigationBarTitleText": "忘记密码"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/login/reg",
+ // "style": {
+ // "navigationBarTitleText": "注册账号"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/msg/index",
+ // "style": {
+ // "navigationBarTitleText": "消息"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/msg/form",
+ // "style": {
+ // "navigationBarTitleText": "查看详情"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/home/index",
+ // "style": {
+ // "navigationBarTitleText": "工作台",
+ // "navigationStyle": "custom" // 隐藏系统导航栏
- }
- },
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/index",
+ // "style": {
+ // "navigationBarTitleText": "我的",
+ // "navigationBarBackgroundColor":"#5b95ff",
+ // "navigationBarTextStyle": "white"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/info",
+ // "style": {
+ // "navigationBarTitleText": "个人信息"
+ // }
+ // },
+ // {
+ // "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
+ // "style": {
+ // "navigationBarTitleText": "头像裁剪",
+ // "navigationBarBackgroundColor": "#000000"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/help",
+ // "style": {
+ // "navigationBarTitleText": "帮助中心"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/pwd",
+ // "style": {
+ // "navigationBarTitleText": "修改密码"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/setting",
+ // "style": {
+ // "navigationBarTitleText": "系统设置"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/comment",
+ // "style": {
+ // "navigationBarTitleText": "意见反馈"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/about",
+ // "style": {
+ // "navigationBarTitleText": "关于我们"
+ // }
+ // },
+ // {
+ // "path": "pages/testData/form",
+ // "style": {
+ // "navigationBarTitleText": "新增编辑"
+ // }
+ // },
+ // {
+ // "path": "pages/testData/index",
+ // "style": {
+ // "navigationBarTitleText": "增删改查"
+ // }
+ // },
+ // {
+ // "path": "pages/common/webview",
+ // "style": {
+ // "navigationBarTitleText": "浏览网页"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/login/code",
+ // "style": {
+ // "navigationBarTitleText": "验证码"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/login/registerCode",
+ // "style": {
+ // "navigationBarTitleText": "验证码"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/service",
+ // "style": {
+ // "navigationBarTitleText": "联系客服"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/problem",
+ // "style": {
+ // "navigationBarTitleText": "常见问题"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/currency",
+ // "style": {
+ // "navigationBarTitleText": "通用"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/clear-cache",
+ // "style": {
+ // "navigationBarTitleText": "清除缓存"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/workbench/index",
+ // "style": {
+ // "navigationBarTitleText": "工作台"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/book/index",
+ // "style": {
+ // "navigationBarTitleText": "通讯录"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/book/personal-details",
+ // "style": {
+ // "navigationBarTitleText": "详情"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/msg/list-item",
+ // "style": {
+ // "navigationBarTitleText": "列表"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/workbench/add-form",
+ // "style": {
+ // "navigationBarTitleText": "请假申请"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/msg/examine-item",
+ // "style": {
+ // "navigationBarTitleText": "网上报销"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/msg/details",
+ // "style": {
+ // "navigationBarTitleText": "详情"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/user/modify",
+ // "style": {
+ // "navigationBarTitleText": "修改"
+ // }
+ // },
+ // {
+ // "path": "pages/sys/workbench/install",
+ // "style": {
+ // "navigationBarTitleText": "常用设置",
+ // "navigationStyle": "custom" // 隐藏系统导航栏
+ // }
+ // }
+
+ // ],
+ // "tabBar": {
+ // "color": "#333333",
+ // "selectedColor": "#4094ff",
+ // "backgroundColor": "#ffffff",
+ // "borderStyle": "white",
+ // "list": [
+ // {
+ // "pagePath": "pages/sys/msg/index",
+ // "iconPath": "static/aidex/tabbar/msg_1.png",
+ // "selectedIconPath": "static/aidex/tabbar/msg_2.png",
+ // "text": "消息"
+ // },
+ // // {
+ // // "pagePath": "pages/sys/home/index",
+ // // "iconPath": "static/aidex/tabbar/home_1.png",
+ // // "selectedIconPath": "static/aidex/tabbar/home_2.png",
+ // // "text": "首页"
+ // // },
+ // {
+ // "pagePath": "pages/sys/workbench/index",
+ // "iconPath": "static/aidex/tabbar/apply_1.png",
+ // "selectedIconPath": "static/aidex/tabbar/apply_2.png",
+ // "text": "工作台"
+ // },
+ // {
+ // "pagePath": "pages/sys/book/index",
+ // "iconPath": "static/aidex/tabbar/book_1.png",
+ // "selectedIconPath": "static/aidex/tabbar/book_2.png",
+ // "text": "通讯录"
+ // },
+ // {
+ // "pagePath": "pages/sys/user/index",
+ // "iconPath": "static/aidex/tabbar/my_1.png",
+ // "selectedIconPath": "static/aidex/tabbar/my_2.png",
+ // "text": "我的"
+ // }
+ // ]
+ // },
+ "pages":[
{
- "path": "pages/sys/user/index",
+ "path": "pages/sys/login/login",
"style": {
- "navigationBarTitleText": "我的",
- "navigationBarBackgroundColor":"#5b95ff",
- "navigationBarTextStyle": "white"
- }
- },
- {
- "path": "pages/sys/user/info",
- "style": {
- "navigationBarTitleText": "个人信息"
- }
- },
- {
- "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
- "style": {
- "navigationBarTitleText": "头像裁剪",
- "navigationBarBackgroundColor": "#000000"
- }
- },
- {
- "path": "pages/sys/user/help",
- "style": {
- "navigationBarTitleText": "帮助中心"
- }
- },
- {
- "path": "pages/sys/user/pwd",
- "style": {
- "navigationBarTitleText": "修改密码"
- }
- },
- {
- "path": "pages/sys/user/setting",
- "style": {
- "navigationBarTitleText": "系统设置"
- }
- },
- {
- "path": "pages/sys/user/comment",
- "style": {
- "navigationBarTitleText": "意见反馈"
- }
- },
- {
- "path": "pages/sys/user/about",
- "style": {
- "navigationBarTitleText": "关于我们"
- }
- },
- {
- "path": "pages/testData/form",
- "style": {
- "navigationBarTitleText": "新增编辑"
- }
- },
- {
- "path": "pages/testData/index",
- "style": {
- "navigationBarTitleText": "增删改查"
- }
- },
- {
- "path": "pages/common/webview",
- "style": {
- "navigationBarTitleText": "浏览网页"
- }
- },
- {
- "path": "pages/sys/login/code",
- "style": {
- "navigationBarTitleText": "验证码"
- }
- },
- {
- "path": "pages/sys/login/registerCode",
- "style": {
- "navigationBarTitleText": "验证码"
- }
- },
- {
- "path": "pages/sys/user/service",
- "style": {
- "navigationBarTitleText": "联系客服"
- }
- },
- {
- "path": "pages/sys/user/problem",
- "style": {
- "navigationBarTitleText": "常见问题"
- }
- },
- {
- "path": "pages/sys/user/currency",
- "style": {
- "navigationBarTitleText": "通用"
- }
- },
- {
- "path": "pages/sys/user/clear-cache",
- "style": {
- "navigationBarTitleText": "清除缓存"
- }
- },
- {
- "path": "pages/sys/workbench/index",
- "style": {
- "navigationBarTitleText": "工作台"
- }
- },
- {
- "path": "pages/sys/book/index",
- "style": {
- "navigationBarTitleText": "通讯录"
- }
- },
- {
- "path": "pages/sys/book/personal-details",
- "style": {
- "navigationBarTitleText": "详情"
- }
- },
- {
- "path": "pages/sys/msg/list-item",
- "style": {
- "navigationBarTitleText": "列表"
- }
- },
- {
- "path": "pages/sys/workbench/add-form",
- "style": {
- "navigationBarTitleText": "请假申请"
- }
- },
- {
- "path": "pages/sys/msg/examine-item",
- "style": {
- "navigationBarTitleText": "网上报销"
- }
- },
- {
- "path": "pages/sys/msg/details",
- "style": {
- "navigationBarTitleText": "详情"
- }
- },
- {
- "path": "pages/sys/user/modify",
- "style": {
- "navigationBarTitleText": "修改"
- }
- },
- {
- "path": "pages/sys/workbench/install",
- "style": {
- "navigationBarTitleText": "常用设置",
+ "navigationBarTitleText": "登录",
"navigationStyle": "custom" // 隐藏系统导航栏
}
+ },
+
+ {
+ "path": "pages/sys/home/home",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/workbench/workbench",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/user/mine",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/user/changeInfo/changeInfo",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/user/message/message",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/user/serviceCenter/serviceCenter",
+ "style": {
+ "navigationBarTitleText": "服务中心"
+ }
+ },
+ {
+ "path": "pages/sys/user/serviceCenter/questionDetail",
+ "style": {
+ "navigationBarTitleText": "服务中心"
+ }
+ },
+ {
+ "path": "pages/sys/user/myVisitor/myVisitor",
+ "style": {
+ "navigationBarTitleText": "我的访客"
+ }
+ },
+ {
+ "path": "pages/sys/user/myVisitor/creatVisitor",
+ "style": {
+ "navigationBarTitleText": "发起邀约"
+ }
+ },
+ {
+ "path": "pages/sys/user/myVisitor/visitorInfo",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myPayment/myPayment",
+ "style" :
+ {
+ "navigationBarTitleText": "停车缴费"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myPayment/paymentRecords",
+ "style" :
+ {
+ "navigationBarTitleText": "缴费记录"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myRepair/myRepair",
+ "style" :
+ {
+ "navigationBarTitleText": "报事报修"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myRepair/addRepair",
+ "style" :
+ {
+ "navigationBarTitleText": "新增"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myRepair/repaired",
+ "style" :
+ {
+ "navigationStyle" : "custom"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myRepair/repairEvaluate",
+ "style" :
+ {
+ "navigationBarTitleText": "服务评价"
+ }
+ },
+ {
+ "path" : "pages/sys/user/myRecord/myRecord",
+ "style" :
+ {
+ "navigationStyle" : "custom"
+ }
+ },
+ {
+ "path" : "pages/sys/workbench/oa/oa",
+ "style" :
+ {
+ "navigationStyle" : "custom"
+ }
+ },
+
+ {
+ "path" : "pages/sys/workbench/oa/oaDetail",
+ "style" :
+ {
+ "navigationStyle" : "custom"
+ }
}
-
],
+ "tabBar": {
+ "color": "#232323",
+ "selectedColor": "#0652FF",
+ "backgroundColor": "#fff",
+ "borderStyle": "black",
+ "list": [{
+ "pagePath": "pages/sys/home/home",
+ "iconPath": "static/ic_main_home.png",
+ "selectedIconPath": "static/ic_main_home_selected.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/sys/workbench/workbench",
+ "iconPath": "static/ic_main_work.png",
+ "selectedIconPath": "static/ic_main_work_selected.png",
+ "text": "工作台"
+ },
+ {
+ "pagePath": "pages/sys/user/mine",
+ "iconPath": "static/ic_main_mine.png",
+ "selectedIconPath": "/static/ic_main_mine_selected.png",
+ "text": "我的"
+ }
+ ]
+ },
"subPackages": [
],
@@ -213,43 +411,5 @@
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Aidex",
"navigationBarBackgroundColor": "#ffffff"
- },
- "tabBar": {
- "color": "#333333",
- "selectedColor": "#4094ff",
- "backgroundColor": "#ffffff",
- "borderStyle": "white",
- "list": [
- {
- "pagePath": "pages/sys/msg/index",
- "iconPath": "static/aidex/tabbar/msg_1.png",
- "selectedIconPath": "static/aidex/tabbar/msg_2.png",
- "text": "消息"
- },
- // {
- // "pagePath": "pages/sys/home/index",
- // "iconPath": "static/aidex/tabbar/home_1.png",
- // "selectedIconPath": "static/aidex/tabbar/home_2.png",
- // "text": "首页"
- // },
- {
- "pagePath": "pages/sys/workbench/index",
- "iconPath": "static/aidex/tabbar/apply_1.png",
- "selectedIconPath": "static/aidex/tabbar/apply_2.png",
- "text": "工作台"
- },
- {
- "pagePath": "pages/sys/book/index",
- "iconPath": "static/aidex/tabbar/book_1.png",
- "selectedIconPath": "static/aidex/tabbar/book_2.png",
- "text": "通讯录"
- },
- {
- "pagePath": "pages/sys/user/index",
- "iconPath": "static/aidex/tabbar/my_1.png",
- "selectedIconPath": "static/aidex/tabbar/my_2.png",
- "text": "我的"
- }
- ]
}
}
diff --git a/pages/sys/home/home.vue b/pages/sys/home/home.vue
new file mode 100644
index 0000000..d924f6d
--- /dev/null
+++ b/pages/sys/home/home.vue
@@ -0,0 +1,409 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+ 头条
+
+ {{ item }}
+
+ ›
+
+
+
+
+ 热门活动
+ 全部热门活动 >
+
+
+
+
+
+ #热门活动
+ {{ item.title }}
+
+ {{ item.date }}
+ 进行中
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/login/login.vue b/pages/sys/login/login.vue
new file mode 100644
index 0000000..b79aab1
--- /dev/null
+++ b/pages/sys/login/login.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 同意
+ 《用户协议》
+ 和
+ 《隐私政策》
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/msg/form.vue b/pages/sys/msg/form.vue
index 31e5fd3..b9a1a3a 100644
--- a/pages/sys/msg/form.vue
+++ b/pages/sys/msg/form.vue
@@ -70,7 +70,7 @@ page {
overflow: hidden;
font-size: 30rpx;
line-height: 50rpx;
- /deep/ p {
+ ::v-deep p {
margin-bottom: 20rpx;
text-indent: 60rpx;
}
diff --git a/pages/sys/user/changeInfo/changeInfo.vue b/pages/sys/user/changeInfo/changeInfo.vue
new file mode 100644
index 0000000..cb487a4
--- /dev/null
+++ b/pages/sys/user/changeInfo/changeInfo.vue
@@ -0,0 +1,236 @@
+
+
+
+ 完善你的资料
+ 让大家更好地了解你
+
+
+
+
+
+
+
+ 取个昵称
+
+
+
+
+ 随机
+
+
+ 你的手机号
+
+
+
+
+ 你的性别(不可修改)
+
+
+
+
+
+
+
+
+ 部门生活服务部
+ 岗位客服
+ 工号A10235
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/clear-cache.vue b/pages/sys/user/clear-cache.vue
index 6460ce6..d9fcd25 100644
--- a/pages/sys/user/clear-cache.vue
+++ b/pages/sys/user/clear-cache.vue
@@ -39,7 +39,7 @@ page {
background-color: #f8f8f8;
}
-/deep/ .u-cell-title {
+::v-deep .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
diff --git a/pages/sys/user/currency.vue b/pages/sys/user/currency.vue
index 371e192..d150f73 100644
--- a/pages/sys/user/currency.vue
+++ b/pages/sys/user/currency.vue
@@ -77,7 +77,7 @@ page {
background-color: #f8f8f8;
}
-/deep/ .u-cell-title {
+::v-deep .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
diff --git a/pages/sys/user/message/message.vue b/pages/sys/user/message/message.vue
new file mode 100644
index 0000000..82a19d0
--- /dev/null
+++ b/pages/sys/user/message/message.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+ 消息中心
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.time }}
+
+ {{ item.desc }}
+
+
+
+
+
+
+ 暂无更多消息
+
+
+
+
+
+
+
+
diff --git a/pages/sys/user/mine.vue b/pages/sys/user/mine.vue
new file mode 100644
index 0000000..a4d34b6
--- /dev/null
+++ b/pages/sys/user/mine.vue
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myPayment/myPayment.vue b/pages/sys/user/myPayment/myPayment.vue
new file mode 100644
index 0000000..536a1a2
--- /dev/null
+++ b/pages/sys/user/myPayment/myPayment.vue
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+ 你还未绑定车牌哦~
+ 现在去绑定
+
+
+
+
+
+
+ {{ carInfo.number }}
+ {{ carInfo.status }}
+
+ {{ carInfo.addr }}
+
+
+ 停放时长
+ {{ carInfo.duration }}
+
+
+ 预计费用
+ ¥{{ carInfo.fee }}
+
+
+
+
+
+ 缴费标准
+
+
+ 缴费记录
+
+
+
+
+
+
+
+
+
+ 输入车牌号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择省份简称
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myPayment/paymentRecords.vue b/pages/sys/user/myPayment/paymentRecords.vue
new file mode 100644
index 0000000..ce64e4f
--- /dev/null
+++ b/pages/sys/user/myPayment/paymentRecords.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+ {{ item.car }}
+ ¥{{ item.fee }}
+
+ {{ item.time }}——{{ item.time }}
+
+
+
+
+
+ 有疑问请联系客服
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myRecord/myRecord.vue b/pages/sys/user/myRecord/myRecord.vue
new file mode 100644
index 0000000..ef8e8ca
--- /dev/null
+++ b/pages/sys/user/myRecord/myRecord.vue
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+ 17
+ 出勤天数
+
+
+ 2
+ 迟到
+
+
+ 1
+ 早退
+
+
+ 0
+ 补卡
+
+
+
+
+
+
+ {{ day }}
+
+
+
+ {{ date.value }}
+
+
+
+
+
+ {{ date.value }}
+
+
+
+
+ {{ calendarExpanded ? '收起' : '展开' }}
+
+
+
+
+
+ 固定班次
+
+
+
+
+ 应上班 09:00
+
+
+ 已请假 09:00—12:00
+
+
+
+
+
+
+ 应下班 18:00
+
+
+ 已打卡 18:02:18
+ @某综合服务中心1栋
+
+
+
+
+
+
+
+
+
diff --git a/pages/sys/user/myRecord/myRecord2.vue b/pages/sys/user/myRecord/myRecord2.vue
new file mode 100644
index 0000000..d29fa68
--- /dev/null
+++ b/pages/sys/user/myRecord/myRecord2.vue
@@ -0,0 +1,405 @@
+
+
+
+
+
+
+
+
+
+
+
+ 17
+ 出勤天数
+
+
+ 2
+ 迟到
+
+
+ 1
+ 早退
+
+
+ 0
+ 补卡
+
+
+
+
+
+
+ {{ day }}
+
+
+
+ {{ date.value }}
+
+
+
+
+
+ {{ date.value }}
+
+
+
+
+ {{ calendarExpanded ? '收起' : '展开' }}
+
+
+
+
+
+ 固定班次
+
+
+
+
+ 应上班 09:00
+
+
+ 已请假 09:00—12:00
+
+
+
+
+
+
+ 应下班 18:00
+
+
+ 已打卡 18:02:18
+ @某综合服务中心1栋
+
+
+
+
+
+
+
+
+
diff --git a/pages/sys/user/myRepair/addRepair.vue b/pages/sys/user/myRepair/addRepair.vue
new file mode 100644
index 0000000..e5f1cdd
--- /dev/null
+++ b/pages/sys/user/myRepair/addRepair.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+ 请选择房屋所在地址
+
+
+
+ 详细地址
+ 例1栋2单元101室1
+
+
+
+
+ 报事报修
+
+ {{ item }}
+
+ 其他服务
+
+ {{ item }}
+
+
+
+
+
+ 问题详情 (非必填)
+
+
+
+
+ 上传照片 (非必填,最多三张)
+
+
+
+ +
+ 上传图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myRepair/myRepair.vue b/pages/sys/user/myRepair/myRepair.vue
new file mode 100644
index 0000000..5dbbd87
--- /dev/null
+++ b/pages/sys/user/myRepair/myRepair.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工单号:{{ item.no }}
+ {{ item.statusText }}
+
+
+ 建立时间:{{ item.time }}
+ 报事内容:{{ item.content }}
+ 报事位置:{{ item.addr }}
+ 服务评价
+
+
+
+
+
+
+
+
+ 报事详情
+
+
+
+
+
+
+
+
+
+
+ {{ step }}
+
+
+ 建立时间:{{ detailItem.time }}
+ 报事内容:{{ detailItem.content }}
+ 报事位置:{{ detailItem.addr }}
+
+
+
+
+
+
+
+
+
+
+/* 让服务评价按钮靠右 */
+.eval-btn-right {
+ margin-left: auto;
+ display: block;
+ width: fit-content;
+}
\ No newline at end of file
diff --git a/pages/sys/user/myRepair/repairEvaluate.vue b/pages/sys/user/myRepair/repairEvaluate.vue
new file mode 100644
index 0000000..e06763d
--- /dev/null
+++ b/pages/sys/user/myRepair/repairEvaluate.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+ 服务评价
+
+
+
+
+ - 具体说说看 -
+
+ 专业性
+
+
+
+
+
+ 服务态度
+
+
+
+
+
+ 时效性
+
+
+
+
+
+
+ - 选择或自定义任一标签 -
+
+ {{ tag }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myRepair/repaired.vue b/pages/sys/user/myRepair/repaired.vue
new file mode 100644
index 0000000..5d48a06
--- /dev/null
+++ b/pages/sys/user/myRepair/repaired.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+ 查看进度
+
+
+
+
+
+
+ 提交成功
+ 提交成功后我们将及时为您服务
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myVisitor/creatVisitor.vue b/pages/sys/user/myVisitor/creatVisitor.vue
new file mode 100644
index 0000000..0e3e364
--- /dev/null
+++ b/pages/sys/user/myVisitor/creatVisitor.vue
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+ 访客信息
+
+ 上传正脸照
+
+
+
+
+
+
+
+
+ 选择来访目的
+
+ {{ item }}
+
+
+
+ {{ form.room || '请选择访问楼栋及房间号' }}
+ >
+
+
+
+
+ 来访时间
+
+ {{ item }}
+
+
+
+
+
+ 是否预约车位
+
+
+ 是
+
+
+
+ 否
+
+
+ 50/100
+
+
+
+ {{ form.carNumber || '请选择车牌号' }}
+ >
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myVisitor/myVisitor.vue b/pages/sys/user/myVisitor/myVisitor.vue
new file mode 100644
index 0000000..c26764a
--- /dev/null
+++ b/pages/sys/user/myVisitor/myVisitor.vue
@@ -0,0 +1,460 @@
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+ {{ item.type }}
+ {{ item.status }}
+
+ {{ item.name }}
+ {{ item.phone }}
+
+ {{ item.address }}
+
+ {{ item.time }}
+
+
+
+
+
+
+
+ 访客详情
+
+
+
+ {{ detailData.name }} {{ detailData.phone }}
+ {{ detailData.idCard || '5021119740208****' }}
+ 车牌号:{{ detailData.carNumber || '渝A·H1455' }}
+ 来访时间:{{ detailData.time }}
+ 访问地址:{{ detailData.address || '服务中心1栋8楼6871' }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/myVisitor/visitorInfo.vue b/pages/sys/user/myVisitor/visitorInfo.vue
new file mode 100644
index 0000000..b3b77ac
--- /dev/null
+++ b/pages/sys/user/myVisitor/visitorInfo.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
+ 预约申请
+
+
+
+ 访客信息
+
+ 人脸照片
+
+ 张桂花
+ 13254789579
+ 5021119740214****
+
+
+
+ 选择来访目的
+
+ 园区参观
+ 综合服务中心1栋8023
+
+
+
+
+ 来访时间
+ 今天(2025-07-04)
+
+
+
+
+ 是否预约车位
+
+
+ 是
+
+
+
+ 否
+
+
+ 50/100
+
+
+ 渝A-V1254
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/problem.vue b/pages/sys/user/problem.vue
index 6c148fb..440b4c0 100644
--- a/pages/sys/user/problem.vue
+++ b/pages/sys/user/problem.vue
@@ -69,7 +69,7 @@ page {
background-color: #f5f5f5;
}
-/deep/ .u-cell-title {
+::v-deep .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
diff --git a/pages/sys/user/serviceCenter/questionDetail.vue b/pages/sys/user/serviceCenter/questionDetail.vue
new file mode 100644
index 0000000..02dd046
--- /dev/null
+++ b/pages/sys/user/serviceCenter/questionDetail.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ 包月停车、临时停车的办理流程及收费标准
+
+
+
+
+
+ 您好:本项目只有8组团为包月停车,办理流程为:业主携带身份证至物业客户中心前台办理,租户带租赁合同和身份证到前台办理即可;5,6,7,9,10,11组团无包月停车,无需办理包月停车手续;临时停车无需办理。5,6组团为私家车位,无需收费。8组团包月停车的收费标准为:500元/8组团临时停车的收费标准为:小区内9,10,11组团临时停车的收费标准为:二轮车:每小时1元,12小时内5元/次,24小时内10元/次;小型车:每小时3元,12小时内10元/次,24小时内20元/次;大型车:每小时4元,12小时内15元/次,24小时内25元/次
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/serviceCenter/serviceCenter.vue b/pages/sys/user/serviceCenter/serviceCenter.vue
new file mode 100644
index 0000000..fcd96f7
--- /dev/null
+++ b/pages/sys/user/serviceCenter/serviceCenter.vue
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+ 常见问题
+
+
+ {{ item }}
+
+
+ - 到底了 -
+
+
+
+
+
+
+
+
+ 023—950888
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/user/setting.vue b/pages/sys/user/setting.vue
index b83d70d..0c29ef2 100644
--- a/pages/sys/user/setting.vue
+++ b/pages/sys/user/setting.vue
@@ -72,7 +72,7 @@ page {
background-color: #f5f5f5;
}
-/deep/ .u-cell-title {
+::v-deep .u-cell-title {
padding: 25rpx 30rpx;
font-size: 30rpx;
}
diff --git a/pages/sys/workbench/oa/oa.vue b/pages/sys/workbench/oa/oa.vue
new file mode 100644
index 0000000..72411a9
--- /dev/null
+++ b/pages/sys/workbench/oa/oa.vue
@@ -0,0 +1,443 @@
+
+
+
+
+
+ 申批中心
+
+
+
+
+
+ 申批名称、内容、发起人、编号
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+ {{ item.type }}
+ {{ item.status }}
+
+
+ 请假类型:{{ item.leaveType }}
+
+ 开始时间:{{ item.startTime }}
+
+
+ 结束时间:{{ item.endTime }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/sys/workbench/oa/oaDetail.vue b/pages/sys/workbench/oa/oaDetail.vue
new file mode 100644
index 0000000..0cd7a84
--- /dev/null
+++ b/pages/sys/workbench/oa/oaDetail.vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 余
+
+ 余永乐
+ 数据开发及研发部
+
+
+
+
+ 提交时间:7月16日 18:36:44
+
+
+
+
+
+ 申批详情
+
+
+ 假期类型
+ 病假
+
+
+
+ 开始时间
+ 2025-07-15
+
+
+
+ 结束时间
+ 2025-07-17
+
+
+
+ 时长
+ 2天
+
+
+
+ 请假事由
+ 由于腿儿过大,需要到医院进行检查
+
+
+
+ 附件
+
+
+
+
+
+ 174568963.jpg
+ 289.14 KB
+
+
+
+
+
+
+
+ 申批记录
+
+
+
+
+
+
+
+ 提交
+
+ 余
+ 余永乐
+ 已提交
+
+ 07-12 18:28:22
+
+
+
+
+
+
+
+
+
+ 审批
+
+ 张
+ 张桂花
+ 已同意
+
+ 07-12 18:28:22
+
+
+
+
+
+
+
+
+
+ 审批
+
+ 张
+ 张桂花
+ 已批准
+
+ 07-12 18:28:22
+
+
+
+
+
+
+
+
+ 结束
+ 07-12 18:28:22
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/workbench/workbench.vue b/pages/sys/workbench/workbench.vue
new file mode 100644
index 0000000..d149e46
--- /dev/null
+++ b/pages/sys/workbench/workbench.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+ 全部应用
+
+ {{ tab }}
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/ic_add_repair_01.png b/static/ic_add_repair_01.png
new file mode 100644
index 0000000..26f2fd2
Binary files /dev/null and b/static/ic_add_repair_01.png differ
diff --git a/static/ic_arrow_gray.webp b/static/ic_arrow_gray.webp
new file mode 100644
index 0000000..d989ef6
Binary files /dev/null and b/static/ic_arrow_gray.webp differ
diff --git a/static/ic_back.png b/static/ic_back.png
new file mode 100644
index 0000000..9153b8a
Binary files /dev/null and b/static/ic_back.png differ
diff --git a/static/ic_back_white.webp b/static/ic_back_white.webp
new file mode 100644
index 0000000..4dd5bc9
Binary files /dev/null and b/static/ic_back_white.webp differ
diff --git a/static/ic_close_01.png b/static/ic_close_01.png
new file mode 100644
index 0000000..2d528fb
Binary files /dev/null and b/static/ic_close_01.png differ
diff --git a/static/ic_evaluate_disselect.png b/static/ic_evaluate_disselect.png
new file mode 100644
index 0000000..127f7a6
Binary files /dev/null and b/static/ic_evaluate_disselect.png differ
diff --git a/static/ic_evaluate_select.png b/static/ic_evaluate_select.png
new file mode 100644
index 0000000..cf2c943
Binary files /dev/null and b/static/ic_evaluate_select.png differ
diff --git a/static/ic_i_c_01.png b/static/ic_i_c_01.png
new file mode 100644
index 0000000..9b5ca77
Binary files /dev/null and b/static/ic_i_c_01.png differ
diff --git a/static/ic_i_c_02.png b/static/ic_i_c_02.png
new file mode 100644
index 0000000..271b1c9
Binary files /dev/null and b/static/ic_i_c_02.png differ
diff --git a/static/ic_i_c_03.png b/static/ic_i_c_03.png
new file mode 100644
index 0000000..3724d92
Binary files /dev/null and b/static/ic_i_c_03.png differ
diff --git a/static/ic_i_c_bg.png b/static/ic_i_c_bg.png
new file mode 100644
index 0000000..b4e6d92
Binary files /dev/null and b/static/ic_i_c_bg.png differ
diff --git a/static/ic_login_agree.png b/static/ic_login_agree.png
new file mode 100644
index 0000000..6b6bec1
Binary files /dev/null and b/static/ic_login_agree.png differ
diff --git a/static/ic_login_code.png b/static/ic_login_code.png
new file mode 100644
index 0000000..9a5207e
Binary files /dev/null and b/static/ic_login_code.png differ
diff --git a/static/ic_login_dis.png b/static/ic_login_dis.png
new file mode 100644
index 0000000..d1e7dea
Binary files /dev/null and b/static/ic_login_dis.png differ
diff --git a/static/ic_login_phone.png b/static/ic_login_phone.png
new file mode 100644
index 0000000..d126626
Binary files /dev/null and b/static/ic_login_phone.png differ
diff --git a/static/ic_login_topbg.png b/static/ic_login_topbg.png
new file mode 100644
index 0000000..6999a37
Binary files /dev/null and b/static/ic_login_topbg.png differ
diff --git a/static/ic_main_home.png b/static/ic_main_home.png
new file mode 100644
index 0000000..04a541d
Binary files /dev/null and b/static/ic_main_home.png differ
diff --git a/static/ic_main_home_selected.png b/static/ic_main_home_selected.png
new file mode 100644
index 0000000..5888520
Binary files /dev/null and b/static/ic_main_home_selected.png differ
diff --git a/static/ic_main_mine.png b/static/ic_main_mine.png
new file mode 100644
index 0000000..99ac991
Binary files /dev/null and b/static/ic_main_mine.png differ
diff --git a/static/ic_main_mine_selected.png b/static/ic_main_mine_selected.png
new file mode 100644
index 0000000..2c3886d
Binary files /dev/null and b/static/ic_main_mine_selected.png differ
diff --git a/static/ic_main_work.png b/static/ic_main_work.png
new file mode 100644
index 0000000..e745085
Binary files /dev/null and b/static/ic_main_work.png differ
diff --git a/static/ic_main_work_selected.png b/static/ic_main_work_selected.png
new file mode 100644
index 0000000..ab81d1d
Binary files /dev/null and b/static/ic_main_work_selected.png differ
diff --git a/static/ic_mine_check.png b/static/ic_mine_check.png
new file mode 100644
index 0000000..aa8a9f0
Binary files /dev/null and b/static/ic_mine_check.png differ
diff --git a/static/ic_mine_head.png b/static/ic_mine_head.png
new file mode 100644
index 0000000..0969b89
Binary files /dev/null and b/static/ic_mine_head.png differ
diff --git a/static/ic_mine_info.png b/static/ic_mine_info.png
new file mode 100644
index 0000000..05d3cfd
Binary files /dev/null and b/static/ic_mine_info.png differ
diff --git a/static/ic_mine_notice.png b/static/ic_mine_notice.png
new file mode 100644
index 0000000..855f01a
Binary files /dev/null and b/static/ic_mine_notice.png differ
diff --git a/static/ic_mine_pay.png b/static/ic_mine_pay.png
new file mode 100644
index 0000000..d5381c1
Binary files /dev/null and b/static/ic_mine_pay.png differ
diff --git a/static/ic_mine_pwd.png b/static/ic_mine_pwd.png
new file mode 100644
index 0000000..3d70be1
Binary files /dev/null and b/static/ic_mine_pwd.png differ
diff --git a/static/ic_mine_repair.png b/static/ic_mine_repair.png
new file mode 100644
index 0000000..d4699e4
Binary files /dev/null and b/static/ic_mine_repair.png differ
diff --git a/static/ic_mine_setting.png b/static/ic_mine_setting.png
new file mode 100644
index 0000000..9ff10a4
Binary files /dev/null and b/static/ic_mine_setting.png differ
diff --git a/static/ic_mine_setting2.png b/static/ic_mine_setting2.png
new file mode 100644
index 0000000..a1fe503
Binary files /dev/null and b/static/ic_mine_setting2.png differ
diff --git a/static/ic_mine_topbg.png b/static/ic_mine_topbg.png
new file mode 100644
index 0000000..42b8b82
Binary files /dev/null and b/static/ic_mine_topbg.png differ
diff --git a/static/ic_mine_version.png b/static/ic_mine_version.png
new file mode 100644
index 0000000..722e20d
Binary files /dev/null and b/static/ic_mine_version.png differ
diff --git a/static/ic_mine_visitor.png b/static/ic_mine_visitor.png
new file mode 100644
index 0000000..3695df2
Binary files /dev/null and b/static/ic_mine_visitor.png differ
diff --git a/static/ic_msg.png b/static/ic_msg.png
new file mode 100644
index 0000000..9347d7b
Binary files /dev/null and b/static/ic_msg.png differ
diff --git a/static/ic_msg_01.png b/static/ic_msg_01.png
new file mode 100644
index 0000000..4ace5c8
Binary files /dev/null and b/static/ic_msg_01.png differ
diff --git a/static/ic_msg_empty.png b/static/ic_msg_empty.png
new file mode 100644
index 0000000..2a0a28f
Binary files /dev/null and b/static/ic_msg_empty.png differ
diff --git a/static/ic_my_payment_01.png b/static/ic_my_payment_01.png
new file mode 100644
index 0000000..01bf455
Binary files /dev/null and b/static/ic_my_payment_01.png differ
diff --git a/static/ic_my_payment_02.png b/static/ic_my_payment_02.png
new file mode 100644
index 0000000..fcade01
Binary files /dev/null and b/static/ic_my_payment_02.png differ
diff --git a/static/ic_my_repair_01.png b/static/ic_my_repair_01.png
new file mode 100644
index 0000000..ebcc177
Binary files /dev/null and b/static/ic_my_repair_01.png differ
diff --git a/static/ic_my_repair_02.png b/static/ic_my_repair_02.png
new file mode 100644
index 0000000..91dbc6a
Binary files /dev/null and b/static/ic_my_repair_02.png differ
diff --git a/static/ic_my_repair_03.png b/static/ic_my_repair_03.png
new file mode 100644
index 0000000..c0ddc00
Binary files /dev/null and b/static/ic_my_repair_03.png differ
diff --git a/static/ic_my_visitor_01.png b/static/ic_my_visitor_01.png
new file mode 100644
index 0000000..8aa32dc
Binary files /dev/null and b/static/ic_my_visitor_01.png differ
diff --git a/static/ic_my_visitor_02.png b/static/ic_my_visitor_02.png
new file mode 100644
index 0000000..8d07095
Binary files /dev/null and b/static/ic_my_visitor_02.png differ
diff --git a/static/ic_payment_record_01.png b/static/ic_payment_record_01.png
new file mode 100644
index 0000000..e36487d
Binary files /dev/null and b/static/ic_payment_record_01.png differ
diff --git a/static/ic_repaired_01.png b/static/ic_repaired_01.png
new file mode 100644
index 0000000..a064d23
Binary files /dev/null and b/static/ic_repaired_01.png differ
diff --git a/static/ic_s_c_01.png b/static/ic_s_c_01.png
new file mode 100644
index 0000000..2445486
Binary files /dev/null and b/static/ic_s_c_01.png differ
diff --git a/static/ic_s_c_02.png b/static/ic_s_c_02.png
new file mode 100644
index 0000000..6b6fe3b
Binary files /dev/null and b/static/ic_s_c_02.png differ
diff --git a/static/ic_scan.png b/static/ic_scan.png
new file mode 100644
index 0000000..22c7981
Binary files /dev/null and b/static/ic_scan.png differ
diff --git a/static/ic_search.png b/static/ic_search.png
new file mode 100644
index 0000000..883a3b4
Binary files /dev/null and b/static/ic_search.png differ
diff --git a/static/ic_search_gray.png b/static/ic_search_gray.png
new file mode 100644
index 0000000..a92defb
Binary files /dev/null and b/static/ic_search_gray.png differ
diff --git a/static/ic_share_w.png b/static/ic_share_w.png
new file mode 100644
index 0000000..fe36077
Binary files /dev/null and b/static/ic_share_w.png differ
diff --git a/static/ic_tq.png b/static/ic_tq.png
new file mode 100644
index 0000000..7546cd6
Binary files /dev/null and b/static/ic_tq.png differ
diff --git a/static/ic_work_01.png b/static/ic_work_01.png
new file mode 100644
index 0000000..d41d4f4
Binary files /dev/null and b/static/ic_work_01.png differ
diff --git a/static/logo.png b/static/logo.png
new file mode 100644
index 0000000..b5771e2
Binary files /dev/null and b/static/logo.png differ
diff --git a/utils/mediaSelector.README.md b/utils/mediaSelector.README.md
new file mode 100644
index 0000000..ef91089
--- /dev/null
+++ b/utils/mediaSelector.README.md
@@ -0,0 +1,144 @@
+# 媒体选择器工具类 (MediaSelector)
+
+这是一个用于在uni-app项目中选择本地图片和视频的工具类,提供了统一的接口和灵活的配置选项。
+
+## 功能特点
+
+- 支持选择图片、视频或让用户选择图片/视频
+- 支持设置选择数量
+- 支持设置是否压缩
+- 支持图片裁剪
+- 支持设置视频最大时长
+- 支持设置使用的摄像头(前置/后置)
+- 支持设置允许的文件扩展名
+- 提供媒体预览功能
+
+## 安装和使用
+
+### 1. 导入工具类
+
+```javascript
+import MediaSelector, { MediaType } from '@/utils/mediaSelector';
+```
+
+### 2. 选择图片
+
+```javascript
+// 选择最多9张图片
+const images = await MediaSelector.choose({
+ type: MediaType.IMAGE,
+ count: 9,
+ compressed: true,
+ crop: false
+});
+
+console.log('选择的图片:', images);
+```
+
+### 3. 选择视频
+
+```javascript
+// 选择最多1个视频
+const videos = await MediaSelector.choose({
+ type: MediaType.VIDEO,
+ count: 1,
+ compressed: true,
+ videoMaxDuration: 60 // 最长60秒
+});
+
+console.log('选择的视频:', videos);
+```
+
+### 4. 选择图片或视频(用户可选择)
+
+```javascript
+// 让用户选择图片或视频
+const media = await MediaSelector.choose({
+ type: MediaType.BOTH,
+ count: 5
+});
+
+console.log('选择的媒体:', media);
+```
+
+### 5. 预览媒体
+
+```javascript
+// 预览媒体(自动判断类型)
+if (media.length > 0) {
+ MediaSelector.preview(media[0].path, media[0].type);
+}
+```
+
+## API 文档
+
+### MediaType 枚举
+
+```javascript
+export const MediaType = {
+ IMAGE: 'image', // 图片
+ VIDEO: 'video', // 视频
+ BOTH: 'both' // 图片和视频
+};
+```
+
+### MediaSelector.choose(options)
+
+选择媒体文件(图片或视频)。
+
+#### 参数
+
+| 参数名 | 类型 | 默认值 | 说明 |
+| --- | --- | --- | --- |
+| options.type | string | 'image' | 媒体类型,可选值:'image'、'video'、'both' |
+| options.count | number | 9 | 最大选择数量 |
+| options.imageExtensions | Array | ['png', 'jpg', 'jpeg', 'gif', 'webp'] | 图片扩展名 |
+| options.videoExtensions | Array | ['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv'] | 视频扩展名 |
+| options.compressed | boolean | true | 是否压缩所选文件 |
+| options.crop | boolean | false | 是否裁剪(仅对图片有效) |
+| options.videoMaxDuration | number | 60 | 拍摄视频最长拍摄时间,单位秒 |
+| options.camera | string | 'back' | 使用的摄像头,可选值:'back'、'front' |
+
+#### 返回值
+
+返回一个Promise,解析为选择的媒体文件数组。每个媒体文件对象包含以下属性:
+
+- **图片对象属性**:
+ - path: 文件路径
+ - size: 文件大小(字节)
+ - name: 文件名
+ - type: 媒体类型('image')
+ - extension: 文件扩展名
+ - createTime: 创建时间戳
+
+- **视频对象属性**:
+ - path: 文件路径
+ - size: 文件大小(字节)
+ - duration: 视频时长(秒)
+ - width: 视频宽度
+ - height: 视频高度
+ - name: 文件名
+ - type: 媒体类型('video')
+ - extension: 文件扩展名
+ - createTime: 创建时间戳
+
+### MediaSelector.preview(path, type)
+
+预览媒体文件。
+
+#### 参数
+
+| 参数名 | 类型 | 默认值 | 说明 |
+| --- | --- | --- | --- |
+| path | string | - | 文件路径 |
+| type | string | 自动判断 | 媒体类型,可选值:'image'、'video',默认根据文件扩展名自动判断 |
+
+## 注意事项
+
+1. 由于uni.chooseVideo一次只能选择一个视频,当设置count>1时,工具类会引导用户多次选择。
+2. 视频预览功能需要一个视频播放页面,默认路径为`/pages/common/video-player`,如果您的项目中没有此页面,请自行创建或修改预览方法。
+3. 在某些平台上,部分功能可能受到限制,请根据实际情况调整使用方式。
+
+## 示例代码
+
+完整的使用示例请参考 `mediaSelector.example.js` 文件。
\ No newline at end of file
diff --git a/utils/mediaSelector.example.js b/utils/mediaSelector.example.js
new file mode 100644
index 0000000..ce8d3cd
--- /dev/null
+++ b/utils/mediaSelector.example.js
@@ -0,0 +1,136 @@
+/**
+ * 媒体选择器使用示例
+ */
+
+// 导入媒体选择器工具类
+import MediaSelector, { MediaType } from './mediaSelector';
+
+/**
+ * 选择图片示例
+ */
+export async function chooseImagesExample() {
+ try {
+ // 选择最多9张图片
+ const images = await MediaSelector.choose({
+ type: MediaType.IMAGE,
+ count: 9,
+ compressed: true,
+ crop: false
+ });
+
+ console.log('选择的图片:', images);
+ return images;
+ } catch (error) {
+ console.error('选择图片失败:', error);
+ uni.showToast({
+ title: '选择图片失败',
+ icon: 'none'
+ });
+ return [];
+ }
+}
+
+/**
+ * 选择视频示例
+ */
+export async function chooseVideosExample() {
+ try {
+ // 选择最多1个视频
+ const videos = await MediaSelector.choose({
+ type: MediaType.VIDEO,
+ count: 1,
+ compressed: true,
+ videoMaxDuration: 60 // 最长60秒
+ });
+
+ console.log('选择的视频:', videos);
+ return videos;
+ } catch (error) {
+ console.error('选择视频失败:', error);
+ uni.showToast({
+ title: '选择视频失败',
+ icon: 'none'
+ });
+ return [];
+ }
+}
+
+/**
+ * 选择图片或视频示例(用户可选择)
+ */
+export async function chooseBothExample() {
+ try {
+ // 让用户选择图片或视频
+ const media = await MediaSelector.choose({
+ type: MediaType.BOTH,
+ count: 5
+ });
+
+ console.log('选择的媒体:', media);
+ return media;
+ } catch (error) {
+ console.error('选择媒体失败:', error);
+ uni.showToast({
+ title: '选择媒体失败',
+ icon: 'none'
+ });
+ return [];
+ }
+}
+
+/**
+ * 预览媒体示例
+ * @param {Object} mediaItem 媒体项
+ */
+export function previewMediaExample(mediaItem) {
+ if (!mediaItem || !mediaItem.path) {
+ uni.showToast({
+ title: '无效的媒体文件',
+ icon: 'none'
+ });
+ return;
+ }
+
+ // 预览媒体(自动判断类型)
+ MediaSelector.preview(mediaItem.path, mediaItem.type);
+}
+
+/**
+ * 在页面中使用的完整示例
+ */
+export default {
+ data() {
+ return {
+ mediaList: [] // 存储选择的媒体列表
+ };
+ },
+ methods: {
+ // 选择图片
+ async chooseImages() {
+ const images = await chooseImagesExample();
+ this.mediaList = [...this.mediaList, ...images];
+ },
+
+ // 选择视频
+ async chooseVideos() {
+ const videos = await chooseVideosExample();
+ this.mediaList = [...this.mediaList, ...videos];
+ },
+
+ // 选择图片或视频
+ async chooseBoth() {
+ const media = await chooseBothExample();
+ this.mediaList = [...this.mediaList, ...media];
+ },
+
+ // 预览媒体
+ previewMedia(item) {
+ previewMediaExample(item);
+ },
+
+ // 删除媒体
+ deleteMedia(index) {
+ this.mediaList.splice(index, 1);
+ }
+ }
+};
\ No newline at end of file
diff --git a/utils/mediaSelector.js b/utils/mediaSelector.js
new file mode 100644
index 0000000..69a1a43
--- /dev/null
+++ b/utils/mediaSelector.js
@@ -0,0 +1,328 @@
+/**
+ * 媒体选择器工具类
+ * 用于选择本地图片和视频
+ * 支持设置选择类型(图片、视频或两者)和选择数量
+ */
+
+// 媒体类型枚举
+export const MediaType = {
+ IMAGE: 'image',
+ VIDEO: 'video',
+ BOTH: 'both'
+};
+
+/**
+ * 媒体选择器类
+ */
+export default class MediaSelector {
+ /**
+ * 选择媒体文件(图片或视频)
+ * @param {Object} options 选择配置项
+ * @param {string} options.type 媒体类型,可选值:'image'、'video'、'both',默认为'image'
+ * @param {number} options.count 最大选择数量,默认为9
+ * @param {Array} options.imageExtensions 图片扩展名,默认为['png', 'jpg', 'jpeg', 'gif', 'webp']
+ * @param {Array} options.videoExtensions 视频扩展名,默认为['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv']
+ * @param {boolean} options.compressed 是否压缩所选文件,默认为true
+ * @param {boolean} options.crop 是否裁剪(仅对图片有效),默认为false
+ * @param {number} options.videoMaxDuration 拍摄视频最长拍摄时间,单位秒,默认为60
+ * @param {string} options.camera 使用的摄像头,可选值:'back'、'front',默认为'back'
+ * @returns {Promise} 返回选择的媒体文件数组
+ */
+ static async choose(options = {}) {
+ const {
+ type = MediaType.IMAGE,
+ count = 9,
+ imageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'webp'],
+ videoExtensions = ['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv'],
+ compressed = true,
+ crop = false,
+ videoMaxDuration = 60,
+ camera = 'back'
+ } = options;
+
+ // 根据类型选择不同的媒体
+ if (type === MediaType.IMAGE) {
+ return this.chooseImages({ count, extensions: imageExtensions, compressed, crop, camera });
+ } else if (type === MediaType.VIDEO) {
+ return this.chooseVideos({ count, extensions: videoExtensions, compressed, maxDuration: videoMaxDuration, camera });
+ } else if (type === MediaType.BOTH) {
+ // 如果是两者都选,则先让用户选择类型
+ return new Promise((resolve, reject) => {
+ uni.showActionSheet({
+ itemList: ['选择图片', '选择视频'],
+ success: async (res) => {
+ try {
+ if (res.tapIndex === 0) {
+ // 选择图片
+ const images = await this.chooseImages({ count, extensions: imageExtensions, compressed, crop, camera });
+ resolve(images);
+ } else {
+ // 选择视频
+ const videos = await this.chooseVideos({ count, extensions: videoExtensions, compressed, maxDuration: videoMaxDuration, camera });
+ resolve(videos);
+ }
+ } catch (error) {
+ reject(error);
+ }
+ },
+ fail: (err) => {
+ reject(err);
+ }
+ });
+ });
+ } else {
+ throw new Error('不支持的媒体类型');
+ }
+ }
+
+ /**
+ * 选择图片
+ * @param {Object} options 选择图片的配置项
+ * @returns {Promise} 返回选择的图片数组
+ */
+ static chooseImages(options) {
+ const { count = 9, extensions = ['png', 'jpg', 'jpeg', 'gif', 'webp'], compressed = true, crop = false, camera = 'back' } = options;
+
+ return new Promise((resolve, reject) => {
+ uni.chooseImage({
+ count,
+ sizeType: compressed ? ['compressed'] : ['original'],
+ sourceType: ['album', 'camera'],
+ extension: extensions,
+ crop: crop ? {
+ quality: 100,
+ width: 300,
+ height: 300,
+ resize: true
+ } : false,
+ camera,
+ success: (res) => {
+ // 处理返回的图片数据,统一格式
+ const images = res.tempFiles.map(file => ({
+ path: file.path,
+ size: file.size,
+ name: this.getFileName(file.path),
+ type: 'image',
+ extension: this.getFileExtension(file.path),
+ createTime: new Date().getTime()
+ }));
+ resolve(images);
+ },
+ fail: (err) => {
+ // 用户取消选择不报错
+ if (err.errMsg.indexOf('cancel') !== -1) {
+ resolve([]);
+ } else {
+ reject(err);
+ }
+ }
+ });
+ });
+ }
+
+ /**
+ * 选择视频
+ * @param {Object} options 选择视频的配置项
+ * @returns {Promise} 返回选择的视频数组
+ */
+ static chooseVideos(options) {
+ const { count = 1, extensions = ['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv'], compressed = true, maxDuration = 60, camera = 'back' } = options;
+
+ // 由于uni.chooseVideo一次只能选择一个视频,如果count>1,需要多次选择
+ if (count <= 1) {
+ return this.chooseSingleVideo({ extensions, compressed, maxDuration, camera });
+ } else {
+ // 提示用户需要多次选择
+ return new Promise((resolve, reject) => {
+ uni.showModal({
+ title: '提示',
+ content: `您需要选择${count}个视频,将分${count}次选择`,
+ confirmText: '开始选择',
+ cancelText: '取消',
+ success: async (res) => {
+ if (res.confirm) {
+ try {
+ const videos = [];
+ for (let i = 0; i < count; i++) {
+ // 显示当前选择进度
+ uni.showLoading({
+ title: `正在选择第${i + 1}/${count}个视频`,
+ mask: true
+ });
+
+ // 选择单个视频
+ const videoResult = await this.chooseSingleVideo({ extensions, compressed, maxDuration, camera });
+
+ // 隐藏加载提示
+ uni.hideLoading();
+
+ // 如果用户取消了选择,则结束循环
+ if (videoResult.length === 0) {
+ break;
+ }
+
+ // 添加到结果数组
+ videos.push(...videoResult);
+
+ // 如果还没选完,询问是否继续
+ if (i < count - 1) {
+ const continueRes = await new Promise((resolveDialog) => {
+ uni.showModal({
+ title: '提示',
+ content: `已选择${videos.length}个视频,是否继续选择?`,
+ confirmText: '继续',
+ cancelText: '完成',
+ success: (modalRes) => {
+ resolveDialog(modalRes.confirm);
+ }
+ });
+ });
+
+ // 如果用户选择不继续,则结束循环
+ if (!continueRes) {
+ break;
+ }
+ }
+ }
+
+ resolve(videos);
+ } catch (error) {
+ uni.hideLoading();
+ reject(error);
+ }
+ } else {
+ resolve([]);
+ }
+ },
+ fail: (err) => {
+ reject(err);
+ }
+ });
+ });
+ }
+ }
+
+ /**
+ * 选择单个视频
+ * @param {Object} options 选择视频的配置项
+ * @returns {Promise} 返回选择的视频数组
+ */
+ static chooseSingleVideo(options) {
+ const { extensions = ['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv'], compressed = true, maxDuration = 60, camera = 'back' } = options;
+
+ return new Promise((resolve, reject) => {
+ uni.chooseVideo({
+ sourceType: ['album', 'camera'],
+ compressed,
+ maxDuration,
+ camera,
+ extension: extensions,
+ success: (res) => {
+ // 处理返回的视频数据,统一格式
+ const video = {
+ path: res.tempFilePath,
+ size: res.size,
+ duration: res.duration,
+ width: res.width,
+ height: res.height,
+ name: this.getFileName(res.tempFilePath),
+ type: 'video',
+ extension: this.getFileExtension(res.tempFilePath),
+ createTime: new Date().getTime()
+ };
+ resolve([video]);
+ },
+ fail: (err) => {
+ // 用户取消选择不报错
+ if (err.errMsg.indexOf('cancel') !== -1) {
+ resolve([]);
+ } else {
+ reject(err);
+ }
+ }
+ });
+ });
+ }
+
+ /**
+ * 获取文件名
+ * @param {string} path 文件路径
+ * @returns {string} 文件名
+ */
+ static getFileName(path) {
+ if (!path) return '';
+ return path.substring(path.lastIndexOf('/') + 1);
+ }
+
+ /**
+ * 获取文件扩展名
+ * @param {string} path 文件路径
+ * @returns {string} 文件扩展名
+ */
+ static getFileExtension(path) {
+ if (!path) return '';
+ return path.substring(path.lastIndexOf('.') + 1).toLowerCase();
+ }
+
+ /**
+ * 预览媒体文件
+ * @param {string} path 文件路径
+ * @param {string} type 媒体类型,可选值:'image'、'video',默认根据文件扩展名自动判断
+ */
+ static preview(path, type) {
+ if (!path) return;
+
+ // 如果未指定类型,则根据文件扩展名判断
+ if (!type) {
+ const extension = this.getFileExtension(path);
+ if (['png', 'jpg', 'jpeg', 'gif', 'webp'].includes(extension)) {
+ type = MediaType.IMAGE;
+ } else if (['mp4', 'mov', '3gp', 'avi', 'rmvb', 'rm', 'flv', 'mkv'].includes(extension)) {
+ type = MediaType.VIDEO;
+ } else {
+ uni.showToast({
+ title: '不支持的文件类型',
+ icon: 'none'
+ });
+ return;
+ }
+ }
+
+ // 根据类型预览
+ if (type === MediaType.IMAGE) {
+ uni.previewImage({
+ urls: [path],
+ current: path
+ });
+ } else if (type === MediaType.VIDEO) {
+ // 视频预览
+ uni.navigateTo({
+ url: `/pages/common/video-player?url=${encodeURIComponent(path)}`
+ });
+ }
+ }
+}
+
+/**
+ * 使用示例:
+ *
+ * // 导入
+ * import MediaSelector, { MediaType } from '@/utils/mediaSelector';
+ *
+ * // 选择图片
+ * const images = await MediaSelector.choose({ type: MediaType.IMAGE, count: 9 });
+ * console.log('选择的图片:', images);
+ *
+ * // 选择视频
+ * const videos = await MediaSelector.choose({ type: MediaType.VIDEO, count: 1 });
+ * console.log('选择的视频:', videos);
+ *
+ * // 选择图片或视频(用户可选择)
+ * const media = await MediaSelector.choose({ type: MediaType.BOTH, count: 5 });
+ * console.log('选择的媒体:', media);
+ *
+ * // 预览媒体
+ * if (media.length > 0) {
+ * MediaSelector.preview(media[0].path, media[0].type);
+ * }
+ */
\ No newline at end of file
diff --git a/vue.config.js b/vue.config.js
index d4472ca..2e2adbd 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -8,7 +8,7 @@ module.exports = {
disableHostCheck : true,
proxy : {
"/js" : {
- target : "http://192.168.0.104:8080",
+ target : "http://tc.cqsznc.com:7080",
// target : "https://demo.aidex.vip",
changeOrigin : true,
secure : false