tianheng-ui 0.1.10 → 0.1.11

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 (57) hide show
  1. package/lib/theme-chalk/styles/reset.scss +0 -2
  2. package/lib/tianheng-ui.js +14 -14
  3. package/package.json +1 -1
  4. package/packages/FormMaking/GenerateForm.vue +10 -10
  5. package/packages/FormMaking/GenerateFormItem.vue +66 -578
  6. package/packages/FormMaking/GenerateFormItemH5.vue +5 -5
  7. package/packages/FormMaking/Upload/index.vue +0 -1
  8. package/packages/FormMaking/WidgetConfig.vue +66 -30
  9. package/packages/FormMaking/WidgetForm.vue +7 -48
  10. package/packages/FormMaking/WidgetFormItem.vue +41 -65
  11. package/packages/FormMaking/WidgetSelect.vue +160 -0
  12. package/packages/FormMaking/custom/config.js +98 -63
  13. package/packages/FormMaking/custom/configs/grid.vue +4 -4
  14. package/packages/FormMaking/custom/configs/input.vue +135 -28
  15. package/packages/FormMaking/custom/configs/number.vue +2 -2
  16. package/packages/FormMaking/custom/configs/table.vue +2 -2
  17. package/packages/FormMaking/custom/configs/{table_h5.vue → tableH5.vue} +2 -2
  18. package/packages/FormMaking/custom/configs/tabs.vue +6 -6
  19. package/packages/FormMaking/custom/configs/textarea.vue +121 -19
  20. package/packages/FormMaking/custom/index.js +2 -4
  21. package/packages/FormMaking/custom/items/alliance.vue +30 -29
  22. package/packages/FormMaking/custom/items/blank_pro.vue +14 -0
  23. package/packages/FormMaking/custom/items/button.vue +1 -0
  24. package/packages/FormMaking/custom/items/cascader.vue +6 -2
  25. package/packages/FormMaking/custom/items/cell.vue +0 -2
  26. package/packages/FormMaking/custom/items/checkbox.vue +17 -7
  27. package/packages/FormMaking/custom/items/color.vue +1 -1
  28. package/packages/FormMaking/custom/items/date.vue +1 -1
  29. package/packages/FormMaking/custom/items/editor.vue +1 -1
  30. package/packages/FormMaking/custom/items/{grid.vue → grid_dev.vue} +16 -47
  31. package/packages/FormMaking/custom/items/grid_pro.vue +45 -0
  32. package/packages/FormMaking/custom/items/image.vue +0 -28
  33. package/packages/FormMaking/custom/items/input.vue +15 -9
  34. package/packages/FormMaking/custom/items/number.vue +4 -4
  35. package/packages/FormMaking/custom/items/radio.vue +17 -7
  36. package/packages/FormMaking/custom/items/rate.vue +1 -1
  37. package/packages/FormMaking/custom/items/select.vue +12 -6
  38. package/packages/FormMaking/custom/items/slider.vue +1 -1
  39. package/packages/FormMaking/custom/items/switch.vue +1 -1
  40. package/packages/FormMaking/custom/items/{table_h5.vue → tableH5_dev.vue} +44 -49
  41. package/packages/FormMaking/custom/items/tableH5_pro.vue +113 -0
  42. package/packages/FormMaking/custom/items/{table.vue → table_dev.vue} +21 -41
  43. package/packages/FormMaking/custom/items/table_pro.vue +114 -0
  44. package/packages/FormMaking/custom/items/tabs_dev.vue +101 -0
  45. package/packages/FormMaking/custom/items/tabs_pro.vue +50 -0
  46. package/packages/FormMaking/custom/items/text.vue +1 -1
  47. package/packages/FormMaking/custom/items/textarea.vue +4 -13
  48. package/packages/FormMaking/custom/items/time.vue +3 -3
  49. package/packages/FormMaking/custom/items/upload.vue +15 -14
  50. package/packages/FormMaking/custom/mixins/index.js +23 -1
  51. package/packages/FormMaking/custom/register.js +22 -11
  52. package/packages/FormMaking/index.vue +11 -7
  53. package/packages/FormMaking/styles/index.scss +235 -221
  54. package/packages/FormMaking/util/generateCode.js +3 -3
  55. package/packages/FormMaking/util/index.js +33 -23
  56. package/packages/FormMaking/custom/items/tabs.vue +0 -145
  57. /package/packages/FormMaking/custom/items/{blank.vue → blank_dev.vue} +0 -0
