diff --git a/manifest.json b/manifest.json index 6538887..705b9c9 100644 --- a/manifest.json +++ b/manifest.json @@ -56,7 +56,7 @@ "quickapp" : {}, /* 小程序特有相关 */ "mp-weixin" : { - "appid" : "wx2cec08446ce214ee", + "appid" : "wxaec84a18ccf98226", "setting" : { "urlCheck" : false, "es6" : true, diff --git a/pages.json b/pages.json index 70962c4..2b3301a 100644 --- a/pages.json +++ b/pages.json @@ -221,6 +221,24 @@ "navigationStyle": "custom", "navigationBarTitleText": "物业催缴" } + }, + { + "path": "housing/list", + "style": { + "enablePullDownRefresh": false, + "navigationBarTextStyle": "black", + "navigationStyle": "custom", + "navigationBarTitleText": "房源管理" + } + }, + { + "path": "housing/detail", + "style": { + "enablePullDownRefresh": false, + "navigationBarTextStyle": "black", + "navigationStyle": "custom", + "navigationBarTitleText": "房源详情" + } } ] }], diff --git a/pages/index/index.vue b/pages/index/index.vue index ea4a904..d7dcb39 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -141,14 +141,14 @@ ]) const gridList = ref([ { - image: uni.$globalData?.RESOURCE_URL + 'home/grid/gongdan.png', + image: uni.$globalData?.RESOURCE_URL + 'home/grid/xiaoxi.png', title: '我的工单', type: 'my_order' }, { - image: uni.$globalData?.RESOURCE_URL + 'home/grid/fangke.png', - title: '访客邀请', - type: '' + image: uni.$globalData?.RESOURCE_URL + 'home/grid/yaoqing.png', + title: '邀请业主', + type: 'invite' }, { image: uni.$globalData?.RESOURCE_URL + 'home/grid/cuijiao.png', @@ -161,9 +161,9 @@ type: 'complaint' }, { - image: uni.$globalData?.RESOURCE_URL + 'home/grid/yaoqing.png', - title: '邀请业主', - type: 'invite' + image:uni.$globalData?.RESOURCE_URL + 'home/grid/fangke.png' , + title: '访客邀请', + type: '' }, { image: uni.$globalData?.RESOURCE_URL + 'home/grid/wenjuan.png', @@ -173,7 +173,7 @@ { image: uni.$globalData?.RESOURCE_URL + 'home/grid/fangyuan.png', title: '房源管理', - type: '' + type: 'housing' }, // { // image: uni.$globalData?.RESOURCE_URL + 'home/grid/chewei.png', @@ -181,7 +181,7 @@ // type: '' // }, { - image: uni.$globalData?.RESOURCE_URL + 'home/grid/xiaoxi.png', + image:uni.$globalData?.RESOURCE_URL + 'home/grid/gongdan.png' , title: '商品核销', type: 'verification' } @@ -293,6 +293,12 @@ url: '/pagesB/call/index' }); break; + case 'housing': + // 房源管理 + uni.navigateTo({ + url: '/pagesB/housing/list' + }); + break; default: break; } diff --git a/pagesA/invite/SharePoster.vue b/pagesA/invite/SharePoster.vue new file mode 100644 index 0000000..1283ee1 --- /dev/null +++ b/pagesA/invite/SharePoster.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file diff --git a/pagesA/my_order/detail.vue b/pagesA/my_order/detail.vue index 417e445..6ddaef9 100644 --- a/pagesA/my_order/detail.vue +++ b/pagesA/my_order/detail.vue @@ -16,7 +16,7 @@ - + @@ -28,17 +28,18 @@ 创建时间: {{ticketInfo.create_time}} - + 配送 量房 维修 - + - + @@ -58,25 +59,25 @@ - + 联系信息 - + 小区名称 {{ticketInfo?.order?.village_name}} - + 联系人 {{ticketInfo?.order?.name}} - + 联系电话 @@ -84,58 +85,72 @@ {{ticketInfo?.order?.mobile}} - - + + + + + {{product.product_name}} + {{product.spec_name}} + + ¥{{product.price}} + x{{product.num}} + + + + + + + + 共{{ticketInfo?.product.length}}件商品 + 合计: ¥{{getTotalPrice()}} - --> + - + 报修信息 - + 报修位置 - {{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}} + {{ticketInfo?.order?.region_name}}{{ticketInfo?.order?.cell_name}}{{ticketInfo?.order?.house_name}}{{ticketInfo?.order?.address}} - + 问题描述 {{ticketInfo?.order?.content}} - + 现场照片 - - + + - + 工单记录 - + @@ -144,15 +159,15 @@ 创建工单 - + 2025-03-13 11:25:18 工单已接单 - + - + @@ -162,7 +177,7 @@ - + @@ -174,15 +189,16 @@ + + \ No newline at end of file diff --git a/pagesB/housing/list.vue b/pagesB/housing/list.vue new file mode 100644 index 0000000..02409e3 --- /dev/null +++ b/pagesB/housing/list.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/pagesB/questionnaire/detail.vue b/pagesB/questionnaire/detail.vue index 6757920..c63c3c4 100644 --- a/pagesB/questionnaire/detail.vue +++ b/pagesB/questionnaire/detail.vue @@ -1,9 +1,441 @@ - - \ No newline at end of file diff --git a/pagesB/questionnaire/list.vue b/pagesB/questionnaire/list.vue index 25a7160..06d821a 100644 --- a/pagesB/questionnaire/list.vue +++ b/pagesB/questionnaire/list.vue @@ -10,34 +10,33 @@ @click="toPages({type:'nav'})"> - 问卷管理 + 问卷记录 - + - - - - - - + + + + + @@ -76,6 +75,14 @@ + + + + {{item.user_name}} + 匿名 + + + {{item.village_name}} @@ -87,25 +94,18 @@ - - {{item.participant_count}}人 + + {{item.submit_time}} - - - - - {{item.start_time}} ~ - {{item.end_time}} + + + + {{item.question_count}}题 - - - - 编辑 - 删除 - + + 查看详情 @@ -116,7 +116,7 @@ - 暂无问卷数据 + 暂无问卷记录 @@ -130,6 +130,71 @@ -- 没有更多数据了 -- + + + + + + 筛选类型 + + + + 提交时间 + + + 今天 + 昨天 + 近7天 + 近30天 + + + + + + + + + + + + + 问卷类型 + + + {{type.label}} + + + + 其他筛选 + + + 只看匿名提交 + + + + + + 重置 + 确定 + + + @@ -148,9 +213,6 @@ checkRouteStack } = useNavigation(); - // 权限控制 - const hasPermission = ref(true); // 实际项目中应该从用户信息或权限系统中获取 - // 状态管理 const selectedVillage = ref('ALL'); // 设置默认为全部小区 const activeStatus = ref('ALL'); @@ -159,6 +221,16 @@ const page = ref(1); const pageSize = ref(10); + // 筛选相关 + const showFilterPopup = ref(false); + const dateRange = ref(''); + const startDate = ref(''); + const endDate = ref(''); + const showStartPicker = ref(false); + const showEndPicker = ref(false); + const selectedTypes = ref([]); + const filterAnonymous = ref(false); + // 小区列表 const villageList = ref([ { value: '1', label: '阳光花园小区' }, @@ -166,12 +238,20 @@ { value: '3', label: '金色家园' } ]); + // 问卷类型列表 + const typeList = ref([ + { value: '1', label: '满意度调查' }, + { value: '2', label: '意见征集' }, + { value: '3', label: '投票选举' }, + { value: '4', label: '需求调研' }, + { value: '5', label: '活动报名' } + ]); + // 状态筛选选项 const statusList = ref([ { label: '全部', value: 'ALL' }, - { label: '未开始', value: 0 }, - { label: '进行中', value: 1 }, - { label: '已结束', value: 2 } + { label: '已查看', value: 1 }, + { label: '未查看', value: 0 } ]); // 模拟问卷列表数据 @@ -181,59 +261,63 @@ title: '2024年度物业服务满意度调查', village_name: '阳光花园小区', type: '满意度调查', - participant_count: 156, - start_time: '2024-06-01', - end_time: '2024-06-30', - status: 1 + user_name: '张三', + is_anonymous: false, + submit_time: '2024-06-15 14:23', + question_count: 15, + status: 1 // 已查看 }, { id: 2, title: '小区环境改造意见征集', - village_name: '阳光花园小区', + village_name: '翠湖庭院', type: '意见征集', - participant_count: 89, - start_time: '2024-07-01', - end_time: '2024-07-15', - status: 0 + user_name: '李四', + is_anonymous: true, + submit_time: '2024-06-12 09:45', + question_count: 8, + status: 0 // 未查看 }, { id: 3, title: '业主委员会换届选举投票', - village_name: '阳光花园小区', + village_name: '金色家园', type: '投票选举', - participant_count: 245, - start_time: '2024-05-01', - end_time: '2024-05-15', - status: 2 + user_name: '王五', + is_anonymous: false, + submit_time: '2024-06-10 18:30', + question_count: 12, + status: 1 // 已查看 }, { - id: 3, - title: '业主委员会换届选举投票', + id: 4, + title: '小区健身设施需求调研', village_name: '阳光花园小区', - type: '投票选举', - participant_count: 245, - start_time: '2024-05-01', - end_time: '2024-05-15', - status: 2 + type: '需求调研', + user_name: '赵六', + is_anonymous: false, + submit_time: '2024-06-08 11:20', + question_count: 10, + status: 1 // 已查看 }, { - id: 3, - title: '业主委员会换届选举投票', - village_name: '阳光花园小区', - type: '投票选举', - participant_count: 245, - start_time: '2024-05-01', - end_time: '2024-05-15', - status: 2 + id: 5, + title: '端午节活动满意度调查', + village_name: '翠湖庭院', + type: '满意度调查', + user_name: '匿名用户', + is_anonymous: true, + submit_time: '2024-06-05 16:40', + question_count: 6, + status: 0 // 未查看 } ]); // 状态颜色配置 const getStatusColor = (status) => { const colorMap = { - 0: '#ff9d00', // 未开始 - 1: '#0070F0', // 进行中 - 2: '#999999' // 已结束 + 0: '#ff9d00', // 未查看 + 1: '#07c160' // 已查看 }; return colorMap[status] || '#666666'; }; @@ -241,9 +325,8 @@ // 状态背景色配置 const getStatusBgColor = (status) => { const bgColorMap = { - 0: '#fff6e9', // 未开始 - 1: '#e8f4ff', // 进行中 - 2: '#f5f5f5' // 已结束 + 0: '#fff6e9', // 未查看 + 1: '#e8fff1' // 已查看 }; return bgColorMap[status] || '#f5f5f5'; }; @@ -251,9 +334,8 @@ // 状态文字配置 const getStatusText = (status) => { const textMap = { - 0: '未开始', - 1: '进行中', - 2: '已结束' + 0: '未查看', + 1: '已查看' }; return textMap[status] || '未知状态'; }; @@ -287,43 +369,12 @@ } loading.value = false; } catch (error) { - console.error('加载问卷列表失败', error); + console.error('加载问卷记录失败', error); Toast.fail('加载失败,请重试'); loading.value = false; } }; - // 创建问卷 - const createQuestionnaire = () => { - uni.navigateTo({ - url: '/pagesB/questionnaire/edit' - }); - }; - - // 编辑问卷 - const handleEdit = (item) => { - uni.navigateTo({ - url: `/pagesB/questionnaire/edit?id=${item.id}` - }); - }; - - // 删除问卷 - const handleDelete = (item) => { - uni.showModal({ - title: '提示', - content: '确定要删除该问卷吗?', - success: async (res) => { - if (res.confirm) { - Toast.loading('删除中...'); - // 实际项目中这里应该调用API - await new Promise(resolve => setTimeout(resolve, 800)); - Toast.success('删除成功'); - loadQuestionnaireList(); - } - } - }); - }; - // 页面跳转 const toPages = (item) => { switch (item.type) { @@ -338,6 +389,11 @@ }); break; case 'detail': + // 更新记录状态为已查看 + const record = questionnaireList.value.find(q => q.id === item.value.id); + if (record && record.status === 0) { + record.status = 1; + } uni.navigateTo({ url: `/pagesB/questionnaire/detail?id=${item.value.id}` }); @@ -372,7 +428,7 @@ loadQuestionnaireList(); }); - // 新增变量 + // 小区选择相关 const showVillagePicker = ref(false); const pickerVillageList = ref([ [ @@ -383,17 +439,84 @@ ] ]); - // 新增方法 - const getVillageName = (value) => { - const village = villageList.value.find(item => item.value === value); - return village ? village.label : '未知小区'; - }; - const handleVillageConfirm = (selectedItem) => { selectedVillage.value = selectedItem[0].value; resetList(); loadQuestionnaireList(); }; + + // 筛选相关方法 + const showFilter = () => { + showFilterPopup.value = true; + }; + + const setDateRange = (range) => { + dateRange.value = range; + const now = new Date(); + + switch (range) { + case 'today': + startDate.value = formatDate(now); + endDate.value = formatDate(now); + break; + case 'yesterday': + const yesterday = new Date(now); + yesterday.setDate(now.getDate() - 1); + startDate.value = formatDate(yesterday); + endDate.value = formatDate(yesterday); + break; + case 'week': + const weekStart = new Date(now); + weekStart.setDate(now.getDate() - 7); + startDate.value = formatDate(weekStart); + endDate.value = formatDate(now); + break; + case 'month': + const monthStart = new Date(now); + monthStart.setDate(now.getDate() - 30); + startDate.value = formatDate(monthStart); + endDate.value = formatDate(now); + break; + } + }; + + const formatDate = (date) => { + if (!date) return ''; + if (typeof date === 'string') return date; + + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + }; + + const handleDateChange = () => { + dateRange.value = ''; + }; + + const toggleTypeSelection = (typeValue) => { + const index = selectedTypes.value.indexOf(typeValue); + if (index > -1) { + selectedTypes.value.splice(index, 1); + } else { + selectedTypes.value.push(typeValue); + } + }; + + const resetFilters = () => { + dateRange.value = ''; + startDate.value = ''; + endDate.value = ''; + selectedTypes.value = []; + filterAnonymous.value = false; + }; + + const applyFilters = () => { + showFilterPopup.value = false; + resetList(); + loadQuestionnaireList(); + Toast.success('筛选条件已应用'); + };