mooho-base-admin-plus 2.10.31 → 2.10.33

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.
@@ -0,0 +1,776 @@
1
+ <template>
2
+ <!--
3
+ @slot 顶部
4
+ -->
5
+ <slot name="top"></slot>
6
+ <hot-table ref="table" :settings="hotSetting"></hot-table>
7
+ <modal-table ref="dialogTable">
8
+ <template #command="{ row }">
9
+ <Button size="small" title="选择" type="primary" custom-icon="fa fa-check" @click="dialogCheck(row)"></Button>
10
+ </template>
11
+ </modal-table>
12
+ <div class="ivu-mt ivu-text-right">
13
+ <Button
14
+ class="ivu-fr ivu-ml-8"
15
+ type="error"
16
+ :title="$t('Front_Btn_Setting')"
17
+ custom-icon="fa fa-cog"
18
+ v-if="settingEnable && allow('permission/tableView')"
19
+ @click="tableSettingOpen"
20
+ ></Button>
21
+ </div>
22
+ <table-setting ref="tableSetting" v-if="tableSettingActive" :is-setting="true" @on-change="viewCode => init(viewCode)" />
23
+ </template>
24
+ <script>
25
+ import { mapActions } from 'vuex';
26
+ import dateFormat from 'date-fns/format';
27
+
28
+ import { HotTable } from '@handsontable/vue3';
29
+ import { ContextMenu } from 'handsontable/plugins/contextMenu';
30
+ import { registerAllModules } from 'handsontable/registry';
31
+ import 'handsontable/styles/handsontable.min.css';
32
+ import 'handsontable/styles/ht-theme-main.min.css';
33
+
34
+ import modelApi from '../../api/model';
35
+ import customModelApi from '../../api/customModel';
36
+ import mixinPage from '../../mixins/page';
37
+ import mixin from './mixin';
38
+ import tableSetting from './table-setting.vue';
39
+
40
+ // register Handsontable's modules
41
+ registerAllModules();
42
+
43
+ /**
44
+ * @displayName view-table 表格视图
45
+ */
46
+ export default {
47
+ mixins: [mixin, mixinPage],
48
+ components: { HotTable, tableSetting },
49
+ emits: ['onChange'],
50
+ data() {
51
+ return {
52
+ inited: false,
53
+ tableView: {},
54
+ hotSetting: {
55
+ themeName: 'ht-theme-main',
56
+ colHeaders: true,
57
+ rowHeaders: true,
58
+ height: 'auto',
59
+ // columns: [],
60
+ autoWrapCol: true,
61
+ autoWrapRow: true,
62
+ manualColumnResize: true,
63
+ minSpareRows: 1,
64
+ contextMenu: {
65
+ items: {
66
+ row_above: {
67
+ name: '上方插入行'
68
+ },
69
+ row_below: {
70
+ name: '下方插入行'
71
+ },
72
+ separator1: ContextMenu.SEPARATOR,
73
+ move_up: {
74
+ name: '整行上移',
75
+ callback: (key, selection, clickEvent) => {
76
+ let index = selection[0].start.row;
77
+ if (index > 0) {
78
+ let data = this.$refs.table.hotInstance.getSourceData();
79
+ let delRows = data.splice(index, 1);
80
+ data.splice(index - 1, 0, delRows[0]);
81
+ this.$refs.table.hotInstance.loadData(data);
82
+ }
83
+ }
84
+ },
85
+ move_down: {
86
+ name: '整行下移',
87
+ callback: (key, selection, clickEvent) => {
88
+ let index = selection[0].start.row;
89
+ let data = this.$refs.table.hotInstance.getSourceData();
90
+ if (index < data.length - 1) {
91
+ let delRows = data.splice(index, 1);
92
+ data.splice(index + 1, 0, delRows[0]);
93
+ this.$refs.table.hotInstance.loadData(data);
94
+ }
95
+ }
96
+ },
97
+ remove_row: {
98
+ name: '整行删除',
99
+ callback: (key, selection, clickEvent) => {
100
+ let delArr = [];
101
+ let ids = [];
102
+ let rows = [];
103
+
104
+ let data = this.$refs.table.hotInstance.getSourceData();
105
+
106
+ for (const sels of selection) {
107
+ let startRowIndex = sels.start.row;
108
+ let endRowIndex = sels.end.row;
109
+
110
+ delArr.push([startRowIndex, endRowIndex - startRowIndex + 1]);
111
+
112
+ for (let i = startRowIndex; i <= endRowIndex; i++) {
113
+ rows.push(i);
114
+ }
115
+
116
+ for (let i = startRowIndex; i < endRowIndex; i++) {
117
+ if (data[i].id) {
118
+ ids.push(data[i].id);
119
+ }
120
+ }
121
+ }
122
+
123
+ this.confirm('确定要删除该行吗?', async () => {
124
+ // if (ids.length > 0) {
125
+ // await modelApi.delete(this.viewCode, ids);
126
+ // }
127
+ let b = true;
128
+
129
+ this.$emit('on-remove', rows, val => {
130
+ b = val;
131
+ });
132
+ console.log(b);
133
+ if (b) {
134
+ this.$refs.table.hotInstance.alter('remove_row', delArr);
135
+ }
136
+ });
137
+ }
138
+ }
139
+ // separator2: ContextMenu.SEPARATOR
140
+ // cut: { name: '剪切' },
141
+ // copy: { name: '复制' }
142
+ // 'paste': {
143
+ // name: '粘贴',
144
+ // callback: (key, selection, clickEvent) => {
145
+ // document.execCommand('paste');
146
+ // }
147
+ // }
148
+ }
149
+ },
150
+ licenseKey: 'non-commercial-and-evaluation'
151
+ },
152
+ coords: {},
153
+ data: [],
154
+ staticData: [],
155
+ setting: false,
156
+ tableSettingActive: false,
157
+ isMaxHight: false
158
+ };
159
+ },
160
+ async created() {
161
+ // 默认视图代码
162
+ if (this.viewCode) {
163
+ // 初始化
164
+ setTimeout(async () => {
165
+ await this.init(this.viewCode);
166
+
167
+ /**
168
+ * 初始化完成事件
169
+ */
170
+ this.$emit('after-init');
171
+
172
+ if (this.autoLoad && !this.tableView.autoLoadDisable) {
173
+ this.loadData();
174
+ }
175
+ });
176
+ }
177
+ },
178
+ mounted() {
179
+ this.$refs.table.hotInstance.addHook('beforeOnCellMouseUp', (event, coords) => {
180
+ this.coords = coords;
181
+ if (event.detail === 2 && coords.row >= 0 && !this.readonly) {
182
+ // 双击弹出窗口
183
+ let column = this.hotSetting.columns[coords.col];
184
+ let data = this.$refs.table.hotInstance.getSourceData();
185
+
186
+ if (column.controlType === 'DialogSelect' && !column.readonly) {
187
+ this.$refs.dialogTable.init(column.source, () => {
188
+ this.$refs.dialogTable.open(this.getParam(data[coords.row], column));
189
+ });
190
+ }
191
+ }
192
+ });
193
+ },
194
+ props: {
195
+ /**
196
+ * 视图代码
197
+ */
198
+ viewCode: {
199
+ type: String
200
+ },
201
+ /**
202
+ * 只读
203
+ */
204
+ readonly: {
205
+ type: Boolean,
206
+ default: false
207
+ },
208
+ /**
209
+ * 内嵌表格的父对象
210
+ */
211
+ parentData: {
212
+ type: Object,
213
+ default() {
214
+ return {};
215
+ }
216
+ },
217
+ /**
218
+ * 是否允许配置界面
219
+ */
220
+ settingEnable: {
221
+ type: Boolean,
222
+ default: true
223
+ },
224
+ /**
225
+ * 自动加载
226
+ */
227
+ autoLoad: {
228
+ type: Boolean,
229
+ default: true
230
+ },
231
+ /**
232
+ * 高度
233
+ */
234
+ height: {
235
+ type: Number,
236
+ default: null
237
+ }
238
+ },
239
+ computed: {},
240
+ watch: {
241
+ // value() {
242
+ // if (this.embedded) {
243
+ // this.loadData(this.value);
244
+ // }
245
+ // //this.changed = false;
246
+ // }
247
+ // staticData() {
248
+ // // 设置选中项
249
+ // if (typeof this.selectFunc === 'function') {
250
+ // let selected = this.staticData.filter(this.selectFunc);
251
+ // this.setSelected(selected);
252
+ // }
253
+ // }
254
+ },
255
+ methods: {
256
+ ...mapActions('admin/dataView', { loadDataView: 'load' }),
257
+ /**
258
+ * 初始化
259
+ *
260
+ * @param {string} viewCode 视图代码
261
+ * @param {function} callback 完成后回调方法
262
+ * @param {function} onFail 失败后回调方法
263
+ * @public
264
+ */
265
+ async init(viewCode, callback, onFail) {
266
+ // 加载表格视图
267
+ let view = await this.loadDataView(viewCode);
268
+
269
+ if (view && !view.isExist && viewCode.indexOf('_') >= 0) {
270
+ view = await this.loadDataView(viewCode.split('_')[0]);
271
+ }
272
+
273
+ if (view == null) {
274
+ return;
275
+ } else if (!view.isExist) {
276
+ if (typeof onFail === 'function') {
277
+ onFail();
278
+ } else {
279
+ this.error('Front_Msg_View_Code_Not_Exist|' + viewCode);
280
+ }
281
+ return;
282
+ }
283
+
284
+ this.tableView = view.dataView;
285
+ this.tableView.columns = view.viewColumns;
286
+
287
+ // 初始化数据源
288
+ // this.initDataSource();
289
+
290
+ this.columns = await Promise.all(
291
+ view.viewColumns.map(async item => {
292
+ let column = {
293
+ ...item,
294
+ title: item.name,
295
+ data: item.code,
296
+ width: item.controlWidth || 80,
297
+ className: item.align ? item.align.toLowerCase() : 'htCenter',
298
+ controlType: item.controlType
299
+ };
300
+
301
+ if (this.readonly) {
302
+ column.readOnly = true;
303
+ } else {
304
+ if (item.controlType === 'Label' || item.isReadonly == true) {
305
+ column.readOnly = true;
306
+ } else if (item.controlType === 'NumberInput') {
307
+ column.type = 'numeric';
308
+ column.numericFormat = '0%';
309
+ } else if (item.controlType === 'Check') {
310
+ column.type = 'checkbox';
311
+ } else if (item.controlType === 'Select') {
312
+ column.editor = 'select';
313
+
314
+ let dataSource = [];
315
+
316
+ if (column.isStaticItem) {
317
+ if (!!(column.itemData || '').trim()) {
318
+ column.itemData.split(/[\n]/).forEach(item => {
319
+ if (!!(item || '').trim()) {
320
+ if (item.split(':').length > 1) {
321
+ let key = item.split(':')[0];
322
+ let value = item.split(':')[1];
323
+
324
+ if (column.dataType == 'Integer' || column.dataType == 'BigInteger') {
325
+ dataSource.push({
326
+ id: parseInt(key),
327
+ name: value
328
+ });
329
+ } else if (column.dataType == 'Decimal' || column.dataType == 'Float' || column.dataType == 'Double') {
330
+ dataSource.push({
331
+ id: parseFloat(key),
332
+ name: value
333
+ });
334
+ } else if (column.dataType == 'Boolean') {
335
+ dataSource.push({
336
+ id: key.toUpperCase() == 'TRUE',
337
+ name: value
338
+ });
339
+ } else {
340
+ dataSource.push({
341
+ id: key,
342
+ name: value
343
+ });
344
+ }
345
+ } else {
346
+ if (column.dataType == 'Integer' || column.dataType == 'BigInteger') {
347
+ dataSource.push({
348
+ id: parseInt(item),
349
+ name: item
350
+ });
351
+ } else if (column.dataType == 'Decimal' || column.dataType == 'Float' || column.dataType == 'Double') {
352
+ dataSource.push({
353
+ id: parseFloat(item),
354
+ name: item
355
+ });
356
+ } else if (column.dataType == 'Boolean') {
357
+ dataSource.push({
358
+ id: item.toUpperCase() == 'TRUE',
359
+ name: item
360
+ });
361
+ } else {
362
+ dataSource.push({
363
+ id: item,
364
+ name: item
365
+ });
366
+ }
367
+ }
368
+ }
369
+ });
370
+ }
371
+ } else {
372
+ if (column.dataType.startsWith('Enum:')) {
373
+ // 枚举
374
+ dataSource = this.getEnumList(column.dataType.split(':')[1]);
375
+ } else if (!!(column.source || '').trim()) {
376
+ let param = this.getParam(null, column, this.parentData);
377
+
378
+ // 选择框、单选框组
379
+ this.disableLoader();
380
+ let res;
381
+ if (column.isSourceCustom) {
382
+ res = await customModelApi.query(column.source, param); //, [column.sourceDataCode, column.sourceDisplayCode]);
383
+ } else {
384
+ res = await modelApi.query(column.source, param); //, [column.sourceDataCode, column.sourceDisplayCode]);
385
+ }
386
+ this.enableLoader();
387
+
388
+ dataSource = res.data.map(item => {
389
+ return {
390
+ id: !(column.sourceDataCode || '').trim() ? item.id : this.parseData(item, column.sourceDataCode),
391
+ name: this.parseData(item, column.sourceDisplayCode)
392
+ };
393
+ });
394
+ }
395
+ }
396
+
397
+ column.selectOptions = dataSource.map(option => {
398
+ return option.id;
399
+ });
400
+ } else if (item.controlType === 'Date') {
401
+ column.type = 'date';
402
+ column.dateFormat = 'YYYY-MM-DD';
403
+ column.correctFormat = true;
404
+ // column.renderer = function (instance, td, row, col, prop, value, cellProperties) {
405
+ // if (value) {
406
+ // td.innerHTML = dateFormat(new Date(value), 'yyyy-MM-dd');
407
+ // console.log(instance);
408
+ // console.log(td);
409
+ // console.log(row);
410
+ // console.log(col);
411
+ // console.log(prop);
412
+ // console.log(value);
413
+ // console.log(cellProperties);
414
+ // }
415
+ // return td;
416
+ // };
417
+ }
418
+ }
419
+
420
+ return column;
421
+ })
422
+ );
423
+
424
+ console.log('this.columns', this.columns);
425
+
426
+ // .filter(item => {
427
+ // return !(item.parentCode || '').trim();
428
+ // })
429
+ // .map(item => {
430
+ // return getColumns(view, item, this.static);
431
+ // });
432
+
433
+ this.hotSetting.columns = this.columns;
434
+
435
+ this.columns.forEach(column => {
436
+ //column.name = this.getNameI18n(column) + (column.isRequired ? ' <font color="red">*</font>' : '');
437
+ //column.fixed = column.isFixed ? 'left' : null;
438
+ });
439
+
440
+ // this.columns.unshift({
441
+ // tree: true,
442
+ // display: 'inline',
443
+ // align: 'left',
444
+ // width: 100
445
+ // });
446
+
447
+ // if (this.tableView.snEnable) {
448
+ // this.columns.unshift({
449
+ // title: this.$t('Front_Label_Sn'),
450
+ // slot: 'sn',
451
+ // align: 'center',
452
+ // width: 60
453
+ // });
454
+ // }
455
+
456
+ this.inited = true;
457
+
458
+ setTimeout(() => {
459
+ if (typeof callback === 'function') {
460
+ callback();
461
+ }
462
+ });
463
+ },
464
+ /**
465
+ * 加载数据
466
+ *
467
+ * @param {array} staticData 静态数据
468
+ * @public
469
+ */
470
+ async loadData(staticData) {
471
+ if (!this.inited) {
472
+ await this.init(this.viewCode);
473
+
474
+ if (!this.inited) {
475
+ return;
476
+ }
477
+ }
478
+
479
+ if (staticData) {
480
+ this.staticData = this.copy(staticData);
481
+
482
+ this.staticData.forEach(item => {
483
+ for (let key in item) {
484
+ if (item[key] != null && this.columns.some(i => i.code === key && i.controlType === 'Date')) {
485
+ item[key] = dateFormat(new Date(item[key]), 'yyyy-MM-dd');
486
+ }
487
+ }
488
+ });
489
+ }
490
+
491
+ this.data = this.staticData;
492
+
493
+ //this.hotSetting.data = this.data;
494
+
495
+ this.$refs.table.hotInstance.loadData(this.data);
496
+
497
+ setTimeout(() => {
498
+ this.$refs.table.hotInstance.render();
499
+ });
500
+
501
+ console.log('this.data', this.data);
502
+
503
+ // 设置数据的可见性和只读属性
504
+ this.data.forEach(item => {
505
+ //this.setShowStatus(item);
506
+
507
+ // 只读时禁止选中
508
+ item._disabled = this.readonly;
509
+ });
510
+
511
+ // 加载数据源
512
+ //this.initDataSource();
513
+
514
+ // 重新计算公式
515
+ for (let i = 0; i < this.data.length; i++) {
516
+ this.calc(this.data[i]);
517
+ }
518
+
519
+ /**
520
+ * 数据加载事件
521
+ */
522
+ this.$emit('on-load-data');
523
+
524
+ /**
525
+ * 数据变化事件
526
+ * @property {object} data 行对象
527
+ * @property {object} sender 触发的列对象
528
+ * @property {object} selected 选中对象(弹出选择框等有效)
529
+ */
530
+ this.$emit('on-change', null, null, null);
531
+
532
+ // 刷新表头控件
533
+ // if (this.$refs.tableFilter) {
534
+ // //this.$refs.tableFilter.$forceUpdate();
535
+ // }
536
+ },
537
+ /**
538
+ * 必填验证
539
+ *
540
+ * @public
541
+ */
542
+ validate() {
543
+ for (let i = 0; i < this.staticData.length; i++) {
544
+ let row = this.staticData[i];
545
+
546
+ for (let j = 0; j < this.columns.length; j++) {
547
+ let column = this.columns[j];
548
+ let value = this.parseData(row, column.code);
549
+
550
+ if (column.slot != 'normal') {
551
+ continue;
552
+ }
553
+
554
+ // 不显示的不验证
555
+ if (row._isShow && row._isShow[column.code] == false) {
556
+ continue;
557
+ } else if (column.isShow == false) {
558
+ continue;
559
+ }
560
+
561
+ if (column.isRequired) {
562
+ if (value == null || !(String(value) || '').trim()) {
563
+ this.error('Front_Msg_Row_Column_Required|' + (i + 1) + '|' + name);
564
+ return false;
565
+ }
566
+ }
567
+
568
+ // if (column.maxLength != null && value != null && String(value).length > column.maxLength) {
569
+ // this.error('Front_Msg_Row_Validation_Max_Length|' + (i + 1) + '|' + column.name + '|' + column.maxLength.toString());
570
+ // return false;
571
+ // }
572
+
573
+ if (column.maxValue != null && !isNaN(value) && value > column.maxValue) {
574
+ this.error('Front_Msg_Row_Validation_Max_Value|' + (i + 1) + '|' + name + '|' + column.maxValue.toString());
575
+ return false;
576
+ }
577
+
578
+ if (column.minValue != null && !isNaN(value) && value < column.minValue) {
579
+ this.error('Front_Msg_Row_Validation_Min_Value|' + (i + 1) + '|' + name + '|' + column.minValue.toString());
580
+ return false;
581
+ }
582
+
583
+ if (!!(column.pattern || '').trim() && value != null && new RegExp(column.pattern).test(value) == false) {
584
+ this.error('Front_Msg_Row_Validation_Pattern|' + (i + 1) + '|' + name + '|' + column.pattern);
585
+ return false;
586
+ }
587
+ }
588
+ }
589
+
590
+ return true;
591
+ },
592
+ /**
593
+ * 获取数据
594
+ *
595
+ * @public
596
+ */
597
+ getData() {
598
+ let data = this.copy(this.staticData);
599
+
600
+ data.pop();
601
+
602
+ data.forEach(item => {
603
+ for (let key in item) {
604
+ if (key.startsWith('_')) {
605
+ delete item[key];
606
+ }
607
+ }
608
+ });
609
+
610
+ // 调整顺序
611
+ if (this.tableView.adjustEnable) {
612
+ let i = 0;
613
+ for (let item of data) {
614
+ item.orderNo = i;
615
+ i += 10;
616
+ }
617
+ }
618
+
619
+ return data;
620
+ },
621
+ onSelectDataChange(data, sender, selected) {
622
+ let code;
623
+ if (sender.code.endsWith('ID')) {
624
+ code = sender.code.substr(0, sender.code.length - 2);
625
+ }
626
+
627
+ let model = null;
628
+
629
+ if (typeof selected == 'object') {
630
+ if (selected instanceof Array) {
631
+ model = [];
632
+
633
+ for (let item of selected) {
634
+ if (typeof item == 'object') {
635
+ model.push(item);
636
+ } else {
637
+ if (data._rawData && data._rawData[sender.code]) {
638
+ model.push(
639
+ data._rawData[sender.code].find(rawData => {
640
+ return this.parseData(rawData, sender.sourceDataCode) == item;
641
+ })
642
+ );
643
+ } else {
644
+ model.push(item);
645
+ }
646
+ }
647
+ }
648
+ } else {
649
+ model = selected;
650
+ }
651
+ } else {
652
+ if (data._rawData && data._rawData[sender.code]) {
653
+ model = data._rawData[sender.code].find(rawData => {
654
+ return this.parseData(rawData, sender.sourceDataCode) == selected;
655
+ });
656
+ } else {
657
+ model = selected;
658
+ }
659
+ }
660
+
661
+ if (code) {
662
+ this.setData(data, code, model);
663
+ }
664
+
665
+ this.onDataChange(data, sender, model);
666
+ },
667
+ // 数据变化事件
668
+ onDataChange(data, sender, selected) {
669
+ //this.setShowStatus(data);
670
+
671
+ //this.$forceUpdate();
672
+
673
+ // 公式计算
674
+ this.calc(data, sender);
675
+
676
+ /**
677
+ * 数据变化事件
678
+ * @property {object} data 行对象
679
+ * @property {object} sender 触发的列对象
680
+ * @property {object} selected 选中对象(弹出选择框等有效)
681
+ */
682
+ this.$emit('on-change', data, sender, selected);
683
+
684
+ // 计算需要刷新的字段
685
+ if (sender == null || sender.triggers !== []) {
686
+ this.columns.forEach(function (column) {
687
+ if (
688
+ !column.isStaticItem &&
689
+ !!(column.source || '').trim() &&
690
+ !(column.dataType && column.dataType.startsWith('Enum:')) &&
691
+ (sender == null ||
692
+ sender.triggers.some(item => {
693
+ return item.code == column.code;
694
+ }))
695
+ ) {
696
+ if (data._needRefresh) {
697
+ data._needRefresh[column.code] = true;
698
+ }
699
+ }
700
+ });
701
+ }
702
+ },
703
+ // 公式计算
704
+ calc(data, sender) {
705
+ for (let i = 0; i < this.columns.length; i++) {
706
+ let column = this.columns[i];
707
+ if (!!(column.calculate || '').trim()) {
708
+ let triggers = this.getTriggers(column.calculate);
709
+ if (!sender || triggers.some(item => item == sender.code)) {
710
+ // 包含在公式中,需要刷新
711
+ let result = this.calculate(column.calculate, data);
712
+
713
+ // 保留小数
714
+ if (column.digit != null) {
715
+ result = this.keepDecimal(result, column.digit, column.fixedDigit);
716
+ }
717
+
718
+ this.setData(data, column.code, result);
719
+ }
720
+ }
721
+ }
722
+ },
723
+ // 打开表格设置界面
724
+ tableSettingOpen() {
725
+ this.tableSettingActive = true;
726
+
727
+ setTimeout(() => {
728
+ this.$refs.tableSetting.open(this.tableView, this.copy(this.tableView.columns));
729
+ });
730
+ },
731
+ // 行数据
732
+ rowData(row, index) {
733
+ return this.data[index];
734
+ },
735
+ // 获取多语言名称
736
+ getNameI18n(column) {
737
+ if (column) {
738
+ if (this.layout.showI18n) {
739
+ if (column.code) {
740
+ let key = 'DataView_' + this.tableView.code + '_' + column.code;
741
+ let text = this.$t(key);
742
+ if (text == key) {
743
+ return column.name;
744
+ } else {
745
+ return text;
746
+ }
747
+ }
748
+ } else {
749
+ return column.name;
750
+ }
751
+ }
752
+ },
753
+ // 清空数据
754
+ clear() {
755
+ this.staticData = [];
756
+ this.data = [];
757
+ },
758
+ // 弹出选择框选中
759
+
760
+ dialogCheck(row) {
761
+ let column = this.hotSetting.columns[this.coords.col];
762
+
763
+ this.$refs.table.hotInstance.setDataAtRowProp([[this.coords.row, column.data, this.parseData(row, column.sourceDisplayCode)]]);
764
+ this.$refs.dialogTable.close();
765
+
766
+ this.onSelectDataChange(this.coords.row, column, row);
767
+ }
768
+ }
769
+ };
770
+ </script>
771
+
772
+ <style>
773
+ .htContextMenu {
774
+ z-index: 9999 !important;
775
+ }
776
+ </style>