cloud-web-corejs 1.0.54-dev.677 → 1.0.54-dev.679

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 (24) hide show
  1. package/package.json +2 -1
  2. package/src/components/baseArea/index.vue +665 -0
  3. package/src/components/table/index.js +1180 -1
  4. package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +158 -0
  5. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +74 -75
  6. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaDataType-editor.vue +24 -0
  7. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaName-editor.vue +20 -0
  8. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +2 -0
  9. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +54 -2
  10. package/src/components/xform/form-render/container-item/data-table-mixin.js +82 -74
  11. package/src/components/xform/form-render/indexMixin.js +34 -0
  12. package/src/components/xform/lang/en-US.js +7 -0
  13. package/src/components/xform/lang/zh-CN.js +7 -0
  14. package/src/index.js +4 -0
  15. package/src/layout/components/Sidebar/default.vue +1 -1
  16. package/src/views/bd/setting/formVersion/compareBasicSection.vue +6 -7
  17. package/src/views/bd/setting/formVersion/compareCodeSection.vue +21 -17
  18. package/src/views/bd/setting/formVersion/compareContMixin.scss +14 -20
  19. package/src/views/bd/setting/formVersion/compareDialog.vue +2 -2
  20. package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +3 -3
  21. package/src/views/bd/setting/formVersion/reverButton.vue +1 -1
  22. package/src/views/bd/setting/formVersion/tableDetailDiff.js +3 -2
  23. package/src/views/user/form/vform/designer.vue +3 -1
  24. package/src/views/user/form/vform/formFieldMapping.js +2 -3
@@ -0,0 +1,158 @@
1
+ <template>
2
+ <form-item-wrapper
3
+ :designer="designer"
4
+ :field="field"
5
+ :rules="rules"
6
+ :design-state="designState"
7
+ :parent-widget="parentWidget"
8
+ :parent-list="parentList"
9
+ :index-of-parent-list="indexOfParentList"
10
+ :sub-form-row-index="subFormRowIndex"
11
+ :sub-form-col-index="subFormColIndex"
12
+ :sub-form-row-id="subFormRowId"
13
+ >
14
+ <baseArea
15
+ v-show="!isReadMode"
16
+ class="full-width-input"
17
+ :style="widgetStyle"
18
+ v-model="fieldModel"
19
+ :label-value.sync="areaLabel"
20
+ :max-level="maxLevel"
21
+ :locale="field.options.locale"
22
+ :disabled="field.options.disabled"
23
+ :readonly="field.options.readonly"
24
+ :clearable="field.options.clearable"
25
+ :placeholder="getI18nLabel(field.options.placeholder || '请选择地区')"
26
+ :size="field.options.size || 'small'"
27
+ @change="handleAreaChange"
28
+ />
29
+ <template v-if="isReadMode">
30
+ <span class="readonly-mode-field">{{ readModeText }}</span>
31
+ </template>
32
+ </form-item-wrapper>
33
+ </template>
34
+
35
+ <script>
36
+ import FormItemWrapper from "./form-item-wrapper";
37
+ import emitter from "../../../../../components/xform/utils/emitter";
38
+ import i18n from "../../../../../components/xform/utils/i18n";
39
+ import fieldMixin from "../../../../../components/xform/form-designer/form-widget/field-widget/fieldMixin";
40
+ import baseArea from "@base/components/baseArea/index.vue";
41
+
42
+ export default {
43
+ name: "area-select-widget",
44
+ componentName: "FieldWidget",
45
+ mixins: [emitter, fieldMixin, i18n],
46
+ components: {
47
+ FormItemWrapper,
48
+ baseArea,
49
+ },
50
+ props: {
51
+ field: Object,
52
+ parentWidget: Object,
53
+ parentList: Array,
54
+ indexOfParentList: Number,
55
+ designer: Object,
56
+ designState: {
57
+ type: Boolean,
58
+ default: false,
59
+ },
60
+ subFormRowIndex: {
61
+ type: Number,
62
+ default: -1,
63
+ },
64
+ subFormColIndex: {
65
+ type: Number,
66
+ default: -1,
67
+ },
68
+ subFormRowId: {
69
+ type: String,
70
+ default: "",
71
+ },
72
+ },
73
+ inject: ["refList", "globalOptionData", "globalModel"],
74
+ data() {
75
+ return {
76
+ oldFieldValue: null,
77
+ fieldModel: null,
78
+ areaLabel: null,
79
+ rules: [],
80
+ };
81
+ },
82
+ computed: {
83
+ currentData() {
84
+ let tableParam = this.tableParam;
85
+ return tableParam && tableParam.row ? tableParam.row : this.formModel;
86
+ },
87
+ areaNameField() {
88
+ return this.field.options.areaName || null;
89
+ },
90
+ maxLevel() {
91
+ const areaDataType = this.field.options.areaDataType * 1 || 3;
92
+ if (areaDataType === 1) return 2;
93
+ if (areaDataType === 2) return 3;
94
+ return 4;
95
+ },
96
+ readModeText() {
97
+ return this.areaLabel || this.currentAreaNameValue || "--";
98
+ },
99
+ widgetStyle() {
100
+ const widgetWidth = this.field.options.widgetWidth;
101
+ if (widgetWidth != null && widgetWidth !== "") {
102
+ return { width: widgetWidth };
103
+ }
104
+ return { width: "100%" };
105
+ },
106
+ currentAreaNameValue() {
107
+ if (!this.areaNameField) {
108
+ return null;
109
+ }
110
+ return this.currentData[this.areaNameField] ?? null;
111
+ },
112
+ },
113
+ watch: {
114
+ currentAreaNameValue: {
115
+ immediate: true,
116
+ handler(val) {
117
+ this.areaLabel = val;
118
+ },
119
+ },
120
+ },
121
+ created() {
122
+ this.initFieldModel();
123
+ this.registerToRefList();
124
+ this.initEventHandler();
125
+ this.buildFieldRules();
126
+ this.handleOnCreated();
127
+ },
128
+ mounted() {
129
+ this.handleOnMounted();
130
+ },
131
+ beforeDestroy() {
132
+ this.unregisterFromRefList();
133
+ },
134
+ methods: {
135
+ syncAreaName(label) {
136
+ if (this.areaNameField) {
137
+ this.$set(this.currentData, this.areaNameField, label);
138
+ }
139
+ },
140
+ handleAreaChange(row) {
141
+ const label = row ? row.fullName || row.name || null : null;
142
+ this.areaLabel = label;
143
+ this.syncAreaName(label);
144
+ this.handleChangeEvent(this.fieldModel);
145
+ },
146
+ },
147
+ };
148
+ </script>
149
+
150
+ <style lang="scss" scoped>
151
+ @import "~@/styles/global.scss";
152
+
153
+ .full-width-input {
154
+ width: 100% !important;
155
+ display: block !important;
156
+ box-sizing: border-box;
157
+ }
158
+ </style>
@@ -128,10 +128,14 @@
128
128
  >{{ i18nt("designer.setting.editAction") }}
