cloud-web-corejs 1.0.54-dev.786 → 1.0.54-dev.787
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 +2 -1
- package/src/components/VabUpload/index.vue +1 -1
- package/src/components/excelImport/index.js +69 -7
- package/src/components/excelImport/mixins.js +841 -9
- package/src/components/fileLibrary/fileHistoryDialog.vue +1 -1
- package/src/components/fileLibrary/fileObjAuthEdit.vue +1 -1
- package/src/components/fileLibrary/filterDialog.vue +1 -1
- package/src/components/formDialog/README.md +324 -241
- package/src/components/formDialog/actionButtons.js +90 -0
- package/src/components/formDialog/index.js +48 -35
- package/src/components/formDialog/index.vue +802 -724
- package/src/components/formDrawer/drawer.vue +719 -0
- package/src/components/formDrawer/index.js +50 -0
- package/src/components/onlineTalk/talkUserDialog.vue +1 -1
- package/src/components/tempStorage/tempStorageDialog.vue +1 -1
- package/src/components/wf/addTaskUserdialog.vue +1 -1
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +115 -4
- package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +102 -5
- package/src/components/xform/form-designer/form-widget/dialog/formFieldDialog.vue +1 -1
- package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +1 -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-setting.vue +116 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +6 -0
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +1 -0
- package/src/components/xform/form-render/container-item/data-table-mixin.js +1460 -1460
- package/src/components/xform/form-render/container-item/detail-item.vue +11 -2
- package/src/components/xform/form-render/indexMixin.js +5 -0
- package/src/index.js +506 -472
- package/src/utils/lazyPlugin.js +66 -0
- 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 +1 -1
- 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 +1 -1
- 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_template/dialog.vue +1 -1
- 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 +1 -1
- package/src/views/bd/setting/form_template/wf_list.vue +1 -1
- 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/support/export_template/list.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/common_attribute/list.vue +1 -1
- 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 +1 -1
- package/src/views/user/extend_datasource/list.vue +1 -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/form/form_template/dialog.vue +1 -1
- package/src/views/user/form/form_template/itemList.vue +1 -1
- package/src/views/user/form/form_template/list.vue +1 -1
- package/src/views/user/form/form_template_field/dialog.vue +1 -1
- package/src/views/user/form/form_type/dialog.vue +1 -1
- package/src/views/user/form/form_type/list.vue +1 -1
- package/src/views/user/form/report_requestaccess/dialog.vue +1 -1
- package/src/views/user/form/report_requestaccess/list.vue +1 -1
- package/src/views/user/groups/dialog.vue +1 -1
- package/src/views/user/groups/list.vue +1 -1
- 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/menu/list.vue +1 -1
- package/src/views/user/mobile_menu/list.vue +1 -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/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/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/wfReport/index.vue +2 -2
- package/src/views/user/wf/wf_auto_submit_data/list.vue +2 -2
- package/src/views/user/wf/wf_manage/list.vue +2 -2
- package/src/views/user/wf/wf_manage/list2.vue +2 -2
- 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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* formConfig.actionButtons 公共逻辑:formDialog / formDrawer 共用。
|
|
3
|
+
* 配置结构(存表单模板 formViewContent 的 formConfig 上,设计器"操作按钮"面板维护):
|
|
4
|
+
* { code, label, type, plain, icon, authName, needValidate, closeAfter, visible, onClick }
|
|
5
|
+
* 语义约定见 docs/formDrawer抽屉与formDialog按钮配置改造方案.md §3.1。
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** 调用方 buttons 覆盖模板配置;两者都没有则返回 null(壳回退默认取消/确定) */
|
|
9
|
+
export function resolveActionButtons(callerButtons, formConfig) {
|
|
10
|
+
const raw
|
|
11
|
+
= (Array.isArray(callerButtons) && callerButtons.length && callerButtons)
|
|
12
|
+
|| (formConfig
|
|
13
|
+
&& Array.isArray(formConfig.actionButtons)
|
|
14
|
+
&& formConfig.actionButtons.length
|
|
15
|
+
&& formConfig.actionButtons)
|
|
16
|
+
|| null;
|
|
17
|
+
if (!raw) return null;
|
|
18
|
+
return raw.map((btn, index) => ({
|
|
19
|
+
needValidate: false,
|
|
20
|
+
closeAfter: true,
|
|
21
|
+
...btn,
|
|
22
|
+
code: btn.code || `button_${index}`,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** 按钮权限:denylist——formCode:authName 在 dispermissions 中则无权;未配 authName 放行 */
|
|
27
|
+
export function hasButtonPermission(btn, formCode, vm) {
|
|
28
|
+
if (!btn.authName || !formCode) return true;
|
|
29
|
+
const dispermissions
|
|
30
|
+
= (vm && vm.$store && vm.$store.getters.dispermissions) || [];
|
|
31
|
+
return !dispermissions.includes(`${formCode}:${btn.authName}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** visible 脚本:handleCustomEvent 执行(this = 表单实例),显式返回 false 才隐藏 */
|
|
35
|
+
export function isButtonVisible(btn, formRef) {
|
|
36
|
+
if (!btn.visible) return true;
|
|
37
|
+
if (!formRef) return true; // 表单未挂载前先渲染,挂载后重渲染时再求值
|
|
38
|
+
return formRef.handleCustomEvent(btn.visible, ["button"], [btn]) !== false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 执行按钮:needValidate 校验 → onClick 脚本 → done/closeAfter 收口。
|
|
43
|
+
* 脚本签名 onClick(formData, dialog, done, selection),this = VFormRender 实例。
|
|
44
|
+
* 返回 false / reject 均不关闭;未显式调 done 且 closeAfter 时自动以表单数据收口。
|
|
45
|
+
* @returns {Promise} 完成(无论是否收口)后 resolve,供壳侧解除按钮 loading
|
|
46
|
+
*/
|
|
47
|
+
export function runActionButton(btn, { formRef, host, getSelection, onSettle }) {
|
|
48
|
+
if (!formRef) return Promise.resolve();
|
|
49
|
+
|
|
50
|
+
const validate = () =>
|
|
51
|
+
new Promise((resolve) => {
|
|
52
|
+
if (!btn.needValidate) return resolve(true);
|
|
53
|
+
formRef.validateForm((valid) => resolve(!!valid));
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const getFormData = () =>
|
|
57
|
+
host.$baseLodash
|
|
58
|
+
? host.$baseLodash.cloneDeep(formRef.getFormData(false))
|
|
59
|
+
: formRef.getFormData(false);
|
|
60
|
+
|
|
61
|
+
return validate().then((valid) => {
|
|
62
|
+
if (!valid) return;
|
|
63
|
+
let doneCalled = false;
|
|
64
|
+
const done = (data) => {
|
|
65
|
+
doneCalled = true;
|
|
66
|
+
onSettle(
|
|
67
|
+
{ action: btn.code, data: data === undefined ? getFormData() : data },
|
|
68
|
+
btn.closeAfter !== false
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
const selection
|
|
72
|
+
= typeof getSelection === "function" ? getSelection() || [] : [];
|
|
73
|
+
const result = formRef.handleCustomEvent(
|
|
74
|
+
btn.onClick,
|
|
75
|
+
["formData", "dialog", "done", "selection"],
|
|
76
|
+
[formRef.getFormData(false), host, done, selection]
|
|
77
|
+
);
|
|
78
|
+
if (result === false) return;
|
|
79
|
+
return Promise.resolve(result)
|
|
80
|
+
.then(() => {
|
|
81
|
+
// 脚本成功且未手动收口:closeAfter 时自动以表单数据收口,否则保持打开
|
|
82
|
+
if (!doneCalled && btn.closeAfter !== false) {
|
|
83
|
+
onSettle({ action: btn.code, data: getFormData() }, true);
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
.catch(() => {
|
|
87
|
+
// 脚本 reject:不关闭,由脚本自行提示错误
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -1,35 +1,48 @@
|
|
|
1
|
-
const modules = {};
|
|
2
|
-
import vue from "vue";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
const modules = {};
|
|
2
|
+
import vue from "vue";
|
|
3
|
+
|
|
4
|
+
// 壳组件懒加载:首屏只留本入口几十行,index.vue(含 xform 渲染链路)随首次调用进独立 chunk
|
|
5
|
+
let FormDialogCtor = null;
|
|
6
|
+
|
|
7
|
+
function loadCtor() {
|
|
8
|
+
if (FormDialogCtor) return Promise.resolve(FormDialogCtor);
|
|
9
|
+
return import(
|
|
10
|
+
/* webpackChunkName: "form-dialog" */ "./index.vue"
|
|
11
|
+
).then((m) => {
|
|
12
|
+
FormDialogCtor = vue.extend(m.default);
|
|
13
|
+
return FormDialogCtor;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* JS 调用打开表单弹框。每次调用创建独立实例,支持叠开多层。
|
|
19
|
+
* 确定(校验通过)resolve 表单数据,取消/关闭 resolve(null),不使用 reject。
|
|
20
|
+
* 配置了自定义按钮(formConfig.actionButtons / options.buttons)时 resolve {action, data}。
|
|
21
|
+
*/
|
|
22
|
+
function open(options = {}) {
|
|
23
|
+
return loadCtor().then((Ctor) => {
|
|
24
|
+
const parent
|
|
25
|
+
= typeof window !== "undefined" && window.$vueRoot ? window.$vueRoot : null;
|
|
26
|
+
const instanceOptions = {};
|
|
27
|
+
if (parent) {
|
|
28
|
+
instanceOptions.parent = parent;
|
|
29
|
+
if (parent._i18n) {
|
|
30
|
+
instanceOptions.i18n = parent._i18n;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const instance = new Ctor(instanceOptions);
|
|
34
|
+
instance.$mount();
|
|
35
|
+
document.body.appendChild(instance.$el);
|
|
36
|
+
return instance.open(options);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 定义插件对象
|
|
41
|
+
// vue的install方法,用于定义vue插件
|
|
42
|
+
modules.install = function (Vue) {
|
|
43
|
+
// 在Vue的原型上添加实例方法,以全局调用
|
|
44
|
+
Vue.prototype.$formDialog = open;
|
|
45
|
+
};
|
|
46
|
+
modules.open = open;
|
|
47
|
+
|
|
48
|
+
export default modules;
|