|
|
|
@ -9,12 +9,14 @@ |
|
|
|
<template v-if="sItem.type === 'input'"> |
|
|
|
<div class="form-title">{{ sItem.label }}</div> |
|
|
|
<HandleFormItem @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</template> |
|
|
|
<template v-else-if="sItem.type === 'inputNumber'"> |
|
|
|
<div class="form-title">{{ sItem.label }}</div> |
|
|
|
<HandleFormItem type = "inputNumber" @blur="onBlur(key, $event)" :item="sItem" @input = "onInputNumberChange(key, $event)" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@ -27,7 +29,8 @@ |
|
|
|
<div class="form-title">{{ sItem.label }}</div> |
|
|
|
<div class="flex "> |
|
|
|
<HandleFormItem type="select" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@ -54,19 +57,23 @@ |
|
|
|
<div class="form-title" v-if="sItem.label">{{ sItem.label }}</div> |
|
|
|
<div v-if="sItem.type === 'dateTime'" class="flex1"> |
|
|
|
<HandleFormItem type="dateTime" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'select'"> |
|
|
|
<HandleFormItem type="select" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'input'"> |
|
|
|
<HandleFormItem @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'textarea'"> |
|
|
|
<HandleFormItem @blur="onBlur(key, $event)" type="textarea" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@ -80,24 +87,29 @@ |
|
|
|
<div class="step-form-title" v-if="sItem.label">{{ sItem.label }}</div> |
|
|
|
<div v-if="sItem.type === 'dateTime'" class="flex1"> |
|
|
|
<HandleFormItem type="dateTime" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'select'" class="flex flex1"> |
|
|
|
<HandleFormItem type="select" :item="sItem" style="width: auto;flex:1" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(key, $event)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
<div v-show="isShowOther(formFields[key])" class="flex flex1"> |
|
|
|
<div class="other-title">其他</div> |
|
|
|
<div class="flex"> |
|
|
|
<HandleFormItem @blur="onBlur(key, $event)" class="sub-select" :item="getOtherItem(sItem)" v-model="formFields[sItem.otherCode]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]" @update:error="errors[sItem.otherCode] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]" @update:error="errors[sItem.otherCode] = false" |
|
|
|
:orange-bg="orangeBgFields[sItem.otherCode]" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'input'" class="flex flex1"> |
|
|
|
<HandleFormItem @blur="onBlur(key, $event)" class="flex1" :item="sItem" v-model="formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
<HandleFormItem v-if="sItem.subType === 'select'" type="select" class="sub-select" :item="getSubItem(sItem)" v-model="formFields[sItem.subKey]" |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false" |
|
|
|
:orange-bg="orangeBgFields[sItem.subKey]" /> |
|
|
|
<div v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div> |
|
|
|
<HandleFormItem v-else-if="sItem.subType === 'clickable'" type="clickable" @clickable="handleClickable(sItem,$event)" class="sub-select" :item="getClickableItem(sItem)" :value="formFields[sItem.subKey]" |
|
|
|
/> |
|
|
|
@ -108,9 +120,11 @@ |
|
|
|
</div> |
|
|
|
<div v-else-if="sItem.type === 'inputNumber'" class="flex flex1"> |
|
|
|
<HandleFormItem type = "inputNumber" @blur="onBlur(key, $event)" class="flex1" :item="sItem" @input = "onInputNumberChange(key, $event)" :value = "formFields[key]" |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" |
|
|
|
:orange-bg="orangeBgFields[key]" /> |
|
|
|
<HandleFormItem v-if="sItem.subType === 'select'" type="select" class="sub-select" :item="getSubItem(sItem)" v-model="formFields[sItem.subKey]" |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false" /> |
|
|
|
@copy="onCopy(sItem, key)" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false" |
|
|
|
:orange-bg="orangeBgFields[sItem.subKey]" /> |
|
|
|
<div v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div> |
|
|
|
<HandleFormItem v-else-if="sItem.subType === 'clickable'" @clickable="handleClickable(sItem,$event)" type="clickable" class="sub-select" :item="getClickableItem(sItem)" :value="formFields[sItem.subKey]" |
|
|
|
/> |
|
|
|
@ -153,6 +167,7 @@ export default { |
|
|
|
formFields: {},//表单绑定字段 |
|
|
|
allFieldsConfig: {},//包含config的所有字段,主要用于校验表单是否填写 |
|
|
|
errors: {},//存储表单错误信息,用于标红提示 |
|
|
|
orangeBgFields: {},// 存储需要橙色背景的字段 |
|
|
|
}; |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
@ -394,6 +409,21 @@ export default { |
|
|
|
return this.formFields[key]; |
|
|
|
}, |
|
|
|
onBlur(key, val) { |
|
|
|
// compareTo 功能:当fillType==="actFill"时,判断当前值是否与compareTo字段的值一样,如果不一样则将当前input框的背景色标记成橙色 |
|
|
|
const currentFieldConfig = this.allFieldsConfig[key]; |
|
|
|
if (currentFieldConfig && currentFieldConfig.fillType === "actFill" && currentFieldConfig.compareTo) { |
|
|
|
const compareToKey = currentFieldConfig.compareTo; |
|
|
|
const compareToValue = this.formFields[compareToKey]; |
|
|
|
|
|
|
|
// 比较当前值和compareTo值,如果不相等则设置橙色背景 |
|
|
|
if (val !== compareToValue) { |
|
|
|
this.$set(this.orangeBgFields, key, true); |
|
|
|
} else { |
|
|
|
// 相等则移除橙色背景 |
|
|
|
this.$set(this.orangeBgFields, key, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
this.$emit("blur", { key, value: val ,...this.formFields}); |
|
|
|
}, |
|
|
|
onSelectChange(key, val) { |
|
|
|
@ -519,7 +549,7 @@ export default { |
|
|
|
margin-right: 24px; |
|
|
|
} |
|
|
|
.sub-select{ |
|
|
|
width: auto; |
|
|
|
width: 100px; |
|
|
|
margin-left: 10px; |
|
|
|
} |
|
|
|
.clickable{ |
|
|
|
|