129
129
  </el-button>
130
130
  </el-form-item>
131
- <div class="dynamic-column-hint">
132
- 动态列来源<strong>二选一</strong>:前端列脚本(同步算列)或接口动态列(后端拉取)。同时配置时<strong>列脚本优先</strong>。
133
- </div>
134
- <div class="dynamic-column-block">
131
+ <el-form-item label="动态列来源">
132
+ <el-radio-group v-model="optionModel.dynamicColumnSourceType">
133
+ <el-radio label="none">无</el-radio>
134
+ <el-radio label="script">前端列脚本</el-radio>
135
+ <el-radio label="api">接口动态列</el-radio>
136
+ </el-radio-group>
137
+ </el-form-item>
138
+ <div v-if="optionModel.dynamicColumnSourceType === 'script'" class="dynamic-column-block">
135
139
  <div class="form-section-label">前端列脚本</div>
136
140
  <div class="form-section-desc">不调接口,脚本直接 return 列配置</div>
137
141
  <div class="data-table-editor-subsection">
@@ -149,83 +153,78 @@
149
153
  </el-form-item>
150
154
  </div>
151
155
  </div>
152
- <div class="dynamic-column-block">
156
+ <div v-if="optionModel.dynamicColumnSourceType === 'api'" class="dynamic-column-block">
153
157
  <div class="form-section-label">接口动态列</div>
154
158
  <div class="form-section-desc">打开表单时请求后端脚本,返回列配置</div>
155
159
  <div class="data-table-editor-subsection">
