From 6847fb738acf1f94440161cc900f584eeea8c8a3 Mon Sep 17 00:00:00 2001 From: 刘淇 <290219706@qq.com> Date: Wed, 21 Oct 2026 18:48:25 +0800 Subject: [PATCH] 置为失效 --- api/maintain-manage/maintain-manage.js | 5 +++-- pages-sub/daily/maintain-manage/add-record.vue | 6 +++++- pages-sub/daily/maintain-manage/index.vue | 6 +++--- pages-sub/daily/maintain-manage/now-list-page.vue | 51 +++++++++++++++++++++++++++++++-------------------- pages-sub/daily/maintain-manage/type-list-page.vue | 117 ++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------- pages-sub/daily/maintain-manage/type-list.vue | 19 ++++++++++++------- 6 files changed, 98 insertions(+), 106 deletions(-) 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}` }) -- libgit2 0.21.4