add:基于金碟云参数:自定义表单同步配置

This commit is contained in:
zhangzq
2024-04-15 09:42:00 +08:00
parent 75829cf400
commit 323ea9521d
87 changed files with 5122 additions and 451 deletions

View File

@@ -1,204 +0,0 @@
<template>
<el-dialog
:visible.sync="dialogVisible"
append-to-body
destroy-on-close
fullscreen
title="新增"
width="1000px"
@close="close"
@open="open"
>
<div class="crud-opts2" style="margin-bottom: 5px;margin-top: 30px">
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="映射表名" prop="local_table_name">
<el-select
v-model="form.local_table_name"
clearable
filterable
size="mini"
placeholder="请选择/搜索"
class="filter-item"
@change="getColumns"
>
<el-option
v-for="item in tableNameList"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="接口地址" prop="api_address">
<el-input v-model="form.api_address" :disabled="!form.local_table_name" style="width: 180px;" />
</el-form-item>
<el-form-item label="同步类型" prop="sync_type">
<el-select
v-model="form.sync_type"
class="filter-item"
clearable
:disabled="!form.local_table_name"
placeholder="请选择"
style="width: 180px"
>
<el-option
v-for="item in dict.sync_type"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="外部系统" prop="external_system">
<el-select
v-model="form.external_system"
class="filter-item"
clearable
placeholder="请选择"
style="width: 180px"
:disabled="!form.local_table_name"
>
<el-option
v-for="item in dict.external_system"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
</span>
</div>
<el-table
ref="table"
:data="tableData"
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
border
highlight-current-row
style="width: 100%;"
>
<el-table-column align="center" label="序号" type="index" width="50" />
<el-table-column align="center" fixed="right" label="操作" width="100">
<template scope="scope">
<el-button
class="filter-item"
icon="el-icon-delete"
size="mini"
type="danger"
@click.native.prevent="deleteRow(scope.$index, tableData)"
/>
</template>
</el-table-column>
<el-table-column align="center" label="字段名称" prop="local_field_name" />
<el-table-column align="center" label="外部系统字段名称" prop="external_field_name">
<template scope="scope">
<el-input v-model="scope.row.external_field_name" size="mini" />
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancle">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="submit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import CRUD, { crud, header, presenter } from '@crud/crud'
import crudFieldMapping from './fieldMapping'
export default {
name: 'AddDtl',
components: {},
dicts: ['external_system', 'sync_type'],
mixins: [presenter(), header(), crud()],
props: {
form: {
type: Object,
default: () => ({})
},
dialogShow: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
tableNameList: [],
tableData: []
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
}
},
methods: {
cancle() {
this.$emit('update:dialogShow', false)
},
open() {
this.getAllTableName()
this.form = {}
},
getAllTableName() {
crudFieldMapping.getAllTableName().then(res => {
this.tableNameList = res
})
},
close() {
this.$emit('update:dialogShow', false)
this.$emit('AddChanged')
this.tableData = []
},
deleteRow(index, rows) {
rows.splice(index, 1)
},
getColumns() {
if (this.form.local_table_name === '') {
this.form.local_field_name = null
this.tableData = []
return
}
crudFieldMapping.getTableColumnNames(this.form.local_table_name).then(res => {
this.tableData = res
})
},
submit() {
if (!this.form.local_table_name) {
this.crud.notify('映射表名不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
if (!this.form.sync_type) {
this.crud.notify('同步类型不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
const isInvalidRow = this.tableData.some(row => !row.external_field_name)
if (isInvalidRow) {
this.crud.notify('外部字段名称不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
const requestData = {
'bmExternalFieldMapping': this.form,
'dtos': this.tableData
}
crudFieldMapping.addRows(requestData)
this.$emit('update:dialogShow', false)
this.$emit('AddChanged')
}
}
}
</script>

View File

@@ -1,202 +0,0 @@
<template>
<el-dialog
:visible.sync="dialogVisible"
append-to-body
destroy-on-close
fullscreen
title="编辑"
width="1000px"
@close="close"
@open="open"
>
<div class="crud-opts2" style="margin-bottom: 5px;margin-top: 30px">
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="映射表名" prop="local_table_name">
<el-select
v-model="form.local_table_name"
clearable
filterable
size="mini"
disabled
placeholder="请选择/搜索"
class="filter-item"
>
<el-option
v-for="item in tableNameList"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="接口地址" prop="api_address">
<el-input v-model="form.api_address" :disabled="!form.local_table_name" style="width: 180px;" />
</el-form-item>
<el-form-item label="同步类型" prop="sync_type">
<el-select
v-model="form.sync_type"
class="filter-item"
clearable
:disabled="!form.local_table_name"
placeholder="请选择"
style="width: 180px"
>
<el-option
v-for="item in dict.sync_type"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="外部系统" prop="external_system">
<el-select
v-model="form.external_system"
class="filter-item"
clearable
placeholder="请选择"
style="width: 180px"
:disabled="!form.local_table_name"
>
<el-option
v-for="item in dict.external_system"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
</span>
</div>
<el-table
ref="table"
:data="tableData"
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
border
highlight-current-row
style="width: 100%;"
>
<el-table-column align="center" label="序号" type="index" width="50" />
<el-table-column align="center" fixed="right" label="操作" width="100">
<template scope="scope">
<el-button
class="filter-item"
icon="el-icon-delete"
size="mini"
type="danger"
@click.native.prevent="deleteRow(scope.$index, tableData)"
/>
</template>
</el-table-column>
<el-table-column align="center" label="字段名称" prop="local_field_name" />
<el-table-column align="center" label="外部系统字段名称" prop="external_field_name">
<template scope="scope">
<el-input v-model="scope.row.external_field_name" size="mini" />
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancle">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="submit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import CRUD, { crud, header, presenter } from '@crud/crud'
import crudFieldMapping from './fieldMapping'
export default {
name: 'EditDtl',
components: {},
dicts: ['external_system', 'sync_type'],
mixins: [presenter(), header(), crud()],
props: {
form: {
type: Object,
default: () => ({})
},
dialogShow: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
tableNameList: [],
tableData: []
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
}
},
methods: {
cancle() {
this.$emit('update:dialogShow', false)
},
open() {
this.getExistTableName()
},
getExistTableName() {
crudFieldMapping.getExistTableName().then(res => {
this.tableNameList = res
})
},
setForm(row) {
this.form.id = row.id
this.form.local_table_name = row.local_table_name
this.form.api_address = row.api_address
this.form.sync_type = row.sync_type
this.form.external_system = row.external_system
this.getColumns(this.form.local_table_name)
},
close() {
this.$emit('update:dialogShow', false)
this.$emit('EditChanged')
this.tableData = []
},
deleteRow(index, rows) {
rows.splice(index, 1)
},
getColumns(local_table_name) {
crudFieldMapping.getTableColumnNamesFromMapping(local_table_name).then(res => {
this.tableData = res.dtos
})
},
submit() {
if (!this.form.local_table_name) {
this.crud.notify('映射表名不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
const isInvalidRow = this.tableData.some(row => !row.external_field_name)
if (isInvalidRow) {
this.crud.notify('外部字段名称不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
const requestData = {
'bmExternalFieldMapping': this.form,
'dtos': this.tableData
}
crudFieldMapping.updateRows(requestData)
this.$emit('update:dialogShow', false)
this.$emit('EditChanged')
}
}
}
</script>

View File

@@ -1,81 +0,0 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/externalFieldMapping',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/externalFieldMapping',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/externalFieldMapping',
method: 'put',
data
})
}
export function getTableColumnNames(params) {
return request({
url: 'api/externalFieldMapping/getTableColumnNames/' + params,
method: 'get'
})
}
export function getAllTableName() {
return request({
url: 'api/externalFieldMapping/getAllTableName',
method: 'get'
})
}
export function getExistTableName() {
return request({
url: 'api/externalFieldMapping/getExistTableName',
method: 'get'
})
}
export function getTableColumnNamesFromMapping(params) {
return request({
url: 'api/externalFieldMapping/getTableColumnNamesFromMapping/' + params,
method: 'get'
})
}
export function addRows(data) {
return request({
url: 'api/externalFieldMapping/addRows',
method: 'post',
data
})
}
export function updateRows(data) {
return request({
url: 'api/externalFieldMapping/updateRows',
method: 'put',
data
})
}
export default {
add,
edit,
del,
addRows,
updateRows,
getAllTableName,
getTableColumnNames,
getExistTableName,
getTableColumnNamesFromMapping
}

View File

@@ -1,256 +0,0 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="90px"
label-suffix=":"
>
<el-form-item label="映射表名" prop="local_table_name">
<el-select
v-model="query.local_table_name"
clearable
filterable
size="mini"
placeholder="请选择/搜索"
class="filter-item"
@change="getColumns"
>
<el-option
v-for="item in tableNameList"
:value="item"
/>
</el-select>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission">
<el-button
slot="left"
class="filter-item"
icon="el-icon-position"
size="mini"
type="success"
@click="add"
>
新增
</el-button>
<el-button
slot="left"
class="filter-item"
:disabled="crud.selections.length !== 1"
icon="el-icon-position"
size="mini"
type="primary"
@click="edit(crud.selections[0])"
>
修改
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog
:close-on-click-modal="false"
:before-close="crud.cancelCU"
:visible.sync="crud.status.cu > 0"
:title="crud.status.title"
width="710px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="130px">
<el-form-item label="映射表名" prop="local_table_name">
<el-select
v-model="form.local_table_name"
clearable
filterable
size="mini"
placeholder="请选择/搜索"
class="filter-item"
@change="getColumns"
>
<el-option
v-for="item in tableNameList"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="接口地址" prop="api_address">
<el-input v-model="form.api_address" style="width: 180px;" />
</el-form-item>
<el-form-item label="同步类型" prop="sync_type">
<el-select
v-model="form.sync_type"
class="filter-item"
clearable
placeholder="请选择"
style="width: 180px"
>
<el-option
v-for="item in dict.sync_type"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="外部系统" prop="external_system">
<el-select
v-model="form.external_system"
class="filter-item"
clearable
placeholder="请选择"
style="width: 180px"
>
<el-option
v-for="item in dict.external_system"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="mini"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="local_table_name" label="映射表名" width="250" />
<el-table-column prop="api_address" label="接口地址" width="250" />
<el-table-column prop="sync_type" label="同步类型">
<template slot-scope="scope">
{{ dict.label.sync_type[scope.row.sync_type] }}
</template>
</el-table-column>
<el-table-column prop="external_system" label="外部系统">
<template slot-scope="scope">
{{ dict.label.external_system[scope.row.external_system] }}
</template>
</el-table-column>
<el-table-column prop="mapping_json" label="映射关系" show-overflow-tooltip />
<el-table-column prop="last_update_name" label="更新人" />
<el-table-column prop="last_update_time" label="更新时间" width="150" />
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
<AddDialog :form="form" :dialog-show.sync="addShow" @AddChanged="querytable1" />
<EditDialog ref="editRef" :form="form" :dialog-show.sync="editShow" @EditChanged="querytable" />
</div>
</template>
<script>
import crudFieldMapping from './fieldMapping'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation.vue'
import crudOperation from '@crud/CRUD.operation.vue'
import udOperation from '@crud/UD.operation.vue'
import pagination from '@crud/Pagination.vue'
import AddDialog from './AddDialog'
import EditDialog from './EditDialog'
const defaultForm = {
id: null,
local_table_name: null,
api_address: null,
sync_type: null,
external_system: null,
mapping_json: null
}
export default {
name: 'ExternalFieldMapping',
components: { pagination, crudOperation, rrOperation, udOperation, AddDialog, EditDialog },
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['external_system', 'sync_type'],
cruds() {
return CRUD({
title: '外部系统字段映射',
url: 'api/externalFieldMapping',
idField: 'id',
sort: 'id,desc',
crudMethod: { ...crudFieldMapping },
query: {},
optShow: {
add: false,
edit: false,
download: false,
reset: true,
del: true
}
})
},
data() {
return {
tableNameList: [],
fieldNameList: [],
dataTypeList: [],
addShow: false,
editShow: false,
permission: {},
rules: {
position_code: [
{ required: true, message: '缓存线位置编码不能为空', trigger: 'blur' }
]
}
}
},
created() {
crudFieldMapping.getAllTableName().then(res => {
this.tableNameList = res
})
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
getColumns() {
if (this.form.local_table_name === '') {
this.form.local_field_name = null
this.fieldNameList = []
return
}
crudFieldMapping.getTableColumnNames(this.form.local_table_name).then(res => {
this.fieldNameList = res
})
},
add() {
this.addShow = true
},
edit(row) {
this.$refs.editRef.setForm(row)
this.editShow = true
},
querytable() {
this.crud.toQuery()
},
querytable1() {
this.crud.toQuery()
}
}
}
</script>
<style scoped>
</style>