tianheng-ui 0.1.69 → 0.1.70

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 (31) hide show
  1. package/lib/theme-chalk/styles/dialog.scss +56 -40
  2. package/lib/theme-chalk/styles/feature.scss +7 -0
  3. package/lib/tianheng-ui.js +13 -13
  4. package/package.json +1 -1
  5. package/packages/Dialog/index.vue +18 -9
  6. package/packages/FormMaking/GenerateForm.vue +27 -42
  7. package/packages/FormMaking/GenerateFormItem.vue +10 -26
  8. package/packages/FormMaking/WidgetFormItem.vue +9 -7
  9. package/packages/FormMaking/WidgetGuide.vue +86 -0
  10. package/packages/FormMaking/WidgetSelect.vue +2 -2
  11. package/packages/FormMaking/WidgetTools.vue +10 -6
  12. package/packages/FormMaking/custom/config.js +2 -31
  13. package/packages/FormMaking/custom/configs/list.vue +11 -12
  14. package/packages/FormMaking/custom/configs/radio.vue +2 -5
  15. package/packages/FormMaking/custom/configs/table.vue +12 -9
  16. package/packages/FormMaking/custom/configs/tabs.vue +69 -55
  17. package/packages/FormMaking/custom/index.js +1 -1
  18. package/packages/FormMaking/custom/items/grid_dev.vue +5 -8
  19. package/packages/FormMaking/custom/items/list_dev.vue +19 -23
  20. package/packages/FormMaking/custom/items/list_pro.vue +16 -14
  21. package/packages/FormMaking/custom/items/table_dev.vue +13 -12
  22. package/packages/FormMaking/custom/items/table_pro.vue +5 -5
  23. package/packages/FormMaking/custom/items/tabs_dev.vue +4 -7
  24. package/packages/FormMaking/custom/items/tabs_pro.vue +7 -9
  25. package/packages/FormMaking/index.vue +62 -76
  26. package/packages/FormMaking/styles/index.scss +1 -1
  27. package/packages/TableMaking/index.vue +18 -3
  28. package/packages/TableMaking/widgetGuide.vue +122 -58
  29. package/packages/FormMaking/custom/configs/tableH5.vue +0 -98
  30. package/packages/FormMaking/custom/items/tableH5_dev.vue +0 -112
  31. package/packages/FormMaking/custom/items/tableH5_pro.vue +0 -119
@@ -13,24 +13,20 @@
13
13
  name="group-basic"
14
14
  >
15
15
  <draggable
16
- tag="ul"
17
16
  :list="getBasicComponents"
18
17
  v-bind="{
19
18
  group: { name: 'people', pull: 'clone', put: false },
20
19
  sort: false
21
20
  }"
22
21
  >
23
- <li
22
+ <div
24
23
  v-for="(item, index) in getBasicComponents"
25
- class="fields-label"
26
- :class="[[item.type]]"
24
+ :class="`fields-label ${item.type}`"
27
25
  :key="index"
28
26
  >
29
- <a>
30
- <i class="icon iconfont" :class="item.icon"></i>
31
- <span>{{ item.name }}</span>
32
- </a>
33
- </li>
27
+ <i class="iconfont" :class="item.icon"></i>
28
+ <span>{{ item.name }}</span>
29
+ </div>
34
30
  </draggable>
35
31
  </el-collapse-item>
36
32
  <el-collapse-item
@@ -39,24 +35,20 @@
39
35
  name="group-advance"
40
36
  >
41
37
  <draggable
42
- tag="ul"
43
38
  :list="getAdvanceComponents"
44
39
  v-bind="{
45
40
  group: { name: 'people', pull: 'clone', put: false },
46
41
  sort: false
47
42
  }"
48
43
  >
49
- <li
44
+ <div
50
45
  v-for="(item, index) in getAdvanceComponents"
51
- class="fields-label no-put"
52
- :class="[[item.type]]"
46
+ :class="`fields-label ${item.type} no-put`"
53
47
  :key="index"
54
48
  >
