Merge branch 'main' of http://123.132.248.154:10000/HC_YFZX/CaiYuanYiTiHua
commit
83aeba4735
|
|
@ -135,16 +135,22 @@
|
||||||
:useWrapper="false"
|
:useWrapper="false"
|
||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
>
|
>
|
||||||
<div style="display: flex">
|
<div class="alertModal">
|
||||||
<div class="w-1/2 xl:w-1/2" style="overflow: auto; height: calc(100%)">
|
<div class="alertModal_content">
|
||||||
<a-textarea v-model:value="formContent" :rows="29" />
|
<a-textarea
|
||||||
|
v-model:value="formContent"
|
||||||
|
autosize
|
||||||
|
:auto-size="{ minRows: 22, maxRows: 22 }"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-1/2 xl:w-1/2" style="overflow: auto; height: calc(100%)">
|
<div class="alertModal_content">
|
||||||
<a-alert message="脚本参数说明,只支持ES5语法(兼容小程序)" type="warning">
|
<a-textarea
|
||||||
<template #description>
|
class="alertModal_content-textarea"
|
||||||
<div v-html="description"></div>
|
v-model:value="formItemPropsScript"
|
||||||
</template>
|
autosize
|
||||||
</a-alert>
|
readOnly
|
||||||
|
:auto-size="{ minRows: 22, maxRows: 22 }"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</BasicModal>
|
</BasicModal>
|
||||||
|
|
@ -180,7 +186,7 @@
|
||||||
import { IBaseFormAttrs } from '../config/formItemPropsConfig';
|
import { IBaseFormAttrs } from '../config/formItemPropsConfig';
|
||||||
import { getOutKeyList } from '@/api/formdesign/index';
|
import { getOutKeyList } from '@/api/formdesign/index';
|
||||||
import { BasicModal, useModal } from '@/components/Modal';
|
import { BasicModal, useModal } from '@/components/Modal';
|
||||||
import { formItemPropsScript, addBreakLines } from '../../VFormDesign/config/formItemPropsScript';
|
import { formItemPropsScript } from '../../VFormDesign/config/formItemPropsScript';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ComponentProps',
|
name: 'ComponentProps',
|
||||||
|
|
@ -434,7 +440,6 @@
|
||||||
});
|
});
|
||||||
// 脚本
|
// 脚本
|
||||||
const formContent: any = ref('');
|
const formContent: any = ref('');
|
||||||
const description = addBreakLines(formItemPropsScript);
|
|
||||||
// 脚本窗口
|
// 脚本窗口
|
||||||
const [buttonScriptModal, { openModal, closeModal }] = useModal();
|
const [buttonScriptModal, { openModal, closeModal }] = useModal();
|
||||||
// 点击脚本按钮
|
// 点击脚本按钮
|
||||||
|
|
@ -495,7 +500,7 @@
|
||||||
fetch,
|
fetch,
|
||||||
BasicModal,
|
BasicModal,
|
||||||
formContent,
|
formContent,
|
||||||
description,
|
formItemPropsScript,
|
||||||
buttonScriptModal,
|
buttonScriptModal,
|
||||||
openModal,
|
openModal,
|
||||||
closeModal,
|
closeModal,
|
||||||
|
|
@ -505,3 +510,23 @@
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.alertModal {
|
||||||
|
display: flex;
|
||||||
|
background-color: @border-color-base;
|
||||||
|
|
||||||
|
&_content {
|
||||||
|
width: 50%;
|
||||||
|
padding: 1px;
|
||||||
|
|
||||||
|
&-textarea {
|
||||||
|
// @if @border-color-base == #141414 {
|
||||||
|
background-color: @border-color-base;
|
||||||
|
// } @else {
|
||||||
|
// background-color: #fffbe6;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -113,16 +113,22 @@
|
||||||
:width="1000"
|
:width="1000"
|
||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
>
|
>
|
||||||
<div style="display: flex">
|
<div class="alertModal">
|
||||||
<div class="w-1/2 xl:w-1/2" style="overflow: auto; height: calc(100%)">
|
<div class="alertModal_content">
|
||||||
<a-textarea v-model:value="formContent" :rows="29" />
|
<a-textarea
|
||||||
|
v-model:value="formContent"
|
||||||
|
autosize
|
||||||
|
:auto-size="{ minRows: 22, maxRows: 22 }"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-1/2 xl:w-1/2" style="overflow: auto; height: calc(100%)">
|
<div class="alertModal_content">
|
||||||
<a-alert message="脚本参数说明" type="warning">
|
<a-textarea
|
||||||
<template #description>
|
class="alertModal_content-textarea"
|
||||||
<div v-html="description"></div>
|
v-model:value="formItemPropsScript"
|
||||||
</template>
|
autosize
|
||||||
</a-alert>
|
readOnly
|
||||||
|
:auto-size="{ minRows: 22, maxRows: 22 }"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</BasicModal>
|
</BasicModal>
|
||||||
|
|
@ -130,7 +136,7 @@
|
||||||
<script lang="ts" setup name="FormProps">
|
<script lang="ts" setup name="FormProps">
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { BasicModal, useModal } from '@/components/Modal';
|
import { BasicModal, useModal } from '@/components/Modal';
|
||||||
import { formItemPropsScript, addBreakLines } from '../../VFormDesign/config/formItemPropsScript';
|
import { formItemPropsScript } from '../../VFormDesign/config/formItemPropsScript';
|
||||||
import { useFormDesignState } from '../../../hooks/useFormDesignState';
|
import { useFormDesignState } from '../../../hooks/useFormDesignState';
|
||||||
import {
|
import {
|
||||||
InputNumber,
|
InputNumber,
|
||||||
|
|
@ -169,7 +175,6 @@
|
||||||
let formTitle: any = ref('');
|
let formTitle: any = ref('');
|
||||||
let btnClickEvent_now = '';
|
let btnClickEvent_now = '';
|
||||||
let formContent: any = ref('');
|
let formContent: any = ref('');
|
||||||
let description = addBreakLines(formItemPropsScript);
|
|
||||||
// 脚本窗口
|
// 脚本窗口
|
||||||
const [propsScriptModal, { openModal, closeModal }] = useModal();
|
const [propsScriptModal, { openModal, closeModal }] = useModal();
|
||||||
// 点击脚本按钮
|
// 点击脚本按钮
|
||||||
|
|
@ -250,3 +255,23 @@
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.alertModal {
|
||||||
|
display: flex;
|
||||||
|
background-color: @border-color-base;
|
||||||
|
|
||||||
|
&_content {
|
||||||
|
width: 50%;
|
||||||
|
padding: 1px;
|
||||||
|
|
||||||
|
&-textarea {
|
||||||
|
// @if @border-color-base == #141414 {
|
||||||
|
background-color: @border-color-base;
|
||||||
|
// } @else {
|
||||||
|
// background-color: #fffbe6;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
export const formItemPropsScript = `
|
export const formItemPropsScript = `脚本参数说明
|
||||||
// 获取表单是新增还是编辑
|
// 获取表单是新增还是编辑
|
||||||
var isUpdate = utils.isUpdate();
|
let update = utils.isUpdate();
|
||||||
// 组件变更数据
|
// 组件变更数据
|
||||||
var data = utils.data();
|
let data = utils.data();
|
||||||
|
|
||||||
// 数据设置
|
// 数据设置
|
||||||
// 获取主表数据
|
// 获取主表数据
|
||||||
|
|
@ -20,7 +20,6 @@ subTableList.value = addChildValue('组件的字段标识', '旧value', '新valu
|
||||||
// 删除子表数据
|
// 删除子表数据
|
||||||
subTableList.value = deleteChildValue('组件的字段标识', 'value');
|
subTableList.value = deleteChildValue('组件的字段标识', 'value');
|
||||||
|
|
||||||
|
|
||||||
// 组件设置
|
// 组件设置
|
||||||
// 设置组件为隐藏
|
// 设置组件为隐藏
|
||||||
formColumns.value = utils.setHide('组件的字段标识', false);
|
formColumns.value = utils.setHide('组件的字段标识', false);
|
||||||
|
|
@ -38,7 +37,7 @@ formColumns.value = utils.setRequired('组件的字段标识', false);
|
||||||
// 功能设置
|
// 功能设置
|
||||||
// 提示消息
|
// 提示消息
|
||||||
utils.message('提示信息', '提示类型');
|
utils.message('提示信息', '提示类型');
|
||||||
提示类型:success(成功)、error(错误)、warn(警告)、info(默认)\
|
提示类型:success(成功)、error(错误)、warn(警告)、info(默认)
|
||||||
// 获取登录者信息
|
// 获取登录者信息
|
||||||
var loginUser = utils.loginUser();
|
var loginUser = utils.loginUser();
|
||||||
loginUser返回值为{ account: 账号, name: 姓名 }
|
loginUser返回值为{ account: 账号, name: 姓名 }
|
||||||
|
|
@ -59,10 +58,3 @@ url:api地址, params:参数
|
||||||
let resPut = await utils.httpPut(url, params);
|
let resPut = await utils.httpPut(url, params);
|
||||||
url:api地址, params:参数
|
url:api地址, params:参数
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export function addBreakLines(text: string): string {
|
|
||||||
// 根据换行符分割文本为行
|
|
||||||
const lines = text.split(/\r?\n/);
|
|
||||||
// 在每行后面添加
|
|
||||||
return lines.map((line) => line + '<br />').join('');
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
@success="submitsuccess"
|
@success="submitsuccess"
|
||||||
/> -->
|
/> -->
|
||||||
<div class="map-form-container" v-if="mapFormShow">
|
<div class="map-form-container" v-if="mapFormShow">
|
||||||
<MapFormModal v-if="mapFormShow" @clsoeMapForm="clsoeMapForm" :data="mapFormData"/>
|
<MapFormModal v-if="mapFormShow" @clsoeMapForm="clsoeMapForm" :data="mapFormData" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -109,8 +109,8 @@
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
import { changeCardStructure, cardNestStructure } from '@/views/demo/onlineform/util.ts';
|
import { changeCardStructure, cardNestStructure } from '@/views/demo/onlineform/util.ts';
|
||||||
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
|
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
|
||||||
const mapFormShow = ref<boolean>(false)
|
const mapFormShow = ref<boolean>(false);
|
||||||
const mapFormData = ref<Object>({})
|
const mapFormData = ref<Object>({});
|
||||||
const { createConfirm, createMessage } = useMessage();
|
const { createConfirm, createMessage } = useMessage();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const btnArr: any = [
|
const btnArr: any = [
|
||||||
|
|
@ -256,7 +256,7 @@
|
||||||
}
|
}
|
||||||
const [registerModal, { openModal }] = useModal();
|
const [registerModal, { openModal }] = useModal();
|
||||||
|
|
||||||
const [registerMapFormModal,{ openModal:openMapFormModal }] = useModal();
|
const [registerMapFormModal, { openModal: openMapFormModal }] = useModal();
|
||||||
|
|
||||||
const [registerTable, { reload, setColumns, getSelectRows, clearSelectedRowKeys }] = useTable({
|
const [registerTable, { reload, setColumns, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||||
title: '表单列表',
|
title: '表单列表',
|
||||||
|
|
@ -276,13 +276,10 @@
|
||||||
showTableSetting: true,
|
showTableSetting: true,
|
||||||
bordered: true,
|
bordered: true,
|
||||||
beforeFetch: (data) => {
|
beforeFetch: (data) => {
|
||||||
console.log('item.key', data);
|
|
||||||
// 接口请求前 参数处理
|
// 接口请求前 参数处理
|
||||||
const querys = JSON.parse(JSON.stringify(data));
|
const querys = JSON.parse(JSON.stringify(data));
|
||||||
console.log('1111', querys);
|
|
||||||
delete querys.page;
|
delete querys.page;
|
||||||
delete querys.limit;
|
delete querys.limit;
|
||||||
console.log('querys', querys);
|
|
||||||
var temp = {
|
var temp = {
|
||||||
id: paramsId.value,
|
id: paramsId.value,
|
||||||
mid: codeId.value,
|
mid: codeId.value,
|
||||||
|
|
@ -415,7 +412,7 @@
|
||||||
// key: 'f_id',
|
// key: 'f_id',
|
||||||
keyValue: null,
|
keyValue: null,
|
||||||
});
|
});
|
||||||
const str: any = ref(addParamsArr.value[0].field);
|
const str: any = ref();
|
||||||
// const str: any = ref('_input_guid_43');
|
// const str: any = ref('_input_guid_43');
|
||||||
addParamsArr.value.forEach((item) => {
|
addParamsArr.value.forEach((item) => {
|
||||||
if (item.type == 'main') {
|
if (item.type == 'main') {
|
||||||
|
|
@ -451,7 +448,7 @@
|
||||||
if (haveMap.value) {
|
if (haveMap.value) {
|
||||||
// showFormModalData.value = toProps;
|
// showFormModalData.value = toProps;
|
||||||
// openShowFormModal.value = true;
|
// openShowFormModal.value = true;
|
||||||
openModal(true,toProps);
|
openModal(true, toProps);
|
||||||
mapgemoList.value = [];
|
mapgemoList.value = [];
|
||||||
mapSetData.value.isAllowAddPolygon && MapboxComponent.value.handlerDraw(status);
|
mapSetData.value.isAllowAddPolygon && MapboxComponent.value.handlerDraw(status);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -556,11 +553,11 @@
|
||||||
// showFormModalData.value = toProps;
|
// showFormModalData.value = toProps;
|
||||||
// openShowFormModal.value = true;
|
// openShowFormModal.value = true;
|
||||||
// 根据ids获取图斑
|
// 根据ids获取图斑
|
||||||
try{
|
try {
|
||||||
console.log("formConfig",formConfig);
|
console.log('formConfig', formConfig);
|
||||||
handlerShowGeomtrys(formConfig,rows[0])
|
handlerShowGeomtrys(formConfig, rows[0]);
|
||||||
}catch(e){
|
} catch (e) {
|
||||||
createMessage.error("当前数据没有图斑!");
|
createMessage.error('当前数据没有图斑!');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
openModal(true, toProps);
|
openModal(true, toProps);
|
||||||
|
|
@ -574,82 +571,82 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const chooseLayer = ref<string>("")
|
const chooseLayer = ref<string>('');
|
||||||
const geomfield = ref<string>("");
|
const geomfield = ref<string>('');
|
||||||
|
|
||||||
function findValue(obj, targetKey) {
|
function findValue(obj, targetKey) {
|
||||||
for (var key in obj) {
|
for (var key in obj) {
|
||||||
if (typeof obj[key] === 'object') {
|
if (typeof obj[key] === 'object') {
|
||||||
// 如果当前值是对象,则递归调用findValue
|
// 如果当前值是对象,则递归调用findValue
|
||||||
var result = findValue(obj[key], targetKey);
|
var result = findValue(obj[key], targetKey);
|
||||||
if (result !== undefined && result == 'MapGeom') {
|
if (result !== undefined && result == 'MapGeom') {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} else if (key === targetKey && obj[key] == 'MapGeom') {
|
} else if (key === targetKey && obj[key] == 'MapGeom') {
|
||||||
// 如果当前键等于目标键,则返回对应的值
|
// 如果当前键等于目标键,则返回对应的值
|
||||||
chooseLayer.value = obj['mapSetData'].chooseLayer;
|
chooseLayer.value = obj['mapSetData'].chooseLayer;
|
||||||
geomfield.value = obj['field']
|
geomfield.value = obj['field'];
|
||||||
return obj[key];
|
return obj[key];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handlerShowGeomtrys(currentNode,rows){
|
async function handlerShowGeomtrys(currentNode, rows) {
|
||||||
findValue(currentNode.value.schemas,"component")
|
findValue(currentNode.value.schemas, 'component');
|
||||||
|
|
||||||
let info = currentNode.value.schemas?.find((item,index)=>{
|
let info = currentNode.value.schemas?.find((item, index) => {
|
||||||
return item.component.match(/mapgeom/i)
|
return item.component.match(/mapgeom/i);
|
||||||
})
|
});
|
||||||
let layer:string=chooseLayer.value;
|
let layer: string = chooseLayer.value;
|
||||||
// // let layer:string="drone_shp_data";
|
// // let layer:string="drone_shp_data";
|
||||||
// if(info){
|
// if(info){
|
||||||
// layer = info?.mapSetData?.chooseLayer
|
// layer = info?.mapSetData?.chooseLayer
|
||||||
// }
|
// }
|
||||||
if(!layer){
|
if (!layer) {
|
||||||
createMessage.error("图斑未绑定图层服务!");
|
createMessage.error('图斑未绑定图层服务!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let geomfiledValue = geomfield.value;
|
let geomfiledValue = geomfield.value;
|
||||||
let gids = "";
|
let gids = '';
|
||||||
try {
|
try {
|
||||||
// geomfiledValue = geomfiledValue.charAt(0).toLowerCase();
|
// geomfiledValue = geomfiledValue.charAt(0).toLowerCase();
|
||||||
geomfiledValue = geomfiledValue.charAt(0).toLowerCase() + geomfiledValue.slice(1);
|
geomfiledValue = geomfiledValue.charAt(0).toLowerCase() + geomfiledValue.slice(1);
|
||||||
gids = rows[geomfiledValue]
|
gids = rows[geomfiledValue];
|
||||||
if(gids){
|
if (gids) {
|
||||||
try{
|
try {
|
||||||
let getGeomPrams = {
|
let getGeomPrams = {
|
||||||
TableName:layer,
|
TableName: layer,
|
||||||
FieldName:"gid",
|
FieldName: 'gid',
|
||||||
FieldValue:gids,
|
FieldValue: gids,
|
||||||
page:1,
|
page: 1,
|
||||||
limit:999,
|
limit: 999,
|
||||||
key:null,
|
key: null,
|
||||||
}
|
};
|
||||||
await getGeom(getGeomPrams).then(res=>{
|
await getGeom(getGeomPrams).then((res) => {
|
||||||
let geoms = [];
|
let geoms = [];
|
||||||
if(res){
|
if (res) {
|
||||||
if(res.items?.length>0){
|
if (res.items?.length > 0) {
|
||||||
res.items.forEach((item,index)=>{
|
res.items.forEach((item, index) => {
|
||||||
let geom = {
|
let geom = {
|
||||||
key:item.gid,
|
key: item.gid,
|
||||||
mapgeom:item.geometry
|
mapgeom: item.geometry,
|
||||||
}
|
};
|
||||||
geoms.push(geom);
|
geoms.push(geom);
|
||||||
})
|
});
|
||||||
}
|
|
||||||
MapboxComponent.value.handlerDraw("Details",geoms, false)
|
|
||||||
}else{
|
|
||||||
createMessage.error("当前数据没有图斑!");
|
|
||||||
}
|
}
|
||||||
})
|
MapboxComponent.value.handlerDraw('Details', geoms, false);
|
||||||
}catch(e){
|
} else {
|
||||||
createMessage.error("当前数据没有图斑!");
|
createMessage.error('当前数据没有图斑!');
|
||||||
}
|
}
|
||||||
}else{
|
});
|
||||||
createMessage.error("当前数据没有图斑!");
|
} catch (e) {
|
||||||
|
createMessage.error('当前数据没有图斑!');
|
||||||
}
|
}
|
||||||
}catch{
|
} else {
|
||||||
createMessage.error("获取图斑数据失败!");
|
createMessage.error('当前数据没有图斑!');
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
createMessage.error('获取图斑数据失败!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -904,9 +901,9 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const clsoeMapForm = ()=>{
|
const clsoeMapForm = () => {
|
||||||
mapFormShow.value = false;
|
mapFormShow.value = false;
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
.full-modal {
|
.full-modal {
|
||||||
|
|
@ -939,13 +936,13 @@
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map-form-container{
|
.map-form-container {
|
||||||
width:100%;
|
width: 100%;
|
||||||
height:100%;
|
height: 100%;
|
||||||
position:absolute;
|
position: absolute;
|
||||||
top:0px;
|
top: 0px;
|
||||||
left:0px;
|
left: 0px;
|
||||||
background:#fff;
|
background: #fff;
|
||||||
z-index:999;
|
z-index: 999;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,7 @@
|
||||||
db_list.value = [];
|
db_list.value = [];
|
||||||
// dbCode
|
// dbCode
|
||||||
forminfoDbCode = data.saveFormDatas.info.DbCode;
|
forminfoDbCode = data.saveFormDatas.info.DbCode;
|
||||||
|
// 分析表单
|
||||||
scheme = getSchemeByscheme(
|
scheme = getSchemeByscheme(
|
||||||
scheme,
|
scheme,
|
||||||
forminfoDbCode,
|
forminfoDbCode,
|
||||||
|
|
@ -793,6 +794,7 @@
|
||||||
let oldDbColumnArray = old.dbColumnInfoList.map((o) => o.dbColumnName);
|
let oldDbColumnArray = old.dbColumnInfoList.map((o) => o.dbColumnName);
|
||||||
db.dbColumnInfoList.forEach(async (dbColumn) => {
|
db.dbColumnInfoList.forEach(async (dbColumn) => {
|
||||||
if (!oldDbColumnArray.includes(dbColumn.dbColumnName)) {
|
if (!oldDbColumnArray.includes(dbColumn.dbColumnName)) {
|
||||||
|
dbColumn.isNullable = 1;
|
||||||
let query: any = {
|
let query: any = {
|
||||||
dbCode: forminfoDbCode,
|
dbCode: forminfoDbCode,
|
||||||
dbColumn: dbColumn,
|
dbColumn: dbColumn,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue