刘光辉
14 小时以前 0dfe84494048ce27ba8449831782128412d3eb13
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
<script setup lang="ts">
import dayjs from 'dayjs';
import type { DraftField } from '../domain/draft';
import type { FillFieldValue } from '../domain/types';
 
defineProps<{ disabled: boolean; errors: Record<string, string>; fields: DraftField[] }>();
const emit = defineEmits<{ update: [tag: string, value: FillFieldValue] }>();
 
function updateDate(tag: string, value: string | null) {
  emit('update', tag, value || '');
}
</script>
<template>
  <div class="field-list">
    <a-empty v-if="!fields.length" description="文档中没有已标注字段" />
    <div v-for="field in fields" :key="field.tag" class="field-row">
      <label>{{ field.alias || field.tag }}</label>
      <a-input v-if="field.type === 'text'" :disabled="disabled" :value="field.draftValue" @update:value="emit('update', field.tag, $event)" />
      <a-textarea v-else-if="field.type === 'multiline'" :disabled="disabled" :value="field.draftValue" @update:value="emit('update', field.tag, $event)" />
      <a-select v-else-if="field.type === 'select'" :disabled="disabled" :options="field.options.map(item => ({ label: item.display, value: item.value }))" :value="field.draftValue" @update:value="emit('update', field.tag, $event)" />
      <a-checkbox v-else-if="field.type === 'checkbox'" :checked="Boolean(field.draftValue)" :disabled="disabled" @update:checked="emit('update', field.tag, $event)" />
      <a-date-picker v-else :disabled="disabled" :value="field.draftValue ? dayjs(String(field.draftValue)) : null" value-format="YYYY-MM-DD" @change="updateDate(field.tag, $event)" />
      <div v-if="errors[field.tag]" class="field-error">{{ errors[field.tag] }}</div>
    </div>
  </div>
</template>