55
- <a>
56
- <i class="icon iconfont" :class="item.icon"></i>
57
- <span>{{ item.name }}</span>
58
- </a>
59
- </li>
49
+ <i class="iconfont" :class="item.icon"></i>
50
+ <span>{{ item.name }}</span>
51
+ </div>
60
52
  </draggable>
61
53
  </el-collapse-item>
62
54
  <el-collapse-item
@@ -65,27 +57,23 @@
65
57
  name="group-layout"
66
58
  >
67
59
  <draggable
68
- tag="ul"
69
60
  :list="getLayoutComponents"
70
61
  v-bind="{
71
62
  group: { name: 'people', pull: 'clone', put: false },
72
63
  sort: false
73
64
  }"
74
65
  >
75
- <li
66
+ <div
76
67
  v-for="(item, index) in getLayoutComponents"
77
- class="fields-label"
78
- :class="{
79
- 'no-put': ['alliance'].includes(item.type),
80
- [item.type]: true
81
- }"
68
+ :class="
69
+ `fields-label ${item.type}
70
+ ${['alliance'].includes(item.type) ? 'no-put' : ''}`
71
+ "
82
72
  :key="index"
83
73
  >
84
- <a>
85
- <i class="icon iconfont" :class="item.icon"></i>
86
- <span>{{ item.name }}</span>
87
- </a>
88
- </li>
74
+ <i class="iconfont" :class="item.icon"></i>
75
+ <span>{{ item.name }}</span>
76
+ </div>
89
77
  </draggable>
90
78
  </el-collapse-item>
91
79
  <el-collapse-item
@@ -94,31 +82,27 @@
94
82
  name="group-business"
95
83
  >
96
84
  <draggable
97
- tag="ul"
98
85
  :list="getBusinessComponents"
99
86
  v-bind="{
100
87
  group: { name: 'people', pull: 'clone', put: false },
101
88
  sort: false
102
89
  }"
103
90
  >
104
- <li
91
+ <div
105
92
  v-for="(item, index) in getBusinessComponents"
106
- class="fields-label"
107
- :class="[[item.type]]"
93
+ :class="`fields-label ${item.type}`"
108
94
  :key="index"
109
95
  >
110
- <a>
111
- <i class="icon iconfont" :class="item.icon"></i>
112
- <span>{{ item.name }}</span>
113
- </a>
114
- </li>
96
+ <i class="iconfont" :class="item.icon"></i>
97
+ <span>{{ item.name }}</span>
98
+ </div>
115
99
  </draggable>
116
100
  </el-collapse-item>
117
101
  </el-collapse>
118
102
  </div>
119
103
 
120
104
  <!-- 中间视图区 -->
121
- <div class="formMaking-drawing th-fiex_content">
105
+ <div class="th-fiex_content">
122
106
  <!-- 操作区 -->
123
107
  <widget-tools
124
108
  :baseConfig="baseConfig"
@@ -154,6 +138,10 @@
154
138
  >
155
139
  </widget-config>
156
140
  </div>
141
+
142
+ <!-- <th-dialog v-model="showGuide" title="配置" :showFooter="false">
143
+ <widget-guide></widget-guide>
144
+ </th-dialog> -->
157
145
  </div>
158
146
  </template>
159
147
 
@@ -163,6 +151,7 @@ import WidgetConfig from "./WidgetConfig";
163
151
  import WidgetTools from "./WidgetTools";
164
152
  import WidgetForm from "./WidgetForm";
165
153
  import GenerateForm from "./GenerateForm";
