|
|
|
@ -1,15 +1,103 @@
|
|
|
|
|
<template>
|
|
|
|
|
<el-dialog
|
|
|
|
|
title="提示"
|
|
|
|
|
:title="modelTitle"
|
|
|
|
|
:visible.sync="dialogVisible"
|
|
|
|
|
width="30%"
|
|
|
|
|
:width="width"
|
|
|
|
|
:before-close="handleClose"
|
|
|
|
|
>
|
|
|
|
|
<el-form ref="relForm" :model="model" :label-width="labelWidth">
|
|
|
|
|
<a-row>
|
|
|
|
|
<a-col
|
|
|
|
|
:span="24"
|
|
|
|
|
v-for="(item, index) in formItems"
|
|
|
|
|
:key="index + item.attrs.model"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item
|
|
|
|
|
:label-width="item.itemAttrs.labelWidth || labelWidth"
|
|
|
|
|
v-bind="item.itemAttrs || {}"
|
|
|
|
|
:prop="item.attrs.model"
|
|
|
|
|
>
|
|
|
|
|
<template v-if="item.type === 'slot'">
|
|
|
|
|
<!--将表单内部的数据通过作用域插槽传给外部-->
|
|
|
|
|
<slot :name="item.slot" :scope="model" />
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
|
|
<template v-if="item.type === 'text'">
|
|
|
|
|
<span v-bind="item.attrs || {}">
|
|
|
|
|
{{ model[item.attrs.model] }}</span
|
|
|
|
|
>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'input'">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
v-bind="item.attrs || {}"
|
|
|
|
|
v-on="item.listeners || {}"
|
|
|
|
|
></el-input>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'inputNum'">
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
v-bind="item.attrs || {}"
|
|
|
|
|
v-on="item.listeners || {}"
|
|
|
|
|
></el-input-number>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'textarea'">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
v-bind="item.attrs || {}"
|
|
|
|
|
v-on="item.listeners || {}"
|
|
|
|
|
></el-input>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'radioGroup'">
|
|
|
|
|
<el-radio-group
|
|
|
|
|
name="radioGroup"
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
>
|
|
|
|
|
<el-radio
|
|
|
|
|
v-for="radio in item.attrs.option"
|
|
|
|
|
:label="radio.value"
|
|
|
|
|
:key="radio.value"
|
|
|
|
|
>{{ radio.name }}</el-radio
|
|
|
|
|
>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'select'">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
v-bind="item.attrs || {}"
|
|
|
|
|
v-on="item.listeners || {}"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="option in item.attrs.option"
|
|
|
|
|
:key="option.value"
|
|
|
|
|
:label="option.label"
|
|
|
|
|
:value="option.value"
|
|
|
|
|
>
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type === 'date'">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-bind="item.attrs || {}"
|
|
|
|
|
v-model.trim="model[item.attrs.model]"
|
|
|
|
|
v-on="item.listeners || {}"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
></el-date-picker>
|
|
|
|
|
</template>
|
|
|
|
|
</el-form-item> </a-col
|
|
|
|
|
></a-row>
|
|
|
|
|
</el-form>
|
|
|
|
|
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
|
|
|
|
|
</span>
|
|
|
|
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</template>
|
|
|
|
|
<script>
|
|
|
|
@ -18,109 +106,82 @@ export default {
|
|
|
|
|
width: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: () => {
|
|
|
|
|
return 800
|
|
|
|
|
return 800;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
formItems: {
|
|
|
|
|
type: Array,
|
|
|
|
|
default: () => {
|
|
|
|
|
return []
|
|
|
|
|
return [];
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
labelWidth: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: () => {
|
|
|
|
|
return '100px'
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
title: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: () => {
|
|
|
|
|
return '新增'
|
|
|
|
|
return "100px";
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
confirmLoading: false,
|
|
|
|
|
labelCol: {
|
|
|
|
|
xs: { span: 24 },
|
|
|
|
|
sm: { span: 5 },
|
|
|
|
|
},
|
|
|
|
|
wrapperCol: {
|
|
|
|
|
xs: { span: 24 },
|
|
|
|
|
sm: { span: 16 },
|
|
|
|
|
},
|
|
|
|
|
model: {},
|
|
|
|
|
modelTitle: '',
|
|
|
|
|
visible: false,
|
|
|
|
|
modelTitle: "",
|
|
|
|
|
dialogVisible: false,
|
|
|
|
|
formDisabled: false, //是否是查看详情,不允许操作
|
|
|
|
|
isMerge: false, //model赋值合并,编辑
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
openDialog(opt, data) {
|
|
|
|
|
this.visible = true
|
|
|
|
|
this.modelTitle = this.title
|
|
|
|
|
this.initModel()
|
|
|
|
|
if (opt === 'edit') {
|
|
|
|
|
openDialog(opt, data, title) {
|
|
|
|
|
this.dialogVisible = true;
|
|
|
|
|
this.initModel();
|
|
|
|
|
if (opt === "edit") {
|
|
|
|
|
//编辑
|
|
|
|
|
this.modelTitle = '编辑'
|
|
|
|
|
this.mergeModel(data)
|
|
|
|
|
this.modelTitle = title || "编辑";
|
|
|
|
|
this.mergeModel(data);
|
|
|
|
|
}
|
|
|
|
|
if (opt === 'detail') {
|
|
|
|
|
if (opt === "detail") {
|
|
|
|
|
//查看
|
|
|
|
|
this.modelTitle = '详情'
|
|
|
|
|
this.formDisabled = true
|
|
|
|
|
this.mergeModel(data)
|
|
|
|
|
this.modelTitle = title || "详情";
|
|
|
|
|
this.formDisabled = true;
|
|
|
|
|
this.mergeModel(data);
|
|
|
|
|
}
|
|
|
|
|
if (opt === 'other') {
|
|
|
|
|
this.mergeModel(data)
|
|
|
|
|
if (opt === "other") {
|
|
|
|
|
this.modelTitle = title;
|
|
|
|
|
this.mergeModel(data);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//初始化表单
|
|
|
|
|
initModel() {
|
|
|
|
|
this.model = {}
|
|
|
|
|
this.model = {};
|
|
|
|
|
this.formItems.forEach((formItem) => {
|
|
|
|
|
if (!formItem.attrs || !formItem.attrs.model) return //跳过没有model的属性(插槽)
|
|
|
|
|
this.$set(this.model, formItem.attrs.model, formItem.attrs.value ? formItem.attrs.value : '')
|
|
|
|
|
})
|
|
|
|
|
if (!formItem.attrs || !formItem.attrs.model) return; //跳过没有model的属性(插槽)
|
|
|
|
|
this.$set(
|
|
|
|
|
this.model,
|
|
|
|
|
formItem.attrs.model,
|
|
|
|
|
formItem.attrs.value ? formItem.attrs.value : ""
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//表单合并赋值
|
|
|
|
|
mergeModel(data) {
|
|
|
|
|
this.model = Object.assign(this.model, data)
|
|
|
|
|
this.model = Object.assign(this.model, data);
|
|
|
|
|
},
|
|
|
|
|
submitForm() {
|
|
|
|
|
// 触发表单验证
|
|
|
|
|
this.$refs.relForm.validate((valid) => {
|
|
|
|
|
if (!valid) {
|
|
|
|
|
return
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.$emit('dialogSubmit', this.model)
|
|
|
|
|
})
|
|
|
|
|
this.$emit("formSubmit", this.model);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
handleCancel() {
|
|
|
|
|
this.visible = false
|
|
|
|
|
this.formDisabled = false
|
|
|
|
|
this.isMerge = false
|
|
|
|
|
handleClose() {
|
|
|
|
|
this.dialogVisible = false;
|
|
|
|
|
this.formDisabled = false;
|
|
|
|
|
this.isMerge = false;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
watch: {
|
|
|
|
|
/* formItems: {
|
|
|
|
|
handler() {
|
|
|
|
|
console.log(222)
|
|
|
|
|
this.formItems.forEach((formItem) => {
|
|
|
|
|
if (!formItem.attrs || !formItem.attrs.model) return //跳过没有model的属性(插槽)
|
|
|
|
|
this.$set(
|
|
|
|
|
this.model,
|
|
|
|
|
formItem.attrs.model,
|
|
|
|
|
this.model[formItem.attrs.model] ? this.model[formItem.attrs.model] : formItem.attrs.value
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
deep: true,
|
|
|
|
|
immediate: true,
|
|
|
|
|
}, */
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
watch: {},
|
|
|
|
|
};
|
|
|
|
|
</script>
|