156
- <el-form-item label="启用">
157
- <el-switch
158
- v-model="optionModel.dynamicColumnScriptEnabled"
159
- ></el-switch>
160
+ <el-form-item label="脚本编码">
161
+ <el-input
162
+ v-model="optionModel.dynamicColumnScriptCode"
163
+ clearable
164
+ placeholder="如 getDynamicColumns"
165
+ ></el-input>
166
+ </el-form-item>
167
+ <el-form-item label="请求参数">
168
+ <a
169
+ href="javascript:void(0);"
170
+ class="a-link link-oneLind"
171
+ @click="
172
+ editEventHandler('dynamicColumnScriptParam', tableConfigParams)
173
+ "
174
+ >
175
+ <span>{{ optionModel.dynamicColumnScriptParam }}</span>
176
+ <i class="el-icon-edit"></i>
177
+ </a>
178
+ </el-form-item>
179
+ <el-form-item>
180
+ <span slot="label">
181
+ 响应转换
182
+ <el-tooltip effect="light" placement="top">
183
+ <div slot="content" style="line-height: 1.4; max-width: 320px">
184
+ 将接口返回的
185
+ <code>res</code> 转为列数组;不配置则按平台默认结构解析。
186
+ </div>
187
+ <i class="el-icon-info"></i>
188
+ </el-tooltip>
189
+ </span>
190
+ <a
191
+ href="javascript:void(0);"
192
+ class="a-link link-oneLind"
193
+ @click="editEventHandler('onDynamicColumnsConvert', ['res'])"
194
+ >
195
+ <span>{{ optionModel.onDynamicColumnsConvert }}</span>
196
+ <i class="el-icon-edit"></i>
197
+ </a>
198
+ </el-form-item>
199
+ </div>
200
+ </div>
201
+ <div v-if="optionModel.dynamicColumnSourceType !== 'none'" class="dynamic-column-block">
202
+ <div class="data-table-editor-subsection">
203
+ <el-form-item>
204
+ <span slot="label">
205
+ 加载条件
206
+ <el-tooltip effect="light" placement="top">
207
+ <div slot="content" style="line-height: 1.4; max-width: 320px">
208
+ 表格初始化加载动态列前执行。<br />
209
+ <code>return false</code> 时不加载;不配置则默认加载。
210
+ </div>
211
+ <i class="el-icon-info"></i>
212
+ </el-tooltip>
213
+ </span>
214
+ <a
215
+ href="javascript:void(0);"
216
+ class="a-link link-oneLind"
217
+ @click="
218
+ editEventHandler('dynamicColumnLoadScript', tableConfigParams)
219
+ "
220
+ >
221
+ <span>{{ optionModel.dynamicColumnLoadScript }}</span>
222
+ <i class="el-icon-edit"></i>
223
+ </a>
160
224
  </el-form-item>
161
- <template v-if="optionModel.dynamicColumnScriptEnabled">
162
- <el-form-item label="脚本编码">
163
- <el-input
164
- v-model="optionModel.dynamicColumnScriptCode"
165
- clearable
166
- placeholder="如 getDynamicColumns"
167
- ></el-input>
168
- </el-form-item>
169
- <el-form-item label="请求参数">
170
- <a
171
- href="javascript:void(0);"
172
- class="a-link link-oneLind"
173
- @click="
174
- editEventHandler('dynamicColumnScriptParam', tableConfigParams)
175
- "
176
- >
177
- <span>{{ optionModel.dynamicColumnScriptParam }}</span>
178
- <i class="el-icon-edit"></i>
179
- </a>
180
- </el-form-item>
181
- <el-form-item>
182
- <span slot="label">
183
- 响应转换
184
- <el-tooltip effect="light" placement="top">
185
- <div slot="content" style="line-height: 1.4; max-width: 320px">
186
- 将接口返回的
187
- <code>res</code> 转为列数组;不配置则按平台默认结构解析。
188
- </div>
189
- <i class="el-icon-info"></i>
190
- </el-tooltip>
191
- </span>
192
- <a
193
- href="javascript:void(0);"
194
- class="a-link link-oneLind"
195
- @click="editEventHandler('onDynamicColumnsConvert', ['res'])"
196
- >
197
- <span>{{ optionModel.onDynamicColumnsConvert }}</span>
198
- <i class="el-icon-edit"></i>
199
- </a>
200
- </el-form-item>
201
- <el-form-item>
202
- <span slot="label">
203
- 默认加载判断
204
- <el-tooltip effect="light" placement="top">
205
- <div slot="content" style="line-height: 1.4; max-width: 320px">
206
- 启用后打开表单时<strong>默认</strong>自动请求动态列。<br />
207
- 同步:仅写 <code>return false</code> /
208
- <code>return null</code> 跳过。<br />
209
- 异步:先写异步逻辑,末尾
210
- <code>return false</code>;条件满足时调用
211
- <code>done()</code>(无参)。
212
- </div>
213
- <i class="el-icon-info"></i>
214
- </el-tooltip>
215
- </span>
216
- <a
217
- href="javascript:void(0);"
218
- class="a-link link-oneLind"
219
- @click="editEventHandler('dynamicColumnAutoLoadScript', ['done'])"
220
- >
221
- <span>{{ optionModel.dynamicColumnAutoLoadScript }}</span>
222
- <i class="el-icon-edit"></i>
223
- </a>
224
- </el-form-item>
225
- </template>
226
225
  </div>
227
226
  </div>
228
- <el-form-item label="动态列模式">
227
+ <el-form-item v-if="optionModel.dynamicColumnSourceType !== 'none'" label="动态列模式">
229
228
  <span slot="label">
230
229
  动态列模式
