From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/bpm/model/definition/index.vue |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 0 deletions(-)

diff --git a/src/views/bpm/model/definition/index.vue b/src/views/bpm/model/definition/index.vue
new file mode 100644
index 0000000..2b061f4
--- /dev/null
+++ b/src/views/bpm/model/definition/index.vue
@@ -0,0 +1,174 @@
+<template>
+  <doc-alert title="宸ヤ綔娴佹墜鍐�" url="https://doc.iocoder.cn/bpm/" />
+
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list">
+      <el-table-column label="瀹氫箟缂栧彿" align="center" prop="id" min-width="250" />
+      <el-table-column label="娴佺▼鍚嶇О" align="center" prop="name" min-width="150" />
+      <el-table-column label="娴佺▼鍥炬爣" align="center" min-width="50">
+        <template #default="{ row }">
+          <el-image v-if="row.icon" :src="row.icon" class="h-24px w-24pxrounded" />
+        </template>
+      </el-table-column>
+      <el-table-column label="鍙鑼冨洿" prop="startUserIds" min-width="100">
+        <template #default="{ row }">
+          <el-text v-if="!row.startUsers?.length"> 鍏ㄩ儴鍙 </el-text>
+          <el-text v-else-if="row.startUsers.length === 1">
+            {{ row.startUsers[0].nickname }}
+          </el-text>
+          <el-text v-else>
+            <el-tooltip
+              class="box-item"
+              effect="dark"
+              placement="top"
+              :content="row.startUsers.map((user: any) => user.nickname).join('銆�')"
+            >
+              {{ row.startUsers[0].nickname }}绛� {{ row.startUsers.length }} 浜哄彲瑙�
+            </el-tooltip>
+          </el-text>
+        </template>
+      </el-table-column>
+      <el-table-column label="娴佺▼绫诲瀷" prop="modelType" min-width="120">
+        <template #default="{ row }">
+          <dict-tag :value="row.modelType" :type="DICT_TYPE.BPM_MODEL_TYPE" />
+        </template>
+      </el-table-column>
+      <el-table-column label="琛ㄥ崟淇℃伅" prop="formType" min-width="150">
+        <template #default="scope">
+          <el-button
+            v-if="scope.row.formType === BpmModelFormType.NORMAL"
+            type="primary"
+            link
+            @click="handleFormDetail(scope.row)"
+          >
+            <span>{{ scope.row.formName }}</span>
+          </el-button>
+          <el-button
+            v-else-if="scope.row.formType === BpmModelFormType.CUSTOM"
+            type="primary"
+            link
+            @click="handleFormDetail(scope.row)"
+          >
+            <span>{{ scope.row.formCustomCreatePath }}</span>
+          </el-button>
+          <label v-else>鏆傛棤琛ㄥ崟</label>
+        </template>
+      </el-table-column>
+      <el-table-column label="娴佺▼鐗堟湰" align="center" min-width="80">
+        <template #default="scope">
+          <el-tag>v{{ scope.row.version }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="閮ㄧ讲鏃堕棿"
+        align="center"
+        prop="deploymentTime"
+        width="180"
+        :formatter="dateFormatter"
+      />
+      <el-table-column label="鎿嶄綔" align="center">
+        <template #default="scope">
+          <el-button
+            link
+            type="primary"
+            @click="openModelForm(scope.row.id)"
+            v-hasPermi="['bpm:model:update']"
+          >
+            鎭㈠
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 鍒嗛〉 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 寮圭獥锛氳〃鍗曡鎯� -->
+  <Dialog title="琛ㄥ崟璇︽儏" v-model="formDetailVisible" width="800">
+    <form-create :rule="formDetailPreview.rule" :option="formDetailPreview.option" />
+  </Dialog>
+</template>
+
+<script lang="ts" setup>
+import { dateFormatter } from '@/utils/formatTime'
+import * as DefinitionApi from '@/api/bpm/definition'
+import { setConfAndFields2 } from '@/utils/formCreate'
+import { DICT_TYPE } from '@/utils/dict'
+import { BpmModelFormType } from '@/utils/constants'
+
+defineOptions({ name: 'BpmProcessDefinition' })
+
+const { push } = useRouter() // 璺敱
+const { query } = useRoute() // 鏌ヨ鍙傛暟
+
+const loading = ref(true) // 鍒楄〃鐨勫姞杞戒腑
+const total = ref(0) // 鍒楄〃鐨勬�婚〉鏁�
+const list = ref([]) // 鍒楄〃鐨勬暟鎹�
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  key: query.key
+})
+
+/** 鏌ヨ鍒楄〃 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await DefinitionApi.getProcessDefinitionPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 娴佺▼琛ㄥ崟鐨勮鎯呮寜閽搷浣� */
+const formDetailVisible = ref(false)
+const formDetailPreview = ref({
+  rule: [],
+  option: {}
+})
+const handleFormDetail = async (row: any) => {
+  if (row.formType == BpmModelFormType.NORMAL) {
+    // 璁剧疆琛ㄥ崟
+    setConfAndFields2(formDetailPreview, row.formConf, row.formFields)
+    // 寮圭獥鎵撳紑
+    formDetailVisible.value = true
+  } else {
+    await push({
+      path: row.formCustomCreatePath
+    })
+  }
+}
+
+/** 鎭㈠娴佺▼妯″瀷寮圭獥 */
+const openModelForm = async (id?: number) => {
+  await push({
+    name: 'BpmModelUpdate',
+    params: { id, type: 'definition' }
+  })
+}
+
+/** 鍒濆鍖� **/
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style lang="scss" scoped>
+.flow-icon {
+  display: flex;
+  width: 38px;
+  height: 38px;
+  margin-right: 10px;
+  background-color: var(--el-color-primary);
+  border-radius: 0.25rem;
+  align-items: center;
+  justify-content: center;
+}
+</style>

--
Gitblit v1.8.0