diff --git a/App.vue b/App.vue index fa480ff..750f56a 100644 --- a/App.vue +++ b/App.vue @@ -136,7 +136,7 @@ page { top: var(--btn-top, 100px); right: 15px; //transform: translateX(-50%); - background-color: #3c9cff; + background-color: #3b9dff; color: #ffffff; border: none; border-radius: 4px; diff --git a/common/config/env.js b/common/config/env.js index ae149a1..4b9f83e 100644 --- a/common/config/env.js +++ b/common/config/env.js @@ -2,12 +2,12 @@ const env = { // 开发环境 development: { - baseUrl: 'https://test.jichengshanshui.com.cn:28302', + // baseUrl: 'https://test.jichengshanshui.com.cn:28302', // https://test.jichengshanshui.com.cn:28302 - // baseUrl: 'http://192.168.1.111:48081', + baseUrl: 'http://192.168.1.163:48081', - uploadUrl: 'https://test.jichengshanshui.com.cn:28302', + uploadUrl: 'http://192.168.1.163:48081', // baseApi:'admin-api', // appApi:'app-api' }, diff --git a/common/utils/common.js b/common/utils/common.js index 57fb9a3..e6f8956 100644 --- a/common/utils/common.js +++ b/common/utils/common.js @@ -124,6 +124,17 @@ export const getActionButtonType = (code) => { } /** + * 操作按钮行每行按钮数:单个按钮占一半宽度(左对齐),多个按钮等分,最多 5 个一行 + * @param {number} count - 按钮总数 + * @returns {number} 栅格列数 + */ +export const getActionRowCols = (count) => { + const total = Number(count) || 0 + // 1 个按钮时用 2 列,按钮占 1 列即页面一半 + return total <= 1 ? 2 : Math.min(total, 5) +} + +/** * 计算两个时间的时间差,返回格式化字符串(天/小时/分钟/秒,按需显示,无无效单位) * @param {string | Date | number} startTime - 开始时间(时间字符串/Date对象/10位/13位时间戳) * @param {string | Date | number} endTime - 结束时间(时间字符串/Date对象/10位/13位时间戳) diff --git a/pages-sub/daily/maintain-manage/index.vue b/pages-sub/daily/maintain-manage/index.vue index c0cd1de..091bf82 100644 --- a/pages-sub/daily/maintain-manage/index.vue +++ b/pages-sub/daily/maintain-manage/index.vue @@ -82,7 +82,7 @@ - 养护任务 + 执行任务 diff --git a/pages-sub/daily/maintain-manage/now-list-page.vue b/pages-sub/daily/maintain-manage/now-list-page.vue index 6651162..bdadbf6 100644 --- a/pages-sub/daily/maintain-manage/now-list-page.vue +++ b/pages-sub/daily/maintain-manage/now-list-page.vue @@ -145,9 +145,18 @@ const handleAddReport = () => { align-items: center; margin-bottom: 0; } + // 查看按钮:与其他操作按钮统一蓝色样式 .look-btn { - font-size: 28rpx; - color: #1989fa; + box-sizing: border-box; + width: 132rpx; + height: 48rpx; + line-height: 48rpx; + font-size: 24rpx; + text-align: center; + color: #fff; + background-color: #3b9dff; + border-radius: 6rpx; + flex-shrink: 0; } } .empty-wrap { diff --git a/pages-sub/daily/maintain-manage/type-list-page.vue b/pages-sub/daily/maintain-manage/type-list-page.vue index 61e67bf..7ee84f6 100644 --- a/pages-sub/daily/maintain-manage/type-list-page.vue +++ b/pages-sub/daily/maintain-manage/type-list-page.vue @@ -348,13 +348,18 @@ onUnload(() => { color: #666; flex: 1; } +// 统一样式:去作业/去查看/结束任务 统一蓝色,固定宽高保证上下对齐时大小一致 .mini-btn { + box-sizing: border-box; + width: 132rpx; + height: 48rpx; + line-height: 48rpx; font-size: 24rpx; - color: #333; - background: #f5f5f5; - border: 1rpx solid #ddd; + text-align: center; + color: #fff; + background: #3b9dff; border-radius: 6rpx; - padding: 8rpx 20rpx; + padding: 0; flex-shrink: 0; } .invalid-modal-content { diff --git a/pages-sub/problem/ai-manage/index.vue b/pages-sub/problem/ai-manage/index.vue index fe9f017..0911f72 100644 --- a/pages-sub/problem/ai-manage/index.vue +++ b/pages-sub/problem/ai-manage/index.vue @@ -95,7 +95,8 @@ {{ timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }} - + @@ -276,7 +277,7 @@ import { } from '@/api/regional-order-manage/regional-order-manage' import { getTaskActions } from '@/api/work-order-manage/work-order-manage' import { useUserStore } from '@/pinia/user'; -import { nextStepMap, buzStatusMap, getActionButtonType, toWorkerImplementPage } from '@/common/utils/common' +import { nextStepMap, buzStatusMap, getActionButtonType, getActionRowCols, toWorkerImplementPage } from '@/common/utils/common' import { useUploadImgs } from '@/common/utils/useUploadImgs' // ========== 全局实例 & 常量 ========== @@ -510,6 +511,16 @@ const getProcessButtonText = (item) => { const hasConfiguredActions = (item) => Array.isArray(item?.configuredActions) && item.configuredActions.length > 0 +/** 操作按钮行按钮数量:单个占一半宽度,多个等分,最多 5 个一行 */ +const actionBtnCount = (item) => { + if (hasConfiguredActions(item)) { + return item.configuredActions.length + 1 // 配置动作 + 详情 + } + let count = 2 // 主按钮 + 详情 + if (showRejectButton(item)) count++ + return count +} + /** 待办-处理工单:已配置统一动作时直接执行点击的配置动作,否则回退原有处理 */ const handleUnifiedProcess = async (item, action = null) => { const actions = Array.isArray(item?.configuredActions) @@ -749,11 +760,12 @@ onShow(() => { box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04); } -// 卡片操作按钮:自动换行、右对齐,动作多时每行 3~4 个,不再整行铺满 +// 卡片操作按钮:单个占一半宽度,多个等分,每行最多 5 个 .task-btn-row { - display: flex; - flex-wrap: wrap; - justify-content: flex-end; + display: grid; + grid-template-columns: repeat(var(--cols, 5), minmax(0, 1fr)); + column-gap: 12rpx; + row-gap: 10rpx; margin-bottom: -10rpx; } @@ -761,20 +773,23 @@ onShow(() => { box-sizing: border-box; height: 56rpx; line-height: 56rpx; - padding: 0 24rpx; - margin: 0 0 10rpx 12rpx; + padding: 0 12rpx; border-radius: 8rpx; font-size: 24rpx; color: #fff; + text-align: center; white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } +/* 按动作编码配色:通过/实施/结束类动作绿色,退回类橙色 */ .task-btn--primary { - background-color: #3c9cff; + background-color: #3b9dff; } .task-btn--success { - background-color: #5ac725; + background-color: #078d0a; } .task-btn--warning { @@ -789,7 +804,6 @@ onShow(() => { background-color: #909399; } - // 弹窗公共样式 .reject-modal-content, .accept-modal-content { width: 100%; diff --git a/pages-sub/problem/regional-order-manage/index.vue b/pages-sub/problem/regional-order-manage/index.vue index 9eecc81..2a69540 100644 --- a/pages-sub/problem/regional-order-manage/index.vue +++ b/pages-sub/problem/regional-order-manage/index.vue @@ -107,7 +107,8 @@ - + @@ -241,7 +242,7 @@ import { } from '@/api/regional-order-manage/regional-order-manage' import { getTaskActions } from '@/api/work-order-manage/work-order-manage' import { useUserStore } from '@/pinia/user'; -import { nextStepMap, buzStatusMap, getActionButtonType, toWorkerImplementPage } from '@/common/utils/common' +import { nextStepMap, buzStatusMap, getActionButtonType, getActionRowCols, toWorkerImplementPage } from '@/common/utils/common' import { useUploadImgs } from '@/common/utils/useUploadImgs' // ========== 全局实例 & 常量 ========== @@ -491,6 +492,17 @@ const getProcessButtonText = (item) => { const hasConfiguredActions = (item) => Array.isArray(item?.configuredActions) && item.configuredActions.length > 0 +/** 操作按钮行按钮数量:单个占一半宽度,多个等分,最多 5 个一行 */ +const actionBtnCount = (item) => { + if (hasConfiguredActions(item)) { + return item.configuredActions.length + 1 // 配置动作 + 详情 + } + let count = 2 // 主按钮 + 详情 + if (showRejectButton(item)) count++ + if (nextStepMap[item.taskKey]?.renewShow) count++ + return count +} + /** 待办-处理工单:已配置统一动作时直接执行点击的配置动作,否则回退原有处理 */ const handleUnifiedProcess = async (item, action = null) => { const actions = Array.isArray(item?.configuredActions) @@ -576,7 +588,6 @@ const handleProcess = async (item) => { }); } - // 验收弹窗 else if (['巡查员验收', '养护组长验收'].includes(stepName)) { currentAcceptItem.value = item; @@ -745,11 +756,12 @@ onLoad(() => { box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04); } -// 卡片操作按钮:自动换行、右对齐,动作多时每行 3~4 个,不再整行铺满 +// 卡片操作按钮:单个占页面一半宽度(左对齐),多个等分,每行最多 5 个,超出自动换行 .task-btn-row { - display: flex; - flex-wrap: wrap; - justify-content: flex-end; + display: grid; + grid-template-columns: repeat(var(--cols, 5), minmax(0, 1fr)); + column-gap: 12rpx; + row-gap: 10rpx; margin-bottom: -10rpx; } @@ -757,20 +769,23 @@ onLoad(() => { box-sizing: border-box; height: 56rpx; line-height: 56rpx; - padding: 0 24rpx; - margin: 0 0 10rpx 12rpx; + padding: 0 12rpx; border-radius: 8rpx; font-size: 24rpx; color: #fff; + text-align: center; white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } +/* 按动作编码配色:通过/实施/结束类动作绿色,退回类橙色 */ .task-btn--primary { - background-color: #3c9cff; + background-color: #3b9dff; } .task-btn--success { - background-color: #5ac725; + background-color: #078d0a; } .task-btn--warning { @@ -785,7 +800,6 @@ onLoad(() => { background-color: #909399; } - // 新增样式:解决按钮和文字间距、排版问题 .flex-1 { flex: 1; } .text-right { text-align: right; } diff --git a/pages-sub/problem/regional-order-manage/list-detail.vue b/pages-sub/problem/regional-order-manage/list-detail.vue index 39a82a1..fc1168f 100644 --- a/pages-sub/problem/regional-order-manage/list-detail.vue +++ b/pages-sub/problem/regional-order-manage/list-detail.vue @@ -178,7 +178,7 @@ - @@ -237,7 +236,7 @@ - {{ item.name ? item.name.replace('大区经理', '业务调度员') : item.name }} + {{ item.name }} @@ -294,8 +293,9 @@ - - + + {{ action.name }} - - + + 回退 { const hasConfiguredActions = computed(() => Array.isArray(configuredActions.value) && configuredActions.value.length > 0) -/** 底部操作栏行数:详情内容据此预留底部间距,避免按钮遮挡内容 */ +/** 未配置统一动作时的按钮数量:主按钮 + 可选的回退/重新提交 */ +const legacyActionCount = computed(() => { + let count = 1 + if (showRejectButton.value) count++ + if (nextStepMap[orderDetail.value.taskKey]?.renewShow) count++ + return count +}) + +/** 底部操作栏行数:详情内容据此预留底部间距,避免按钮遮挡内容(每行最多 5 个) */ const actionBarRows = computed(() => { if (hasConfiguredActions.value) { - return Math.ceil(configuredActions.value.length / 3) + return Math.ceil(configuredActions.value.length / 5) } - let rows = 1 - if (showRejectButton.value) rows++ - if (nextStepMap[orderDetail.value.taskKey]?.renewShow) rows++ - return rows + return 1 }) /** 主按钮文案:已配置统一动作时取配置的动作名称,未配置时沿用原有节点规则 */ @@ -1261,7 +1266,7 @@ onShow(() => { } // 底部动作按钮:动作多时自动换行 -// 底部操作栏:白底 + 顶部投影,按钮每行最多 3 个,避免多动作时整屏遮挡工单详情 +// 底部操作栏:白底 + 顶部投影,按钮每行最多 5 个,避免多动作时整屏遮挡工单详情 .order-action-bar { background-color: #fff; box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06); @@ -1271,17 +1276,16 @@ onShow(() => { } .order-action-row { - display: flex; - flex-wrap: wrap; - margin: -6rpx; + display: grid; + grid-template-columns: repeat(var(--cols, 5), minmax(0, 1fr)); + column-gap: 12rpx; + row-gap: 12rpx; } .order-action-btn { box-sizing: border-box; - width: calc((100% - 36rpx) / 3); height: 68rpx; line-height: 68rpx; - margin: 6rpx; padding: 0 8rpx; border-radius: 8rpx; font-size: 26rpx; @@ -1292,17 +1296,13 @@ onShow(() => { text-overflow: ellipsis; } -// 未配置统一动作时按钮整行展示,保持原有观感 -.order-action-row--single .order-action-btn { - width: 100%; -} - +/* 按动作编码配色:通过/实施/结束类动作绿色,退回类橙色 */ .order-action-btn--primary { - background-color: #3c9cff; + background-color: #3b9dff; } .order-action-btn--success { - background-color: #5ac725; + background-color: #078d0a; } .order-action-btn--warning {