zzq 2024-06-13 17:37:09 +08:00
commit ce4c15b40e
12 changed files with 187 additions and 339 deletions

View File

@ -1,49 +1,3 @@
export const formItemPropsScript_ = `
prop:id;
data:;
isUpdate:,;
get(path):, pathid, id., id..id;
set(path,value):,pathget;
getLabel(prop):,propid;
setRequired(prop,isRequired):,propid,isRequired true,false
setDisabled(prop,isDisabled):,propid,isDisabled true,false
setHide(prop,isHide):,isHide true,false
httpGet(option):get
httpPost(option):post
httpDelete(option):delete
httpPut(option):put
option::url:,data:(get),params:url,errorTips:,callback
loading:
hideLoading:
message:
loginUser:
callback:,使http使';
`;
export const formItemPropsScript__ = `
// 示例代码,只支持ES5语法
// 获取子表行数据
var childRow = utils.get('子表组件id.行号')
// 获取子表单元格数据
var childCell = utils.get('子表组件id.行号.单元格组件id')
// 添加子表行数据
var row = {}
utils.set({path:'子表组件id',value:row,type:'addTable'})
// 删除子表行数据
utils.set({path:'子表组件id.行号',type:'deleteTable'})
// 设置子表某一个单元格数据
utils.set({path:'子表组件id.行号.单元格组件id',value:'xxxxxx'})
// 去掉子表某一行删除按钮
utils.set({path:'子表组件id.行号.hasNoDeleteBtn',value:false})
// 让子表某一行变成不可编辑
utils.set({path:'子表组件id.行号.disabled',value:true})
// 让子表某一行除了某一列外不可以编辑
utils.set({path:'子表组件id.行号.disabled',value:true})
utils.set({path:'子表组件id.行号.abledList',value:['编辑列组件id']})
`;
export const formItemPropsScript = `
// 获取表单是新增还是编辑
var isUpdate = utils.isUpdate();
@ -52,10 +6,21 @@ var data = utils.data();
// 数据设置
// 获取主表数据
utils.getValue('组件的字段标识');
let mainValue = utils.getValue('组件的字段标识');
// 设置主表数据
setFieldsValue(utils.setValue('组件的字段标识', '设置的值'));
// 获取子表数据
let childValue = getChildValue('组件的字段标识');
// 添加子表数据
subTableList.value = addChildValue(data);
data[{1: "value1", {2: "value2"}]{1: "value1"}
// 修改子表数据
subTableList.value = addChildValue('组件的字段标识', '旧value', '新value');
// 删除子表数据
subTableList.value = deleteChildValue('组件的字段标识', 'value');
// 组件设置
// 设置组件为隐藏
formColumns.value = utils.setHide('组件的字段标识', false);
@ -96,8 +61,8 @@ url:api地址, params:参数
`;
export function addBreakLines(text: string): string {
// 根据换行符分割文本为行
const lines = text.split(/\r?\n/);
// 在每行后面添加
return lines.map((line) => line + '<br />').join('');
};
// 根据换行符分割文本为行
const lines = text.split(/\r?\n/);
// 在每行后面添加
return lines.map((line) => line + '<br />').join('');
}

View File

