信息体组件增加配置项,当值为空时,初始值是否反向更新回去,默认为否,由后端赋值,否则会由于表单数据后加载和双向绑定导致重新赋值

样式调整,去掉列表行按钮间隔竖线
列表也拷贝数据发起流程或无流程数据发起流程的代码生成
增加从localstorage里加载数据发起流程的方法
流程配置中自动填充组件字段可配置必填和编辑
This commit is contained in:
yaoyn
2024-06-04 17:30:35 +08:00
parent 1525fed4c8
commit c45680c2ac
5 changed files with 92 additions and 35 deletions

View File

@ -27,6 +27,11 @@ import {inject, ref, watchEffect} from 'vue';
type: Boolean,
default: false,
},
//当值为空时,初始值是否反向更新回去,默认为否,由后端赋值,否则会由于表单数据后加载和双向绑定导致重新赋值
updateValueWhileEmpty:{
type: Boolean,
default: false
},
userNameWithDepartment:{
type: Boolean,
default: true
@ -86,21 +91,27 @@ import {inject, ref, watchEffect} from 'vue';
const deptName=dept?.name||"";
//判断传入的值 是不是当前登录人 就不需要发请求获取用户信息了
name.value = userStore.getUserInfo.name+(props.userNameWithDepartment&&(deptName||userStore.getUserInfo.departmentName)?("/"+(deptName||userStore.getUserInfo.departmentName)):"");
emit('update:value', userStore.getUserInfo.id);
if(props.updateValueWhileEmpty){
emit('update:value', userStore.getUserInfo.id);
}
}
//当前部门
if (props.infoType === 1) {
//判断传入的值 是不是当前登陆人的部门 就不需要发请求获取用户信息了
name.value = userStore.getUserInfo.departmentName;
emit('update:value', userStore.getUserInfo.departmentId);
if(props.updateValueWhileEmpty) {
emit('update:value', userStore.getUserInfo.departmentId);
}
}
//当前时间
if (props.infoType === 2) {
//如果是时间 默认显示参数时间
name.value = dateUtil(new Date()).format('YYYY-MM-DD HH:mm:ss');
emit('update:value', name.value);
if(props.updateValueWhileEmpty) {
emit('update:value', name.value);
}
}
}
});

View File

@ -57,7 +57,7 @@
type: Array as PropType<ActionItem[]>,
default: null,
},
divider: propTypes.bool.def(true),
divider: propTypes.bool.def(false),
outside: propTypes.bool,
stopButtonPropagation: propTypes.bool.def(false),
},

View File

