@lambo-design/variant-form 2.2.9-beta.0 → 2.2.9-beta.1

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 (66) hide show
  1. package/README.md +201 -0
  2. package/babel.config.js +5 -0
  3. package/dist/lib/VFormDesigner.common-report.html +53 -0
  4. package/dist/lib/VFormDesigner.common.js +123773 -0
  5. package/dist/lib/VFormDesigner.common.js.map +1 -0
  6. package/dist/lib/VFormDesigner.css +1 -0
  7. package/dist/lib/VFormDesigner.umd-report.html +53 -0
  8. package/dist/lib/VFormDesigner.umd.js +123783 -0
  9. package/dist/lib/VFormDesigner.umd.js.map +1 -0
  10. package/dist/lib/VFormDesigner.umd.min-report.html +53 -0
  11. package/dist/lib/VFormDesigner.umd.min.js +222 -0
  12. package/dist/lib/demo.html +10 -0
  13. package/dist/lib/img/indicator-card-header.7291bcc9.png +0 -0
  14. package/dist/lib/img/lan_navigator.53090c9d.png +0 -0
  15. package/dist/lib/img/layout-header-bg-canglan.b1d97e4e.png +0 -0
  16. package/dist/lib/img/layout-header-bg-cuiwei.67019b6d.png +0 -0
  17. package/dist/lib/img/lv_navigator.f07fb393.png +0 -0
  18. package/index_template/index_dev.html +19 -0
  19. package/index_template/index_prod.html +28 -0
  20. package/install-render.js +29 -0
  21. package/install.js +41 -0
  22. package/jsconfig.json +10 -0
  23. package/license.txt +8 -0
  24. package/package.json +10 -4
  25. package/public/favicon.ico +0 -0
  26. package/public/index.html +19 -0
  27. package/src/App.vue +45 -0
  28. package/src/components/form-designer/designer.js +1 -0
  29. package/src/components/form-designer/form-widget/field-widget/organ-select-widget.vue +254 -0
  30. package/src/components/form-designer/form-widget/field-widget/relation-form-widget.vue +397 -0
  31. package/src/components/form-designer/form-widget/field-widget/sub-form-widget.vue +660 -0
  32. package/src/components/form-designer/form-widget/field-widget/user-select-widget.vue +333 -0
  33. package/src/components/form-designer/form-widget/index.vue +1 -1
  34. package/src/components/form-designer/index.vue +14 -12
  35. package/src/components/form-designer/setting-panel/form-setting.vue +59 -60
  36. package/src/components/form-designer/setting-panel/index.vue +2 -0
  37. package/src/components/form-designer/setting-panel/property-editor/allowMultiple-editor.vue +24 -0
  38. package/src/components/form-designer/setting-panel/property-editor/border-editor.vue +1 -1
  39. package/src/components/form-designer/setting-panel/property-editor/buttonStyle-editor.vue +1 -1
  40. package/src/components/form-designer/setting-panel/property-editor/clearable-editor.vue +1 -1
  41. package/src/components/form-designer/setting-panel/property-editor/displayFields-editor.vue +91 -0
  42. package/src/components/form-designer/setting-panel/property-editor/displayStyle-editor.vue +1 -1
  43. package/src/components/form-designer/setting-panel/property-editor/field-relation-form/relation-form-defaultValue-editor.vue +18 -0
  44. package/src/components/form-designer/setting-panel/property-editor/filterable-editor.vue +1 -1
  45. package/src/components/form-designer/setting-panel/property-editor/multipleLimit-editor.vue +1 -1
  46. package/src/components/form-designer/setting-panel/property-editor/name-editor.vue +2 -2
  47. package/src/components/form-designer/setting-panel/property-editor/operList-editor.vue +64 -0
  48. package/src/components/form-designer/setting-panel/property-editor/placeholder-editor.vue +1 -1
  49. package/src/components/form-designer/setting-panel/property-editor/relationForm-editor.vue +74 -0
  50. package/src/components/form-designer/setting-panel/property-editor/relationItems-editor.vue +91 -0
  51. package/src/components/form-designer/setting-panel/property-editor/relationType-editor.vue +67 -0
  52. package/src/components/form-designer/setting-panel/property-editor/rootOrgan-editor.vue +248 -0
  53. package/src/components/form-designer/setting-panel/property-editor/size-editor.vue +5 -5
  54. package/src/components/form-designer/setting-panel/property-editor/subFormId-editor.vue +74 -0
  55. package/src/components/form-designer/setting-panel/propertyRegister.js +144 -133
  56. package/src/components/form-designer/toolbar-panel/index.vue +11 -10
  57. package/src/components/form-designer/widget-panel/index.vue +11 -11
  58. package/src/components/form-designer/widget-panel/widgetsConfig.js +425 -297
  59. package/src/extension/extension-loader.js +1 -1
  60. package/src/icons/svg/relation-form-field.svg +1 -0
  61. package/src/lang/en-US.js +39 -0
  62. package/src/lang/zh-CN.js +42 -3
  63. package/src/main.js +29 -0
  64. package/src/utils/config.js +1 -1
  65. package/src/utils/util.js +35 -1
  66. package/vue.config.js +93 -0
@@ -0,0 +1,397 @@
1
+ <template>
2
+ <form-item-wrapper :designer="designer" :field="field" :rules="rules" :design-state="designState"
3
+ :parent-widget="parentWidget" :parent-list="parentList" :index-of-parent-list="indexOfParentList"
4
+ :sub-form-row-index="subFormRowIndex" :sub-form-col-index="subFormColIndex" :sub-form-row-id="subFormRowId">
5
+ <el-select ref="fieldEditor" v-model="fieldModel" class="full-width-input" v-if="!field.options.relationType || field.options.relationType=='select'"
6
+ :disabled="field.options.disabled"
7
+ :size="field.options.size"
8
+ :clearable="field.options.clearable"
9
+ :filterable="field.options.filterable"
10
+ :allow-create="field.options.allowCreate"
11
+ :default-first-option="allowDefaultFirstOption"
12
+ :automatic-dropdown="field.options.automaticDropdown"
13
+ :multiple="field.options.multiple" :multiple-limit="field.options.multipleLimit"
14
+ :placeholder="field.options.placeholder || i18nt('render.hint.selectPlaceholder')"
15
+ :remote="field.options.remote" :remote-method="remoteMethod"
16
+ @focus="handleFocusCustomEvent" @blur="handleBlurCustomEvent"
17
+ @change="handleChangeEvent">
18
+ <el-option v-for="item in optionItems" :key="item.value" :label="item.label"
19
+ :value="item.value" :disabled="item.disabled">
20
+ </el-option>
21
+ <!-- field.options.optionItems-->
22
+ </el-select>
23
+ <el-checkbox-group ref="fieldEditor" v-model="fieldModel" v-if="field.options.relationType=='list' && field.options.multiple"
24
+ :disabled="field.options.disabled" :size="field.options.size" :max="field.options.multipleLimit>0?field.options.multipleLimit:65535"
25
+ @change="handleChangeEvent">
26
+ <template v-if="!!field.options.buttonStyle">
27
+ <el-checkbox-button v-for="(item, index) in optionItems" :key="index" :label="item.value"
28
+ :disabled="item.disabled" :border="field.options.border"
29
+ :style="{display: field.options.displayStyle}">{{item.label}}</el-checkbox-button>
30
+ <!-- field.options.optionItems-->
31
+ </template>
32
+ <template v-else>
33
+ <el-checkbox v-for="(item, index) in optionItems" :key="index" :label="item.value"
34
+ :disabled="item.disabled" :border="field.options.border"
35
+ :style="{display: field.options.displayStyle}">{{item.label}}</el-checkbox>
36
+ <!-- field.options.optionItems-->
37
+ </template>
38
+ </el-checkbox-group>
39
+ <el-radio-group ref="fieldEditor" v-model="fieldModel" v-if="field.options.relationType=='list' && !field.options.multiple"
40
+ :disabled="field.options.disabled" :size="field.options.size"
41
+ @change="handleChangeEvent">
42
+ <template v-if="!!field.options.buttonStyle">
43
+ <el-radio-button v-for="(item, index) in optionItems" :key="index" :label="item.value"
44
+ :disabled="item.disabled" :border="field.options.border"
45
+ :style="{display: field.options.displayStyle}">{{item.label}}</el-radio-button>
46
+ <!-- field.options.optionItems-->
47
+ </template>
48
+ <template v-else>
49
+ <el-radio v-for="(item, index) in optionItems" :key="index" :label="item.value"
50
+ :disabled="item.disabled" :border="field.options.border"
51
+ :style="{display: field.options.displayStyle}">{{item.label}}</el-radio>
52
+ <!-- field.options.optionItems-->
53
+ </template>
54
+ </el-radio-group>
55
+ <el-input ref="fieldEditor" v-model="fieldModelName" v-if="field.options.relationType=='help'"
56
+ :disabled="field.options.disabled" :readonly="field.options.readonly"
57
+ :size="field.options.size" class="hide-spin-button"
58
+ type="text"
59
+ :placeholder="field.options.placeholder"
60
+ :clearable="field.options.clearable"
61
+ @focus="handleFocusCustomEventA" @blur="handleBlurCustomEvent" @input="handleInputCustomEvent"
62
+ @change="handleChangeEvent" @clear="handleClear">
63
+ <!-- :show-password="field.options.showPassword"-->
64
+ <!-- :show-word-limit="field.options.showWordLimit"-->
65
+ <!-- :minlength="field.options.minLength" :maxlength="field.options.maxLength"-->
66
+ <!-- :prefix-icon="field.options.prefixIcon" :suffix-icon="field.options.suffixIcon"-->
67
+ <el-button slot="append" class="el-icon-connection" :disabled="field.options.disabled" @click.native="emitAppendButtonClickA"></el-button>
68
+ </el-input>
69
+ <!-- v-model="fieldModel"-->
70
+ <!-- <div v-if="field.options.relationType=='help'">{{fieldModelName}}</div>-->
71
+ <el-dialog title="关联表数据" :visible.sync="dialogTableVisible">
72
+ <el-table ref="selectionTable" :data="optionItems" height="300" @current-change="handleCurrentChange" @selection-change="handleSelectionChange"
73
+ border stripe show-overflow-tooltip :highlight-selection-row="field.options.multiple" :highlight-current-row="!field.options.multiple">
74
+ <el-table-column type="selection" width="100" align="center" v-if="field.options.multiple"></el-table-column>
75
+ <el-table-column property="value" :label="i18nt('designer.setting.relationValue')" min-width="200"></el-table-column>
76
+ <el-table-column property="label" :label="i18nt('designer.setting.relationLabel')" min-width="360"></el-table-column>
77
+ </el-table>
78
+ <!-- field.options.optionItems-->
79
+ <div slot="footer" class="dialog-footer">
80
+ <el-button @click="dialogTableClose">取 消</el-button>
81
+ <el-button type="primary" @click="dialogTableOk">确 定</el-button>
82
+ </div>
83
+ </el-dialog>
84
+ </form-item-wrapper>
85
+ </template>
86
+
87
+ <script>
88
+ import FormItemWrapper from './form-item-wrapper'
89
+ import emitter from '@/utils/emitter'
90
+ import i18n, {translate} from "@/utils/i18n";
91
+ // import axios from "axios"
92
+ import ajax from "@lambo-design/shared/utils/ajax";
93
+ import fieldMixin from "@/components/form-designer/form-widget/field-widget/fieldMixin";
94
+
95
+ export default {
96
+ name: "relation-form-widget",
97
+ componentName: 'FieldWidget', //必须固定为FieldWidget,用于接收父级组件的broadcast事件
98
+ mixins: [emitter, fieldMixin, i18n],
99
+ props: {
100
+ field: Object,
101
+ parentWidget: Object,
102
+ parentList: Array,
103
+ indexOfParentList: Number,
104
+ designer: Object,
105
+
106
+ designState: {
107
+ type: Boolean,
108
+ default: false
109
+ },
110
+
111
+ subFormRowIndex: { /* 子表单组件行索引,从0开始计数 */
112
+ type: Number,
113
+ default: -1
114
+ },
115
+ subFormColIndex: { /* 子表单组件列索引,从0开始计数 */
116
+ type: Number,
117
+ default: -1
118
+ },
119
+ subFormRowId: { /* 子表单组件行Id,唯一id且不可变 */
120
+ type: String,
121
+ default: ''
122
+ },
123
+
124
+ },
125
+ components: {
126
+ FormItemWrapper,
127
+ },
128
+ inject: ['refList', 'formConfig', 'globalOptionData', 'globalModel', 'getDesignerConfig'],
129
+ data() {
130
+ return {
131
+ oldFieldValue: null, //field组件change之前的值
132
+ fieldModel: null,
133
+ fieldModelName: null,
134
+ rules: [],
135
+ dialogTableVisible: false,
136
+
137
+ optionItems: [],
138
+ }
139
+ },
140
+ computed: {
141
+ allowDefaultFirstOption() {
142
+ return (!!this.field.options.filterable && !!this.field.options.allowCreate)
143
+ },
144
+
145
+ remoteMethod() {
146
+ if (!!this.field.options.remote && !!this.field.options.onRemoteQuery) {
147
+ return this.remoteQuery
148
+ } else {
149
+ return undefined
150
+ }
151
+ },
152
+
153
+ },
154
+ beforeCreate() {
155
+ /* 这里不能访问方法和属性!! */
156
+ },
157
+
158
+ created() {
159
+ /* 注意:子组件mounted在父组件created之后、父组件mounted之前触发,故子组件mounted需要用到的prop
160
+ 需要在父组件created中初始化!! */
161
+ // this.initOptionItems()
162
+ this.initFieldModel()
163
+ this.registerToRefList()
164
+ this.initEventHandler()
165
+ this.buildFieldRules()
166
+
167
+ this.handleOnCreated()
168
+
169
+ this.initOptionItemsA(this.field.options.relationItems)
170
+ },
171
+
172
+ mounted() {
173
+ this.handleOnMounted()
174
+ },
175
+
176
+ beforeDestroy() {
177
+ this.unregisterFromRefList()
178
+ },
179
+
180
+ methods: {
181
+ handleFocusCustomEventA(event) {
182
+ this.handleFocusCustomEvent(event);
183
+ //
184
+ this.dialogTableOpen();
185
+ },
186
+ emitAppendButtonClickA() {
187
+ this.emitAppendButtonClick();
188
+ //
189
+ this.dialogTableOpen();
190
+ },
191
+ dialogTableOpen() {
192
+ this.dialogTableVisible = true;
193
+ //
194
+ if(this.field.options.multiple) {
195
+ let rows = [];
196
+ if(this.fieldModel) {
197
+ for(let v of this.fieldModel) {
198
+ for(let n of this.optionItems) {
199
+ if(v == n.value) {
200
+ rows.push(n);
201
+ break;
202
+ }
203
+ }
204
+ // field.options.optionItems
205
+ }
206
+ }
207
+ this.dialogTableSelectionRows(rows);
208
+ } else {
209
+ let row = null;
210
+ if(this.fieldModel) {
211
+ for(let n of this.optionItems) {
212
+ if(this.fieldModel == n.value) {
213
+ row = n;
214
+ break;
215
+ }
216
+ }
217
+ // field.options.optionItems
218
+ }
219
+ this.dialogTableSelectionRow(row);
220
+ }
221
+ },
222
+ dialogTableSelectionRows(rows) {
223
+ let table = this.$refs.selectionTable;
224
+ if(table) {
225
+ table.clearSelection();
226
+ for(let row of rows) {
227
+ table.toggleRowSelection(row);
228
+ }
229
+ } else {
230
+ setTimeout(() => {
231
+ this.dialogTableSelectionRows(rows);
232
+ }, 100);
233
+ }
234
+ },
235
+ dialogTableSelectionRow(row) {
236
+ let table = this.$refs.selectionTable;
237
+ if(table) {
238
+ table.setCurrentRow(row);
239
+ } else {
240
+ setTimeout(() => {
241
+ this.dialogTableSelectionRow(row);
242
+ }, 100);
243
+ }
244
+ },
245
+ handleSelectionChange(val) {
246
+ this.multipleSelection = val;
247
+ },
248
+ handleCurrentChange(val) {
249
+ this.currentRow = val;
250
+ },
251
+ dialogTableClose() {
252
+ this.dialogTableVisible = false;
253
+ },
254
+ dialogTableOk() {
255
+ this.oldFieldValue = this.fieldModel;
256
+ if(this.field.options.multiple) {
257
+ let values = [];
258
+ let names = [];
259
+ if(this.multipleSelection) {
260
+ for(let row of this.multipleSelection) {
261
+ values.push(row.value);
262
+ names.push(row.label);
263
+ }
264
+ }
265
+ this.fieldModel = values;
266
+ this.fieldModelName = names.join();
267
+ } else {
268
+ if(this.currentRow) {
269
+ this.fieldModel = this.currentRow.value;
270
+ this.fieldModelName = this.currentRow.label;
271
+ } else {
272
+ this.fieldModel = null;
273
+ this.fieldModelName = null;
274
+ }
275
+ }
276
+ //
277
+ this.dialogTableClose();
278
+ },
279
+ handleClear() {
280
+ this.oldFieldValue = this.fieldModel;
281
+ if(this.field.options.multiple) {
282
+ this.fieldModel = [];
283
+ } else {
284
+ this.fieldModel = null;
285
+ }
286
+ },
287
+ initOptionItemsA(relationItems) {
288
+ // let projectId = this.getDesignerConfig().projectId;
289
+ // if(!projectId) {
290
+ // console.log("get designer config projectId is null");
291
+ // projectId = 'ZhaoyxTP';
292
+ // }
293
+ // if(projectId && this.field.options.relationForm && relationItems) {
294
+ // let url = "/dida-manage-server/manage/form-materialization-table-data/getFormDatas?projectId="+projectId+"&formId="+this.field.options.relationForm+"&relationItems="+relationItems;
295
+ // ajax.get(url)
296
+ // .then(resp => {
297
+ // if (resp.data && (resp.data.code == 1 || resp.data.code == 200)) {
298
+ // this.optionItems = resp.data.data;
299
+ // // field.options.optionItems
300
+ // } else {
301
+ // this.resetDefaultOptionItems();
302
+ // // this.$Message.error('查询表单列表失败');
303
+ // console.error(resp.data.message);
304
+ // }
305
+ // })
306
+ // .catch(err => {
307
+ // this.resetDefaultOptionItems();
308
+ // // this.$Message.error('获取表单列表失败');
309
+ // console.error(err);
310
+ // });
311
+ // } else {
312
+ // this.resetDefaultOptionItems();
313
+ // }
314
+ this.resetDefaultOptionItems(relationItems);
315
+ },
316
+ resetDefaultOptionItems() {
317
+ this.optionItems = [
318
+ {label: '示例数据一', value: 1},
319
+ {label: '示例数据二', value: 2},
320
+ {label: '示例数据三', value: 3},
321
+ ];
322
+ // field.options.optionItems
323
+ }
324
+
325
+ },
326
+ watch:{
327
+ 'field.options.multiple':function (newValue) {//, oldValue
328
+ if(newValue) {
329
+ if(this.oldFieldValue) {
330
+ this.oldFieldValue = [this.oldFieldValue];
331
+ }
332
+ if(this.fieldModel) {
333
+ this.fieldModel = [this.fieldModel];
334
+ }
335
+ } else {
336
+ if(this.oldFieldValue && this.oldFieldValue.length>0) {
337
+ this.oldFieldValue = this.oldFieldValue[0];
338
+ }
339
+ if(this.fieldModel && this.fieldModel.length>0) {
340
+ this.fieldModel = this.fieldModel[0];
341
+ }
342
+ }
343
+ },
344
+ 'field.options.multipleLimit':function (newValue, oldValue) {
345
+ let oldV = oldValue>0?oldValue:65535;
346
+ if(this.field.options.multiple && newValue>0 && newValue<oldV && this.fieldModel && this.fieldModel.length>newValue) {
347
+ this.oldFieldValue = this.fieldModel.slice();
348
+ this.fieldModel.splice(newValue);
349
+ }
350
+ },
351
+ 'fieldModel':function (newValue) {//, oldValue
352
+ if(this.field.options.multiple) {
353
+ if (newValue) {
354
+ let names = [];
355
+ for(let v of newValue) {
356
+ for(let n of this.optionItems) {
357
+ if(v == n.value) {
358
+ names.push(n.label);
359
+ break;
360
+ }
361
+ }
362
+ // field.options.optionItems
363
+ }
364
+ this.fieldModelName = names.join();
365
+ } else {
366
+ this.fieldModelName = null;
367
+ }
368
+ } else {
369
+ if(newValue) {
370
+ for(let n of this.optionItems) {
371
+ if(newValue == n.value) {
372
+ this.fieldModelName = n.label;
373
+ break;
374
+ }
375
+ }
376
+ // field.options.optionItems
377
+ } else {
378
+ this.fieldModelName = null;
379
+ }
380
+ }
381
+ },
382
+ 'field.options.relationItems':function (newValue) {//, oldValue
383
+ this.initOptionItemsA(newValue);
384
+ },
385
+ deep:true
386
+ }
387
+ }
388
+ </script>
389
+
390
+ <style lang="scss" scoped>
391
+ @import "../../../../styles/global.scss"; //* form-item-wrapper已引入,还需要重复引入吗? *//
392
+
393
+ .full-width-input {
394
+ width: 100% !important;
395
+ }
396
+
397
+ </style>