@ -529,14 +529,16 @@
columns.push(val);
});
});
const obj = await validate();
setTimeout(() => {
updateSchema(columns);
resetFields();
}, 100);
setTimeout(() => {
setFieldsValue(obj);
}, 500);
if(!isDetail.value){
const obj = await validate();
setTimeout(() => {
setFieldsValue(obj);
}, 500);
}
}
function generateUniqueDigits(length: number): number[] {
const digits = new Set<number>();

View File

@ -228,7 +228,10 @@
formBoxRef.value
.getForm()
.then(async (res) => {
if (res) {
console.log(res);
if (!res) {
createMessage.error('请检查表单必填项');
} else {
if (!props.isUpdate) {
res[designerData.formCurrentNode.formRelationId] = processId;
querys.pkeyValue = processId;
@ -254,8 +257,6 @@
if (formValue) {
handleCreateFlow(processId, querys.pkeyValue);
}
} else {
createMessage.error('请检查表单必填项');
}
})
.catch((error) => {

View File

@ -141,12 +141,51 @@ export const utils = {
},
// 获取子表数据
getChildValue: (field: any): any => {
return c_record[field];
if (field == '') {
return c_subTableList;
} else {
const res: any = [];
c_subTableList.forEach((v) => {
res.push(v[field]);
});
return res;
}
},
// 设置子表数据
setChildValue: (field: any, value: any): any => {
c_record[field] = value;
return c_record;
// 添加子表数据
addChildValue: (data: any): any => {
if (typeof data == 'object') {
if (Array.isArray(data)) {
data.forEach((d) => {
c_subTableList.push(d);
});
} else {
c_subTableList.push(data);
}
}
return c_subTableList;
},
// 修改子表数据
updateChildValue: (field: string, oldValue: string, newValue: string): any => {
const c_subTableList_temp: any = [];
c_subTableList.forEach((sub) => {
if (sub[field] == oldValue) {
sub[field] = newValue;
}
c_subTableList_temp.push(sub);
});
c_subTableList = c_subTableList_temp;
return c_subTableList;
},
// 删除子表数据
deleteChildValue: (field: string, value: string): any => {
const c_subTableList_temp: any = [];
c_subTableList.forEach((sub) => {
if (sub[field] != value) {
c_subTableList_temp.push(sub);
}
});
c_subTableList = c_subTableList_temp;
return c_subTableList;
},
// 组件-----------------------------
// 获取组件

View File

@ -141,6 +141,7 @@
asyncValidator: async (rule, value, callback) => {
//
if (value) {
//
try {
let filedsJson = {
Code: formData.value.code,
@ -176,104 +177,51 @@
});
}
} catch (error) {
('验证出错');
if (error) {
emit('set-steps-current', false);
}
}
} else {
callback(new Error('请输入编号'));
}
},
trigger: ['blur'],
trigger: 'blur',
},
],
name: [
{
required: true,
validator: (rule, value, callback) => {
try {
//
if (value) {
callback();
} else {
callback(new Error('请输入名称'));
}
} catch (error) {
console.log(error);
}
},
trigger: ['blur'],
message: '请输入名称',
trigger: 'blur',
},
],
icon: [
{
component: 'IconPicker',
required: true,
validator: (rule, value, callback) => {
try {
//
if (value) {
callback();
} else {
callback(new Error('请选择图标'));
}
} catch (error) {
console.log(error);
}
},
trigger: ['blur'],
message: '请选择图标',
trigger: 'blur',
},
],
formCodeName: [
{
required: true,
validator: (rule, value, callback) => {
try {
//
if (value) {
callback();
} else {
callback(new Error('请选择表单'));
}
} catch (error) {
console.log(error);
}
},
trigger: ['blur'],
message: '请选择表单版本',
trigger: 'blur',
},
],
formVerison: [
{
required: true,
validator: (rule, value, callback) => {
try {
//
if (value) {
callback();
} else {
callback(new Error('请选择表单版本'));
}
} catch (error) {
console.log(error);
}
},
trigger: ['blur'],
message: '请选择表单版本',
trigger: 'blur',
},
],
pmoduleId: [
{
required: true,
validator: (rule, value, callback) => {
try {
//
if (value) {
callback();
} else {
callback(new Error('请选择上级'));
}
} catch (error) {
console.log(error);
}
},
trigger: ['blur'],
message: '请选择上级',
trigger: 'blur',
},
],
enabledMark: [{ required: true }],
@ -292,36 +240,25 @@
}
},
);
// props
watch(
() => props.isNextSteps,
async () => {
if (props.isNextSteps) {
// if (formModuleRef) {
// try {
// await formModuleRef.validate();
// } catch (error) {
// console.log(error);
// }
// }
if (
formData.value.code === '' ||
formData.value.name === '' ||
formData.value.icon === '' ||
formData.value.formCode === '' ||
formData.value.formVerison === '' ||
formData.value.pmoduleId === ''
) {
createMessage.error(t('数据未填写完整'));
emit('set-steps-current', false);
} else {
//
let res = await checkExistFiled();
if (res) {
emit('set-steps-current', true);
} else {
createMessage.error(t('表单的编号值重复'));
emit('set-steps-current', false);
//
if (formModuleRef) {
try {
const valid = await formModuleRef.validate();
if (valid.errorFields) {
emit('set-steps-current', false);
} else {
emit('set-steps-current', true);
}
} catch (error) {
if (error) {
emit('set-steps-current', false);
}
}
}
}
@ -387,59 +324,6 @@
getSchemeRow(result.info);
}
//
async function checkExistFiled() {
try {
let filedsJson = {
Code: formData.value.code,
};
let result = false;
if (props.isEdit) {
//
let query: any = {
keyValue: props.editData.record.id,
tableName: 'form_module',
keyName: 'Id',
filedsJson: JSON.stringify(filedsJson),
};
await Get_Get_ExistFiled(query)
.then((res) => {
if (res) {
result = true;
} else {
result = false;
}
})
.catch((error) => {
createMessage.error('验证出错' + error);
result = true;
});
} else {
//
let query: any = {
tableName: 'form_module',
keyName: 'Id',
filedsJson: JSON.stringify(filedsJson),
};
await Get_Get_ExistFiled(query)
.then((res) => {
if (res) {
result = true;
} else {
result = false;
}
})
.catch((error) => {
createMessage.error('验证出错' + error);
result = false;
});
}
return result;
} catch (error) {
('验证出错');
}
}
defineExpose({
formData,
});

View File

@ -78,6 +78,7 @@
getOutKeyList,
} from '@/api/formdesign/index';
import { functionGetForm } from '@/api/demo/formScheme';
import { cardNestStructure, changeCardStructure } from '@/views/demo/onlineform/util.ts'
defineOptions({ name: 'FormModal' });
@ -118,66 +119,6 @@
}
return arr;
}
const changeCardStructure = (data) => {
let result = [];
if (data && data.length > 0) {
data.forEach((item) => {
if (item.component === 'Tabs') {
item.componentProps.options = changeCardStructure(item.componentProps.options);
} else if (item.component === 'CardGroup') {
item.componentProps.options = changeCardStructure(item.componentProps.options);
item.componentProps.options.forEach((childItem) => {
if (childItem.pfield) {
result.push(childItem);
} else {
result.push({ ...childItem, ptype: 'card', pfield: item.field });
}
});
item.componentProps.options = [];
} else if (item.component === 'Grid' && item.label === '栅格布局') {
item.columns = changeCardStructure(item.columns);
item.columns.forEach((childItem) => {
childItem.children.forEach((col) => {
result.push({ ...col, ptype: 'gridlayout', pfield: item.field });
});
});
} else if (item.children && !item.field) {
item.children = changeCardStructure(item.children);
} else if (item.children && item.field.indexOf('use_card') === -1) {
item.children = changeCardStructure(item.children);
item.children = [];
} else {
if (['Card'].includes(item.component)) {
item.columns[0].children = changeCardStructure(item.columns[0].children);
if (item.component === 'Card' && item.columns[0].children) {
item.columns[0].children.forEach((childItem) => {
if (childItem.pfield) {
result.push(childItem);
} else {
result.push({ ...childItem, ptype: 'card', pfield: item.field });
}
});
item.columns[0].children = [];
}
} else if (item.field && item.field.indexOf('use_card') !== -1) {
item.children = changeCardStructure(item.children);
item.children.forEach((childItem) => {
if (childItem.pfield) {
result.push(childItem);
} else {
result.push({ ...childItem, ptype: 'card', pfield: item.field });
}
});
item.children = [];
}
}
result.push(item);
});
return result;
} else {
return data;
}
};
async function designSendGrandson(value) {
let designTab = JSON.parse(value);
let schems = saveFormDatas.value.scheme.scheme
@ -525,53 +466,6 @@
saveFormDatas.value.scheme.type = 1;
}
}
const cardNestStructure = (data) => {
let childList = {};
let result = [];
data.forEach((item) => {
if (item.schemas) {
item.schemas = cardNestStructure(item.schemas);
result.push(item);
}else if(item.component === 'Tabs'){
item.componentProps.options = cardNestStructure(item.componentProps.options);
result.push(item);
}else if(!item.ptype && Object.keys(item).includes('children')){
item.children = cardNestStructure(item.children)
result.push(item);
} else if (item.ptype) {
if (Object.keys(item).includes('children')) {
item.children = childList[item.field] || [];
}
if (item.component === 'CardGroup' && Object.keys(item).includes('componentProps')) {
item.componentProps.options = childList[item.field] || [];
}
let pushItem = {};
Object.keys(item).forEach((key) => {
if (key !== 'ptype' && key !== 'pfield') {
pushItem[key] = item[key];
}
});
if (childList[item.pfield]) {
childList[item.pfield].push(pushItem);
} else {
childList[item.pfield] = [pushItem];
}
} else if (item.component === 'CardGroup') {
item.componentProps.options = childList[item.field] || [];
result.push(item);
} else if (item.component === 'Card') {
item.columns[0].children = childList[item.field] || [];
result.push(item);
} else if (item.field &&item.field.indexOf('use_card') !== -1) {
item.children = childList[item.field] || [];
result.push(item);
} else {
result.push(item);
}
});
return result;
};
//
function automaticFormDataBack(data) {
if (isStageClick.value && stepsCurrent.value === 0) {

View File

@ -9,12 +9,12 @@
:showCancelBtn="true"
:showOkBtn="true"
@ok="submit"
@cancel="closeModal()"
@cancel="closeModalDeleteGrid"
@visible-change="
() => {
db_list.value = [];
chlidTableName = '';
closeModal();
isCloseSubmit.value = false;
}
"
>
@ -381,6 +381,10 @@
else if (item.component == 'Card') {
//
}
//
else if (item.component == 'Grid') {
//
}
} else {
//
let temp = cloneDeep(dbColumnInfo);
@ -401,7 +405,16 @@
item.componentProps.dataTable = db_temp.tableName;
item.componentProps.fieldName = temp.dbColumnName;
db_temp.dbColumnInfoList.push(temp);
//
let gridFlag = true;
db_temp.dbColumnInfoList.forEach((dbColumn) => {
if (dbColumn.dbColumnName == temp.dbColumnName) {
gridFlag = false;
}
});
if (gridFlag) {
db_temp.dbColumnInfoList.push(temp);
}
}
}
schemas[index] = item;
@ -413,7 +426,16 @@
}
});
if (gridType == 'main') {
db_list.value.unshift(db_temp);
//
let dbFlag = true;
db_list.value.forEach((db) => {
if (db.tableName == db_temp.tableName) {
dbFlag = false;
}
});
if (dbFlag) {
db_list.value.unshift(db_temp);
}
}
}
@ -677,7 +699,16 @@
}
});
if (gridType == 'chlid') {
db_list.value.push(db_temp);
//
let dbFlag = true;
db_list.value.forEach((db) => {
if (db.tableName == db_temp.tableName) {
dbFlag = false;
}
});
if (dbFlag) {
db_list.value.push(db_temp);
}
}
}
return scheme;
@ -745,6 +776,7 @@
}
});
}
// saveFormDatas
getFromAndTable();
}
@ -790,6 +822,8 @@
saveFormDatas.scheme.scheme = JSON.stringify(schems);
}
// submit
const isCloseSubmit = ref(false);
// saveFormDatas
function getFromAndTable() {
let schems = JSON.parse(saveFormDatas.scheme.scheme);
@ -802,7 +836,8 @@
});
saveFormDatas.scheme.scheme = JSON.stringify(schems);
emit('automatic-modal-submitsuccess', saveFormDatas);
closeModal();
isCloseSubmit.value = true;
closeModalDeleteGrid();
}
//
@ -816,6 +851,32 @@
});
}
//
function closeModalDeleteGrid() {
//
if (!isCloseSubmit.value) {
let scheme_close = JSON.parse(saveFormDatas.scheme.scheme);
let tabList_close = scheme_close.formInfo.tabList;
// tabList
tabList_close.forEach((list, list_index) => {
let schemas_temp: any = [];
let schemas_close = list.schemas;
// schemas
schemas_close.forEach((sch) => {
if (!sch.ptype || sch.ptype != 'gridlayout') {
// schemas
schemas_temp.push(sch);
}
});
tabList_close[list_index].schemas = schemas_temp;
});
// scheme
scheme_close.formInfo.tabList = tabList_close;
saveFormDatas.scheme.scheme = JSON.stringify(scheme_close);
}
closeModal();
}
// varchar
function isBoolChangeLength(record: Recordable) {
if (record.dataType == 'bool') {

View File

@ -5,12 +5,6 @@ export const cardNestStructure = (data) => {
if(item.schemas){
item.schemas = cardNestStructure(item.schemas)
result.push(item)
}else if(item.component === 'Tabs'){
item.componentProps.options = cardNestStructure(item.componentProps.options);
result.push(item);
}else if(!item.ptype && Object.keys(item).includes('children')){
item.children = cardNestStructure(item.children)
result.push(item);
}else if(item.ptype){
if(Object.keys(item).includes('children')){
item.children = childList[item.field] || []

View File

@ -95,6 +95,8 @@
unref(asyncBtnExpandTreeRef)?.expandAll(true);
});
}
let moduleIds = ref([]);
let elementIds = ref([]);
async function getMenusForRol(id) {
var menusForRol = await loadForRole({
roleId: id,
@ -107,9 +109,11 @@
unref(asyncExpandTreeRef)?.setCheckedKeys(menusForRol.moduleIds);
checkData.moduleIds = menusForRol.moduleIds;
checkData.elementIds = menusForRol.elementIds;
unref(asyncBtnExpandTreeRef)?.setCheckedKeys(checkData.elementIds);
moduleIds.value = menusForRol.moduleIds;
elementIds.value = menusForRol.elementIds;
}
let moduleIds = ref([]);
let elementIds = ref([]);
function handleSelect(checkedKeys, e: { checked: boolean; checkedNodes; node; event }) {
const list = e.checkedNodes;
moduleIds.value = [];
@ -143,6 +147,9 @@
try {
if (step.value == 1) {
step.value = 2;
setTimeout(() => {
unref(asyncBtnExpandTreeRef)?.setCheckedKeys(checkData.elementIds);
}, 10);
} else {
var query = {
roleId: rowId.value,

View File

@ -16,7 +16,7 @@
>关闭
</a-button>
</div>
<a-tabs v-model:activeKey="activeName" @change="changeActive">
<a-tabs v-model:activeKey="activeName" @change="changeActive" type="card">
<a-tab-pane
key="form"
:tab="

View File

@ -6,13 +6,6 @@ export const getRFields = (dataList, rFieldList,fieldList) => {
// value:element.prop
value: element.field,
});
}
if(element.component === 'Tabs'){
element.componentProps.options.forEach(childElement => {
const {rFieldList:rField, fieldList:field} = getRFields(childElement.children,rFieldList,fieldList)
rFieldList = rField
fieldList = field
})
}else if (
![
'Divider',

View File

@ -12,7 +12,15 @@
<a-layout>
<a-layout-content>
<a-tabs v-model:activeKey="activeName" @change="changeActive" type="card">
<a-tab-pane key="form" tab="表单信息" v-if="formVisble">
<a-tab-pane
key="form"
:tab="
designerData.formCurrentNode.formTitle
? designerData.formCurrentNode.formTitle
: '表单信息'
"
v-if="formVisble"
>
<div :class="mapConfig?.isShowMap ? 'form-container' : ''">
<FormViewer
ref="formBoxRef"