| | |
| | | placeholder="如:请填写报销事由、金额等" |
| | | maxlength="200" |
| | | show-word-limit |
| | | :disabled="readonly" |
| | | @input="emitOut" |
| | | /> |
| | | </div> |
| | |
| | | <div class="fce-toolbar-actions"> |
| | | <el-dropdown |
| | | trigger="click" |
| | | :disabled="disableImport" |
| | | :disabled="disableImport || readonly" |
| | | @visible-change="onImportDropdownVisible" |
| | | @command="importFromTemplate" |
| | | > |
| | | <el-button size="small" :loading="templateImportLoading" :disabled="disableImport"> |
| | | <el-button size="small" :loading="templateImportLoading" :disabled="disableImport || readonly"> |
| | | 从已有模板导入 |
| | | </el-button> |
| | | <template #dropdown> |
| | |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | | <el-button type="primary" size="small" :icon="Plus" @click="addField">添加填报项</el-button> |
| | | <el-button v-if="!readonly" type="primary" size="small" :icon="Plus" @click="addField">添加填报项</el-button> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | <el-tag v-if="field.required" size="small" type="danger" effect="plain">必填</el-tag> |
| | | <el-tag v-if="isFieldLocked(field)" size="small" type="info" effect="plain">内置项</el-tag> |
| | | </div> |
| | | <div v-if="!isFieldLocked(field)" class="fce-card-btns"> |
| | | <div v-if="!isFieldDisabled(field)" class="fce-card-btns"> |
| | | <el-tooltip content="上移" placement="top"> |
| | | <el-button circle size="small" :disabled="index === 0" @click="moveField(index, -1)"> |
| | | <el-icon><Top /></el-icon> |
| | |
| | | v-model="field.label" |
| | | placeholder="如:报销说明" |
| | | maxlength="50" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @input="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | v-model="field.key" |
| | | placeholder="如:summary" |
| | | maxlength="50" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @input="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | <el-select |
| | | v-model="field.type" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="onTypeChange(field)" |
| | | > |
| | | <el-option |
| | |
| | | inline-prompt |
| | | active-text="必填" |
| | | inactive-text="选填" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | :max="10" |
| | | controls-position="right" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | v-model="field.min" |
| | | controls-position="right" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | :max="4" |
| | | controls-position="right" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | /> |
| | | </el-form-item> |
| | |
| | | :type="field.type === 'textarea' ? 'textarea' : 'text'" |
| | | :rows="field.type === 'textarea' ? 2 : undefined" |
| | | :placeholder="defaultPlaceholder(field)" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | clearable |
| | | @input="emitOut" |
| | | /> |
| | |
| | | controls-position="right" |
| | | placeholder="选填" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | /> |
| | | <el-date-picker |
| | |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | clearable |
| | | @change="emitOut" |
| | | /> |
| | |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | clearable |
| | | @change="emitOut" |
| | | /> |
| | |
| | | clearable |
| | | filterable |
| | | :loading="optionSourceLoading" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="emitOut" |
| | | > |
| | | <el-option |
| | |
| | | <el-select |
| | | v-model="field.optionSource" |
| | | style="width: 100%" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @change="onOptionSourceChange(field)" |
| | | > |
| | | <el-option |
| | |
| | | link |
| | | size="small" |
| | | :icon="Plus" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @click="addOption(field)" |
| | | > |
| | | 添加选项 |
| | |
| | | <el-input |
| | | v-model="opt.label" |
| | | placeholder="显示文本" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @input="emitOut" |
| | | /> |
| | | <el-input |
| | | v-model="opt.value" |
| | | placeholder="选项值" |
| | | class="fce-option-value" |
| | | :disabled="isFieldLocked(field)" |
| | | :disabled="isFieldDisabled(field)" |
| | | @input="emitOut" |
| | | /> |
| | | <el-button |
| | | type="danger" |
| | | link |
| | | :icon="Delete" |
| | | :disabled="isFieldLocked(field) || field.options.length <= 1" |
| | | :disabled="isFieldDisabled(field) || field.options.length <= 1" |
| | | @click="removeOption(field, oi)" |
| | | /> |
| | | </div> |
| | |
| | | disableImport: { type: Boolean, default: false }, |
| | | /** 系统内置模板编辑时,打开弹窗即存在的填报项 _uid,不可改删 */ |
| | | lockedFieldUids: { type: Array, default: () => [] }, |
| | | /** 只读:整体不可编辑 */ |
| | | readonly: { type: Boolean, default: false }, |
| | | }); |
| | | |
| | | const emit = defineEmits(["update:modelValue"]); |
| | |
| | | return field?._uid != null && lockedUidSet.value.has(field._uid); |
| | | } |
| | | |
| | | function isFieldDisabled(field) { |
| | | return props.readonly || isFieldLocked(field); |
| | | } |
| | | |
| | | function typeLabel(type) { |
| | | return formFieldTypeLabel(type); |
| | | } |