@ -1008,10 +1008,10 @@ ${hasTemplatePrint ? ' reactive ' : ''}
formName: formName
}
});
} else if (record.workflowData?.schemaId && !record.workflowData.taskIds) {
} else if (record.workflowData?.schemaId && !record.workflowData.taskIds && record.workflowData.processId) {
const { processId, schemaId } = record.workflowData;
router.push({
path: '/flow/' + schemaId + '/' + (processId || '') + '/approveFlow',
path: '/flow/' + schemaId + '/' + processId + '/approveFlow',
query: {
readonly: 1,
taskId: '',
@ -1085,7 +1085,8 @@ ${hasTemplatePrint ? ' reactive ' : ''}
${
hasCopyDataButton
? `
function handleCopyData(record: Recordable) {
async function handleCopyData(record: Recordable) {
/*//弹框添加数据
${
formType === 'modal'
? `
@ -1098,7 +1099,32 @@ ${hasTemplatePrint ? ' reactive ' : ''}
id: record.${camelCaseString(mainTable.pkField)},
isCopy: true,
});`
}
}*/
const result = await get${pascalMainTableName}(record['${camelCaseString(mainTable.pkField)}']);
const form={};
const key="form_copy_"+record['${camelCaseString(mainTable.pkField)}'];
form[key]=result;
localStorage.setItem('formJsonStr', JSON.stringify(form));
const schemaId=record.workflowData?.schemaId||schemaIdComputedRef.value;
if(schemaId){
router.push({
path: '/flow/' + schemaId + '/0/createFlow',
query: {
fromKey: key
}
});
}else{
router.push({
path: '/form/${lowerClassName}/0/createForm',
query: {
formPath: '${model.outputConfig.outputValue}/${lowerClassName}',
formName: formName,
fromKey: key
}
});
}
}`
: ''
}
@ -1481,14 +1507,14 @@ ${hasTemplatePrint ? ' reactive ' : ''}
let editAndDelBtn: ActionItem[] = [];
${hasFlowRecordButton ? `let hasFlowRecord = false;` : ''}
actionButtonConfig.value?.map((button) => {
if (button.code === 'view') {
if (['view', 'copyData'].includes(button.code)) {
actionsList.push({
icon: button?.icon,
tooltip: button?.name,
onClick: handleView.bind(null, record),
onClick: btnEvent[button.code].bind(null, record),
});
}
if (['edit', 'copyData', 'delete'].includes(button.code)) {
if (['edit', 'delete'].includes(button.code)) {
editAndDelBtn.push({
icon: button?.icon,
tooltip: button?.name,
@ -1594,28 +1620,31 @@ ${hasTemplatePrint ? ' reactive ' : ''}
}
async function handleLaunchProcess(record: Recordable) {
if (record.workflowData) {
if (record.workflowData.draftId) {
let res = await getDraftInfo(record.workflowData.draftId);
let data = isValidJSON(res.formData);
if (data) {
for (let key in data) {
if (key.includes(formIdComputedRef.value)) {
formDataRef.value = data[key];
}
const schemaId=record.workflowData?.schemaId||schemaIdComputedRef.value;
if(schemaId){
if(record.workflowData?.draftId){
let res = await getDraftInfo(record.workflowData.draftId);
if (isValidJSON(res.formData)) {
localStorage.setItem('draftsJsonStr', res.formData);
router.push({
path: '/flow/' + schemaId + '/'+record.workflowData.draftId+'/createFlow'
});
return;
}
}
}
draftsId.value = record.workflowData.draftId;
} else {
const result = await get${pascalMainTableName}(record['${camelCaseString(
mainTable.pkField,
)}']);
formDataRef.value = result;
const result = await get${pascalMainTableName}(record['${camelCaseString(mainTable.pkField)}']);
const form={};
const key="form_"+schemaId+"_"+record['${camelCaseString(mainTable.pkField)}'];
form[key]=result;
localStorage.setItem('formJsonStr', JSON.stringify(form));
router.push({
path: '/flow/' + schemaId + '/0/createFlow',
query: {
fromKey: key
}
});
}
rowKeyData.value = record['${camelCaseString(mainTable.pkField)}'];
visibleLaunchProcessRef.value = true;
schemaIdRef.value = record.workflowData.schemaId;
}
}
function handleApproveProcess(record: Recordable) {
const { processId, taskIds, schemaId } = record.workflowData;

View File

@ -78,11 +78,13 @@
const currentRoute = router.currentRoute.value;
const rParams = currentRoute.params;
const fullPath = currentRoute.fullPath;
const rQuery = currentRoute.query;
const rSchemaId = rParams.arg1;
const rDraftsId = rParams.arg2;
const taskId = ref();
const loading = ref(false);
const draftsJsonStr = localStorage.getItem('draftsJsonStr');
const formJsonStr = localStorage.getItem('formJsonStr');
let formInformation = ref();
const opinionDlg = ref();
let pageMode = 'new';
@ -111,6 +113,9 @@
localStorage.removeItem('draftsJsonStr');
pageMode = 'draft';
}
if (formJsonStr) {
localStorage.removeItem('formJsonStr');
}
function closeFlowChart() {
showFlowChart.value = false;
@ -145,6 +150,7 @@
// 这里的顺序不能变 表单不渲染的时候 设置表单初值没用
await nextTick();
await initDraftsFormData();
await initFromFormData();
});
async function initDraftsFormData() {
@ -162,6 +168,17 @@
}
}
async function initFromFormData() {
if (formJsonStr) {
let formDataJson = JSON.parse(formJsonStr);
let formData = [];
if(rQuery.fromKey&&formDataJson[rQuery.fromKey]){
formData.push(formDataJson[rQuery.fromKey]);
}
await formInformation.value.setFormData(formData);
}
}
async function saveDraft() {
try {
disableSubmit.value = true;
@ -323,8 +340,8 @@
selectIds: []
};
});
const strictDesign=false;
if (strictDesign&&taskList.length > 0) {
const strictDesign = false;
if (strictDesign && taskList.length > 0) {
notificationError('提交失败', '流程设计错误,开始后的第一个节点必须是审批人为发起人的起草节点。');
data.submitLoading = false;
loading.value = false;

View File

@ -22,7 +22,7 @@ export const disableTypes = [
titleType,
dividerType,
infoType,
autoCodeType,
//autoCodeType,
'qrcode', //二维码组件
]; //表单字段仅仅只有查看权限
// 开关,滑块,颜色选择,评分,图片 组件权限中必填权限为disable
@ -31,7 +31,7 @@ export const requiredDisabled = [
titleType,
dividerType,
infoType,
autoCodeType,
//autoCodeType,
buttonType,
'switch',
'slider',