@@ -0,0 +1,101 @@
1
+ <template>
2
+ <el-tabs
3
+ v-model="widget.options.defaultValue"
4
+ :type="widget.options.type"
5
+ :tab-position="widget.options.tabPosition"
6
+ >
7
+ <el-tab-pane
8
+ v-for="(column, columnIndex) in widget.options.columns"
9
+ :key="`tabs_${columnIndex}`"
10
+ :label="column.label"
11
+ :name="column.value"
12
+ >
13
+ <draggable
14
+ v-model="column.list"
15
+ :no-transition-on-drag="true"
16
+ v-bind="{
17
+ group: 'people',
18
+ ghostClass: 'ghost',
19
+ animation: 200,
20
+ handle: '.drag-widget'
21
+ }"
22
+ @add="handleWidgetAdd($event, widget, columnIndex)"
23
+ >
24
+ <transition-group name="fade" tag="div" class="widget-col-list">
25
+ <widget-form-item
26
+ v-for="(element, elementIndex) in column.list.filter(item => {
27
+ return item.key;
28
+ })"
29
+ :key="element.key"
30
+ :widget="element"
31
+ :widgetIndex="elementIndex"
32
+ :widgetArray="column.list"
33
+ :select.sync="selectWidget"
34
+ :config="config"
35
+ ></widget-form-item>
36
+ </transition-group>
37
+ </draggable>
38
+ </el-tab-pane>
39
+ </el-tabs>
40
+ </template>
41
+
42
+ <script>
43
+ import { itemsComponent } from "../mixins/index";
44
+ import Draggable from "vuedraggable";
45
+ import WidgetFormItem from "../../WidgetFormItem.vue";
46
+ export default {
47
+ components: { Draggable, WidgetFormItem },
48
+ mixins: [itemsComponent],
49
+ data() {
50
+ return {
51
+ selectWidget: {}
52
+ };
53
+ },
54
+ watch: {
55
+ select(val) {
56
+ this.selectWidget = val;
57
+ },
58
+ selectWidget: {
59
+ handler(val) {
60
+ this.$emit("update:select", val);
61
+ },
62
+ deep: true
63
+ }
64
+ },
65
+ methods: {
66
+ handleWidgetAdd($event, row, colIndex) {
67
+ const newIndex = $event.newIndex;
68
+ const oldIndex = $event.oldIndex;
69
+ const item = $event.item;
70
+ const newComponent = JSON.parse(
71
+ JSON.stringify(row.options.columns[colIndex].list[newIndex])
72
+ );
73
+
74
+ // 防止布局元素的嵌套拖拽
75
+ if (
76
+ item.className.indexOf("tabs") !== -1 ||
77
+ item.className.indexOf("alliance") !== -1
78
+ ) {
79
+ // 如果是列表中拖拽的元素需要还原到原来位置
80
+ item.tagName === "DIV" &&
81
+ this.widgetArray.splice(oldIndex, 0, newComponent);
82
+
83
+ row.options.columns[colIndex].list.splice(newIndex, 1);
84
+ return false;
85
+ }
86
+
87
+ const key =
88
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
89
+ if (!newComponent.model) {
90
+ newComponent.key = key;
91
+ newComponent.model = `${newComponent.type}_${key}`;
92
+ }
93
+ this.$set(row.options.columns[colIndex].list, newIndex, newComponent);
94
+
95
+ this.selectWidget = newComponent;
96
+ }
97
+ }
98
+ };
99
+ </script>
100
+
101
+ <style></style>
@@ -0,0 +1,50 @@
1
+ <template>
2
+ <el-tabs
3
+ v-model="widget.options.defaultValue"
4
+ :type="widget.options.type"
5
+ :tab-position="widget.options.tabPosition"
6
+ >
7
+ <el-tab-pane
8
+ v-for="(column, columnIndex) in widget.options.columns"
9
+ :key="`tabs_${columnIndex}`"
10
+ :label="column.label"
11
+ :name="column.value"
12
+ >
13
+ <generate-form-item
14
+ v-for="element in column.list"
15
+ :key="`tabs_${columnIndex}_${element.key}`"
16
+ :widget="element"
17
+ :models.sync="dataModel[column.value]"
18
+ :config="config"
19
+ :remote="remote"
20
+ :prop="
21
+ element.type === 'grid'
22
+ ? `${prop}.${column.value}`
23
+ : `${prop}.${column.value}.${element.model}`
24
+ "
25
+ :slotKeys="slotKeys"
26
+ :componentsData="componentsData"
27
+ >
28
+ <template v-for="name in slotKeys" :slot="name">
29
+ <slot :name="name" />
30
+ </template>
31
+ </generate-form-item>
32
+ </el-tab-pane>
33
+ </el-tabs>
34
+ </template>
35
+
36
+ <script>
37
+ import { itemsComponent } from "../mixins/index";
38
+ import GenerateFormItem from "../../GenerateFormItem.vue";
39
+ export default {
40
+ components: { GenerateFormItem },
41
+ mixins: [itemsComponent],
42
+ props: ["models", "remote", "prop", "slotKeys", "componentsData"],
43
+ data() {
44
+ return {};
45
+ },
46
+ methods: {}
47
+ };
48
+ </script>
49
+
50
+ <style></style>
@@ -4,7 +4,7 @@
4
4
  height: widget.options.height,
