@ibiz-template/runtime 0.7.41-alpha.5 → 0.7.41-alpha.6

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.
Files changed (26) hide show
  1. package/dist/index.esm.js +198 -65
  2. package/dist/index.system.min.js +1 -1
  3. package/out/controller/control/chart/generator/base-series-generator.d.ts +12 -5
  4. package/out/controller/control/chart/generator/base-series-generator.d.ts.map +1 -1
  5. package/out/controller/control/chart/generator/base-series-generator.js +55 -24
  6. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.d.ts +18 -6
  7. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.d.ts.map +1 -1
  8. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.js +57 -25
  9. package/out/controller/utils/util/util.d.ts +15 -0
  10. package/out/controller/utils/util/util.d.ts.map +1 -1
  11. package/out/controller/utils/util/util.js +57 -5
  12. package/out/engine/md-view.engine.d.ts +1 -1
  13. package/out/engine/md-view.engine.d.ts.map +1 -1
  14. package/out/engine/md-view.engine.js +13 -1
  15. package/out/interface/api/controller/control/i-api-chart.controller.d.ts +1 -0
  16. package/out/interface/api/controller/control/i-api-chart.controller.d.ts.map +1 -1
  17. package/out/interface/api/util/i-api-file-util.d.ts +65 -4
  18. package/out/interface/api/util/i-api-file-util.d.ts.map +1 -1
  19. package/out/interface/controller/event/argument/data-change.event.d.ts +4 -5
  20. package/out/interface/controller/event/argument/data-change.event.d.ts.map +1 -1
  21. package/out/service/vo/code-list-data-item/code-list-data-item.d.ts.map +1 -1
  22. package/out/service/vo/code-list-data-item/code-list-data-item.js +8 -1
  23. package/out/utils/file-util/file-util.d.ts +20 -3
  24. package/out/utils/file-util/file-util.d.ts.map +1 -1
  25. package/out/utils/file-util/file-util.js +43 -12
  26. package/package.json +2 -2
@@ -246,12 +246,19 @@ export declare class BaseSeriesGenerator<T extends IDEChartSeries = IDEChartSeri
246
246
  */
247
247
  sortTimeData(data: GroupData): void;
248
248
  /**
249
- * 根据分组模式补全分组数据并排序
250
- * @param {IData} data
251
- * @return {*}
252
- * @author: zhujiamin
253
- * @Date: 2023-08-16 13:57:53
249
+ * @description 根据分组模式补全时间数据
250
+ * - 将最小日期和最大日期之间的数据补全,确保横坐标时间的连续性
251
+ * @param {GroupData} data
252
+ * @returns {*} {void}
253
+ * @memberof BaseSeriesGenerator
254
254
  */
255
255
  addTimeData(data: GroupData): void;
256
+ /**
257
+ * @description 根据分组模式计算时间数据
258
+ * - 只计算有值的日期,展示关键信息数据,多用于横轴日期显示跨度大的情况
259
+ * @param {GroupData} data
260
+ * @memberof BaseSeriesGenerator
261
+ */
262
+ calcTimeData(data: GroupData): void;
256
263
  }
257
264
  //# sourceMappingURL=base-series-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-series-generator.d.ts","sourceRoot":"","sources":["../../../../../src/controller/control/chart/generator/base-series-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-series-generator.d.ts","sourceRoot":"","sources":["../../../../../src/controller/control/chart/generator/base-series-generator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-unused-expressions */
1
2
  import { plus, RuntimeModelError, toNumberOrNil } from '@ibiz-template/core';
2
3
  import dayjs from 'dayjs';
3
4
  import minMax from 'dayjs/plugin/minMax';
@@ -8,6 +9,7 @@ import isoWeek from 'dayjs/plugin/isoWeek';
8
9
  import { clone, isNil, mergeDeepRight } from 'ramda';
9
10
  import { parseUserParams, } from './chart-options-generator';
10
11
  import { ChartData } from '../../../../service';
12
+ import { generateYearWeekRange } from '../../../utils';
11
13
  dayjs.extend(minMax);
12
14
  dayjs.extend(isSameOrBefore);
13
15
  dayjs.extend(quarterOfYear);
