1、样式调整

This commit is contained in:
Jerry
2024-09-26 15:01:08 +08:00
parent e9d724e3a2
commit 14d0bd8c5d
52 changed files with 482 additions and 451 deletions

View File

@@ -15,17 +15,18 @@
"ace-builds": "^1.32.2", "ace-builds": "^1.32.2",
"axios": "^1.5.1", "axios": "^1.5.1",
"bpmn-js-token-simulation": "^0.10.0", "bpmn-js-token-simulation": "^0.10.0",
"diagram-js": "^6.8.2",
"clipboard": "^2.0.11", "clipboard": "^2.0.11",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"diagram-js": "^6.8.2",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"ejs": "^3.1.9", "ejs": "^3.1.9",
"element-plus": "^2.7.3", "element-plus": "^2.7.3",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"jsencrypt": "^3.3.2", "jsencrypt": "^3.3.2",
"json-bigint": "^1.0.0", "json-bigint": "^1.0.0",
"lodash": "^4.17.21",
"pinia": "^2.1.6", "pinia": "^2.1.6",
"pinia-plugin-persist": "^1.0.0", "pinia-plugin-persist": "^1.0.0",
"print-js": "^1.6.0", "print-js": "^1.6.0",
@@ -36,10 +37,11 @@
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vxe-table": "^4.5.13", "vxe-table": "^4.5.13",
"xe-utils": "^3.5.14", "xe-utils": "^3.5.14",
"xml-js": "^1.6.11", "xml-js": "^1.6.11"
"lodash": "^4.17.21"
}, },
"devDependencies": { "devDependencies": {
"bpmn-js": "7.5.0",
"bpmn-js-properties-panel": "0.37.6",
"@types/ejs": "^3.1.5", "@types/ejs": "^3.1.5",
"@types/json-bigint": "^1.0.4", "@types/json-bigint": "^1.0.4",
"@types/node": "^18.11.17", "@types/node": "^18.11.17",
@@ -53,8 +55,6 @@
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.0",
"autoprefixer": "^10.4.16", "autoprefixer": "^10.4.16",
"bpmn-js": "7.5.0",
"bpmn-js-properties-panel": "0.37.6",
"eslint": "^8.30.0", "eslint": "^8.30.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-typescript": "^3.6.1", "eslint-import-resolver-typescript": "^3.6.1",

View File

@@ -9,68 +9,8 @@ $color-text-secondary: #909399 !default;
'primary': ( 'primary': (
'base': $color-primary, 'base': $color-primary,
), ),
),
$common-component-size: (
'large': 36px,
'default': 32px,
'small': 32px,
),
$tag: (
'font-size': 14px,
),
$tag-height: (
'large': 28px,
'default': 28px,
),
$radio-bordered-input-height: (
'large': 14px,
'default': 14px,
'small': 14px,
),
$radio-bordered-input-width: (
'large': 14px,
'default': 14px,
'small': 14px,
),
$button-padding-vertical: (
'large': 11px,
'default': 9px,
'small': 6px,
),
$button-padding-horizontal: (
'large': 18px,
'default': 16px,
'small': 12px,
) )
); );
$form-item-margin-bottom: () !default;
$form-item-margin-bottom: map.merge(
(
'large': 18px,
'default': 18px,
'small': 18px,
),
$form-item-margin-bottom
);
$form-item-line-height: () !default;
$form-item-line-height: map.merge(
(
'large': 36px,
'default': 32px,
'small': 24px,
),
$form-item-line-height
);
$radio-font-size: () !default;
$radio-font-size: map.merge(
(
'large': 14px,
'small': 14px,
),
$radio-font-size
);
@use '@/assets/style/base.scss'; @use '@/assets/style/base.scss';
:deep(.vxe-table--empty-placeholder) { :deep(.vxe-table--empty-placeholder) {

View File

@@ -576,12 +576,12 @@ body .fullscreen-dialog .layui-layer-content {
} }
.user-dropdown { .user-dropdown {
font-size: 12px; font-size: 14px;
color: $--color-text-secondary; color: $--color-text-secondary;
cursor: pointer; cursor: pointer;
} }
.user-dropdown-item { .user-dropdown-item {
font-size: 12px; font-size: 14px;
color: $--color-text-primary; color: $--color-text-primary;
.el-badge { .el-badge {

View File

@@ -22,7 +22,7 @@ $chart-form-item-textarea-width: 200px;
.el-form-item__label { .el-form-item__label {
width: 100%; width: 100%;
padding-bottom: 0 !important; padding-bottom: 0 !important;
font-size: 12px; font-size: 14px;
color: #303133; color: #303133;
font-weight: 600; font-weight: 600;
} }
@@ -51,7 +51,7 @@ $chart-form-item-textarea-width: 200px;
} }
.view-attribute-item .el-form-item__label { .view-attribute-item .el-form-item__label {
font-size: 12px; font-size: 14px;
color: #303133; color: #303133;
} }

View File

@@ -44,7 +44,7 @@ export const useTable = <T>(options: TableOptions<T>) => {
}) })
.catch(() => { .catch(() => {
currentPage.value = oldPage; currentPage.value = oldPage;
pageSize.value = oldVal; pageSize.value = oldPageSize;
}); });
} }
}); });

View File

@@ -17,8 +17,8 @@ export const useWindowResize = () => {
layoutStore.defaultFormItemSize = 'default'; layoutStore.defaultFormItemSize = 'default';
document.body.className = 'orange-project container-default'; document.body.className = 'orange-project container-default';
} else { } else {
layoutStore.defaultFormItemSize = 'large'; layoutStore.defaultFormItemSize = 'default';
document.body.className = 'orange-project container-large'; document.body.className = 'orange-project container-default';
} }
layoutStore.documentClientHeight = document.documentElement.clientHeight; layoutStore.documentClientHeight = document.documentElement.clientHeight;

View File

@@ -220,7 +220,7 @@ onMounted(() => {
flex: 1; flex: 1;
height: 35px; height: 35px;
line-height: 35px; line-height: 35px;
font-size: 12px; font-size: 14px;
} }
.advance-query .module-node-menu { .advance-query .module-node-menu {
text-align: right; text-align: right;
@@ -236,5 +236,6 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex: 1; flex: 1;
padding: 0px 16px;
} }
</style> </style>

View File

@@ -199,7 +199,7 @@ const getItemLabel = (item: ANY_OBJECT) => {
position: relative; position: relative;
z-index: 9; z-index: 9;
margin-left: 5px; margin-left: 5px;
font-size: 12px; font-size: 14px;
color: $color-primary; color: $color-primary;
} }

View File