5
5
  textAlign: widget.options.textAlign
6
6
  }"
7
- v-html="widget.options.defaultValue"
7
+ v-html="dataModel"
8
8
  ></div>
9
9
  </template>
10
10
 
@@ -1,15 +1,13 @@
1
1
  <template>
2
2
  <el-input
3
3
  type="textarea"
4
- v-model="widget.options.defaultValue"
5
- :style="{ width: widget.options.width }"
4
+ v-model="dataModel"
6
5
  :disabled="widget.options.disabled"
7
6
  :placeholder="widget.options.placeholder"
7
+ :style="{ width: widget.options.width }"
8
8
  :maxlength="widget.options.maxlength"
9
- :show-word-limit="widget.options.showWordLimit"
10
9
  :clearable="widget.options.clearable"
11
- :suffix-icon="widget.options.suffixIcon"
12
- :prefix-icon="widget.options.prefixIcon"
10
+ :show-word-limit="widget.options.showWordLimit"
13
11
  :autosize="{
14
12
  minRows: widget.options.minRows,
15
13
  maxRows: widget.options.maxRows
@@ -17,14 +15,7 @@
17
15
  @input="handleEventAction(widget.events.onChange)"
18
16
  @focus="handleEventAction(widget.events.onFocus)"
19
17
  @blur="handleEventAction(widget.events.onBlur)"
20
- >
21
- <template v-if="widget.options.prepend" slot="prepend">
22
- <span v-html="widget.options.prepend"></span>
23
- </template>
24
- <template v-if="widget.options.append" slot="append">
25
- <span v-html="widget.options.append"></span>
26
- </template>
27
- </el-input>
18
+ ></el-input>
28
19
  </template>
29
20
 
30
21
  <script>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <el-time-picker
3
- v-model="widget.options.defaultValue"
3
+ v-model="dataModel"
4
4
  :style="{ width: widget.options.width }"
5
5
  :is-range="widget.options.isRange"
6
6
  :placeholder="widget.options.placeholder"
@@ -10,11 +10,11 @@
10
10
  :disabled="widget.options.disabled"
11
11
  :editable="widget.options.editable"
12
12
  :clearable="widget.options.clearable"
13
- :arrow-control="widget.options.arrowControl"
13
+ :arrowControl="widget.options.arrowControl"
14
+ :value-format="widget.options.format"
14
15
  :picker-options="{