154
+ import WidgetGuide from "./WidgetGuide.vue";
166
155
  import {
167
156
  basicComponents,
168
157
  advanceComponents,
@@ -181,7 +170,8 @@ export default {
181
170
  WidgetConfig,
182
171
  WidgetTools,
183
172
  WidgetForm,
184
- GenerateForm
173
+ GenerateForm,
174
+ WidgetGuide
185
175
  },
186
176
  props: {
187
177
  config: Object,
@@ -229,7 +219,7 @@ export default {
229
219
  },
230
220
  advanceFields: {
231
221
  type: Array,
232
- default: () => ["table", "tableH5", "list", "tabs"]
222
+ default: () => ["table", "list", "tabs"]
233
223
  },
234
224
  layoutFields: {
235
225
  type: Array,
@@ -238,7 +228,8 @@ export default {
238
228
  businessFields: {
239
229
  type: Array,
240
230
  default: () => ["blank", "descriptions", "workflow"]
241
- }
231
+ },
232
+ guide: Boolean
242
233
  },
243
234
  data() {
244
235
  this.basicComponents = basicComponents;
@@ -256,7 +247,8 @@ export default {
256
247
  "group-advance",
257
248
  "group-layout",
258
249
  "group-business"
259
- ]
250
+ ],
251
+ showGuide: this.guide
260
252
  };
261
253
  },
262
254
  computed: {
@@ -292,6 +284,12 @@ export default {
292
284
  },
293
285
  apiOptions(val) {
294
286
  this.handleNetworkConfig(true);
287
+ },
288
+ guide(val) {
289
+ this.showGuide = val;
290
+ },
291
+ showGuide(val) {
292
+ this.$emit("update:guide", val);
295
293
  }
296
294
  },
297
295
  created() {
@@ -353,7 +351,7 @@ export default {
353
351
  item.options.columns.forEach(e => {
354
352
  initList(e.list);
355
353
  });
356
- } else if (item.type === "table" || item.type === "tableH5") {
354
+ } else if (item.type === "table" || item.type === "list") {
357
355
  initList(item.options.columns);
358
356
  } else if (item.type === "workflow") {
359
357
  initList(item.options.buttons);
@@ -497,14 +495,8 @@ export default {
497
495
  padding: 0 15px;
498
496
  z-index: 99;
499
497
  }
500
- ul {
501
- position: relative;
502
- overflow: hidden;
503
- padding: 5px;
504
- margin: 0;
505
- }
506
498
  .fields-label {
507
- margin: 0 3px;
499
+ margin: 2px 3px;
508
500
  width: calc(50% - 6px);
509
501
  line-height: 26px;
510
502
  font-size: 12px;
@@ -513,9 +505,23 @@ export default {
513
505
  overflow: hidden;
514
506
  text-overflow: ellipsis;
515
507
  white-space: nowrap;
508
+ background: #f4f6fc;
516
509
  border: 1px solid #f4f6fc;
517
510
  box-sizing: border-box;
518
511
  transition: 0.25s;
512
+ cursor: move;
513
+
514
+ i {
515
+ margin-right: 6px;
516
+ margin-left: 8px;
517
+ font-size: 14px;
518
+ display: inline-block;
519
+ vertical-align: middle;
520
+ }
521
+ span {
522
+ display: inline-block;
523
+ vertical-align: middle;
524
+ }
519
525
 
520
526
  &:hover {
521
527
  color: $color-parimary-active !important;
@@ -525,32 +531,8 @@ export default {
525
531
  color: $color-parimary-active !important;
526
532
  }
527
533
  }
528
-
529
- & > a {
530
- color: #333;
531
- display: block;
532
- cursor: move;
533
- background: #f4f6fc;
534
- border: 1px solid #f4f6fc;
535
- transition: 0.25s;
536
-
537
- .icon {
538
- margin-right: 6px;
539
- margin-left: 8px;
540
- font-size: 14px;
541
- display: inline-block;
542
- vertical-align: middle;
543
- }
544
-
545
- span {
546
- display: inline-block;
547
- vertical-align: middle;
548
- }
549
- }
550
534
  }
551
535
  }
552
- .formMaking-drawing {
553
- }
554
536
  }
555
537
  </style>
556
538
 
@@ -562,5 +544,9 @@ export default {
562
544
  line-height: 40px;
563
545
  background-color: #f5f7f9;
564
546
  }
547
+ .el-collapse-item__content {
548
+ padding: 2px 3px;
549
+ line-height: normal;
550
+ }
565
551
  }
566
552
  </style>
