cloud-web-corejs 1.0.258 → 1.0.259
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +32 -25
- package/src/components/VabUpload/fileLibraryDialog.vue +296 -0
- package/src/components/VabUpload/index.js +22 -2
- package/src/components/VabUpload/index.vue +242 -231
- package/src/components/VabUpload/mixins/fileLibraryDialog.js +1112 -0
- package/src/components/VabUpload/mixins.js +1971 -1829
- package/src/components/VabUpload/privateProfileDialog.vue +2 -2
- package/src/components/baseArea/index.vue +1628 -0
- package/src/components/baseInputExport/mixins.js +48 -31
- package/src/components/baseInputNumber/index.vue +9 -9
- package/src/components/baseTabs/index.vue +16 -8
- package/src/components/code-editor/async.js +29 -0
- package/src/components/code-editor/index.vue +93 -4
- package/src/components/errorMsg/index.js +10 -9
- package/src/components/errorMsg/mixins.js +25 -23
- package/src/components/excelExport/exportFieldDialog.vue +40 -18
- package/src/components/excelExport/index.js +62 -3
- package/src/components/excelExport/index.vue +2 -1
- package/src/components/excelExport/mixins.js +496 -340
- package/src/components/excelImport/index.js +69 -7
- package/src/components/excelImport/mixins.js +841 -9
- package/src/components/fileLibrary/categoryMoveDialog.vue +109 -109
- package/src/components/fileLibrary/fileHistoryDialog.vue +1 -1
- package/src/components/fileLibrary/fileObjAuthDialog.vue +297 -298
- package/src/components/fileLibrary/fileObjAuthEdit.vue +1 -1
- package/src/components/fileLibrary/filterDialog.vue +1 -1
- package/src/components/fileLibrary/index.vue +1109 -1110
- package/src/components/fileLibrary/mixins/indexMixins.js +10 -0
- package/src/components/fileLibrary/propertiesDialog.vue +190 -190
- package/src/components/fileLibrary/recycleBinDialog.vue +237 -236
- package/src/components/formOplog/mixins.js +85 -80
- package/src/components/hiprint/view/design/index.vue +7 -2
- package/src/components/jsonImport/exportUtil.js +106 -0
- package/src/components/jsonImport/index.js +75 -50
- package/src/components/jsonImport/mixins.js +350 -348
- package/src/components/langImport/mixins.js +502 -500
- package/src/components/micro-view-host/contract.js +66 -0
- package/src/components/micro-view-host/index.vue +148 -0
- package/src/components/mobile/file/index.vue +10 -0
- package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +51 -47
- package/src/components/obsUpload/index.vue +234 -231
- package/src/components/obsUpload/mixins.js +1542 -1476
- package/src/components/onlineTalk/talkUserDialog.vue +1 -1
- package/src/components/table/CellSlot.vue +12 -10
- package/src/components/table/config.js +74 -1
- package/src/components/table/index.js +1208 -1
- package/src/components/table/tableFormMixin.js +285 -1
- package/src/components/table/util/index.js +38 -40
- package/src/components/table/vxeFilter/index.js +153 -2
- package/src/components/table/vxeFilter/mixin.js +305 -3
- package/src/components/tempStorage/tempStorageDialog.vue +1 -1
- package/src/components/vb-tabs/x-tabs.vue +10 -5
- package/src/components/wf/addTaskUserdialog.vue +1 -1
- package/src/components/wf/mixins/setCandidateDialog.js +217 -217
- package/src/components/wf/mixins/setCandidateDialog2.js +252 -252
- package/src/components/wf/wf.js +2224 -2203
- package/src/components/wf/wfUtil.js +2 -1
- package/src/components/xform/docs/2026-08 /345/210/227/350/241/250/345/257/274/345/207/272/350/204/261/346/225/217/345/210/227/345/211/224/351/231/244/350/220/275/345/234/260/346/226/207/346/241/243.md" +173 -0
- package/src/components/xform/form-designer/designer.js +1 -0
- package/src/components/xform/form-designer/form-widget/container-widget/containerMixin.js +110 -1
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +282 -1
- package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +272 -0
- package/src/components/xform/form-designer/form-widget/field-widget/autocomplete-widget.vue +119 -0
- package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +14 -0
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +18 -73
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/autocomplete-mixin.js +451 -0
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +157 -0
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/utc-transform-mixin.js +75 -0
- package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +112 -0
- package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +149 -0
- package/src/components/xform/form-designer/form-widget/indexMixin.js +179 -1
- package/src/components/xform/form-designer/indexMixin.js +823 -1
- package/src/components/xform/form-designer/refMixinDesign.js +27 -1
- package/src/components/xform/form-designer/setting-panel/action-button-config-dialog.vue +241 -0
- package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +601 -0
- package/src/components/xform/form-designer/setting-panel/form-setting.vue +6 -0
- package/src/components/xform/form-designer/setting-panel/index.vue +314 -309
- package/src/components/xform/form-designer/setting-panel/indexMixin.js +324 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +8 -7
- package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +8 -7
- package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +344 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +2 -2
- package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaDataType-editor.vue +25 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaMinLevel-editor.vue +50 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaName-editor.vue +20 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-autocomplete/autocomplete-vabSearchName-editor.vue +199 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-baseAttachment/baseAttachment-fileTypes-editor.vue +23 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-cascader/showAllLevels-editor.vue +21 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-dateLimit-editor.vue +157 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +55 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload/vabUpload-fileTypes-editor.vue +23 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesEditorMixin.js +116 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +176 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +3 -3
- package/src/components/xform/form-designer/setting-panel/property-editor/utcTransformEnabled-editor.vue +19 -0
- package/src/components/xform/form-designer/setting-panel/widgetPropertyDialogMixin.js +186 -0
- package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +566 -1
- package/src/components/xform/form-designer/widget-panel/indexMixin.js +290 -1
- package/src/components/xform/form-render/compareDelList.vue +83 -0
- package/src/components/xform/form-render/compareView.vue +76 -0
- package/src/components/xform/form-render/container-item/containerItemMixin.js +378 -1
- package/src/components/xform/form-render/container-item/data-table-mixin.js +35 -0
- package/src/components/xform/form-render/container-item/detail-item.vue +41 -0
- package/src/components/xform/form-render/container-item/dynamicFieldEngine.js +285 -0
- package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +416 -0
- package/src/components/xform/form-render/container-item/list-h5-item.vue +12 -0
- package/src/components/xform/form-render/dynamicDialogRender.js +195 -1
- package/src/components/xform/form-render/dynamicDrawerRender.js +229 -0
- package/src/components/xform/form-render/formDynamicFieldMixin.js +131 -0
- package/src/components/xform/form-render/refMixin.js +29 -1
- package/src/components/xform/mixins/scriptHttp.js +172 -1
- package/src/components/xform/utils/dynamicSchemaUtil.js +361 -0
- package/src/components/xform/utils/tableCellValidateUtil.js +148 -0
- package/src/components/xform/utils/textMaskUtil.js +179 -0
- package/src/components/xform/utils/treeTableUtil.js +1265 -0
- package/src/components/xform/utils/util.js +1 -0
- package/src/components/xform/utils/validators.js +133 -1
- package/src/directive/LimitNumber/index.js +143 -124
- package/src/microRouter/index.js +447 -0
- package/src/mixins/tableTree/index.js +77 -14
- package/src/permission.js +132 -107
- package/src/public-path.js +38 -0
- package/src/router/index.js +3 -3
- package/src/store/modules/micro.js +57 -0
- package/src/store/modules/permission.js +535 -371
- package/src/store/modules/tagsView.js +38 -21
- package/src/store/modules/user.js +409 -370
- package/src/utils/aes.js +9 -3
- package/src/utils/auth.js +1 -1
- package/src/utils/componentDialog.js +162 -40
- package/src/utils/global.js +35 -34
- package/src/utils/index.js +579 -579
- package/src/utils/keepAlive.js +8 -4
- package/src/utils/lazyPlugin.js +66 -0
- package/src/utils/menuAdapter.js +277 -0
- package/src/utils/repeatOpen.js +48 -0
- package/src/utils/request.js +417 -395
- package/src/utils/resolveViewComponent.js +203 -0
- package/src/utils/vab.js +14 -3
- package/src/utils/validate.js +104 -106
- package/src/views/bd/setting/bd_attach_setting/dialog.vue +1 -1
- package/src/views/bd/setting/bd_attach_setting/list.vue +1 -1
- package/src/views/bd/setting/bd_company_env/dialog.vue +1 -1
- package/src/views/bd/setting/bd_company_env/list.vue +1 -1
- package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +488 -489
- package/src/views/bd/setting/form_import_log/list.vue +1 -1
- package/src/views/bd/setting/form_script/dialog.vue +1 -1
- package/src/views/bd/setting/form_script/form_list.vue +174 -166
- package/src/views/bd/setting/form_script/list.vue +1 -1
- package/src/views/bd/setting/form_script/list1.vue +1 -1
- package/src/views/bd/setting/form_script/mixins/form_list.js +330 -322
- package/src/views/bd/setting/form_template/dialog.vue +1 -1
- package/src/views/bd/setting/form_template/formDesignerDialog.vue +172 -171
- package/src/views/bd/setting/form_template/ftHistoryDialog.vue +1 -1
- package/src/views/bd/setting/form_template/itemList.vue +1 -1
- package/src/views/bd/setting/form_template/list.vue +3 -3
- package/src/views/bd/setting/form_template/mixins/edit.js +3 -3
- package/src/views/bd/setting/form_template/mixins/list.js +3 -3
- package/src/views/bd/setting/form_template/mixins/list2.js +3 -3
- package/src/views/bd/setting/form_template/mixins/wf_list.js +3 -3
- package/src/views/bd/setting/form_template/wfObjConfigDialog.vue +253 -254
- package/src/views/bd/setting/form_template/wf_list.vue +3 -3
- package/src/views/bd/setting/logic_param/edit.vue +20 -20
- package/src/views/bd/setting/logic_param/list.vue +1 -1
- package/src/views/bd/setting/menu_kind/dialog.vue +1 -1
- package/src/views/bd/setting/menu_kind/list.vue +1 -1
- package/src/views/bd/setting/push_data/list.vue +1 -1
- package/src/views/bd/setting/push_data_h/list.vue +1 -1
- package/src/views/bd/setting/request_async_setting/list.vue +1 -1
- package/src/views/bd/setting/request_setting/list.vue +1 -1
- package/src/views/bd/setting/table_model/dialog.vue +1 -1
- package/src/views/bd/setting/table_model/list.vue +1 -1
- package/src/views/bd/setting/table_model/zdDialog.vue +1 -1
- package/src/views/user/access_log/list.vue +1 -1
- package/src/views/user/access_log/list2.vue +1 -1
- package/src/views/user/api_request/list.vue +1 -1
- package/src/views/user/area/dialog.vue +1 -1
- package/src/views/user/area/list.vue +1 -1
- package/src/views/user/bill_setting/list.vue +1 -1
- package/src/views/user/bill_setting/userDialog.vue +1 -1
- package/src/views/user/code_rules/list.vue +1 -1
- package/src/views/user/commMenu/index.vue +2 -2
- package/src/views/user/common_attribute/list.vue +2 -2
- package/src/views/user/common_script/list.vue +1 -1
- package/src/views/user/company_info/dialog.vue +1 -1
- package/src/views/user/country/dialog.vue +1 -1
- package/src/views/user/country/list.vue +1 -1
- package/src/views/user/data_type_setting/dialog.vue +1 -1
- package/src/views/user/extend_datasource/dialog.vue +4 -1
- package/src/views/user/extend_datasource/edit.vue +2 -1
- package/src/views/user/extend_datasource/list.vue +4 -1
- package/src/views/user/fieldTranslation/list.vue +1 -1
- package/src/views/user/field_values_invisible/list.vue +1 -1
- package/src/views/user/file_type/list.vue +1 -1
- package/src/views/user/file_view_area/list.vue +1 -1
- package/src/views/user/file_view_ins/list.vue +22 -1
- package/src/views/user/form/view/list.vue +64 -1
- package/src/views/user/groups/dialog.vue +1 -1
- package/src/views/user/groups/list.vue +1 -1
- package/src/views/user/home/default.vue +2 -2
- package/src/views/user/home/default2.vue +1158 -1148
- package/src/views/user/home/index.vue +3 -10
- package/src/views/user/lang_tag/dialog.vue +1 -1
- package/src/views/user/lang_tag/list.vue +1 -1
- package/src/views/user/language_setting/list.vue +1 -1
- package/src/views/user/login/default.vue +0 -8
- package/src/views/user/login/indexMixin.js +547 -556
- package/src/views/user/menu/list.vue +25 -2
- package/src/views/user/menuFallback/index.vue +123 -0
- package/src/views/user/mobile_menu/list.vue +1 -1
- package/src/views/user/notify_message/dialog.vue +22 -1
- package/src/views/user/notify_message/list.vue +1 -1
- package/src/views/user/notify_template/list.vue +1 -1
- package/src/views/user/notify_template/list2.vue +1 -1
- package/src/views/user/oplog/list.vue +1 -1
- package/src/views/user/outLink/form_view.vue +5 -14
- package/src/views/user/outLink/index.vue +6 -1
- package/src/views/user/outLink/view.vue +5 -13
- package/src/views/user/position/dialog.vue +1 -1
- package/src/views/user/position/list.vue +1 -1
- package/src/views/user/project_tag/dialog.vue +1 -1
- package/src/views/user/project_tag/list.vue +1 -1
- package/src/views/user/push_setting/list.vue +1 -1
- package/src/views/user/request_setting/list.vue +1 -1
- package/src/views/user/role/dialog.vue +1 -1
- package/src/views/user/role/list.vue +1 -1
- package/src/views/user/sale_org/dialog.vue +1 -1
- package/src/views/user/sale_org/list.vue +1 -1
- package/src/views/user/system_notice/list.vue +1 -1
- package/src/views/user/system_parameter/list.vue +1 -1
- package/src/views/user/user/dialog.vue +1 -1
- package/src/views/user/user/edit.vue +306 -159
- package/src/views/user/user/form_dialog.vue +1 -1
- package/src/views/user/user/form_list.vue +1 -1
- package/src/views/user/user/list.vue +2 -2
- package/src/views/user/user_log_classify/list.vue +1 -1
- package/src/views/user/wf/iframe/index.vue +6 -1
- package/src/views/user/wf/iframe/index2.vue +6 -1
- package/src/views/user/wf/wfReport/index.vue +12 -6
- package/src/views/user/wf/wf_auto_submit_data/list.vue +2 -2
- package/src/views/user/wf/wf_manage/list.vue +97 -24
- package/src/views/user/wf/wf_manage/list2.vue +875 -0
- package/src/views/user/wf/wf_manage/wfContentDialog.vue +23 -1
- package/src/views/user/wf/wf_obj_config/dialog.vue +1 -1
- package/src/views/user/wf/wf_obj_config/list.vue +1 -1
- package/src/views/user/wf/wf_obj_config/list_form.vue +1 -1
- package/src/views/user/wf/wf_transfer_setting/list.vue +1 -1
- package/src/views/user/workbench_menu/list.vue +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-form-item :label="i18nt('designer.setting.showAllLevels')">
|
|
3
|
+
<el-switch v-model="optionModel.showAllLevels"></el-switch>
|
|
4
|
+
</el-form-item>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import i18n from "../../../../../../components/xform/utils/i18n";
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
name: "showAllLevels-editor",
|
|
12
|
+
mixins: [i18n],
|
|
13
|
+
props: {
|
|
14
|
+
designer: Object,
|
|
15
|
+
selectedWidget: Object,
|
|
16
|
+
optionModel: Object,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<style scoped></style>
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<el-form-item label="关联开始字段">
|
|
4
|
+
<el-select
|
|
5
|
+
v-if="dateFieldOptions.length"
|
|
6
|
+
v-model="optionModel.limitStartField"
|
|
7
|
+
filterable
|
|
8
|
+
clearable
|
|
9
|
+
placeholder="不能小于该字段值"
|
|
10
|
+
>
|
|
11
|
+
<el-option
|
|
12
|
+
v-for="item in dateFieldOptions"
|
|
13
|
+
:key="item.value"
|
|
14
|
+
:label="item.label"
|
|
15
|
+
:value="item.value"
|
|
16
|
+
></el-option>
|
|
17
|
+
</el-select>
|
|
18
|
+
<el-input
|
|
19
|
+
v-else
|
|
20
|
+
v-model="optionModel.limitStartField"
|
|
21
|
+
placeholder="请输入开始字段属性名"
|
|
22
|
+
clearable
|
|
23
|
+
></el-input>
|
|
24
|
+
</el-form-item>
|
|
25
|
+
<el-form-item label="关联结束字段">
|
|
26
|
+
<el-select
|
|
27
|
+
v-if="dateFieldOptions.length"
|
|
28
|
+
v-model="optionModel.limitEndField"
|
|
29
|
+
filterable
|
|
30
|
+
clearable
|
|
31
|
+
placeholder="不能大于该字段值"
|
|
32
|
+
>
|
|
33
|
+
<el-option
|
|
34
|
+
v-for="item in dateFieldOptions"
|
|
35
|
+
:key="item.value"
|
|
36
|
+
:label="item.label"
|
|
37
|
+
:value="item.value"
|
|
38
|
+
></el-option>
|
|
39
|
+
</el-select>
|
|
40
|
+
<el-input
|
|
41
|
+
v-else
|
|
42
|
+
v-model="optionModel.limitEndField"
|
|
43
|
+
placeholder="请输入结束字段属性名"
|
|
44
|
+
clearable
|
|
45
|
+
></el-input>
|
|
46
|
+
</el-form-item>
|
|
47
|
+
<el-form-item label="最小日期">
|
|
48
|
+
<el-date-picker
|
|
49
|
+
v-model="optionModel.minDate"
|
|
50
|
+
:type="pickerType"
|
|
51
|
+
:format="optionModel.format"
|
|
52
|
+
:value-format="optionModel.valueFormat"
|
|
53
|
+
style="width: 100%"
|
|
54
|
+
clearable
|
|
55
|
+
placeholder="留空则不限制"
|
|
56
|
+
></el-date-picker>
|
|
57
|
+
</el-form-item>
|
|
58
|
+
<el-form-item label="最大日期">
|
|
59
|
+
<el-date-picker
|
|
60
|
+
v-model="optionModel.maxDate"
|
|
61
|
+
:type="pickerType"
|
|
62
|
+
:format="optionModel.format"
|
|
63
|
+
:value-format="optionModel.valueFormat"
|
|
64
|
+
style="width: 100%"
|
|
65
|
+
clearable
|
|
66
|
+
placeholder="留空则不限制"
|
|
67
|
+
></el-date-picker>
|
|
68
|
+
</el-form-item>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
|
|
72
|
+
<script>
|
|
73
|
+
import i18n from "../../../../../../components/xform/utils/i18n";
|
|
74
|
+
import propertyMixin from "../../../../../../components/xform/form-designer/setting-panel/property-editor/propertyMixin";
|
|
75
|
+
import { loopHandleWidget } from "../../../../../../components/xform/utils/util";
|
|
76
|
+
|
|
77
|
+
export default {
|
|
78
|
+
name: "date-dateLimit-editor",
|
|
79
|
+
mixins: [i18n, propertyMixin],
|
|
80
|
+
props: {
|
|
81
|
+
designer: Object,
|
|
82
|
+
selectedWidget: Object,
|
|
83
|
+
optionModel: Object,
|
|
84
|
+
tableColumns: Array,
|
|
85
|
+
},
|
|
86
|
+
computed: {
|
|
87
|
+
pickerType() {
|
|
88
|
+
return this.optionModel.type || "date";
|
|
89
|
+
},
|
|
90
|
+
currentFieldKey() {
|
|
91
|
+
return this.getFieldKeyByOptions(this.optionModel);
|
|
92
|
+
},
|
|
93
|
+
dateFieldOptions() {
|
|
94
|
+
let options = [];
|
|
95
|
+
if (this.tableColumns && this.tableColumns.length) {
|
|
96
|
+
this.collectDateFieldsFromColumns(this.tableColumns, options);
|
|
97
|
+
} else if (this.designer && this.designer.widgetList) {
|
|
98
|
+
loopHandleWidget(this.designer.widgetList, (widget) => {
|
|
99
|
+
if (widget.type !== "date" || widget.id === this.selectedWidget.id) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
let fieldKey = this.getFieldKeyByOptions(widget.options);
|
|
103
|
+
if (fieldKey && fieldKey !== this.currentFieldKey) {
|
|
104
|
+
options.push({
|
|
105
|
+
value: fieldKey,
|
|
106
|
+
label: widget.options.label || fieldKey,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return options;
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
methods: {
|
|
115
|
+
getFieldKeyByOptions(options) {
|
|
116
|
+
if (!options) {
|
|
117
|
+
return "";
|
|
118
|
+
}
|
|
119
|
+
return (options.keyNameEnabled && options.keyName) || options.name || "";
|
|
120
|
+
},
|
|
121
|
+
collectDateFieldsFromColumns(columns, options) {
|
|
122
|
+
columns.forEach((col) => {
|
|
123
|
+
if (col.children && col.children.length) {
|
|
124
|
+
this.collectDateFieldsFromColumns(col.children, options);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!this.isDateColumn(col)) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
let fieldKey = col.prop;
|
|
131
|
+
if (col.columnOption) {
|
|
132
|
+
fieldKey = this.getFieldKeyByOptions(col.columnOption) || fieldKey;
|
|
133
|
+
}
|
|
134
|
+
if (col.editColumnOption) {
|
|
135
|
+
fieldKey =
|
|
136
|
+
this.getFieldKeyByOptions(col.editColumnOption) || fieldKey;
|
|
137
|
+
}
|
|
138
|
+
if (fieldKey && fieldKey !== this.currentFieldKey) {
|
|
139
|
+
options.push({
|
|
140
|
+
value: fieldKey,
|
|
141
|
+
label: col.label || fieldKey,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
isDateColumn(col) {
|
|
147
|
+
return (
|
|
148
|
+
col.formatS === "date" ||
|
|
149
|
+
col.formatS === "editDate" ||
|
|
150
|
+
col.editFormatS === "editDate" ||
|
|
151
|
+
col.widget?.type === "date" ||
|
|
152
|
+
col.editWidget?.type === "date"
|
|
153
|
+
);
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
</script>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<el-form-item label="编辑器语言">
|
|
4
|
+
<el-select v-model="optionModel.editorMode">
|
|
5
|
+
<el-option value="javascript" label="JavaScript"></el-option>
|
|
6
|
+
<el-option value="java" label="Java"></el-option>
|
|
7
|
+
<el-option value="json" label="JSON"></el-option>
|
|
8
|
+
<el-option value="text" label="文本"></el-option>
|
|
9
|
+
</el-select>
|
|
10
|
+
</el-form-item>
|
|
11
|
+
<el-form-item label="编辑器高度">
|
|
12
|
+
<el-input
|
|
13
|
+
v-model="optionModel.editorHeight"
|
|
14
|
+
placeholder="如 200px"
|
|
15
|
+
></el-input>
|
|
16
|
+
</el-form-item>
|
|
17
|
+
<el-form-item label="最小行数">
|
|
18
|
+
<el-input-number
|
|
19
|
+
v-model="optionModel.editorMinLines"
|
|
20
|
+
:min="3"
|
|
21
|
+
:max="100"
|
|
22
|
+
controls-position="right"
|
|
23
|
+
style="width: 100%"
|
|
24
|
+
></el-input-number>
|
|
25
|
+
</el-form-item>
|
|
26
|
+
<el-form-item label="最大行数">
|
|
27
|
+
<el-input-number
|
|
28
|
+
v-model="optionModel.editorMaxLines"
|
|
29
|
+
:min="3"
|
|
30
|
+
:max="200"
|
|
31
|
+
controls-position="right"
|
|
32
|
+
style="width: 100%"
|
|
33
|
+
></el-input-number>
|
|
34
|
+
</el-form-item>
|
|
35
|
+
<el-form-item label="语法检查">
|
|
36
|
+
<el-switch v-model="optionModel.userWorker"></el-switch>
|
|
37
|
+
</el-form-item>
|
|
38
|
+
</div>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<script>
|
|
42
|
+
import i18n from "../../../../utils/i18n";
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
name: "script-input-editor",
|
|
46
|
+
mixins: [i18n],
|
|
47
|
+
props: {
|
|
48
|
+
designer: Object,
|
|
49
|
+
selectedWidget: Object,
|
|
50
|
+
optionModel: Object,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<style scoped></style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<file-types-select :option-model="optionModel"></file-types-select>
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script>
|
|
6
|
+
import FileTypesSelect from "../fileTypesSelect.vue"
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
name: "vabUpload-fileTypes-editor",
|
|
10
|
+
components: {
|
|
11
|
+
FileTypesSelect,
|
|
12
|
+
},
|
|
13
|
+
props: {
|
|
14
|
+
designer: Object,
|
|
15
|
+
selectedWidget: Object,
|
|
16
|
+
optionModel: Object,
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<style scoped>
|
|
22
|
+
|
|
23
|
+
</style>
|
package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesEditorMixin.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 上传格式属性编辑器的共用逻辑。
|
|
3
|
+
*
|
|
4
|
+
* 存储格式仍是扁平的后缀数组(如 ['jpg','png','mp4']),分类只是勾选时的快捷方式:
|
|
5
|
+
* 勾"图片"等于把该分类下的后缀一次性并入,取消勾选则整组移除。这样运行期的格式
|
|
6
|
+
* 校验与 accept 生成都不必感知分类,已保存的老表单里的后缀数组也能原样沿用。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* 每个分类内的后缀顺序即下拉分组里的展示顺序 */
|
|
10
|
+
export const FILE_TYPE_CATEGORIES = [
|
|
11
|
+
{
|
|
12
|
+
value: "image",
|
|
13
|
+
labelKey: "designer.setting.fileTypeCategory.image",
|
|
14
|
+
types: ["jpg", "jpeg", "png", "gif", "bmp", "webp", "svg"],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
value: "video",
|
|
18
|
+
labelKey: "designer.setting.fileTypeCategory.video",
|
|
19
|
+
types: ["mp4", "avi", "mov", "wmv", "flv", "mkv", "rmvb"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
value: "audio",
|
|
23
|
+
labelKey: "designer.setting.fileTypeCategory.audio",
|
|
24
|
+
types: ["mp3", "wav", "wma", "aac", "flac"],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
value: "word",
|
|
28
|
+
labelKey: "designer.setting.fileTypeCategory.word",
|
|
29
|
+
types: ["doc", "docx"],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: "excel",
|
|
33
|
+
labelKey: "designer.setting.fileTypeCategory.excel",
|
|
34
|
+
types: ["xls", "xlsx", "csv"],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
value: "ppt",
|
|
38
|
+
labelKey: "designer.setting.fileTypeCategory.ppt",
|
|
39
|
+
types: ["ppt", "pptx"],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
value: "pdf",
|
|
43
|
+
labelKey: "designer.setting.fileTypeCategory.pdf",
|
|
44
|
+
types: ["pdf"],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
value: "text",
|
|
48
|
+
labelKey: "designer.setting.fileTypeCategory.text",
|
|
49
|
+
types: ["txt"],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
value: "archive",
|
|
53
|
+
labelKey: "designer.setting.fileTypeCategory.archive",
|
|
54
|
+
types: ["zip", "rar", "7z", "tar", "gz"],
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
export default {
|
|
59
|
+
computed: {
|
|
60
|
+
fileTypeCategories() {
|
|
61
|
+
return FILE_TYPE_CATEGORIES.map((category) => {
|
|
62
|
+
return {
|
|
63
|
+
...category,
|
|
64
|
+
label: this.i18nt(category.labelKey),
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
selectedFileTypes: {
|
|
69
|
+
get() {
|
|
70
|
+
return this.optionModel.fileTypes || [];
|
|
71
|
+
},
|
|
72
|
+
set(value) {
|
|
73
|
+
/* 老表单可能没有 fileTypes 键,用 $set 保证可响应 */
|
|
74
|
+
this.$set(this.optionModel, "fileTypes", this.normalizeFileTypes(value));
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
methods: {
|
|
79
|
+
/* 允许手工输入,统一成小写、去点号、去重的后缀 */
|
|
80
|
+
normalizeFileTypes(value) {
|
|
81
|
+
let result = [];
|
|
82
|
+
(value || []).forEach((item) => {
|
|
83
|
+
let fileType = String(item).trim().replace(/^\./, "").toLowerCase();
|
|
84
|
+
if (!!fileType && result.indexOf(fileType) < 0) {
|
|
85
|
+
result.push(fileType);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return result;
|
|
89
|
+
},
|
|
90
|
+
isCategoryChecked(category) {
|
|
91
|
+
let selected = this.selectedFileTypes;
|
|
92
|
+
return category.types.every((fileType) => {
|
|
93
|
+
return selected.indexOf(fileType) > -1;
|
|
94
|
+
});
|
|
95
|
+
},
|
|
96
|
+
isCategoryIndeterminate(category) {
|
|
97
|
+
if (this.isCategoryChecked(category)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
let selected = this.selectedFileTypes;
|
|
101
|
+
return category.types.some((fileType) => {
|
|
102
|
+
return selected.indexOf(fileType) > -1;
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
toggleCategory(category, checked) {
|
|
106
|
+
let selected = this.selectedFileTypes;
|
|
107
|
+
if (checked) {
|
|
108
|
+
this.selectedFileTypes = [...selected, ...category.types];
|
|
109
|
+
} else {
|
|
110
|
+
this.selectedFileTypes = selected.filter((fileType) => {
|
|
111
|
+
return category.types.indexOf(fileType) < 0;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- 分类勾选行放不进 120px 标签剩下的宽度里,故整块用 label-width="0" 占满属性面板 -->
|
|
3
|
+
<el-form-item class="file-types-item" label-width="0">
|
|
4
|
+
<div class="file-types-title">{{i18nt('designer.setting.fileTypes')}}
|
|
5
|
+
<el-tooltip effect="light" :content="i18nt('designer.setting.fileTypesCategoryHelp')">
|
|
6
|
+
<i class="el-icon-info"></i></el-tooltip>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="file-types-category">
|
|
9
|
+
<el-checkbox v-for="category in fileTypeCategories"
|
|
10
|
+
:key="category.value"
|
|
11
|
+
:value="isCategoryChecked(category)"
|
|
12
|
+
:indeterminate="isCategoryIndeterminate(category)"
|
|
13
|
+
@change="toggleCategory(category, $event)">{{ category.label }}</el-checkbox>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="file-types-select">
|
|
16
|
+
<el-select ref="fileTypesSelect" multiple allow-create filterable default-first-option clearable
|
|
17
|
+
popper-class="file-types-select-dropdown"
|
|
18
|
+
:placeholder="i18nt('designer.setting.fileTypesPlaceholder')"
|
|
19
|
+
v-model="selectedFileTypes" style="width: 100%">
|
|
20
|
+
<el-option-group v-for="category in fileTypeCategories"
|
|
21
|
+
:key="category.value"
|
|
22
|
+
:label="category.label">
|
|
23
|
+
<el-option v-for="fileType in category.types"
|
|
24
|
+
:key="fileType"
|
|
25
|
+
:label="fileType"
|
|
26
|
+
:value="fileType">
|
|
27
|
+
</el-option>
|
|
28
|
+
</el-option-group>
|
|
29
|
+
</el-select>
|
|
30
|
+
</div>
|
|
31
|
+
</el-form-item>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script>
|
|
35
|
+
import i18n from "../../../../../components/xform/utils/i18n"
|
|
36
|
+
import fileTypesEditorMixin from "./fileTypesEditorMixin"
|
|
37
|
+
|
|
38
|
+
export default {
|
|
39
|
+
name: "file-types-select",
|
|
40
|
+
mixins: [i18n, fileTypesEditorMixin],
|
|
41
|
+
props: {
|
|
42
|
+
optionModel: Object,
|
|
43
|
+
},
|
|
44
|
+
mounted() {
|
|
45
|
+
this.syncSelectLayout()
|
|
46
|
+
},
|
|
47
|
+
watch: {
|
|
48
|
+
selectedFileTypes() {
|
|
49
|
+
this.syncSelectLayout()
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
methods: {
|
|
53
|
+
/*
|
|
54
|
+
* 两处都是 element 用 JS 量出来再写成内联样式的尺寸,在这里都不成立:
|
|
55
|
+
* 1. 标签区的 max-width 按挂载那一刻的控件宽度算,而本编辑器挂载在还没完成
|
|
56
|
+
* 布局的属性弹窗里,量到的值偏小;
|
|
57
|
+
* 2. 输入框高度由 resetInputHeight() 写成内联样式,但全局样式表里
|
|
58
|
+
* body .el-input .el-input__inner 把 height 写死成 28px !important,
|
|
59
|
+
* 内联样式压不过它,标签一换行就溢出到框外,展开的下拉面板还会盖住溢出部分。
|
|
60
|
+
* 所以这里等布局稳定后让宽度重算,并用同等优先级把高度补回去。
|
|
61
|
+
*/
|
|
62
|
+
syncSelectLayout() {
|
|
63
|
+
this.$nextTick(() => {
|
|
64
|
+
let select = this.$refs.fileTypesSelect
|
|
65
|
+
if (!select || !select.$refs.reference) {
|
|
66
|
+
return
|
|
67
|
+
}
|
|
68
|
+
if (!!select.resetInputWidth) {
|
|
69
|
+
select.resetInputWidth()
|
|
70
|
+
}
|
|
71
|
+
let input = select.$refs.reference.$el.querySelector("input.el-input__inner")
|
|
72
|
+
let tags = select.$refs.tags
|
|
73
|
+
if (!input || !tags) {
|
|
74
|
+
return
|
|
75
|
+
}
|
|
76
|
+
let minHeight = select.initialInputHeight || input.offsetHeight
|
|
77
|
+
let tagsHeight = Math.round(tags.getBoundingClientRect().height)
|
|
78
|
+
let height = Math.max(tagsHeight > minHeight ? tagsHeight + 6 : tagsHeight, minHeight)
|
|
79
|
+
input.style.setProperty("height", height + "px", "important")
|
|
80
|
+
/* 高度变了要让下拉面板重新定位,否则还是按旧高度贴在原处 */
|
|
81
|
+
if (!!select.broadcast) {
|
|
82
|
+
select.broadcast("ElSelectDropdown", "updatePopper")
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<style scoped>
|
|
91
|
+
.file-types-title {
|
|
92
|
+
color: #606266;
|
|
93
|
+
line-height: 22px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.file-types-category {
|
|
97
|
+
margin-bottom: 4px;
|
|
98
|
+
line-height: 22px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* 独立的 el-checkbox 默认没有间距,且标签会跟着换行错位 */
|
|
102
|
+
.file-types-category .el-checkbox {
|
|
103
|
+
margin-right: 10px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* 全局样式表 src/resources/css/style.scss 在 body 作用域下写了
|
|
108
|
+
* .el-input{width:148px !important},画边框的 .el-input__inner 也跟着只有 148px,
|
|
109
|
+
* 所以这里必须从内容区一路 !important 压到最内层的 input 才能铺满。
|
|
110
|
+
*/
|
|
111
|
+
.file-types-item ::v-deep .el-form-item__content {
|
|
112
|
+
display: block !important;
|
|
113
|
+
width: auto !important;
|
|
114
|
+
margin-left: 0 !important;
|
|
115
|
+
float: none;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.file-types-select {
|
|
119
|
+
display: block;
|
|
120
|
+
width: auto;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.file-types-select ::v-deep .el-select {
|
|
124
|
+
display: block !important;
|
|
125
|
+
width: 100% !important;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.file-types-select ::v-deep .el-select .el-input,
|
|
129
|
+
.file-types-select ::v-deep .el-select .el-input__inner {
|
|
130
|
+
width: 100% !important;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* 标签区是绝对定位盖在输入框上的兄弟节点:
|
|
135
|
+
* max-width 是挂载时按控件宽度算出的内联值,弹窗里量到的偏小,用 !important 盖掉,
|
|
136
|
+
* 并和 element 一样留出右侧 32px 的图标位;
|
|
137
|
+
* pointer-events 置空则是因为清空按钮的显隐挂在 el-input 的 mouseenter/mouseleave 上,
|
|
138
|
+
* 标签层盖住的地方 hover 都算不到 el-input 头上,按钮就只在图标区才出现。
|
|
139
|
+
*/
|
|
140
|
+
.file-types-select ::v-deep .el-select__tags {
|
|
141
|
+
max-width: calc(100% - 32px) !important;
|
|
142
|
+
pointer-events: none;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* 标签上的删除按钮和手工输入框仍要能点 */
|
|
146
|
+
.file-types-select ::v-deep .el-select__tags .el-tag__close,
|
|
147
|
+
.file-types-select ::v-deep .el-select__input {
|
|
148
|
+
pointer-events: auto;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* 手工输入用的内联 input 同样带着按旧宽度算出的内联 max-width,同样留出图标区 */
|
|
152
|
+
.file-types-select ::v-deep .el-select__input {
|
|
153
|
+
max-width: calc(100% - 42px) !important;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
* 全局样式表有 :focus-visible{outline:2px solid 主题色},展开下拉时焦点落在这个
|
|
158
|
+
* 内联输入框上,Chrome 对文本框恒判定 focus-visible,于是框里又套出一圈蓝边。
|
|
159
|
+
* 外层输入框自己已有聚焦态边框,这圈去掉。
|
|
160
|
+
*/
|
|
161
|
+
.file-types-select ::v-deep .el-select__input:focus,
|
|
162
|
+
.file-types-select ::v-deep .el-select__input:focus-visible {
|
|
163
|
+
outline: none;
|
|
164
|
+
}
|
|
165
|
+
</style>
|
|
166
|
+
|
|
167
|
+
<style>
|
|
168
|
+
/*
|
|
169
|
+
* 下拉面板是挂到 body 上的,scoped 样式够不到,只能靠 popper-class 做全局约束。
|
|
170
|
+
* 全局样式表把 .el-select-dropdown__wrap 的 max-height 放大到了 474px,
|
|
171
|
+
* 而这里有 9 个分组共 27 个后缀,面板会高到底部放不下、翻上来盖住整块属性面板。
|
|
172
|
+
*/
|
|
173
|
+
.file-types-select-dropdown .el-select-dropdown__wrap {
|
|
174
|
+
max-height: 320px;
|
|
175
|
+
}
|
|
176
|
+
</style>
|
package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue
CHANGED
|
@@ -315,9 +315,9 @@ export default {
|
|
|
315
315
|
columnSelectedWidget: widget,
|
|
316
316
|
// index: index,
|
|
317
317
|
// columnEditFields: columnEditFields,
|
|
318
|
-
callback: (
|
|
319
|
-
widget.options =
|
|
320
|
-
// this.confirmFormatConfigDialog(
|
|
318
|
+
callback: (columnSelectedWidget) => {
|
|
319
|
+
widget.options = columnSelectedWidget.options
|
|
320
|
+
// this.confirmFormatConfigDialog(columnSelectedWidget, row);
|
|
321
321
|
},
|
|
322
322
|
});
|
|
323
323
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-form-item label="UTC时差转换">
|
|
3
|
+
<el-switch v-model="optionModel.utcTransformEnabled"></el-switch>
|
|
4
|
+
</el-form-item>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import i18n from "../../../../../components/xform/utils/i18n";
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
name: "utcTransformEnabled-editor",
|
|
12
|
+
mixins: [i18n],
|
|
13
|
+
props: {
|
|
14
|
+
designer: Object,
|
|
15
|
+
selectedWidget: Object,
|
|
16
|
+
optionModel: Object,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
</script>
|