231
230
  <el-tooltip effect="light" placement="top">
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <el-form-item :label="i18nt('designer.setting.areaDataType')">
3
+ <el-select v-model="optionModel.areaDataType" style="width: 100%">
4
+ <el-option :label="i18nt('designer.setting.areaDataType1')" :value="1" />
5
+ <el-option :label="i18nt('designer.setting.areaDataType2')" :value="2" />
6
+ <el-option :label="i18nt('designer.setting.areaDataType3')" :value="3" />
7
+ </el-select>
8
+ </el-form-item>
9
+ </template>
10
+
11
+ <script>
12
+ import i18n from "@base/components/xform/utils/i18n";
13
+ import propertyMixin from "@base/components/xform/form-designer/setting-panel/property-editor/propertyMixin";
14
+
15
+ export default {
16
+ name: "areaDataType-editor",
17
+ mixins: [i18n, propertyMixin],
18
+ props: {
19
+ designer: Object,
20
+ selectedWidget: Object,
21
+ optionModel: Object,
22
+ },
23
+ };
24
+ </script>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <el-form-item :label="i18nt('designer.setting.areaName')">
3
+ <el-input v-model="optionModel.areaName" :placeholder="i18nt('designer.setting.areaNameHint')" />
4
+ </el-form-item>
5
+ </template>
6
+
7
+ <script>
8
+ import i18n from "@base/components/xform/utils/i18n";
9
+ import propertyMixin from "@base/components/xform/form-designer/setting-panel/property-editor/propertyMixin";
10
+
11
+ export default {
12
+ name: "areaName-editor",
13
+ mixins: [i18n, propertyMixin],
14
+ props: {
15
+ designer: Object,
16
+ selectedWidget: Object,
17
+ optionModel: Object,
18
+ },
19
+ };
20
+ </script>
@@ -82,6 +82,8 @@ const COMMON_PROPERTIES = {
82
82
  echarBarOption: "echart-bar-editor", //柱状图
83
83
  echarCategoryOption: "echart-category-editor", //折线图
84
84
  vabSearchName: "vabSearchName-editor",
85
+ areaName: "areaName-editor",
86
+ areaDataType: "areaDataType-editor",
85
87
  copyButton: "copyButton-editor",
86
88
  tempStorageFlag: "tempStorage-editor",
87
89
  formatType: "formatType-editor",
@@ -235,12 +235,12 @@ export const containers = [
235
235
  onSearchTable: "",
236
236
  onResetTable: "",
237
237
  dynamicColumnsScript: null,
238
+ dynamicColumnSourceType: "none",
238
239
  dynamicColumnMode: "append",
239
- dynamicColumnScriptEnabled: false,
240
240
  dynamicColumnScriptCode: null,
241
241
  dynamicColumnScriptParam: null,
242
242
  onDynamicColumnsConvert: null,
243
- dynamicColumnAutoLoadScript: null,
243
+ dynamicColumnLoadScript: null,
244
244
  accessType: "1",
245
245
  accessUrl: null,
246
246
  accessReturnType: "1",
@@ -1393,6 +1393,58 @@ export const basicFields = [
1393
1393
  showRules: [],
1394
1394
  },
1395
1395
  },
1396
+ {
1397
+ type: "area-select",
1398
+ icon: "select-field",
1399
+ commonFlag: !0,
1400
+ formItemFlag: !0,
1401
+ columnFlag: true,
1402
+ tableField: null,
1403
+ options: {
1404
+ name: "",
1405
+ keyNameEnabled: !1,
1406
+ keyName: "",
1407
+ label: "",
1408
+ labelColor: "",
1409
+ submitFlag: true,
1410
+ formField: "",
1411
+ labelAlign: "",
1412
+ defaultValue: null,
1413
+ placeholder: "",
1414
+ columnWidth: "200px",
1415
+ widgetWidth: null,
1416
+ size: "",
1417
+ labelWidth: null,
1418
+ labelHidden: !1,
1419
+ readonly: !1,
1420
+ disabled: !1,
1421
+ hidden: !1,
1422
+ clearable: !0,
1423
+ required: !1,
1424
+ requiredHint: "",
1425
+ validation: "",
1426
+ validationHint: "",
1427
+ customClass: "",
1428
+ labelIconClass: null,
1429
+ labelIconPosition: "rear",
1430
+ labelTooltip: null,
1431
+ areaName: "",
1432
+ areaDataType: 3,
1433
+ locale: null,
1434
+ onCreated: "",
1435
+ onMounted: "",
1436
+ onChange: "",
1437
+ onFocus: "",
1438
+ onBlur: "",
1439
+ onValidate: "",
1440
+ accessType: "1",
1441
+ ...defaultWfConfig,
1442
+ showRuleFlag: 1,
1443
+ showRuleEnabled: 1,
1444
+ showRules: [],
1445
+ ...defaultTextFlagConfig,
1446
+ },
1447
+ },
1396
1448
  {
1397
1449
  type: "time",
1398
1450
  icon: "time-field",