@@ -66,7 +66,7 @@
66
66
  overflow: hidden;
67
67
  content: "";
68
68
  // 隐藏内容
69
- a {
69
+ i {
70
70
  display: none;
71
71
  }
72
72
  }
@@ -22,7 +22,14 @@
22
22
  ref="configRef"
23
23
  ></widget-config>
24
24
  </div>
25
- <!-- <widget-guide :visible="true"></widget-guide> -->
25
+
26
+ <th-dialog v-model="showGuide" title="引导配置" :showFooter="false">
27
+ <widget-guide
28
+ :config="tableConfig"
29
+ :apiOptions="apiOptions"
30
+ @save="showGuide = false"
31
+ ></widget-guide>
32
+ </th-dialog>
26
33
  </div>
27
34
  </template>
28
35
 
@@ -79,12 +86,14 @@ export default {
79
86
  "generateCode",
80
87
  "generateJson"
81
88
  ]
82
- }
89
+ },
90
+ guide: Boolean
83
91
  },
84
92
  data() {
85
93
  this.baseConfig = deepClone(baseConfig);
86
94
  return {
87
- tableConfig: this.baseConfig
95
+ tableConfig: this.baseConfig,
96
+ showGuide: this.guide
88
97
  };
89
98
  },
90
99
  watch: {
@@ -94,6 +103,12 @@ export default {
94
103
  config(val) {
95
104
  this.tableConfig = Object.assign(this.baseConfig, val);
96
105
  this.handleNetworkConfig();
106
+ },
107
+ guide(val) {
108
+ this.showGuide = val;
109
+ },
110
+ showGuide(val) {
111
+ this.$emit("update:guide", val);
97
112
  }
98
113
  },
99
114
  mounted() {
@@ -1,26 +1,107 @@
1
1
  <template>
2
- <div v-show="show" class="widgetGuide">
3
- <div class="box">
4
- <div class="header"></div>
5
- <div class="content">
6
- <div>你好</div>
7
- <div>让我们来了解一些基本信息</div>
8
- </div>
9
- <div class="footer th-is_border_top">
10
- <div></div>
11
- <div class="stepView">
12
- <el-button
13
- :disabled="step === 0"
14
- type="primary"
15
- icon="el-icon-back"
16
- size="small"
17
- @click="handleBack"
18
- >上一步</el-button
19
- >
20
- <el-button type="primary" size="small" @click="handleNext"
21
- >下一步<i class="el-icon-right el-icon--right"></i
22
- ></el-button>
2
+ <div class="widgetGuide">
3
+ <el-steps :active="step" finish-status="success" simple>
4
+ <el-step title="列表配置" icon="el-icon-s-operation" description="">
5
+ </el-step>
6
+ <!-- <el-step
7
+ title="字段配置"
8
+ icon="el-icon-c-scale-to-original"
9
+ description=""
10
+ ></el-step> -->
11
+ <el-step title="按钮配置" icon="el-icon-set-up" description=""></el-step>
12
+ </el-steps>
13
+ <div class="content">
14
+ <el-form :model="config" label-width="80px" size="small">
15
+ <div v-show="step === 0">
16
+ <el-form-item size="small">
17
+ <el-tooltip
18
+ slot="label"
19
+ effect="light"
20
+ content="字段的配置方式"
21
+ placement="top"
22
+ >
23
+ <span style="color: #409EFF;">字段类型</span>
24
+ </el-tooltip>
25
+ <el-radio-group v-model="config.table.fields.type">
26
+ <el-radio-button label="custom" disabled>自定义</el-radio-button>
27
+ <el-radio-button label="api">接口导入</el-radio-button>
28
+ </el-radio-group>
29
+ </el-form-item>
30
+ <el-form-item>
31
+ <el-tooltip
32
+ slot="label"
33
+ effect="light"
34
+ content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器查询字段"
35
+ placement="top"
36
+ >
37
+ <span style="color: #409EFF;">远程字段</span>
38
+ </el-tooltip>
39
+ <el-switch v-model="config.table.fields.remote"> </el-switch>
40
+ </el-form-item>
41
+ <el-form-item>
42
+ <el-tooltip
43
+ slot="label"
44
+ effect="light"
45
+ content="列表初始化完成后,调用该接口获取列表数据"
46
+ placement="top"
47
+ >
48
+ <span style="color: #409EFF;">列表接口</span>
49
+ </el-tooltip>
50
+ <el-select
51
+ v-model="config.table.mounted.api"
52
+ style="width:100%"
53
+ clearable
54
+ placeholder="请选择"
55
+ no-data-text="暂无接口,请前往【接口模块】创建"
56
+ filterable
57
+ >
58
+ <el-option
59
+ v-for="item in apiOptions"
60
+ :key="item.id"
61
+ :label="item.name"
62
+ :value="item.id"
63
+ >
64
+ </el-option>
65
+ </el-select>
66
+ </el-form-item>
67
+ <el-form-item label="列表名称">
68
+ <el-input
69
+ v-model="config.table.title"
70
+ placeholder="请输入"
71
+ ></el-input>
72
+ </el-form-item>
73
+ </div>
74
+ <div v-show="step === 1">
75
+ <el-form-item label="">
76
+ <div v-for="item in Object.values(config.tools)" :key="item.type">
77
+ <el-checkbox v-model="item.show" :label="item.name"></el-checkbox>
78
+ </div>
79
+ </el-form-item>
23
80
  </div>
81
+ </el-form>
82
+ </div>
83
+ <div class="footer">
84
+ <div></div>
85
+ <div class="stepView">
86
+ <el-button
87
+ type="primary"
88
+ icon="el-icon-back"
89
+ size="small"
90
+ :disabled="step === 0"
91
+ @click="handleBack"
92
+ >上一步</el-button
93
+ >
94
+ <el-button
95
+ v-if="step !== 1"
96
+ type="primary"
97
+ size="small"
98
+ @click="handleNext"
99
+ >
100
+ 下一步<i class="el-icon-right el-icon--right"></i>
101
+ </el-button>
102
+ <el-button v-else type="success" size="small" @click="handleSave">
103
+ 完&nbsp;&nbsp;&nbsp;成<i class="el-icon-finished el-icon--right"></i>
104
+ </el-button>
24
105
  </div>
25
106
  </div>
26
107
  </div>
@@ -28,19 +109,16 @@
28
109
 
29
110
  <script>
30
111
  export default {
31
- props: { visible: { type: Boolean, default: true } },
112
+ props: { config: Object, apiOptions: Array },
32
113
  data() {
33
114
  return {
34
- show: this.visible,
35
- step: 0
115
+ step: 0,
116
+ formData: {}
36
117
  };
37
118
  },
38
- watch: {
39
- visible(val) {
40
- this.show = val;
41
- },
42
- show(val) {
43
- this.$emit("update:visible", val);
119
+ computed: {
120
+ getFields() {
121
+ return [];
44
122
  }
45
123
  },
46
124
  created() {},
@@ -51,6 +129,9 @@ export default {
51
129
  },
52
130
  handleNext() {
53
131
  this.step++;
132
+ },
133
+ handleSave() {
134
+ this.$emit("save");
54
135
  }
55
136
  }
56
137
  };
@@ -58,38 +139,21 @@ export default {
58
139
 
59
140
  <style lang="scss" scoped>
60
141
  .widgetGuide {
61
- position: absolute;
62
142
  width: 100%;
63
143
  height: 100%;
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- background-color: rgba($color: #000000, $alpha: 0.6);
68
- z-index: 999;
69
144
 
70
- .box {
71
- position: relative;
72
- width: calc(100% - 200px);
73
- height: calc(100% - 200px);
74
- background-color: white;
75
- border-radius: 4px;
76
-
77
- .header {
78
- height: 50px;
79
- }
80
- .content {
81
- height: calc(100% - 100px);
82
- }
83
- .footer {
84
- padding: 10px 20px;
85
- height: 50px;
86
- display: flex;
87
- align-items: center;
88
- justify-content: space-between;
89
- box-sizing: border-box;
145
+ .content {
146
+ height: calc(100% - 96px);
147
+ padding-top: 10px;
148
+ }
149
+ .footer {
150
+ height: 50px;
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: space-between;
154
+ box-sizing: border-box;
90
155
 
91
- .stepView {
92
- }
156
+ .stepView {
93
157
  }
94
158
  }
95
159
  }
@@ -1,98 +0,0 @@
1
- <template>
2
- <div class="component-config">
3
- <el-collapse-item title="组件配置" name="group-element">
4
- <el-form-item label="标题">
5
- <el-input v-model="widget.name"></el-input>
6
- </el-form-item>
7
-
8
- <el-form-item label="标签宽度">
9
- <div style="display: flex;">
10
- <el-checkbox v-model="widget.options.isLabelWidth"
11
- >自定义</el-checkbox
12
- >
13
- <el-input-number
14
- v-model="widget.options.labelWidth"
15
- :min="0"
16
- :max="200"
17
- :disabled="!widget.options.isLabelWidth"
18
- >
19
- </el-input-number>
20
- </div>
21
- </el-form-item>
22
-
23
- <el-form-item>
24
- <div class="config-header" slot="label">
25
- <span class="title">默认值</span>
26
- <span class="value" @click="handleAddData">添加数据</span>
27
- </div>
28
- <code-editor
29
- v-model="widget.options.defaultValue"
30
- language="json"
31
- ></code-editor>
32
- </el-form-item>
33
-
34
- <el-form-item label="新增按钮文本内容">
35
- <el-input v-model.number="widget.options.addButtonText"></el-input>
36
- </el-form-item>
37
-
38
- <el-form-item label="删除按钮文本内容">
39
- <el-input v-model.number="widget.options.deleteButtonText"></el-input>
40
- </el-form-item>
41
-
42
- <el-form-item label="可删除的最小索引">
43
- <el-input-number v-model="widget.options.deleteIndex" :min="0">
44
- </el-input-number>
45
- </el-form-item>
46
-
47
- <el-form-item label="操作属性">
48
- <el-checkbox v-model="widget.options.disabled">禁用 </el-checkbox>
49
- <el-checkbox v-model="widget.options.hidden">隐藏组件 </el-checkbox>
50
- <el-checkbox v-model="widget.options.hideLabel">隐藏标签 </el-checkbox>
51
- <el-checkbox v-model="widget.options.isAdd">可新增 </el-checkbox>
52
- <el-checkbox v-model="widget.options.isDelete">可删除 </el-checkbox>
53
- </el-form-item>
54
-
55
- <el-form-item label="校验">
56
- <el-checkbox v-model="widget.options.required">必填</el-checkbox>
57
- </el-form-item>
58
- </el-collapse-item>
59
- </div>
60
- </template>
61
-
62
- <script>
63
- import Draggable from "vuedraggable";
64
- import { configComponent } from "../mixins";
65
- import CodeEditor from "ui/CodeEditor/index.vue";
66
- export default {
67
- components: {
68
- Draggable,
69
- CodeEditor
70
- },
71
- props: {},
72
- mixins: [configComponent],
73
- mounted() {},
74
- methods: {
75
- handleAddData() {
76
- let defaultValue = JSON.parse(this.widget.options.defaultValue || "[]");
77
- let dic = {};
78
- this.widget.list.forEach(item => {
79
- if (item.type === "grid") {
80
- for (let i = 0; i < item.options.columns.length; i++) {
81
- const element = item.options.columns[i];
82
- for (let j = 0; j < element.list.length; j++) {
83
- const element2 = element.list[j];
84
- dic[element2.model] = element2.options.defaultValue;
85
- }
86
- }
87
- } else {
88
- dic[item.model] = item.options.defaultValue;
89
- }
90
- });
91
- defaultValue.push(dic);
92
- this.widget.options.defaultValue = JSON.stringify(defaultValue, null, 2);
93
- }
94
- }
95
- };
96
- </script>
97
-
98
- <style></style>