cloud-web-corejs 1.1.0-dev.11 → 1.1.0-dev.14

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 (48) hide show
  1. package/package.json +1 -1
  2. package/src/components/VabUpload/view.vue +25 -25
  3. package/src/components/excelExport/exportColumnMemory.js +118 -0
  4. package/src/components/excelExport/exportFieldDialog.vue +50 -38
  5. package/src/components/excelExport/index.js +30 -13
  6. package/src/components/excelExport/mixins.js +403 -65
  7. package/src/components/excelImport/mixins.js +898 -850
  8. package/src/components/mobile/wf/addTaskUserdialog.vue +100 -100
  9. package/src/components/mobile/wf/content.vue +4 -4
  10. package/src/components/mobile/wf/deleteTaskUserDialog.vue +73 -73
  11. package/src/components/mobile/wf/setCandidateDialog.vue +69 -69
  12. package/src/components/mobile/wf/urgingDialog.vue +75 -75
  13. package/src/components/table/index.js +14 -1
  14. package/src/components/table/vxeFilter/mixin.js +28 -18
  15. package/src/components/xform/docs/2026-07 table/344/270/216excelExport/344/277/256/345/244/215/345/217/212/345/257/274/345/207/272/344/274/230/345/214/226.md" +64 -57
  16. package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +528 -0
  17. package/src/components/xform/docs/2026-08 xform H5 P1 /345/256/236/347/216/260/350/247/204/346/240/274.md" +412 -0
  18. package/src/components/xform/docs/2026-08 xform H5 P2 /345/256/236/347/216/260/350/247/204/346/240/274.md" +287 -0
  19. package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +400 -0
  20. package/src/components/xform/docs/2026-09 /346/235/241/344/273/266/345/257/274/345/207/272/345/244/247/346/225/260/346/215/256/351/207/217/345/264/251/346/272/203/346/216/222/346/237/245.md" +389 -0
  21. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +243 -243
  22. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +228 -228
  23. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +165 -165
  24. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +61 -2
  25. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +3 -0
  26. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +145 -145
  27. package/src/components/xform/form-render/container-item/data-table-item.vue +350 -347
  28. package/src/components/xform/form-render/container-item/data-table-mixin.js +251 -37
  29. package/src/components/xform/form-render/container-item/list-h5-item.vue +1 -1
  30. package/src/components/xform/utils/dynamicSchemaUtil.js +385 -361
  31. package/src/layout/components/TagsView/index.vue +325 -323
  32. package/src/store/modules/tagsView.js +241 -217
  33. package/src/utils/importLimit.js +72 -0
  34. package/src/utils/pdfUtil.js +6 -1
  35. package/src/utils/request.js +17 -0
  36. package/src/views/demo/bizTab/bill/billConfig.js +41 -0
  37. package/src/views/demo/bizTab/bill/detail.vue +436 -0
  38. package/src/views/demo/bizTab/bill/list.vue +288 -0
  39. package/src/views/demo/bizTab/bill/productDialog.vue +176 -0
  40. package/src/views/demo/bizTab/simple/billApi.js +123 -0
  41. package/src/views/demo/bizTab/simple/detail.vue +407 -0
  42. package/src/views/demo/bizTab/simple/list.vue +217 -0
  43. package/src/views/demo/bizTab/standalone/index.vue +121 -0
  44. package/src/views/demo/bizTab/wf/billConfig.js +44 -0
  45. package/src/views/demo/bizTab/wf/detail.vue +661 -0
  46. package/src/views/demo/bizTab/wf/list.vue +242 -0
  47. package/src/views/user/home/wjl/content.vue +1569 -0
  48. package/src/views/user/outLink/cc_form_view.vue +188 -0
