You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
6.5 KiB
229 lines
6.5 KiB
<template>
|
|
<div style="padding: 0 10px; height: 100%; overflow: scroll">
|
|
<template v-if="selectedForm">
|
|
<el-form
|
|
:rules="formRule"
|
|
ref="form"
|
|
:model="selectedForm"
|
|
label-width="80px"
|
|
>
|
|
<el-form-item prop="name" label="字段名称">
|
|
<el-input
|
|
v-model="selectedForm.name"
|
|
placeholder="请输入字段名称"
|
|
@input="inputHandler"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item required prop="field" label="字段标识">
|
|
<el-input v-model="selectedForm.field"></el-input>
|
|
</el-form-item>
|
|
<el-form-item prop="help" label="帮助文字">
|
|
<el-input
|
|
v-model="selectedForm.help"
|
|
placeholder="请输入帮助文字"
|
|
></el-input>
|
|
</el-form-item>
|
|
<el-form-item prop="validation" label="校验规则">
|
|
<el-select
|
|
v-model="selectedForm.validation"
|
|
clearable
|
|
multiple
|
|
collapse-tags
|
|
:popper-append-to-body="false"
|
|
placeholder="请选择校验规则"
|
|
style="width: 100%"
|
|
>
|
|
<el-option
|
|
v-for="(value, key) in rules"
|
|
:key="key"
|
|
:label="value"
|
|
:value="key"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="列表是否显示" prop="list_show">
|
|
<el-switch
|
|
v-model="selectedForm.list_show"
|
|
:active-value="1"
|
|
:inactive-value="0"
|
|
></el-switch>
|
|
</el-form-item>
|
|
<el-form-item label="表单是否显示" prop="list_show">
|
|
<el-switch
|
|
v-model="selectedForm.form_show"
|
|
:active-value="1"
|
|
:inactive-value="0"
|
|
></el-switch>
|
|
</el-form-item>
|
|
<el-form-item label="是否固定" prop="is_fix">
|
|
<el-select
|
|
v-model="selectedForm.is_fix"
|
|
clearable
|
|
:popper-append-to-body="false"
|
|
placeholder="请选择固定方式"
|
|
style="width: 100%"
|
|
>
|
|
<el-option
|
|
v-for="item in [{ value: 'left',label: '左' }, { value: 'right',label: '右' }]"
|
|
:label="item.label"
|
|
:value="item.value"
|
|
></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item prop="width" label="列宽">
|
|
<el-input-number
|
|
clearable
|
|
:controls="false"
|
|
v-model="selectedForm.width"
|
|
placeholder="不输入为自动计算"
|
|
style="width: 100%"
|
|
></el-input-number>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @click="saveField">保存</el-button>
|
|
<el-button
|
|
@click="
|
|
(linkType = ''),
|
|
$store.commit('form/CLEAR_SELECTED'),
|
|
$store.commit('form/CLEAR_SELECTED_INDEX')
|
|
"
|
|
>清除</el-button
|
|
>
|
|
<el-popover
|
|
trigger="hover"
|
|
ref="el-popover"
|
|
placement="top"
|
|
width="160"
|
|
>
|
|
<p>确定删除字段吗?</p>
|
|
<div style="text-align: right; margin: 0">
|
|
<el-button
|
|
size="mini"
|
|
type="text"
|
|
@click="$refs['el-popover'].doClose()"
|
|
>取消</el-button
|
|
>
|
|
<el-button
|
|
type="primary"
|
|
size="mini"
|
|
@click="
|
|
$store.commit('form/SPLICE_FORM_LIST', {
|
|
index: selectedIndex,
|
|
length: 1,
|
|
}),
|
|
$store.commit('form/CLEAR_SELECTED_INDEX'),
|
|
$store.commit('form/CLEAR_SELECTED'),
|
|
$refs['el-popover'].doClose()
|
|
"
|
|
>确定</el-button
|
|
>
|
|
</div>
|
|
<el-button
|
|
type="danger"
|
|
slot="reference"
|
|
@click="$refs['el-popover'].doShow()"
|
|
style="margin-left: 10px"
|
|
>删除</el-button
|
|
>
|
|
</el-popover>
|
|
</el-form-item>
|
|
</el-form>
|
|
</template>
|
|
<template v-else>
|
|
<el-empty
|
|
style="position: relative; top: 50%; transform: translateY(-50%)"
|
|
description="暂无选择"
|
|
></el-empty>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { index as formIndex, realTableIndex } from "@/api/system/customForm";
|
|
import { listparameter } from "@/api/system/dictionary";
|
|
import { translate } from "@/api/system/customFormField";
|
|
import { debounce } from "@/utils";
|
|
|
|
import { mapState } from "vuex";
|
|
|
|
export default {
|
|
props: {
|
|
rules: Object,
|
|
types: Array,
|
|
},
|
|
data() {
|
|
return {
|
|
linkType: "",
|
|
debouncedInputHandler: null,
|
|
formRule: {
|
|
name: [
|
|
{ required: true, message: "请输入字段名称" },
|
|
{
|
|
validator: this.checkChinese,
|
|
},
|
|
],
|
|
},
|
|
|
|
parameters: [], //数据字典
|
|
forms: [], //表
|
|
};
|
|
},
|
|
methods: {
|
|
checkChinese(rule, value, callback) {
|
|
const reg = /^[\u4e00-\u9fa5]+$/;
|
|
if (reg.test(value)) {
|
|
callback();
|
|
} else {
|
|
callback(new Error("请输入中文姓名"));
|
|
}
|
|
},
|
|
inputHandler(e) {
|
|
this.debouncedInputHandler(e);
|
|
},
|
|
|
|
async getForms() {
|
|
const resReal = await realTableIndex();
|
|
const res = await formIndex({ page: 1, page_size: 999 });
|
|
this.forms = [...res.data,...resReal.map(i => { return { name: i,table_name: i } })];
|
|
},
|
|
|
|
|
|
saveField() {
|
|
this.$store.commit("form/SPLICE_FORM_LIST", {
|
|
index: this.selectedIndex,
|
|
length: 1,
|
|
config: this.selectedForm,
|
|
});
|
|
this.$store.commit("form/CLEAR_SELECTED");
|
|
this.$store.commit("form/CLEAR_SELECTED_INDEX");
|
|
},
|
|
},
|
|
computed: {
|
|
...mapState("form", ["selectedForm", "formList", "selectedIndex"]),
|
|
},
|
|
created() {
|
|
this.getForms();
|
|
|
|
this.debouncedInputHandler = debounce((e) => {
|
|
if (e) {
|
|
this.checkChinese("", e, (err) => {
|
|
if (!err) {
|
|
translate({
|
|
str: e,
|
|
}).then((en) => {
|
|
this.selectedForm.field = en.pinyin;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}, 1000);
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
::v-deep .el-input-number.is-without-controls .el-input__inner {
|
|
text-align: left;
|
|
}
|
|
</style>
|