agilebuilder-ui 1.0.621 → 1.0.962

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 (120) hide show
  1. package/lib/super-ui.css +1 -1
  2. package/lib/super-ui.js +115880 -110424
  3. package/lib/super-ui.umd.cjs +103 -95
  4. package/package.json +6 -3
  5. package/packages/department-tree/src/department-tree.vue +27 -10
  6. package/packages/department-tree-inline/src/department-tree-service.js +20 -41
  7. package/packages/department-tree-mobile/src/department-tree-app.vue +6 -6
  8. package/packages/department-tree-mobile/src/department-tree-inline-app.vue +15 -15
  9. package/packages/department-user-tree/src/department-user-tree.vue +17 -2
  10. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +61 -26
  11. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +64 -22
  12. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +0 -6
  13. package/packages/department-user-tree-inline/src/group-user/group-input.vue +162 -0
  14. package/packages/department-user-tree-inline/src/group-user/group-list.vue +99 -0
  15. package/packages/department-user-tree-inline/src/group-user/group-user.vue +42 -0
  16. package/packages/department-user-tree-inline/src/group-user-multiple-tree.vue +304 -0
  17. package/packages/department-user-tree-inline/src/group-user-single-tree.vue +155 -0
  18. package/packages/department-user-tree-inline/src/group-user-tree-service.js +74 -0
  19. package/packages/department-user-tree-inline/src/search-result.vue +34 -36
  20. package/packages/department-user-tree-mobile/src/department-user-tree-app.vue +6 -6
  21. package/packages/department-user-tree-mobile/src/department-user-tree-inline-app.vue +17 -19
  22. package/packages/department-user-tree-mobile/src/department-user-tree-service.ts +0 -11
  23. package/packages/dynamic-source-select/src/dynamic-source-select.vue +795 -799
  24. package/packages/dynamic-source-select/src/events.js +11 -16
  25. package/packages/fs-upload-list/src/fs-upload-list.vue +183 -122
  26. package/packages/fs-upload-new/src/file-upload-mobile/file-upload-app.vue +246 -0
  27. package/packages/fs-upload-new/src/file-upload-mobile/file-upload-browser.vue +480 -0
  28. package/packages/fs-upload-new/src/file-upload-mobile/file-upload-component.vue +127 -0
  29. package/packages/fs-upload-new/src/file-upload-mobile/file-upload-input.vue +246 -0
  30. package/packages/fs-upload-new/src/file-upload-mobile/file-upload.vue +255 -0
  31. package/packages/fs-upload-new/src/fs-button-upload.vue +10 -13
  32. package/packages/fs-upload-new/src/fs-drag-upload.vue +4 -8
  33. package/packages/fs-upload-new/src/fs-preview-new.vue +103 -36
  34. package/packages/fs-upload-new/src/fs-upload-new.vue +160 -13
  35. package/packages/index.js +11 -2
  36. package/packages/organization-input/src/organization-input.vue +493 -539
  37. package/packages/plugins/export-data-new.js +34 -1
  38. package/packages/rich-editor/index.vue +29 -0
  39. package/packages/row-form/index.js +7 -0
  40. package/packages/row-form/index.vue +211 -0
  41. package/packages/scan-code-input/src/scan-code-input.vue +136 -104
  42. package/packages/scan-code-input-browser/index.js +6 -0
  43. package/packages/{scan-code-input/src/scan-code-input-colse.vue → scan-code-input-browser/src/scan-code-input.vue} +1 -28
  44. package/packages/secret-info/index.vue +2 -2
  45. package/packages/super-grid/src/apis.js +158 -10
  46. package/packages/super-grid/src/components/grid-icon.vue +7 -14
  47. package/packages/super-grid/src/components/hyperlinks.vue +24 -8
  48. package/packages/super-grid/src/custom-formatter.js +312 -380
  49. package/packages/super-grid/src/dynamic-input.vue +346 -43
  50. package/packages/super-grid/src/formValidatorUtil.js +79 -15
  51. package/packages/super-grid/src/group-column.vue +5 -0
  52. package/packages/super-grid/src/normal-column-content.vue +1056 -0
  53. package/packages/super-grid/src/normal-column.vue +57 -740
  54. package/packages/super-grid/src/row-detail.vue +50 -0
  55. package/packages/super-grid/src/row-operation.vue +19 -10
  56. package/packages/super-grid/src/scan-util.ts +243 -0
  57. package/packages/super-grid/src/search-button.vue +18 -14
  58. package/packages/super-grid/src/search-form-advancedQuery.vue +9 -2
  59. package/packages/super-grid/src/search-form-item.vue +10 -3
  60. package/packages/super-grid/src/search-form-mobile.vue +250 -0
  61. package/packages/super-grid/src/search-form.vue +159 -82
  62. package/packages/super-grid/src/super-grid-service.js +51 -6
  63. package/packages/super-grid/src/super-grid.vue +657 -761
  64. package/packages/super-grid/src/utils.js +126 -170
  65. package/packages/super-nine-grid/src/super-nine-grid.vue +1032 -1141
  66. package/packages/workflow-button/src/workflow-button.vue +6 -1
  67. package/packages/workgroup-tree/src/workgroup-tree.vue +31 -0
  68. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +28 -0
  69. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +26 -0
  70. package/packages/workgroup-tree-mobile/index.js +6 -0
  71. package/packages/workgroup-tree-mobile/src/dept-result.vue +51 -0
  72. package/packages/workgroup-tree-mobile/src/workgroup-tree-app.vue +120 -0
  73. package/packages/workgroup-tree-mobile/src/workgroup-tree-inline-app.vue +375 -0
  74. package/packages/workgroup-tree-mobile/src/workgroup-tree-service.ts +62 -0
  75. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +15 -0
  76. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +27 -0
  77. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +11 -0
  78. package/packages/workgroup-user-tree-mobile/index.js +6 -0
  79. package/packages/workgroup-user-tree-mobile/src/dept-path.vue +36 -0
  80. package/packages/workgroup-user-tree-mobile/src/dept-result.vue +58 -0
  81. package/packages/workgroup-user-tree-mobile/src/workgroup-user-tree-app.vue +119 -0
  82. package/packages/workgroup-user-tree-mobile/src/workgroup-user-tree-inline-app.vue +394 -0
  83. package/packages/workgroup-user-tree-mobile/src/workgroup-user-tree-service.ts +41 -0
  84. package/src/api/sso-service.js +44 -15
  85. package/src/directives/permission/permission.js +4 -3
  86. package/src/i18n/langs/cn.js +19 -3
  87. package/src/i18n/langs/en.js +18 -2
  88. package/src/permission.js +114 -122
  89. package/src/store/modules/user.js +32 -33
  90. package/src/styles/index.scss +1 -0
  91. package/src/styles/table.scss +12 -0
  92. package/src/styles/theme/dark-blue/button.scss +2 -2
  93. package/src/styles/theme/dark-blue/index.scss +1 -1
  94. package/src/styles/theme/dark-blue/sidebar.scss +10 -0
  95. package/src/styles/theme/dark-blue/table.scss +8 -52
  96. package/src/styles/theme/green/button.scss +2 -2
  97. package/src/styles/theme/green/green.scss +1 -1
  98. package/src/styles/theme/green/index.scss +1 -1
  99. package/src/styles/theme/green/sidebar.scss +20 -0
  100. package/src/styles/theme/green/table.scss +7 -51
  101. package/src/styles/theme/ocean-blue/button.scss +2 -2
  102. package/src/styles/theme/ocean-blue/index.scss +1 -1
  103. package/src/styles/theme/ocean-blue/ocean-blue.scss +1 -1
  104. package/src/styles/theme/ocean-blue/sidebar.scss +10 -0
  105. package/src/styles/theme/ocean-blue/table.scss +7 -52
  106. package/src/utils/auth.js +23 -3
  107. package/src/utils/calculator/calculator-factory.js +4 -4
  108. package/src/utils/calculator/calculator-util.js +14 -0
  109. package/src/utils/common-util.js +270 -124
  110. package/src/utils/i18n-util.js +145 -0
  111. package/src/utils/jump-page-utils.js +245 -314
  112. package/src/utils/permission.js +7 -1
  113. package/src/utils/permissionAuth.js +155 -37
  114. package/src/utils/request.js +10 -11
  115. package/src/utils/util.js +154 -205
  116. package/src/views/layout/EmptyLayout.vue +1 -1
  117. package/src/views/layout/components/Menubar/Item.vue +27 -4
  118. package/src/views/layout/components/Menubar/SidebarItem.vue +7 -3
  119. package/src/views/layout/components/Menubar/index.vue +14 -2
  120. package/src/views/layout/tab-content-index.vue +1 -1