@@ -155,7 +155,8 @@ const handleCreated = (editor: ANY_OBJECT) => {
watch( watch(
() => props.value, () => props.value,
newValue => { newValue => {
if (editorRef.value) editorRef.value.txt.html(newValue); if (editorRef.value && newValue !== editorRef.value.txt.html())
editorRef.value.txt.html(newValue);
}, },
{ {
deep: true, deep: true,

View File

@@ -22,9 +22,13 @@
menu.menuName menu.menuName
}}</span> }}</span>
</template> </template>
<template v-for="child in menu.children" :key="child.menuId"> <sub-menu
<sub-menu class="nest-menu" :menu="child" :isChild="true" /> class="nest-menu"
</template> v-for="child in menu.children"
:key="child.menuId"
:menu="child"
:isChild="true"
/>
</el-sub-menu> </el-sub-menu>
</div> </div>
</template> </template>
@@ -63,9 +67,9 @@ const getTextStyle = (isShow: boolean) => {
.nest-menu :deep(.el-menu-item span:first-child), .nest-menu :deep(.el-menu-item span:first-child),
.nest-menu :deep(.el-menu-item .menu-icon:first-child), .nest-menu :deep(.el-menu-item .menu-icon:first-child),
.nest-menu :deep(.el-submenu__title span:first-child) { .nest-menu :deep(.el-submenu__title span:first-child) {
padding-left: 8px !important; padding-left: 14px !important;
} }
.nest-menu :deep(.el-submenu__title .menu-icon:first-child) { .nest-menu :deep(.el-submenu__title .menu-icon:first-child) {
margin-left: 8px !important; margin-left: 14px !important;
} }
</style> </style>

View File

@@ -80,7 +80,11 @@ const showText = computed(() => {
? 'XXXXX 至 XXXXX' ? 'XXXXX 至 XXXXX'
: undefined; : undefined;
case SysCustomWidgetType.Switch: case SysCustomWidgetType.Switch:
return props.value ? '是' : '否'; if (typeof props.value === 'boolean') {
return props.value ? '是' : '否';
} else {
return props.value;
}
default: default:
return ''; return '';
} }

View File

@@ -11,6 +11,7 @@
:hasImageColumn="hasImageColumn" :hasImageColumn="hasImageColumn"
:size="layoutStore.defaultFormItemSize" :size="layoutStore.defaultFormItemSize"
:keep-source="rowEdit" :keep-source="rowEdit"
:tree-config="treeConfig"
:edit-config="{ :edit-config="{
trigger: 'manual', trigger: 'manual',
mode: 'row', mode: 'row',
@@ -80,9 +81,15 @@
>{{ getOperation(SysCustomWidgetOperationType.ADD).name || '新建' }}</el-button >{{ getOperation(SysCustomWidgetOperationType.ADD).name || '新建' }}</el-button
> >
</template> </template>
<vxe-column v-if="hasBatchOperation && !form().readOnly" type="checkbox" :width="50" /> <vxe-column v-if="hasBatchOperation && !form().readOnly" type="checkbox" :width="40" />
<vxe-column v-if="singleSelect" type="radio" align="center" :width="50" /> <vxe-column v-if="singleSelect" type="radio" align="center" :width="50" />
<vxe-column v-if="tableColumnList.length > 0" type="seq" title="序号" :width="50" /> <vxe-column
v-if="tableColumnList.length > 0"
type="seq"
title="序号"
:width="treeConfig != null ? 90 : 50"
:tree-node="treeConfig != null"
/>
<template v-for="tableColumn in tableColumnList" :key="tableColumn.column?.columnId"> <template v-for="tableColumn in tableColumnList" :key="tableColumn.column?.columnId">
<!-- Boolean类型字段 --> <!-- Boolean类型字段 -->
<vxe-column <vxe-column
@@ -232,6 +239,7 @@ const props = withDefaults(
onSelectChange?: (values: Array<ANY_OBJECT>) => void; onSelectChange?: (values: Array<ANY_OBJECT>) => void;
// 单选中改变 // 单选中改变
onRadioChange?: (value: ANY_OBJECT) => void; onRadioChange?: (value: ANY_OBJECT) => void;
treeConfig?: ANY_OBJECT;
}>(), }>(),
{ {
dataList: () => [], dataList: () => [],
@@ -241,6 +249,7 @@ const props = withDefaults(
multiSelect: false, multiSelect: false,
singleSelect: false, singleSelect: false,
operationList: () => [], operationList: () => [],
treeConfig: undefined,
}, },
); );

View File

@@ -242,6 +242,26 @@ const isDictWidget = computed(() => {
].indexOf(pps.widget.widgetType) !== -1 ].indexOf(pps.widget.widgetType) !== -1
); );
}); });
const getColumnDataType = computed(() => {
if (pps.widget == null || pps.widget.column == null) return undefined;
switch (pps.widget.column.objectFieldType) {
case 'String':
return 'String';
case 'Date':
return 'Date';
case 'Boolean':
return 'Boolean';
case 'Integer':
case 'Long':
case 'Float':
case 'Double':
case 'BigDecimal':
return 'Number';
default:
return undefined;
}
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const bindValue = computed<string | number | boolean | any[] | ANY_OBJECT | Date | undefined>({ const bindValue = computed<string | number | boolean | any[] | ANY_OBJECT | Date | undefined>({
get() { get() {
@@ -255,6 +275,18 @@ const bindValue = computed<string | number | boolean | any[] | ANY_OBJECT | Date
}); });
} }
} }
// 开关组件根据绑定字段类型转换值
let bindColumnType = getColumnDataType.value;
if (pps.widget.widgetType === SysCustomWidgetType.Switch) {
if (bindColumnType === 'Number') {
tempValue = tempValue !== 0 && tempValue != null;
} else if (bindColumnType === 'String') {
tempValue = tempValue === 'true';
} else if (bindColumnType !== 'Boolean') {
tempValue = false;
}
return tempValue;
}
if (pps.widget.widgetType === SysCustomWidgetType.CheckBox) { if (pps.widget.widgetType === SysCustomWidgetType.CheckBox) {
return tempValue || []; return tempValue || [];
} else if (pps.widget.widgetType === SysCustomWidgetType.Cascader) { } else if (pps.widget.widgetType === SysCustomWidgetType.Cascader) {
@@ -553,7 +585,6 @@ watch(
); );
onMounted(() => { onMounted(() => {
//propsWidget.value.widgetImpl = getCurrentInstance(); propsWidget.value.hasParent = parentWidget != null;
//propsWidget.value.parent = parentWidget;
}); });
</script> </script>

View File

@@ -86,7 +86,7 @@
<vxe-column title="流程创建时间" field="createTime" :min-width="180" /> <vxe-column title="流程创建时间" field="createTime" :min-width="180" />
<vxe-column title="流程状态" field="latestApprovalStatusDictMap.name" :min-width="100" /> <vxe-column title="流程状态" field="latestApprovalStatusDictMap.name" :min-width="100" />
<vxe-column title="工单状态" field="flowStatusShowName" :min-width="100" /> <vxe-column title="工单状态" field="flowStatusShowName" :min-width="100" />
<vxe-column title="操作" :width="160" fixed="right" :show-overflow="false"> <vxe-column title="操作" :width="180" fixed="right" :show-overflow="false">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button
link link

View File

@@ -7,7 +7,7 @@
</template> </template>
<el-input <el-input
v-if="inputWidgetType === SysCustomWidgetType.Input" v-if="inputWidgetType === SysCustomWidgetType.Input"
size="small" size="default"
style="width: 100%" style="width: 100%"
clearable clearable
v-model="valStr" v-model="valStr"
@@ -17,7 +17,7 @@
/> />
<el-row v-if="inputWidgetType === SysCustomWidgetType.NumberInput" type="flex"> <el-row v-if="inputWidgetType === SysCustomWidgetType.NumberInput" type="flex">
<el-input-number <el-input-number
size="small" size="default"
clearable clearable
style="width: 100%" style="width: 100%"
controls-position="right" controls-position="right"
@@ -30,7 +30,7 @@
/> />
</el-row> </el-row>
<el-row v-if="inputWidgetType === SysCustomWidgetType.Radio" type="flex" align="middle"> <el-row v-if="inputWidgetType === SysCustomWidgetType.Radio" type="flex" align="middle">
<el-radio-group size="small" v-model="valNum" v-bind="attributeProps" @change="onValueChange"> <el-radio-group size="default" v-model="valNum" v-bind="attributeProps" @change="onValueChange">
<el-radio-button <el-radio-button
v-for="item in dropdownData" v-for="item in dropdownData"
:key="item.id" :key="item.id"
@@ -42,7 +42,7 @@
<el-slider <el-slider
v-if="inputWidgetType === SysCustomWidgetType.Slider" v-if="inputWidgetType === SysCustomWidgetType.Slider"
style="width: 95%; margin-left: 5px" style="width: 95%; margin-left: 5px"
size="small" size="default"
:min="attributeItem.min" :min="attributeItem.min"
:max="attributeItem.max" :max="attributeItem.max"
v-model="valNum" v-model="valNum"
@@ -52,7 +52,7 @@
/> />
<el-row v-if="inputWidgetType === SysCustomWidgetType.Switch" type="flex" align="middle"> <el-row v-if="inputWidgetType === SysCustomWidgetType.Switch" type="flex" align="middle">
<el-select <el-select
size="small" size="default"
style="width: 100%" style="width: 100%"
v-model="valBool" v-model="valBool"
@input="onValueChange" @input="onValueChange"
@@ -68,7 +68,7 @@
v-if="inputWidgetType === SysCustomWidgetType.Select" v-if="inputWidgetType === SysCustomWidgetType.Select"
style="width: 100%" style="width: 100%"
clearable clearable
size="small" size="default"
v-model="valNum" v-model="valNum"
v-bind="attributeProps" v-bind="attributeProps"
@change="onValueChange" @change="onValueChange"
@@ -78,7 +78,7 @@
</el-select> </el-select>
<el-color-picker <el-color-picker
v-if="inputWidgetType === SysCustomWidgetType.ColorPicker" v-if="inputWidgetType === SysCustomWidgetType.ColorPicker"
size="small" size="default"
v-model="valStr" v-model="valStr"
@input="onValueChange" @input="onValueChange"
v-bind="attributeProps" v-bind="attributeProps"

View File

@@ -32,11 +32,47 @@ const table = {
value: 0, value: 0,
min: 0, min: 0,
}, },
treeFlag: {
name: '树形表格',
widgetType: SysCustomWidgetType.Switch,
visible: function (formConfig) {
return formConfig && formConfig.form.formType === SysOnlineFormType.QUERY;
},
},
parentIdColumn: {
name: '树形表主键父字段',
widgetType: SysCustomWidgetType.Select,
value: '',
visible: function (formConfig) {
return (
formConfig && formConfig.currentWidget && formConfig.currentWidget.props.treeFlag === true
);
},
dropdownList: function (formConfig) {
if (
formConfig &&
formConfig.currentWidget &&
formConfig.currentWidget.bindData &&
formConfig.currentWidget.bindData.table
) {
return formConfig.currentWidget.bindData.table.columnList.map(item => {
return {
id: item.columnName,
name: item.columnComment,
};
});
} else {
return [];
}
},
},
paged: { paged: {
name: '支持分页', name: '支持分页',
widgetType: SysCustomWidgetType.Switch, widgetType: SysCustomWidgetType.Switch,
value: true, value: true,
visible: function (formConfig: ANY_OBJECT) { visible: function (formConfig: ANY_OBJECT) {
if (formConfig && formConfig.currentWidget && formConfig.currentWidget.props.treeFlag)
return false;
return formConfig && formConfig.form.formType === SysOnlineFormType.QUERY; return formConfig && formConfig.form.formType === SysOnlineFormType.QUERY;
}, },
}, },
@@ -45,6 +81,8 @@ const table = {
widgetType: SysCustomWidgetType.Select, widgetType: SysCustomWidgetType.Select,
value: 10, value: 10,
visible: function (formConfig: ANY_OBJECT) { visible: function (formConfig: ANY_OBJECT) {
if (formConfig && formConfig.currentWidget && formConfig.currentWidget.props.treeFlag)
return false;
return formConfig && formConfig.form.formType === SysOnlineFormType.QUERY; return formConfig && formConfig.form.formType === SysOnlineFormType.QUERY;
}, },
dropdownList: [ dropdownList: [

View File

@@ -157,13 +157,14 @@
:getTableIndex="queryTableWidget.getTableIndex" :getTableIndex="queryTableWidget.getTableIndex"
:sortChange="queryTableWidget.onSortChange" :sortChange="queryTableWidget.onSortChange"
:onSelectChange="onSelectRowChange" :onSelectChange="onSelectRowChange"
:treeConfig="getTableTreeConfig"
@operationClick="onOperationClick" @operationClick="onOperationClick"
> >
<template #pagination> <template #pagination>
<el-row <el-row
justify="end" justify="end"
style="margin-top: 10px" style="margin-top: 10px"
v-if="queryTable && queryTable.props.paged" v-if="queryTable && queryTable.props.paged && getTableTreeConfig == null"
> >
<el-pagination <el-pagination
:total="queryTableWidget.totalCount" :total="queryTableWidget.totalCount"
@@ -261,6 +262,7 @@
:getTableIndex="queryTableWidget.getTableIndex" :getTableIndex="queryTableWidget.getTableIndex"
:sortChange="queryTableWidget.onSortChange" :sortChange="queryTableWidget.onSortChange"
:onSelectChange="onSelectRowChange" :onSelectChange="onSelectRowChange"
:treeConfig="getTableTreeConfig"
@operationClick="onOperationClick" @operationClick="onOperationClick"
@refresh="refreshTable(false)" @refresh="refreshTable(false)"
> >
@@ -268,7 +270,7 @@
<el-row <el-row
justify="end" justify="end"
style="margin-top: 10px" style="margin-top: 10px"
v-if="queryTable && queryTable.props.paged" v-if="queryTable && queryTable.props.paged && getTableTreeConfig == null"
> >
<el-pagination <el-pagination
:total="queryTableWidget.totalCount" :total="queryTableWidget.totalCount"
@@ -293,7 +295,7 @@
import { nextTick } from 'vue'; import { nextTick } from 'vue';
import { Close, Search, Plus, Delete, Download, Upload } from '@element-plus/icons-vue'; import { Close, Search, Plus, Delete, Download, Upload } from '@element-plus/icons-vue';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import { findItemFromList } from '@/common/utils'; import { findItemFromList, treeDataTranslate } from '@/common/utils';
import OnlineCustomWidget from '@/online/components/OnlineCustomWidget.vue'; import OnlineCustomWidget from '@/online/components/OnlineCustomWidget.vue';
import OnlineCustomTable from '@/online/components/OnlineCustomTable.vue'; import OnlineCustomTable from '@/online/components/OnlineCustomTable.vue';
import { DialogProp } from '@/components/Dialog/types'; import { DialogProp } from '@/components/Dialog/types';
@@ -504,6 +506,17 @@ const loadTableData = (params: ANY_OBJECT) => {
httpCall httpCall
.then(res => { .then(res => {
if (
queryTable.value &&
queryTable.value.props.treeFlag &&
queryTable.value.props.parentIdColumn
) {
res.data.dataList = treeDataTranslate(
res.data.dataList,
primaryColumnName.value,
queryTable.value.props.parentIdColumn,
);
}
resolve({ resolve({
dataList: res.data.dataList, dataList: res.data.dataList,
totalCount: res.data.totalCount, totalCount: res.data.totalCount,
@@ -537,6 +550,7 @@ const activeOperationList = computed(() => {
return form.value.operationList; return form.value.operationList;
}); });
const primaryColumnName = computed(() => { const primaryColumnName = computed(() => {
if (dialogParams.value.isEdit) return;
let table = form.value.tableMap.get(queryTable.value.bindData.tableId); let table = form.value.tableMap.get(queryTable.value.bindData.tableId);
if (table && Array.isArray(table.columnList)) { if (table && Array.isArray(table.columnList)) {
for (let i = 0; i < table.columnList.length; i++) { for (let i = 0; i < table.columnList.length; i++) {
@@ -549,14 +563,26 @@ const primaryColumnName = computed(() => {
return null; return null;
}); });
const getTableTreeConfig = computed(() => {
if (
queryTable.value &&
queryTable.value.props.treeFlag &&
queryTable.value.props.parentIdColumn
) {
return {
rowField: primaryColumnName.value,
parentField: queryTable.value.props.parentIdColumn,
};
} else {
return null;
}
});
// TODO 弹窗关闭 // TODO 弹窗关闭
const onCancel = () => { const onCancel = () => {
if (props.dialog) { if (props.dialog) {
props.dialog.cancel(); props.dialog.cancel();
} }
// else {
// this.onCloseThirdDialog();
// }
}; };
const onCopyWidget = (widget: ANY_OBJECT) => { const onCopyWidget = (widget: ANY_OBJECT) => {
activeWidgetList.value.push(widget); activeWidgetList.value.push(widget);

View File

@@ -118,7 +118,6 @@
v-show="isReady" v-show="isReady"
ref="root" ref="root"
v-model:value="form.widgetList" v-model:value="form.widgetList"
@input="onInput"
:height="height" :height="height"
:isEdit="dialogParams.isEdit" :isEdit="dialogParams.isEdit"
:showBorder="false" :showBorder="false"

View File

@@ -15,7 +15,7 @@
style="position: relative; width: 100%" style="position: relative; width: 100%"
:style="{ :style="{
border: isEdit && !isAdvance ? '1px solid #e8eaec' : 'none', border: isEdit && !isAdvance ? '1px solid #e8eaec' : 'none',
'min-height': isEdit && widgetList.length <= 0 ? '70px' : '0px', 'min-height': isEdit && widgetList.length <= 0 ? '86px' : '0px',
}" }"
:disabled="!isEdit" :disabled="!isEdit"
> >

View File

@@ -299,6 +299,7 @@ const activeOperationList = computed(() => {
// }; // };
// }); // });
const primaryColumnName = computed(() => { const primaryColumnName = computed(() => {
if (dialogParams.value.isEdit) return;
let table = form.value.tableMap.get(queryTable.value.bindData.tableId); let table = form.value.tableMap.get(queryTable.value.bindData.tableId);
if (table && Array.isArray(table.columnList)) { if (table && Array.isArray(table.columnList)) {
for (let i = 0; i < table.columnList.length; i++) { for (let i = 0; i < table.columnList.length; i++) {
@@ -496,7 +497,7 @@ const onOperationClick = (operation: ANY_OBJECT, row: ANY_OBJECT | null) => {
} else if (operation.type === SysCustomWidgetOperationType.EXPORT) { } else if (operation.type === SysCustomWidgetOperationType.EXPORT) {
onExport(operation); onExport(operation);
} else if (operation.type === SysCustomWidgetOperationType.PRINT) { } else if (operation.type === SysCustomWidgetOperationType.PRINT) {
if (row) onPrint(operation, row, null, queryTable.value.showName + '.pdf'); if (row) onPrint(operation, row, null, queryTable.value.showName);
} else { } else {
handlerOperation(operation, { handlerOperation(operation, {
isEdit: dialogParams.value.isEdit, isEdit: dialogParams.value.isEdit,

View File

@@ -15,7 +15,7 @@
style="position: relative; width: 100%" style="position: relative; width: 100%"
:style="{ :style="{
border: isEdit && !isAdvance ? '1px solid #e8eaec' : 'none', border: isEdit && !isAdvance ? '1px solid #e8eaec' : 'none',
'min-height': isEdit && widgetList.length <= 0 ? '70px' : '0px', 'min-height': isEdit && widgetList.length <= 0 ? '86px' : '0px',
}" }"
:disabled="!isEdit" :disabled="!isEdit"
> >

View File

@@ -69,6 +69,7 @@
:getTableIndex="queryTableWidget.getTableIndex" :getTableIndex="queryTableWidget.getTableIndex"
:sortChange="queryTableWidget.onSortChange" :sortChange="queryTableWidget.onSortChange"
:onSelectChange="onSelectRowChange" :onSelectChange="onSelectRowChange"
:treeConfig="getTableTreeConfig"
@refresh="refreshTable(false)" @refresh="refreshTable(false)"
@operationClick="onOperationClick" @operationClick="onOperationClick"
/> />
@@ -77,7 +78,7 @@
type="flex" type="flex"
justify="end" justify="end"
style="margin-top: 16px" style="margin-top: 16px"
v-if="queryTable && queryTable.props.paged" v-if="queryTable && queryTable.props.paged && getTableTreeConfig == null"
> >
<el-pagination <el-pagination
:total="queryTableWidget.totalCount" :total="queryTableWidget.totalCount"
@@ -126,6 +127,7 @@
:getTableIndex="queryTableWidget.getTableIndex" :getTableIndex="queryTableWidget.getTableIndex"
:sortChange="queryTableWidget.onSortChange" :sortChange="queryTableWidget.onSortChange"
:onSelectChange="onSelectRowChange" :onSelectChange="onSelectRowChange"
:treeConfig="getTableTreeConfig"
@operationClick="onOperationClick" @operationClick="onOperationClick"
@refresh="refreshTable(false)" @refresh="refreshTable(false)"
> >
@@ -134,7 +136,7 @@
type="flex" type="flex"
justify="end" justify="end"
style="margin-top: 16px" style="margin-top: 16px"
v-if="queryTable && queryTable.props.paged" v-if="queryTable && queryTable.props.paged && getTableTreeConfig == null"
> >
<el-pagination <el-pagination
:total="queryTableWidget.totalCount" :total="queryTableWidget.totalCount"
@@ -156,6 +158,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import { Close } from '@element-plus/icons-vue'; import { Close } from '@element-plus/icons-vue';
import { treeDataTranslate } from '@/common/utils';
import { ANY_OBJECT } from '@/types/generic'; import { ANY_OBJECT } from '@/types/generic';
import OnlineCustomTable from '@/online/components/OnlineCustomTable.vue'; import OnlineCustomTable from '@/online/components/OnlineCustomTable.vue';
import { TableOptions } from '@/common/types/pagination'; import { TableOptions } from '@/common/types/pagination';
@@ -354,6 +357,17 @@ const loadTableData = (params: ANY_OBJECT) => {
httpCall httpCall
.then((res: ANY_OBJECT) => { .then((res: ANY_OBJECT) => {
if (
queryTable.value &&
queryTable.value.props.treeFlag &&
queryTable.value.props.parentIdColumn
) {
res.data.dataList = treeDataTranslate(
res.data.dataList,
primaryColumnName.value,
queryTable.value.props.parentIdColumn,
);
}
resolve({ resolve({
dataList: res.data.dataList, dataList: res.data.dataList,
totalCount: res.data.totalCount, totalCount: res.data.totalCount,
@@ -395,6 +409,7 @@ const activeOperationList = computed(() => {
return form.value.operationList; return form.value.operationList;
}); });
const primaryColumnName = computed(() => { const primaryColumnName = computed(() => {
if (dialogParams.value.isEdit) return;
let table = form.value.tableMap.get(queryTable.value.bindData.tableId); let table = form.value.tableMap.get(queryTable.value.bindData.tableId);
if (table && Array.isArray(table.columnList)) { if (table && Array.isArray(table.columnList)) {
for (let i = 0; i < table.columnList.length; i++) { for (let i = 0; i < table.columnList.length; i++) {
@@ -406,6 +421,20 @@ const primaryColumnName = computed(() => {
} }
return null; return null;
}); });
const getTableTreeConfig = computed(() => {
if (
queryTable.value &&
queryTable.value.props.treeFlag &&
queryTable.value.props.parentIdColumn
) {
return {
rowField: primaryColumnName.value,
parentField: queryTable.value.props.parentIdColumn,
};
} else {
return null;
}
});
const onCopyWidget = (widget: ANY_OBJECT) => { const onCopyWidget = (widget: ANY_OBJECT) => {
activeWidgetList.value.push(widget); activeWidgetList.value.push(widget);
@@ -582,7 +611,7 @@ const onOperationClick = (operation: ANY_OBJECT, row: ANY_OBJECT | null) => {
} else if (operation.type === SysCustomWidgetOperationType.EXPORT) { } else if (operation.type === SysCustomWidgetOperationType.EXPORT) {
onExport(operation); onExport(operation);
} else if (operation.type === SysCustomWidgetOperationType.PRINT) { } else if (operation.type === SysCustomWidgetOperationType.PRINT) {
onPrint(operation, row, selectRows.value, queryTable.value.showName + '.pdf'); onPrint(operation, row, selectRows.value, queryTable.value.showName);
} else if (operation.type === SysCustomWidgetOperationType.START_FLOW) { } else if (operation.type === SysCustomWidgetOperationType.START_FLOW) {
console.log('启动流程'); console.log('启动流程');
onStartFlow(operation, row); onStartFlow(operation, row);

View File

@@ -112,7 +112,7 @@
> >
<div v-if="currentColumn != null" style="padding: 20px" class="attibute-box"> <div v-if="currentColumn != null" style="padding: 20px" class="attibute-box">
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="字段名"> <el-form-item label="字段名">
<span :title="currentColumn.columnComment">{{ currentColumn.columnName }}</span> <span :title="currentColumn.columnComment">{{ currentColumn.columnName }}</span>
<el-tag <el-tag
:size="formItemSize" :size="formItemSize"
@@ -124,7 +124,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="字段类型"> <el-form-item label="字段类型">
<span>{{ currentColumn.fullColumnType }}</span> <span>{{ currentColumn.fullColumnType }}</span>
<el-tag :size="formItemSize" type="success" effect="dark" style="margin-left: 10px">{{ <el-tag :size="formItemSize" type="success" effect="dark" style="margin-left: 10px">{{
currentColumn.tag.objectFieldType currentColumn.tag.objectFieldType
@@ -132,12 +132,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="是否必填"> <el-form-item label="是否必填">
<el-switch v-model="currentColumn.required" /> <el-switch v-model="currentColumn.required" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="显示名称"> <el-form-item label="显示名称">
<el-input <el-input
v-model="currentColumn.columnComment" v-model="currentColumn.columnComment"
style="width: 278px" style="width: 278px"
@@ -147,7 +147,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="字典数据"> <el-form-item label="字典数据">
<el-select <el-select
v-model="currentColumn.dictId" v-model="currentColumn.dictId"
placeholder="选择字段绑定的字典" placeholder="选择字段绑定的字典"
@@ -167,7 +167,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="过滤支持"> <el-form-item label="过滤支持">
<el-radio-group v-model="currentColumn.filterType" @change="dirty = true"> <el-radio-group v-model="currentColumn.filterType" @change="dirty = true">
<el-radio-button <el-radio-button
v-for="item in SysOnlineColumnFilterType.getList()" v-for="item in SysOnlineColumnFilterType.getList()"
@@ -184,7 +184,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="数据权限过滤"> <el-form-item label="数据权限过滤">
<el-select <el-select
v-model="dataPermFilterType" v-model="dataPermFilterType"
placeholder="字段用于数据权限过滤规则" placeholder="字段用于数据权限过滤规则"
@@ -202,7 +202,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="字段类别"> <el-form-item label="字段类别">
<el-select <el-select
v-model="currentColumn.fieldKind" v-model="currentColumn.fieldKind"
clearable clearable
@@ -227,7 +227,7 @@
currentColumn.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE currentColumn.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE
" "
> >
<el-form-item label="存储类型"> <el-form-item label="存储类型">
<el-select <el-select
v-model="currentColumn.uploadFileSystemType" v-model="currentColumn.uploadFileSystemType"
clearable clearable
@@ -247,7 +247,7 @@
currentColumn.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE currentColumn.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE
" "
> >
<el-form-item label="上传文件数量"> <el-form-item label="上传文件数量">
<el-input-number <el-input-number
v-model="currentColumn.maxFileCount" v-model="currentColumn.maxFileCount"
style="width: 278px" style="width: 278px"
@@ -778,7 +778,7 @@ onMounted(() => {
height: 35px; height: 35px;
padding: 0 10px; padding: 0 10px;
margin-bottom: 8px; margin-bottom: 8px;
font-size: 12px; font-size: 14px;
color: #043254; color: #043254;
background: #f4f7fa; background: #f4f7fa;
border: 1px dashed #f3f9ff; border: 1px dashed #f3f9ff;

View File

@@ -131,25 +131,13 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item">
<el-form-item label="结果字段类型" prop="objectFieldType">
<el-select
v-model="currentColumn.objectFieldType"
placeholder="结果字段类型"
@change="currentColumn.aggregationType = undefined"
>
<el-option
v-for="item in getVirtualColumnFieldType"
:key="item"
:value="item"
:label="item"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col class="attribute-item"> <el-col class="attribute-item">
<el-form-item label="聚合计算规则" prop="relationId"> <el-form-item label="聚合计算规则" prop="relationId">
<el-select v-model="currentColumn.aggregationType" placeholder="聚合字段计算规则"> <el-select
v-model="currentColumn.aggregationType"
placeholder="聚合字段计算规则"
@change="currentColumn.objectFieldType = undefined"
>
<el-option <el-option
v-for="item in getAggregationTypeList" v-for="item in getAggregationTypeList"
:key="item.id" :key="item.id"
@@ -159,6 +147,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col class="attribute-item">
<el-form-item label="结果字段类型" prop="objectFieldType">
<el-select v-model="currentColumn.objectFieldType" placeholder="结果字段类型">
<el-option
v-for="item in getVirtualColumnFieldType"
:key="item"
:value="item"
:label="item"
></el-option>
</el-select>
</el-form-item>
</el-col>
</div> </div>
</el-form> </el-form>
</div> </div>
@@ -306,6 +306,11 @@ const aggregationColumn = computed(() => {
}); });
const getVirtualColumnFieldType = computed(() => { const getVirtualColumnFieldType = computed(() => {
if (!aggregationColumn.value) return []; if (!aggregationColumn.value) return [];
if (
currentColumn.value &&
currentColumn.value.aggregationType === SysOnlineAggregationType.GROUP_CONCAT
)
return ['String'];
switch (aggregationColumn.value.objectFieldType) { switch (aggregationColumn.value.objectFieldType) {
case 'String': case 'String':
@@ -346,6 +351,8 @@ const getAggregationTypeList = computed(() => {
) !== -1 ) !== -1
); );
} }
case SysOnlineAggregationType.GROUP_CONCAT:
return true;
default: default:
return false; return false;
} }

View File

@@ -84,6 +84,8 @@ const buildAttributeList = () => {
attributeKey: attributeKey, attributeKey: attributeKey,
}, },
); );
temp.disabled =
typeof temp.disabled === 'function' ? temp.disabled(formConfig()) : temp.disabled;
if (temp.visible == null || temp.visible) attributeList.value.push(temp); if (temp.visible == null || temp.visible) attributeList.value.push(temp);
} }
}); });
@@ -94,18 +96,17 @@ const buildAttributeList = () => {
watch( watch(
() => currentWidget.value, () => currentWidget.value,
() => { () => {
console.log('CustomWidgetAttributeSetting.currentWidget change');
buildAttributeList(); buildAttributeList();
}, },
{ {
immediate: true, immediate: true,
deep: true,
}, },
); );
watch( watch(
() => props.widget, () => props.widget,
() => { () => {
console.log('CustomWidgetAttributeSetting.widget change');
buildAttributeList(); buildAttributeList();
}, },
{ {

View File

@@ -183,7 +183,7 @@ const formType = computed(() => {
return formConfig().form.formType; return formConfig().form.formType;
}); });
const getValidTableList = computed(() => { const getValidTableList = computed(() => {
if (data.value.parent != null) { if (data.value.hasParent) {
return formConfig().getTableWidgetTableList; return formConfig().getTableWidgetTableList;
} else if ( } else if (
data.value.widgetType === SysCustomWidgetType.Table || data.value.widgetType === SysCustomWidgetType.Table ||

View File

@@ -12,7 +12,7 @@
label-position="right" label-position="right"
@submit.prevent @submit.prevent
> >
<el-form-item label="字段名"> <el-form-item label="字段名">
<span :title="formData.columnComment">{{ formData.columnName }}</span> <span :title="formData.columnComment">{{ formData.columnName }}</span>
<el-tag <el-tag
:size="formItemSize" :size="formItemSize"
@@ -22,16 +22,16 @@
>主键</el-tag >主键</el-tag
> >
</el-form-item> </el-form-item>
<el-form-item label="字段类型"> <el-form-item label="字段类型">
<span>{{ formData.fullColumnType }}</span> <span>{{ formData.fullColumnType }}</span>
<el-tag :size="formItemSize" type="success" effect="dark" style="margin-left: 10px">{{ <el-tag :size="formItemSize" type="success" effect="dark" style="margin-left: 10px">{{
formData.objectFieldType formData.objectFieldType
}}</el-tag> }}</el-tag>
</el-form-item> </el-form-item>
<el-form-item label="是否必填"> <el-form-item label="是否必填">
<el-switch v-model="formData.required" /> <el-switch v-model="formData.required" />
</el-form-item> </el-form-item>
<el-form-item label="显示名称"> <el-form-item label="显示名称">
<el-input <el-input
v-model="formData.columnComment" v-model="formData.columnComment"
style="width: 100%" style="width: 100%"
@@ -39,7 +39,7 @@
placeholder="字段在表单上的显示名称" placeholder="字段在表单上的显示名称"
/> />
</el-form-item> </el-form-item>
<el-form-item label="字典数据"> <el-form-item label="字典数据">
<el-select <el-select
v-model="formData.dictId" v-model="formData.dictId"
placeholder="选择字段绑定的字典" placeholder="选择字段绑定的字典"
@@ -57,7 +57,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="过滤支持"> <el-form-item label="过滤支持">
<el-radio-group v-model="formData.filterType" @change="dirty = true"> <el-radio-group v-model="formData.filterType" @change="dirty = true">
<el-radio-button <el-radio-button
v-for="item in SysOnlineColumnFilterType.getList()" v-for="item in SysOnlineColumnFilterType.getList()"
@@ -72,7 +72,7 @@
</el-radio-button> </el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="字段类别"> <el-form-item label="字段类别">
<el-select <el-select
v-model="formData.fieldKind" v-model="formData.fieldKind"
clearable clearable
@@ -94,7 +94,7 @@
formData.fieldKind === SysOnlineFieldKind.UPLOAD || formData.fieldKind === SysOnlineFieldKind.UPLOAD ||
formData.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE formData.fieldKind === SysOnlineFieldKind.UPLOAD_IMAGE
" "
label="存储类型" label="存储类型"
> >
<el-select <el-select
v-model="formData.uploadFileSystemType" v-model="formData.uploadFileSystemType"

View File

@@ -275,7 +275,7 @@
link link
size="default" size="default"
:icon="Refresh" :icon="Refresh"
style="font-size: 12px; color: #999; font-weight: normal" style="font-size: 14px; color: #999; font-weight: normal"
@click="onClearWidget" @click="onClearWidget"
>重置表单</el-button >重置表单</el-button
> >
@@ -362,7 +362,7 @@
<span>属性</span> <span>属性</span>
</template> </template>
<el-scrollbar :style="{ height: getClientHeight - 138 + 'px' }"> <el-scrollbar :style="{ height: getClientHeight - 138 + 'px' }">
<el-row style="padding: 10px 16px"> <el-row style="padding: 16px">
<template v-if="currentWidget != null"> <template v-if="currentWidget != null">
<CustomWidgetBindData v-model:value="currentWidget" /> <CustomWidgetBindData v-model:value="currentWidget" />
<CustomWidgetAttributeSetting <CustomWidgetAttributeSetting
@@ -381,7 +381,7 @@
<span>操作</span> <span>操作</span>
</template> </template>
<el-scrollbar :style="{ height: getClientHeight - 138 + 'px' }"> <el-scrollbar :style="{ height: getClientHeight - 138 + 'px' }">
<el-row style="width: 100%; padding: 10px 16px"> <el-row style="width: 100%; padding: 16px">
<!-- 组件操作 --> <!-- 组件操作 -->
<CustomFormOperateSetting <CustomFormOperateSetting
v-if=" v-if="
@@ -1105,7 +1105,7 @@ defineExpose({
span { span {
overflow: hidden; overflow: hidden;
max-width: 100px; max-width: 100px;
font-size: 12px; font-size: 14px;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
color: #333; color: #333;
@@ -1115,7 +1115,7 @@ defineExpose({
.tag { .tag {
padding: 3px 8px; padding: 3px 8px;
margin-left: 8px; margin-left: 8px;
font-size: 12px; font-size: 14px;
color: #999; color: #999;
background: #f6f7f9; background: #f6f7f9;
border-radius: 4px; border-radius: 4px;
@@ -1299,7 +1299,7 @@ defineExpose({
} }
.attribute-panel :deep(.el-form-item__label) { .attribute-panel :deep(.el-form-item__label) {
padding-right: 0; padding-right: 0;
font-size: 12px; font-size: 14px;
color: #666; color: #666;
} }
.attribute-panel :deep(.el-tabs__nav-wrap::after) { .attribute-panel :deep(.el-tabs__nav-wrap::after) {

View File

@@ -9,7 +9,7 @@
> >
<template v-slot:table> <template v-slot:table>
<table-box <table-box
class="page-table" style="padding-bottom: 16px"
:data="onlineDblinkWidget.dataList" :data="onlineDblinkWidget.dataList"
:size="layoutStore.defaultFormItemSize" :size="layoutStore.defaultFormItemSize"
header-cell-class-name="table-header-gray" header-cell-class-name="table-header-gray"

View File

@@ -5,7 +5,7 @@
:model="formData" :model="formData"
class="full-width-input form-box" class="full-width-input form-box"
style="width: 100%" style="width: 100%"
label-width="150px" label-width="90px"
:size="layoutStore.defaultFormItemSize" :size="layoutStore.defaultFormItemSize"
label-position="right" label-position="right"
@submit.prevent @submit.prevent

View File

@@ -36,9 +36,9 @@ import { ANY_OBJECT } from '@/types/generic';
import ProcessDesigner from '../package/process-designer/ProcessDesigner.vue'; import ProcessDesigner from '../package/process-designer/ProcessDesigner.vue';
import PropertiesPanel from '../package/refactor/PropertiesPanel.vue'; import PropertiesPanel from '../package/refactor/PropertiesPanel.vue';
// 自定义元素选中时的弹出菜单(修改 默认任务 为 用户任务) // 自定义元素选中时的弹出菜单(修改 默认任务 为 用户任务)
import CustomContentPadProvider from '../package/process-designer/plugins/content-pad'; import CustomContentPadProvider from '../package/process-designer/plugins/content-pad/index.js';
// 自定义左侧菜单(修改 默认任务 为 用户任务) // 自定义左侧菜单(修改 默认任务 为 用户任务)
import CustomPaletteProvider from '../package/process-designer/plugins/palette'; import CustomPaletteProvider from '../package/process-designer/plugins/palette/index.js';
// Then register the languages you need // Then register the languages you need
//hljs.registerLanguage('javascript', javascript); //hljs.registerLanguage('javascript', javascript);

View File

@@ -20,10 +20,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { ANY_OBJECT } from '@/types/generic'; import { ANY_OBJECT } from '@/types/generic';
import { useLayoutStore } from '@/store';
const emit = defineEmits<{ 'update:value': ANY_OBJECT[] | string[] }>(); const emit = defineEmits<{ 'update:value': ANY_OBJECT[] | string[] }>();
const props = defineProps<{ value: string | Array<ANY_OBJECT> }>(); const props = defineProps<{ value: string | Array<ANY_OBJECT> }>();
import { useLayoutStore } from '@/store';
const layoutStore = useLayoutStore(); const layoutStore = useLayoutStore();
const selectValues = ref<ANY_OBJECT[]>([]); const selectValues = ref<ANY_OBJECT[]>([]);

View File

@@ -3,7 +3,7 @@
<slot /> <slot />
<div class="tag-box" v-if="selectValues.length"> <div class="tag-box" v-if="selectValues.length">
<el-tag <el-tag
:size="layoutStore.defaultFormItemSize" size="large"
effect="dark" effect="dark"
v-for="item in selectValues" v-for="item in selectValues"
:key="item.id" :key="item.id"
@@ -80,7 +80,6 @@ watch(
<style lang="scss" scoped> <style lang="scss" scoped>
.task-multiple-select { .task-multiple-select {
:deep(.el-tag) { :deep(.el-tag) {
padding-right: 4px;
margin-right: 8px; margin-right: 8px;
color: #666; color: #666;
background-color: #f6f6f6; background-color: #f6f6f6;

View File

@@ -96,187 +96,189 @@
label-width="80px" label-width="80px"
@submit.prevent @submit.prevent
> >
<el-col :span="24"> <el-row :gutter="16">
<el-form-item label="表单类型" prop="bindFormType"> <el-col :span="24">
<el-select <el-form-item label="表单类型" prop="bindFormType">
v-model="formFlowEntryData.bindFormType"
placeholder=""
@change="onBindFormTypeChange"
:disabled="isEdit"
>
<el-option
:label="
SysFlowEntryBindFormType.getValue(SysFlowEntryBindFormType.ROUTER_FORM)
"
:value="SysFlowEntryBindFormType.ROUTER_FORM"
/>
<el-option
:label="
SysFlowEntryBindFormType.getValue(SysFlowEntryBindFormType.ONLINE_FORM)
"
:value="SysFlowEntryBindFormType.ONLINE_FORM"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="流程名称" prop="processDefinitionName">
<el-input v-model="formFlowEntryData.processDefinitionName" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="流程标识" prop="processDefinitionKey">
<el-input v-model="formFlowEntryData.processDefinitionKey" :disabled="isEdit" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="流程分类" prop="categoryId">
<el-select
v-model="formFlowEntryData.categoryId"
placeholder=""
:loading="categoryIdWidget.loading"
@visible-change="categoryIdWidget.onVisibleChange"
>
<el-option
v-for="item in categoryIdWidget.dropdownList"
:key="item.id"
:value="item.id"
:label="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="工单编码">
<el-row type="flex" align="middle" style="flex-wrap: nowrap">
<el-input
v-model="formFlowEntryData.encodedRule.prefix"
style="width: 150px"
placeholder="前缀"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView"
>
<template v-slot:prepend>
<el-checkbox v-model="formFlowEntryData.encodedRule.calculateWhenView" />
</template>
</el-input>
<el-select <el-select
v-model="formFlowEntryData.encodedRule.precisionTo" v-model="formFlowEntryData.bindFormType"
style="width: 160px; margin-left: 5px" placeholder=""
placeholder="日期精度" @change="onBindFormTypeChange"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView" :disabled="isEdit"
> >
<el-option <el-option
v-for="item in SysAutoCodeType.getList()" :label="
:key="item.id" SysFlowEntryBindFormType.getValue(SysFlowEntryBindFormType.ROUTER_FORM)
:label="item.name" "
:value="item.id" :value="SysFlowEntryBindFormType.ROUTER_FORM"
/>
<el-option
:label="
SysFlowEntryBindFormType.getValue(SysFlowEntryBindFormType.ONLINE_FORM)
"
:value="SysFlowEntryBindFormType.ONLINE_FORM"
/> />
</el-select> </el-select>
<el-input </el-form-item>
v-model="formFlowEntryData.encodedRule.middle" </el-col>
style="width: 80px; margin-left: 5px" <el-col :span="24">
placeholder="后缀" <el-form-item label="流程名称" prop="processDefinitionName">
:disabled="!formFlowEntryData.encodedRule.calculateWhenView" <el-input v-model="formFlowEntryData.processDefinitionName" />
/> </el-form-item>
<el-input-number </el-col>
v-model="formFlowEntryData.encodedRule.idWidth" <el-col :span="24">
style="width: 100px; margin-left: 5px" <el-form-item label="流程标识" prop="processDefinitionKey">
:controls="false" <el-input v-model="formFlowEntryData.processDefinitionKey" :disabled="isEdit" />
placeholder="序号宽度" </el-form-item>
:disabled="!formFlowEntryData.encodedRule.calculateWhenView" </el-col>
/> <el-col :span="24">
</el-row> <el-form-item label="流程分类" prop="categoryId">
</el-form-item> <el-select
</el-col> v-model="formFlowEntryData.categoryId"
<el-col placeholder=""
:span="24" :loading="categoryIdWidget.loading"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ONLINE_FORM" @visible-change="categoryIdWidget.onVisibleChange"
>
<el-form-item label="流程页面" prop="pageId">
<el-select
v-model="formFlowEntryData.pageId"
:disabled="isEdit"
placeholder=""
:loading="pageIdWidget.loading"
@visible-change="pageIdWidget.onVisibleChange"
@change="onEntryPageChange"
>
<el-option
v-for="item in pageIdWidget.dropdownList"
:key="item.pageId"
:value="item.pageId"
:label="item.pageName"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="24"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ONLINE_FORM"
>
<el-form-item label="默认表单" prop="defaultFormId">
<el-select
v-model="formFlowEntryData.defaultFormId"
placeholder=""
:loading="defaultFormIdWidget.loading"
@visible-change="defaultFormIdWidget.onVisibleChange"
>
<el-option
v-for="item in defaultFormIdWidget.dropdownList"
:key="item.formId"
:value="item.formId"
:label="item.formName"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="24"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ROUTER_FORM"
>
<el-form-item label="默认表单" prop="defaultRouterName">
<el-input
v-model="formFlowEntryData.defaultRouterName"
clearable
placeholder="请填写路由名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="通知类型">
<el-select
v-model="formFlowEntryData.notifyTypes"
placeholder=""
clearable
multiple
>
<el-option label="邮件" value="email" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="级联删除业务数据" label-width="128px">
<el-switch v-model="formFlowEntryData.cascadeDeleteBusinessData" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="isEdit && shareFormList.length > 0">
<el-form-item label="工单分享">
<el-row type="flex">
<el-button
v-for="form in (defaultFormIdWidget.dropdownList || []).filter(
item => item.formType === SysOnlineFormType.WORK_ORDER,
)"
:key="form.formId"
:class="form.formCode"
:data-clipboard-text="getFormShareInfo(form)"
title="生成分享链接"
@click="handleShare(form.formCode)"
> >
{{ form.formName }} <el-option
</el-button> v-for="item in categoryIdWidget.dropdownList"
</el-row> :key="item.id"
</el-form-item> :value="item.id"
</el-col> :label="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="工单编码">
<el-row type="flex" align="middle" style="flex-wrap: nowrap">
<el-input
v-model="formFlowEntryData.encodedRule.prefix"
style="width: 150px"
placeholder="前缀"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView"
>
<template v-slot:prepend>
<el-checkbox v-model="formFlowEntryData.encodedRule.calculateWhenView" />
</template>
</el-input>
<el-select
v-model="formFlowEntryData.encodedRule.precisionTo"
style="width: 160px; margin-left: 5px"
placeholder="日期精度"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView"
>
<el-option
v-for="item in SysAutoCodeType.getList()"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-input
v-model="formFlowEntryData.encodedRule.middle"
style="width: 80px; margin-left: 5px"
placeholder="后缀"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView"
/>
<el-input-number
v-model="formFlowEntryData.encodedRule.idWidth"
style="width: 100px; margin-left: 5px"
:controls="false"
placeholder="序号宽度"
:disabled="!formFlowEntryData.encodedRule.calculateWhenView"
/>
</el-row>
</el-form-item>
</el-col>
<el-col
:span="24"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ONLINE_FORM"
>
<el-form-item label="流程页面" prop="pageId">
<el-select
v-model="formFlowEntryData.pageId"
:disabled="isEdit"
placeholder=""
:loading="pageIdWidget.loading"
@visible-change="pageIdWidget.onVisibleChange"
@change="onEntryPageChange"
>
<el-option
v-for="item in pageIdWidget.dropdownList"
:key="item.pageId"
:value="item.pageId"
:label="item.pageName"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="24"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ONLINE_FORM"
>
<el-form-item label="默认表单" prop="defaultFormId">
<el-select
v-model="formFlowEntryData.defaultFormId"
placeholder=""
:loading="defaultFormIdWidget.loading"
@visible-change="defaultFormIdWidget.onVisibleChange"
>
<el-option
v-for="item in defaultFormIdWidget.dropdownList"
:key="item.formId"
:value="item.formId"
:label="item.formName"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="24"
v-if="formFlowEntryData.bindFormType === SysFlowEntryBindFormType.ROUTER_FORM"
>
<el-form-item label="默认表单" prop="defaultRouterName">
<el-input
v-model="formFlowEntryData.defaultRouterName"
clearable
placeholder="请填写路由名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="通知类型">
<el-select
v-model="formFlowEntryData.notifyTypes"
placeholder=""
clearable
multiple
>
<el-option label="邮件" value="email" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="级联删除业务数据" label-width="128px">
<el-switch v-model="formFlowEntryData.cascadeDeleteBusinessData" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="isEdit && shareFormList.length > 0">
<el-form-item label="工单分享">
<el-row type="flex">
<el-button
v-for="form in (defaultFormIdWidget.dropdownList || []).filter(
item => item.formType === SysOnlineFormType.WORK_ORDER,
)"
:key="form.formId"
:class="form.formCode"
:data-clipboard-text="getFormShareInfo(form)"
title="生成分享链接"
@click="handleShare(form.formCode)"
>
{{ form.formName }}
</el-button>
</el-row>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
</el-col> </el-col>
<!-- 流程变量设置 --> <!-- 流程变量设置 -->
@@ -313,9 +315,9 @@
<el-tag <el-tag
:size="formItemSize" :size="formItemSize"
effect="dark" effect="dark"
:type="scope.row.builtIn ? 'success' : 'danger'" :type="scope.row.builtin ? 'success' : 'danger'"
> >
{{ scope.row.builtIn ? '是' : '否' }} {{ scope.row.builtin ? '是' : '否' }}
</el-tag> </el-tag>
</template> </template>
</vxe-column> </vxe-column>

View File

@@ -109,7 +109,7 @@
</el-tag> </el-tag>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="流程主版本" field="mainFlowEntryPublish"> <vxe-column title="流程主版本" field="mainFlowEntryPublish" width="200px">
<template v-slot="scope"> <template v-slot="scope">
<el-tag <el-tag
v-if="scope.row.mainFlowEntryPublish" v-if="scope.row.mainFlowEntryPublish"

View File

@@ -58,7 +58,7 @@
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="发布时间" field="publishTime" min-width="150px" /> <vxe-column title="发布时间" field="publishTime" min-width="150px" />
<vxe-column title="操作" fixed="right" width="200px"> <vxe-column title="操作" fixed="right" width="220px">
<template v-slot="scope"> <template v-slot="scope">
<el-button <el-button
@click.stop="onSetActiveStatus(scope.row)" @click.stop="onSetActiveStatus(scope.row)"
@@ -83,7 +83,7 @@
link link
:size="formItemSize" :size="formItemSize"
> >
设置主版本 设置主版本
</el-button> </el-button>
</template> </template>
</vxe-column> </vxe-column>

View File

@@ -18,6 +18,11 @@ export const useFlowAction = (props: IProp) => {
const dialogParams = computed(() => { const dialogParams = computed(() => {
console.log('dialogParams props', props); console.log('dialogParams props', props);
let operationList =
props.operationList == null || props.operationList === ''
? thirdParams.value.operationList
: props.operationList;
operationList = typeof operationList == 'string' ? JSON.parse(operationList) : operationList;
return { return {
isRuntime: props.isRuntime === 'true' || thirdParams.value.isRuntime || false, isRuntime: props.isRuntime === 'true' || thirdParams.value.isRuntime || false,
isDraft: props.isDraft === 'true' || thirdParams.value.isDraft || false, isDraft: props.isDraft === 'true' || thirdParams.value.isDraft || false,
@@ -34,16 +39,14 @@ export const useFlowAction = (props: IProp) => {
processInstanceInitiator: processInstanceInitiator:
props.processInstanceInitiator || thirdParams.value.processInstanceInitiator, props.processInstanceInitiator || thirdParams.value.processInstanceInitiator,
taskName: props.taskName || thirdParams.value.taskName, taskName: props.taskName || thirdParams.value.taskName,
operationList: operationList: operationList,
typeof props.operationList == 'string'
? JSON.parse(props.operationList)
: props.operationList, // || thirdParams.value.operationList,
variableList: variableList:
typeof props.variableList == 'string' typeof props.variableList == 'string'
? JSON.parse(props.variableList) ? JSON.parse(props.variableList)
: props.variableList || thirdParams.value.variableList, : props.variableList || thirdParams.value.variableList,
}; };
}); });
// 加签
const submitConsign = ( const submitConsign = (
assignee: Array<string> | string, assignee: Array<string> | string,
isAdd = true, isAdd = true,

View File

@@ -13,7 +13,7 @@ export interface IProp extends ThirdProps {
// 路由名称 // 路由名称
routerName?: string; routerName?: string;
// 只读页面 // 只读页面
readOnly: boolean | string; readOnly?: boolean | string;
// 消息id用于抄送消息回显 // 消息id用于抄送消息回显
messageId?: string; messageId?: string;
// 流程实例id // 流程实例id

View File

@@ -50,7 +50,7 @@
</div> </div>
<div v-if="conditionFormVisible" key="status"> <div v-if="conditionFormVisible" key="status">
<div class="panel-title">更新工单状态</div> <div class="panel-title">工单状态</div>
<SetApproveStatus :id="elementId" :type="elementType" /> <SetApproveStatus :id="elementId" :type="elementType" />
</div> </div>
</div> </div>
@@ -295,7 +295,7 @@ onBeforeUnmount(() => {
} }
} }
.el-tabs__header { .el-tabs__header {
margin-bottom: 10px !important; margin-bottom: 15px !important;
} }
.el-tabs__content { .el-tabs__content {
overflow: auto; overflow: auto;
@@ -326,7 +326,7 @@ onBeforeUnmount(() => {
} }
.el-form-item__label { .el-form-item__label {
font-size: 12px; font-size: 14px;
color: #333; color: #333;
} }
@@ -338,7 +338,7 @@ onBeforeUnmount(() => {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-size: 12px; font-size: 14px;
color: #333; color: #333;
line-height: 32px; line-height: 32px;
} }
@@ -350,7 +350,7 @@ onBeforeUnmount(() => {
margin-top: 0; margin-top: 0;
} }
.el-table th { .el-table th {
font-size: 12px; font-size: 14px;
color: #666 !important; color: #666 !important;
background-color: #f6f7f9 !important; background-color: #f6f7f9 !important;
font-weight: normal; font-weight: normal;

View File

@@ -1,6 +1,9 @@
<template> <template>
<div> <div>
<el-form :size="layoutStore.defaultFormItemSize" @submit.prevent label-position="top"> <el-form :size="layoutStore.defaultFormItemSize" @submit.prevent label-position="top">
<el-form-item label="流程名称">
<el-input :value="flowEntry().value.processDefinitionName" :disabled="true" />
</el-form-item>
<el-form-item label="任务ID"> <el-form-item label="任务ID">
<el-input <el-input
v-model="elementBaseInfo.id" v-model="elementBaseInfo.id"
@@ -34,14 +37,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onBeforeUnmount, watch, nextTick, inject } from 'vue'; import { ref, onBeforeUnmount, watch, nextTick, inject } from 'vue';
import { ANY_OBJECT } from '@/types/generic'; import { ANY_OBJECT } from '@/types/generic';
import { useLayoutStore } from '@/store';
const layoutStore = useLayoutStore();
const props = withDefaults( const props = withDefaults(
defineProps<{ businessObject: ANY_OBJECT; type?: string; idEditDisabled?: boolean }>(), defineProps<{ businessObject: ANY_OBJECT; type?: string; idEditDisabled?: boolean }>(),
{ idEditDisabled: true }, { idEditDisabled: true },
); );
import { useLayoutStore } from '@/store'; const flowEntry = inject('flowEntry', () => {
const layoutStore = useLayoutStore(); return {} as ANY_OBJECT;
});
const elementBaseInfo = ref<ANY_OBJECT>({}); const elementBaseInfo = ref<ANY_OBJECT>({});
let bpmnElement: ANY_OBJECT | null = null; let bpmnElement: ANY_OBJECT | null = null;

View File

@@ -56,7 +56,7 @@
<span>表单权限设置</span> <span>表单权限设置</span>
<el-button <el-button
type="primary" type="primary"
size="mini" size="default"
style="margin-left: 18px" style="margin-left: 18px"
@click="onSetOnlineFormAuth" @click="onSetOnlineFormAuth"
>设置</el-button >设置</el-button
@@ -79,7 +79,7 @@
<vxe-column title="序号" width="70px" type="seq" /> <vxe-column title="序号" width="70px" type="seq" />
<vxe-column title="按钮名称" min-width="100px"> <vxe-column title="按钮名称" min-width="100px">
<template v-slot="scope"> <template v-slot="scope">
<span style="font-size: 12px">{{ scope.row.label }}</span> <span>{{ scope.row.label }}</span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="按钮类型" min-width="100px"> <vxe-column title="按钮类型" min-width="100px">
@@ -138,15 +138,11 @@ const layoutStore = useLayoutStore();
const props = defineProps<{ id: string; type: string; tabType: string }>(); const props = defineProps<{ id: string; type: string; tabType: string }>();
const flowEntry = inject('flowEntry', () => { const flowEntry = inject('flowEntry', () => {
console.warn('flowFormConfig not inject flowEntry yet.');
return {} as ANY_OBJECT; return {} as ANY_OBJECT;
}); });
console.log('flowEntry()', flowEntry());
const formList = inject('formList', () => { const formList = inject('formList', () => {
console.warn('flowFormConfig not inject formList yet.');
return {} as ANY_OBJECT; return {} as ANY_OBJECT;
}); });
console.log('formList()', formList());
const prefix = inject('prefix'); const prefix = inject('prefix');
const win: ANY_OBJECT = window; const win: ANY_OBJECT = window;
@@ -249,6 +245,12 @@ const onSetOnlineFormAuth = () => {
{ {
formAuth: formData.value.formAuth || {}, formAuth: formData.value.formAuth || {},
formWidgetConfig: tempConfig, formWidgetConfig: tempConfig,
path: 'thirdSetOnlineFormAuth',
},
{
width: '1000px',
height: '700px',
pathName: '/thirdParty/formSetOnlineFormAuth',
}, },
) )
.then(res => { .then(res => {

View File

@@ -41,7 +41,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="更新工单状态"> <el-form-item label="工单状态">
<el-select <el-select
class="input-item" class="input-item"
v-model="formData.latestApprovalStatus" v-model="formData.latestApprovalStatus"

View File

@@ -18,7 +18,7 @@
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
v-model="scope.row.disabled" v-model="scope.row.disabled"
size="mini" size="default"
@change="val => onWidgetDisableChange(scope.row, val)" @change="val => onWidgetDisableChange(scope.row, val)"
/> />
</template> </template>
@@ -27,7 +27,7 @@
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
v-model="scope.row.hidden" v-model="scope.row.hidden"
size="mini" size="default"
@change="val => onWidgetHideChange(scope.row, val)" @change="val => onWidgetHideChange(scope.row, val)"
/> />
</template> </template>

View File

@@ -13,7 +13,7 @@
{{ listenerTypeObject[scope.row.listenerType] }} {{ listenerTypeObject[scope.row.listenerType] }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="操作" width="90px"> <vxe-column title="操作" width="110px">
<template v-slot="{ row, $rowIndex }"> <template v-slot="{ row, $rowIndex }">
<el-button <el-button
:size="layoutStore.defaultFormItemSize" :size="layoutStore.defaultFormItemSize"
@@ -298,10 +298,10 @@ import { ElMessageBox } from 'element-plus';
import { Menu } from '@element-plus/icons-vue'; import { Menu } from '@element-plus/icons-vue';
import { VxeTable, VxeColumn, SizeType } from 'vxe-table'; import { VxeTable, VxeColumn, SizeType } from 'vxe-table';
import { ANY_OBJECT } from '@/types/generic'; import { ANY_OBJECT } from '@/types/generic';
import { useLayoutStore } from '@/store';
import { createListenerObject, updateElementExtensions } from '../../utils'; import { createListenerObject, updateElementExtensions } from '../../utils';
import { initListenerType, initListenerForm, listenerType, fieldType } from './utilSelf'; import { initListenerType, initListenerForm, listenerType, fieldType } from './utilSelf';
import { useLayoutStore } from '@/store';
const layoutStore = useLayoutStore(); const layoutStore = useLayoutStore();
const props = defineProps<{ id: string; type: string }>(); const props = defineProps<{ id: string; type: string }>();

View File

@@ -12,13 +12,12 @@
{{ listenerEventTypeObject[scope.row.event] }} {{ listenerEventTypeObject[scope.row.event] }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="监听器ID" min-width="80px" field="id" show-overflow-tooltip />
<vxe-column title="监听器类型" min-width="80px" show-overflow-tooltip> <vxe-column title="监听器类型" min-width="80px" show-overflow-tooltip>
<template v-slot="scope"> <template v-slot="scope">
{{ listenerTypeObject[scope.row.listenerType] }} {{ listenerTypeObject[scope.row.listenerType] }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column title="操作" width="90px"> <vxe-column title="操作" width="110px">
<template v-slot="{ row, $rowIndex }"> <template v-slot="{ row, $rowIndex }">
<el-button <el-button
:size="layoutStore.defaultFormItemSize" :size="layoutStore.defaultFormItemSize"
@@ -332,10 +331,10 @@ import { ElMessageBox } from 'element-plus';
import { Menu } from '@element-plus/icons-vue'; import { Menu } from '@element-plus/icons-vue';
import { VxeTable, VxeColumn } from 'vxe-table'; import { VxeTable, VxeColumn } from 'vxe-table';
import { ANY_OBJECT } from '@/types/generic'; import { ANY_OBJECT } from '@/types/generic';
import { useLayoutStore } from '@/store';
import { createListenerObject, updateElementExtensions } from '../../utils'; import { createListenerObject, updateElementExtensions } from '../../utils';
import { initListenerType, initListenerForm, eventType, listenerType, fieldType } from './utilSelf'; import { initListenerType, initListenerForm, eventType, listenerType, fieldType } from './utilSelf';
import { useLayoutStore } from '@/store';
const layoutStore = useLayoutStore(); const layoutStore = useLayoutStore();
const props = defineProps<{ id: string; type: string }>(); const props = defineProps<{ id: string; type: string }>();

View File

@@ -62,8 +62,8 @@
<el-form-item label="完成条件" key="completionCondition"> <el-form-item label="完成条件" key="completionCondition">
<el-input <el-input
v-model="loopInstanceForm.completionCondition" v-model="loopInstanceForm.completionCondition"
clearable
:disabled="loopCharacteristics === 'SequentialMultiInstance'" :disabled="loopCharacteristics === 'SequentialMultiInstance'"
clearable
@change="updateLoopCondition" @change="updateLoopCondition"
/> />
</el-form-item> </el-form-item>
@@ -170,7 +170,7 @@ const defaultLoopInstanceForm = {
const loopInstanceForm = ref<ANY_OBJECT>({ const loopInstanceForm = ref<ANY_OBJECT>({
collection: 'assigneeList', collection: 'assigneeList',
elementVariable: 'assignee', elementVariable: 'assignee',
completionCondition: '', completionCondition: '${nrOfInstances == nrOfCompletedInstances}',
}); });
const variableList = [ const variableList = [
{ {
@@ -290,7 +290,9 @@ const getElementLoop = (businessObject: ANY_OBJECT) => {
loopInstanceForm.value = { loopInstanceForm.value = {
...defaultLoopInstanceForm, ...defaultLoopInstanceForm,
...businessObject.loopCharacteristics, ...businessObject.loopCharacteristics,
completionCondition: businessObject.loopCharacteristics?.completionCondition?.body ?? '', completionCondition:
businessObject.loopCharacteristics?.completionCondition?.body ??
'${nrOfInstances == nrOfCompletedInstances}',
loopCardinality: businessObject.loopCharacteristics?.loopCardinality?.body ?? '', loopCardinality: businessObject.loopCharacteristics?.loopCardinality?.body ?? '',
}; };
// 保留当前元素 businessObject 上的 loopCharacteristics 实例 // 保留当前元素 businessObject 上的 loopCharacteristics 实例
@@ -307,7 +309,7 @@ const getElementLoop = (businessObject: ANY_OBJECT) => {
} }
}; };
const changeLoopCharacteristicsType = (type: string) => { const changeLoopCharacteristicsType = (type: string) => {
if (type === 'SequentialMultiInstance') { if (type === 'SequentialMultiInstance' || loopInstanceForm.value.completionCondition === '') {
// eslint-disable-next-line no-template-curly-in-string // eslint-disable-next-line no-template-curly-in-string
loopInstanceForm.value.completionCondition = '${nrOfInstances == nrOfCompletedInstances}'; loopInstanceForm.value.completionCondition = '${nrOfInstances == nrOfCompletedInstances}';
} }

View File

@@ -11,7 +11,7 @@
<vxe-column title="序号" width="70px" type="seq" /> <vxe-column title="序号" width="70px" type="seq" />
<vxe-column title="属性名" field="name" min-width="100px" show-overflow-tooltip /> <vxe-column title="属性名" field="name" min-width="100px" show-overflow-tooltip />
<vxe-column title="属性值" field="value" min-width="90px" show-overflow-tooltip /> <vxe-column title="属性值" field="value" min-width="90px" show-overflow-tooltip />
<vxe-column title="操作" width="100px"> <vxe-column title="操作" width="110px">
<template v-slot="{ row, $rowIndex }"> <template v-slot="{ row, $rowIndex }">
<el-button <el-button
type="primary" type="primary"

View File

@@ -908,7 +908,7 @@ watch(candidateGroupIds, () => {
} }
.el-radio__label { .el-radio__label {
padding-left: 4px; padding-left: 4px;
font-size: 12px; font-size: 14px;
color: #333; color: #333;
font-weight: normal; font-weight: normal;
} }
@@ -929,7 +929,7 @@ watch(candidateGroupIds, () => {
display: inline-block; display: inline-block;
float: right; float: right;
i { i {
font-size: 12px; font-size: 14px;
transform: scale(0.8); transform: scale(0.8);
} }
& > .icon { & > .icon {

View File

@@ -263,6 +263,13 @@ export const routers: Array<RouteRecordRaw> = [
props: getProps, props: getProps,
component: () => import('@/pages/workflow/components/TaskUserSelect.vue'), component: () => import('@/pages/workflow/components/TaskUserSelect.vue'),
}, },
// 选择用户-跳转节点
{
path: 'thirdSelectUserTask',
name: 'thirdSelectUserTask',
props: getProps,
component: () => import('@/pages/workflow/components/UserTaskSelect/userTaskSelectDlg.vue'),
},
// 流程设计 // 流程设计
{ {
path: 'thirdFormFlowEntry', path: 'thirdFormFlowEntry',

View File

@@ -1,34 +0,0 @@
export default interface Course {
// 主键Id
courseId?: string | number;
// 课程名称
courseName?: string;
// 课程价格
price?: number;
// 课程描述
description?: string;
// 主讲老师
teacherId?: string | number;
// 课程难度
difficulty?: number | string;
// 是否上架
online?: boolean;
// 所属年级
gradeId?: number | string;
// 所属科目
subjectId?: number | string;
// 课程分类
categoryId?: number | string;
// 课时数量
classHour?: number;
// 封面图
pictureUrl?: string;
// 所属校区
schoolId?: string | number;
// 创建用户Id
createUserId?: string | number;
// 创建时间
createTime?: string | Date | number;
// 最后修改时间
updateTime?: string | Date | number;
}

View File

@@ -1,22 +0,0 @@
export default interface CourseSection {
// 主键Id
sectionId: undefined;
// 章节名称
sectionName: undefined;
// 显示顺序
showOrder: undefined;
// 课程Id
courseId: undefined;
// 课时数量
classHour: undefined;
// 课程附件地址
attachmentUrl: undefined;
// 用户Id
createUserId: undefined;
// 创建时间
createTime: undefined;
// 更新时间
updateTime: undefined;
// 级联更新临时id
__cascade_add_temp_id__: number | string | undefined;
}

View File

@@ -1,24 +0,0 @@
export default interface Teacher {
// 主键Id
teacherId: undefined;
// 教师名称
teacherName: undefined;
// 教师生日
birthday: undefined;
// 教师性别
gender: undefined;
// 所教科目
subjectId: undefined;
// 教师职级
level: undefined;
// 鲜花数量
flowerCount: undefined;
// 所属校区
schoolId: undefined;
// 绑定用户
userId: undefined;
// 入职时间
registerDate: undefined;
// 是否在职
available: undefined;
}