diff --git a/api/maintain-manage/maintain-manage.js b/api/maintain-manage/maintain-manage.js
index 25d9def..bbc92f7 100644
--- a/api/maintain-manage/maintain-manage.js
+++ b/api/maintain-manage/maintain-manage.js
@@ -76,7 +76,7 @@ export const getDetailList = (params) => {
* @returns {Promise}
*/
export const maintainPlan= (params) => {
- return get('/admin-api/garden/maintain-plan/page',params);
+ return get('/app-api/app/garden/maintain-plan-today/page',params);
};
/**
* 养护类型次数
@@ -111,7 +111,8 @@ export const finishPlan= (params = {}) => {
* @returns {Promise}
*/
export const invalidatePlan= (params) => {
- return put('/admin-api/garden/maintain-plan-detail/invalidate',params);
+ const commitId = params && params.commitId != null ? params.commitId : '';
+ return post(`/admin-api/garden/maintain-plan-detail/invalidate?commitId=${encodeURIComponent(commitId)}`,params);
};
diff --git a/pages-sub/daily/maintain-manage/add-record.vue b/pages-sub/daily/maintain-manage/add-record.vue
index 4152411..f01271b 100644
--- a/pages-sub/daily/maintain-manage/add-record.vue
+++ b/pages-sub/daily/maintain-manage/add-record.vue
@@ -157,6 +157,7 @@ import { getByType, getOptionsByCode, getMaterialByCode, workRecordSubmit } from
export default {
data() {
return {
+ commitId:'',
submitting: false,
imagesList: [],
initProgress: 0,
@@ -229,8 +230,11 @@ export default {
onLoad(option) {
console.log('页面参数:', option)
this.paramsOptins = option
- const { businessType, planTypeId } = option
+ const { businessType, planTypeId,commitId } = option
this.loadDynamicFields(businessType, planTypeId)
+ if(commitId){
+ this.commitId = commitId
+ }
},
onReady() {
this.$refs.inspectFormRef.setRules(this.inspectFormRules)
diff --git a/pages-sub/daily/maintain-manage/index.vue b/pages-sub/daily/maintain-manage/index.vue
index 987d92a..983ae6d 100644
--- a/pages-sub/daily/maintain-manage/index.vue
+++ b/pages-sub/daily/maintain-manage/index.vue
@@ -92,10 +92,10 @@
道路名称:
{{ item.roadName || '-' }}
-
+
-
-
- 【第{{ item.sortNum || (index + 1) }}次上报】{{ item.planName }}
+
+
+ 【第{{ item.sortNum || (index + 1) }}次上报】{{ planName }}
- 提交时间:{{ timeFormat(item.createTime,'yyyy-mm-dd')}}
+ 提交时间:{{ timeFormat(item.createTime,'yyyy-mm-dd hh:MM:ss')}}
查看
@@ -30,11 +30,17 @@ import { onShow, onLoad } from '@dcloudio/uni-app'
import { maintainPlanList } from "@/api/maintain-manage/maintain-manage";
import {timeFormat} from '@/uni_modules/uview-plus';
// 上报记录数据
+const dataList = ref([])
const reportList = ref([])
+
let planNo = ref('')
let planTypeId = ref('')
let businessType = ref('')
+let planName = ref('')
let isView = ref(true)
+// 存储commitState=1对应的commitId,没有则为空字符串
+const currentCommitId = ref('')
+
// onLoad接收url传过来的planNo
onLoad((options) => {
if (options.planNo) {
@@ -42,13 +48,11 @@ onLoad((options) => {
planTypeId.value = options.planTypeId
businessType.value = options.businessType
isView.value = options.isView
- // planTypeId=${item.planTypeId}&businessType=${item.busiLine}
getReportList()
} else {
uni.showToast({ title: 'planNo参数缺失', icon: 'none' })
}
})
-
// 请求上报记录接口
const getReportList = async () => {
console.log('3123')
@@ -62,7 +66,24 @@ const getReportList = async () => {
}
const res = await maintainPlanList(data)
// 接口返回list,无数据则reportList为空,页面自动显示empty
- reportList.value = res?.list || []
+ dataList.value = res?.list[0].workRecords
+ planName.value = res?.list[0].planName
+ reportList.value = res?.list || []
+
+
+
+ // ============ 新增逻辑:寻找commitState ===1 的commitId ============
+ currentCommitId.value = ''
+ if(reportList.value.length > 0){
+ // 找到第一条 commitState ===1 的数据
+ const activeItem = reportList.value.find(item => item.commitState === 1)
+ if(activeItem){
+ currentCommitId.value = activeItem.commitId || ''
+ }
+ // 没有找到 activeItem,currentCommitId保持 ''
+ }
+ // reportList为空直接 currentCommitId=''
+
} catch (err) {
console.error('获取上报记录失败', err)
uni.showToast({ title: '加载失败', icon: 'none' })
@@ -70,7 +91,6 @@ const getReportList = async () => {
uni.hideLoading()
}
}
-
// 查看上报详情
const handleView = (item) => {
console.log('查看详情', item)
@@ -79,11 +99,11 @@ const handleView = (item) => {
url: `/pages-sub/daily/maintain-manage/finish-plan-detail?planNo=${item.planNo}&commitId=${item.commitId}`
})
}
-// 新增上报记录,把planNo带到新增页面
+// 新增上报记录,把planNo + currentCommitId带到新增页面
const handleAddReport = () => {
- console.log('上报本次记录')
+ console.log('上报本次记录', currentCommitId.value)
uni.navigateTo({
- url: `/pages-sub/daily/maintain-manage/add-record?planNo=${planNo.value}&planTypeId=${planTypeId.value}&businessType=${businessType.value}`
+ url: `/pages-sub/daily/maintain-manage/add-record?planNo=${planNo.value}&planTypeId=${planTypeId.value}&businessType=${businessType.value}&commitId=${currentCommitId.value}`
})
}
@@ -93,7 +113,6 @@ const handleAddReport = () => {
padding-bottom: 120rpx; // 给底部按钮预留空间
background: #ffffff;
}
-
// 顶部黄色提示条
.tip-bar {
background-color: #f9e0a2;
@@ -102,45 +121,37 @@ const handleAddReport = () => {
padding: 24rpx 20rpx;
line-height: 1.5;
}
-
.list-wrap {
padding: 0;
}
-
.report-item {
padding: 30rpx 24rpx;
border-bottom: 1rpx solid #eee;
-
.item-title {
font-size: 32rpx;
color: #222;
font-weight: 500;
margin-bottom: 20rpx;
}
-
.item-row {
font-size: 28rpx;
color: #555;
margin-bottom: 12rpx;
}
-
.item-row-bottom {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0;
}
-
.look-btn {
font-size: 28rpx;
color: #1989fa;
}
}
-
.empty-wrap {
padding-top: 120rpx;
}
-
.fixed-bottom-btn-wrap {
// position: fixed;
// bottom: 0;
diff --git a/pages-sub/daily/maintain-manage/type-list-page.vue b/pages-sub/daily/maintain-manage/type-list-page.vue
index d2339d4..c736c0d 100644
--- a/pages-sub/daily/maintain-manage/type-list-page.vue
+++ b/pages-sub/daily/maintain-manage/type-list-page.vue
@@ -23,7 +23,7 @@
- 任务次数:第{{ item.planNum || 1 }}次
+ 任务次数:第{{ item.planFinishNum +1 }}次
去作业
去查看
@@ -42,23 +42,14 @@
-
-
+
-
-
- 上传图片(选填)
-
-
+ 确定要置为失效该任务吗?
-
+
@@ -71,9 +62,8 @@
import { ref, computed } from 'vue'
import { onShow, onUnload, onLoad } from '@dcloudio/uni-app'
import { useUserStore } from '@/pinia/user';
-import { maintainPlanNum, finishPlan, invalidatePlan } from "@/api/maintain-manage/maintain-manage";
+import { maintainPlanNum, finishPlan, invalidatePlan, maintainCreate } from "@/api/maintain-manage/maintain-manage";
import { timeFormat } from '@/uni_modules/uview-plus';
-import { useUploadImgs } from '@/common/utils/useUploadImgs'
/** 获取当天日期 yyyy-MM-dd */
const getTodayStr = () => {
@@ -83,7 +73,6 @@ const getTodayStr = () => {
const day = String(d.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
-
const userStore = useUserStore();
const userRoles = computed(() => userStore.userInfo?.roles || []);
// 判断是否拥有置为失效权限:任意一个组长角色就可以
@@ -100,28 +89,19 @@ const statusTabs = ref([
const activeStatus = ref('1')
const pagingRef = ref(null)
const currentList = ref([])
-// 保存上一页传过来的原始数组
-let originRawList: any[] = []
+// originRawList:存储batchNo字符串数组,例 ["BN17925709862917163193","xxx"]
+let originRawList: string[] = []
// 合并之后全部接口返回的总数据
const allTotalData = ref([])
// ===================== 失效弹窗状态 =====================
const invalidModalShow = ref(false)
-const invalidReason = ref('')
const currentInvalidItem = ref(null)
-// ===================== 结束任务确认弹窗【新增】 =====================
+// ===================== 结束任务确认弹窗 =====================
const endTaskModalShow = ref(false)
const currentEndTaskItem = ref(null)
-// 图片上传实例,和回退保持一致,最多3张
-const invalidImgs = useUploadImgs({
- maxCount: 3,
- uploadText: '选择失效图片',
- sizeType: ['compressed'],
- formRef: null,
- fieldName: 'invalidImgs'
-})
+
// 加载数据,根据当前activeStatus动态调用接口
const loadData = async () => {
- // originRawList = uni.getStorageSync('temp_maintain_rawList')
console.log('123123')
if (!originRawList || originRawList.length === 0) {
return
@@ -141,16 +121,17 @@ const loadData = async () => {
// 已完成,只查2
stateArr = ['2']
}
- // 遍历state数组,每个状态,循环rawList里面所有batchNo请求
+ // 遍历state数组
for (const finishState of stateArr) {
- for (const item of originRawList) {
+ // originRawList 为batchNo字符串数组,循环每一个batchNo去请求
+ for (const batchNoItem of originRawList) {
const apiParams: any = {
pageNo: 1,
pageSize: 10,
- planNo: item.planNo || '',
+ planNo: '',
planAttr: '',
finishState: finishState,
- batchNo: item.batchNo
+ batchNo: batchNoItem
}
// 待完成状态追加当天日期 beginTime endTime
if (activeStatus.value === '1') {
@@ -177,11 +158,9 @@ const planTypeId = ref('')
onLoad((options) => {
planTypeId.value = options.planTypeId
});
-// onShow 只保留一处,读取storage,只第一次读取storage
+// onShow 只保留一处,读取storage,originRawList接收batchNo字符串数组
onShow(async () => {
originRawList = uni.getStorageSync('temp_maintain_rawList') || []
- // ✅ 读取完立刻删除,防止脏数据
- // uni.removeStorageSync('temp_maintain_rawList')
await loadData()
})
// z-paging分页查询,直接使用allTotalData
@@ -200,41 +179,49 @@ const handleStatusChange = async (tabItem) => {
// 打开失效弹窗
const handleSetInvalid = (item) => {
currentInvalidItem.value = item
- invalidReason.value = ''
- invalidImgs.clearImgs()
invalidModalShow.value = true
}
// 关闭弹窗,重置数据
const handleInvalidModalCancel = () => {
invalidModalShow.value = false
- invalidReason.value = ''
- invalidImgs.clearImgs()
+ currentInvalidItem.value = null
}
// 确认提交置为失效
const confirmSetInvalid = async () => {
- const reason = invalidReason.value.trim()
- if (!reason) {
- uni.showToast({ title: '请填写失效原因', icon: 'none' })
- return
- }
const item = currentInvalidItem.value
- if (!item || !item.commitId) {
- uni.showToast({ title: '缺少commitId,无法操作', icon: 'none' })
+ console.log(currentInvalidItem.value)
+ if (!item) {
+ uni.showToast({ title: '数据异常', icon: 'none' })
return
}
uni.showLoading({ title: '提交中...', mask: true })
try {
- // 获取上传成功图片url数组,拼接逗号
- const imgUrlArr = invalidImgs.getSuccessImgUrls()
- const invalidFiles = imgUrlArr.join(',')
+ let targetCommitId = item.commitId
+ // ✅ 如果没有 commitId,先执行 maintainCreate 创建草稿
+ if (!targetCommitId) {
+ const submitData = {
+ planNo: item.planNo,
+ imgHost: '1',
+ beginImg: [],
+ commonUserList: [],
+ remark: ''
+ }
+ const createRes: any = await maintainCreate(submitData)
+ // 兼容后端两种返回:裸id / {id:xxx}
+ targetCommitId = createRes && typeof createRes === 'object' ? createRes.id : createRes
+ if (!targetCommitId) {
+ uni.hideLoading()
+ uni.showToast({ title: '创建养护草稿失败,无法置为失效', icon: 'none' })
+ return
+ }
+ }
+
const params = {
- commitId: item.commitId,
- invalidReason: reason,
- invalidFiles: invalidFiles
+ commitId: targetCommitId,
}
console.log('置为失效提交参数:', params)
- // 调用接口 invalidatePlan
- await invalidatePlan(params)
+ console.log(params.commitId)
+ await invalidatePlan({ commitId: params.commitId })
uni.showToast({ title: '操作成功', icon: 'success' })
handleInvalidModalCancel()
// 重新加载数据刷新列表
@@ -262,26 +249,21 @@ const handleEndTaskModalCancel = () => {
endTaskModalShow.value = false
currentEndTaskItem.value = null
}
-// 确认结束任务,真正调用接口【新增】
+// 确认结束任务,真正调用接口
const confirmEndTask = async () => {
const item = currentEndTaskItem.value
- // commitId 由明细列表接口回填(commit_state=1),按钮只在有值时渲染
if (!item || !item.commitId) return
endTaskModalShow.value = false
uni.showLoading({ title: '提交中...', mask: true })
try {
- // 后端 /finish 只认 commitId,且要求本次养护至少有一条有效子上报
await finishPlan({ commitId: item.commitId })
- // 先关 loading 再弹提示:微信端 showLoading/showToast 共用同一个 toast,顺序反了会把成功提示顶掉
uni.hideLoading()
uni.showToast({ title: '结束任务成功', icon: 'success' })
- // 操作成功,重新加载数据,刷新列表(commitId 随之清空,按钮消失)
await loadData()
pagingRef.value?.reload()
} catch (err) {
console.error('结束任务失败', err)
uni.hideLoading()
- // 业务错误 request.js 已弹过后端 msg,这里不重复弹
if (err && err.msg) return
uni.showToast({ title: '结束任务失败,请重试', icon: 'none' })
} finally {
@@ -349,20 +331,9 @@ onUnload(() => {
padding: 8rpx 20rpx;
flex-shrink: 0;
}
-// 弹窗样式,和回退弹窗保持一致
.invalid-modal-content {
width: 100%;
box-sizing: border-box;
padding: 10rpx 0;
}
-.upload-wrap {
- .upload-title {
- font-size: 28rpx;
- color: #333;
- margin-bottom: 10rpx;
- }
-}
-.mt-20 {
- margin-top: 20rpx;
-}
diff --git a/pages-sub/daily/maintain-manage/type-list.vue b/pages-sub/daily/maintain-manage/type-list.vue
index 4d0e57a..c2d3c30 100644
--- a/pages-sub/daily/maintain-manage/type-list.vue
+++ b/pages-sub/daily/maintain-manage/type-list.vue
@@ -6,8 +6,8 @@
@click="toNextPage(item)">
- {{ item.label }}
- ({{ item.count }})
+ {{ item.planTypeName }}
+ ({{ item.todayPendingCount }})
@@ -38,7 +38,7 @@ const roadName = ref(null)
const levelId = ref(null)
onLoad((options) => {
roadName.value = decodeURIComponent(options.roadName)
- levelId.value = decodeURIComponent(options.levelId);
+ // levelId.value = decodeURIComponent(options.levelId);
});
onShow(() => {
if (!roadName.value) {
@@ -55,10 +55,14 @@ const fetchData = async () => {
try {
const res = await maintainPlan({
roadName: roadName.value,
- levelId: levelId.value
+ // roadName: '月坛南街',
+ pageNo:1,
+ pageSize:100,
+ finishState:1
+ // levelId: levelId.value
})
console.log('maintainPlan返回', res)
- if (!Array.isArray(res.list) || res.list.length === 0) {
+ if (res.list.length == 0) {
tagList.value = []
uni.showToast({
title: '暂无养护类型',
@@ -66,7 +70,8 @@ const fetchData = async () => {
});
return
}
- await requestBatchList(res.list)
+ tagList.value = res.list[0].planTypes
+ // await requestBatchList(res.list)
} catch (error) {
console.error('请求失败:', error)
uni.showToast({ title: '网络异常,请重试', icon: 'none' })
@@ -145,7 +150,7 @@ const requestBatchList = async (list: any[]) => {
// 标签点击跳转,rawList存入storage,并且把planTypeId拼到url传给下一页
const toNextPage = (item: any) => {
// maintainStore.setRawList(item.rawList)
- uni.setStorageSync('temp_maintain_rawList', item.rawList)
+ uni.setStorageSync('temp_maintain_rawList', item.batchNos)
uni.navigateTo({
url: `/pages-sub/daily/maintain-manage/type-list-page?planTypeId=${item.planTypeId}`
})