@@ -1,347 +1,350 @@
1
- <template>
2
- <vxe-grid
3
- :ref="widget.id"
4
- v-bind="vxeOption"
5
- :auto-resize="true"
6
- v-show="!widget.options.hidden"
7
- @resizable-change="$vxeTableUtil.onColumnWitchChange"
8
- @custom="$vxeTableUtil.customHandle"
9
- @checkbox-change="handleCheckboxChange"
10
- @checkbox-all="handleCheckboxAll"
11
- @cell-dblclick="handleCellDblclick"
12
- :class="dataTableConfig.class"
13
- :data="fieldModel"
14
- v-on="eventConfig"
15
- >
16
- <template #form>
17
- <tableForm
18
- v-if="widget.options.isQueryTable"
19
- :formData.sync="formModel"
20
- :xform="true"
21
- @searchEvent="searchEvent"
22
- @resetEvent="resetEvent"
23
- @advancedClear="advancedClear"
24
- @settingConfirm="tableFormSettingConfirm"
25
- >
26
- <template #buttonLeft>
27
- <template v-if="!!widget.buttons && widget.buttons.length > 0">
28
- <template v-for="(subWidget, swIdx) in widget.buttons">
29
- <template v-if="'container' === subWidget.category">
30
- <component
31
- :is="subWidget.type + '-item'"
32
- :widget="subWidget"
33
- :key="swIdx"
34
- :parent-list="widget.buttons"
35
- :index-of-parent-list="swIdx"
36
- :parent-widget="widget"
37
- >
38
- <!-- 递归传递插槽!!! -->
39
- <template
40
- v-for="slot in Object.keys($scopedSlots)"
41
- v-slot:[slot]="scope"
42
- >
43
- <slot :name="slot" v-bind="scope" />
44
- </template>
45
- </component>
46
- </template>
47
- <template v-else>
48
- <component
49
- :is="subWidget.type + '-widget'"
50
- :field="subWidget"
51
- :designer="null"
52
- :key="swIdx"
53
- :parent-list="widget.buttons"
54
- :index-of-parent-list="swIdx"
55
- :parent-widget="widget"
56
- >
57
- <!-- 递归传递插槽!!! -->
58
- <template
59
- v-for="slot in Object.keys($scopedSlots)"
60
- v-slot:[slot]="scope"
61
- >
62
- <slot :name="slot" v-bind="scope" />
63
- </template>
64
- </component>
65
- </template>
66
- </template>
67
- </template>
68
- </template>
69
- <template #buttonRight>
70
- <vxe-button
71
- icon="el-icon-brush"
72
- class="button-sty"
73
- @click="handleResetClick"
74
- type="text"
75
- status="primary"
76
- plain
77
- >{{ $t1("刷新") }}
78
- </vxe-button>
79
- <vxe-button
80
- status="warning"
81
- icon="el-icon-search"
82
- class="button-sty"
83
- @click="handleSearchClick"
84
- >
85
- {{ $t2("搜索") }}
86
- </vxe-button>
87
- </template>
88
-
89
- <template
90
- v-for="(subWidget, swIdx) in widget.widgetList"
91
- v-slot:[subWidget.options.name]
92
- >
93
- <component
94
- v-if="'container' !== subWidget.category"
95
- :key="swIdx"
96
- :is="subWidget.type + '-widget'"
97
- :field="subWidget"
98
- :designer="null"
99
- :parent-list="subWidget.widgetList"
100
- :parent-widget="widget"
101
- >
102
- <!-- 递归传递插槽!!! -->
103
- <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
104
- <slot :name="slot" v-bind="scope" />
105
- </template>
106
- </component>
107
- </template>
108
-
109
- <template #searchWidget="{ searchColumn }">
110
- <component
111
- :is="searchColumn.widget.type + '-widget'"
112
- :field="searchColumn.widget"
113
- :designer="null"
114
- :parent-list="searchColumn.widget.widgetList"
115
- :parent-widget="searchColumn.widget"
116
- formItemType="vxe-form-item"
117
- >
118
- <!-- 递归传递插槽!!! -->
119
- <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
120
- <slot :name="slot" v-bind="scope" />
121
- </template>
122
- </component>
123
- </template>
124
- </tableForm>
125
- <treeMoveDialog
126
- v-if="showTreeMoveDialog"
127
- :visiable.sync="showTreeMoveDialog"
128
- :rows.sync="sortRows"
129
- :parent-target="_self"
130
- @confirm="confirmTreeMoveDialog"
131
- ></treeMoveDialog>
132
- </template>
133
- <template #widget="obj">
134
- <template v-if="!!getTableColumnWidget(obj)">
135
- <template v-if="obj.column.params.widget.type == 'status'">
136
- <template
137
- v-for="(item, index) in getTableColumnWidget(obj).options.statusParam"
138
- >
139
- <template v-if="isShowColumnStatusWidget(obj, item)">
140
- <span
141
- v-if="
142
- getTableColumnWidget(obj).options.formScriptEnabled ||
143
- getTableColumnWidget(obj).options.commonAttributeEnabled
144
- "
145
- :key="getTableColumnWidget(obj).id + '-' + index"
146
- >{{ getI18nLabel(item[getTableColumnStatusWidgetLabelKey(obj)]) }}</span
147
- >
148
- <span
149
- v-else
150
- :key="getTableColumnWidget(obj).id + '-' + index"
151
- class="list-tag"
152
- :class="item.type"
153
- >{{ getI18nLabel(item[getTableColumnStatusWidgetLabelKey(obj)]) }}</span
154
- >
155
- </template>
156
- </template>
157
- </template>
158
- <component
159
- v-else
160
- :is="getColumnWidgetName(obj.column.params.widget)"
161
- :field="getTableColumnWidget(obj)"
162
- :form-model="globalModel.formModel"
163
- :designer="null"
164
- :key="
165
- obj.rowIndex +
166
- '-' +
167
- (getTableColumnWidget(obj) && getTableColumnWidget(obj).id)
168
- "
169
- :parent-widget="widget"
170
- :columnConfig="obj.column.params.columnConfig"
171
- :subFormRowIndex="obj.rowIndex"
172
- :formItemProp="getColumnProp(obj)"
173
- :subFormRowId="obj.row._X_ROW_KEY"
174
- :tableParam="obj"
175
- >
176
- <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
177
- <slot :name="slot" v-bind="scope" />
178
- </template>
179
- </component>
180
- </template>
181
- </template>
182
- <template #widgetList="obj">
183
- <div>
184
- <template v-for="(fieldWidget, index) in obj.column.params.widgetList">
185
- <component
186
- v-if="!!fieldSchemaMap[obj.row._X_ROW_KEY] && !!obj.row._X_ROW_KEY"
187
- :is="getColumnWidgetName(fieldWidget)"
188
- v-bind="getRowWidgetOption(obj, fieldWidget)"
189
- :form-model="globalModel.formModel"
190
- :designer="null"
191
- :key="obj.rowIndex + '-' + getRowWidgetKey(obj, fieldWidget)"
192
- :parent-widget="widget"
193
- :columnConfig="obj.column.params.columnConfig"
194
- :subFormRowIndex="obj.rowIndex"
195
- :subFormRowId="obj.row._X_ROW_KEY"
196
- :formItemProp="getColumnProp2(fieldWidget, obj)"
197
- :tableParam="obj"
198
- >
199
- <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
200
- <slot :name="slot" v-bind="scope" :tableParam="obj" />
201
- </template>
202
- </component>
203
- </template>
204
- </div>
205
- </template>
206
- <template #editWidget="obj">
207
- <component
208
- v-if="!!fieldSchemaMap[obj.row._X_ROW_KEY]"
209
- :is="getColumnWidgetName(obj.column.params.editWidget)"
210
- :field="fieldSchemaMap[obj.row._X_ROW_KEY][obj.column.params.editWidget.id]"
211
- :form-model="globalModel.formModel"
212
- :designer="null"
213
- :key="
214
- obj.rowIndex +
215
- '-' +
216
- fieldSchemaMap[obj.row._X_ROW_KEY][obj.column.params.editWidget.id].id
217
- "
218
- :parent-widget="widget"
219
- :columnConfig="obj.column.params.columnConfig"
220
- :subFormRowIndex="obj.rowIndex"
221
- :subFormRowId="obj.row._X_ROW_KEY"
222
- :formItemProp="getColumnProp(obj, true)"
223
- :tableParam="obj"
224
- >
225
- <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
226
- <slot :name="slot" v-bind="scope" />
227
- </template>
228
- </component>
229
- </template>
230
- <template #editTreeButtonGroup="obj">
231
- <div class="cell-operate">
232
- <template v-if="getGridTable().isActiveByRow(obj.row)">
233
- <a @click="saveEditRow(obj)" class="a-link" data-tit="保存">
234
- <el-tooltip
235
- :enterable="false"
236
- effect="dark"
237
- content="保存"
238
- placement="top"
239
- popper-class="tooltip-skin"
240
- ><i class="el-icon-circle-check"></i
241
- ></el-tooltip>
242
- </a>
243
- <a
244
- @click="cancleRowEvent(obj)"
245
- class="a-link"
246
- data-tit="取消行编辑"
247
- v-if="hasSaveRow(obj.row)"
248
- >
249
- <el-tooltip
250
- :enterable="false"
251
- effect="dark"
252
- content="取消行编辑"
253
- placement="top"
254
- popper-class="tooltip-skin"
255
- ><i class="el-icon-circle-close"></i
256
- ></el-tooltip>
257
- </a>
258
- <a
259
- @click="removeEditRow(obj)"
260
- class="a-link"
261
- data-tit="删除"
262
- v-if="!hasSaveRow(obj.row)"
263
- >
264
- <el-tooltip
265
- :enterable="false"
266
- effect="dark"
267
- content="删除"
268
- placement="top"
269
- popper-class="tooltip-skin"
270
- ><i class="el-icon-delete"></i
271
- ></el-tooltip>
272
- </a>
273
- </template>
274
- <template v-else>
275
- <a
276
- class="a-link"
277
- data-tit="新增"
278
- @click="addEditRow(null, obj)"
279
- v-if="widget.options.isTreeTable && canShowRowAdd(obj)"
280
- >
281
- <el-tooltip
282
- :enterable="false"
283
- effect="dark"
284
- content="新增"
285
- placement="top"
286
- popper-class="tooltip-skin"
287
- ><i class="el-icon-circle-plus-outline"></i
288
- ></el-tooltip>
289
- </a>
290
- <a
291
- @click="editRowEvent(obj)"
292
- class="a-link"
293
- data-tit="行编辑"
294
- v-if="canShowRowEdit(obj)"
295
- >
296
- <el-tooltip
297
- :enterable="false"
298
- effect="dark"
299
- content="行编辑"
300
- placement="top"
301
- popper-class="tooltip-skin"
302
- ><i class="el-icon-edit-outline"></i
303
- ></el-tooltip>
304
- </a>
305
- </template>
306
- </div>
307
- </template>
308
- </vxe-grid>
309
- </template>
310
-
311
- <script>
312
- import FieldComponents from "../../../../components/xform/form-designer/form-widget/field-widget/index";
313
- import dataTableMixin from "./data-table-mixin.js";
314
- import tableForm from "../../../../components/table/tableForm.vue";
315
- import treeMoveDialog from "../../../../components/xform/form-designer/form-widget/dialog/treeMoveDialog.vue";
316
-
317
- export default {
318
- name: "DataTableItem",
319
- components: {
320
- tableForm,
321
- treeMoveDialog,
322
- ...FieldComponents,
323
- },
324
- mixins: [dataTableMixin],
325
- };
326
- </script>
327
-
328
- <style lang="scss" scoped>
329
- .field-wrapper {
330
- display: inline-block;
331
- }
332
- /* 对比:变更行/新增行整行高亮(vxe 行加 rowClassName) */
333
- ::v-deep .vxe-body--row.xform-compare-row-changed,
334
- ::v-deep .vxe-body--row.xform-compare-row-changed td {
335
- background-color: #fdf2e3; /* - 变更 */
336
- }
337
- ::v-deep .vxe-body--row.xform-compare-row-changed td:first-child {
338
- box-shadow: inset 3px 0 0 #e6a23c;
339
- }
340
- ::v-deep .vxe-body--row.xform-compare-row-new,
341
- ::v-deep .vxe-body--row.xform-compare-row-new td {
342
- background-color: #eef8e3; /* 绿 - 新增 */
343
- }
344
- ::v-deep .vxe-body--row.xform-compare-row-new td:first-child {
345
- box-shadow: inset 3px 0 0 #67c23a;
346
- }
347
- </style>
1
+ <template>
2
+ <vxe-grid
3
+ :ref="widget.id"
4
+ v-bind="vxeOption"
5
+ :auto-resize="true"
6
+ v-show="!widget.options.hidden"
7
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
8
+ @custom="$vxeTableUtil.customHandle"
9
+ @checkbox-change="handleCheckboxChange"
10
+ @checkbox-all="handleCheckboxAll"
11
+ @cell-dblclick="handleCellDblclick"
12
+ :class="dataTableConfig.class"
13
+ :data="fieldModel"
14
+ v-on="eventConfig"
15
+ >
16
+ <template #form>
17
+ <tableForm
18
+ v-if="widget.options.isQueryTable"
19
+ :formData.sync="formModel"
20
+ :xform="true"
21
+ @searchEvent="searchEvent"
22
+ @resetEvent="resetEvent"
23
+ @advancedClear="advancedClear"
24
+ @settingConfirm="tableFormSettingConfirm"
25
+ >
26
+ <template #buttonLeft>
27
+ <template v-if="!!widget.buttons && widget.buttons.length > 0">
28
+ <template v-for="(subWidget, swIdx) in widget.buttons">
29
+ <template v-if="'container' === subWidget.category">
30
+ <component
31
+ :is="subWidget.type + '-item'"
32
+ :widget="subWidget"
33
+ :key="swIdx"
34
+ :parent-list="widget.buttons"
35
+ :index-of-parent-list="swIdx"
36
+ :parent-widget="widget"
37
+ >
38
+ <!-- 递归传递插槽!!! -->
39
+ <template
40
+ v-for="slot in Object.keys($scopedSlots)"
41
+ v-slot:[slot]="scope"
42
+ >
43
+ <slot :name="slot" v-bind="scope" />
44
+ </template>
45
+ </component>
46
+ </template>
47
+ <template v-else>
48
+ <component
49
+ :is="subWidget.type + '-widget'"
50
+ :field="subWidget"
51
+ :designer="null"
52
+ :key="swIdx"
53
+ :parent-list="widget.buttons"
54
+ :index-of-parent-list="swIdx"
55
+ :parent-widget="widget"
56
+ >
57
+ <!-- 递归传递插槽!!! -->
58
+ <template
59
+ v-for="slot in Object.keys($scopedSlots)"
60
+ v-slot:[slot]="scope"
61
+ >
62
+ <slot :name="slot" v-bind="scope" />
63
+ </template>
64
+ </component>
65
+ </template>
66
+ </template>
67
+ </template>
68
+ </template>
69
+ <template #buttonRight>
70
+ <vxe-button
71
+ icon="el-icon-brush"
72
+ class="button-sty"
73
+ @click="handleResetClick"
74
+ type="text"
75
+ status="primary"
76
+ plain
77
+ >{{ $t1("刷新") }}
78
+ </vxe-button>
79
+ <vxe-button
80
+ status="warning"
81
+ icon="el-icon-search"
82
+ class="button-sty"
83
+ @click="handleSearchClick"
84
+ >
85
+ {{ $t2("搜索") }}
86
+ </vxe-button>
87
+ </template>
88
+
89
+ <template
90
+ v-for="(subWidget, swIdx) in widget.widgetList"
91
+ v-slot:[subWidget.options.name]
92
+ >
93
+ <component
94
+ v-if="'container' !== subWidget.category"
95
+ :key="swIdx"
96
+ :is="subWidget.type + '-widget'"
97
+ :field="subWidget"
98
+ :designer="null"
99
+ :parent-list="subWidget.widgetList"
100
+ :parent-widget="widget"
101
+ >
102
+ <!-- 递归传递插槽!!! -->
103
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
104
+ <slot :name="slot" v-bind="scope" />
105
+ </template>
106
+ </component>
107
+ </template>
108
+
109
+ <template #searchWidget="{ searchColumn }">
110
+ <component
111
+ :is="searchColumn.widget.type + '-widget'"
112
+ :field="searchColumn.widget"
113
+ :designer="null"
114
+ :parent-list="searchColumn.widget.widgetList"
115
+ :parent-widget="searchColumn.widget"
116
+ formItemType="vxe-form-item"
117
+ >
118
+ <!-- 递归传递插槽!!! -->
119
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
120
+ <slot :name="slot" v-bind="scope" />
121
+ </template>
122
+ </component>
123
+ </template>
124
+ </tableForm>
125
+ <treeMoveDialog
126
+ v-if="showTreeMoveDialog"
127
+ :visiable.sync="showTreeMoveDialog"
128
+ :rows.sync="sortRows"
129
+ :parent-target="_self"
130
+ @confirm="confirmTreeMoveDialog"
131
+ ></treeMoveDialog>
132
+ </template>
133
+ <template #widget="obj">
134
+ <template v-if="!!getTableColumnWidget(obj)">
135
+ <template v-if="obj.column.params.widget.type == 'status'">
136
+ <template
137
+ v-for="(item, index) in getTableColumnWidget(obj).options.statusParam"
138
+ >
139
+ <template v-if="isShowColumnStatusWidget(obj, item)">
140
+ <span
141
+ v-if="
142
+ getTableColumnWidget(obj).options.formScriptEnabled ||
143
+ getTableColumnWidget(obj).options.commonAttributeEnabled
144
+ "
145
+ :key="getTableColumnWidget(obj).id + '-' + index"
146
+ >{{ getI18nLabel(item[getTableColumnStatusWidgetLabelKey(obj)]) }}</span
147
+ >
148
+ <span
149
+ v-else
150
+ :key="getTableColumnWidget(obj).id + '-' + index"
151
+ class="list-tag"
152
+ :class="item.type"
153
+ >{{ getI18nLabel(item[getTableColumnStatusWidgetLabelKey(obj)]) }}</span
154
+ >
155
+ </template>
156
+ </template>
157
+ </template>
158
+ <component
159
+ v-else
160
+ :is="getColumnWidgetName(obj.column.params.widget)"
161
+ :field="getTableColumnWidget(obj)"
162
+ :form-model="globalModel.formModel"
163
+ :designer="null"
164
+ :key="
165
+ obj.rowIndex +
166
+ '-' +
167
+ (getTableColumnWidget(obj) && getTableColumnWidget(obj).id)
168
+ "
169
+ :parent-widget="widget"
170
+ :columnConfig="obj.column.params.columnConfig"
171
+ :subFormRowIndex="obj.rowIndex"
172
+ :formItemProp="getColumnProp(obj)"
173
+ :subFormRowId="obj.row._X_ROW_KEY"
174
+ :tableParam="obj"
175
+ >
176
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
177
+ <slot :name="slot" v-bind="scope" />
178
+ </template>
179
+ </component>
180
+ </template>
181
+ </template>
182
+ <template #widgetList="obj">
183
+ <div>
184
+ <template v-for="(fieldWidget, index) in obj.column.params.widgetList">
185
+ <component
186
+ v-if="
187
+ !!obj.row._X_ROW_KEY &&
188
+ (!!getRowFieldSchema(obj.row) || !!obj.row._X_EXPORT_ROW)
189
+ "
190
+ :is="getColumnWidgetName(fieldWidget)"
191
+ v-bind="getRowWidgetOption(obj, fieldWidget)"
192
+ :form-model="globalModel.formModel"
193
+ :designer="null"
194
+ :key="obj.rowIndex + '-' + getRowWidgetKey(obj, fieldWidget)"
195
+ :parent-widget="widget"
196
+ :columnConfig="obj.column.params.columnConfig"
197
+ :subFormRowIndex="obj.rowIndex"
198
+ :subFormRowId="obj.row._X_ROW_KEY"
199
+ :formItemProp="getColumnProp2(fieldWidget, obj)"
200
+ :tableParam="obj"
201
+ >
202
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
203
+ <slot :name="slot" v-bind="scope" :tableParam="obj" />
204
+ </template>
205
+ </component>
206
+ </template>
207
+ </div>
208
+ </template>
209
+ <template #editWidget="obj">
210
+ <component
211
+ v-if="!!getRowFieldSchema(obj.row)"
212
+ :is="getColumnWidgetName(obj.column.params.editWidget)"
213
+ :field="getRowFieldSchema(obj.row)[obj.column.params.editWidget.id]"
214
+ :form-model="globalModel.formModel"
215
+ :designer="null"
216
+ :key="
217
+ obj.rowIndex +
218
+ '-' +
219
+ getRowFieldSchema(obj.row)[obj.column.params.editWidget.id].id
220
+ "
221
+ :parent-widget="widget"
222
+ :columnConfig="obj.column.params.columnConfig"
223
+ :subFormRowIndex="obj.rowIndex"
224
+ :subFormRowId="obj.row._X_ROW_KEY"
225
+ :formItemProp="getColumnProp(obj, true)"
226
+ :tableParam="obj"
227
+ >
228
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
229
+ <slot :name="slot" v-bind="scope" />
230
+ </template>
231
+ </component>
232
+ </template>
233
+ <template #editTreeButtonGroup="obj">
234
+ <div class="cell-operate">
235
+ <template v-if="getGridTable().isActiveByRow(obj.row)">
236
+ <a @click="saveEditRow(obj)" class="a-link" data-tit="保存">
237
+ <el-tooltip
238
+ :enterable="false"
239
+ effect="dark"
240
+ content="保存"
241
+ placement="top"
242
+ popper-class="tooltip-skin"
243
+ ><i class="el-icon-circle-check"></i
244
+ ></el-tooltip>
245
+ </a>
246
+ <a
247
+ @click="cancleRowEvent(obj)"
248
+ class="a-link"
249
+ data-tit="取消行编辑"
250
+ v-if="hasSaveRow(obj.row)"
251
+ >
252
+ <el-tooltip
253
+ :enterable="false"
254
+ effect="dark"
255
+ content="取消行编辑"
256
+ placement="top"
257
+ popper-class="tooltip-skin"
258
+ ><i class="el-icon-circle-close"></i
259
+ ></el-tooltip>
260
+ </a>
261
+ <a
262
+ @click="removeEditRow(obj)"
263
+ class="a-link"
264
+ data-tit="删除"
265
+ v-if="!hasSaveRow(obj.row)"
266
+ >
267
+ <el-tooltip
268
+ :enterable="false"
269
+ effect="dark"
270
+ content="删除"
271
+ placement="top"
272
+ popper-class="tooltip-skin"
273
+ ><i class="el-icon-delete"></i
274
+ ></el-tooltip>
275
+ </a>
276
+ </template>
277
+ <template v-else>
278
+ <a
279
+ class="a-link"
280
+ data-tit="新增"
281
+ @click="addEditRow(null, obj)"
282
+ v-if="widget.options.isTreeTable && canShowRowAdd(obj)"
283
+ >
284
+ <el-tooltip
285
+ :enterable="false"
286
+ effect="dark"
287
+ content="新增"
288
+ placement="top"
289
+ popper-class="tooltip-skin"
290
+ ><i class="el-icon-circle-plus-outline"></i
291
+ ></el-tooltip>
292
+ </a>
293
+ <a
294
+ @click="editRowEvent(obj)"
295
+ class="a-link"
296
+ data-tit="行编辑"
297
+ v-if="canShowRowEdit(obj)"
298
+ >
299
+ <el-tooltip
300
+ :enterable="false"
301
+ effect="dark"
302
+ content="行编辑"
303
+ placement="top"
304
+ popper-class="tooltip-skin"
305
+ ><i class="el-icon-edit-outline"></i
306
+ ></el-tooltip>
307
+ </a>
308
+ </template>
309
+ </div>
310
+ </template>
311
+ </vxe-grid>
312
+ </template>
313
+
314
+ <script>
315
+ import FieldComponents from "../../../../components/xform/form-designer/form-widget/field-widget/index";
316
+ import dataTableMixin from "./data-table-mixin.js";
317
+ import tableForm from "../../../../components/table/tableForm.vue";
318
+ import treeMoveDialog from "../../../../components/xform/form-designer/form-widget/dialog/treeMoveDialog.vue";
319
+
320
+ export default {
321
+ name: "DataTableItem",
322
+ components: {
323
+ tableForm,
324
+ treeMoveDialog,
325
+ ...FieldComponents,
326
+ },
327
+ mixins: [dataTableMixin],
328
+ };
329
+ </script>
330
+
331
+ <style lang="scss" scoped>
332
+ .field-wrapper {
333
+ display: inline-block;
334
+ }
335
+ /* 对比:变更行/新增行整行高亮(vxe 行加 rowClassName) */
336
+ ::v-deep .vxe-body--row.xform-compare-row-changed,
337
+ ::v-deep .vxe-body--row.xform-compare-row-changed td {
338
+ background-color: #fdf2e3; /* - 变更 */
339
+ }
340
+ ::v-deep .vxe-body--row.xform-compare-row-changed td:first-child {
341
+ box-shadow: inset 3px 0 0 #e6a23c;
342
+ }
343
+ ::v-deep .vxe-body--row.xform-compare-row-new,
344
+ ::v-deep .vxe-body--row.xform-compare-row-new td {
345
+ background-color: #eef8e3; /* 绿 - 新增 */
346
+ }
347
+ ::v-deep .vxe-body--row.xform-compare-row-new td:first-child {
348
+ box-shadow: inset 3px 0 0 #67c23a;
349
+ }
350
+ </style>