tianheng-ui 0.1.77 → 0.1.79

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tianheng-ui",
3
3
  "description": "A Vue.js project",
4
- "version": "0.1.77",
4
+ "version": "0.1.79",
5
5
  "author": "shu lang <403732931@qq.com>",
6
6
  "license": "MIT",
7
7
  "private": false,
@@ -181,7 +181,7 @@
181
181
  <el-tooltip
182
182
  slot="label"
183
183
  effect="light"
184
- content="使用接口的出参配置可选字段"
184
+ content="使用该接口的出参配置可选字段"
185
185
  placement="top"
186
186
  >
187
187
  <span style="color: #409EFF;">字段接口</span>
@@ -217,7 +217,7 @@
217
217
  <el-tooltip
218
218
  slot="label"
219
219
  effect="light"
220
- content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器查询字段"
220
+ content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
221
221
  placement="top"
222
222
  >
223
223
  <span style="color: #409EFF;">远程字段</span>
@@ -3,14 +3,94 @@
3
3
  <el-steps :active="step" finish-status="success" simple>
4
4
  <el-step title="表单配置" icon="el-icon-s-operation" description="">
5
5
  </el-step>
6
- <el-step title="按钮配置" icon="el-icon-set-up" description=""></el-step>
6
+ <el-step
7
+ title="选择初始模板"
8
+ icon="el-icon-set-up"
9
+ description=""
10
+ ></el-step>
11
+ <!-- <el-step
12
+ title="选择初始模板"
13
+ icon="el-icon-set-up"
14
+ description=""
15
+ ></el-step> -->
7
16
  </el-steps>
8
17
  <div class="content">
9
- <div v-show="step === 0">
10
- <div>你好</div>
11
- <div>让我们来了解一些基本信息</div>
12
- </div>
13
- <div v-show="step === 1"></div>
18
+ <el-form :model="config" label-width="80px" size="small">
19
+ <div v-show="step === 0">
20
+ <el-form-item>
21
+ <el-tooltip
22
+ slot="label"
23
+ effect="light"
24
+ content="字段的配置方式"
25
+ placement="top"
26
+ >
27
+ <span style="color: #409EFF;">字段类型</span>
28
+ </el-tooltip>
29
+ <el-radio-group v-model="config.config.fields.type">
30
+ <el-radio-button label="custom">自定义</el-radio-button>
31
+ <el-radio-button label="api">接口导入</el-radio-button>
32
+ </el-radio-group>
33
+ </el-form-item>
34
+ <el-form-item v-if="config.config.fields.type === 'api'">
35
+ <el-tooltip
36
+ slot="label"
37
+ effect="light"
38
+ content="使用该接口的出参配置可选字段"
39
+ placement="top"
40
+ >
41
+ <span style="color: #409EFF;">字段接口</span>
42
+ </el-tooltip>
43
+ <el-select
44
+ v-model="config.config.fields.api"
45
+ style="width:100%"
46
+ clearable
47
+ placeholder="请选择"
48
+ no-data-text="暂无接口,请前往【接口模块】创建"
49
+ filterable
50
+ >
51
+ <el-option
52
+ v-for="item in apiOptions"
53
+ :key="item.id"
54
+ :label="item.name"
55
+ :value="item.id"
56
+ >
57
+ </el-option>
58
+ </el-select>
59
+ </el-form-item>
60
+ <el-form-item label="表单名称">
61
+ <el-input
62
+ v-model="config.config.title"
63
+ placeholder="请输入"
64
+ ></el-input>
65
+ </el-form-item>
66
+ <el-form-item>
67
+ <el-tooltip
68
+ slot="label"
69
+ effect="light"
70
+ content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
71
+ placement="top"
72
+ >
73
+ <span style="color: #409EFF;">远程字段</span>
74
+ </el-tooltip>
75
+ <el-switch v-model="config.config.fields.remote"> </el-switch>
76
+ </el-form-item>
77
+ </div>
78
+ <div v-show="step === 1" class="formTemplates">
79
+ <div
80
+ :class="
81
+ `formTemplates-item th-border th-hover_boxShadow_light ${
82
+ formTemplateActive === index ? 'th-active' : ''
83
+ }`
84
+ "
85
+ v-for="(item, index) in formTemplates"
86
+ :key="index"
87
+ @click="handleFormTemplateClick(index)"
88
+ >
89
+ <img :src="item.img" alt="" />
90
+ <div>{{ item.name }}</div>
91
+ </div>
92
+ </div>
93
+ </el-form>
14
94
  </div>
