|
|
|
|
@ -0,0 +1,330 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div>
|
|
|
|
|
<el-drawer direction="rtl"
|
|
|
|
|
title="关联"
|
|
|
|
|
:visible.sync="dialogVisible"
|
|
|
|
|
size="58%"
|
|
|
|
|
:before-close="(done) => {
|
|
|
|
|
$confirm('确认关闭?').then(_ => { done() });
|
|
|
|
|
}">
|
|
|
|
|
<template>
|
|
|
|
|
<div style="padding: 20px;">
|
|
|
|
|
<el-button size="small" type="primary" icon="el-icon-plus" @click="list.push({ link_table_name: '',local_key: '',foreign_key: '',link_relation: '' })"></el-button>
|
|
|
|
|
|
|
|
|
|
<xy-table
|
|
|
|
|
style="margin-top: 10px;"
|
|
|
|
|
:auths="[]"
|
|
|
|
|
size="small"
|
|
|
|
|
:is-page="false"
|
|
|
|
|
:list="list"
|
|
|
|
|
:table-item="table"
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
</xy-table>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-drawer>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import { realTableShow, realTableIndex, save, show, relationDestroy, update } from "@/api/system/customForm";
|
|
|
|
|
import {listparameter} from "@/api/system/dictionary";
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
id: '',
|
|
|
|
|
copyTable: {},
|
|
|
|
|
dialogVisible: false,
|
|
|
|
|
tableName: "",
|
|
|
|
|
localFields: {},
|
|
|
|
|
realTables: [],
|
|
|
|
|
foreignFields: [],
|
|
|
|
|
parameters: [], //数据字典
|
|
|
|
|
|
|
|
|
|
list: [],
|
|
|
|
|
table: [
|
|
|
|
|
{
|
|
|
|
|
prop: 'custom_form_field',
|
|
|
|
|
label: '对应映射字段',
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
value={ row.custom_form_field }
|
|
|
|
|
on={{
|
|
|
|
|
['change']:e => {
|
|
|
|
|
this.$set(row,'custom_form_field',e);
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{
|
|
|
|
|
this.localFields.map(i => {
|
|
|
|
|
return (
|
|
|
|
|
<el-option value={ i.field } label={ i.name }></el-option>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: "local_key",
|
|
|
|
|
label: "关联本地字段",
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
value={ row.local_key }
|
|
|
|
|
on={{
|
|
|
|
|
['change']:e => {
|
|
|
|
|
row.local_key = e
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{
|
|
|
|
|
[{field:'id',name:'id'},...this.localFields].map(i => {
|
|
|
|
|
return (
|
|
|
|
|
<el-option value={ i.field } label={ i.name }></el-option>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: 'link_table',
|
|
|
|
|
label: '关联表',
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
clearable={true}
|
|
|
|
|
value={row.link_table_name}
|
|
|
|
|
on={{
|
|
|
|
|
['change']:async e => {
|
|
|
|
|
row.link_table_name = e
|
|
|
|
|
if (e) {
|
|
|
|
|
this.foreignFields = await this.getFields(e)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{
|
|
|
|
|
this.realTables.map(i => {
|
|
|
|
|
return (
|
|
|
|
|
<el-option value={i} label={i}></el-option>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: 'parameter_id',
|
|
|
|
|
label: '关联数据字典',
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
clearable={true}
|
|
|
|
|
value={row.parameter_id}
|
|
|
|
|
on={{
|
|
|
|
|
['change']:async e => {
|
|
|
|
|
row.parameter_id = e
|
|
|
|
|
if (e) {
|
|
|
|
|
this.foreignFields = await this.getFields('parameters')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{
|
|
|
|
|
this.parameters.map(i => {
|
|
|
|
|
return (
|
|
|
|
|
<el-option value={i.id} label={i.name}></el-option>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: "foreign_key",
|
|
|
|
|
label: "关联表字段",
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
value={row.foreign_key}
|
|
|
|
|
on={{
|
|
|
|
|
['change']:e => {
|
|
|
|
|
row.foreign_key = e
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{(() => {
|
|
|
|
|
let dom = [];
|
|
|
|
|
for (let key in this.foreignFields) {
|
|
|
|
|
dom.push(<el-option label={key} value={key}></el-option>);
|
|
|
|
|
}
|
|
|
|
|
return dom;
|
|
|
|
|
})()}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: 'link_relation',
|
|
|
|
|
label: '关联方式',
|
|
|
|
|
customFn: (row) => {
|
|
|
|
|
return (
|
|
|
|
|
<el-select size="mini"
|
|
|
|
|
value={row.link_relation}
|
|
|
|
|
on={{
|
|
|
|
|
['change']:e => {
|
|
|
|
|
row.link_relation = e
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
{
|
|
|
|
|
[
|
|
|
|
|
{ value: 'newHasOne', label: '一对一' },
|
|
|
|
|
{ value: 'newHasMany', label: '一对多' },
|
|
|
|
|
].map(i => {
|
|
|
|
|
return (
|
|
|
|
|
<el-option value={i.value} label={i.label}></el-option>
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</el-select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
prop: 'operate',
|
|
|
|
|
label: '操作',
|
|
|
|
|
width: 180,
|
|
|
|
|
align: 'left',
|
|
|
|
|
customFn:(row, scope) => {
|
|
|
|
|
return [(
|
|
|
|
|
<el-button type='primary'
|
|
|
|
|
size="mini"
|
|
|
|
|
style={{
|
|
|
|
|
'margin-right': '6px'
|
|
|
|
|
}}
|
|
|
|
|
on={{
|
|
|
|
|
['click']:e => {
|
|
|
|
|
this.copyTable.relation = this.list
|
|
|
|
|
save(this.copyTable).then(res => {
|
|
|
|
|
this.getDetail()
|
|
|
|
|
update({ id: this.copyTable.id })
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}}>确 定</el-button>
|
|
|
|
|
),(
|
|
|
|
|
<el-popover width="180"
|
|
|
|
|
trigger="hover"
|
|
|
|
|
scopedSlots={{
|
|
|
|
|
"default": () => {
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<p style={{'padding-bottom':'10px'}}>确定要删除吗?</p>
|
|
|
|
|
<div style={{"text-align":"right","margin":"0"}}>
|
|
|
|
|
<el-button size="mini"
|
|
|
|
|
type="text"
|
|
|
|
|
on={{
|
|
|
|
|
['click']:e => {
|
|
|
|
|
}
|
|
|
|
|
}}>取消</el-button>
|
|
|
|
|
<el-button type="primary"
|
|
|
|
|
size="mini"
|
|
|
|
|
on={{
|
|
|
|
|
['click']:() => {
|
|
|
|
|
if(row.id){
|
|
|
|
|
relationDestroy({ id: row.id }).then(res => {
|
|
|
|
|
this.getDetail()
|
|
|
|
|
update({ id: this.copyTable.id })
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
this.list.splice(scope.$index, 1)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}}>确定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
"reference":() => {
|
|
|
|
|
return (
|
|
|
|
|
<el-button
|
|
|
|
|
type="danger"
|
|
|
|
|
size="mini"
|
|
|
|
|
>
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}}>
|
|
|
|
|
|
|
|
|
|
</el-popover>
|
|
|
|
|
)]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
show() {
|
|
|
|
|
this.dialogVisible = true;
|
|
|
|
|
},
|
|
|
|
|
hide() {
|
|
|
|
|
this.dialogVisible = false;
|
|
|
|
|
},
|
|
|
|
|
set(key = [], value = []) {
|
|
|
|
|
if (key instanceof Array) {
|
|
|
|
|
key.forEach((key, index) => {
|
|
|
|
|
this[key] = value[index] ?? "";
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if (typeof key === "string") {
|
|
|
|
|
this[key] = value;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
async getParameters() {
|
|
|
|
|
const res = await listparameter({ page: 1, page_size: 999 });
|
|
|
|
|
this.parameters = res.data;
|
|
|
|
|
},
|
|
|
|
|
async getFields(tableName) {
|
|
|
|
|
const res = await realTableShow({ table_name: tableName });
|
|
|
|
|
console.log(res);
|
|
|
|
|
res['id'] = 'integer';
|
|
|
|
|
return res || {};
|
|
|
|
|
},
|
|
|
|
|
async getRealTables() {
|
|
|
|
|
const res = await realTableIndex();
|
|
|
|
|
this.realTables = res;
|
|
|
|
|
},
|
|
|
|
|
async getDetail() {
|
|
|
|
|
const res = await show({ id: this.copyTable?.id })
|
|
|
|
|
this.localFields = res.fields || []
|
|
|
|
|
|
|
|
|
|
this.list = res.relation.map(i => {
|
|
|
|
|
return i
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
submit(scope) {
|
|
|
|
|
console.log(scope)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {},
|
|
|
|
|
watch: {
|
|
|
|
|
async dialogVisible(newVal) {
|
|
|
|
|
if (newVal) {
|
|
|
|
|
//this.localFields = await this.getFields(this.tableName);
|
|
|
|
|
await this.getDetail();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
|
this.getParameters();
|
|
|
|
|
this.getRealTables();
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss"></style>
|