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

样式调整,去掉列表行按钮间隔竖线
列表也拷贝数据发起流程或无流程数据发起流程的代码生成
增加从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

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

View File

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

View File

@ -1008,10 +1008,10 @@ ${hasTemplatePrint ? ' reactive ' : ''}
formName: formName 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; const { processId, schemaId } = record.workflowData;
router.push({ router.push({
path: '/flow/' + schemaId + '/' + (processId || '') + '/approveFlow', path: '/flow/' + schemaId + '/' + processId + '/approveFlow',
query: { query: {
readonly: 1, readonly: 1,
taskId: '', taskId: '',
@ -1085,7 +1085,8 @@ ${hasTemplatePrint ? ' reactive ' : ''}
${ ${
hasCopyDataButton hasCopyDataButton
? ` ? `
function handleCopyData(record: Recordable) { async function handleCopyData(record: Recordable) {
/*//弹框添加数据
${ ${
formType === 'modal' formType === 'modal'
? ` ? `
@ -1098,6 +1099,31 @@ ${hasTemplatePrint ? ' reactive ' : ''}
id: record.${camelCaseString(mainTable.pkField)}, id: record.${camelCaseString(mainTable.pkField)},
isCopy: true, 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[] = []; let editAndDelBtn: ActionItem[] = [];
${hasFlowRecordButton ? `let hasFlowRecord = false;` : ''} ${hasFlowRecordButton ? `let hasFlowRecord = false;` : ''}
actionButtonConfig.value?.map((button) => { actionButtonConfig.value?.map((button) => {
if (button.code === 'view') { if (['view', 'copyData'].includes(button.code)) {
actionsList.push({ actionsList.push({
icon: button?.icon, icon: button?.icon,
tooltip: button?.name, 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({ editAndDelBtn.push({
icon: button?.icon, icon: button?.icon,
tooltip: button?.name, tooltip: button?.name,
@ -1594,27 +1620,30 @@ ${hasTemplatePrint ? ' reactive ' : ''}
} }
async function handleLaunchProcess(record: Recordable) { async function handleLaunchProcess(record: Recordable) {
if (record.workflowData) { const schemaId=record.workflowData?.schemaId||schemaIdComputedRef.value;
if (record.workflowData.draftId) { if(schemaId){
if(record.workflowData?.draftId){
let res = await getDraftInfo(record.workflowData.draftId); let res = await getDraftInfo(record.workflowData.draftId);
let data = isValidJSON(res.formData); if (isValidJSON(res.formData)) {
if (data) { localStorage.setItem('draftsJsonStr', res.formData);
for (let key in data) { router.push({
if (key.includes(formIdComputedRef.value)) { path: '/flow/' + schemaId + '/'+record.workflowData.draftId+'/createFlow'
formDataRef.value = data[key]; });
return;
} }
} }
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
} }
draftsId.value = record.workflowData.draftId; });
} else {
const result = await get${pascalMainTableName}(record['${camelCaseString(
mainTable.pkField,
)}']);
formDataRef.value = result;
}
rowKeyData.value = record['${camelCaseString(mainTable.pkField)}'];
visibleLaunchProcessRef.value = true;
schemaIdRef.value = record.workflowData.schemaId;
} }
} }
function handleApproveProcess(record: Recordable) { function handleApproveProcess(record: Recordable) {

View File

@ -78,11 +78,13 @@
const currentRoute = router.currentRoute.value; const currentRoute = router.currentRoute.value;
const rParams = currentRoute.params; const rParams = currentRoute.params;
const fullPath = currentRoute.fullPath; const fullPath = currentRoute.fullPath;
const rQuery = currentRoute.query;
const rSchemaId = rParams.arg1; const rSchemaId = rParams.arg1;
const rDraftsId = rParams.arg2; const rDraftsId = rParams.arg2;
const taskId = ref(); const taskId = ref();
const loading = ref(false); const loading = ref(false);
const draftsJsonStr = localStorage.getItem('draftsJsonStr'); const draftsJsonStr = localStorage.getItem('draftsJsonStr');
const formJsonStr = localStorage.getItem('formJsonStr');
let formInformation = ref(); let formInformation = ref();
const opinionDlg = ref(); const opinionDlg = ref();
let pageMode = 'new'; let pageMode = 'new';
@ -111,6 +113,9 @@
localStorage.removeItem('draftsJsonStr'); localStorage.removeItem('draftsJsonStr');
pageMode = 'draft'; pageMode = 'draft';
} }
if (formJsonStr) {
localStorage.removeItem('formJsonStr');
}
function closeFlowChart() { function closeFlowChart() {
showFlowChart.value = false; showFlowChart.value = false;
@ -145,6 +150,7 @@
// 这里的顺序不能变 表单不渲染的时候 设置表单初值没用 // 这里的顺序不能变 表单不渲染的时候 设置表单初值没用
await nextTick(); await nextTick();
await initDraftsFormData(); await initDraftsFormData();
await initFromFormData();
}); });
async function initDraftsFormData() { 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() { async function saveDraft() {
try { try {
disableSubmit.value = true; disableSubmit.value = true;

View File

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