🎈 perf(genCode): 优化genConfigDialog组件,使用vxe-taboe,支持拖拽调整顺序
This commit is contained in:
parent
fc65b1d4e2
commit
f2c88056b7
@ -1,135 +1,94 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="sys-codeGenConfig-container">
|
<div class="sys-codeGenConfig-container">
|
||||||
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="80vw">
|
<vxe-modal v-model="state.isShowDialog" title="生成配置" :width="800" :height="350" show-zoom resize fullscreen
|
||||||
<template #header>
|
@close="cancel">
|
||||||
<div style="color: #fff">
|
<template #default>
|
||||||
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
|
<vxe-grid ref="xGrid" class="xGrid-table-style" v-bind="options">
|
||||||
<span> 生成配置 </span>
|
<template #drag_default="{}">
|
||||||
</div>
|
<span class="drag-btn">
|
||||||
|
<i class="fa fa-arrows"></i>
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" border>
|
<template #effectType="{ row, $index }">
|
||||||
<el-table-column type="index" label="序号" width="50" align="center" />
|
<vxe-select v-model="row.effectType" class="m-2" style="width: 70%" placeholder="Select" transfer
|
||||||
<el-table-column prop="columnName" label="字段" width="160" show-overflow-tooltip />
|
:disabled="judgeColumns(row)" @change="effectTypeChange(row, $index)" filterable>
|
||||||
<el-table-column prop="columnComment" label="描述" width="160" show-overflow-tooltip>
|
<vxe-option v-for="item in state.effectTypeList" :key="item.code" :label="item.value"
|
||||||
<template #default="scope">
|
:value="item.code" />
|
||||||
<el-input v-model="scope.row.columnComment" autocomplete="off" />
|
</vxe-select>
|
||||||
</template>
|
<vxe-button v-if="row.effectType === 'ApiTreeSelect' || row.effectType === 'fk'" style="width: 30%"
|
||||||
</el-table-column>
|
icon="vxe-icon-edit" @click="effectTypeChange(row, $index)">修改</vxe-button>
|
||||||
<el-table-column prop="netType" label="数据类型" min-width="90" show-overflow-tooltip />
|
|
||||||
<el-table-column prop="effectType" label="作用类型" width="140" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<div class="effect-type-container">
|
|
||||||
<el-select
|
|
||||||
v-model="scope.row.effectType"
|
|
||||||
class="m-2"
|
|
||||||
style="width: 90%"
|
|
||||||
placeholder="Select"
|
|
||||||
:disabled="judgeColumns(scope.row)"
|
|
||||||
@change="effectTypeChange(scope.row, scope.$index)"
|
|
||||||
filterable
|
|
||||||
>
|
|
||||||
<el-option v-for="item in state.effectTypeList" :key="item.code" :label="item.value" :value="item.code" />
|
|
||||||
</el-select>
|
|
||||||
<el-button
|
|
||||||
v-if="scope.row.effectType === 'ApiTreeSelect' || scope.row.effectType === 'fk'"
|
|
||||||
:icon="Edit"
|
|
||||||
type="dashed"
|
|
||||||
title="修改"
|
|
||||||
link
|
|
||||||
@click="effectTypeChange(scope.row, scope.$index)"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="dictTypeCode" label="字典" width="180" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-select v-model="scope.row.dictTypeCode" class="m-2" :disabled="effectTypeEnable(scope.row)" filterable>
|
|
||||||
<el-option v-for="item in state.dictTypeCodeList" :key="item.code" :label="item.name" :value="item.code" />
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column prop="whetherTable" label="列表显示" width="70" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-checkbox v-model="scope.row.whetherTable" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="whetherAddUpdate" label="增改" width="70" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-checkbox v-model="scope.row.whetherAddUpdate" :disabled="judgeColumns(scope.row)" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="whetherRequired" label="必填" width="70" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<!-- <el-checkbox v-model="scope.row.whetherRequired" :disabled="judgeColumns(scope.row)" /> -->
|
|
||||||
<el-tag v-if="scope.row.whetherRequired" type="success">是</el-tag>
|
|
||||||
<el-tag v-else type="info">否</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="whetherSortable" label="可排序" width="80" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-checkbox v-model="scope.row.whetherSortable" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="queryWhether" label="是否是查询" min-width="80" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-switch v-model="scope.row.queryWhether" :active-value="true" :inactive-value="false" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="queryType" label="查询方式" min-width="120" align="center" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-select v-model="scope.row.queryType" class="m-2" placeholder="Select" :disabled="!scope.row.queryWhether" filterable>
|
|
||||||
<el-option v-for="item in state.queryTypeList" :key="item.code" :label="item.value" :value="item.code" />
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="orderNo" label="排序" width="100" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-input v-model="scope.row.orderNo" autocomplete="off" type="number" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="orderNo" label="校验规则" width="120" show-overflow-tooltip>
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button type="primary" plain v-if="scope.row.columnKey === 'False' && !scope.row.whetherCommon" @click="openVerifyDialog(scope.row)">校验规则{{ scope.row.ruleCount }}</el-button>
|
|
||||||
<span v-else></span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<template #footer>
|
|
||||||
<span class="dialog-footer">
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
<el-button type="primary" @click="submit">确 定</el-button>
|
|
||||||
</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
<template #columnComment="{ row }">
|
||||||
|
<vxe-input v-model="row.columnComment" autocomplete="off" />
|
||||||
<fkDialog ref="fkDialogRef" @submitRefreshFk="submitRefreshFk" />
|
</template>
|
||||||
<treeDialog ref="treeDialogRef" @submitRefreshFk="submitRefreshFk" />
|
<template #dictType="{ row }">
|
||||||
<verifyDialog ref="verifyDialogRef" @submitVerify="submitVerifyOk" />
|
<vxe-select v-model="row.dictTypeCode" class="m-2" :disabled="effectTypeEnable(row)" filterable transfer>
|
||||||
|
<vxe-option v-for="item in state.dictTypeCodeList" :key="item.code" :label="item.name"
|
||||||
|
:value="item.code" />
|
||||||
|
</vxe-select>
|
||||||
|
</template>
|
||||||
|
<template #whetherTable="{ row }">
|
||||||
|
<vxe-checkbox v-model="row.whetherTable"></vxe-checkbox>
|
||||||
|
</template>
|
||||||
|
<template #whetherAddUpdate="{ row }">
|
||||||
|
<vxe-checkbox v-model="row.whetherAddUpdate" :disabled="judgeColumns(row)"></vxe-checkbox>
|
||||||
|
</template>
|
||||||
|
<template #whetherSortable="{ row }">
|
||||||
|
<vxe-checkbox v-model="row.whetherSortable"></vxe-checkbox>
|
||||||
|
</template>
|
||||||
|
<template #whetherRequired="{ row }">
|
||||||
|
<vxe-tag v-if="row.whetherRequired" status="success">是</vxe-tag>
|
||||||
|
<vxe-tag v-else status="info">否</vxe-tag>
|
||||||
|
</template>
|
||||||
|
<template #queryWhether="{ row }">
|
||||||
|
<vxe-switch readonly v-model="row.queryWhether" open-label="是" close-label="否" :openValue="true"
|
||||||
|
:closeValue="false"></vxe-switch>
|
||||||
|
</template>
|
||||||
|
<template #queryType="{ row }">
|
||||||
|
<vxe-select v-model="row.queryType" class="m-2" placeholder="Select" :disabled="!row.queryWhether"
|
||||||
|
filterable transfer>
|
||||||
|
<vxe-option v-for="item in state.queryTypeList" :key="item.code" :label="item.value" :value="item.code" />
|
||||||
|
</vxe-select>
|
||||||
|
</template>
|
||||||
|
<template #verification="{ row }">
|
||||||
|
<vxe-button status="primary" plain v-if="row.columnKey === 'False' && !row.whetherCommon"
|
||||||
|
@click="openVerifyDialog(row)">校验规则{{ row.ruleCount }}</vxe-button>
|
||||||
|
<span v-else></span>
|
||||||
|
</template>
|
||||||
|
</vxe-grid>
|
||||||
|
</template>
|
||||||
|
<template #footer>
|
||||||
|
<vxe-button @click="cancel">取 消</vxe-button>
|
||||||
|
<vxe-button status="primary" @click="submit">确 定</vxe-button>
|
||||||
|
</template>
|
||||||
|
</vxe-modal>
|
||||||
|
|
||||||
|
<fkDialog ref="fkDialogRef" @submitRefreshFk="submitRefreshFk" />
|
||||||
|
<treeDialog ref="treeDialogRef" @submitRefreshFk="submitRefreshFk" />
|
||||||
|
<verifyDialog ref="verifyDialogRef" @submitVerify="submitVerifyOk" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup name="sysCodeGenConfig">
|
<script lang="ts" setup name="sysCodeGenConfig">
|
||||||
import { onMounted, onUnmounted, reactive, ref } from 'vue';
|
import { nextTick, onMounted, onUnmounted, reactive, ref } from 'vue';
|
||||||
import mittBus from '/@/utils/mitt';
|
import mittBus from '/@/utils/mitt';
|
||||||
import { Edit } from '@element-plus/icons-vue';
|
import fkDialog from '/@/views/system/codeGen/component/fkDialog.vue';
|
||||||
|
import treeDialog from '/@/views/system/codeGen/component/treeDialog.vue';
|
||||||
import fkDialog from '/@/views/system/codeGen/component/fkDialog.vue';
|
import verifyDialog from '/@/views/system/codeGen/component/verifyDialog.vue';
|
||||||
import treeDialog from '/@/views/system/codeGen/component/treeDialog.vue';
|
|
||||||
import verifyDialog from '/@/views/system/codeGen/component/verifyDialog.vue';
|
import { getAPI } from '/@/utils/axios-utils';
|
||||||
|
import { SysCodeGenConfigApi, SysConstApi, SysDictDataApi, SysDictTypeApi, SysEnumApi } from '/@/api-services/api';
|
||||||
import { getAPI } from '/@/utils/axios-utils';
|
import { VxeGridInstance, VxeGridProps } from 'vxe-pc-ui';
|
||||||
import { SysCodeGenConfigApi, SysConstApi, SysDictDataApi, SysDictTypeApi, SysEnumApi } from '/@/api-services/api';
|
import Sortable from 'sortablejs';
|
||||||
// import { CodeGenConfig } from '/@/api-services/models/code-gen-config';
|
// import { CodeGenConfig } from '/@/api-services/models/code-gen-config';
|
||||||
|
const xGrid = ref<VxeGridInstance<any>>();
|
||||||
const emits = defineEmits(['handleQuery']);
|
const emits = defineEmits(['handleQuery']);
|
||||||
const fkDialogRef = ref();
|
const fkDialogRef = ref();
|
||||||
const treeDialogRef = ref();
|
const treeDialogRef = ref();
|
||||||
const verifyDialogRef = ref();
|
const verifyDialogRef = ref();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
isShowDialog: false,
|
isShowDialog: false,
|
||||||
loading: false,
|
loading: false,
|
||||||
tableData: [] as any, // CodeGenConfig[],
|
|
||||||
dbData: [] as any,
|
dbData: [] as any,
|
||||||
effectTypeList: [] as any,
|
effectTypeList: [] as any,
|
||||||
dictTypeCodeList: [] as any,
|
dictTypeCodeList: [] as any,
|
||||||
@ -137,176 +96,364 @@ const state = reactive({
|
|||||||
queryTypeList: [] as any,
|
queryTypeList: [] as any,
|
||||||
allConstSelector: [] as any,
|
allConstSelector: [] as any,
|
||||||
allEnumSelector: [] as any,
|
allEnumSelector: [] as any,
|
||||||
});
|
sortable: undefined as any,
|
||||||
|
});
|
||||||
// 页面初始化
|
// 表格参数配置
|
||||||
onMounted(async () => {
|
const options = reactive<VxeGridProps>({
|
||||||
|
id: 'genConfigDialog',
|
||||||
|
height: 'auto',
|
||||||
|
keepSource: true,
|
||||||
|
autoResize: true,
|
||||||
|
loading: false,
|
||||||
|
align: 'center',
|
||||||
|
rowConfig: { useKey: true },
|
||||||
|
seqConfig: { seqMethod: ({ row }) => row.orderNo },
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
width: 50,
|
||||||
|
slots: {
|
||||||
|
default: 'drag_default',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'orderNo',
|
||||||
|
title: '排序',
|
||||||
|
minWidth: 80,
|
||||||
|
showOverflow: 'tooltip',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'columnName',
|
||||||
|
title: '字段',
|
||||||
|
minWidth: 160,
|
||||||
|
showOverflow: 'tooltip',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'columnComment',
|
||||||
|
title: '描述',
|
||||||
|
minWidth: 120,
|
||||||
|
showOverflow: 'tooltip',
|
||||||
|
slots: {
|
||||||
|
edit: 'columnComment',
|
||||||
|
default: 'columnComment',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'netType',
|
||||||
|
title: '数据类型',
|
||||||
|
minWidth: 90,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'effectType',
|
||||||
|
title: '作用类型',
|
||||||
|
minWidth: 160,
|
||||||
|
slots: {
|
||||||
|
edit: 'effectType',
|
||||||
|
default: 'effectType',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'dictTypeCode',
|
||||||
|
title: '字典',
|
||||||
|
minWidth: 180,
|
||||||
|
slots: {
|
||||||
|
edit: 'dictType',
|
||||||
|
default: 'dictType',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'whetherTable',
|
||||||
|
title: '列表显示',
|
||||||
|
minWidth: 70,
|
||||||
|
slots: {
|
||||||
|
edit: 'whetherTable',
|
||||||
|
default: 'whetherTable',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'whetherAddUpdate',
|
||||||
|
title: '增改',
|
||||||
|
minWidth: 70,
|
||||||
|
slots: {
|
||||||
|
edit: 'whetherAddUpdate',
|
||||||
|
default: 'whetherAddUpdate',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'whetherRequired',
|
||||||
|
title: '必填',
|
||||||
|
minWidth: 70,
|
||||||
|
slots: {
|
||||||
|
edit: 'whetherRequired',
|
||||||
|
default: 'whetherRequired',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'whetherSortable',
|
||||||
|
title: '可排序',
|
||||||
|
minWidth: 70,
|
||||||
|
slots: {
|
||||||
|
edit: 'whetherSortable',
|
||||||
|
default: 'whetherSortable',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'queryWhether',
|
||||||
|
title: '是否是查询',
|
||||||
|
minWidth: 70,
|
||||||
|
slots: {
|
||||||
|
edit: 'queryWhether',
|
||||||
|
default: 'queryWhether',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'queryType',
|
||||||
|
title: '查询方式',
|
||||||
|
minWidth: 120,
|
||||||
|
slots: {
|
||||||
|
edit: 'queryType',
|
||||||
|
default: 'queryType',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '校验规则',
|
||||||
|
width: 130,
|
||||||
|
showOverflow: true,
|
||||||
|
slots: {
|
||||||
|
edit: 'verification',
|
||||||
|
default: 'verification',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
editConfig: { trigger: 'click', mode: 'row', showStatus: true },
|
||||||
|
});
|
||||||
|
|
||||||
|
const rowDrop = () => {
|
||||||
|
const el = document.querySelector('.xGrid-table-style .vxe-table--body tbody') as HTMLElement;
|
||||||
|
state.sortable = Sortable.create(el, {
|
||||||
|
animation: 300,
|
||||||
|
handle: '.drag-btn',
|
||||||
|
onEnd: (sortableEvent: any) => {
|
||||||
|
const fullData = xGrid.value?.getTableData().fullData || [];
|
||||||
|
const newIndex = sortableEvent.newIndex as number;
|
||||||
|
const oldIndex = sortableEvent.oldIndex as number;
|
||||||
|
console.log("oldIndex", oldIndex);
|
||||||
|
|
||||||
|
// 往前移动
|
||||||
|
if (oldIndex > newIndex) {
|
||||||
|
const moveRow = fullData?.find((e) => e.orderNo == oldIndex + 1);
|
||||||
|
for (let i = oldIndex; i > newIndex; i--) {
|
||||||
|
const row = fullData?.find((e) => e.orderNo == i);
|
||||||
|
row.orderNo += 1;
|
||||||
|
}
|
||||||
|
moveRow.orderNo = newIndex + 1;
|
||||||
|
} else {
|
||||||
|
// 往后移动
|
||||||
|
const moveRow = fullData?.find((e) => e.orderNo == oldIndex + 1);
|
||||||
|
for (let i = oldIndex; i < newIndex; i++) {
|
||||||
|
const row = fullData?.find((e) => e.orderNo == i + 2);
|
||||||
|
row.orderNo -= 1;
|
||||||
|
}
|
||||||
|
moveRow.orderNo = newIndex + 1;
|
||||||
|
}
|
||||||
|
// 更新表格数据
|
||||||
|
xGrid.value?.updateData();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 页面初始化
|
||||||
|
onMounted(async () => {
|
||||||
|
// 从后端获取字典列表数据,并保存到本地状态管理中
|
||||||
var res = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_effect_type');
|
var res = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_effect_type');
|
||||||
state.effectTypeList = res.data.result;
|
state.effectTypeList = res.data.result;
|
||||||
|
|
||||||
|
// 获取字典类型代码列表,并将其保存到本地状态管理中,同时更新字典数据全集
|
||||||
var res1 = await getAPI(SysDictTypeApi).apiSysDictTypeListGet();
|
var res1 = await getAPI(SysDictTypeApi).apiSysDictTypeListGet();
|
||||||
state.dictTypeCodeList = res1.data.result;
|
state.dictTypeCodeList = res1.data.result;
|
||||||
state.dictDataAll = res1.data.result;
|
state.dictDataAll = res1.data.result;
|
||||||
|
|
||||||
|
// 获取查询类型列表数据,并保存到本地状态管理中
|
||||||
var res2 = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_query_type');
|
var res2 = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_query_type');
|
||||||
state.queryTypeList = res2.data.result;
|
state.queryTypeList = res2.data.result;
|
||||||
|
|
||||||
|
// 从后端获取常量列表数据,并保存到本地状态管理中
|
||||||
var res3 = await getAPI(SysConstApi).apiSysConstListGet();
|
var res3 = await getAPI(SysConstApi).apiSysConstListGet();
|
||||||
state.allConstSelector = res3.data.result;
|
state.allConstSelector = res3.data.result;
|
||||||
|
|
||||||
|
// 获取枚举类型列表数据,对其进行处理后保存到本地状态管理中
|
||||||
let resEnum = await getAPI(SysEnumApi).apiSysEnumEnumTypeListGet();
|
let resEnum = await getAPI(SysEnumApi).apiSysEnumEnumTypeListGet();
|
||||||
state.allEnumSelector = resEnum.data.result?.map((item) => ({ ...item, name: `${item.typeDescribe} [${item.typeName?.replace('Enum', '')}]`, code: item.typeName }));
|
state.allEnumSelector = resEnum.data.result?.map((item) => ({ ...item, name: `${item.typeDescribe} [${item.typeName?.replace('Enum', '')}]`, code: item.typeName }));
|
||||||
|
|
||||||
mittBus.on('submitRefreshFk', (data: any) => {
|
mittBus.on('submitRefreshFk', (data: any) => {
|
||||||
state.tableData[data.index] = data;
|
let tableData = xGrid.value?.getData() || [];
|
||||||
|
tableData[data.index] = data;
|
||||||
|
xGrid.value?.loadData(tableData);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 更新主键
|
// 更新主键
|
||||||
const submitRefreshFk = (data: any) => {
|
const submitRefreshFk = (data: any) => {
|
||||||
state.tableData[data.index] = data;
|
let tableData = xGrid.value?.getData() || [];
|
||||||
};
|
tableData[data.index] = data;
|
||||||
|
xGrid.value?.reloadData(tableData);
|
||||||
onUnmounted(() => {
|
};
|
||||||
mittBus.off('submitRefresh', () => {});
|
|
||||||
mittBus.off('submitRefreshFk', () => {});
|
onUnmounted(() => {
|
||||||
});
|
// mittBus.off('submitRefresh', () => {});
|
||||||
|
mittBus.off('submitRefreshFk', () => { });
|
||||||
// 控件类型改变
|
});
|
||||||
const effectTypeChange = (data: any, index: number) => {
|
|
||||||
|
// 控件类型改变
|
||||||
|
const effectTypeChange = (data: any, index: number) => {
|
||||||
let value = data.effectType;
|
let value = data.effectType;
|
||||||
if (value === 'fk') {
|
if (value === 'fk') {
|
||||||
openFkDialog(data, index);
|
openFkDialog(data, index);
|
||||||
} else if (value === 'ApiTreeSelect') {
|
} else if (value === 'ApiTreeSelect') {
|
||||||
openTreeDialog(data, index);
|
openTreeDialog(data, index);
|
||||||
} else if (value === 'Select') {
|
} else if (value === 'Select') {
|
||||||
data.dictTypeCode = '';
|
data.dictTypeCode = '';
|
||||||
state.dictTypeCodeList = state.dictDataAll;
|
state.dictTypeCodeList = state.dictDataAll;
|
||||||
} else if (value === 'ConstSelector') {
|
} else if (value === 'ConstSelector') {
|
||||||
data.dictTypeCode = '';
|
data.dictTypeCode = '';
|
||||||
state.dictTypeCodeList = state.allConstSelector;
|
state.dictTypeCodeList = state.allConstSelector;
|
||||||
} else if (value == 'EnumSelector') {
|
} else if (value == 'EnumSelector') {
|
||||||
data.dictTypeCode = '';
|
data.dictTypeCode = '';
|
||||||
state.dictTypeCodeList = state.allEnumSelector;
|
state.dictTypeCodeList = state.allEnumSelector;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 查询操作
|
// 查询操作
|
||||||
const handleQuery = async (row: any) => {
|
const handleQuery = async (row: any) => {
|
||||||
state.loading = true;
|
state.loading = true;
|
||||||
var res = await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigListGet(undefined, row.id);
|
var res = await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigListGet(undefined, row.id);
|
||||||
var data = res.data.result ?? [];
|
var data = res.data.result ?? [];
|
||||||
let lstWhetherColumn = ['whetherTable', 'whetherAddUpdate', 'whetherRequired', 'whetherSortable']; //列表显示的checkbox
|
let lstWhetherColumn = ['whetherTable', 'whetherAddUpdate', 'whetherRequired', 'whetherSortable']; //列表显示的checkbox
|
||||||
data.forEach((item: any) => {
|
data.forEach((item: any) => {
|
||||||
for (const key in item) {
|
for (const key in item) {
|
||||||
if (item[key] === 'Y') {
|
if (item[key] === 'Y') {
|
||||||
item[key] = true;
|
item[key] = true;
|
||||||
}
|
|
||||||
if (item[key] === 'N' || (lstWhetherColumn.includes(key) && item[key] === null)) {
|
|
||||||
item[key] = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 验证规则相关
|
if (item[key] === 'N' || (lstWhetherColumn.includes(key) && item[key] === null)) {
|
||||||
let rules = new Array();
|
item[key] = false;
|
||||||
if (item.rules != '' && item.rules !== null) {
|
|
||||||
rules = JSON.parse(item.rules);
|
|
||||||
}
|
}
|
||||||
item.ruleCount = rules.length > 0 ? `(${rules.length})` : '';
|
}
|
||||||
|
// 验证规则相关
|
||||||
|
let rules = new Array();
|
||||||
|
if (item.rules != '' && item.rules !== null) {
|
||||||
|
rules = JSON.parse(item.rules);
|
||||||
|
}
|
||||||
|
item.ruleCount = rules.length > 0 ? `(${rules.length})` : '';
|
||||||
});
|
});
|
||||||
state.tableData = data;
|
xGrid.value?.loadData(data);
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 判断是否(用于是否能选择或输入等)
|
// 判断是否(用于是否能选择或输入等)
|
||||||
function judgeColumns(data: any) {
|
function judgeColumns(data: any) {
|
||||||
return data.whetherCommon == true || data.columnKey === 'True';
|
return data.whetherCommon == true || data.columnKey === 'True';
|
||||||
}
|
}
|
||||||
|
|
||||||
function effectTypeEnable(data: any) {
|
function effectTypeEnable(data: any) {
|
||||||
var lst = ['Radio', 'Select', 'Checkbox', 'ConstSelector', 'EnumSelector'];
|
var lst = ['Radio', 'Select', 'Checkbox', 'ConstSelector', 'EnumSelector'];
|
||||||
return lst.indexOf(data.effectType) === -1;
|
return lst.indexOf(data.effectType) === -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 打开弹窗
|
// 打开弹窗
|
||||||
const openDialog = async (addRow: any) => {
|
const openDialog = async (addRow: any) => {
|
||||||
await handleQuery(addRow);
|
|
||||||
state.isShowDialog = true;
|
state.isShowDialog = true;
|
||||||
};
|
|
||||||
|
nextTick(async () => {
|
||||||
// 打开弹窗
|
await handleQuery(addRow);
|
||||||
const openFkDialog = (addRow: any, index: number) => {
|
rowDrop();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 打开外键弹窗
|
||||||
|
const openFkDialog = (addRow: any, index: number) => {
|
||||||
addRow.index = index;
|
addRow.index = index;
|
||||||
fkDialogRef.value.openDialog(addRow);
|
fkDialogRef.value.openDialog(addRow);
|
||||||
};
|
};
|
||||||
|
|
||||||
const openTreeDialog = (addRow: any, index: number) => {
|
const openTreeDialog = (addRow: any, index: number) => {
|
||||||
addRow.index = index;
|
addRow.index = index;
|
||||||
treeDialogRef.value.openDialog(addRow);
|
treeDialogRef.value.openDialog(addRow);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 打开校验弹窗
|
// 打开校验弹窗
|
||||||
const openVerifyDialog = (row: any) => {
|
const openVerifyDialog = (row: any) => {
|
||||||
// handleQuery(addRow);
|
// handleQuery(addRow);
|
||||||
// state.isShowDialog = true;
|
// state.isShowDialog = true;
|
||||||
verifyDialogRef.value.openDialog(row);
|
verifyDialogRef.value.openDialog(row);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 验证提交回调
|
// 验证提交回调
|
||||||
const submitVerifyOk = (data: any) => {
|
const submitVerifyOk = (data: any) => {
|
||||||
console.log('submitVerifyOk', data);
|
let tableData = xGrid.value?.getData() || [];
|
||||||
for (let i = 0; i < state.tableData.length; i++) {
|
for (let i = 0; i < tableData.length; i++) {
|
||||||
if (state.tableData[i].id == data.id) {
|
if (tableData[i].id == data.id) {
|
||||||
state.tableData[i].rules = data.rules;
|
tableData[i].rules = data.rules;
|
||||||
state.tableData[i].ruleCount = data.ruleCount;
|
tableData[i].ruleCount = data.ruleCount;
|
||||||
//更新必填项
|
//更新必填项
|
||||||
let rules = new Array();
|
let rules = new Array();
|
||||||
if (data.rules != '' && data.rules !== null) {
|
if (data.rules != '' && data.rules !== null) {
|
||||||
rules = JSON.parse(data.rules);
|
rules = JSON.parse(data.rules);
|
||||||
let requiredRule = rules.find((t) => t.type === 'required');
|
let requiredRule = rules.find((t) => t.type === 'required');
|
||||||
if (requiredRule) {
|
if (requiredRule) {
|
||||||
state.tableData[i].whetherRequired = true;
|
tableData[i].whetherRequired = true;
|
||||||
} else {
|
} else {
|
||||||
state.tableData[i].whetherRequired = false;
|
tableData[i].whetherRequired = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
xGrid.value?.reloadData(tableData);
|
||||||
|
};
|
||||||
// 关闭弹窗
|
|
||||||
const closeDialog = () => {
|
// 关闭弹窗
|
||||||
|
const closeDialog = () => {
|
||||||
emits('handleQuery');
|
emits('handleQuery');
|
||||||
|
cancel();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 取消
|
||||||
|
const cancel = () => {
|
||||||
|
xGrid.value?.loadData([]);
|
||||||
state.isShowDialog = false;
|
state.isShowDialog = false;
|
||||||
};
|
if (state.sortable) {
|
||||||
|
state.sortable.destroy();
|
||||||
// 取消
|
}
|
||||||
const cancel = () => {
|
};
|
||||||
state.isShowDialog = false;
|
|
||||||
};
|
// 提交
|
||||||
|
const submit = async () => {
|
||||||
// 提交
|
|
||||||
const submit = async () => {
|
|
||||||
state.loading = true;
|
state.loading = true;
|
||||||
var lst = state.tableData;
|
let lst = xGrid.value?.getData() || [];
|
||||||
// console.log(lst);
|
// console.log(lst);
|
||||||
let ignoreFields = ['remoteVerify', 'anyRule', 'columnKey'];
|
let ignoreFields = ['remoteVerify', 'anyRule', 'columnKey'];
|
||||||
lst.forEach((item: any) => {
|
lst.forEach((item: any) => {
|
||||||
// 必填那一项转换
|
// 必填那一项转换
|
||||||
for (var key in item) {
|
for (var key in item) {
|
||||||
if (item[key] === true && !ignoreFields.includes(key)) {
|
if (item[key] === true && !ignoreFields.includes(key)) {
|
||||||
item[key] = 'Y';
|
item[key] = 'Y';
|
||||||
}
|
|
||||||
if (item[key] === false && !ignoreFields.includes(key)) {
|
|
||||||
item[key] = 'N';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (item[key] === false && !ignoreFields.includes(key)) {
|
||||||
|
item[key] = 'N';
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigUpdatePost(lst);
|
await getAPI(SysCodeGenConfigApi).apiSysCodeGenConfigUpdatePost(lst);
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
closeDialog();
|
closeDialog();
|
||||||
};
|
};
|
||||||
|
|
||||||
// 导出对象
|
// 导出对象
|
||||||
defineExpose({ openDialog });
|
defineExpose({ openDialog });
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.xGrid-table-style .drag-btn {
|
||||||
|
cursor: move;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user