@@ -554,9 +556,16 @@ export class BaseSeriesGenerator {
554
556
  * @return {*} {(SeriesOption[] | SeriesOption)}
555
557
  */
556
558
  calcByData(data) {
559
+ const { userParam, echartsType } = this.model;
557
560
  const tempData = this.dataPreprocess(data);
558
561
  const groupData = this.calcGroupData(tempData);
559
- this.addTimeData(groupData);
562
+ // 判断是否补全日期(无横轴序列默认不补全(饼图,仪表盘,雷达图,漏斗图),有横轴序列默认补全)
563
+ const noCompletionDate = (userParam === null || userParam === void 0 ? void 0 : userParam.completiondate) === 'false' ||
564
+ (echartsType &&
565
+ ['pie', 'gauge', 'radar', 'funnel'].includes(echartsType));
566
+ noCompletionDate
567
+ ? this.calcTimeData(groupData)
568
+ : this.addTimeData(groupData);
560
569
  return this.calcGroupSeries(groupData);
561
570
  }
562
571
  /**
@@ -659,17 +668,16 @@ export class BaseSeriesGenerator {
659
668
  });
660
669
  }
661
670
  /**
662
- * 根据分组模式补全分组数据并排序
663
- * @param {IData} data
664
- * @return {*}
665
- * @author: zhujiamin
666
- * @Date: 2023-08-16 13:57:53
671
+ * @description 根据分组模式补全时间数据
672
+ * - 将最小日期和最大日期之间的数据补全,确保横坐标时间的连续性
673
+ * @param {GroupData} data
674
+ * @returns {*} {void}
675
+ * @memberof BaseSeriesGenerator
667
676
  */
668
677
  addTimeData(data) {
669
678
  const { groupMode } = this.model;
670
- if (!groupMode || groupMode === 'CODELIST') {
679
+ if (!groupMode || groupMode === 'CODELIST')
671
680
  return;
672
- }
673
681
  const dates = [];
674
682
  // 遍历数据,生成日期数组
675
683
  Object.keys(data).forEach(key => {
@@ -749,7 +757,7 @@ export class BaseSeriesGenerator {
749
757
  }
750
758
  else if (groupMode === 'YEARWEEK') {
751
759
  // 找出最大和最小年周
752
- const yearWeeks = [];
760
+ let yearWeeks = [];
753
761
  Object.keys(data).forEach(key => {
754
762
  data[key].forEach((_val, yearWeek) => {
755
763
  yearWeeks.push(yearWeek);
@@ -757,23 +765,46 @@ export class BaseSeriesGenerator {
757
765
  });
758
766
  const minYearWeek = yearWeeks.reduce((min, current) => (current < min ? current : min), yearWeeks[0]);
759
767
  const maxYearWeek = yearWeeks.reduce((max, current) => (current > max ? current : max), yearWeeks[0]);
760
- // 解析最小和最大年周
761
- const [minYear] = minYearWeek.split('-');
762
- const [maxYear] = maxYearWeek.split('-');
763
- // 填充中间年周的数据项
764
- for (let year = parseInt(minYear, 10); year <= parseInt(maxYear, 10); year++) {
765
- const numWeeks = dayjs(`${year}-12-31`).isoWeek();
766
- for (let week = 1; week <= numWeeks; week++) {
767
- const yearWeek = `${year}-${week}`;
768
- Object.keys(data).forEach(key => {
769
- if (!data[key].get(yearWeek)) {
770
- data[key].set(yearWeek, { value: 0 });
771
- }
772
- });
773
- }
774
- }
768
+ // 只解析开始周和结束周前后3周,防止数据过大
769
+ yearWeeks = generateYearWeekRange(minYearWeek, maxYearWeek, 3);
770
+ // 填充年周数据项
771
+ yearWeeks.forEach(yearWeek => {
772
+ Object.keys(data).forEach(key => {
773
+ if (!data[key].get(yearWeek)) {
774
+ data[key].set(yearWeek, { value: 0 });
775
+ }
776
+ });
777
+ });
775
778
  }
776
779
  // 根据时间大小排序
777
780
  this.sortTimeData(data);
778
781
  }
782
+ /**
783
+ * @description 根据分组模式计算时间数据
784
+ * - 只计算有值的日期,展示关键信息数据,多用于横轴日期显示跨度大的情况
785
+ * @param {GroupData} data
786
+ * @memberof BaseSeriesGenerator
787
+ */
788
+ calcTimeData(data) {
789
+ const { groupMode } = this.model;
790
+ if (!groupMode || groupMode === 'CODELIST')
791
+ return;
792
+ // 所有有值的日期数组
793
+ const dates = [];
794
+ // 遍历数据,生成日期数组
795
+ Object.keys(data).forEach(key => {
796
+ data[key].forEach((_val, date) => {
797
+ dates.push(date);
798
+ });
799
+ });
800
+ // 补全每组缺失的日期值,防止横坐标绘制异常
801
+ dates.forEach(date => {
802
+ Object.keys(data).forEach(key => {
803
+ if (!data[key].get(date))
804
+ data[key].set(date, { value: 0 });
805
+ });
806
+ });
807
+ // 根据时间大小排序
808
+ this.sortTimeData(data);
809
+ }
779
810
  }
@@ -81,12 +81,6 @@ export declare class FormDRUIPartController extends FormDetailController<IDEForm
81
81
  * @memberof FormDRUIPartController
82
82
  */
83
83
  formStateNotify(state: FormNotifyState): Promise<void>;
84
- /**
85
- * @description 同步当前表单数据至子界面数据服务
86
- * @returns {*} {Promise<void>}
87
- * @memberof FormDRUIPartController
88
- */
89
- SyncDataToEmbedService(): Promise<void>;
90
84
  /**
91
85
  * @description 计算视图上下文和视图参数, 调用该方法一定会刷新视图。
92
86
  * @returns {*} {void}
@@ -111,5 +105,23 @@ export declare class FormDRUIPartController extends FormDetailController<IDEForm
111
105
  * @memberof FormDRUIPartController
112
106
  */
113
107
  silentValidate(): Promise<boolean>;
108
+ /**
109
+ * @description 同步当前表单数据至子界面数据服务
110
+ * @returns {*} {Promise<void>}
111
+ * @memberof FormDRUIPartController
112
+ */
113
+ SyncDataToEmbedService(): Promise<void>;
114
+ /**
115
+ * @description 同步子界面数据至表单
116
+ * @returns {*} {Promise<void>}
117
+ * @memberof FormDRUIPartController
118
+ */
119
+ SyncEmbedDataToForm(): Promise<void>;
120
+ /**
121
+ * @description 保存嵌入视图数据
122
+ * @returns {*} {Promise<void>}
123
+ * @memberof FormDRUIPartController
124
+ */
125
+ saveEmbedViewData(): Promise<void>;
114
126
  }
115
127
  //# sourceMappingURL=form-druipart.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-druipart.controller.d.ts","sourceRoot":"","sources":["../../../../../../src/controller/control/form/form-detail/form-druipart/form-druipart.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,uBAAuB,EAEvB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,qBAAa,sBACX,SAAQ,oBAAoB,CAAC,eAAe,CAC5C,YAAW,uBAAuB;IAE1B,KAAK,EAAE,iBAAiB,CAAC;IAEjC,SAAS,CAAC,WAAW,IAAI,iBAAiB;IAI1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAc;IAEpC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAY;IAE7B;;;;OAIG;IACH,SAAS,EAAE,eAAe,GAAG,SAAS,CAAC;IAEvC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAS;IAE3B;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAS;IAEjC;;;;OAIG;IACH,gBAAgB,EAAE,aAAa,GAAG,SAAS,CAAC;IAE5C;;;;;OAKG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCvC;;;;;OAKG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5D;;;;OAIG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7C;;;;OAIG;IACH,cAAc,IAAI,IAAI;IAkDtB;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAiCzC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBlC;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAezC"}
1
+ {"version":3,"file":"form-druipart.controller.d.ts","sourceRoot":"","sources":["../../../../../../src/controller/control/form/form-detail/form-druipart/form-druipart.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,uBAAuB,EAEvB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,qBAAa,sBACX,SAAQ,oBAAoB,CAAC,eAAe,CAC5C,YAAW,uBAAuB;IAE1B,KAAK,EAAE,iBAAiB,CAAC;IAEjC,SAAS,CAAC,WAAW,IAAI,iBAAiB;IAI1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAc;IAEpC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAY;IAE7B;;;;OAIG;IACH,SAAS,EAAE,eAAe,GAAG,SAAS,CAAC;IAEvC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAS;IAE3B;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAS;IAEjC;;;;OAIG;IACH,gBAAgB,EAAE,aAAa,GAAG,SAAS,CAAC;IAE5C;;;;;OAKG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CvC;;;;;OAKG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5D;;;;OAIG;IACH,cAAc,IAAI,IAAI;IAyDtB;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IA0BzC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBlC;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBxC;;;;OAIG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7C;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAW1C;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzC"}
@@ -75,6 +75,14 @@ export class FormDRUIPartController extends FormDetailController {
75
75
  if (embedView.appDataEntityId) {
76
76
  this.embedDataService = await app.deService.getService(tempContext, embedView.appDataEntityId);
77
77
  }
78
+ // 主表单保存之前
79
+ this.form.evt.on('onBeforeSave', async () => {
80
+ // 处理子应用同实体表单合并关系界面(手动触发子数据保存、再将子数据同步到主表单)
81
+ if (this.isNeedSyncEmbed && this.embedView && this.embedDataService) {
82
+ await this.saveEmbedViewData();
83
+ await this.SyncEmbedDataToForm();
84
+ }
85
+ });
78
86
  }
79
87
  /**
80
88
  * @description 表单数据变更通知(由表单控制器调用)
@@ -113,21 +121,6 @@ export class FormDRUIPartController extends FormDetailController {
113
121
  this.calcViewParams();
114
122
  }
115
123
  }
116
- /**
117
- * @description 同步当前表单数据至子界面数据服务
118
- * @returns {*} {Promise<void>}
119
- * @memberof FormDRUIPartController
120
- */
121
- async SyncDataToEmbedService() {
122
- if (this.isNeedSyncEmbed && this.embedDataService) {
123
- const tempContext = this.context.clone();
124
- tempContext.srfappid = this.model.appId;
125
- const originData = this.form.state.data.$origin;
126
- const res = await this.embedDataService.getTemp(tempContext);
127
- const syncAction = res.data ? 'updateTemp' : 'createTemp';
128
- await this.embedDataService[syncAction](tempContext, originData);
129
- }
130
- }
131
124
  /**
132
125
  * @description 计算视图上下文和视图参数, 调用该方法一定会刷新视图。
133
126
  * @returns {*} {void}
@@ -136,8 +129,13 @@ export class FormDRUIPartController extends FormDetailController {
136
129
  calcViewParams() {
137
130
  // 计算导航上下文
138
131
  let newContext = this.form.context.clone();
139
- // 忽略数据变化(子应用表单合并场景)
140
- newContext.srfignorechange = this.isNeedSyncEmbed;
132
+ // 子应用表单合并场景
133
+ if (this.isNeedSyncEmbed) {
134
+ // 忽略数据变化
135
+ newContext.srfignorechange = true;
136
+ // 静默保存
137
+ newContext.srfsilent = true;
138
+ }
141
139
  const navContexts = this.model.navigateContexts;
142
140
  if (notNilEmpty(navContexts)) {
143
141
  newContext = Object.assign(newContext, convertNavData(navContexts, this.data, this.form.params, this.form.context));
@@ -189,14 +187,7 @@ export class FormDRUIPartController extends FormDetailController {
189
187
  this.form.updateFormItem(this.model.deformItemUpdateId);
190
188
  }
191
189
  // 同步子界面数据
192
- if (this.isNeedSyncEmbed && this.embedDataService) {
193
- const tempContext = this.context.clone();
194
- tempContext.srfappid = this.model.appId;
195
- const res = await this.embedDataService.getTemp(tempContext);
196
- const childData = res.data || {};
197
- const exData = this.form.state.data.srfexdata || {};
198
- this.form.state.data.srfexdata = Object.assign(exData, childData);
199
- }
190
+ await this.SyncEmbedDataToForm();
200
191
  });
201
192
  }
202
193
  /**
@@ -235,4 +226,45 @@ export class FormDRUIPartController extends FormDetailController {
235
226
  }
236
227
  return true;
237
228
  }
229
+ /**
230
+ * @description 同步当前表单数据至子界面数据服务
231
+ * @returns {*} {Promise<void>}
232
+ * @memberof FormDRUIPartController
233
+ */
234
+ async SyncDataToEmbedService() {
235
+ if (this.isNeedSyncEmbed && this.embedDataService) {
236
+ const tempContext = this.context.clone();
237
+ tempContext.srfappid = this.model.appId;
238
+ const originData = this.form.state.data.$origin;
239
+ const res = await this.embedDataService.getTemp(tempContext);
240
+ const syncAction = res.data ? 'updateTemp' : 'createTemp';
241
+ await this.embedDataService[syncAction](tempContext, originData);
242
+ }
243
+ }
244
+ /**
245
+ * @description 同步子界面数据至表单
246
+ * @returns {*} {Promise<void>}
247
+ * @memberof FormDRUIPartController
248
+ */
249
+ async SyncEmbedDataToForm() {
250
+ if (this.isNeedSyncEmbed && this.embedDataService) {
251
+ const tempContext = this.context.clone();
252
+ tempContext.srfappid = this.model.appId;
253
+ const res = await this.embedDataService.getTemp(tempContext);
254
+ const childData = res.data || {};
255
+ const exData = this.form.state.data.srfexdata || {};
256
+ this.form.state.data.srfexdata = Object.assign(exData, childData);
257
+ }
258
+ }
259
+ /**
260
+ * @description 保存嵌入视图数据
261
+ * @returns {*} {Promise<void>}
262
+ * @memberof FormDRUIPartController
263
+ */
264
+ async saveEmbedViewData() {
265
+ var _a;
266
+ if (this.isNeedSyncEmbed && this.embedView) {
267
+ await ((_a = this.embedView) === null || _a === void 0 ? void 0 : _a.call(SysUIActionTag.SAVE));
268
+ }
269
+ }
238
270
  }
@@ -49,4 +49,19 @@ export declare function formatSeparator(type: string, items: IData[] | undefined
49
49
  * @returns {*} {string}
50
50
  */
51
51
  export declare function formatDate(val: string, format: 'year' | 'quarter' | 'month' | 'week' | 'day'): string;
52
+ /**
53
+ * @description 获取某年的总周数
54
+ * @param {number} year 年份
55
+ * @returns {*} {number}
56
+ */
57
+ export declare function getWeeksInYear(year: number): number;
58
+ /**
59
+ * @description 生成年周数组
60
+ * @export
61
+ * @param {string} minYearWeek 最小年周
62
+ * @param {string} maxYearWeek 最大年周
63
+ * @param {number} [paddingWeeks=0] 前后范围
64
+ * @returns {*} {string[]}
65
+ */
66
+ export declare function generateYearWeekRange(minYearWeek: string, maxYearWeek: string, paddingWeeks?: number): string[];
52
67
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/controller/utils/util/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAKtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAC9C,KAAK,GAAG,SAAS,CAMnB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EAAE,EACd,UAAU,GAAE,MAAmB,GAC9B,KAAK,EAAE,CAaT;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,EAC1B,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,GACzB,MAAM,EAAE,CAyGV;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GACpD,MAAM,CA2BR"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/controller/utils/util/util.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAKtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,GAC9C,KAAK,GAAG,SAAS,CAMnB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EAAE,EACd,UAAU,GAAE,MAAmB,GAC9B,KAAK,EAAE,CAaT;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,EAC1B,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,GACzB,MAAM,EAAE,CAyGV;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GACpD,MAAM,CAyBR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,YAAY,SAAI,GACf,MAAM,EAAE,CA0CV"}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-plusplus */
1
2
  /* eslint-disable no-case-declarations */
2
3
  /* eslint-disable no-restricted-globals */
3
4
  import { isNil } from 'ramda';
@@ -184,20 +185,18 @@ export function formatDate(val, format) {
184
185
  if (!val || isNaN(date.getTime()))
185
186
  return value;
186
187
  const year = dayjs(date).year();
187
- const month = dayjs(date).month() + 1;
188
188
  switch (format) {
189
189
  case 'year':
190
190
  value = `${year}`;
191
191
  break;
192
192
  case 'quarter':
193
- value = `${year} ${Math.ceil(month / 3)}${ibiz.i18n.t('runtime.controller.utils.util.quarter')}`;
193
+ value = `${year} ${dayjs(date).quarter()}${ibiz.i18n.t('runtime.controller.utils.util.quarter')}`;
194
194
  break;
195
195
  case 'month':
196
- value = `${year} ${month}${ibiz.i18n.t('runtime.controller.utils.util.month')}`;
196
+ value = `${year} ${dayjs(date).month() + 1}${ibiz.i18n.t('runtime.controller.utils.util.month')}`;
197
197
  break;
198
198
  case 'week':
199
- const week = dayjs(date).week();
200
- value = `${year} ${week}${ibiz.i18n.t('runtime.controller.utils.util.week')}`;
199
+ value = `${year} ${dayjs(date).week()}${ibiz.i18n.t('runtime.controller.utils.util.week')}`;
201
200
  break;
202
201
  case 'day':
203
202
  value = dayjs(date).format('YYYY-MM-DD');
@@ -207,3 +206,56 @@ export function formatDate(val, format) {
207
206
  }
208
207
  return value;
209
208
  }
209
+ /**
210
+ * @description 获取某年的总周数
211
+ * @param {number} year 年份
212
+ * @returns {*} {number}
213
+ */
214
+ export function getWeeksInYear(year) {
215
+ const lastDayOfYear = dayjs(`${year}-12-31`);
216
+ const week = lastDayOfYear.isoWeek();
217
+ return week === 1 ? 52 : week;
218
+ }
219
+ /**
220
+ * @description 生成年周数组
221
+ * @export
222
+ * @param {string} minYearWeek 最小年周
223
+ * @param {string} maxYearWeek 最大年周
224
+ * @param {number} [paddingWeeks=0] 前后范围
225
+ * @returns {*} {string[]}
226
+ */
227
+ export function generateYearWeekRange(minYearWeek, maxYearWeek, paddingWeeks = 0) {
228
+ // 1. 解析最小和最大年周
229
+ const [minYear, minWeek] = minYearWeek.split('-').map(Number);
230
+ const [maxYear, maxWeek] = maxYearWeek.split('-').map(Number);
231
+ // 2. 计算起始年周(minYearWeek - paddingWeeks)
232
+ let startYear = minYear;
233
+ let startWeek = minWeek - paddingWeeks;
234
+ while (startWeek < 1) {
235
+ startYear--;
236
+ startWeek += getWeeksInYear(startYear);
237
+ }
238
+ // 3. 计算结束年周(maxYearWeek + paddingWeeks)
239
+ let endYear = maxYear;
240
+ let endWeek = maxWeek + paddingWeeks;
241
+ const maxWeeksInEndYear = getWeeksInYear(endYear);
242
+ if (endWeek > maxWeeksInEndYear) {
243
+ endWeek -= maxWeeksInEndYear;
244
+ endYear++;
245
+ }
246
+ // 4. 生成从 startYear-startWeek 到 endYear-endWeek 的所有年周
247
+ const yearWeeks = [];
248
+ let currentYear = startYear;
249
+ let currentWeek = startWeek;
250
+ while (currentYear < endYear ||
251
+ (currentYear === endYear && currentWeek <= endWeek)) {
252
+ yearWeeks.push(`${currentYear}-${currentWeek}`);
253
+ currentWeek++;
254
+ const weeksInCurrentYear = getWeeksInYear(currentYear);
255
+ if (currentWeek > weeksInCurrentYear) {
256
+ currentYear++;
257
+ currentWeek = 1;
258
+ }
259
+ }
260
+ return yearWeeks;
261
+ }
@@ -80,7 +80,7 @@ export declare class MDViewEngine extends ViewEngineBase {
80
80
  params?: IParams;
81
81
  }): Promise<IUIActionResult>;
82
82
  /**
83
- * 打开编辑数据视图
83
+ * 打开新建数据视图
84
84
  *
85
85
  * @author lxm
86
86
  * @date 2022-09-01 18:09:19
@@ -1 +1 @@
1
- {"version":3,"file":"md-view.engine.d.ts","sourceRoot":"","sources":["../../src/engine/md-view.engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"md-view.engine.d.ts","sourceRoot":"","sources":["../../src/engine/md-view.engine.ts"],"names":[],"mappings":"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"}
@@ -249,13 +249,19 @@ export class MDViewEngine extends ViewEngineBase {
249
249
  throw new RuntimeModelError(this.view.model, ibiz.i18n.t('runtime.engine.logicOpendata'));
250
250
  }
251
251
  else {
252
+ if (result.ok && result.data && result.data.length > 0) {
253
+ this.view.evt.emit('onDataChange', {
254
+ data: result.data,
255
+ actionType: 'EDIT',
256
+ });
257
+ }
252
258
  return {
253
259
  cancel: result ? !result.ok : true,
254
260
  };
255
261
  }
256
262
  }
257
263
  /**
258
- * 打开编辑数据视图
264
+ * 打开新建数据视图
259
265
  *
260
266
  * @author lxm
261
267
  * @date 2022-09-01 18:09:19
@@ -285,6 +291,12 @@ export class MDViewEngine extends ViewEngineBase {
285
291
  throw new RuntimeModelError(this.view.model, ibiz.i18n.t('runtime.engine.logicNewdata'));
286
292
  }
287
293
  else {
294
+ if (result.ok && result.data && result.data.length > 0) {
295
+ this.view.evt.emit('onDataChange', {
296
+ data: result.data,
297
+ actionType: 'NEW',
298
+ });
299
+ }
288
300
  return {
289
301
  cancel: result ? !result.ok : true,
290
302
  };
@@ -12,6 +12,7 @@ import { IApiMDControlController } from './i-api-md-control.controller';
12
12
  * @ctrlparams {name:enabledrilldetail,title:是否开启数据反查,defaultvalue:[],parameterType:IData[],description:此部件参数仅应用于bi报表。主要用于判断当前点击序列是否开启数据反查,如果当前序列有反查视图模型,则左键单击时弹出检查明细按钮}
13
13
  * @ctrlparams {"name":"mdctrlrefreshmode","title":"刷新模式","defaultvalue":"'cache'","parameterType":"'default' | 'cache'","description":"选中数据在部件加载后触发重新计算模式,若值为 'cache' 且不为初始化加载时,则将选中数据更新为最新值;若值为 'default',将清空选中数据","effectPlatform":"web"}
14
14
  * @ctrlparams {"name":"mode","title":"柱状图图表绘制模式","defaultvalue":"'DEFAULT'","parameterType":"'DEFAULT' | 'ROW'","description":"控制柱状图绘制方向,默认垂直绘制,为ROW时水平绘制"}
15
+ * @ctrlparams {"name":"completiondate","title":"是否填充日期","parameterType":"boolean","description":"该参数为序列自定义参数,用于控制时间分组模式下是否补全时间数据(无横轴序列默认不补全(饼图,仪表盘,雷达图,漏斗图),有横轴序列默认补全)"}
15
16
  * @template T
16
17
  * @template S
17
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"i-api-chart.controller.d.ts","sourceRoot":"","sources":["../../../../../src/interface/api/controller/control/i-api-chart.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB,CAClC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC;;;OAGG;IACH,WAAW,IAAI,IAAI,CAAC;IAEpB;;;;OAIG;IACH,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CACxC"}
1
+ {"version":3,"file":"i-api-chart.controller.d.ts","sourceRoot":"","sources":["../../../../../src/interface/api/controller/control/i-api-chart.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,mBAAmB,CAClC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC;;;OAGG;IACH,WAAW,IAAI,IAAI,CAAC;IAEpB;;;;OAIG;IACH,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CACxC"}
@@ -5,6 +5,49 @@ import { IApiContext, IApiData, IApiParams } from '@ibiz-template/core';
5
5
  * @interface IApiFileUtil
6
6
  */
7
7
  export interface IApiFileUtil {
8
+ /**
9
+ * @description 设置文件上传请求头数据
10
+ * @param {Record<string, string>} args
11
+ * @memberof IApiFileUtil
12
+ */
13
+ setUploadHeaders(args: Record<string, string>): void;
14
+ /**
15
+ * @description 获取文件上传请求头数据
16
+ * @returns {*} {Record<string, string>}
17
+ * @memberof IApiFileUtil
18
+ */
19
+ getUploadHeaders(): Record<string, string>;
20
+ /**
21
+ * @description 计算文件的上传路径和下载路径,下载路径文件id用%fileId%占位,替换即可;配置编辑器参数uploadParams和exportParams时,会像导航参数一样动态添加对应的参数到url上
22
+ * @param {IContext} context 应用上下文对象
23
+ * @param {IParams} params 视图参数对象
24
+ * @param {IApiData} [data] 业务数据对象,默认给{}
25
+ * @param {{
26
+ * uploadParams?: IApiData;
27
+ * exportParams?: IApiData;
28
+ * osscat?: string;
29
+ * }} [extraParams] 上传附件参数;下载附加参数;自定义oss分类名称
30
+ * @returns {*} {{
31
+ * uploadUrl: string;
32
+ * downloadUrl: string;
33
+ * }}
34
+ * @memberof IApiFileUtil
35
+ */
36
+ calcFileUpDownUrl(context: IContext, params: IParams, data?: IApiData, extraParams?: {
37
+ uploadParams?: IApiData;
38
+ exportParams?: IApiData;
39
+ osscat?: string;
40
+ }): {
41
+ uploadUrl: string;
42
+ downloadUrl: string;
43
+ };
44
+ /**
45
+ * @description 获取响应文件名
46
+ * @param {IApiData} response 响应对象
47
+ * @returns {*} {string}
48
+ * @memberof IApiFileUtil
49
+ */
50
+ getFileName(response: IApiData): string;
8
51
  /**
9
52
  * @description 文件下载
10
53
  * @param {string} url
@@ -27,15 +70,33 @@ export interface IApiFileUtil {
27
70
  * @param {IApiContext} context
28
71
  * @param {IApiParams} params
29
72
  * @param {IApiData} data
30
- * @param {IApiData} [option={}]
73
+ * @param {{
74
+ * accept: string;
75
+ * multiple?: boolean;
76
+ * showUploadManager?: boolean;
77
+ * extraParams?: {
78
+ * uploadParams?: IApiData;
79
+ * exportParams?: IApiData;
80
+ * osscat?: string;
81
+ * };
82
+ * }} [option] {上传文件类型,是否多选,是否展示文件管理器,扩展参数(包含上传附件参数、下载附加参数、自定义oss分类名称)}
31
83
  * @returns {*} {Promise<IApiData[]>}
32
84
  * @memberof IApiFileUtil
33
85
  */
34
- chooseFileAndUpload(context: IApiContext, params: IApiParams, data: IApiData, option?: IApiData): Promise<IApiData[]>;
86
+ chooseFileAndUpload(context: IApiContext, params: IApiParams, data: IApiData, option?: {
87
+ accept: string;
88
+ multiple?: boolean;
89
+ showUploadManager?: boolean;
90
+ extraParams?: {
91
+ uploadParams?: IApiData;
92
+ exportParams?: IApiData;
93
+ osscat?: string;
94
+ };
95
+ }): Promise<IApiData[]>;
35
96
  /**
36
97
  * @description 选择文件
37
- * @param {string} [accept]
38
- * @param {boolean} [multiple] 默认为false
98
+ * @param {string} [accept] 选择文件类型
99
+ * @param {boolean} [multiple] 是否多选,默认为false
39
100
  * @returns {*} {Promise<FileList>}
40
101
  * @memberof IApiFileUtil
41
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"i-api-file-util.d.ts","sourceRoot":"","sources":["../../../../src/interface/api/util/i-api-file-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;;;;;OAOG;IACH,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;;;;;;OAQG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE,QAAQ,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEvB;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnE"}
1
+ {"version":3,"file":"i-api-file-util.d.ts","sourceRoot":"","sources":["../../../../src/interface/api/util/i-api-file-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAErD;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CACf,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,QAAQ,EACf,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,QAAQ,CAAC;QACxB,YAAY,CAAC,EAAE,QAAQ,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAExC;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;;;;;OAOG;IACH,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE;YACZ,YAAY,CAAC,EAAE,QAAQ,CAAC;YACxB,YAAY,CAAC,EAAE,QAAQ,CAAC;YACxB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,GACA,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEvB;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnE"}
@@ -1,11 +1,10 @@
1
1
  import { EventBase } from './base.event';
2
2
  export interface DataChangeEvent extends EventBase {
3
3
  /**
4
- * 变更行为类型
5
- * @author lxm
6
- * @date 2023-03-26 01:24:06
7
- * @type {('LOAD' | 'LOADDRAFT' | 'REMOVE' | 'SAVE' | string)}
4
+ * @description 变更行为类型
5
+ * @type {('LOAD' | 'LOADDRAFT' | 'REMOVE' | 'SAVE' | 'NEW' | 'EDIT')}
6
+ * @memberof DataChangeEvent
8
7
  */
9
- actionType: 'LOAD' | 'LOADDRAFT' | 'REMOVE' | 'SAVE';
8
+ actionType: 'LOAD' | 'LOADDRAFT' | 'REMOVE' | 'SAVE' | 'NEW' | 'EDIT';
10
9
  }
11
10
  //# sourceMappingURL=data-change.event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-change.event.d.ts","sourceRoot":"","sources":["../../../../../src/interface/controller/event/argument/data-change.event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD;;;;;OAKG;IACH,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtD"}
1
+ {"version":3,"file":"data-change.event.d.ts","sourceRoot":"","sources":["../../../../../src/interface/controller/event/argument/data-change.event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD;;;;OAIG;IACH,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"code-list-data-item.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/code-list-data-item/code-list-data-item.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,EAAG,MAAM,GAAG,MAAM,CAAC;IAExB,IAAI,EAAG,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACK,OAAO,EAAE,KAAK,CAAC;IAEvB;;;;;;;;;OASG;gBAED,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,KAAK,EACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf;CAkNJ"}
1
+ {"version":3,"file":"code-list-data-item.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/code-list-data-item/code-list-data-item.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,EAAG,MAAM,GAAG,MAAM,CAAC;IAExB,IAAI,EAAG,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACK,OAAO,EAAE,KAAK,CAAC;IAEvB;;;;;;;;;OASG;gBAED,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,KAAK,EACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf;CA0NJ"}