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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| <script lang="ts" setup>
| import { computed, reactive, toRefs, unref } from 'vue';
|
| import { useMessage } from '@jnpf/hooks';
| import { BasicForm, useForm } from '@jnpf/ui/form';
| import { BasicModal, useModalInner } from '@jnpf/ui/modal';
|
| import { createSignMode, getSignModeInfo, updateSignMode } from '#/api/x/tms/signMode';
|
| import { ENABLE_OPTIONS, YES_NO_OPTIONS } from './constants';
|
| defineOptions({ name: 'TmsSignModeForm' });
|
| const emit = defineEmits(['register', 'reload']);
| const { createMessage } = useMessage();
|
| const state = reactive({ id: '' });
| const { id } = toRefs(state);
| const getTitle = computed(() => (unref(id) ? '编辑签到方式' : '新增签到方式'));
|
| const [registerForm, { setFieldsValue, resetFields, validate, updateSchema }] = useForm({
| labelWidth: 130,
| schemas: [
| {
| field: 'modeCode',
| label: '方式编码',
| component: 'Input',
| componentProps: { placeholder: '如 app_scan / wx_scan / online', maxlength: 50 },
| rules: [{ required: true, message: '必填', trigger: 'blur' }],
| },
| {
| field: 'modeName',
| label: '方式名称',
| component: 'Input',
| componentProps: { placeholder: '请输入方式名称', maxlength: 100 },
| rules: [{ required: true, message: '必填', trigger: 'blur' }],
| },
| {
| field: 'tipSeconds',
| label: '要点阅读秒数',
| component: 'InputNumber',
| defaultValue: 30,
| componentProps: { min: 0, max: 3600, style: { width: '100%' }, addonAfter: '秒' },
| rules: [{ required: true, message: '必填', trigger: 'blur', type: 'number' }],
| },
| {
| field: 'matchRoster',
| label: '须匹配名单',
| component: 'Select',
| defaultValue: '1',
| componentProps: { placeholder: '请选择', options: YES_NO_OPTIONS },
| rules: [{ required: true, message: '必填', trigger: 'change' }],
| },
| {
| field: 'enabled',
| label: '启用状态',
| component: 'Select',
| defaultValue: '1',
| componentProps: { placeholder: '请选择', options: ENABLE_OPTIONS },
| rules: [{ required: true, message: '必填', trigger: 'change' }],
| },
| {
| field: 'remark',
| label: '备注',
| component: 'Textarea',
| componentProps: { placeholder: '请输入备注', rows: 3, maxlength: 500 },
| },
| ],
| });
|
| const [registerModal, { closeModal, changeLoading, changeOkLoading }] = useModalInner(init);
|
| async function init(data: { id?: string }) {
| changeLoading(true);
| changeOkLoading(false);
| resetFields();
| state.id = data?.id || '';
| updateSchema({
| field: 'modeCode',
| componentProps: {
| placeholder: '如 app_scan / wx_scan / online',
| maxlength: 50,
| disabled: !!state.id,
| },
| });
| try {
| if (state.id) {
| setFieldsValue(await getSignModeInfo(state.id));
| }
| } finally {
| changeLoading(false);
| }
| }
|
| async function handleSubmit() {
| const values = await validate();
| if (!values) return;
| changeOkLoading(true);
| try {
| if (state.id) await updateSignMode({ ...values, id: state.id });
| else await createSignMode(values);
| createMessage.success('保存成功');
| closeModal();
| emit('reload');
| } catch (e: any) {
| createMessage.error(e?.message || '保存失败');
| } finally {
| changeOkLoading(false);
| }
| }
| </script>
|
| <template>
| <BasicModal v-bind="$attrs" :title="getTitle" @register="registerModal" @ok="handleSubmit">
| <BasicForm @register="registerForm" />
| </BasicModal>
| </template>
|
|