15
16
  selectableRange: `${widget.options.pickerOptions.selectableRange[0]} - ${widget.options.pickerOptions.selectableRange[1]}`
16
17
  }"
17
- :value-format="widget.options.format"
18
18
  @change="handleEventAction(widget.events.onChange)"
19
19
  @focus="handleEventAction(widget.events.onFocus)"
20
20
  @blur="handleEventAction(widget.events.onBlur)"
@@ -1,17 +1,19 @@
1
1
  <template>
2
2
  <div>
3
3
  <el-upload
4
+ class="upload-demo"
4
5
  :action="uploadUrl"
5
6
  :headers="widget.options.remote ? widget.options.remoteFunc.headers : {}"
6
7
  :data="widget.options.remote ? widget.options.remoteFunc.params : {}"
7
8
  :multiple="widget.options.multiple"
8
9
  :limit="widget.options.length"
10
+ :width="widget.options.size.width"
11
+ :height="widget.options.size.height"
9
12
  :list-type="widget.options.listType"
10
- :file-list="widget.options.defaultValue"
11
13
  :drag="widget.options.drag"
12
14
  :disabled="widget.options.disabled"
15
+ :auto-upload="true"
13
16
  :on-change="handleAvatar"
14
- :on-success="handleSuccess"
15
17
  :on-error="handleAvatarError"
16
18
  :on-preview="
17
19
  file => handlePictureCardPreview(file, widget.options.listType)
@@ -19,27 +21,26 @@
19
21
  :on-remove="handleRemove"
20
22
  >
21
23
  <el-button
24
+ size="small"
25
+ type="primary"
26
+ :disabled="widget.options.disabled"
22
27
  v-if="
23
28
  ['default', 'picture'].includes(widget.options.listType) &&
24
29
  !widget.options.drag
25
30
  "
26
- size="small"
27
- type="primary"
28
- :disabled="widget.options.disabled"
29
31
  >点击上传</el-button
30
32
  >
31
33
  <i
34
+ slot="default"
35
+ class="el-icon-plus"
32
36
  v-if="
33
37
  widget.options.listType === 'picture-card' && !widget.options.drag
34
38
  "
35
- slot="default"
36
- class="el-icon-plus"
37
39
  ></i>
38
- <template v-if="widget.options.drag">
39
- <i class="el-icon-upload"></i>
40
- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
41
- </template>
42
-
40
+ <i class="el-icon-upload" v-if="widget.options.drag"></i>
41
+ <div class="el-upload__text" v-if="widget.options.drag">
42
+ 将文件拖到此处,或<em>点击上传</em>
43
+ </div>
43
44
  <div
44
45
  slot="tip"
45
46
  class="el-upload__tip"
@@ -87,10 +88,10 @@ export default {
87
88
  }
88
89
  },
89
90
  handleRemove(file, fileList) {
90
- this.widgetArray.options.defaultValue = fileList;
91
+ this.widget.options.defaultValue = fileList;
91
92
  },
92
93
  handleAvatar(res, file) {
93
- this.widgetArray.options.defaultValue = file;
94
+ this.widget.options.defaultValue = file;
94
95
  },
