Sfoglia il codice sorgente

feat:【bpm】流程发起界面:支持跳转到业务表单

YunaiV 4 mesi fa
parent
commit
ac8a407b4b

+ 22 - 9
src/pages-bpm/processInstance/create/index.vue

@@ -55,11 +55,14 @@
             class="flex items-center border-b border-[#f5f5f5] p-24rpx last:border-b-0"
             @click="handleSelect(definition)"
           >
-            <image
+            <wd-img
               v-if="definition.icon"
               :src="definition.icon"
-              class="mr-16rpx h-64rpx w-64rpx rounded-12rpx object-contain"
+              width="64rpx"
+              height="64rpx"
               mode="aspectFit"
+              radius="24rpx"
+              class="mr-16rpx"
             />
             <view
               v-else
@@ -92,7 +95,9 @@ import { computed, nextTick, ref } from 'vue'
 import { useToast } from 'wot-design-uni'
 import { getCategorySimpleList } from '@/api/bpm/category'
 import { getProcessDefinitionList } from '@/api/bpm/definition'
+import { getMobileFormCustomPath } from '@/pages-bpm/utils'
 import { navigateBackPlus } from '@/utils'
+import { BpmModelFormType } from '@/utils/constants'
 
 // TODO @芋艿:【重新发起流程】支持通过 processInstanceId 参数重新发起已有流程
 // 对应 vben 第 44-60 行:从路由获取 processInstanceId,查询流程实例后自动选中对应流程定义并填充表单数据
@@ -232,14 +237,22 @@ function updateCategoryPositions() {
 
 /** 选择流程定义 */
 function handleSelect(item: ProcessDefinition) {
-  // TODO @芋艿:【流程描述提示】显示流程描述 Tooltip
-  // 对应 vben 第 190-195 行:鼠标悬停显示 definition.description
-
-  // TODO @芋艿:【搜索高亮动画】搜索匹配时卡片有弹跳动画效果
-  // 对应 vben 第 169-173 行:搜索时添加 animate-bounce-once 动画类
+  // 情况一:流程表单,提示仅允许 PC 端发起
+  if (item.formType === BpmModelFormType.NORMAL) {
+    // TODO @jason:业务表单:/Users/yunai/Java/yudao-ui-admin-vben-v5/apps/web-antd/src/views/bpm/processInstance/create/modules/form.vue
+    toast.show('流程表单仅支持 PC 端发起')
+    return
+  }
 
-  // TODO @芋艿:跳转到流程表单页面
-  toast.show(`选择了: ${item.name}`)
+  // 情况二:业务表单,跳转到对应的移动端页面
+  if (item.formType === BpmModelFormType.CUSTOM) {
+    const mobilePath = getMobileFormCustomPath(item.formCustomCreatePath)
+    if (mobilePath) {
+      uni.navigateTo({ url: mobilePath })
+    } else {
+      toast.show('该业务表单暂不支持移动端发起')
+    }
+  }
 }
 
 /** 加载分类列表 */

+ 23 - 0
src/pages-bpm/utils/index.ts

@@ -0,0 +1,23 @@
+/**
+ * PC 端业务表单路径 -> 移动端路径映射
+ * - key: PC 端路径 (formCustomCreatePath / formCustomViewPath)
+ * - value: 移动端路径
+ * 原因是:目前暂时没有 mobile 端的自定义表单字段,所以暂时需要硬编码映射关系
+ */
+const PC_TO_MOBILE_PATH_MAP: Record<string, string> = {
+  // OA 请假
+  '/bpm/oa/leave/create': '/pages-bpm/oa/leave/create/index',
+  '/bpm/oa/leave/detail': '/pages-bpm/oa/leave/detail/index',
+}
+
+/**
+ * 根据 PC 端路径获取移动端的跳转路径
+ * @param pcPath PC 端的表单路径
+ * @returns 移动端的跳转路径,如果没有映射则返回 undefined
+ */
+export function getMobileFormCustomPath(pcPath: string | undefined): string | undefined {
+  if (!pcPath) {
+    return undefined
+  }
+  return PC_TO_MOBILE_PATH_MAP[pcPath]
+}