gaoluyang
2026-06-24 c0cb161bb52ce0fbdce5c66ec391d107c75e2452
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<script lang="ts" setup>
import type { Rule } from 'ant-design-vue/es/form';
 
import { ref } from 'vue';
 
import { DICT_TYPE } from '..\..\..\..\..\packages\constants\src';
import { getDictOptions } from '..\..\..\..\..\packages\effects\hooks\src';
 
import { Form, Input, Select } from 'ant-design-vue';
 
const modelData = defineModel<any>(); // 创建本地数据副本
const formRef = ref(); // 表单引用
const rules: Record<string, Rule[]> = {
  code: [{ required: true, message: '流程标识不能为空', trigger: 'blur' }],
  name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }],
  status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
};
 
/** 表单校验 */
async function validate() {
  await formRef.value?.validate();
}
 
defineExpose({ validate });
</script>
 
<template>
  <Form
    ref="formRef"
    :model="modelData"
    :rules="rules"
    :label-col="{ span: 4 }"
    :wrapper-col="{ span: 20 }"
    class="mt-5"
  >
    <Form.Item label="流程标识" name="code" class="mb-5">
      <Input
        class="w-full"
        v-model:value="modelData.code"
        allow-clear
        placeholder="请输入流程标识"
      />
    </Form.Item>
    <Form.Item label="流程名称" name="name" class="mb-5">
      <Input
        v-model:value="modelData.name"
        allow-clear
        placeholder="请输入流程名称"
      />
    </Form.Item>
    <Form.Item label="状态" name="status" class="mb-5">
      <Select
        class="w-full"
        v-model:value="modelData.status"
        allow-clear
        placeholder="请选择状态"
      >
        <Select.Option
          v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS, 'number')"
          :key="dict.value"
          :value="dict.value"
        >
          {{ dict.label }}
        </Select.Option>
      </Select>
    </Form.Item>
    <Form.Item label="流程描述" name="description" class="mb-5">
      <Input.TextArea v-model:value="modelData.description" allow-clear />
    </Form.Item>
  </Form>
</template>