Commit 5f7ce1e46febb7d0b36ea1bc27a7cb3ba301b95a

Authored by 王彪总
1 parent f45d1cb7

业务线 小程序不用写死,从后端接口获取

components/unified-task-actions/unified-task-actions.vue
@@ -69,7 +69,8 @@ @@ -69,7 +69,8 @@
69 </view> 69 </view>
70 70
71 <view class="unified-action-btns"> 71 <view class="unified-action-btns">
72 - <up-button type="info" size="large" @click="backToList">返回</up-button> 72 + <!-- 只有一个动作时没有选择列表可返回,直接展示确定 -->
  73 + <up-button v-if="actions.length > 1" type="info" size="large" @click="backToList">返回</up-button>
73 <up-button type="primary" size="large" :loading="submitting" @click="submit">确定</up-button> 74 <up-button type="primary" size="large" :loading="submitting" @click="submit">确定</up-button>
74 </view> 75 </view>
75 </view> 76 </view>
@@ -105,15 +106,34 @@ const attachImgs = useUploadImgs({ @@ -105,15 +106,34 @@ const attachImgs = useUploadImgs({
105 uploadText: '选择附件' 106 uploadText: '选择附件'
106 }) 107 })
107 108
108 -const reasonRequired = computed(() => {  
109 - if (!current.value) return false 109 +/** 该动作是否必须填写原因/备注 */
  110 +const isReasonRequired = (action) => {
  111 + if (!action) return false
110 return ( 112 return (
111 - current.value.requireReason === true ||  
112 - ['REJECT', 'RETURN', 'RETURN_PREV', 'TRANSFER', 'DELEGATE'].includes(current.value.code) 113 + action.requireReason === true ||
  114 + ['REJECT', 'RETURN', 'RETURN_PREV', 'TRANSFER', 'DELEGATE'].includes(action.code)
113 ) 115 )
114 -}) 116 +}
  117 +
  118 +const reasonRequired = computed(() => isReasonRequired(current.value))
  119 +
  120 +/** 动作是否需要用户补充信息(处理人/必填原因/附件),都不需要时直接提交 */
  121 +const needsInput = (action) => {
  122 + if (!action) return false
  123 + return action.requireAssignee === true
  124 + || action.requireAttachment === true
  125 + || isReasonRequired(action)
  126 +}
115 127
116 -/** 打开动作弹窗 */ 128 +/**
  129 + * 打开动作弹窗
  130 + *
  131 + * 列表页的按钮文案就是动作名称,按钮自身已经限定了动作,
  132 + * 所以只有一个动作时不再展示「请选择操作」列表:
  133 + * - 动作无必填内容:直接提交(例如「分配」由后端按道路自动指派);
  134 + * - 动作需要处理人/原因/附件:直接进入动作表单。
  135 + * 只有传入多个动作(需要用户区分)时才展示动作列表。
  136 + */
