diff --git a/app/api/pubnotice.js b/app/api/pubnotice.js
new file mode 100644
index 0000000..f783071
--- /dev/null
+++ b/app/api/pubnotice.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request.js';
+
+/**
+ * pubnotice 新增
+ * @param {Object} data
+ */
+export function pubnoticeCreateApi(data) {
+ return request.post('autogencode/pubnotice/save', data, { useAdminUrl: true });
+}
+
+/**
+ * pubnotice 更新
+ * @param {Object} data
+ */
+export function pubnoticeUpdateApi(data) {
+ return request.post('autogencode/pubnotice/update', data, { useAdminUrl: true });
+}
+
+/**
+ * pubnotice 详情
+ * @param {string} id noticeId
+ */
+export function pubnoticeDetailApi(id) {
+ return request.get(`autogencode/pubnotice/info/${id}`, {}, { useAdminUrl: true });
+}
+
+/**
+ * pubnotice 批量删除
+ * @param {string[]|string} ids
+ */
+export function pubnoticeDeleteApi(ids) {
+ return request.post('autogencode/pubnotice/delete', ids, { useAdminUrl: true });
+}
+
+/**
+ * pubnotice 列表
+ * @param {Object} params query params (page/limit + 各字段条件)
+ */
+export function pubnoticeListApi(params) {
+ return request.get('autogencode/pubnotice/list', params, { useAdminUrl: true });
+}
+
diff --git a/app/manifest.json b/app/manifest.json
index b8daba4..5c019ef 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -123,6 +123,7 @@
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "",
+ "libVersion" : "latest",
"setting" : {
"urlCheck" : true,
"minified" : true,
diff --git a/app/pages.json b/app/pages.json
index 57959ae..d77e61c 100644
--- a/app/pages.json
+++ b/app/pages.json
@@ -249,6 +249,22 @@
"navigationBarBackgroundColor": "#409EFF",
"navigationBarTextStyle": "white"
}
+ },
+ {
+ "path": "notice/index",
+ "style": {
+ "navigationBarTitleText": "通知公告列表",
+ "navigationBarBackgroundColor": "#409EFF",
+ "navigationBarTextStyle": "white"
+ }
+ },
+ {
+ "path": "notice_detail/index",
+ "style": {
+ "navigationBarTitleText": "通知详情",
+ "navigationBarBackgroundColor": "#409EFF",
+ "navigationBarTextStyle": "white"
+ }
}
]
},
diff --git a/app/pages/index/index.vue b/app/pages/index/index.vue
index 28da406..da7ce28 100644
--- a/app/pages/index/index.vue
+++ b/app/pages/index/index.vue
@@ -50,8 +50,9 @@
-
-
+
+ 物业服务
+
@@ -1426,6 +1427,16 @@
color: #454545;
}
+ .property-service-title {
+ width: 100%;
+ box-sizing: border-box;
+ padding: 20rpx 24rpx 8rpx;
+ font-size: 28rpx;
+ font-weight: 600;
+ color: #2f3a4a;
+ letter-spacing: 1rpx;
+ }
+
.mp-bg {
position: absolute;
left: 0;
diff --git a/app/pages/supply_chain/approval/index.vue b/app/pages/supply_chain/approval/index.vue
index aa29fc5..b8b169f 100644
--- a/app/pages/supply_chain/approval/index.vue
+++ b/app/pages/supply_chain/approval/index.vue
@@ -22,7 +22,7 @@
@@ -64,6 +64,10 @@ export default {
data() {
return {
activeStatus: 'all',
+ statusClassMap: {
+ '待处理': 'status-pending',
+ '已处理': 'status-processed'
+ },
approvals: [
{ id: 1, type: '采购申请', status: '待处理', time: '2026-03-07 10:00', applicant: '张三', content: '采购有机蔬菜100斤', amount: 100 },
{ id: 2, type: '领用申请', status: '待处理', time: '2026-03-07 09:30', applicant: '李四', content: '领用维修耗材', amount: 50 },
@@ -87,14 +91,6 @@ export default {
goBack() {
uni.navigateBack();
},
- getStatusClass(status) {
- if (status === '待处理') {
- return 'status-pending';
- } else if (status === '已处理') {
- return 'status-processed';
- }
- return '';
- },
approveApproval(id) {
// 模拟同意审批
uni.showToast({
diff --git a/app/pages/supply_chain/complaint/index.vue b/app/pages/supply_chain/complaint/index.vue
index ce470e6..d877794 100644
--- a/app/pages/supply_chain/complaint/index.vue
+++ b/app/pages/supply_chain/complaint/index.vue
@@ -123,7 +123,7 @@
{{ item.submitChannel === '0' ? '投诉' : '建议' }}
{{ statusText(item.status) }}
@@ -204,7 +204,18 @@ export default {
page: 1,
limit: 10,
loading: false,
- finished: false
+ finished: false,
+ statusClassMap: {
+ '0': 'status-pending',
+ 0: 'status-pending',
+ '1': 'status-pending',
+ 1: 'status-pending',
+ '2': 'status-processing',
+ 2: 'status-processing',
+ '3': 'status-done',
+ 3: 'status-done',
+ '__default__': 'status-pending'
+ }
};
},
computed: {
@@ -327,14 +338,6 @@ export default {
if (status === '3') return '已处理';
return status;
},
- statusClass(status) {
- const text = this.statusText(status);
- if (text === '已处理') return 'status-done';
- if (text === '待处理') return 'status-pending';
- if (text === '未处理') return 'status-pending';
- if (text === '处理中') return 'status-processing';
- return '';
- }
}
};
diff --git a/app/pages/supply_chain/material_receipt/index.vue b/app/pages/supply_chain/material_receipt/index.vue
index 5488b72..2572b38 100644
--- a/app/pages/supply_chain/material_receipt/index.vue
+++ b/app/pages/supply_chain/material_receipt/index.vue
@@ -42,7 +42,7 @@
@@ -82,6 +82,11 @@ export default {
purpose: '',
applicant: ''
},
+ statusClassMap: {
+ '待审批': 'status-pending',
+ '已审批': 'status-approved',
+ '已拒绝': 'status-rejected'
+ },
materials: [
{ id: 1, name: '维修耗材' },
{ id: 2, name: '办公用品' },
@@ -133,16 +138,6 @@ export default {
showCancel: false
});
},
- getStatusClass(status) {
- if (status === '待审批') {
- return 'status-pending';
- } else if (status === '已审批') {
- return 'status-approved';
- } else if (status === '已拒绝') {
- return 'status-rejected';
- }
- return '';
- }
}
};
diff --git a/app/pages/supply_chain/notice/index.vue b/app/pages/supply_chain/notice/index.vue
new file mode 100644
index 0000000..73afa2b
--- /dev/null
+++ b/app/pages/supply_chain/notice/index.vue
@@ -0,0 +1,527 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+ 全部
+ 内部
+ 外部
+
+
+
+ 全部状态
+ 草稿
+ 提交
+
+
+
+
+
+
+
+ 暂无通知公告
+
+
+
+
+
+
+
+ 通知类型:
+ {{ item.noticeType || '—' }}
+
+
+ 通知范围:
+ {{ item.noticeScope || '—' }}
+
+
+ 拟稿单位:
+ {{ item.draftDept || '—' }}
+
+
+ 通知来源:
+ {{ item.noticeSource }}
+
+
+
+ {{ contentPreview(item.noticeContent) }}
+
+
+
+
+
+
+ 加载中...
+ 已加载全部
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/supply_chain/notice_detail/index.vue b/app/pages/supply_chain/notice_detail/index.vue
new file mode 100644
index 0000000..9fefec6
--- /dev/null
+++ b/app/pages/supply_chain/notice_detail/index.vue
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+ {{ notice.noticeTitle || '未命名通知' }}
+
+
+ {{ typeText(notice.type) }}
+ {{ statusText(notice.status) }}
+ {{ smsText(notice.smsStatus) }}
+
+
+
+
+
+ 通知类型:
+ {{ notice.noticeType }}
+
+
+ 通知来源:
+ {{ notice.noticeSource }}
+
+
+ 拟稿单位:
+ {{ notice.draftDept }}
+
+
+ 通知范围:
+ {{ notice.noticeScope }}
+
+
+ 业务信息:
+ {{ bizText(notice.bizType, notice.bizId) }}
+
+
+ 通知时间:
+ {{ formatDate(notice.noticeTime) }}
+
+
+ 备注:
+
+
+
+
+
+
+ 暂无通知内容
+
+
+
+
+
+ 暂无详情数据
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
diff --git a/app/pages/supply_chain/purchase/index.vue b/app/pages/supply_chain/purchase/index.vue
index f29a219..57cd0d4 100644
--- a/app/pages/supply_chain/purchase/index.vue
+++ b/app/pages/supply_chain/purchase/index.vue
@@ -72,7 +72,7 @@
@@ -150,6 +150,11 @@ export default {
description: '',
images: []
},
+ statusClassMap: {
+ '已下单': 'status-ordered',
+ '配送中': 'status-delivering',
+ '已完成': 'status-completed'
+ },
orders: [
{ id: 1, orderNo: 'CG20260307001', name: '有机蔬菜', quantity: 100, status: '已下单', orderTime: '2026-03-07', expectedTime: '2026-03-09' },
{ id: 2, orderNo: 'CG20260307002', name: '新鲜水果', quantity: 50, status: '配送中', orderTime: '2026-03-06', expectedTime: '2026-03-08' },
@@ -262,18 +267,6 @@ export default {
};
}, 1500);
},
- getStatusClass(status) {
- switch (status) {
- case '已下单':
- return 'status-ordered';
- case '配送中':
- return 'status-delivering';
- case '已完成':
- return 'status-completed';
- default:
- return '';
- }
- }
}
};
@@ -395,7 +388,7 @@ export default {
}
.upload-box {
- .display: flex;
+ display: flex;
flex-wrap: wrap;
.upload-btn {
@@ -562,7 +555,7 @@ export default {
}
.item-footer {
- .display: flex;
+ display: flex;
justify-content: flex-end;
.detail-btn {
diff --git a/app/pages/supply_chain/repair/index.vue b/app/pages/supply_chain/repair/index.vue
index d864d99..670b7b9 100644
--- a/app/pages/supply_chain/repair/index.vue
+++ b/app/pages/supply_chain/repair/index.vue
@@ -59,7 +59,7 @@
-
+
报修内容
- {{ form.handleContent.length }}/300
+ {{ form.faultDesc.length }}/300
@@ -130,13 +130,13 @@
{{ statusText(item.status) }}
- {{ item.assignTime || item.createTime || '' }}
+ {{ item.reportTime || item.createTime || '' }}
@@ -147,41 +147,28 @@
{{ getFaultTypeLabel(item.faultType) }}
-
+
报修内容
- {{ item.assigneContext }}
-
-
-
- 执行人
-
- {{ item.executorName }}
+ {{ item.faultDesc }}
-
- 预计完成
-
- {{ item.expectedCompleteTime }}
-
-
-
- 实际完成
-
- {{ item.completeTime }}
-
-
-
- 处理情况
-
- {{ item.handleContent }}
-
-
-
- 维修费用
-
- ¥{{ item.costAmount }}
-
+
+
+
+
+
@@ -221,9 +208,9 @@
{{ (item.unitNo ? item.unitNo + '单元' : '') + (item.floorNo ? ' ' + item.floorNo + '层' : '') + (item.houseNo ? ' ' + item.houseNo + '室' : '') || item.houseName || '房屋' }}
-
+
this.faultTypeIndex) {
return types[this.faultTypeIndex].dictLabel;
@@ -333,7 +333,7 @@ export default {
const unitPart = item.unitNo ? item.unitNo + '单元' : '';
const floorPart = item.floorNo ? item.floorNo + '层' : '';
const housePart = item.houseNo ? item.houseNo + '室' : '';
- this.selectedHouseName = [unitPart, floorPart, housePart].filter(Boolean).join(' ');
+ this.selectedHouseName = [unitPart, floorPart, housePart].filter(Boolean).join('');
this.housePopupVisible = false;
},
chooseImage() {
@@ -410,7 +410,7 @@ export default {
});
return;
}
- if (!this.form.handleContent.trim()) {
+ if (!this.form.faultDesc.trim()) {
uni.showToast({
title: '请填写报修内容',
icon: 'none'
@@ -421,12 +421,7 @@ export default {
// 处理图片信息
const imagefiles = this.images.map(file => {
let attDir = file.url;
- // 如果路径以/file/public/开头,去掉这个前缀,因为后端存储格式不需要
- if (attDir.startsWith('file/public/')) {
- attDir = attDir.replace('file/public/', '')
- } else if (attDir.startsWith('file/')) {
- attDir = attDir.replace('file/', '')
- }
+
return {
attId: file.id + '',
name: file.fileName,
@@ -441,10 +436,10 @@ export default {
});
const payload = {
- phone: this.form.phone.trim(),
- assigneContext: this.form.handleContent.trim(),
- remark: this.form.expectedTime.trim(),
+ // phone: this.form.phone.trim(),
+ faultDesc: this.form.faultDesc.trim(),
status: this.form.status || '0',
+ houseId: this.selectedHouseId,
houseName: this.selectedHouseName,
files: imagefiles,
faultType: this.form.faultType
@@ -460,10 +455,9 @@ export default {
});
this.form.phone = '';
- this.form.handleContent = '';
- this.form.expectedTime = '';
+ this.form.faultDesc = '';
this.form.faultType = '';
- this.faultTypeIndex = 0;
+ this.faultTypeIndex = -1;
this.images = [];
this.page = 1;
@@ -517,6 +511,17 @@ export default {
this.loading = false;
}
},
+ previewRecordImages(files, index) {
+ if (!files || !files.length) return;
+ const urls = files.map(file => {
+ const path = file.url || file.attDir || file.filePath;
+ return this.HTTP_ADMIN_URL + '/' + path;
+ });
+ uni.previewImage({
+ current: index,
+ urls
+ });
+ },
statusText(status) {
if (status === 0 || status === '0') return '待处理';
if (status === 1 || status === '1') return '处理中';
@@ -524,13 +529,6 @@ export default {
if (status === 99 || status === '99') return '已办结';
return status;
},
- statusClass(status) {
- const text = this.statusText(status);
- if (text === '已处理' || text === '已办结') return 'status-done';
- if (text === '处理中') return 'status-doing';
- if (text === '待处理') return 'status-pending';
- return '';
- },
getFaultTypeLabel(value) {
const types = this.dict.get('fault_type');
if (types) {
@@ -799,6 +797,7 @@ export default {
font-weight: 600;
color: #333;
margin-right: 16rpx;
+ max-width: 300rpx;
}
.status {
@@ -846,6 +845,28 @@ export default {
color: #333;
}
}
+
+ .image-grid {
+ margin-top: 12rpx;
+ margin-left: 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12rpx;
+
+ .image-item {
+ width: calc((100% - 24rpx) / 3);
+ aspect-ratio: 1 / 1;
+ border-radius: 8rpx;
+ overflow: hidden;
+ background-color: #f5f5f5;
+
+ image {
+ width: 100%;
+ height: 100%;
+ display: block;
+ }
+ }
+ }
}
}
diff --git a/app/project.config.json b/app/project.config.json
index 4a444ab..c67ca5d 100644
--- a/app/project.config.json
+++ b/app/project.config.json
@@ -1,7 +1,7 @@
{
"appid": "wxd29e5ba4ccbcca2f",
"compileType": "miniprogram",
- "libVersion": "3.1.4",
+ "libVersion": "latest",
"packOptions": {
"ignore": [],
"include": []
diff --git a/app/project.private.config.json b/app/project.private.config.json
index e3257c6..b7416cd 100644
--- a/app/project.private.config.json
+++ b/app/project.private.config.json
@@ -4,5 +4,5 @@
"setting": {
"compileHotReLoad": true
},
- "libVersion": "3.1.4"
-}
\ No newline at end of file
+ "libVersion": "latest"
+}