15
95
  <div class="footer">
16
96
  <div></div>
@@ -23,31 +103,43 @@
23
103
  @click="handleBack"
24
104
  >上一步</el-button
25
105
  >
26
- <el-button type="primary" size="small" @click="handleNext"
27
- >下一步<i class="el-icon-right el-icon--right"></i
28
- ></el-button>
106
+ <el-button
107
+ v-if="step !== 1"
108
+ type="primary"
109
+ size="small"
110
+ @click="handleNext"
111
+ >
112
+ 下一步<i class="el-icon-right el-icon--right"></i>
113
+ </el-button>
114
+ <el-button v-else type="success" size="small" @click="handleSave">
115
+ 完&nbsp;&nbsp;&nbsp;成<i class="el-icon-finished el-icon--right"></i>
116
+ </el-button>
29
117
  </div>
30
118
  </div>
31
119
  </div>
32
120
  </template>
33
121
 
34
122
  <script>
123
+ import EmptyTemplateJson from "./assets/templates/empty.json";
124
+ import GeneralTemplateJson from "./assets/templates/general.json";
125
+ import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
126
+ import TableTemplateJson from "./assets/templates/table.json";
127
+ import { deepClone } from "./util";
35
128
  export default {
36
- props: { visible: { type: Boolean, default: true } },
129
+ props: { config: Object, apiOptions: Array },
37
130
  data() {
38
131
  return {
39
- show: this.visible,
40
- step: 0
132
+ step: 0,
133
+ formTemplates: [
134
+ EmptyTemplateJson,
135
+ GeneralTemplateJson,
136
+ PersonalDetailsTemplateJson,
137
+ TableTemplateJson
138
+ ],
139
+ formTemplateActive: null
41
140
  };
42
141
  },
43
- watch: {
44
- visible(val) {
45
- this.show = val;
46
- },
47
- show(val) {
48
- this.$emit("update:visible", val);
49
- }
50
- },
142
+ computed: {},
51
143
  created() {},
52
144
  mounted() {},
53
145
  methods: {
@@ -57,8 +149,15 @@ export default {
57
149
  handleNext() {
58
150
  this.step++;
59
151
  },
60
- handleClose() {
61
- this.show = !this.show;
152
+ handleSave() {
153
+ if (this.formTemplateActive !== null) {
154
+ const list = this.formTemplates[this.formTemplateActive].data.list;
155
+ this.config.list = deepClone(list);
156
+ }
157
+ this.$emit("save");
158
+ },
159
+ handleFormTemplateClick(index) {
160
+ this.formTemplateActive = index;
62
161
  }
63
162
  }
64
163
  };
@@ -70,7 +169,13 @@ export default {
70
169
  height: 100%;
71
170
 
72
171
  .content {
73
- height: calc(100% - 50px);
172
+ height: calc(100% - 96px);
173
+ padding-top: 10px;
174
+ overflow-y: scroll;
175
+
176
+ .tools-item {
177
+ margin-bottom: 10px;
178
+ }
74
179
  }
75
180
  .footer {
76
181
  height: 50px;
@@ -78,9 +183,57 @@ export default {
78
183
  align-items: center;
79
184
  justify-content: space-between;
80
185
  box-sizing: border-box;
186
+ background-color: white;
81
187
 
82
188
  .stepView {
83
189
  }
84
190
  }
191
+ .fields-item {
192
+ span {
193
+ padding: 0px 8px 2px 8px;
194
+ border-radius: 4px;
195
+ }
196
+ span:nth-child(1) {
197
+ color: #1890ff;
198
+ background-color: #e8f4ff;
199
+ }
200
+ span:nth-child(2) {
201
+ color: #13ce66;
202
+ background-color: #e7faf0;
203
+ }
204
+ span:nth-child(3) {
205
+ color: #909399;
206
+ background-color: #f4f4f5;
207
+ }
208
+ }
209
+ .formTemplates {
210
+ .formTemplates-item {
211
+ display: inline-block;
212
+ margin: 10px;
213
+ padding: 10px;
214
+ width: 230px;
215
+ border-radius: 4px;
216
+ transition: 0.25s;
217
+ box-sizing: border-box;
218
+
219
+ img {
220
+ width: 100%;
221
+ height: 230px;
222
+ object-fit: contain;
223
+ }
224
+ }
225
+ }
226
+ }
227
+ </style>
228
+
229
+ <style lang="scss">
230
+ .widgetGuide {
231
+ .el-transfer {
232
+ display: flex;
233
+ align-items: center;
234
+ }
235
+ .el-transfer-panel {
236
+ flex: 1;
237
+ }
85
238
  }
86
239
  </style>
@@ -74,7 +74,6 @@
74
74
  <el-button
75
75
  type="text"
76
76
  size="medium"
77
- disabled
78
77
  @click="handleDialogOpen('importTemplate')"
79
78
  >导入模板
80
79
  </el-button>
@@ -120,7 +119,8 @@
120
119
  :showFooter="
121
120
  dialog.action === 'previewPc' ||
122
121
  dialog.action === 'previewH5' ||
123
- dialog.action === 'importJson'
122
+ dialog.action === 'importJson' ||
123
+ dialog.action === 'importTemplate'
124
124
  "
125
125
  @on-close="handleDialogClose"
126
126
  @on-affirm="handleDialogAffirm"
@@ -133,7 +133,21 @@
133
133
  ></el-alert>
134
134
  <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
135
135
  </template>
136
- <template v-if="dialog.action === 'importTemplate'"> </template>
136
+ <div v-if="dialog.action === 'importTemplate'" class="formTemplates">
137
+ <div
138
+ :class="
139
+ `formTemplates-item th-border th-hover_boxShadow_light ${
140
+ formTemplateActive === index ? 'th-active' : ''
141
+ }`
142
+ "
143
+ v-for="(item, index) in formTemplates"
144
+ :key="index"
145
+ @click="handleFormTemplateClick(index)"
146
+ >
147
+ <img :src="item.img" alt="" />
148
+ <div>{{ item.name }}</div>
149
+ </div>
150
+ </div>
137
151
  <template v-if="dialog.action === 'generateJson'">
138
152
  <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
139
153
  </template>
@@ -164,7 +178,7 @@
164
178
  <template v-if="dialog.action === 'previewPc'">
165
179
  <generate-form
166
180
  v-if="dialog.show"
167
- :config="formData"
181
+ :config="formConfig"
168
182
  :oauthConfig="oauthConfig"
169
183
  :slotKeys="slotKeys"
170
184
  @change="handleDataChange"
@@ -188,7 +202,7 @@
188
202
  <generate-form
189
203
  v-if="dialog.show"
190
204
  class="box"
191
- :config="formData"
205
+ :config="formConfig"
192
206
  :oauthConfig="oauthConfig"
193
207
  @change="handleDataChange"
194
208
  @button-submit="handleButtonSubmit"
@@ -230,13 +244,17 @@ import { deepClone } from "./util/index";
230
244
  import * as XLSX from "xlsx/xlsx.mjs";
231
245
  import generateCode from "./util/generateCode.js";
232
246
  import GenerateForm from "./GenerateForm";
247
+ import EmptyTemplateJson from "./assets/templates/empty.json";
248
+ import GeneralTemplateJson from "./assets/templates/general.json";
249
+ import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
250
+ import TableTemplateJson from "./assets/templates/table.json";
233
251
  export default {
234
252
  props: {
235
253
  baseConfig: Object,
236
254
  permissions: Array,
237
255
  basicComponents: Array,
238
256
  layoutComponents: Array,
239
- formData: Object,
257
+ formConfig: Object,
240
258
  oauthConfig: Object,
241
259
  apiOptions: Array
242
260
  },
@@ -249,7 +267,6 @@ export default {
249
267
  data: null
250
268
  },
251
269
  dialogResultData: { show: false, data: null },
252
-
253
270
  dialogTitles: {
254
271
  previewPc: "预览-电脑端",
255
272
  previewH5: "预览-移动端",
@@ -258,7 +275,14 @@ export default {
258
275
  generateJson: "生成JSON",
259
276
  generateCode: "生成代码"
260
277
  },
261
- slotKeys: ["blank_1681093126000_96387"]
278
+ formTemplates: [
279
+ EmptyTemplateJson,
280
+ GeneralTemplateJson,
281
+ PersonalDetailsTemplateJson,
282
+ TableTemplateJson
283
+ ],
284
+ formTemplateActive: null,
285
+ slotKeys: []
262
286
  };
263
287
  },
264
288
  created() {},
@@ -418,13 +442,13 @@ export default {
418
442
  let data = "";
419
443
  switch (action) {
420
444
  case "generateJson":
421
- data = JSON.stringify(this.formData, null, 2);
445
+ data = JSON.stringify(this.formConfig, null, 2);
422
446
  break;
423
447
  case "generateCode":
424
448
  data = {
425
449
  generate: generateCode(
426
450
  {
427
- formConfig: JSON.stringify(this.formData, null, 2),
451
+ formConfig: JSON.stringify(this.formConfig, null, 2),
428
452
  apiOptions: JSON.stringify(this.apiOptions, null, 2),
429
453
  oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
430
454
  },
@@ -432,7 +456,7 @@ export default {
432
456
  ),
433
457
  making: generateCode(
434
458
  {
435
- formConfig: JSON.stringify(this.formData, null, 2),
459
+ formConfig: JSON.stringify(this.formConfig, null, 2),
436
460
  apiOptions: JSON.stringify(this.apiOptions, null, 2),
437
461
  oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
438
462
  },
@@ -440,6 +464,9 @@ export default {
440
464
  )
441
465
  };
442
466
  break;
467
+ case "importTemplate":
468
+ this.formTemplateActive = null;
469
+ break;
443
470
 
444
471
  default:
445
472
  break;
@@ -453,6 +480,14 @@ export default {
453
480
  if (this.dialog.action === "importJson") {
454
481
  this.handleClick("import-json", JSON.parse(this.dialog.data));
455
482
  }
483
+ if (
484
+ this.dialog.action === "importTemplate" &&
485
+ this.formTemplateActive !== null
486
+ ) {
487
+ const list = this.formTemplates[this.formTemplateActive].data.list;
488
+ this.formConfig.list = deepClone(list);
489
+ this.$emit("importTemplate");
490
+ }
456
491
  this.handleDialogClose();
457
492
  },
458
493
  handleDialogFullscreen() {
@@ -472,8 +507,8 @@ export default {
472
507
  },
473
508
  handleNetworkConfig() {
474
509
  const fieldsApi = {
475
- fields: this.formData.config.fields.api,
476
- mounted: this.formData.config.mounted.api
510
+ fields: this.formConfig.config.fields.api,
511
+ mounted: this.formConfig.config.mounted.api
477
512
  };
478
513
  const initList = list => {
479
514
  for (const item of list) {
@@ -490,13 +525,16 @@ export default {
490
525
  }
491
526
  }
492
527
  };
493
- initList(this.formData.list);
528
+ initList(this.formConfig.list);
494
529
  const apis = Object.values(fieldsApi);
495
530
  const network = {};
496
531
  this.apiOptions.map(item => {
497
532
  if (apis.includes(item.id)) network[item.id] = item;
498
533
  });
499
- this.formData.config.network = network;
534
+ this.formConfig.config.network = network;
535
+ },
536
+ handleFormTemplateClick(index) {
537
+ this.formTemplateActive = index;
500
538
  }
501
539
  }
502
540
  };
@@ -520,6 +558,23 @@ export default {
520
558
  justify-content: right;
521
559
  }
522
560
 
561
+ .formTemplates {
562
+ .formTemplates-item {
563
+ display: inline-block;
564
+ margin: 10px;
565
+ padding: 10px;
566
+ width: 230px;
567
+ border-radius: 4px;
568
+ transition: 0.25s;
569
+
570
+ img {
571
+ width: 100%;
572
+ height: 230px;
573
+ object-fit: contain;
574
+ }
575
+ }
576
+ }
577
+
523
578
  .previewH5 {
524
579
  width: 300px;
525
580
  height: 649px;
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "空白表单",
3
+ "data": {
4
+ "list": [],
5
+ "config": {
6
+ "fields": {
7
+ "type": "api",
8
+ "api": "",
9
+ "remote": true
10
+ },
11
+ "ui": "element",
12
+ "title": "",
13
+ "width": "",
14
+ "labelWidth": 100,
15
+ "labelPosition": "right",
16
+ "labelSuffix": ":",
17
+ "size": "small",
18
+ "disabled": false,
19
+ "hideLabel": false,
20
+ "mounted": {
21
+ "api": ""
22
+ },
23
+ "eventScript": [
24
+ {
25
+ "id": "mounted",
26
+ "label": "mounted",
27
+ "value": ""
28
+ },
29
+ {
30
+ "id": "refresh",
31
+ "label": "refresh",
32
+ "value": ""
33
+ }
34
+ ],
35
+ "network": {}
36
+ }
37
+ },
38
+ "img": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJXCAYAAABPMCoJAAABSGlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAwiDFwMmgwGCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisbp07V2MmPjdxvXLacUqm13NM9SiAKyW1OBlI/wHi9OSCohIGBsYUIFu5vKQAxO4AskWKgI4CsueA2OkQ9gYQOwnCPgJWExLkDGTfALIFkjMSgWYwvgCydZKQxNOR2FB7QYDXxdXHRyHUyMTQ0iOYgHtJBiWpFSUg2jm/oLIoMz2jRMERGEqpCp55yXo6CkYGRkYMDKAwh6j+HAQOS0axfQix/CUMDBbfGBiYJyLEkqYwMGxvY2CQuIUQU5nHwMDfwsCw7VBBYlEi3AGM31iK04yNIGweewYG1rv//3/WYGBgn8jA8Hfi//+/F////3cx0PzbDAwHKgHHO2Hu23HkSwAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAACWKADAAQAAAABAAACVwAAAAAOBDdzAAA0sUlEQVR4Ae3d6ZPcRnon4Oybl6TR3N4dhx22Y73+4v2y//zu2juxozk8OkYj6qLucySNRIni0VddvcgqFbtJkwTRnVWJTDyI6GGzgUq8+bwQ59coFLBx0izBQoAAAQIECBAgkExgM9lIBiJAgAABAgQIEJgLCFgOBAIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAAB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J0CAAAECBAi0CQhYbULWEyBAgAABAgQ6CghYHcFsToAAAQIECBBoExCw2oSsJ0CAAAECBAh0FBCwOoLZnAABAgQIECDQJiBgtQlZT4AAAQIECBDoKCBgdQSzOQECBAgQIECgTUDAahOyngABAgQIECDQUUDA6ghmcwIECBAgQIBAm4CA1SZkPQECBAgQIECgo4CA1RHM5gQIECBAgACBNgEBq03IegIECBAgQIBARwEBqyOYzQkQIECAAAECbQICVpuQ9QQIECBAgACBjgICVkcwmxMgQIAAAQIE2gQErDYh6wkQIECAAAECHQUErI5gNidAgAABAgQItAkIWG1C1hMgQIAAAQIEOgoIWB3BbE6AAAECBAgQaBMQsNqErCdAgAABAgQIdBQQsDqC2ZwAAQIECBAg0CYgYLUJWU+AAAECBAgQ6CggYHUEszkBAgQIECBAoE1AwGoTsp4AAQIECBAg0FFAwOoIZnMCBAgQIECAQJuAgNUmZD0BAgQIECBAoKOAgNURzOYECBAgQIAAgTYBAatNyHoCBAgQIECAQEcBAasjmM0JECBAgAABAm0C/x9YvWPWbALEKQAAAABJRU5ErkJggg=="
39
+ }