cloud-web-corejs 1.0.54-dev.800 → 1.0.54-dev.801
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 +1 -1
- package/src/components/bizTab/BizBillActions.vue +2 -2
- package/src/components/bizTab/bizBillDetailMixin.js +27 -9
- package/src/components/excelExport/exportFieldDialog.vue +11 -9
- package/src/components/table/config.js +6 -4
- package/src/components/table/index.js +78 -22
- package/src/components/table/state.js +42 -0
- package/src/components/table/vxeFilter/index.js +4 -2
- package/src/components/table/vxeFilter/mixin.js +10 -4
- package/src/components/wf/content.vue +4 -0
- package/src/components/wf/wf.js +72 -23
- package/src/components/wf/wfActionDropdown.vue +58 -0
- package/src/components/wf/wfActionItems.js +116 -0
- package/src/components/wf/wfAutoConfirm.js +55 -0
- package/src/components/wf/wfUserRange.js +53 -0
- package/src/components/wf/wfUtil.js +20 -0
- package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +2 -1
- package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +5 -5
- package/src/components/xform/form-designer/setting-panel/form-setting.vue +48 -26
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +16 -19
- package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +13 -12
- package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +16 -18
- package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/afterColumnsCreated-editor.vue +30 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
- package/src/components/xform/form-designer/setting-panel/property-editor/field-common/keyName-editor.vue +4 -4
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +1 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +20 -3
- package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +188 -178
- package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +1 -1
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -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 +35 -2
- package/src/components/xform/form-render/container-item/detail-item.vue +8 -12
- package/src/components/xform/mixins/defaultHandle.js +18 -3
- package/src/views/user/outLink/cc_form_view.vue +33 -30
- package/src/components/xform/form-render/container-item/data-table-mixin copy.js +0 -5910
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<!-- 按钮顺序(.fr 里 DOM 次序即从左到右):
|
|
4
4
|
翻单 → 提交流程 → 业务按钮(默认插槽) → 重置 → 保存
|
|
5
5
|
#before 是留给"要排在翻单之前"的特例,一般不用。
|
|
6
|
-
另外 wfUtil
|
|
6
|
+
另外 wfUtil 的「流程操作」下拉 / 「修改单据」是 append 到本容器最前面的,会落在最左侧。 -->
|
|
7
7
|
<slot name="before"></slot>
|
|
8
8
|
<!-- ① 上一单 / 下一单:列表侧 openDetail 传了 navRows 才出现 -->
|
|
9
9
|
<template v-if="showBillNav">
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
* </div>
|
|
84
84
|
*
|
|
85
85
|
* 注意:根节点是 .d-header 里的 .fr,别再往外包一层,否则布局会散,
|
|
86
|
-
* 而且 wfUtil
|
|
86
|
+
* 而且 wfUtil 的「流程操作」下拉 / 「修改单据」就是往 .el-form .d-header > .fr 里塞的。
|
|
87
87
|
*/
|
|
88
88
|
export default {
|
|
89
89
|
name: "BizBillActions",
|
|
@@ -35,6 +35,14 @@ import {
|
|
|
35
35
|
DEFAULT_SUBMIT_BTN,
|
|
36
36
|
DEFAULT_SAVE_SUBMIT_BTN,
|
|
37
37
|
} from "@base/components/wf/wfButtonName";
|
|
38
|
+
import {
|
|
39
|
+
isWfAutoConfirm,
|
|
40
|
+
loadWfAutoConfirm,
|
|
41
|
+
} from "@base/components/wf/wfAutoConfirm";
|
|
42
|
+
import {
|
|
43
|
+
isWfUserRangeEnabled,
|
|
44
|
+
loadWfUserRange,
|
|
45
|
+
} from "@base/components/wf/wfUserRange";
|
|
38
46
|
|
|
39
47
|
// wf 组件回调 _handleCallback(flag) 的 flag → 页签行为类型
|
|
40
48
|
const WF_FLAG_KIND = {
|
|
@@ -174,6 +182,9 @@ export default {
|
|
|
174
182
|
let dataId = this.tab ? this.tab.dataId : this._dataId;
|
|
175
183
|
this.dataId = dataId == null || dataId === 0 ? null : dataId;
|
|
176
184
|
loadWfButtonNames(this);
|
|
185
|
+
//预热,点击路径上的 await 直接命中缓存
|
|
186
|
+
loadWfAutoConfirm(this);
|
|
187
|
+
loadWfUserRange(this);
|
|
177
188
|
this.checkBillHooks();
|
|
178
189
|
// 登记到宿主:关页签确认要问详情脏没脏、翻单要按 tabName 找回实例
|
|
179
190
|
let host = this.bizTabHost;
|
|
@@ -252,9 +263,8 @@ export default {
|
|
|
252
263
|
showModifyBtn: cfg.showModifyBtn !== false,
|
|
253
264
|
// 自己控制 done 的时机:等详情数据渲染完再挂流程面板,避免取不到 .d-cont
|
|
254
265
|
auto: false,
|
|
255
|
-
//
|
|
256
|
-
|
|
257
|
-
this.$t1(`您确定要${this.submitButtonName}吗?`),
|
|
266
|
+
// 不传 startConfirmText:启动确认文案由 wf.js 按后台 param18 的按钮名统一拼,
|
|
267
|
+
// 这里再拼一遍会让 wf.js 把它当成「模板脚本自定义的提示语」,param19 自动确认就失效了
|
|
258
268
|
callback: (wfParam) => {
|
|
259
269
|
this.wfParam = wfParam || {};
|
|
260
270
|
this.hasWf = !!this.wfParam.hasWf;
|
|
@@ -339,11 +349,18 @@ export default {
|
|
|
339
349
|
if (!(await this.guardSaving())) return false;
|
|
340
350
|
let valid = await this.validateBill();
|
|
341
351
|
if (!valid) return false;
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
352
|
+
// param19 + param12 都开:这道「保存前」的确认框不弹,把确认交给 wfStartDialog——
|
|
353
|
+
// 它在保存之后才探 preStart,探到候选人就由「修改候选人」弹框顶替,探不到才弹确认框。
|
|
354
|
+
// 任一为 false 都当场弹:param12 关着后面不可能有候选人弹框,延后没有意义。
|
|
355
|
+
await Promise.all([loadWfAutoConfirm(this), loadWfUserRange(this)]);
|
|
356
|
+
let autoConfirm = isWfAutoConfirm() && isWfUserRangeEnabled();
|
|
357
|
+
if (!autoConfirm) {
|
|
358
|
+
let confirmText = this.$t1(`您确定要${this.saveSubmitButtonName}吗?`);
|
|
359
|
+
try {
|
|
360
|
+
await this.$baseConfirm(confirmText);
|
|
361
|
+
} catch (e) {
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
347
364
|
}
|
|
348
365
|
let dataId = await this.runSave({ confirm: false, successMsg: false });
|
|
349
366
|
if (dataId == null || dataId === "") return false;
|
|
@@ -355,7 +372,8 @@ export default {
|
|
|
355
372
|
this,
|
|
356
373
|
this.buildWfOption({
|
|
357
374
|
objId: dataId,
|
|
358
|
-
|
|
375
|
+
// 上面确认过就不再弹第二次;上面因 param19 跳过了,就得让弹框自己去确认
|
|
376
|
+
skipStartConfirm: !autoConfirm,
|
|
359
377
|
onStart: null, // 校验/保存都做完了,不再走 wfStartBindSave 那套
|
|
360
378
|
onBeforeStartSubmit: null,
|
|
361
379
|
})
|
|
@@ -168,9 +168,11 @@ export default {
|
|
|
168
168
|
let yesFields = [];
|
|
169
169
|
let noFields = [];
|
|
170
170
|
|
|
171
|
-
let exportColumns =
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
let exportColumns =
|
|
172
|
+
this.$vxeTableUtil.getTableStateValue(
|
|
173
|
+
target,
|
|
174
|
+
!exportItem ? "exportColumns" : "exportItemColumns"
|
|
175
|
+
) || [];
|
|
174
176
|
|
|
175
177
|
this.loopColumnHandle(exportColumns, (item) => {
|
|
176
178
|
if (item.field) {
|
|
@@ -201,7 +203,6 @@ export default {
|
|
|
201
203
|
});
|
|
202
204
|
} else {
|
|
203
205
|
//导出子表数据
|
|
204
|
-
let exportItemColumns = target.exportItemColumns || [];
|
|
205
206
|
let originOption = target.params.originOption;
|
|
206
207
|
let oriExportItemColumns = originOption.exportItemConfig?.columns || [];
|
|
207
208
|
|
|
@@ -246,9 +247,6 @@ export default {
|
|
|
246
247
|
let leafColumns = this.$refs.tree.getCheckedNodes(true);
|
|
247
248
|
let checkLeafIds = leafColumns.map((item) => item.id);
|
|
248
249
|
|
|
249
|
-
// let syncEportItemColumns = $grid.exportItemColumns || [];
|
|
250
|
-
// let syncExportColumns = $grid.exportColumns || [];
|
|
251
|
-
|
|
252
250
|
if (!exportItem) {
|
|
253
251
|
//导出主表数据
|
|
254
252
|
let exportColumns = [];
|
|
@@ -262,7 +260,7 @@ export default {
|
|
|
262
260
|
exportColumns.push(item);
|
|
263
261
|
}
|
|
264
262
|
});
|
|
265
|
-
$grid
|
|
263
|
+
this.$vxeTableUtil.setTableState($grid, "exportColumns", exportColumns);
|
|
266
264
|
} else {
|
|
267
265
|
//导出子表数据
|
|
268
266
|
let exportItemColumns = [];
|
|
@@ -276,7 +274,11 @@ export default {
|
|
|
276
274
|
exportItemColumns.push(item);
|
|
277
275
|
}
|
|
278
276
|
});
|
|
279
|
-
|
|
277
|
+
this.$vxeTableUtil.setTableState(
|
|
278
|
+
$grid,
|
|
279
|
+
"exportItemColumns",
|
|
280
|
+
exportItemColumns
|
|
281
|
+
);
|
|
280
282
|
}
|
|
281
283
|
}
|
|
282
284
|
this.$vxeTableUtil.addTableJson(originOption.vue, $grid, originOption.tableName);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getTableStateValue } from './state';
|
|
2
|
+
|
|
1
3
|
let modules = {};
|
|
2
4
|
|
|
3
5
|
modules = {
|
|
@@ -33,7 +35,7 @@ modules = {
|
|
|
33
35
|
}, ' ' + tableDataInfo.visibleData.length + ' ')
|
|
34
36
|
];
|
|
35
37
|
if (pager) {
|
|
36
|
-
if (pager && $grid
|
|
38
|
+
if (pager && getTableStateValue($grid, 'isQueryAllPage')) {
|
|
37
39
|
celems.push(h('span', '/'));
|
|
38
40
|
celems.push(h('span', {
|
|
39
41
|
attrs: {
|
|
@@ -42,7 +44,7 @@ modules = {
|
|
|
42
44
|
}, ' ' + pager.total));
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
let iconClass = $grid
|
|
47
|
+
let iconClass = getTableStateValue($grid, 'isQueryAllPage') ? 'icon-yincang' : 'el-icon-view';
|
|
46
48
|
|
|
47
49
|
celems.push(h('i', {
|
|
48
50
|
attrs: {
|
|
@@ -53,8 +55,8 @@ modules = {
|
|
|
53
55
|
let refTarget = $grid.$vnode.data.ref;
|
|
54
56
|
let that = $grid.params.originOption.vue;
|
|
55
57
|
let tableName = $grid.params.originOption.tableName;
|
|
56
|
-
$grid.$vxeTableUtil.checkQueryTotal(that, refTarget,
|
|
57
|
-
|
|
58
|
+
$grid.$vxeTableUtil.checkQueryTotal(that, refTarget,
|
|
59
|
+
!getTableStateValue($grid, 'isQueryAllPage'));
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
}));
|
|
@@ -8,6 +8,7 @@ import { extendDeeply } from "../../utils/index.js";
|
|
|
8
8
|
import corejsConfig from "@/corejsConfig";
|
|
9
9
|
import settingConfig from "@/settings.js";
|
|
10
10
|
import { getCellValue, createParams } from "./util/index";
|
|
11
|
+
import { getTableStateValue, setTableState } from "./state";
|
|
11
12
|
|
|
12
13
|
let configUtil = {
|
|
13
14
|
Sortable,
|
|
@@ -78,6 +79,15 @@ async function initVxeTable(option) {
|
|
|
78
79
|
$grid.originOption = originOption;
|
|
79
80
|
option.vue = that;
|
|
80
81
|
|
|
82
|
+
// 运行时状态先收集到局部对象,末尾并入 nOption.params 随 vxeOption 传给表格实例,
|
|
83
|
+
// 保证页面 v-if 销毁重建 grid 后状态不丢(详见 ./state.js)
|
|
84
|
+
let tableState = {
|
|
85
|
+
tableName: tableName || null,
|
|
86
|
+
isQueryAllPage: true,
|
|
87
|
+
exportColumns: null,
|
|
88
|
+
exportItemColumns: null,
|
|
89
|
+
};
|
|
90
|
+
|
|
81
91
|
let isQueryAllPage = true;
|
|
82
92
|
if (option.isQueryAllPage !== null && option.isQueryAllPage !== undefined) {
|
|
83
93
|
isQueryAllPage = option.isQueryAllPage;
|
|
@@ -85,7 +95,7 @@ async function initVxeTable(option) {
|
|
|
85
95
|
|
|
86
96
|
let searchColumns = null;
|
|
87
97
|
if (tableName) {
|
|
88
|
-
$grid
|
|
98
|
+
setTableState($grid, "tableName", tableName);
|
|
89
99
|
if (option.path) {
|
|
90
100
|
await getTableData(that, option.tableRef, "isQueryAllPage", (res1) => {
|
|
91
101
|
let result = res1.objx ? res1.objx.data : null;
|
|
@@ -113,7 +123,7 @@ async function initVxeTable(option) {
|
|
|
113
123
|
json.searchColumns
|
|
114
124
|
);
|
|
115
125
|
$grid.searchColumns = searchColumns;
|
|
116
|
-
initExportColumns($grid, json);
|
|
126
|
+
initExportColumns($grid, tableState, json);
|
|
117
127
|
}
|
|
118
128
|
}
|
|
119
129
|
if (!searchColumns || !searchColumns.length) {
|
|
@@ -137,10 +147,11 @@ async function initVxeTable(option) {
|
|
|
137
147
|
option.isQueryAllPage = isQueryAllPage;
|
|
138
148
|
let nOption = initOption(option);
|
|
139
149
|
|
|
140
|
-
// isQueryAllPage
|
|
141
|
-
// pager 插槽与代理 ajax.query
|
|
150
|
+
// isQueryAllPage 的事实源是 $grid.params(checkQueryTotal 也写这里),
|
|
151
|
+
// pager 插槽与代理 ajax.query 均读它,初始化必须回写,
|
|
142
152
|
// 否则首屏恒为 undefined:既丢用户存的偏好,也让页面配置的 false 不生效。
|
|
143
|
-
|
|
153
|
+
tableState.isQueryAllPage = isQueryAllPage;
|
|
154
|
+
setTableState($grid, "isQueryAllPage", isQueryAllPage);
|
|
144
155
|
|
|
145
156
|
if (tableName) {
|
|
146
157
|
nOption.tableName = tableName;
|
|
@@ -157,12 +168,14 @@ async function initVxeTable(option) {
|
|
|
157
168
|
// nOption.getCellValue = getCellValue;
|
|
158
169
|
// nOption.createParams = createParams;
|
|
159
170
|
// nOption.searchColumns = searchColumns;
|
|
160
|
-
//
|
|
171
|
+
// 运行时可变状态(tableName / isQueryAllPage / exportColumns / exportItemColumns)
|
|
172
|
+
// 一并放进 params:params 随 vxeOption 由页面持有,grid 被 v-if 销毁重建后依然带着这些值
|
|
161
173
|
let params = {
|
|
162
174
|
originOption,
|
|
163
175
|
getCellValue,
|
|
164
176
|
createParams,
|
|
165
177
|
searchColumns,
|
|
178
|
+
...tableState,
|
|
166
179
|
};
|
|
167
180
|
if (!nOption.params) nOption.params = {};
|
|
168
181
|
Object.assign(nOption.params, params);
|
|
@@ -193,6 +206,35 @@ function handleToolbar($grid, option) {
|
|
|
193
206
|
}
|
|
194
207
|
}
|
|
195
208
|
|
|
209
|
+
/**
|
|
210
|
+
* grid 被 v-if 销毁重建后调用(页面把 showTable 从 false 切回 true 之类)。
|
|
211
|
+
*
|
|
212
|
+
* 状态类(tableName / isQueryAllPage / exportColumns…)已经随 params 跨重建存活,
|
|
213
|
+
* 这里只重做「绑在实例或 DOM 上、params 带不走」的那部分:
|
|
214
|
+
* - columnDrop:Sortable 绑的是旧表头 DOM,重建后新表头上什么都没有,列拖拽会静默失效;
|
|
215
|
+
* - handleToolbar:$grid.connect(toolbar) 是实例间的连接,重建后失联。
|
|
216
|
+
* 必须等新 grid 渲染出表头再绑,所以整体放在 $nextTick 里。
|
|
217
|
+
*/
|
|
218
|
+
function rebindGrid(that, tableRef) {
|
|
219
|
+
let $grid = getGrid(that, tableRef);
|
|
220
|
+
let originOption = $grid && $grid.params && $grid.params.originOption;
|
|
221
|
+
if (!originOption) {
|
|
222
|
+
// 没走过 initVxeTable 的表格没有 params.originOption,无从重绑
|
|
223
|
+
return Promise.resolve(false);
|
|
224
|
+
}
|
|
225
|
+
$grid.originOption = originOption;
|
|
226
|
+
// vxeFilter 已改为直接 import 工具函数,这里补挂只为兼容直接读 $table.getCellValue 的业务代码
|
|
227
|
+
if ($grid.$refs && $grid.$refs.xTable) {
|
|
228
|
+
$grid.$refs.xTable.getCellValue = getCellValue;
|
|
229
|
+
$grid.$refs.xTable.createParams = createParams;
|
|
230
|
+
}
|
|
231
|
+
return $grid.$nextTick().then(() => {
|
|
232
|
+
columnDrop(that, originOption.tableName, tableRef);
|
|
233
|
+
handleToolbar($grid, originOption);
|
|
234
|
+
return true;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
196
238
|
//操作列自动补全
|
|
197
239
|
function handleCustomAlign(option) {
|
|
198
240
|
let selfConfig = getSelfConfig();
|
|
@@ -270,6 +312,16 @@ function columnDrop(t, tableName, tableRef) {
|
|
|
270
312
|
if (!$table) {
|
|
271
313
|
return;
|
|
272
314
|
}
|
|
315
|
+
// 表头尚未渲染(grid 刚被 v-if 重建、DOM 还没就绪)时 querySelector 返回 null,
|
|
316
|
+
// Sortable.create(null) 会直接抛错,这里降级为不绑定,由调用方在 $nextTick 后重试
|
|
317
|
+
const headerElem =
|
|
318
|
+
$table.$el &&
|
|
319
|
+
$table.$el.querySelector(
|
|
320
|
+
".body--wrapper>.vxe-table--header .vxe-header--row"
|
|
321
|
+
);
|
|
322
|
+
if (!headerElem) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
273
325
|
// if (!$table.params) $table.params = {};
|
|
274
326
|
if ($table.sortable) {
|
|
275
327
|
$table.sortable.destroy();
|
|
@@ -278,9 +330,7 @@ function columnDrop(t, tableName, tableRef) {
|
|
|
278
330
|
let dragStartIndex = -1;
|
|
279
331
|
let dragEndIndex = -1;
|
|
280
332
|
$table.sortable = configUtil.Sortable.create(
|
|
281
|
-
|
|
282
|
-
".body--wrapper>.vxe-table--header .vxe-header--row"
|
|
283
|
-
),
|
|
333
|
+
headerElem,
|
|
284
334
|
{
|
|
285
335
|
handle: ".vxe-header--column:not(.col--fixed)",
|
|
286
336
|
onMove: (a, b, c) => {
|
|
@@ -546,7 +596,7 @@ function initOption(opts) {
|
|
|
546
596
|
" " + tableDataInfo.visibleData.length + " "
|
|
547
597
|
),
|
|
548
598
|
];
|
|
549
|
-
if (pager && $grid
|
|
599
|
+
if (pager && getTableStateValue($grid, "isQueryAllPage")) {
|
|
550
600
|
celems.push(
|
|
551
601
|
h(
|
|
552
602
|
"span",
|
|
@@ -648,7 +698,7 @@ function initOption(opts) {
|
|
|
648
698
|
}
|
|
649
699
|
|
|
650
700
|
let $grid = getGrid(that, opts.tableRef);
|
|
651
|
-
let isQueryAllPage = $grid
|
|
701
|
+
let isQueryAllPage = getTableStateValue($grid, "isQueryAllPage");
|
|
652
702
|
let pathStr1 = "";
|
|
653
703
|
if (isQueryAllPage === false) {
|
|
654
704
|
queryParams.searchCount = false;
|
|
@@ -926,11 +976,13 @@ function addTableJson(that, $grid, tableName, columns, success) {
|
|
|
926
976
|
columns: saveColumn,
|
|
927
977
|
searchColumns: searchColumns,
|
|
928
978
|
};
|
|
929
|
-
|
|
930
|
-
|
|
979
|
+
let exportColumns = getTableStateValue($grid, "exportColumns");
|
|
980
|
+
let exportItemColumns = getTableStateValue($grid, "exportItemColumns");
|
|
981
|
+
if (exportColumns && exportColumns.length) {
|
|
982
|
+
jsonData.exportColumns = exportColumns;
|
|
931
983
|
}
|
|
932
|
-
if (
|
|
933
|
-
jsonData.exportItemColumns =
|
|
984
|
+
if (exportItemColumns && exportItemColumns.length) {
|
|
985
|
+
jsonData.exportItemColumns = exportItemColumns;
|
|
934
986
|
}
|
|
935
987
|
let json = encodeURIComponent(JSON.stringify(jsonData));
|
|
936
988
|
|
|
@@ -1020,12 +1072,14 @@ function initColumn(option, syncColumns) {
|
|
|
1020
1072
|
return newColumns;
|
|
1021
1073
|
}
|
|
1022
1074
|
|
|
1023
|
-
function initExportColumns($grid, json) {
|
|
1075
|
+
function initExportColumns($grid, tableState, json) {
|
|
1024
1076
|
if (json?.exportColumns?.length) {
|
|
1025
|
-
|
|
1077
|
+
tableState.exportColumns = json.exportColumns;
|
|
1078
|
+
setTableState($grid, "exportColumns", json.exportColumns);
|
|
1026
1079
|
}
|
|
1027
1080
|
if (json?.exportItemColumns?.length) {
|
|
1028
|
-
|
|
1081
|
+
tableState.exportItemColumns = json.exportItemColumns;
|
|
1082
|
+
setTableState($grid, "exportItemColumns", json.exportItemColumns);
|
|
1029
1083
|
}
|
|
1030
1084
|
}
|
|
1031
1085
|
|
|
@@ -1141,7 +1195,7 @@ function getTableData(that, tableRef, type, success) {
|
|
|
1141
1195
|
)
|
|
1142
1196
|
return false;
|
|
1143
1197
|
let $grid = getGrid(that, tableRef);
|
|
1144
|
-
let tableName = $grid
|
|
1198
|
+
let tableName = getTableStateValue($grid, "tableName");
|
|
1145
1199
|
let url = USER_PREFIX + "/table_column/getTableData";
|
|
1146
1200
|
let param = {
|
|
1147
1201
|
tableName: tableName,
|
|
@@ -1163,7 +1217,7 @@ function addTableData(that, tableRef, value, success) {
|
|
|
1163
1217
|
)
|
|
1164
1218
|
return false;
|
|
1165
1219
|
let $grid = getGrid(that, tableRef);
|
|
1166
|
-
let tableName = $grid
|
|
1220
|
+
let tableName = getTableStateValue($grid, "tableName");
|
|
1167
1221
|
if (tableName) {
|
|
1168
1222
|
that.$http({
|
|
1169
1223
|
method: "post",
|
|
@@ -1180,8 +1234,7 @@ function addTableData(that, tableRef, value, success) {
|
|
|
1180
1234
|
|
|
1181
1235
|
function checkQueryTotal(that, tableRef, value) {
|
|
1182
1236
|
let $grid = getGrid(that, tableRef);
|
|
1183
|
-
$grid
|
|
1184
|
-
let tableName = $grid.tableName;
|
|
1237
|
+
setTableState($grid, "isQueryAllPage", value);
|
|
1185
1238
|
let option = $grid.getProxyInfo();
|
|
1186
1239
|
let pagerConfig = $grid.pagerConfig;
|
|
1187
1240
|
|
|
@@ -1201,6 +1254,7 @@ function getPagerConfigLayouts(opts) {
|
|
|
1201
1254
|
modules = {
|
|
1202
1255
|
initVxeTable,
|
|
1203
1256
|
columnDrop,
|
|
1257
|
+
rebindGrid,
|
|
1204
1258
|
initOption,
|
|
1205
1259
|
getTableJson,
|
|
1206
1260
|
addTableJson,
|
|
@@ -1212,6 +1266,8 @@ modules = {
|
|
|
1212
1266
|
checkQueryTotal,
|
|
1213
1267
|
getCellValue,
|
|
1214
1268
|
createParams,
|
|
1269
|
+
getTableStateValue,
|
|
1270
|
+
setTableState,
|
|
1215
1271
|
};
|
|
1216
1272
|
|
|
1217
1273
|
if (!configUtil.Vue.prototype.$vxeTableUtil)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格运行时状态收口。
|
|
3
|
+
*
|
|
4
|
+
* 背景:initVxeTable 早期把 tableName / isQueryAllPage / exportColumns 等运行时状态
|
|
5
|
+
* 直接挂在 vxe-grid 实例上。页面若用 v-if 销毁重建 grid 而不重跑 initVxeTable
|
|
6
|
+
* (如 pmd/product_problem_record/list.vue 里 showTable false→true 那一段),
|
|
7
|
+
* 新实例上这些属性全为 undefined,表现为:
|
|
8
|
+
* - 导出字段勾选丢失,且下次 addTableJson 会把服务端已存的 exportColumns 一并抹掉;
|
|
9
|
+
* - “查询全部页”偏好静默存不进去(tableName 取不到);
|
|
10
|
+
* - 分页器 total 与切换图标状态错乱(isQueryAllPage 恒 falsy)。
|
|
11
|
+
* 同源问题还导致过筛选面板的 $table.getCellValue is not a function。
|
|
12
|
+
*
|
|
13
|
+
* 现在统一存放在 $grid.params 上:params 对象随 vxeOption 由页面持有,
|
|
14
|
+
* 重建时原样传给新实例,因此状态可以跨重建存活。
|
|
15
|
+
*
|
|
16
|
+
* 兼容:写入时同步回写 $grid 实例属性,读取时 params 里没有再回落到实例属性。
|
|
17
|
+
* 未经 initVxeTable 初始化的表格(xform 自建 option 等)行为与改造前完全一致。
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** 读状态:优先 params,回落实例属性 */
|
|
21
|
+
export function getTableStateValue($grid, key) {
|
|
22
|
+
if (!$grid) return undefined;
|
|
23
|
+
let params = $grid.params;
|
|
24
|
+
if (params) {
|
|
25
|
+
let value = params[key];
|
|
26
|
+
if (value !== undefined && value !== null) return value;
|
|
27
|
+
}
|
|
28
|
+
return $grid[key];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** 写状态:params 与实例属性同时写,保证新旧读法都拿到同一个值 */
|
|
32
|
+
export function setTableState($grid, key, value) {
|
|
33
|
+
if (!$grid) return;
|
|
34
|
+
// params 是 prop 对象,只改其中的 key,不整体重新赋值
|
|
35
|
+
if ($grid.params) $grid.params[key] = value;
|
|
36
|
+
$grid[key] = value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default {
|
|
40
|
+
getTableStateValue,
|
|
41
|
+
setTableState,
|
|
42
|
+
};
|
|
@@ -3,6 +3,8 @@ import XEUtils from 'xe-utils';
|
|
|
3
3
|
import FilterComplex from './FilterComplex.vue';
|
|
4
4
|
import FilterContent from './FilterContent.vue';
|
|
5
5
|
import FilterInput from './FilterInput.vue';
|
|
6
|
+
// 同 mixin.js:直接引用工具函数,避免依赖 $table 实例上的补丁方法
|
|
7
|
+
import { getCellValue } from '../util/index';
|
|
6
8
|
|
|
7
9
|
let moudule = {};
|
|
8
10
|
let configUtil = {
|
|
@@ -77,7 +79,7 @@ configUtil.VXETable.renderer.add('FilterContent', {
|
|
|
77
79
|
const {
|
|
78
80
|
vals
|
|
79
81
|
} = option.data;
|
|
80
|
-
let cellValue =
|
|
82
|
+
let cellValue = getCellValue(obj);
|
|
81
83
|
return vals.includes(cellValue);
|
|
82
84
|
}
|
|
83
85
|
});
|
|
@@ -140,7 +142,7 @@ configUtil.VXETable.renderer.add('FilterInput', {
|
|
|
140
142
|
data
|
|
141
143
|
} = option;
|
|
142
144
|
|
|
143
|
-
let cellValue =
|
|
145
|
+
let cellValue = getCellValue(obj);
|
|
144
146
|
|
|
145
147
|
if (cellValue) {
|
|
146
148
|
return cellValue.indexOf(data) > -1;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
// 直接引用工具函数,不走 $table 实例上的补丁方法:
|
|
2
|
+
// initVxeTable 只把 getCellValue/createParams 挂在初始化时的那个 xTable 实例上,
|
|
3
|
+
// 页面若用 v-if 销毁重建 vxe-grid(如 product_problem_record/list.vue),
|
|
4
|
+
// 新实例上没有这两个方法,筛选面板会报 $table.getCellValue is not a function
|
|
5
|
+
import { getCellValue, createParams } from "../util/index";
|
|
6
|
+
|
|
1
7
|
let modules = {};
|
|
2
8
|
|
|
3
9
|
modules = {
|
|
@@ -51,7 +57,7 @@ modules = {
|
|
|
51
57
|
let lsm = {};
|
|
52
58
|
let colValList = [];
|
|
53
59
|
fullData.map((row, $rowIndex) => {
|
|
54
|
-
let cellValue =
|
|
60
|
+
let cellValue = getCellValue({
|
|
55
61
|
row,
|
|
56
62
|
$rowIndex,
|
|
57
63
|
$table,
|
|
@@ -100,19 +106,19 @@ modules = {
|
|
|
100
106
|
return false;
|
|
101
107
|
}
|
|
102
108
|
const vals = option1.data.vals || [];
|
|
103
|
-
let param =
|
|
109
|
+
let param = createParams({
|
|
104
110
|
$table: $table,
|
|
105
111
|
row,
|
|
106
112
|
column: filterColumn,
|
|
107
113
|
});
|
|
108
|
-
let cellValue =
|
|
114
|
+
let cellValue = getCellValue(param);
|
|
109
115
|
return !vals.includes(cellValue);
|
|
110
116
|
});
|
|
111
117
|
return item == null;
|
|
112
118
|
});
|
|
113
119
|
let lsm2 = {};
|
|
114
120
|
datas.map((row, $rowIndex) => {
|
|
115
|
-
let cellValue =
|
|
121
|
+
let cellValue = getCellValue({
|
|
116
122
|
row,
|
|
117
123
|
$rowIndex,
|
|
118
124
|
$table,
|
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
v-if="!isHideWf"
|
|
7
7
|
>
|
|
8
8
|
<template #default>
|
|
9
|
+
<!-- 审批按钮条留在流程模块内,不随 wfActionInHeaderEnabled 搬走或隐藏。
|
|
10
|
+
开了该开关时,详情标题栏另挂一份「流程操作」下拉(wfActionDropdown.vue)。 -->
|
|
9
11
|
<div
|
|
12
|
+
ref="wfActionBar"
|
|
10
13
|
style="margin: -36px 0 8px 124px; position: relative; z-index: 2; height: 28px"
|
|
11
14
|
v-if="!wfConfig.hiddenAllButton"
|
|
12
15
|
>
|
|
@@ -97,6 +100,7 @@
|
|
|
97
100
|
</el-button>
|
|
98
101
|
<addOpinionButton
|
|
99
102
|
v-if="showAddOpinionButton"
|
|
103
|
+
ref="addOpinionBtn"
|
|
100
104
|
@confirm="reloadContent()"
|
|
101
105
|
:wfInfo="wfInfo"
|
|
102
106
|
:wfSendTaskId="wfSendTaskId"
|