117 const open = async (item, actionList) => { 137 const open = async (item, actionList) => {
118 currentItem.value = item 138 currentItem.value = item
119 actions.value = actionList || [] 139 actions.value = actionList || []
@@ -121,6 +141,19 @@ const open = async (item, actionList) =&gt; { @@ -121,6 +141,19 @@ const open = async (item, actionList) =&gt; {
121 form.nextAssignee = '' 141 form.nextAssignee = ''
122 form.reason = '' 142 form.reason = ''
123 attachImgs.clearImgs() 143 attachImgs.clearImgs()
  144 +
  145 + if (actions.value.length === 1) {
  146 + const action = actions.value[0]
  147 + if (needsInput(action)) {
  148 + visible.value = true
  149 + await selectAction(action)
  150 + } else {
  151 + current.value = action
  152 + await submit()
  153 + }
  154 + return
  155 + }
  156 +
124 visible.value = true 157 visible.value = true
125 } 158 }
126 159
pages-sub/problem/ai-manage/index.vue
@@ -503,7 +503,8 @@ const handleUnifiedProcess = async (item) =&gt; { @@ -503,7 +503,8 @@ const handleUnifiedProcess = async (item) =&gt; {
503 ? item.configuredActions 503 ? item.configuredActions
504 : await queryUnifiedActions(item) 504 : await queryUnifiedActions(item)
505 if (actions) { 505 if (actions) {
506 - unifiedActionsRef.value?.open(item, actions) 506 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  507 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
507 return 508 return
508 } 509 }
509 handleProcess(item) 510 handleProcess(item)
pages-sub/problem/regional-order-manage/index.vue
@@ -478,7 +478,8 @@ const handleUnifiedProcess = async (item) =&gt; { @@ -478,7 +478,8 @@ const handleUnifiedProcess = async (item) =&gt; {
478 ? item.configuredActions 478 ? item.configuredActions
479 : await queryUnifiedActions(item) 479 : await queryUnifiedActions(item)
480 if (actions) { 480 if (actions) {
481 - unifiedActionsRef.value?.open(item, actions) 481 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  482 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
482 return 483 return
483 } 484 }
484 handleProcess(item) 485 handleProcess(item)
pages-sub/problem/regional-order-manage/list-detail.vue
@@ -535,7 +535,8 @@ const handleUnifiedProcess = async (item: any) =&gt; { @@ -535,7 +535,8 @@ const handleUnifiedProcess = async (item: any) =&gt; {
535 ? configuredActions.value 535 ? configuredActions.value
536 : await queryUnifiedActions(item?.taskId) 536 : await queryUnifiedActions(item?.taskId)
537 if (actions) { 537 if (actions) {
538 - unifiedActionsRef.value?.open(item, actions) 538 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  539 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
539 return 540 return
540 } 541 }
541 handleProcess(item) 542 handleProcess(item)
pages-sub/problem/regional-order-manage/order-detail.vue
@@ -603,7 +603,8 @@ const handleUnifiedProcess = async (item: any) =&gt; { @@ -603,7 +603,8 @@ const handleUnifiedProcess = async (item: any) =&gt; {
603 ? configuredActions.value 603 ? configuredActions.value
604 : await queryUnifiedActions(item?.taskId) 604 : await queryUnifiedActions(item?.taskId)
605 if (actions) { 605 if (actions) {
606 - unifiedActionsRef.value?.open(item, actions) 606 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  607 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
607 return 608 return
608 } 609 }
609 handleProcess(item) 610 handleProcess(item)
pages-sub/problem/work-order-manage/index.vue
@@ -545,7 +545,8 @@ const handleUnifiedProcess = async (item) =&gt; { @@ -545,7 +545,8 @@ const handleUnifiedProcess = async (item) =&gt; {
545 ? item.configuredActions 545 ? item.configuredActions
546 : await queryUnifiedActions(item) 546 : await queryUnifiedActions(item)
547 if (actions) { 547 if (actions) {
548 - unifiedActionsRef.value?.open(item, actions) 548 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  549 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
549 return 550 return
550 } 551 }
551 handleProcess(item) 552 handleProcess(item)
pages-sub/problem/work-order-manage/order-detail.vue
@@ -751,7 +751,8 @@ const handleUnifiedProcess = async (item: any) =&gt; { @@ -751,7 +751,8 @@ const handleUnifiedProcess = async (item: any) =&gt; {
751 ? configuredActions.value 751 ? configuredActions.value
752 : await queryUnifiedActions(item) 752 : await queryUnifiedActions(item)
753 if (actions) { 753 if (actions) {
754 - unifiedActionsRef.value?.open(item, actions) 754 + // 主按钮文案就是第一个动作,直接执行该动作,不再弹「请选择操作」让用户二次选择
  755 + unifiedActionsRef.value?.open(item, actions.slice(0, 1))
755 return 756 return
756 } 757 }
757 handleProcess(item) 758 handleProcess(item)