diff --git a/api/login.ts b/api/login.ts
index 98423ba..c002ba1 100644
--- a/api/login.ts
+++ b/api/login.ts
@@ -14,4 +14,11 @@ export const userInfo = (data : any) => get('v1/info', data);
export const captcha = (data : any) => get('v1/captcha', data);
-export const login = (data : any) => post('v1/login', data);
\ No newline at end of file
+export const login = (data : any) => post('v1/login', data);
+
+
+export const logout = (data : any) => get('v1/logout', data);
+
+// 获取权限
+export const menu = (data : any) => get('v1/menu', data);
+
diff --git a/components/SharePoster.vue b/components/SharePoster.vue
index 13e2f7d..2204f4d 100644
--- a/components/SharePoster.vue
+++ b/components/SharePoster.vue
@@ -83,7 +83,7 @@
immediate: true,
deep: true,
handler(newVal) {
- console.log('SharePoster posterInfo changed:', newVal)
+ // console.log('SharePoster posterInfo changed:', newVal)
},
},
},
diff --git a/components/community-selector/community-selector.vue b/components/community-selector/community-selector.vue
new file mode 100644
index 0000000..7676794
--- /dev/null
+++ b/components/community-selector/community-selector.vue
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/examples/permission-button.vue b/components/examples/permission-button.vue
new file mode 100644
index 0000000..30f3695
--- /dev/null
+++ b/components/examples/permission-button.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/examples/permission-example.vue b/components/examples/permission-example.vue
new file mode 100644
index 0000000..32a9fe6
--- /dev/null
+++ b/components/examples/permission-example.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+ 1. 按钮权限控制
+
+
+
+ 核销按钮(F1权限)
+
+
+
+ 配送按钮(F2权限)
+
+
+
+ 推广按钮(F3权限)
+
+
+
+
+ 2. 菜单列表权限控制
+
+
+
+
+
+
+
+
+ 3. 内联权限控制
+
+
+
+
+ 这段内容只有拥有量房权限(F4)的用户才能看到
+
+
+
+
+
+ 这段内容只有拥有维修权限(F6)的用户才能看到
+
+
+
+
+
+ 4. 当前权限状态
+
+ 权限列表: {{userPermissions.join(', ') || '无权限'}}
+
+
+
+
+ 切换F1权限
+ 切换F2权限
+ 切换F3权限
+ 切换F4权限
+ 切换F6权限
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/chat/index.vue b/pages/chat/index.vue
index 7caf10b..0425cc9 100644
--- a/pages/chat/index.vue
+++ b/pages/chat/index.vue
@@ -10,16 +10,16 @@
-
-
+
+
-
-
+
+
@@ -69,6 +69,8 @@
+
+
@@ -76,6 +78,8 @@
import { ref } from 'vue'
const messageList = ref([])
import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app'
+ import { useToast } from '@/uni_modules/wot-design-uni'
+ const Toast = useToast()
onPullDownRefresh(() => {
uni.stopPullDownRefresh()
@@ -85,6 +89,13 @@
})
+ const clearMsg = () => {
+ Toast.info('暂无消息')
+ }
+ const search = () => {
+ Toast.info('暂无消息')
+ }
+
const handleAction = (action : string) => {
console.log(action);
}
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 8a749f9..8d814d5 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -40,7 +40,7 @@
-
@@ -52,7 +52,7 @@
-
代处理事项
@@ -64,7 +64,7 @@
{{item.desc}}
-
+ -->
常见问题解答
@@ -104,27 +104,39 @@
-
\ No newline at end of file
diff --git a/pagesB/complaint/index.vue b/pagesB/complaint/index.vue
index 1b385ca..9a4b44e 100644
--- a/pagesB/complaint/index.vue
+++ b/pagesB/complaint/index.vue
@@ -153,53 +153,53 @@
// 模拟数据 - 实际项目中应该是通过API获取
const complaintList = ref([
- {
- complaint_id: 1,
- complaint_no: 'TS20240607001',
- content: '楼道灯已经坏了三天,晚上上下楼很不方便,希望物业尽快解决!',
- village_name: '阳光花园小区',
- user_name: '张三',
- user_mobile: '13800138000',
- create_time: '2024-06-07 10:23',
- status: 0,
- urgency: 2,
- tags: ['公共设施', '照明'],
- images: [
- 'https://img.yzcdn.cn/vant/cat.jpeg',
- 'https://img.yzcdn.cn/vant/tree.jpeg'
- ]
- },
- {
- complaint_id: 2,
- complaint_no: 'TS20240606001',
- content: '小区北门停车场有人乱停车,导致通道被堵,请物业及时处理。',
- village_name: '阳光花园小区',
- user_name: '李四',
- user_mobile: '13900139000',
- create_time: '2024-06-06 16:45',
- status: 1,
- urgency: 1,
- tags: ['停车管理', '安全隐患'],
- images: [
- 'https://img.yzcdn.cn/vant/cat.jpeg',
- 'https://img.yzcdn.cn/vant/cat.jpeg',
- 'https://img.yzcdn.cn/vant/cat.jpeg',
- 'https://img.yzcdn.cn/vant/tree.jpeg'
- ]
- },
- {
- complaint_id: 3,
- complaint_no: 'TS20240605001',
- content: '小区垃圾分类做得不到位,希望加强宣传和管理。',
- village_name: '阳光花园小区',
- user_name: '王五',
- user_mobile: '13700137000',
- create_time: '2024-06-05 09:12',
- status: 2,
- urgency: 1,
- tags: ['环境卫生', '垃圾分类'],
- images: []
- }
+ // {
+ // complaint_id: 1,
+ // complaint_no: 'TS20240607001',
+ // content: '楼道灯已经坏了三天,晚上上下楼很不方便,希望物业尽快解决!',
+ // village_name: '阳光花园小区',
+ // user_name: '张三',
+ // user_mobile: '13800138000',
+ // create_time: '2024-06-07 10:23',
+ // status: 0,
+ // urgency: 2,
+ // tags: ['公共设施', '照明'],
+ // images: [
+ // 'https://img.yzcdn.cn/vant/cat.jpeg',
+ // 'https://img.yzcdn.cn/vant/tree.jpeg'
+ // ]
+ // },
+ // {
+ // complaint_id: 2,
+ // complaint_no: 'TS20240606001',
+ // content: '小区北门停车场有人乱停车,导致通道被堵,请物业及时处理。',
+ // village_name: '阳光花园小区',
+ // user_name: '李四',
+ // user_mobile: '13900139000',
+ // create_time: '2024-06-06 16:45',
+ // status: 1,
+ // urgency: 1,
+ // tags: ['停车管理', '安全隐患'],
+ // images: [
+ // 'https://img.yzcdn.cn/vant/cat.jpeg',
+ // 'https://img.yzcdn.cn/vant/cat.jpeg',
+ // 'https://img.yzcdn.cn/vant/cat.jpeg',
+ // 'https://img.yzcdn.cn/vant/tree.jpeg'
+ // ]
+ // },
+ // {
+ // complaint_id: 3,
+ // complaint_no: 'TS20240605001',
+ // content: '小区垃圾分类做得不到位,希望加强宣传和管理。',
+ // village_name: '阳光花园小区',
+ // user_name: '王五',
+ // user_mobile: '13700137000',
+ // create_time: '2024-06-05 09:12',
+ // status: 2,
+ // urgency: 1,
+ // tags: ['环境卫生', '垃圾分类'],
+ // images: []
+ // }
]);
// 状态颜色配置
@@ -260,7 +260,7 @@
if (loading.value || finished.value) return;
try {
- loading.value = true;
+ // loading.value = true;
// 这里应该调用实际的API接口获取数据
// const params = {
@@ -276,7 +276,7 @@
// 模拟数据加载完成的情况
if (page.value > 1) {
- finished.value = true;
+ // finished.value = true;
} else {
page.value++;
}
diff --git a/pagesB/questionnaire/list.vue b/pagesB/questionnaire/list.vue
index 06d821a..a0e4f2a 100644
--- a/pagesB/questionnaire/list.vue
+++ b/pagesB/questionnaire/list.vue
@@ -36,8 +36,7 @@
-
-
+
-
+
@@ -113,10 +112,8 @@
-
-
-
- 暂无问卷记录
+
+
@@ -256,61 +253,61 @@
// 模拟问卷列表数据
const questionnaireList = ref([
- {
- id: 1,
- title: '2024年度物业服务满意度调查',
- village_name: '阳光花园小区',
- type: '满意度调查',
- user_name: '张三',
- is_anonymous: false,
- submit_time: '2024-06-15 14:23',
- question_count: 15,
- status: 1 // 已查看
- },
- {
- id: 2,
- title: '小区环境改造意见征集',
- village_name: '翠湖庭院',
- type: '意见征集',
- user_name: '李四',
- is_anonymous: true,
- submit_time: '2024-06-12 09:45',
- question_count: 8,
- status: 0 // 未查看
- },
- {
- id: 3,
- title: '业主委员会换届选举投票',
- village_name: '金色家园',
- type: '投票选举',
- user_name: '王五',
- is_anonymous: false,
- submit_time: '2024-06-10 18:30',
- question_count: 12,
- status: 1 // 已查看
- },
- {
- id: 4,
- title: '小区健身设施需求调研',
- village_name: '阳光花园小区',
- type: '需求调研',
- user_name: '赵六',
- is_anonymous: false,
- submit_time: '2024-06-08 11:20',
- question_count: 10,
- status: 1 // 已查看
- },
- {
- id: 5,
- title: '端午节活动满意度调查',
- village_name: '翠湖庭院',
- type: '满意度调查',
- user_name: '匿名用户',
- is_anonymous: true,
- submit_time: '2024-06-05 16:40',
- question_count: 6,
- status: 0 // 未查看
- }
+ // {
+ // id: 1,
+ // title: '2024年度物业服务满意度调查',
+ // village_name: '阳光花园小区',
+ // type: '满意度调查',
+ // user_name: '张三',
+ // is_anonymous: false,
+ // submit_time: '2024-06-15 14:23',
+ // question_count: 15,
+ // status: 1 // 已查看
+ // },
+ // {
+ // id: 2,
+ // title: '小区环境改造意见征集',
+ // village_name: '翠湖庭院',
+ // type: '意见征集',
+ // user_name: '李四',
+ // is_anonymous: true,
+ // submit_time: '2024-06-12 09:45',
+ // question_count: 8,
+ // status: 0 // 未查看
+ // },
+ // {
+ // id: 3,
+ // title: '业主委员会换届选举投票',
+ // village_name: '金色家园',
+ // type: '投票选举',
+ // user_name: '王五',
+ // is_anonymous: false,
+ // submit_time: '2024-06-10 18:30',
+ // question_count: 12,
+ // status: 1 // 已查看
+ // },
+ // {
+ // id: 4,
+ // title: '小区健身设施需求调研',
+ // village_name: '阳光花园小区',
+ // type: '需求调研',
+ // user_name: '赵六',
+ // is_anonymous: false,
+ // submit_time: '2024-06-08 11:20',
+ // question_count: 10,
+ // status: 1 // 已查看
+ // },
+ // {
+ // id: 5,
+ // title: '端午节活动满意度调查',
+ // village_name: '翠湖庭院',
+ // type: '满意度调查',
+ // user_name: '匿名用户',
+ // is_anonymous: true,
+ // submit_time: '2024-06-05 16:40',
+ // question_count: 6,
+ // status: 0 // 未查看
+ // }
]);
// 状态颜色配置
@@ -406,7 +403,7 @@
// 生命周期钩子
onLoad(() => {
checkRouteStack();
- loadQuestionnaireList();
+ // loadQuestionnaireList();
});
// 下拉刷新
diff --git a/pagesB/setting/index.vue b/pagesB/setting/index.vue
index e00ae4a..fc7070c 100644
--- a/pagesB/setting/index.vue
+++ b/pagesB/setting/index.vue
@@ -1,9 +1,7 @@
-
+
-
-
-
-
-
-
-
-
-
- {{userInfo.nickname.substring(0,1)}}
+
+
+
+
+
+ 个人信息
+
+
-
- {{userInfo.nickname || '未设置昵称'}}
- {{formatPhone(userInfo.phone)}}
+
+
+
+
+ 清除缓存
+
+ {{cacheSize}}
-
-
-
-
-
-
- 清除缓存
-
-
- {{cacheSize}}
-
+
+
+
+
+ 隐私政策
-
-
-
- 隐私政策
-
-
-
-
+
+
+
+
+
+
+ 用户协议
-
-
-
- 用户协议
-
-
-
-
+
+
+
+
+
+
+ 关于我们
-
-
-
- 关于我们
-
-
- v{{appVersion}}
-
-
+
+ {{appVersion}}
+
-
+
-
-
-
- 确定要退出登录吗?
-
-
+
+
+
+
-
\ No newline at end of file
diff --git a/unocss/a-hua-unocss/index.scss b/unocss/a-hua-unocss/index.scss
index 8a9d76f..f7951fd 100644
--- a/unocss/a-hua-unocss/index.scss
+++ b/unocss/a-hua-unocss/index.scss
@@ -1,32 +1,234 @@
-.li-mt-25{margin-top:25rpx}
-
-.li-pt-6{padding-top:6rpx}
-.li-px-15{padding-left:15rpx;padding-right:15rpx}
-
+.li-bg-white{background-color:rgb(255,255,255)}
+.li-flex{display:flex}
+.li-flex-col{flex-direction:column}
+.li-font-550{font-weight:550}
+.li-h-130{height:130rpx}
+.li-h-68{height:68rpx}
+.li-items-center{align-items:center}
+.li-justify-between{justify-content:space-between}
+.li-justify-center{justify-content:center}
+.li-mt-100{margin-top:100rpx}
+.li-mt-28{margin-top:28rpx}
+.li-mt-32{margin-top:32rpx}
+.li-mt-90{margin-top:90rpx}
+.li-mx-10{margin-left:10rpx;margin-right:10rpx}
+.li-mx-auto{margin-left:auto;margin-right:auto}
+.li-pt-270{padding-top:270rpx}
+.li-rd-40{border-radius:40rpx}
+.li-text-000000-color{color:rgb(0,0,0)}
+.li-text-24{font-size:24rpx}
+.li-text-2EA1EA-color{color:rgb(46,161,234)}
+.li-text-38{font-size:38rpx}
+.li-text-a5a5a5-color{color:rgb(165,165,165)}
+.li-w-130{width:130rpx}
+.li-w-150{width:150rpx}
+.li-w-420{width:420rpx}
+.li-w-full-80{width:80%}
+.li-w-full-85{width:85%}
+.li-w-full-90{width:90%}
+.items-center{align-items:center}
+.justify-end{justify-content:end}
+.justify-center{justify-content:center}
+.justify-between{justify-content:space-between}
+.li-flex-center{display:flex;align-items:center;justify-content:center}
+.li-h-160{height:160rpx}
+.li-h-58{height:58rpx}
+.li-justify-around{justify-content:space-around}
+.li-ml-22{margin-left:22rpx}
+.li-ml-25{margin-left:25rpx}
+.li-ml-35{margin-left:35rpx}
+.li-mr-5{margin-right:5rpx}
+.li-mt-10{margin-top:10rpx}
+.li-mt-12{margin-top:12rpx}
+.li-mt-14{margin-top:14rpx}
+.li-mt-15{margin-top:15rpx}
+.li-mt-20{margin-top:20rpx}
+.li-mt-30{margin-top:30rpx}
+.li-px-25{padding-left:25rpx;padding-right:25rpx}
+.li-px-30{padding-left:30rpx;padding-right:30rpx}
+.li-px-40{padding-left:40rpx;padding-right:40rpx}
+.li-py-25{padding-top:25rpx;padding-bottom:25rpx}
+.li-rd-10{border-radius:10rpx}
+.li-rd-15{border-radius:15rpx}
+.li-text-010B3E-color{color:rgb(1,11,62)}
+.li-text-22{font-size:22rpx}
+.li-text-26{font-size:26rpx}
+.li-text-28{font-size:28rpx}
+.li-text-30{font-size:30rpx}
+.li-text-343333-color{color:rgb(52,51,51)}
+.li-text-AFB2B8-color{color:rgb(175,178,184)}
+.li-text-B1B0B0-color{color:rgb(177,176,176)}
+.li-w-310{width:310rpx}
+.li-w-58{width:58rpx}
+.li-w-full-70{width:70%}
+.li-w-full-88{width:88%}
+.li-h-100{height:100rpx}
+.li-ml-20{margin-left:20rpx}
+.li-ml-200{margin-left:200rpx}
+.li-ml-30{margin-left:30rpx}
+.li-mr-10{margin-right:10rpx}
+.li-mr-30{margin-right:30rpx}
+.li-mt-300-important{margin-top:300rpx !important}
+.li-pt-2{padding-top:2rpx}
+.li-py-20{padding-top:20rpx;padding-bottom:20rpx}
+.li-rd-full-50{border-radius:50%}
+.li-text-25{font-size:25rpx}
+.li-text-35{font-size:35rpx}
+.li-text-42{font-size:42rpx}
+.li-text-46{font-size:46rpx}
+.li-w-100{width:100rpx}
.bg-0070F0{background-color:rgb(0,112,240)}
-.li-my-10{margin-top:10rpx;margin-bottom:10rpx}
-.li-p-20{padding:20rpx}
-.li-px-20{padding-left:20rpx;padding-right:20rpx}
-.li-py-10{padding-top:10rpx;padding-bottom:10rpx}
-.li-py-60{padding-top:60rpx;padding-bottom:60rpx}
-.li-rd-8{border-radius:8rpx}
-.li-text-dddddd-color{color:rgb(221,221,221)}
-.li-text-ff9900-color{color:rgb(255,153,0)}
-
+.bg-f9f9f9{background-color:rgb(249,249,249)}
+.bg-FFFFFF{background-color:rgb(255,255,255)}
+.border-4-white{border-style:solid;border-color:rgb(255,255,255);border-width:4rpx}
+.li-font-bold{font-weight:bold}
+.li-h-240{height:240rpx}
+.li-h-250{height:250rpx}
+.li-h-50{height:50rpx}
+.li-h-60{height:60rpx}
+.li-items-end{align-items:end}
+.li-justify-start{justify-content:start}
+.li-mb-2{margin-bottom:2rpx}
+.li-ml-4{margin-left:4rpx}
+.li-ml-50{margin-left:50rpx}
+.li-mr-20{margin-right:20rpx}
+.li-mr-50{margin-right:50rpx}
+.li-mt-26{margin-top:26rpx}
+.li-mt-60{margin-top:60rpx}
+.li-mx-20{margin-left:20rpx;margin-right:20rpx}
+.li-mx-40{margin-left:40rpx;margin-right:40rpx}
+.li-pb-10{padding-bottom:10rpx}
+.li-pb-14{padding-bottom:14rpx}
+.li-pb-20{padding-bottom:20rpx}
+.li-pt-20{padding-top:20rpx}
+.li-pt-8{padding-top:8rpx}
+.li-rd-20{border-radius:20rpx}
+.li-rd-tl-30-important{border-top-left-radius:30rpx !important}
+.li-rd-tr-30-important{border-top-right-radius:30rpx !important}
+.li-text-19171B-color{color:rgb(25,23,27)}
+.li-text-20{font-size:20rpx}
+.li-text-32{font-size:32rpx}
+.li-text-706e70-color{color:rgb(112,110,112)}
+.li-text-B2B2B2-color{color:rgb(178,178,178)}
+.li-text-BBBDDA-color{color:rgb(187,189,218)}
+.li-text-F2F7FD-color{color:rgb(242,247,253)}
+.li-text-F8C883-color{color:rgb(248,200,131)}
+.li-text-FFFFFF-color{color:rgb(255,255,255)}
+.li-text-b1bbc7-color{color:rgb(177,187,199)}
+.li-w-240{width:240rpx}
+.li-w-50{width:50rpx}
+.li-w-60{width:60rpx}
+.li-w-full-94{width:94%}
+.li-h-110{height:110rpx}
+.li-items-start{align-items:start}
+.li-mb-12{margin-bottom:12rpx}
+.li-mb-20{margin-bottom:20rpx}
+.li-mb-8{margin-bottom:8rpx}
+.li-ml-15{margin-left:15rpx}
+.li-mr-12{margin-right:12rpx}
+.li-mr-3{margin-right:3rpx}
+.li-mr-6{margin-right:6rpx}
+.li-mt-40{margin-top:40rpx}
+.li-pb-25{padding-bottom:25rpx}
+.li-pb-30{padding-bottom:30rpx}
+.li-pl-20{padding-left:20rpx}
+.li-pl-30{padding-left:30rpx}
+.li-pr-30{padding-right:30rpx}
+.li-pt-30{padding-top:30rpx}
+.li-py-6{padding-top:6rpx;padding-bottom:6rpx}
+.li-text-009aff-color{color:rgb(0,154,255)}
+.li-text-40{font-size:40rpx}
+.li-text-55{font-size:55rpx}
+.li-text-5f5f5f-color{color:rgb(95,95,95)}
+.li-text-666-color{color:rgb(102,102,102)}
+.li-text-70{font-size:70rpx}
+.li-text-9a9a9a-color{color:rgb(154,154,154)}
+.li-text-right{text-align:right}
+.li-w-110{width:110rpx}
+.li-w-400{width:400rpx}
+.li-w-full-92{width:92%}
+.overflow-hidden{overflow:hidden}
+.li-ml-6{margin-left:6rpx}
+.li-p-15{padding:15rpx}
+.li-pb-15{padding-bottom:15rpx}
+.li-pt-25{padding-top:25rpx}
+.li-pt-4{padding-top:4rpx}
+.li-text-333333-color{color:rgb(51,51,51)}
+.li-text-36{font-size:36rpx}
+.li-text-ff0000-color{color:rgb(255,0,0)}
+.li-w-full-100{width:100%}
+.li-font-400{font-weight:400}
+.li-m-30{margin:30rpx}
+.li-text-595959-color{color:rgb(89,89,89)}
+.li-mb-25{margin-bottom:25rpx}
+.li-mb-30{margin-bottom:30rpx}
+.li-ml-10{margin-left:10rpx}
+.li-mr-200{margin-right:200rpx}
+.li-mr-4{margin-right:4rpx}
+.li-mt-100-important{margin-top:100rpx !important}
+.li-mt-4{margin-top:4rpx}
+.li-mt-50{margin-top:50rpx}
+.li-mt-8{margin-top:8rpx}
+.li-py-40{padding-top:40rpx;padding-bottom:40rpx}
+.li-text-0070F0-color{color:rgb(0,112,240)}
+.li-text-333-color{color:rgb(51,51,51)}
+.li-text-34{font-size:34rpx}
+.li-text-44{font-size:44rpx}
+.li-text-48{font-size:48rpx}
+.li-text-90{font-size:90rpx}
+.li-text-999-color{color:rgb(153,153,153)}
+.li-text-center{text-align:center}
+.li-text-white{color:rgb(255,255,255)}
+.li-w-500{width:500rpx}
+.li-mr-25{margin-right:25rpx}
+.li-h-90{height:90rpx}
+.li-text-47{font-size:47rpx}
+.li-w-90{width:90rpx}
+.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
+.li-mb-10{margin-bottom:10rpx}
+.li-mb-15{margin-bottom:15rpx}
+.li-my-20{margin-top:20rpx;margin-bottom:20rpx}
+.li-p-30{padding:30rpx}
+.li-py-30{padding-top:30rpx;padding-bottom:30rpx}
+.li-text-ff6b35-color{color:rgb(255,107,53)}
+.li-block{display:block}
+.li-items-baseline{align-items:baseline}
+.li-mr-15{margin-right:15rpx}
+.li-mt-5{margin-top:5rpx}
+.li-opacity-100{undefined:1}
+.li-rd-12{border-radius:12rpx}
+.li-rd-16{border-radius:16rpx}
+.li-text-0a4696-color{color:rgb(10,70,150)}
+.li-flex-1{flex:1}
+.li-flex-wrap{flex-wrap:wrap}
+.li-line-clamp-2{overflow:hidden;display:-webkit-box;line-clamp:2;-webkit-box-orient:vertical;-webkit-line-clamp:2}
+.li-text-999999-color{color:rgb(153,153,153)}
+.li-w-160{width:160rpx}
+.li-w-full-96{width:96%}
+.li-mt-25{margin-top:25rpx}
+.li-mt-200{margin-top:200rpx}
+.li-pt-6{padding-top:6rpx}
+.li-mr-180{margin-right:180rpx}
.li-opacity-80{undefined:0.8}
.li-pb-40{padding-bottom:40rpx}
+.li-px-20{padding-left:20rpx;padding-right:20rpx}
+.li-py-10{padding-top:10rpx;padding-bottom:10rpx}
.li-py-100{padding-top:100rpx;padding-bottom:100rpx}
-.li-py-15{padding-top:15rpx;padding-bottom:15rpx}
+.li-py-60{padding-top:60rpx;padding-bottom:60rpx}
.li-rd-30{border-radius:30rpx}
.li-text-100{font-size:100rpx}
.li-text-3e9bff-color{color:rgb(62,155,255)}
.li-text-50{font-size:50rpx}
.li-text-52c41a-color{color:rgb(82,196,26)}
-.li-text-60{font-size:60rpx}
.li-text-ccc-color{color:rgb(204,204,204)}
.li-text-ff4d4f-color{color:rgb(255,77,79)}
+.li-my-10{margin-top:10rpx;margin-bottom:10rpx}
+.li-p-20{padding:20rpx}
+.li-rd-8{border-radius:8rpx}
+.li-text-dddddd-color{color:rgb(221,221,221)}
+.li-text-ff9900-color{color:rgb(255,153,0)}
@@ -39,3 +241,51 @@
+
+
+
+.li-ml-20{margin-left:20rpx}
+.li-ml-30{margin-left:30rpx}
+.li-mr-30{margin-right:30rpx}
+.li-mt-300-important{margin-top:300rpx !important}
+.li-pt-2{padding-top:2rpx}
+.li-text-25{font-size:25rpx}
+.li-text-35{font-size:35rpx}
+.li-text-46{font-size:46rpx}
+
+.li-h-90{height:90rpx}
+.li-mr-6{margin-right:6rpx}
+.li-text-52{font-size:52rpx}
+.li-w-90{width:90rpx}
+
+.li-flex-1{flex:1}
+.li-flex-wrap{flex-wrap:wrap}
+.li-items-start{align-items:start}
+.li-line-clamp-2{overflow:hidden;display:-webkit-box;line-clamp:2;-webkit-box-orient:vertical;-webkit-line-clamp:2}
+.li-mb-10{margin-bottom:10rpx}
+.li-mb-15{margin-bottom:15rpx}
+.li-mb-20{margin-bottom:20rpx}
+.li-pb-15{padding-bottom:15rpx}
+.li-pb-30{padding-bottom:30rpx}
+.li-pl-30{padding-left:30rpx}
+.li-text-0070F0-color{color:rgb(0,112,240)}
+.li-text-333-color{color:rgb(51,51,51)}
+.li-text-34{font-size:34rpx}
+.li-text-999-color{color:rgb(153,153,153)}
+.li-text-999999-color{color:rgb(153,153,153)}
+.li-text-9a9a9a-color{color:rgb(154,154,154)}
+.li-text-center{text-align:center}
+.li-w-160{width:160rpx}
+.li-w-full-92{width:92%}
+.li-w-full-96{width:96%}
+
+.li-mb-30{margin-bottom:30rpx}
+.li-mr-15{margin-right:15rpx}
+.li-mt-200{margin-top:200rpx}
+.li-p-30{padding:30rpx}
+.li-pt-6{padding-top:6rpx}
+.li-text-36{font-size:36rpx}
+.li-text-40{font-size:40rpx}
+
+.li-mr-4{margin-right:4rpx}
+.li-text-666-color{color:rgb(102,102,102)}
diff --git a/utils/permission.js b/utils/permission.js
new file mode 100644
index 0000000..19cedeb
--- /dev/null
+++ b/utils/permission.js
@@ -0,0 +1,60 @@
+/**
+ * 权限管理工具
+ * 用于处理应用中的权限控制逻辑
+ */
+// 权限信息 F1.核销 F2.配送 F3.推广 F4.量房 F5.家政 F6.维修
+// 权限映射对象:将前端菜单/功能类型映射到权限代码
+export const permissionMap = {
+ // 功能权限映射
+ 'verification': 'F1', // 商品核销 - F1.核销
+ 'delivery': 'F2', // 配送 - F2.配送
+ 'invite': 'F3', // 推广 - F3.推广
+ 'measure': 'F4', // 量房 - F4.量房
+ 'repair': 'F6', // 维修 - F6.维修
+
+ // 可以根据需要添加更多菜单与权限的映射关系
+}
+
+/**
+ * 判断当前用户是否拥有指定功能的权限
+ * @param {String} featureType - 功能/菜单类型
+ * @param {Array} userPermissions - 用户拥有的权限数组
+ * @returns {Boolean} - 是否拥有权限
+ */
+export function hasPermission(featureType, userPermissions) {
+ // 如果功能类型不在权限映射中,表示不需要权限控制,直接显示
+ if (!permissionMap[featureType]) return true;
+
+ // 如果没有权限数组或权限数组为空,则没有权限
+ if (!userPermissions || userPermissions.length === 0) return false;
+
+ // 检查权限数组中是否包含该功能所需的权限
+ return userPermissions.includes(permissionMap[featureType]);
+}
+
+/**
+ * 过滤菜单或功能列表,只返回用户有权限访问的项
+ * @param {Array} menuList - 菜单或功能列表
+ * @param {Array} userPermissions - 用户拥有的权限数组
+ * @param {String} typeKey - 菜单项中表示功能类型的键名,默认为'type'
+ * @returns {Array} - 过滤后的菜单列表
+ */
+export function filterByPermission(menuList, userPermissions, typeKey = 'type') {
+ if (!menuList || !Array.isArray(menuList)) return [];
+
+ return menuList.filter(item => {
+ const featureType = item[typeKey];
+ return hasPermission(featureType, userPermissions);
+ });
+}
+
+/**
+ * 根据权限代码获取对应的功能类型列表
+ * @param {String} permissionCode - 权限代码
+ * @returns {Array} - 拥有该权限的功能类型列表
+ */
+export function getFeaturesByPermission(permissionCode) {
+ return Object.entries(permissionMap)
+ .filter(([_, code]) => code === permissionCode)
+ .map(([featureType]) => featureType);
+}
\ No newline at end of file