95
96
  handleAvatarError() {
96
97
  console.log("上传失败!");
@@ -33,7 +33,29 @@ export const configComponent = {
33
33
  };
34
34
 
35
35
  export const itemsComponent = {
36
- props: ["widget", "widgetArray", "select", "config"],
36
+ props: [
37
+ "value",
38
+ "widget",
39
+ "widgetArray",
40
+ "select",
41
+ "config",
42
+ ],
43
+ data() {
44
+ return {
45
+ dataModel: this.value
46
+ };
47
+ },
48
+ watch: {
49
+ value(val) {
50
+ this.dataModel = val;
51
+ },
52
+ dataModel: {
53
+ handler(val) {
54
+ this.$emit("update:value", val);
55
+ },
56
+ deep: true
57
+ }
58
+ },
37
59
  methods: {
38
60
  handleEventAction(key) {
39
61
  const eventScript = this.config.eventScript;
@@ -1,18 +1,29 @@
1
1
  //在此注册组件
2
- import { basicComponents, advanceComponents, layoutComponents } from "./index";
3
-
4
- const allComponents = [
5
- ...basicComponents,
6
- ...advanceComponents,
7
- ...layoutComponents
8
- ];
2
+ import { basicComponents, advanceComponents, layoutComponents } from "./config";
9
3
 
10
4
  let compsData = {};
11
- for (let i in allComponents) {
12
- const comp = {
13
- name: allComponents[i],
5
+ for (const config of basicComponents) {
6
+ compsData[config.type] = {
7
+ name: config.name,
8
+ type: config.type,
9
+ config: config,
10
+ content: null
11
+ };
12
+ }
13
+ for (const config of advanceComponents) {
14
+ compsData[config.type] = {
15
+ name: config.name,
16
+ type: config.type,
17
+ config: config,
18
+ content: null
19
+ };
20
+ }
21
+ for (const config of layoutComponents) {
22
+ compsData[config.type] = {
23
+ name: config.name,
24
+ type: config.type,
25
+ config: config,
14
26
  content: null
15
27
  };
16
- compsData[allComponents[i]] = comp;
17
28
  }
18
29
  export default compsData;
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="fm-container">
2
+ <div class="formMaking">
3
3
  <el-container
4
4
  v-if="Object.keys(widgetFormData.config).length"
5
5
  class="container-box"
@@ -52,7 +52,7 @@
52
52
  v-for="(item, index) in getAdvanceComponents"
53
53
  class="form-edit-widget-label"
54
54
  :class="{
55
- 'no-put': ['table', 'table_h5', 'tabs'].includes(
55
+ 'no-put': ['table', 'tableH5', 'tabs'].includes(
56
56
  item.type
57
57
  ),
58
58
  [item.type]: true
@@ -227,6 +227,7 @@
227
227
  :data="widgetFormSelect"
228
228
  :remoteApis="remoteApis"
229
229
  :config="widgetFormData.config"
230
+ @update="handleWidgetConfigUpdate"
230
231
  >
231
232
  </widget-config>
232
233
  <form-config
@@ -452,7 +453,7 @@ export default {
452
453
  },
453
454
  advanceFields: {
454
455
  type: Array,
455
- default: () => ["table", "table_h5", "tabs", "blank"]
456
+ default: () => ["table", "tableH5", "tabs", "blank"]
456
457
  },
457
458
  layoutFields: {
458
459
  type: Array,
@@ -629,7 +630,7 @@ export default {
629
630
  const key =
630
631
  Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
631
632
  let grid = this.getComponentsConfig("grid");
632
- grid.columns = [];
633
+ grid.options.columns = [];
633
634
  grid.key = key;
634
635
  grid.model = "grid_" + key;
635
636
 
@@ -666,7 +667,7 @@ export default {
666
667
  data.options.defaultValue = valueDom.innerText;
667
668
  data.key = colKey;
668
669
  data.model = "input_" + colKey;
669
- grid.columns.push({ span: span, list: [data] });
670
+ grid.options.columns.push({ span: span, list: [data] });
670
671
  } else {
671
672
  span = titleDom.colSpan * colSpan;
672
673
 
@@ -676,10 +677,10 @@ export default {
676
677
  data.options.hideLabel = true;
677
678
  data.key = colKey;
678
679
  data.model = "text_" + colKey;
679
- grid.columns.push({ span: span, list: [data] });
680
+ grid.options.columns.push({ span: span, list: [data] });
680
681
  }
681
682
  }
682
- if (grid.columns.length) {
683
+ if (grid.options.columns.length) {
683
684
  config.list.push(grid);
684
685
  } else {
685
686
  const data = this.getComponentsConfig("filler");
@@ -801,6 +802,9 @@ export default {
801
802
  },
802
803
  handleDataChange(field, value, data) {
803
804
  // console.log(field, value, data);
805
+ },
806
+ handleWidgetConfigUpdate(val) {
807
+ this.widgetFormSelect = Object.assign(this.widgetFormSelect, val);
804
808
  }
805
809
  }
806
810
  };