@@ -0,0 +1,1056 @@
1
+ <template>
2
+ <div style="width: 100%">
3
+ <!--添加:key="column.prop+'_'+rowIndex"是为了解决多行是行编辑状态时新建的记录的文本框内有值的问题-->
4
+ <dynamic-input
5
+ v-if="(lineEdit.editable && isEditable && row.$editing) || isShowForm"
6
+ v-model:value="row[column.prop]"
7
+ :class="requiredClass"
8
+ :column="column"
9
+ :is-sql="isSql"
10
+ :line-edit="lineEdit"
11
+ :list-code="listCode"
12
+ :list-toolbar-form-data="listToolbarFormData"
13
+ :options="column.valueSet"
14
+ :grid-options="options"
15
+ :position="{
16
+ row: rowIndex,
17
+ prop: column.prop
18
+ }"
19
+ :disabled="disabled"
20
+ :row="row"
21
+ :row-index="rowIndex"
22
+ :type="column.componentType"
23
+ @findIndex="findIndex(rowIndex)"
24
+ @focus="onFocus(rowIndex)"
25
+ @prohibit-to-edit="prohibitToEdit"
26
+ @refresh-list="refreshList"
27
+ @refresData="refresData"
28
+ @refresMainTableFields="refresMainTableFields"
29
+ @refresPortData="refresPortData"
30
+ @refresPortsData="refresPortsData"
31
+ @change-disabled="changeDisabled"
32
+ @change-required="changeRequired"
33
+ />
34
+ <span v-else>
35
+ <span v-if="column.operations" class="grid-operation-buttons">
36
+ <span
37
+ v-for="(operation, operationIndex) in column.operations"
38
+ :key="operationIndex"
39
+ :class="isShowForm ? '' : 'cell--span'"
40
+ >
41
+ <el-dropdown
42
+ v-if="operation.isGroup"
43
+ :size="operation.buttons && operation.buttons.length > 0 ? operation.buttons[0].props.size : 'small'"
44
+ split-button
45
+ style="padding-left: 10px"
46
+ @command="handleCommand"
47
+ >
48
+ {{ $escapeHtml(operation.label) }}
49
+ <template v-slot:dropdown>
50
+ <el-dropdown-menu>
51
+ <span
52
+ v-for="(buttonChild, buttonChildIndex) in operation.buttons"
53
+ :key="buttonChild.props.code + buttonChildIndex"
54
+ >
55
+ <el-dropdown-item
56
+ v-permission="buttonChild.props.permission"
57
+ :command="beforeHandleCommand(buttonChild.props.code, row, rowIndex)"
58
+ :disabled="preventReclick"
59
+ >
60
+ {{
61
+ $escapeHtml(
62
+ buttonChild.props.label
63
+ ? buttonChild.props.label
64
+ : buttonChild.props.code === 'search'
65
+ ? $t('superPageMessage.searchButtonLabel')
66
+ : ''
67
+ )
68
+ }}
69
+ </el-dropdown-item>
70
+ </span>
71
+ </el-dropdown-menu>
72
+ </template>
73
+ </el-dropdown>
74
+ <component
75
+ :is="operation.props.customControl"
76
+ v-else-if="operation.props.customControl"
77
+ v-permission="operation.props.permission"
78
+ :key="column.prop+'_'+rowIndex+'_'+currentPage"
79
+ :disabled="true"
80
+ :row="pageGridData[rowIndex]"
81
+ :entity="pageGridData[rowIndex]"
82
+ :prop="column.prop"
83
+ :parent="parentFormData"
84
+ :row-index="rowIndex"
85
+ :grid-data="gridData"
86
+ :page-grid-data="pageGridData"
87
+ :current-page="currentPage"
88
+ @refresh-list="refreshList"
89
+ />
90
+ <row-operation
91
+ v-else
92
+ :column="column"
93
+ :editing="row.$editing"
94
+ :entity="row"
95
+ :is-show="operation.isShow"
96
+ :label="operation.props.label ? operation.props.label : row[column.prop]"
97
+ :on-click="operation.onClick"
98
+ :operation-index="operationIndex"
99
+ :operation-setting="operation.props"
100
+ :row-index="rowIndex"
101
+ :list-code="listCode"
102
+ :parent-form-data="parentFormData"
103
+ />
104
+ </span>
105
+ </span>
106
+ <span
107
+ v-else-if="customFormatValue(row, column.prop, customFormat, rowIndex)"
108
+ :class="isShowForm ? '' : 'cell--span'"
109
+ >
110
+ <component
111
+ :is="column.prop + rowIndex"
112
+ :entity="row"
113
+ :parent="parentFormData"
114
+ :prop="column.prop"
115
+ :row="row"
116
+ :row-index="rowIndex"
117
+ :select-options="column.valueSet"
118
+ :show-value="$escapeHtml(getLabel(row, rowIndex))"
119
+ :value="getCellValue(row)"
120
+ :additional-param-map="additionalParamMap"
121
+ :additional-settings="additionalSettings"
122
+ :page-context="options?.pageContext"
123
+ />
124
+ </span>
125
+ <!-- 自定义格式的时候 -->
126
+ <span
127
+ v-else-if="
128
+ columnFormatter !== undefined &&
129
+ columnFormatter.type !== undefined &&
130
+ columnFormatter.type === 'customControl' &&
131
+ columnFormatter.options &&
132
+ columnFormatter.options.format &&
133
+ columnFormatter.options.format !== ''
134
+ "
135
+ :class="isShowForm ? '' : 'cell--span'"
136
+ >
137
+ <!--:key="column.prop+'_'+rowIndex+'_'+currentPage" 为了解决子表分页时,新增自动跳转到下一页,第一条记录的自定义控件被复用,导致业务逻辑没执行 -->
138
+ <component
139
+ :is="columnFormatter.options.format"
140
+ :key="column.prop + '_' + rowIndex + '_' + currentPage"
141
+ :current-page="currentPage"
142
+ :disabled="true"
143
+ :entity="pageGridData[rowIndex]"
144
+ :get-form-data="getFormData"
145
+ :get-grid-data="getTableGridData"
146
+ :grid-data="gridData"
147
+ :page-grid-data="pageGridData"
148
+ :parent="parentFormData"
149
+ :prop="column.prop"
150
+ :row="pageGridData[rowIndex]"
151
+ :row-index="rowIndex"
152
+ :select-options="column.valueSet"
153
+ :show-value="$escapeHtml(getLabel(pageGridData[rowIndex], rowIndex))"
154
+ :value="getCellValue(pageGridData[rowIndex])"
155
+ :additional-param-map="additionalParamMap"
156
+ :listCode="listCode"
157
+ :component-id="componentId"
158
+ :additional-settings="additionalSettings"
159
+ :page-context="options?.pageContext"
160
+ @prohibitToEdit="prohibitToEdit"
161
+ @refresh-list="refreshList"
162
+ /></span>
163
+ <span
164
+ v-else-if="
165
+ columnFormatter !== undefined && columnFormatter.type !== undefined && columnFormatter.type === 'secretInfo'
166
+ "
167
+ :id="column.prop + 'DomData' + rowIndex"
168
+ :class="isShowForm ? '' : 'cell--span'"
169
+ >
170
+ <secret-info
171
+ :entity="row"
172
+ :field-label="$escapeHtml(label)"
173
+ :list-code="listCode"
174
+ :list-name="listName"
175
+ :page-code="pageCode"
176
+ :prop="column.prop"
177
+ :table-name="tableName"
178
+ :value="getCellValue(row)"
179
+ />
180
+ </span>
181
+ <span v-else-if="isObjectProp(column.prop)">
182
+ <!-- isObjectProp => prop.indexOf('.') > 0 -->
183
+ <span v-if="column.formatter && column.formatter.type === 'files'" type="primary">
184
+ <span
185
+ :id="column.prop + 'DomData' + rowIndex"
186
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
187
+ :title="isShowOverflowTooltip ? $escapeHtml(getLabel(row)) : ''"
188
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
189
+ >
190
+ <FsPreview
191
+ :entity="row"
192
+ :file-set-obj="getFilesFormatter()"
193
+ :is-sql="isSql"
194
+ :label="$escapeHtml(getLabel(row, rowIndex))"
195
+ />
196
+ </span>
197
+ </span>
198
+ <!-- <el-link
199
+ v-else-if="
200
+ columnFormatter !== undefined &&
201
+ columnFormatter.type !== undefined &&
202
+ columnFormatter.type === 'hyperlinks' &&
203
+ getMyHyperLinkSetting(row).visible === true
204
+ "
205
+ type="primary"
206
+ @click="clickHyperLink(column, row, listCode, rowIndex)"
207
+ > -->
208
+ <el-link
209
+ v-else-if="
210
+ columnFormatter !== undefined &&
211
+ columnFormatter.type !== undefined &&
212
+ columnFormatter.type === 'hyperlinks' &&
213
+ getMyHyperLinkSetting(row, rowIndex).visible === true
214
+ "
215
+ :type="getLinkType(row)"
216
+ @click="clickHyperLink(column, row, listCode, rowIndex)"
217
+ >
218
+ <span
219
+ v-if="isShowOverflowTooltip"
220
+ :id="column.prop + 'DomData' + rowIndex"
221
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
222
+ :title="getMyHyperLinkSetting(row, rowIndex).title"
223
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
224
+ >{{ getMyHyperLinkSetting(row, rowIndex).label }}
225
+ <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
226
+ <component :is="(getMyHyperLinkSetting(row), rowIndex.icon)" />
227
+ </el-icon>
228
+ </span>
229
+ <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
230
+ >{{ getMyHyperLinkSetting(row, rowIndex).label }}
231
+ <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
232
+ <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
233
+ </el-icon>
234
+ </span>
235
+ </el-link>
236
+ <span
237
+ v-else-if="isShowOverflowTooltip"
238
+ :id="column.prop + 'DomData' + rowIndex"
239
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
240
+ :title="$escapeHtml(getLabel(row))"
241
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
242
+ >{{ $escapeHtml(getLabel(row, rowIndex)) }}</span
243
+ >
244
+ <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'">{{
245
+ $escapeHtml(getLabel(row, rowIndex))
246
+ }}</span>
247
+ </span>
248
+ <span v-else>
249
+ <span v-if="column.componentType === 'annex' || column.componentType === 'multipartUpload'" type="primary">
250
+ <span
251
+ v-if="isShowOverflowTooltip"
252
+ :id="column.prop + 'DomData' + rowIndex"
253
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
254
+ :title="$escapeHtml(getLabel(row))"
255
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
256
+ >
257
+ <FsPreview
258
+ :entity="row"
259
+ :file-set-obj="getFileObj(column.fileSet)"
260
+ :is-sql="isSql"
261
+ :label="$escapeHtml(getLabel(row, rowIndex))"
262
+ />
263
+ </span>
264
+ <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'">
265
+ <FsPreview
266
+ :entity="row"
267
+ :file-set-obj="getFileObj(column.fileSet)"
268
+ :is-sql="isSql"
269
+ :label="$escapeHtml(getLabel(row, rowIndex))"
270
+ />
271
+ </span>
272
+ </span>
273
+ <span v-else-if="column.formatter && column.formatter.type === 'files'">
274
+ <span
275
+ :id="column.prop + 'DomData' + rowIndex"
276
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
277
+ :title="isShowOverflowTooltip ? $escapeHtml(getLabel(row)) : ''"
278
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
279
+ >
280
+ <FsPreview
281
+ :entity="row"
282
+ :file-set-obj="getFilesFormatter()"
283
+ :is-sql="isSql"
284
+ :label="$escapeHtml(getLabel(row, rowIndex))"
285
+ />
286
+ </span>
287
+ </span>
288
+ <!-- 超链接 -->
289
+ <el-link
290
+ v-else-if="
291
+ columnFormatter !== undefined &&
292
+ columnFormatter.type !== undefined &&
293
+ columnFormatter.type === 'hyperlinks' &&
294
+ getMyHyperLinkSetting(row, rowIndex).visible === true
295
+ "
296
+ type="primary"
297
+ @click="clickHyperLink(column, row, listCode, rowIndex)"
298
+ >
299
+ <span
300
+ v-if="isShowOverflowTooltip"
301
+ :id="column.prop + 'DomData' + rowIndex"
302
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
303
+ :title="$escapeHtml(getMyHyperLinkSetting(row, rowIndex).title)"
304
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
305
+ >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
306
+ <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
307
+ <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
308
+ </el-icon>
309
+ </span>
310
+ <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
311
+ >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
312
+ <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
313
+ <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
314
+ </el-icon>
315
+ </span>
316
+ </el-link>
317
+ <!-- 富文本 -->
318
+ <span v-else-if="column.formatter && column.formatter.type === 'richEditor'">
319
+ <el-tooltip :content="$t('superGrid.show')" class="item" effect="dark" placement="top">
320
+ <em class="fa fa-info-circle annex-cell" @click="showRichEditorContent(row, column, getHeader())" />
321
+ </el-tooltip>
322
+ </span>
323
+ <GridIcon
324
+ v-else-if="column.formatter && column.formatter.type === 'icon'"
325
+ :id="column.prop + 'DomData' + rowIndex"
326
+ :column="column"
327
+ :row="row"
328
+ :row-index="rowIndex"
329
+ :is-sql="isSql"
330
+ :list-code="listCode"
331
+ />
332
+ <span
333
+ v-else-if="isShowOverflowTooltip"
334
+ :id="column.prop + 'DomData' + rowIndex"
335
+ :style="isShowForm ? {} : { width: cellWidth + 'px' }"
336
+ :title="getLabel(row)"
337
+ :class="isShowForm ? '' : 'ellipsis cell--span'"
338
+ style="white-space: pre"
339
+ v-html="$escapeHtml(getLabel(row, rowIndex))"
340
+ />
341
+ <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'">{{
342
+ $escapeHtml(getLabel(row, rowIndex))
343
+ }}</span>
344
+ </span>
345
+ </span>
346
+ <view-image-dialog v-if="showSingleImgFlag" :file-list="fileList" @close="showSingleImgFlag = false" />
347
+ <rich-editor-viewer
348
+ v-if="showRichEditorViewer"
349
+ ref="richEditorViewerRef"
350
+ @closeRichEditorContent="closeRichEditorContent"
351
+ />
352
+ </div>
353
+ </template>
354
+
355
+ <script>
356
+ import { CirclePlus, ZoomIn as ElIconZoomIn } from '@element-plus/icons-vue'
357
+ import { $emit, $off, $on } from '../../utils/gogocodeTransfer'
358
+ import {
359
+ ArrowKeyAction,
360
+ getColumnValues,
361
+ getFileList,
362
+ isDynamicDataSourceSource,
363
+ isHasEditOption,
364
+ isRequiredEdit,
365
+ getAdditionalParamMap,
366
+ getContentAlign,
367
+ getHeaderAlign
368
+ } from './utils'
369
+ import DynamicInput from './dynamic-input.vue'
370
+ import store from './store'
371
+ import { doFormatWithValueSet } from './formatter'
372
+ import customFormatter from './custom-formatter'
373
+ import RowOperation from './row-operation.vue'
374
+ import apis from './apis'
375
+ import { mapGetters } from 'vuex'
376
+ import { getEntityFieldValue, getParentObjectUtil } from '../../../src/utils/util'
377
+ import ViewImageDialog from './view-image-dialog.vue'
378
+ import eventBus from './eventBus'
379
+ import FsPreview from '../../fs-preview'
380
+ import RichEditorViewer from '../../rich-editor/viewer.vue'
381
+ import GridIcon from './components/grid-icon.vue'
382
+ import { formatScanRuleSets } from './scan-util.ts'
383
+ export default {
384
+ components: {
385
+ DynamicInput,
386
+ RowOperation,
387
+ ViewImageDialog,
388
+ FsPreview,
389
+ RichEditorViewer,
390
+ CirclePlus,
391
+ ElIconZoomIn,
392
+ GridIcon
393
+ },
394
+ name: 'NormalColumnContent',
395
+ props: {
396
+ column: {
397
+ type: Object,
398
+ default: null
399
+ },
400
+ customFormat: {
401
+ type: Function,
402
+ default: null
403
+ },
404
+ listCode: {
405
+ type: String,
406
+ default: null
407
+ },
408
+ isSql: {
409
+ type: Boolean,
410
+ default: false
411
+ },
412
+ newWidth: {
413
+ type: Number,
414
+ default: null
415
+ },
416
+ dragColumnProp: {
417
+ type: String,
418
+ default: null
419
+ },
420
+ tableName: {
421
+ type: String,
422
+ default: null
423
+ },
424
+ pageCode: {
425
+ type: String,
426
+ default: null
427
+ },
428
+ listName: {
429
+ type: String,
430
+ default: null
431
+ },
432
+ currentPage: {
433
+ type: Number,
434
+ default: 1
435
+ },
436
+ gridData: {
437
+ type: Array,
438
+ default: null
439
+ },
440
+ pageGridData: {
441
+ type: Array,
442
+ default: null
443
+ },
444
+ listToolbarFormData: {
445
+ type: Object,
446
+ default: null
447
+ },
448
+ // 行记录
449
+ row: {
450
+ type: Object,
451
+ default: null
452
+ },
453
+ // 行记录序号
454
+ rowIndex: {
455
+ type: Number,
456
+ default: null
457
+ },
458
+ // 是否在查看子表记录
459
+ isShowForm: {
460
+ type: Boolean,
461
+ default: false
462
+ }
463
+ },
464
+ data() {
465
+ let parentFormData
466
+ const gridParams = store.get(this.listCode)
467
+ const options = gridParams.options
468
+ if (gridParams.options.extraParam && gridParams.options.extraParam.entityMap) {
469
+ parentFormData = gridParams.options.extraParam.entityMap
470
+ }
471
+ const additionalParamMap = getAdditionalParamMap(gridParams)
472
+ let controlConfig = {}
473
+ if (this.column.controlConfig) {
474
+ controlConfig = JSON.parse(this.column.controlConfig)
475
+ }
476
+
477
+ let scanEnable = false
478
+ if (controlConfig.scanEnable) {
479
+ scanEnable = true
480
+ }
481
+ const componentId = this.listCode + '_' + this.column.prop
482
+ let lineEdit
483
+ if (gridParams.lineEdit !== null && gridParams.lineEdit !== undefined) {
484
+ lineEdit = gridParams.lineEdit
485
+ }
486
+ return {
487
+ selectRow: null,
488
+ that: this,
489
+ align: 'left', // 文本内容对齐
490
+ headerAlign: 'left', // 表头对齐方式
491
+ columnFormatter: this.column.formatter,
492
+ hyperLinks: {},
493
+ fileDownType: '',
494
+ isFormSubTable: false, // 是否是表单子表
495
+ subTableCanAdd: true, // 表单子表时是否有新增权限
496
+ isShowAdd: false, // 是否显示表头的新增按钮
497
+ cellWidth: null,
498
+ parentFormData,
499
+ fileMultiple: false, // 附件上传是否多选
500
+ showSingleImgFlag: false,
501
+ singleImgSrc: '',
502
+ fileList: [],
503
+ index: null,
504
+ isEditable: this.column.editable,
505
+ showRichEditorViewer: false,
506
+ getFormData: gridParams.options.getFormData,
507
+ getTableGridData: gridParams.options.getGridData,
508
+ additionalParamMap,
509
+ disabled: false,
510
+ additionalSettings: this.getColumnCustomControlControlConfig(this.column.formatter),
511
+ scanEnable,
512
+ componentId,
513
+ controlConfig,
514
+ rowLinkConfigMapping: {},
515
+ requiredClass: '',
516
+ lineEdit,
517
+ options
518
+ }
519
+ },
520
+ computed: {
521
+ // lineEdit() {
522
+ // let isLineEdit = false
523
+ // if (this.listCode) {
524
+ // const gridParams = store.get(this.listCode)
525
+ // if (gridParams.lineEdit !== null && gridParams.lineEdit !== undefined) {
526
+ // isLineEdit = gridParams.lineEdit
527
+ // } else {
528
+ // isLineEdit = false
529
+ // }
530
+ // }
531
+ // return isLineEdit
532
+ // },
533
+
534
+ ...mapGetters(['preventReclick'])
535
+ },
536
+ watch: {
537
+ isSql: {
538
+ deep: true,
539
+
540
+ handler(newValue, oldValue) {
541
+ this.isSql = newValue
542
+ }
543
+ },
544
+ newWidth: {
545
+ deep: true,
546
+
547
+ handler(newValue, oldValue) {
548
+ if (
549
+ newValue !== undefined &&
550
+ newValue !== null &&
551
+ this.dragColumnProp &&
552
+ this.dragColumnProp === this.column.prop
553
+ ) {
554
+ this.cellWidth = newValue
555
+ }
556
+ }
557
+ }
558
+ },
559
+ created() {
560
+ if (this.column.width) {
561
+ this.cellWidth = this.column.width - 10
562
+ }
563
+ const gridParams = store.get(this.listCode)
564
+ if (gridParams && gridParams.options && gridParams.options.isFormSubTable) {
565
+ this.isFormSubTable = gridParams.options.isFormSubTable
566
+ }
567
+ if (
568
+ gridParams &&
569
+ gridParams.options &&
570
+ gridParams.options.subTableCanAdd !== undefined &&
571
+ gridParams.options.subTableCanAdd !== null
572
+ ) {
573
+ this.subTableCanAdd = gridParams.options.subTableCanAdd
574
+ }
575
+ if (this.column.prop && this.column.prop === 'operation') {
576
+ // 如果是操作列按钮则不显示省略号
577
+ this.isShowOverflowTooltip = false
578
+ } else {
579
+ if (
580
+ typeof gridParams.options.showOverflowTooltip !== 'undefined' &&
581
+ gridParams.options.showOverflowTooltip === false
582
+ ) {
583
+ this.isShowOverflowTooltip = false
584
+ } else {
585
+ this.isShowOverflowTooltip = true
586
+ }
587
+ }
588
+ const align = getContentAlign(this.column, gridParams)
589
+ if (align) {
590
+ this.align = gridParams.options.align
591
+ }
592
+ const headerAlign = getHeaderAlign(this.column, gridParams)
593
+ if (headerAlign) {
594
+ this.headerAlign = headerAlign
595
+ }
596
+ if (gridParams.isHasDynamic === undefined && this.column.dynamic !== undefined && this.column.dynamic === true) {
597
+ // 当前列表中有动态列
598
+ gridParams.isHasDynamic = true
599
+ }
600
+ this.label = this.getHeader()
601
+ if (this.column.operations) {
602
+ // console.log('this.column.operations', this.column.operations)
603
+ }
604
+ // console.log('gridParams.options.subTableCanAdd=', gridParams.options.subTableCanAdd, 'this.subTableCanAdd=', this.subTableCanAdd)
605
+ this.isShowAdd =
606
+ this.isFormSubTable &&
607
+ this.column.prop === 'operation' &&
608
+ this.subTableCanAdd &&
609
+ gridParams.options &&
610
+ gridParams.options.showOperationButton
611
+ if (this.column.fileSet && this.column.fileSet !== '' && this.column.componentType === 'annex') {
612
+ const fileSetObj = JSON.parse(this.column.fileSet)
613
+ if (fileSetObj && fileSetObj.multiple) {
614
+ this.fileMultiple = true
615
+ }
616
+ }
617
+ this.setScanRuleSets()
618
+ this.requiredClass = this.isRequired(this.row.$editing) ? 'm-requried' : ''
619
+ },
620
+ mounted() {
621
+ // 监听保存时点击按钮事件线触发
622
+ $on(eventBus, 'un-edit', (param) => {
623
+ // 处理多选选项组问题保存问题
624
+ if (
625
+ this.column.componentType &&
626
+ (this.column.componentType === 'multiselect' || this.column.componentType === 'select')
627
+ ) {
628
+ const isDynamic = isDynamicDataSourceSource(this.column)
629
+ let beforeColumnValue = param.row[this.column.prop]
630
+ if (!isDynamic) {
631
+ // 选项组保存时将数组处理为字符串
632
+ if (beforeColumnValue && Object.prototype.toString.apply(beforeColumnValue) === '[object Array]') {
633
+ // 如果是数组才需要转换
634
+ param.row[this.column.prop] = beforeColumnValue.join(',')
635
+ }
636
+ } else {
637
+ // 动态数据源多选保存时,获取已选择的字段,由于多选选项组的值是数组,保存时要拼接成“ ,” 分隔的字符串
638
+ if ('_dynamic-source-data-' + this.column.prop in this.column) {
639
+ const temp = this.column['_dynamic-source-data-' + this.column.prop]
640
+ const valueSetOptions = temp.valueSetOptions
641
+ // 获取当前字段对应在映射关系中对应的是动态数据源中的哪一个字段key
642
+ let selectDataKey
643
+ for (let i = 0; i < valueSetOptions.length; i++) {
644
+ const valueSetOption = valueSetOptions[i]
645
+ if (this.column.prop === valueSetOption.valueColumn.dbColumnName) {
646
+ selectDataKey = valueSetOption.columnName
647
+ break
648
+ }
649
+ }
650
+ if (selectDataKey) {
651
+ // beforeColumnValue是数组值,如果是单选则是字符串
652
+ if (this.column.componentType === 'select') {
653
+ if (selectDataKey !== temp.valueAttribute) {
654
+ // 解决当前字段不是动态数据源选项值所映射的字段的问题 例如当前字段是工厂名称, 动态数据源选项值是工厂编码
655
+ // 当前字段映射的是工厂名称,
656
+ // 筛选动态数据源选项值字段对应的当前字段所映射的字段, 例如 根据工厂编码找工厂编码对应的工厂名称
657
+ // 找出名称后赋值给当前字段
658
+ const filterValue = temp.optionItems.find((item) => item[temp.valueAttribute] === beforeColumnValue)
659
+ if (filterValue) {
660
+ beforeColumnValue = filterValue[selectDataKey]
661
+ }
662
+ }
663
+ param.row[this.column.prop] = beforeColumnValue
664
+ } else {
665
+ if (beforeColumnValue && selectDataKey !== temp.valueAttribute) {
666
+ if (typeof beforeColumnValue === 'string') {
667
+ beforeColumnValue = beforeColumnValue.split(',')
668
+ }
669
+ // 解决当前字段不是动态数据源选项值所映射的字段的问题 例如当前字段是工厂名称, 动态数据源选项值是工厂编码
670
+ const t = []
671
+ beforeColumnValue.forEach((selectItem) => {
672
+ if (selectDataKey !== temp.valueAttribute) {
673
+ const filterValue = temp.optionItems.find((option) => option[temp.valueAttribute] === selectItem)
674
+ if (filterValue) {
675
+ t.push(filterValue[selectDataKey])
676
+ }
677
+ }
678
+ })
679
+ if (t.length > 0) {
680
+ beforeColumnValue = t
681
+ param.row[this.column.prop] = beforeColumnValue.join(',')
682
+ }
683
+ }
684
+ }
685
+ }
686
+ } else {
687
+ if (beforeColumnValue && Object.prototype.toString.apply(beforeColumnValue) === '[object Array]') {
688
+ // 如果是数组才需要转换
689
+ param.row[this.column.prop] = beforeColumnValue.join(',')
690
+ }
691
+ }
692
+ }
693
+ }
694
+ })
695
+ const that = this
696
+ if (this.$parent.$parent && this.$parent.$parent.$options._componentTag === 'GroupColumn') {
697
+ eventBus.$on('prohibitToEdit', (param) => {
698
+ if (param[that.column.prop] !== undefined) {
699
+ that.fnProhibitToEdit(param[that.column.prop])
700
+ }
701
+ })
702
+ }
703
+ },
704
+ unmounted() {
705
+ $off(eventBus, 'un-edit')
706
+ if (this.$parent.$parent && this.$parent.$parent.$options._componentTag === 'GroupColumn') {
707
+ eventBus.$off('prohibitToEdit')
708
+ }
709
+ },
710
+ methods: {
711
+ ...customFormatter,
712
+ ...apis,
713
+ getFileObj(fileSet) {
714
+ if (fileSet) {
715
+ return JSON.parse(fileSet)
716
+ }
717
+ },
718
+ getHeader() {
719
+ if (!this.column.titleValueSet) {
720
+ return this.column.label.replace(/\\n/g, '</br>')
721
+ } else {
722
+ return this.formatHeader()
723
+ }
724
+ },
725
+ formatHeader() {
726
+ return doFormatWithValueSet(this.column.titleValueSetValue, this.column.label)
727
+ },
728
+ filterHandler(value, row, column) {
729
+ const property = column['property']
730
+ return row[property] === value
731
+ },
732
+ onFocus(index) {
733
+ const gridParams = store.get(this.listCode)
734
+ if (gridParams.lineEdit.editingCell) {
735
+ gridParams.lineEdit.editingCell.row = index
736
+ gridParams.lineEdit.editingCell.prop = this.column.prop
737
+ }
738
+ },
739
+ findIndex(index) {
740
+ this.index = index
741
+ const gridParams = store.get(this.listCode)
742
+ if (gridParams.lineEdit.editingCell) {
743
+ gridParams.lineEdit.editingCell.row = index
744
+ gridParams.lineEdit.editingCell.prop = this.column.prop
745
+ }
746
+ },
747
+ refresData(data) {
748
+ $emit(this, 'refresData', data)
749
+ },
750
+ refresPortData(port, value) {
751
+ const gridParams = store.get(this.listCode)
752
+ console.log('gridParams', gridParams)
753
+ console.log('this.index', this.index)
754
+ if (gridParams && gridParams.lineEdit && gridParams.lineEdit.editingCell) {
755
+ $emit(this, 'refresPortData', port, value, gridParams.lineEdit.editingCell.row)
756
+ } else {
757
+ $emit(this, 'refresPortData', port, value, this.index)
758
+ }
759
+ },
760
+ refresPortsData(map) {
761
+ const gridParams = store.get(this.listCode)
762
+ console.log('gridParams', gridParams)
763
+ console.log('this.index', this.index)
764
+ if (gridParams && gridParams.lineEdit && gridParams.lineEdit.editingCell) {
765
+ $emit(this, 'refresPortsData', map, gridParams.lineEdit.editingCell.row)
766
+ } else {
767
+ $emit(this, 'refresPortsData', map, this.index)
768
+ }
769
+ },
770
+ refresMainTableFields(map) {
771
+ $emit(this, 'refresMainTableFields', map)
772
+ },
773
+ // @keyup.native.left="move('left')"
774
+ // @keyup.native.right="move('right')"
775
+ // @keyup.native.up="move('up')"
776
+ // @keyup.native.down="move('down')"
777
+ move(direction) {
778
+ if (direction === 'left') {
779
+ const prop = ArrowKeyAction.getLeftColumn(this.column.prop)
780
+ const gridParams = store.get(this.listCode)
781
+ gridParams.lineEdit.editingCell.prop = prop
782
+ }
783
+ },
784
+ // filterHandler(value, row, column) {
785
+ // const property = column['property']
786
+ // return row[property] === value
787
+ // },
788
+ isSaveByEnter() {
789
+ const gridParams = store.get(this.listCode)
790
+ return (
791
+ typeof gridParams.options.lineEditOptions.isSaveByEnter === 'undefined' ||
792
+ (isHasEditOption('isSaveByEnter', this.listCode) && gridParams.options.lineEditOptions.isSaveByEnter === true)
793
+ )
794
+ },
795
+ isRestoreByEsc() {
796
+ const gridParams = store.get(this.listCode)
797
+ return (
798
+ typeof gridParams.options.lineEditOptions.isRestoreByEsc === 'undefined' ||
799
+ (isHasEditOption('isRestoreByEsc', this.listCode) && gridParams.options.lineEditOptions.isRestoreByEsc === true)
800
+ )
801
+ },
802
+ canFocus(index) {
803
+ const gridParams = store.get(this.listCode)
804
+ if (index === gridParams.lineEdit.editingCell.row && this.column.prop === gridParams.lineEdit.editingCell.prop) {
805
+ return true
806
+ } else {
807
+ return false
808
+ }
809
+ },
810
+ getLabel(row, index) {
811
+ this.transferColumnDataToUpperCase(row)
812
+ const obj = this.objectPropValueTwo(row, this.column)
813
+ // // 存储执行时间
814
+ // const get2 = new Date().getTime()
815
+ // const get3 = Number(get2) - Number(get1)
816
+ // if (!window.sessionStorage.getItem('getLabel')) {
817
+ // window.sessionStorage.setItem('getLabel', get3)
818
+ // } else {
819
+ // const get4 = window.sessionStorage.getItem('getLabel')
820
+ // const get5 = Number(get4) + Number(get3)
821
+ // window.sessionStorage.setItem('getLabel', get5)
822
+ // }
823
+ return obj
824
+ // const returnValue = this.objectPropValueTwo(row, this.column)
825
+ // if (returnValue) {
826
+ // // 解决当文本中有多个空格时候, vue自动将多个空格合并为一个空格,
827
+ // // 或者修改vue的配置 https://cn.vuejs.org/api/application.html#app-config-compileroptions app.config.compilerOptions.whitespace
828
+ // return returnValue.replaceAll(' ', '\u00A0')
829
+ // }
830
+ // return returnValue
831
+ },
832
+ getCellValue(row) {
833
+ let cellValue = getEntityFieldValue(row, this.column.prop, false)
834
+ if (cellValue === undefined || cellValue === null) {
835
+ this.transferColumnDataToUpperCase(row)
836
+ cellValue = getEntityFieldValue(row, this.column.prop, false)
837
+ }
838
+ return cellValue
839
+ },
840
+ // 兼容oracle和mysql数据库,oracle是字段名是大写的,mysql是小写的,将小写转为大写
841
+ transferColumnDataToUpperCase(row) {
842
+ const reg1 = /[A-Z]+/ // 大写字母
843
+ if (this.isSql && reg1.test(this.column.prop)) {
844
+ this.transferColumnDataToUpperCaseWithProp(row, this.column.prop.toLowerCase(), this.column.prop)
845
+ }
846
+ },
847
+ transferColumnDataToUpperCaseWithProp(row, propLowerCase, columnProp) {
848
+ let dataModel
849
+ if (propLowerCase && propLowerCase.indexOf('.') > 0) {
850
+ const parentObj = getParentObjectUtil(propLowerCase, row)
851
+ const prop = propLowerCase.substring(propLowerCase.lastIndexOf('.') + 1)
852
+ dataModel = parentObj[prop]
853
+ if (dataModel !== undefined) {
854
+ // sql字段名小写转大写,兼容mysql、oracle数据库
855
+ parentObj[columnProp] = dataModel
856
+ delete parentObj[prop]
857
+ }
858
+ } else {
859
+ dataModel = row[propLowerCase]
860
+ if (dataModel !== undefined) {
861
+ // sql字段名小写转大写,兼容mysql、oracle数据库
862
+ row[columnProp] = dataModel
863
+ delete row[propLowerCase]
864
+ }
865
+ }
866
+ return dataModel
867
+ },
868
+ getMyHyperLinkSetting(row, rowIndex) {
869
+ this.transferColumnDataToUpperCase(row)
870
+ const gridParams = store.get(this.listCode)
871
+ let tableName
872
+ if (gridParams && gridParams.basicInfo && gridParams.basicInfo.tableName) {
873
+ tableName = gridParams.basicInfo.tableName
874
+ }
875
+ const hyperLinkResult = this.getHyperLinkSetting(
876
+ this.column,
877
+ row,
878
+ this.isSql,
879
+ this.additionalParamMap,
880
+ gridParams.contextParameter,
881
+ tableName,
882
+ this.listCode
883
+ )
884
+ if (hyperLinkResult.jumpPageSetting && rowIndex !== undefined) {
885
+ this.rowLinkConfigMapping[rowIndex] = hyperLinkResult.jumpPageSetting
886
+ }
887
+ hyperLinkResult.icon = this.getHyperIconClass(hyperLinkResult)
888
+ return hyperLinkResult
889
+ },
890
+ getHyperIconClass(hyperLinkResult) {
891
+ let iconName
892
+ if (hyperLinkResult && hyperLinkResult !== null && hyperLinkResult.icon && hyperLinkResult.icon !== '') {
893
+ iconName = hyperLinkResult.icon
894
+ }
895
+ if (iconName && iconName.indexOf('fa-') === 0) {
896
+ // 表示以“fa-”开头,使用font-awesome中的图标
897
+ iconName = 'fa ' + iconName
898
+ }
899
+ return iconName
900
+ },
901
+ createFormSubTableRow() {
902
+ console.log('触发了行新建')
903
+ this.createRow(this.listCode)
904
+ },
905
+ handleCommand(comman) {
906
+ let prop = null
907
+ this.column.operations.forEach((item) => {
908
+ if (item.isGroup) {
909
+ item.buttons.forEach((button) => {
910
+ if (button.props.code === comman.comman) {
911
+ prop = button
912
+ }
913
+ })
914
+ }
915
+ })
916
+ if (prop) {
917
+ customFormatter.onClickFun(comman.row, this.column, prop.onClick, comman.rowIndex)
918
+ }
919
+ },
920
+ beforeHandleCommand(comman, row, rowIndex) {
921
+ return {
922
+ comman: comman,
923
+ row: row,
924
+ rowIndex: rowIndex
925
+ }
926
+ },
927
+ previewImg(row) {
928
+ this.fileList = getFileList(row, this.column, this.isSql)
929
+ this.showSingleImgFlag = true
930
+ },
931
+ getFileList(row) {
932
+ return getFileList(row, this.column, this.isSql)
933
+ },
934
+ getColumnWidth() {
935
+ if (this.column && this.column.prop === 'operation' && !this.column.width) {
936
+ // 表示操作列,宽度固定
937
+ return '210'
938
+ }
939
+ return this.column.width ? this.column.width + '' : '130'
940
+ },
941
+ // 设置字段禁止编辑
942
+ fnProhibitToEdit(isEditable) {
943
+ this.$nextTick(() => {
944
+ this.disabled = !isEditable
945
+ })
946
+ },
947
+ // 设置字段禁止编辑
948
+ prohibitToEdit(entity) {
949
+ $emit(this, 'prohibitToEdit', entity)
950
+ },
951
+ isFieldRequired() {
952
+ return isRequiredEdit(this.column, this.listCode)
953
+ // return true
954
+ },
955
+ // 展示富文本内容
956
+ showRichEditorContent(row, column, header) {
957
+ this.showRichEditorViewer = true
958
+ this.$nextTick(() => {
959
+ this.$refs.richEditorViewerRef.showContent(row[column.prop], header)
960
+ })
961
+ },
962
+ closeRichEditorContent() {
963
+ this.showRichEditorViewer = false
964
+ },
965
+ getColumnCustomControlControlConfig(columnFormatter) {
966
+ if (columnFormatter && columnFormatter.options && columnFormatter.options.controlConfig) {
967
+ const controlConfig = JSON.parse(columnFormatter.options.controlConfig)
968
+ if (this.controlConfig) {
969
+ Object.assign(controlConfig, this.controlConfig)
970
+ }
971
+ return controlConfig
972
+ } else {
973
+ return this.controlConfig
974
+ }
975
+ },
976
+ isRequired(editing) {
977
+ console.log('isRequired---this.lineEdit=', this.lineEdit)
978
+ if (!this.isFormSubTable && this.lineEdit && this.lineEdit.editable && this.isEditable && editing && this.column.validations) {
979
+ if (this.column.validations.indexOf('"required":true') > 0) {
980
+ return true
981
+ }
982
+ }
983
+ return false
984
+ },
985
+ getFormatIconSetting(row) {
986
+ this.transferColumnDataToUpperCase(row)
987
+ const gridParams = store.get(this.listCode)
988
+ const result = this.getIconSetting(this.column, row, this.isSql, gridParams, this.listCode)
989
+ result.icon = this.getHyperIconClass(result)
990
+ if (this.column.formatter.options && this.column.formatter.options.format) {
991
+ result.position = JSON.parse(this.column.formatter.options.format).position
992
+ }
993
+ return result
994
+ },
995
+ getLinkType(row) {
996
+ if (this.column.events && this.column.events['cellStyle']) {
997
+ const params = {
998
+ value: row[this.column.property],
999
+ row: row,
1000
+ column: this.column,
1001
+ prop: this.column.property
1002
+ }
1003
+ const gridParams = store.get(this.listCode)
1004
+ return gridParams.options['eventCallBack'][this.column.events['cellStyle']].call(this, params)
1005
+ }
1006
+ return 'primary'
1007
+ },
1008
+ changeDisabled(state) {
1009
+ this.disabled = state
1010
+ },
1011
+ refreshList() {
1012
+ this.$emit('refresh-list')
1013
+ },
1014
+ getFilesFormatter() {
1015
+ if (this.column.formatter.options?.fileSet) {
1016
+ return JSON.parse(this.column.formatter.options.fileSet)
1017
+ }
1018
+ return {}
1019
+ },
1020
+ /**
1021
+ * 设置条码扫描解析规则
1022
+ */
1023
+ setScanRuleSets() {
1024
+ if (this.scanEnable && this.controlConfig && this.controlConfig.scanRuleList) {
1025
+ formatScanRuleSets(this.controlConfig.scanRuleList).then((res) => {
1026
+ //扫描处理
1027
+ this.column._scanRuleSets = res
1028
+ })
1029
+ }
1030
+ },
1031
+ changeRequired(required) {
1032
+ this.requiredClass = required? 'm-requried' : ''
1033
+ }
1034
+ },
1035
+ emits: ['refresData', 'refresPortData', 'refresPortsData', 'refresMainTableFields', 'prohibitToEdit']
1036
+ }
1037
+ </script>
1038
+
1039
+ <style lang="scss" scoped>
1040
+ .annex-cell {
1041
+ padding-right: 5px;
1042
+ cursor: pointer;
1043
+ color: #409eff;
1044
+ }
1045
+
1046
+ .m-requried {
1047
+ float: left;
1048
+ white-space: nowrap;
1049
+ width: 96%;
1050
+ }
1051
+
1052
+ .m-requried::after {
1053
+ content: '*';
1054
+ color: #f56c6c;
1055
+ }
1056
+ </style>