@cimom-ui/standard-ui 1.1.14 → 1.1.16

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/README.md CHANGED
@@ -92,7 +92,7 @@ export default {
92
92
  ## 注意事项
93
93
 
94
94
  - 先 `Vue.use(ElementUI)`、`Vue.use(VXETable)`,再注册本库。按钮、输入框、下拉、时间选择内部固定 `size="mini"`,页面传 `size` 不会改掉。
95
- - 全局注册请带上 `moduleCode` 和 `request`。表格「调整」会按「登录用户 + 模块 + 页面 + 表格」读写表头配置,接口路径固定为 `/api/Migration/UserTableColumn/GetConfig`、`SaveConfig`、`ResetConfig`。没传 `request` 时不访问服务端。同一页面里每个表格的 `table-code` 必须唯一;不传时用组件 `ref`,`ref` 也没有则不读写配置。`page-code` 不传时用当前路由 `name`,没有 `name` 时用去掉查询参数的 `path`。
95
+ - 全局注册请带上 `moduleCode` 和 `request`。表格渲染从浏览器本地存储 `TableSetting` 读取表头,按「模块编码/页面编码/表格编码」取对应 `CLAYOUT`,不再逐表调用 `GetConfig`。保存和恢复默认仍调用 `/api/Migration/UserTableColumn/SaveConfig`、`ResetConfig`,成功后回写 `TableSetting` 里的对应项。`GetConfig` 不接收模块、页面、表格参数,返回当前用户全部布局,由其它程序调用后写入 `TableSetting`。没传 `request` 时不访问服务端,仍可读已有缓存。同一页面里每个表格的 `table-code` 必须唯一;不传时用组件 `ref`,`ref` 也没有则不读写配置。`page-code` 不传时用当前路由 `name`,没有 `name` 时用去掉查询参数的 `path`。
96
96
  - `<standard-filterbar>` 必须接 `@search`,否则校验失败、整块不渲染,并在控制台输出 `[StandardFilterbar]` 错误。筛选值写在传入对象的属性上,运行中不要整体替换 `searchBar` 或 `searchVariable`。
97
97
  - 筛选栏默认插槽里只认 `<standard-filterbar-item>`。插槽项排在 `searchCondition` 前面,一个插槽项算一条条件。首行放不下的进「更多」或「高级查询」。`isMain` 可以写在配置里,不再决定谁在首行。
98
98
  - `<standard-dialog>` 的 `@confirm` 不关闭弹窗,业务成功后再改 `v-model`。点击遮罩默认不关闭。标题栏默认可拖拽,再次打开回到居中。
@@ -121522,8 +121522,8 @@ var StandardTimePick_component = normalizeComponent(
121522
121522
  )
121523
121523
 
121524
121524
  /* harmony default export */ const StandardTimePick = (StandardTimePick_component.exports);
121525
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=template&id=b1d59d54
121526
- var StandardTablevue_type_template_id_b1d59d54_render = function render() {
121525
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=template&id=24e29a8b
121526
+ var StandardTablevue_type_template_id_24e29a8b_render = function render() {
121527
121527
  var _vm = this,
121528
121528
  _c = _vm._self._c;
121529
121529
  return _c('section', {
@@ -121858,7 +121858,7 @@ var StandardTablevue_type_template_id_b1d59d54_render = function render() {
121858
121858
  }
121859
121859
  }) : _vm.getFooterEmptyVisible() ? _c('standard-footer-empty') : _vm._e()], 1);
121860
121860
  };
121861
- var StandardTablevue_type_template_id_b1d59d54_staticRenderFns = [];
121861
+ var StandardTablevue_type_template_id_24e29a8b_staticRenderFns = [];
121862
121862
 
121863
121863
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/ToolbarEmpty.vue?vue&type=script&lang=js
121864
121864
  /**
@@ -121950,9 +121950,9 @@ var FooterEmpty_component = normalizeComponent(
121950
121950
  * 表头配置接口。路径固定,请求方法由业务项目注入。
121951
121951
  * IP 和端口来自该请求方法自己的 baseURL,组件库不保存主机地址。
121952
121952
  */
121953
- var GET_CONFIG = '/api/Migration/UserTableColumn/GetConfig';
121954
- var SAVE_CONFIG = '/api/Migration/UserTableColumn/SaveConfig';
121955
- var RESET_CONFIG = '/api/Migration/UserTableColumn/ResetConfig';
121953
+ var GET_CONFIG = '/api/SYS/UserTableColumn/GetUserTableConfig';
121954
+ var SAVE_CONFIG = '/api/SYS/UserTableColumn/SaveUserTableConfig';
121955
+ var RESET_CONFIG = '/api/SYS/UserTableColumn/ResetUserTableConfig';
121956
121956
  var columnConfigApi = null;
121957
121957
  var columnModuleCode = '';
