101 lines
4.3 KiB
Twig
101 lines
4.3 KiB
Twig
<template>
|
|
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')">
|
|
<el-form :model="form" :rules="rules" :disabled="mode==='show'" ref="formRef" label-width="100px">
|
|
{% for field in insert_fields %}
|
|
{% if field.html_type == 'select' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-select v-model="form.{{ field.php_field }}" style="width: 100%" clearable placeholder="请选择{{ field.column_comment }}">
|
|
<el-option value="" label=""></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
{% elseif field.html_type == 'radio' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-radio-group v-model="form.{{ field.php_field }}">
|
|
<el-radio value=""></el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
{% elseif field.html_type == 'checkbox' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-checkbox-group v-model="form.{{ field.php_field }}">
|
|
<el-checkbox label="" value=""/>
|
|
</el-checkbox-group>
|
|
</el-form-item>
|
|
{% elseif field.html_type == 'date' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-date-picker v-model="form.{{ field.php_field }}" type="date" placeholder="请选择{{ field.column_comment }}" value-format="YYYY-MM-DD"
|
|
@change="loadTime" style="width: 100%;"/>
|
|
</el-form-item>
|
|
{% elseif field.html_type == 'datetime' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-date-picker v-model="form.{{ field.php_field }}" type="datetime" placeholder="请选择{{ field.column_comment }}"
|
|
value-format="YYYY-MM-DD HH:mm:ss" @change="loadTime" style="width: 100%;" />
|
|
</el-form-item>
|
|
{% elseif field.html_type == 'textarea' %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-input type="textarea" :rows="3" v-model="form.{{ field.php_field }}" placeholder="请输入{{ field.column_comment }}" clearable></el-input>
|
|
</el-form-item>
|
|
{% else %}
|
|
<el-form-item label="{{ field.column_comment }}" prop="{{ field.php_field }}">
|
|
<el-input type="text" v-model="form.{{ field.php_field }}" placeholder="请输入{{ field.column_comment }}" clearable></el-input>
|
|
</el-form-item>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</el-form>
|
|
<template #footer>
|
|
<el-button @click="visible=false" >取 消</el-button>
|
|
<el-button v-if="mode!=='show'" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script setup>
|
|
import {getCurrentInstance, ref} from 'vue'
|
|
import api from "@/api/index"
|
|
|
|
defineExpose({
|
|
open
|
|
})
|
|
const emit = defineEmits(['success', 'closed'])
|
|
const formRef = ref(null)
|
|
const {proxy} = getCurrentInstance()
|
|
|
|
let mode = ref('add')
|
|
let titleMap = ref({
|
|
add: '新增',
|
|
edit: '编辑',
|
|
show: '查看'
|
|
})
|
|
let visible = ref(false)
|
|
let isSaveing = ref(false)
|
|
let form = ref({
|
|
{% for field in edit_fields %}
|
|
{{ field.php_field }}: null,
|
|
{% endfor %}
|
|
})
|
|
const rules = ref({
|
|
{% for field in required_fields %}
|
|
{{ field.php_field }}: [
|
|
{required: true, message: '请填写{{ field.column_comment }}'}
|
|
],
|
|
{% endfor %}
|
|
})
|
|
|
|
function open(m = 'add', data = null) {
|
|
mode.value = m
|
|
visible.value = true
|
|
Object.assign(form.value, data)
|
|
}
|
|
|
|
async function submit(){
|
|
// 校验登录
|
|
const validate = await formRef.value.validate().catch(() => {});
|
|
if(!validate){ return false }
|
|
isSaveing.value = true;
|
|
const res = form.value.{{table_name}}_id? await api.{{table_name}}.edit(form.value) : await api.{{table_name}}.add(form.value);
|
|
isSaveing.value = false;
|
|
emit('success')
|
|
visible.value = false;
|
|
proxy.$message.success(res.msg)
|
|
}
|
|
</script>
|