121958
121958
 
@@ -121964,15 +121964,11 @@ function setColumnConfigRequest(request) {
121964
121964
  return;
121965
121965
  }
121966
121966
  columnConfigApi = {
121967
- get: function get(moduleCode, pageCode, tableCode) {
121967
+ // 一次取当前用户的全部表头。表格渲染不调用它,由业务程序写入本地 TableSetting
121968
+ get: function get() {
121968
121969
  return request({
121969
121970
  url: GET_CONFIG,
121970
- method: 'get',
121971
- params: {
121972
- moduleCode: moduleCode,
121973
- pageCode: pageCode,
121974
- tableCode: tableCode
121975
- }
121971
+ method: 'get'
121976
121972
  });
121977
121973
  },
121978
121974
  save: function save(moduleCode, pageCode, tableCode, columns) {
@@ -122027,6 +122023,9 @@ function releaseTableCode(moduleCode, pageCode, tableCode, owner) {
122027
122023
  if (tableCodeOwners[key] === owner) delete tableCodeOwners[key];
122028
122024
  }
122029
122025
  ;// ./src/components/StandardTable/columnPersist.js
122026
+ function columnPersist_defineProperty(e, r, t) { return (r = columnPersist_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
122027
+ function columnPersist_toPropertyKey(t) { var i = columnPersist_toPrimitive(t, "string"); return "symbol" == columnPersist_typeof(i) ? i : i + ""; }
122028
+ function columnPersist_toPrimitive(t, r) { if ("object" != columnPersist_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != columnPersist_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
122030
122029
  function columnPersist_typeof(o) { "@babel/helpers - typeof"; return columnPersist_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, columnPersist_typeof(o); }
122031
122030
  /**
122032
122031
  * 表头配置的列主键、合并和提交数据。
@@ -122252,6 +122251,161 @@ function readColumnConfigDatas(res) {
122252
122251
  var content = res && res.data && res.data.Content;
122253
122252
  throw new Error(content || '表头配置请求失败');
122254
122253
  }
122254
+
122255
+ // 其它程序把 GetConfig 的响应写入 localStorage.TableSetting。键为「模块/页面/表格」,值为 CLAYOUT 原文。
122256
+ var TABLE_SETTING_STORE = 'TableSetting';
122257
+ function buildColumnSettingKey(moduleCode, pageCode, tableCode) {
122258
+ return moduleCode + '/' + pageCode + '/' + tableCode;
122259
+ }
122260
+ function readTableSettingRoot() {
122261
+ if (typeof window === 'undefined' || !window.localStorage) return {
122262
+ missing: true
122263
+ };
122264
+ try {
122265
+ var raw = window.localStorage.getItem(TABLE_SETTING_STORE);
122266
+ if (raw == null || raw === '') return {
122267
+ missing: true
122268
+ };
122269
+ var root = JSON.parse(raw);
122270
+ // 个别调用方会把已经 stringify 过的响应再存一次
122271
+ if (typeof root === 'string') root = JSON.parse(root);
122272
+ return {
122273
+ missing: false,
122274
+ root: root
122275
+ };
122276
+ } catch (e) {
122277
+ console.warn('[StandardTable] TableSetting 解析失败');
122278
+ return {
122279
+ invalid: true
122280
+ };
122281
+ }
122282
+ }
122283
+ function writeTableSettingRoot(root) {
122284
+ window.localStorage.setItem(TABLE_SETTING_STORE, JSON.stringify(root));
122285
+ }
122286
+
122287
+ // 响应可能整包存入,也可能只存 Datas。沿 code/data/Datas 找到字典数组。
122288
+ function findLayoutArray(node, depth) {
122289
+ if (depth > 5 || node == null) return null;
122290
+ if (Array.isArray(node)) {
122291
+ if (!node.length || node.every(function (item) {
122292
+ return item && columnPersist_typeof(item) === 'object' && !Array.isArray(item);
122293
+ })) return node;
122294
+ return null;
122295
+ }
122296
+ if (columnPersist_typeof(node) !== 'object') return null;
122297
+ var fields = ['Datas', 'datas', 'data'];
122298
+ for (var i = 0; i < fields.length; i++) {
122299
+ if (!Object.prototype.hasOwnProperty.call(node, fields[i])) continue;
122300
+ var found = findLayoutArray(node[fields[i]], depth + 1);
122301
+ if (found) return found;
122302
+ }
122303
+ return null;
122304
+ }
122305
+ function isFlatLayoutMap(node) {
122306
+ if (!node || columnPersist_typeof(node) !== 'object' || Array.isArray(node)) return false;
122307
+ return Object.keys(node).some(function (key) {
122308
+ return key.indexOf('/') >= 0;
122309
+ });
122310
+ }
122311
+
122312
+ // Datas 为 null 的成功响应,补一个空数组后再写入,避免改掉外层结构
122313
+ function ensureLayoutArray(root) {
122314
+ var list = findLayoutArray(root, 0);
122315
+ if (list) return list;
122316
+ if (!root || columnPersist_typeof(root) !== 'object' || Array.isArray(root)) return null;
122317
+ var holder = root.data && columnPersist_typeof(root.data) === 'object' && !Array.isArray(root.data) && ('Datas' in root.data || 'datas' in root.data || 'Success' in root.data) ? root.data : 'Datas' in root || 'Success' in root ? root : null;
122318
+ if (!holder) return null;
122319
+ var field = 'datas' in holder && !('Datas' in holder) ? 'datas' : 'Datas';
122320
+ holder[field] = [];
122321
+ return holder[field];
122322
+ }
122323
+
122324
+ // CLAYOUT 是列数组的 JSON 字符串。兼容已解析的数组,以及旧的 { Columns } 结构。
122325
+ function parseLayoutColumns(value) {
122326
+ var data = value;
122327
+ for (var i = 0; i < 2 && typeof data === 'string'; i++) {
122328
+ var text = data.trim();
122329
+ if (!text) return null;
122330
+ try {
122331
+ data = JSON.parse(text);
122332
+ } catch (e) {
122333
+ return null;
122334
+ }
122335
+ }
122336
+ if (Array.isArray(data)) return data;
122337
+ if (data && columnPersist_typeof(data) === 'object') {
122338
+ var columns = data.Columns != null ? data.Columns : data.columns;
122339
+ if (Array.isArray(columns)) return columns;
122340
+ }
122341
+ return null;
122342
+ }
122343
+ function layoutJson(columns) {
122344
+ return JSON.stringify(Array.isArray(columns) ? columns : []);
122345
+ }
122346
+ function readCachedColumnLayout(moduleCode, pageCode, tableCode) {
122347
+ var stored = readTableSettingRoot();
122348
+ if (stored.missing || stored.invalid) return null;
122349
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122350
+ var list = findLayoutArray(stored.root, 0);
122351
+ if (list) {
122352
+ for (var i = list.length - 1; i >= 0; i--) {
122353
+ var item = list[i];
122354
+ if (item && Object.prototype.hasOwnProperty.call(item, key)) return parseLayoutColumns(item[key]);
122355
+ }
122356
+ return null;
122357
+ }
122358
+ if (isFlatLayoutMap(stored.root) && Object.prototype.hasOwnProperty.call(stored.root, key)) {
122359
+ return parseLayoutColumns(stored.root[key]);
122360
+ }
122361
+ return null;
122362
+ }
122363
+ function updateCachedColumnLayout(moduleCode, pageCode, tableCode, columns) {
122364
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122365
+ var value = layoutJson(columns);
122366
+ var stored = readTableSettingRoot();
122367
+ if (stored.invalid) return;
122368
+ if (stored.missing) {
122369
+ writeTableSettingRoot([columnPersist_defineProperty({}, key, value)]);
122370
+ return;
122371
+ }
122372
+ var list = ensureLayoutArray(stored.root);
122373
+ if (list) {
122374
+ var hit = null;
122375
+ for (var i = 0; i < list.length; i++) {
122376
+ if (list[i] && Object.prototype.hasOwnProperty.call(list[i], key)) hit = list[i];
122377
+ }
122378
+ if (hit) hit[key] = value;else list.push(columnPersist_defineProperty({}, key, value));
122379
+ writeTableSettingRoot(stored.root);
122380
+ return;
122381
+ }
122382
+ if (isFlatLayoutMap(stored.root)) {
122383
+ stored.root[key] = value;
122384
+ writeTableSettingRoot(stored.root);
122385
+ return;
122386
+ }
122387
+ console.warn('[StandardTable] TableSetting 结构无法识别,未更新本地表头配置');
122388
+ }
122389
+ function removeCachedColumnLayout(moduleCode, pageCode, tableCode) {
122390
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122391
+ var stored = readTableSettingRoot();
122392
+ if (stored.missing || stored.invalid) return;
122393
+ var list = findLayoutArray(stored.root, 0);
122394
+ if (list) {
122395
+ for (var i = list.length - 1; i >= 0; i--) {
122396
+ var item = list[i];
122397
+ if (!item || !Object.prototype.hasOwnProperty.call(item, key)) continue;
122398
+ delete item[key];
122399
+ if (!Object.keys(item).length) list.splice(i, 1);
122400
+ }
122401
+ writeTableSettingRoot(stored.root);
122402
+ return;
122403
+ }
122404
+ if (isFlatLayoutMap(stored.root) && Object.prototype.hasOwnProperty.call(stored.root, key)) {
122405
+ delete stored.root[key];
122406
+ writeTableSettingRoot(stored.root);
122407
+ }
122408
+ }
122255
122409
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=script&lang=js
122256
122410
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || StandardTablevue_type_script_lang_js_unsupportedIterableToArray(r, e) || _nonIterableRest(); }
122257
122411
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -122863,9 +123017,11 @@ var NormalReportSlotView = {
122863
123017
  clearTimeout(this.columnConfigTimer);
122864
123018
  this.columnConfigTimer = null;
122865
123019
  }
123020
+ // 直接改表头的保存还在 3 秒防抖里,离开页面时把最后一次调整写回去
122866
123021
  if (this.columnConfigSaveTimer) {
122867
123022
  clearTimeout(this.columnConfigSaveTimer);
122868
123023
  this.columnConfigSaveTimer = null;
123024
+ this.persistColumnConfig();
122869
123025
  }
122870
123026
  this.releaseColumnConfigClaim();
122871
123027
  this.destroyResizeObserver();
@@ -123790,7 +123946,8 @@ var NormalReportSlotView = {
123790
123946
  this.columnConfigReady = !!getColumnModuleCode() && !!tableCode && !this.columnConfigDisabled;
123791
123947
  this.columnsReady = true;
123792
123948
  this.scheduleInitialLayout();
123793
- if (this.columnConfigDirty) this.persistColumnConfig();
123949
+ // 加载完成前已经直接改过表头时,同样等 3 秒再保存,避免和后续拖拽各打一次接口
123950
+ if (this.columnConfigDirty) this.schedulePersistColumnConfig();
123794
123951
  },
123795
123952
  bootstrapColumnConfig: function bootstrapColumnConfig() {
123796
123953
  var _this22 = this;
@@ -123831,28 +123988,14 @@ var NormalReportSlotView = {
123831
123988
  this.finishColumnConfigLoad();
123832
123989
  return;
123833
123990
  }
123991
+ var columns = readCachedColumnLayout(moduleCode, pageCode, tableCode);
123834
123992
  var api = getColumnConfigApi();
123835
- if (!api || typeof api.get !== 'function') {
123836
- console.warn('[StandardTable] 未注入 request,表头配置不会加载');
123993
+ if (!api || typeof api.save !== 'function') {
123994
+ console.warn('[StandardTable] 未注入 request,表头配置不会保存');
123837
123995
  this.columnConfigDisabled = true;
123838
- this.finishColumnConfigLoad();
123839
- return;
123840
123996
  }
123841
- this.columnConfigTimer = setTimeout(function () {
123842
- if (_this22.columnConfigSettled) return;
123843
- if (_this22.$message) _this22.$message.warning('表头配置加载超时,已使用默认列');
123844
- _this22.finishColumnConfigLoad();
123845
- }, 3000);
123846
- Promise.resolve(api.get(moduleCode, pageCode, tableCode)).then(function (res) {
123847
- var datas = readColumnConfigDatas(res);
123848
- var columns = readSavedColumns(datas);
123849
- _this22.finishColumnConfigLoad(function () {
123850
- if (columns && columns.length) _this22.applyMergedColumnConfig(columns);
123851
- });
123852
- })["catch"](function (err) {
123853
- if (_this22.columnConfigSettled) return;
123854
- if (_this22.$message) _this22.$message.warning(err && err.message || '表头配置加载失败,已使用默认列');
123855
- _this22.finishColumnConfigLoad();
123997
+ this.finishColumnConfigLoad(function () {
123998
+ if (columns && columns.length) _this22.applyMergedColumnConfig(columns);
123856
123999
  });
123857
124000
  },
123858
124001
  applyMergedColumnConfig: function applyMergedColumnConfig(savedColumns) {
@@ -123876,6 +124019,8 @@ var NormalReportSlotView = {
123876
124019
  this.$set(st, 'width', Math.min(width, 2000));
123877
124020
  this.schedulePersistColumnConfig();
123878
124021
  },
124022
+ // 直接改表头(拖列宽、拖换列、右键改排序或固定)时防抖:停手 3 秒后才保存。
124023
+ // 「调整」弹层点确认走 persistColumnConfigNow,不经过这里。
123879
124024
  schedulePersistColumnConfig: function schedulePersistColumnConfig() {
123880
124025
  var _this24 = this;
123881
124026
  this.columnConfigDirty = true;
@@ -123884,7 +124029,7 @@ var NormalReportSlotView = {
123884
124029
  this.columnConfigSaveTimer = setTimeout(function () {
123885
124030
  _this24.columnConfigSaveTimer = null;
123886
124031
  _this24.persistColumnConfig();
123887
- }, 500);
124032
+ }, 3000);
123888
124033
  },
123889
124034
  persistColumnConfigNow: function persistColumnConfigNow() {
123890
124035
  this.columnConfigDirty = true;
@@ -123909,6 +124054,7 @@ var NormalReportSlotView = {
123909
124054
  if (!request) return;
123910
124055
  Promise.resolve(request).then(function (res) {
123911
124056
  readColumnConfigDatas(res);
124057
+ if (useReset) removeCachedColumnLayout(moduleCode, pageCode, tableCode);else updateCachedColumnLayout(moduleCode, pageCode, tableCode, columns);
123912
124058
  var content = res && res.data && res.data.Content || res && res.Content || '表头配置保存成功';
123913
124059
  if (_this25.$message) _this25.$message.success(content);
123914
124060
  })["catch"](function (err) {
@@ -123934,8 +124080,8 @@ var StandardTablevue_type_style_index_0_prod_lang_scss_external = __webpack_requ
123934
124080
 
123935
124081
  var StandardTable_component = normalizeComponent(
123936
124082
  components_StandardTablevue_type_script_lang_js,
123937
- StandardTablevue_type_template_id_b1d59d54_render,
123938
- StandardTablevue_type_template_id_b1d59d54_staticRenderFns,
124083
+ StandardTablevue_type_template_id_24e29a8b_render,
124084
+ StandardTablevue_type_template_id_24e29a8b_staticRenderFns,
123939
124085
  false,
123940
124086
  null,
123941
124087
  null,
@@ -121532,8 +121532,8 @@ var StandardTimePick_component = normalizeComponent(
121532
121532
  )
121533
121533
 
121534
121534
  /* harmony default export */ const StandardTimePick = (StandardTimePick_component.exports);
121535
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=template&id=b1d59d54
121536
- var StandardTablevue_type_template_id_b1d59d54_render = function render() {
121535
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=template&id=24e29a8b
121536
+ var StandardTablevue_type_template_id_24e29a8b_render = function render() {
121537
121537
  var _vm = this,
121538
121538
  _c = _vm._self._c;
121539
121539
  return _c('section', {
@@ -121868,7 +121868,7 @@ var StandardTablevue_type_template_id_b1d59d54_render = function render() {
121868
121868
  }
121869
121869
  }) : _vm.getFooterEmptyVisible() ? _c('standard-footer-empty') : _vm._e()], 1);
121870
121870
  };
121871
- var StandardTablevue_type_template_id_b1d59d54_staticRenderFns = [];
121871
+ var StandardTablevue_type_template_id_24e29a8b_staticRenderFns = [];
121872
121872
 
121873
121873
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/ToolbarEmpty.vue?vue&type=script&lang=js
121874
121874
  /**
@@ -121960,9 +121960,9 @@ var FooterEmpty_component = normalizeComponent(
121960
121960
  * 表头配置接口。路径固定,请求方法由业务项目注入。
121961
121961
  * IP 和端口来自该请求方法自己的 baseURL,组件库不保存主机地址。
121962
121962
  */
121963
- var GET_CONFIG = '/api/Migration/UserTableColumn/GetConfig';
121964
- var SAVE_CONFIG = '/api/Migration/UserTableColumn/SaveConfig';
121965
- var RESET_CONFIG = '/api/Migration/UserTableColumn/ResetConfig';
121963
+ var GET_CONFIG = '/api/SYS/UserTableColumn/GetUserTableConfig';
121964
+ var SAVE_CONFIG = '/api/SYS/UserTableColumn/SaveUserTableConfig';
121965
+ var RESET_CONFIG = '/api/SYS/UserTableColumn/ResetUserTableConfig';
121966
121966
  var columnConfigApi = null;
121967
121967
  var columnModuleCode = '';
121968
121968
 
@@ -121974,15 +121974,11 @@ function setColumnConfigRequest(request) {
121974
121974
  return;
121975
121975
  }
121976
121976
  columnConfigApi = {
121977
- get: function get(moduleCode, pageCode, tableCode) {
121977
+ // 一次取当前用户的全部表头。表格渲染不调用它,由业务程序写入本地 TableSetting
121978
+ get: function get() {
121978
121979
  return request({
121979
121980
  url: GET_CONFIG,
121980
- method: 'get',
121981
- params: {
121982
- moduleCode: moduleCode,
121983
- pageCode: pageCode,
121984
- tableCode: tableCode
121985
- }
121981
+ method: 'get'
121986
121982
  });
121987
121983
  },
121988
121984
  save: function save(moduleCode, pageCode, tableCode, columns) {
@@ -122037,6 +122033,9 @@ function releaseTableCode(moduleCode, pageCode, tableCode, owner) {
122037
122033
  if (tableCodeOwners[key] === owner) delete tableCodeOwners[key];
122038
122034
  }
122039
122035
  ;// ./src/components/StandardTable/columnPersist.js
122036
+ function columnPersist_defineProperty(e, r, t) { return (r = columnPersist_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
122037
+ function columnPersist_toPropertyKey(t) { var i = columnPersist_toPrimitive(t, "string"); return "symbol" == columnPersist_typeof(i) ? i : i + ""; }
122038
+ function columnPersist_toPrimitive(t, r) { if ("object" != columnPersist_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != columnPersist_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
122040
122039
  function columnPersist_typeof(o) { "@babel/helpers - typeof"; return columnPersist_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, columnPersist_typeof(o); }
122041
122040
  /**
122042
122041
  * 表头配置的列主键、合并和提交数据。
@@ -122262,6 +122261,161 @@ function readColumnConfigDatas(res) {
122262
122261
  var content = res && res.data && res.data.Content;
122263
122262
  throw new Error(content || '表头配置请求失败');
122264
122263
  }
122264
+
122265
+ // 其它程序把 GetConfig 的响应写入 localStorage.TableSetting。键为「模块/页面/表格」,值为 CLAYOUT 原文。
122266
+ var TABLE_SETTING_STORE = 'TableSetting';
122267
+ function buildColumnSettingKey(moduleCode, pageCode, tableCode) {
122268
+ return moduleCode + '/' + pageCode + '/' + tableCode;
122269
+ }
122270
+ function readTableSettingRoot() {
122271
+ if (typeof window === 'undefined' || !window.localStorage) return {
122272
+ missing: true
122273
+ };
122274
+ try {
122275
+ var raw = window.localStorage.getItem(TABLE_SETTING_STORE);
122276
+ if (raw == null || raw === '') return {
122277
+ missing: true
122278
+ };
122279
+ var root = JSON.parse(raw);
122280
+ // 个别调用方会把已经 stringify 过的响应再存一次
122281
+ if (typeof root === 'string') root = JSON.parse(root);
122282
+ return {
122283
+ missing: false,
122284
+ root: root
122285
+ };
122286
+ } catch (e) {
122287
+ console.warn('[StandardTable] TableSetting 解析失败');
122288
+ return {
122289
+ invalid: true
122290
+ };
122291
+ }
122292
+ }
122293
+ function writeTableSettingRoot(root) {
122294
+ window.localStorage.setItem(TABLE_SETTING_STORE, JSON.stringify(root));
122295
+ }
122296
+
122297
+ // 响应可能整包存入,也可能只存 Datas。沿 code/data/Datas 找到字典数组。
122298
+ function findLayoutArray(node, depth) {
122299
+ if (depth > 5 || node == null) return null;
122300
+ if (Array.isArray(node)) {
122301
+ if (!node.length || node.every(function (item) {
122302
+ return item && columnPersist_typeof(item) === 'object' && !Array.isArray(item);
122303
+ })) return node;
122304
+ return null;
122305
+ }
122306
+ if (columnPersist_typeof(node) !== 'object') return null;
122307
+ var fields = ['Datas', 'datas', 'data'];
122308
+ for (var i = 0; i < fields.length; i++) {
122309
+ if (!Object.prototype.hasOwnProperty.call(node, fields[i])) continue;
122310
+ var found = findLayoutArray(node[fields[i]], depth + 1);
122311
+ if (found) return found;
122312
+ }
122313
+ return null;
122314
+ }
122315
+ function isFlatLayoutMap(node) {
122316
+ if (!node || columnPersist_typeof(node) !== 'object' || Array.isArray(node)) return false;
122317
+ return Object.keys(node).some(function (key) {
122318
+ return key.indexOf('/') >= 0;
122319
+ });
122320
+ }
122321
+
122322
+ // Datas 为 null 的成功响应,补一个空数组后再写入,避免改掉外层结构
122323
+ function ensureLayoutArray(root) {
122324
+ var list = findLayoutArray(root, 0);
122325
+ if (list) return list;
122326
+ if (!root || columnPersist_typeof(root) !== 'object' || Array.isArray(root)) return null;
122327
+ var holder = root.data && columnPersist_typeof(root.data) === 'object' && !Array.isArray(root.data) && ('Datas' in root.data || 'datas' in root.data || 'Success' in root.data) ? root.data : 'Datas' in root || 'Success' in root ? root : null;
122328
+ if (!holder) return null;
122329
+ var field = 'datas' in holder && !('Datas' in holder) ? 'datas' : 'Datas';
122330
+ holder[field] = [];
122331
+ return holder[field];
122332
+ }
122333
+
122334
+ // CLAYOUT 是列数组的 JSON 字符串。兼容已解析的数组,以及旧的 { Columns } 结构。
122335
+ function parseLayoutColumns(value) {
122336
+ var data = value;
122337
+ for (var i = 0; i < 2 && typeof data === 'string'; i++) {
122338
+ var text = data.trim();
122339
+ if (!text) return null;
122340
+ try {
122341
+ data = JSON.parse(text);
122342
+ } catch (e) {
122343
+ return null;
122344
+ }
122345
+ }
122346
+ if (Array.isArray(data)) return data;
122347
+ if (data && columnPersist_typeof(data) === 'object') {
122348
+ var columns = data.Columns != null ? data.Columns : data.columns;
122349
+ if (Array.isArray(columns)) return columns;
122350
+ }
122351
+ return null;
122352
+ }
122353
+ function layoutJson(columns) {
122354
+ return JSON.stringify(Array.isArray(columns) ? columns : []);
122355
+ }
122356
+ function readCachedColumnLayout(moduleCode, pageCode, tableCode) {
122357
+ var stored = readTableSettingRoot();
122358
+ if (stored.missing || stored.invalid) return null;
122359
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122360
+ var list = findLayoutArray(stored.root, 0);
122361
+ if (list) {
122362
+ for (var i = list.length - 1; i >= 0; i--) {
122363
+ var item = list[i];
122364
+ if (item && Object.prototype.hasOwnProperty.call(item, key)) return parseLayoutColumns(item[key]);
122365
+ }
122366
+ return null;
122367
+ }
122368
+ if (isFlatLayoutMap(stored.root) && Object.prototype.hasOwnProperty.call(stored.root, key)) {
122369
+ return parseLayoutColumns(stored.root[key]);
122370
+ }
122371
+ return null;
122372
+ }
122373
+ function updateCachedColumnLayout(moduleCode, pageCode, tableCode, columns) {
122374
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122375
+ var value = layoutJson(columns);
122376
+ var stored = readTableSettingRoot();
122377
+ if (stored.invalid) return;
122378
+ if (stored.missing) {
122379
+ writeTableSettingRoot([columnPersist_defineProperty({}, key, value)]);
122380
+ return;
122381
+ }
122382
+ var list = ensureLayoutArray(stored.root);
122383
+ if (list) {
122384
+ var hit = null;
122385
+ for (var i = 0; i < list.length; i++) {
122386
+ if (list[i] && Object.prototype.hasOwnProperty.call(list[i], key)) hit = list[i];
122387
+ }
122388
+ if (hit) hit[key] = value;else list.push(columnPersist_defineProperty({}, key, value));
122389
+ writeTableSettingRoot(stored.root);
122390
+ return;
122391
+ }
122392
+ if (isFlatLayoutMap(stored.root)) {
122393
+ stored.root[key] = value;
122394
+ writeTableSettingRoot(stored.root);
122395
+ return;
122396
+ }
122397
+ console.warn('[StandardTable] TableSetting 结构无法识别,未更新本地表头配置');
122398
+ }
122399
+ function removeCachedColumnLayout(moduleCode, pageCode, tableCode) {
122400
+ var key = buildColumnSettingKey(moduleCode, pageCode, tableCode);
122401
+ var stored = readTableSettingRoot();
122402
+ if (stored.missing || stored.invalid) return;
122403
+ var list = findLayoutArray(stored.root, 0);
122404
+ if (list) {
122405
+ for (var i = list.length - 1; i >= 0; i--) {
122406
+ var item = list[i];
122407
+ if (!item || !Object.prototype.hasOwnProperty.call(item, key)) continue;
122408
+ delete item[key];
122409
+ if (!Object.keys(item).length) list.splice(i, 1);
122410
+ }
122411
+ writeTableSettingRoot(stored.root);
122412
+ return;
122413
+ }
122414
+ if (isFlatLayoutMap(stored.root) && Object.prototype.hasOwnProperty.call(stored.root, key)) {
122415
+ delete stored.root[key];
122416
+ writeTableSettingRoot(stored.root);
122417
+ }
122418
+ }
122265
122419
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/StandardTable/index.vue?vue&type=script&lang=js
122266
122420
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || StandardTablevue_type_script_lang_js_unsupportedIterableToArray(r, e) || _nonIterableRest(); }
122267
122421
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -122873,9 +123027,11 @@ var NormalReportSlotView = {
122873
123027
  clearTimeout(this.columnConfigTimer);
122874
123028
  this.columnConfigTimer = null;
122875
123029
  }
123030
+ // 直接改表头的保存还在 3 秒防抖里,离开页面时把最后一次调整写回去
122876
123031
  if (this.columnConfigSaveTimer) {
122877
123032
  clearTimeout(this.columnConfigSaveTimer);
122878
123033
  this.columnConfigSaveTimer = null;
123034
+ this.persistColumnConfig();
122879
123035
  }
122880
123036
  this.releaseColumnConfigClaim();
122881
123037
  this.destroyResizeObserver();
@@ -123800,7 +123956,8 @@ var NormalReportSlotView = {
123800
123956
  this.columnConfigReady = !!getColumnModuleCode() && !!tableCode && !this.columnConfigDisabled;
123801
123957
  this.columnsReady = true;
123802
123958
  this.scheduleInitialLayout();
123803
- if (this.columnConfigDirty) this.persistColumnConfig();
123959
+ // 加载完成前已经直接改过表头时,同样等 3 秒再保存,避免和后续拖拽各打一次接口
123960
+ if (this.columnConfigDirty) this.schedulePersistColumnConfig();
123804
123961
  },
123805
123962
  bootstrapColumnConfig: function bootstrapColumnConfig() {
123806
123963
  var _this22 = this;
@@ -123841,28 +123998,14 @@ var NormalReportSlotView = {
123841
123998
  this.finishColumnConfigLoad();
123842
123999
  return;
123843
124000
  }
124001
+ var columns = readCachedColumnLayout(moduleCode, pageCode, tableCode);
123844
124002
  var api = getColumnConfigApi();
123845
- if (!api || typeof api.get !== 'function') {
123846
- console.warn('[StandardTable] 未注入 request,表头配置不会加载');
124003
+ if (!api || typeof api.save !== 'function') {
124004
+ console.warn('[StandardTable] 未注入 request,表头配置不会保存');
123847
124005
  this.columnConfigDisabled = true;
123848
- this.finishColumnConfigLoad();
123849
- return;
123850
124006
  }
123851
- this.columnConfigTimer = setTimeout(function () {
123852
- if (_this22.columnConfigSettled) return;
123853
- if (_this22.$message) _this22.$message.warning('表头配置加载超时,已使用默认列');
123854
- _this22.finishColumnConfigLoad();
123855
- }, 3000);
123856
- Promise.resolve(api.get(moduleCode, pageCode, tableCode)).then(function (res) {
123857
- var datas = readColumnConfigDatas(res);
123858
- var columns = readSavedColumns(datas);
123859
- _this22.finishColumnConfigLoad(function () {
123860
- if (columns && columns.length) _this22.applyMergedColumnConfig(columns);
123861
- });
123862
- })["catch"](function (err) {
123863
- if (_this22.columnConfigSettled) return;
123864
- if (_this22.$message) _this22.$message.warning(err && err.message || '表头配置加载失败,已使用默认列');
123865
- _this22.finishColumnConfigLoad();
124007
+ this.finishColumnConfigLoad(function () {
124008
+ if (columns && columns.length) _this22.applyMergedColumnConfig(columns);
123866
124009
  });
123867
124010
  },
123868
124011
  applyMergedColumnConfig: function applyMergedColumnConfig(savedColumns) {
@@ -123886,6 +124029,8 @@ var NormalReportSlotView = {
123886
124029
  this.$set(st, 'width', Math.min(width, 2000));
123887
124030
  this.schedulePersistColumnConfig();
123888
124031
  },
124032
+ // 直接改表头(拖列宽、拖换列、右键改排序或固定)时防抖:停手 3 秒后才保存。
124033
+ // 「调整」弹层点确认走 persistColumnConfigNow,不经过这里。
123889
124034
  schedulePersistColumnConfig: function schedulePersistColumnConfig() {
123890
124035
  var _this24 = this;
123891
124036
  this.columnConfigDirty = true;
@@ -123894,7 +124039,7 @@ var NormalReportSlotView = {
123894
124039
  this.columnConfigSaveTimer = setTimeout(function () {
123895
124040
  _this24.columnConfigSaveTimer = null;
123896
124041
  _this24.persistColumnConfig();
123897
- }, 500);
124042
+ }, 3000);
123898
124043
  },
123899
124044
  persistColumnConfigNow: function persistColumnConfigNow() {
123900
124045
  this.columnConfigDirty = true;
@@ -123919,6 +124064,7 @@ var NormalReportSlotView = {
123919
124064
  if (!request) return;
123920
124065
  Promise.resolve(request).then(function (res) {
123921
124066
  readColumnConfigDatas(res);
124067
+ if (useReset) removeCachedColumnLayout(moduleCode, pageCode, tableCode);else updateCachedColumnLayout(moduleCode, pageCode, tableCode, columns);
123922
124068
  var content = res && res.data && res.data.Content || res && res.Content || '表头配置保存成功';
123923
124069
  if (_this25.$message) _this25.$message.success(content);
123924
124070
  })["catch"](function (err) {
@@ -123944,8 +124090,8 @@ var StandardTablevue_type_style_index_0_prod_lang_scss_external = __webpack_requ
123944
124090
 
123945
124091
  var StandardTable_component = normalizeComponent(
123946
124092
  components_StandardTablevue_type_script_lang_js,
123947
- StandardTablevue_type_template_id_b1d59d54_render,
123948
- StandardTablevue_type_template_id_b1d59d54_staticRenderFns,
124093
+ StandardTablevue_type_template_id_24e29a8b_render,
124094
+ StandardTablevue_type_template_id_24e29a8b_staticRenderFns,
123949
124095
  false,
123950
124096
  null,
123951
124097
  null,