tianheng-ui 0.1.0 → 0.1.2
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/README.md +9 -18
- package/lib/039af9192b9bb277966ceb4e4ce29c41.js +16 -0
- package/lib/2d84c80112a372bc149cad3464e90fa3.js +1617 -0
- package/lib/5977b934a4c6b480790864ea01303173.js +10834 -0
- package/lib/7745f3e776488705a38e62f85adad54d.js +16 -0
- package/lib/de8dee841ffdaaede3a2254deef30376.js +15395 -0
- package/lib/e78eab250e7f8ccac3d918dfdb06ca10.js +8904 -0
- package/lib/theme-chalk/fonts/PingFang.ttf +0 -0
- package/lib/theme-chalk/fonts/bpmn.eot +0 -0
- package/lib/theme-chalk/fonts/bpmn.svg +224 -0
- package/lib/theme-chalk/fonts/bpmn.ttf +0 -0
- package/lib/theme-chalk/fonts/bpmn.woff +0 -0
- package/lib/theme-chalk/fonts/bpmn.woff2 +0 -0
- package/lib/theme-chalk/fonts/fontawesome-webfont.eot +0 -0
- package/lib/theme-chalk/fonts/fontawesome-webfont.svg +2671 -0
- package/lib/theme-chalk/fonts/fontawesome-webfont.ttf +0 -0
- package/lib/theme-chalk/fonts/fontawesome-webfont.woff +0 -0
- package/lib/theme-chalk/fonts/fontawesome-webfont.woff2 +0 -0
- package/lib/theme-chalk/fonts/iconfont.eot +0 -0
- package/lib/theme-chalk/fonts/iconfont.svg +155 -0
- package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
- package/lib/theme-chalk/fonts/iconfont.woff +0 -0
- package/lib/theme-chalk/fonts/iconfont.woff2 +0 -0
- package/lib/theme-chalk/images/notData.png +0 -0
- package/lib/theme-chalk/index.scss +31 -0
- package/lib/theme-chalk/js/Log.js +99 -0
- package/lib/theme-chalk/js/axios.js +86 -0
- package/lib/theme-chalk/js/store/getters.js +5 -0
- package/lib/theme-chalk/js/store/modules/makingForm.js +21 -0
- package/lib/theme-chalk/js/store/store.js +26 -0
- package/lib/theme-chalk/styles/button.scss +501 -0
- package/lib/theme-chalk/styles/card.scss +29 -0
- package/lib/theme-chalk/styles/cell.scss +54 -0
- package/lib/theme-chalk/styles/codeEditor.scss +9 -0
- package/lib/theme-chalk/styles/col.scss +151 -0
- package/lib/theme-chalk/styles/dialog.scss +56 -0
- package/lib/theme-chalk/styles/empty.scss +22 -0
- package/lib/theme-chalk/styles/feature.scss +46 -0
- package/lib/theme-chalk/styles/font.css +7 -0
- package/lib/theme-chalk/styles/grid.scss +41 -0
- package/lib/theme-chalk/styles/icon.css +1944 -0
- package/lib/theme-chalk/styles/imagePreview.scss +113 -0
- package/lib/theme-chalk/styles/img.scss +35 -0
- package/lib/theme-chalk/styles/reset.scss +17 -0
- package/lib/theme-chalk/styles/root.css +64 -0
- package/lib/theme-chalk/styles/row.scss +23 -0
- package/lib/theme-chalk/styles/upload.scss +744 -0
- package/lib/theme-chalk/styles/variable.scss +80 -0
- package/lib/tianheng-ui.js +116 -0
- package/package.json +86 -48
- package/packages/Button/index.js +8 -0
- package/packages/Button/index.vue +80 -0
- package/packages/Card/index.js +8 -0
- package/packages/Card/index.vue +37 -0
- package/packages/Cell/index.js +8 -0
- package/packages/Cell/index.vue +68 -0
- package/packages/CodeEditor/index.js +8 -0
- package/packages/CodeEditor/index.vue +177 -0
- package/packages/Col/index.js +8 -0
- package/packages/Col/index.vue +43 -0
- package/packages/Dialog/index.js +8 -0
- package/packages/Dialog/index.vue +129 -0
- package/packages/Empty/index.js +8 -0
- package/packages/Empty/index.vue +35 -0
- package/packages/FormMaking/FormConfig.vue +60 -0
- package/packages/FormMaking/GenerateForm.vue +308 -0
- package/packages/FormMaking/GenerateFormItem.vue +887 -0
- package/packages/FormMaking/GenerateFormItemH5.vue +825 -0
- package/packages/FormMaking/Upload/index.vue +572 -0
- package/packages/FormMaking/WidgetConfig.vue +472 -0
- package/packages/FormMaking/WidgetForm.vue +159 -0
- package/packages/FormMaking/WidgetFormItem.vue +187 -0
- package/packages/FormMaking/custom/config.js +762 -0
- package/packages/FormMaking/custom/configs/alliance.vue +0 -0
- package/packages/FormMaking/custom/configs/blank.vue +54 -0
- package/packages/FormMaking/custom/configs/button.vue +172 -0
- package/packages/FormMaking/custom/configs/cascader.vue +175 -0
- package/packages/FormMaking/custom/configs/cell.vue +81 -0
- package/packages/FormMaking/custom/configs/checkbox.vue +234 -0
- package/packages/FormMaking/custom/configs/color.vue +137 -0
- package/packages/FormMaking/custom/configs/date.vue +158 -0
- package/packages/FormMaking/custom/configs/divider.vue +61 -0
- package/packages/FormMaking/custom/configs/editor.vue +71 -0
- package/packages/FormMaking/custom/configs/filler.vue +57 -0
- package/packages/FormMaking/custom/configs/grid.vue +103 -0
- package/packages/FormMaking/custom/configs/image.vue +138 -0
- package/packages/FormMaking/custom/configs/input.vue +176 -0
- package/packages/FormMaking/custom/configs/number.vue +140 -0
- package/packages/FormMaking/custom/configs/radio.vue +211 -0
- package/packages/FormMaking/custom/configs/rate.vue +109 -0
- package/packages/FormMaking/custom/configs/select.vue +305 -0
- package/packages/FormMaking/custom/configs/slider.vue +142 -0
- package/packages/FormMaking/custom/configs/switch.vue +130 -0
- package/packages/FormMaking/custom/configs/table.vue +105 -0
- package/packages/FormMaking/custom/configs/table_h5.vue +102 -0
- package/packages/FormMaking/custom/configs/tabs.vue +175 -0
- package/packages/FormMaking/custom/configs/text.vue +71 -0
- package/packages/FormMaking/custom/configs/textarea.vue +167 -0
- package/packages/FormMaking/custom/configs/time.vue +153 -0
- package/packages/FormMaking/custom/configs/upload.vue +155 -0
- package/packages/FormMaking/custom/index.js +32 -0
- package/packages/FormMaking/custom/items/alliance.vue +132 -0
- package/packages/FormMaking/custom/items/blank.vue +16 -0
- package/packages/FormMaking/custom/items/button.vue +27 -0
- package/packages/FormMaking/custom/items/cascader.vue +29 -0
- package/packages/FormMaking/custom/items/cell.vue +18 -0
- package/packages/FormMaking/custom/items/checkbox.vue +46 -0
- package/packages/FormMaking/custom/items/color.vue +19 -0
- package/packages/FormMaking/custom/items/date.vue +29 -0
- package/packages/FormMaking/custom/items/divider.vue +14 -0
- package/packages/FormMaking/custom/items/editor.vue +22 -0
- package/packages/FormMaking/custom/items/filler.vue +17 -0
- package/packages/FormMaking/custom/items/grid.vue +130 -0
- package/packages/FormMaking/custom/items/image.vue +70 -0
- package/packages/FormMaking/custom/items/input.vue +33 -0
- package/packages/FormMaking/custom/items/login.vue +13 -0
- package/packages/FormMaking/custom/items/number.vue +24 -0
- package/packages/FormMaking/custom/items/radio.vue +44 -0
- package/packages/FormMaking/custom/items/rate.vue +20 -0
- package/packages/FormMaking/custom/items/select.vue +32 -0
- package/packages/FormMaking/custom/items/slider.vue +34 -0
- package/packages/FormMaking/custom/items/switch.vue +22 -0
- package/packages/FormMaking/custom/items/table.vue +106 -0
- package/packages/FormMaking/custom/items/table_h5.vue +126 -0
- package/packages/FormMaking/custom/items/tabs.vue +145 -0
- package/packages/FormMaking/custom/items/text.vue +18 -0
- package/packages/FormMaking/custom/items/textarea.vue +37 -0
- package/packages/FormMaking/custom/items/time.vue +32 -0
- package/packages/FormMaking/custom/items/upload.vue +102 -0
- package/packages/FormMaking/custom/mixins/index.js +61 -0
- package/packages/FormMaking/custom/register.js +18 -0
- package/packages/FormMaking/generate.js +5 -0
- package/packages/FormMaking/iconfont/demo.css +539 -0
- package/packages/FormMaking/iconfont/demo_index.html +1159 -0
- package/packages/FormMaking/iconfont/iconfont.css +189 -0
- package/packages/FormMaking/iconfont/iconfont.eot +0 -0
- package/packages/FormMaking/iconfont/iconfont.js +1 -0
- package/packages/FormMaking/iconfont/iconfont.svg +155 -0
- package/packages/FormMaking/iconfont/iconfont.ttf +0 -0
- package/packages/FormMaking/iconfont/iconfont.woff +0 -0
- package/packages/FormMaking/iconfont/iconfont.woff2 +0 -0
- package/packages/FormMaking/index.js +33 -0
- package/packages/FormMaking/index.vue +807 -0
- package/packages/FormMaking/lang/en-US.js +187 -0
- package/packages/FormMaking/lang/zh-CN.js +187 -0
- package/packages/FormMaking/making.js +9 -0
- package/packages/FormMaking/styles/cover.scss +41 -0
- package/packages/FormMaking/styles/index.scss +785 -0
- package/packages/FormMaking/util/generateCode.js +163 -0
- package/packages/FormMaking/util/index.js +33 -0
- package/packages/FormMaking/util/request.js +28 -0
- package/packages/Grid/index.js +8 -0
- package/packages/Grid/index.vue +21 -0
- package/packages/GridItem/index.js +8 -0
- package/packages/GridItem/index.vue +69 -0
- package/packages/Icons/index.js +8 -0
- package/packages/Icons/index.vue +377 -0
- package/packages/Image/index.js +8 -0
- package/packages/Image/index.vue +146 -0
- package/packages/ImagePreview/index.js +8 -0
- package/packages/ImagePreview/index.vue +386 -0
- package/packages/Row/index.js +8 -0
- package/packages/Row/index.vue +33 -0
- package/packages/Table/action.js +8 -0
- package/packages/Table/action.vue +168 -0
- package/packages/Table/column.vue +63 -0
- package/packages/Table/index.js +8 -0
- package/packages/Table/index.vue +327 -0
- package/packages/Table/search.js +8 -0
- package/packages/Table/search.vue +163 -0
- package/packages/Table/tools.js +8 -0
- package/packages/Table/tools.vue +49 -0
- package/packages/TableMaking/custom/configs/fieldSearch.vue +17 -0
- package/packages/TableMaking/custom/configs/fieldTable.vue +15 -0
- package/packages/TableMaking/custom/items/search/index.vue +158 -0
- package/packages/TableMaking/custom/items/tools/index.vue +49 -0
- package/packages/TableMaking/generate.js +5 -0
- package/packages/TableMaking/generateTable.vue +560 -0
- package/packages/TableMaking/index.vue +229 -0
- package/packages/TableMaking/making.js +5 -0
- package/packages/TableMaking/util/index.js +433 -0
- package/packages/TableMaking/widgetConfig.vue +390 -0
- package/packages/TableMaking/widgetTable.vue +305 -0
- package/packages/Upload/ajax.js +85 -0
- package/packages/Upload/index.js +8 -0
- package/packages/Upload/index.vue +325 -0
- package/packages/Upload/upload-dragger.vue +70 -0
- package/packages/Upload/upload-list.vue +121 -0
- package/packages/Upload/upload.vue +193 -0
- package/packages/VueEditor/index.js +8 -0
- package/packages/VueEditor/index.vue +38 -0
- package/packages/Workflow/Log.js +99 -0
- package/packages/Workflow/designer/ProcessDesigner.vue +628 -0
- package/packages/Workflow/designer/index.js +7 -0
- package/packages/Workflow/designer/plugins/content-pad/contentPadProvider.js +390 -0
- package/packages/Workflow/designer/plugins/content-pad/index.js +6 -0
- package/packages/Workflow/designer/plugins/defaultEmpty.js +24 -0
- package/packages/Workflow/designer/plugins/descriptor/activitiDescriptor.json +1071 -0
- package/packages/Workflow/designer/plugins/descriptor/camundaDescriptor.json +1087 -0
- package/packages/Workflow/designer/plugins/descriptor/flowableDescriptor.json +1215 -0
- package/packages/Workflow/designer/plugins/extension-moddle/activiti/activitiExtension.js +74 -0
- package/packages/Workflow/designer/plugins/extension-moddle/activiti/index.js +9 -0
- package/packages/Workflow/designer/plugins/extension-moddle/camunda/extension.js +148 -0
- package/packages/Workflow/designer/plugins/extension-moddle/camunda/index.js +6 -0
- package/packages/Workflow/designer/plugins/extension-moddle/flowable/flowableExtension.js +74 -0
- package/packages/Workflow/designer/plugins/extension-moddle/flowable/index.js +9 -0
- package/packages/Workflow/designer/plugins/palette/CustomPalette.js +156 -0
- package/packages/Workflow/designer/plugins/palette/index.js +6 -0
- package/packages/Workflow/designer/plugins/palette/paletteProvider.js +160 -0
- package/packages/Workflow/designer/plugins/translate/customTranslate.js +41 -0
- package/packages/Workflow/designer/plugins/translate/zh.js +238 -0
- package/packages/Workflow/highlight/index.js +5 -0
- package/packages/Workflow/index.js +34 -0
- package/packages/Workflow/index.vue +399 -0
- package/packages/Workflow/modules/auto-place/CustomAutoPlace.js +81 -0
- package/packages/Workflow/modules/auto-place/index.js +6 -0
- package/packages/Workflow/modules/custom-renderer/CustomRenderer.js +17 -0
- package/packages/Workflow/modules/custom-renderer/index.js +6 -0
- package/packages/Workflow/modules/rules/CustomRules.js +16 -0
- package/packages/Workflow/modules/rules/index.js +6 -0
- package/packages/Workflow/palette/ProcessPalette.vue +106 -0
- package/packages/Workflow/palette/index.js +7 -0
- package/packages/Workflow/penal/PropertiesPanel.vue +245 -0
- package/packages/Workflow/penal/base/ElementBaseInfo.vue +80 -0
- package/packages/Workflow/penal/flow-condition/FlowCondition.vue +142 -0
- package/packages/Workflow/penal/form/ElementForm.vue +367 -0
- package/packages/Workflow/penal/index.js +7 -0
- package/packages/Workflow/penal/listeners/ElementListeners.vue +299 -0
- package/packages/Workflow/penal/listeners/UserTaskListeners.vue +322 -0
- package/packages/Workflow/penal/listeners/template.js +178 -0
- package/packages/Workflow/penal/listeners/utilSelf.js +64 -0
- package/packages/Workflow/penal/multi-instance/ElementMultiInstance.vue +200 -0
- package/packages/Workflow/penal/other/ElementOtherConfig.vue +59 -0
- package/packages/Workflow/penal/properties/ElementProperties.vue +135 -0
- package/packages/Workflow/penal/signal-message/SignalAndMessage.vue +104 -0
- package/packages/Workflow/penal/task/ElementTask.vue +73 -0
- package/packages/Workflow/penal/task/task-components/ReceiveTask.vue +97 -0
- package/packages/Workflow/penal/task/task-components/ScriptTask.vue +85 -0
- package/packages/Workflow/penal/task/task-components/UserTask.vue +535 -0
- package/packages/Workflow/theme/element-variables.scss +70 -0
- package/packages/Workflow/theme/index.scss +2 -0
- package/packages/Workflow/theme/process-designer.scss +157 -0
- package/packages/Workflow/theme/process-panel.scss +107 -0
- package/packages/Workflow/translations.js +25 -0
- package/packages/Workflow/utils.js +71 -0
- package/packages/index.js +160 -0
- package/babel.config.js +0 -15
- package/index.js +0 -11
- package/public/favicon.ico +0 -0
- package/public/index.html +0 -17
- package/src/App.vue +0 -28
- package/src/assets/logo.png +0 -0
- package/src/components/HelloWorld.vue +0 -58
- package/src/main.js +0 -8
@@ -0,0 +1,129 @@
|
|
1
|
+
<template>
|
2
|
+
<el-dialog
|
3
|
+
class="th-dialog"
|
4
|
+
:class="[customClass]"
|
5
|
+
:visible.sync="visible"
|
6
|
+
:width="width"
|
7
|
+
:top="top"
|
8
|
+
:fullscreen="dialogFullscreen"
|
9
|
+
:close-on-click-modal="closeOnClickModal"
|
10
|
+
:close-on-press-escape="closeOnPressEscape"
|
11
|
+
:show-close="false"
|
12
|
+
:modal="modal"
|
13
|
+
:modal-append-to-body="modalAppendToBody"
|
14
|
+
:append-to-body="appendToBody"
|
15
|
+
:before-close="handleBeforeClose"
|
16
|
+
:destroy-on-close="destroyOnClose"
|
17
|
+
>
|
18
|
+
<div slot="title" class="th-dialog__header">
|
19
|
+
<div class="th-dialog__title">{{ title }}</div>
|
20
|
+
<div class="th-dialog__action">
|
21
|
+
<i
|
22
|
+
v-if="showFullscreen"
|
23
|
+
class="th-dialog__action_item"
|
24
|
+
:class="fullscreenIcon"
|
25
|
+
@click="handleFullscreenChange"
|
26
|
+
></i>
|
27
|
+
<i
|
28
|
+
v-if="showClose"
|
29
|
+
class="th-dialog__action_item "
|
30
|
+
:class="closeIcon"
|
31
|
+
@click="handleBeforeClose"
|
32
|
+
></i>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<slot />
|
36
|
+
|
37
|
+
<template v-if="$slots.footer" slot="footer">
|
38
|
+
<slot name="footer" />
|
39
|
+
</template>
|
40
|
+
<template v-else-if="showFooter" slot="footer">
|
41
|
+
<el-button
|
42
|
+
v-if="showAffirm"
|
43
|
+
type="primary"
|
44
|
+
:loading="affirmLoading"
|
45
|
+
@click="handleAffirm"
|
46
|
+
>{{ affirmText }}</el-button
|
47
|
+
>
|
48
|
+
<el-button v-if="showCancel" @click="handleClose">{{
|
49
|
+
cancelText
|
50
|
+
}}</el-button>
|
51
|
+
</template>
|
52
|
+
</el-dialog>
|
53
|
+
</template>
|
54
|
+
|
55
|
+
<script>
|
56
|
+
export default {
|
57
|
+
name: "ThDialog",
|
58
|
+
model: {
|
59
|
+
prop: "visible",
|
60
|
+
event: "input"
|
61
|
+
},
|
62
|
+
props: {
|
63
|
+
visible: Boolean,
|
64
|
+
title: { type: String, default: "" },
|
65
|
+
width: { type: String, default: "800px" },
|
66
|
+
fullscreen: { type: Boolean, default: false },
|
67
|
+
top: { type: String, default: "15vh" },
|
68
|
+
modal: { type: Boolean, default: true },
|
69
|
+
modalAppendToBody: { type: Boolean, default: true },
|
70
|
+
appendToBody: { type: Boolean, default: false },
|
71
|
+
customClass: String,
|
72
|
+
closeOnClickModal: { type: Boolean, default: false },
|
73
|
+
closeOnPressEscape: { type: Boolean, default: false },
|
74
|
+
beforeClose: Function,
|
75
|
+
destroyOnClose: { type: Boolean, default: false },
|
76
|
+
|
77
|
+
showAffirm: { type: Boolean, default: true },
|
78
|
+
affirmLoading: Boolean,
|
79
|
+
affirmText: { type: String, default: "确 认" },
|
80
|
+
|
81
|
+
showCancel: { type: Boolean, default: true },
|
82
|
+
cancelText: { type: String, default: "取 消" },
|
83
|
+
|
84
|
+
showClose: { type: Boolean, default: true },
|
85
|
+
closeIcon: { type: String, default: "el-icon-close" },
|
86
|
+
|
87
|
+
showFullscreen: { type: Boolean, default: true },
|
88
|
+
fullscreenIcon: { type: String, default: "el-icon-full-screen" },
|
89
|
+
|
90
|
+
showFooter: { type: Boolean, default: true }
|
91
|
+
},
|
92
|
+
data() {
|
93
|
+
return {
|
94
|
+
formRules: {},
|
95
|
+
dialogFullscreen: this.fullscreen
|
96
|
+
};
|
97
|
+
},
|
98
|
+
watch: {
|
99
|
+
fullscreen(value) {
|
100
|
+
this.dialogFullscreen = value;
|
101
|
+
}
|
102
|
+
},
|
103
|
+
methods: {
|
104
|
+
handleClose() {
|
105
|
+
this.$emit("input", !this.visible);
|
106
|
+
this.$emit("on-close");
|
107
|
+
},
|
108
|
+
handleBeforeClose(done) {
|
109
|
+
if (this.beforeClose) {
|
110
|
+
const callback = () => {
|
111
|
+
this.handleClose();
|
112
|
+
};
|
113
|
+
this.beforeClose(callback);
|
114
|
+
} else {
|
115
|
+
this.handleClose();
|
116
|
+
}
|
117
|
+
},
|
118
|
+
handleAffirm() {
|
119
|
+
this.$emit("on-affirm");
|
120
|
+
},
|
121
|
+
handleFullscreenChange() {
|
122
|
+
this.dialogFullscreen = !this.dialogFullscreen;
|
123
|
+
this.$nextTick(() => {
|
124
|
+
this.$emit("on-fullscreen");
|
125
|
+
});
|
126
|
+
}
|
127
|
+
}
|
128
|
+
};
|
129
|
+
</script>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="th-empty">
|
3
|
+
<img
|
4
|
+
v-if="image"
|
5
|
+
class="th-empty-img"
|
6
|
+
:style="imageStyle"
|
7
|
+
:src="image"
|
8
|
+
alt=""
|
9
|
+
/>
|
10
|
+
<slot v-else name="image" />
|
11
|
+
<slot v-if="$slots.description" name="description" />
|
12
|
+
<p v-else class="th-empty-description">{{ description }}</p>
|
13
|
+
<div v-if="$slots.default" class="th-empty-bottom">
|
14
|
+
<slot />
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</template>
|
18
|
+
|
19
|
+
<script>
|
20
|
+
export default {
|
21
|
+
name: "ThEmpty",
|
22
|
+
props: {
|
23
|
+
image: { type: String, default: "" },
|
24
|
+
imageSize: { type: Number, default: 300 },
|
25
|
+
description: { type: String, default: "暂无数据" }
|
26
|
+
},
|
27
|
+
computed: {
|
28
|
+
imageStyle() {
|
29
|
+
return {
|
30
|
+
width: this.imageSize ? `${this.imageSize}px` : ""
|
31
|
+
};
|
32
|
+
}
|
33
|
+
}
|
34
|
+
};
|
35
|
+
</script>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="form-config-container">
|
3
|
+
<el-form label-position="top">
|
4
|
+
<el-form-item label="UI">
|
5
|
+
<el-radio-group v-model="data.ui">
|
6
|
+
<el-radio-button label="element">Element</el-radio-button>
|
7
|
+
<el-radio-button label="vant" disabled>Vant</el-radio-button>
|
8
|
+
</el-radio-group>
|
9
|
+
</el-form-item>
|
10
|
+
|
11
|
+
<el-form-item label="表单标题" required>
|
12
|
+
<el-input
|
13
|
+
v-model="data.title"
|
14
|
+
placeholder="请输入"
|
15
|
+
clearable
|
16
|
+
></el-input>
|
17
|
+
</el-form-item>
|
18
|
+
|
19
|
+
<el-form-item label="表单宽度">
|
20
|
+
<el-input v-model="data.width"></el-input>
|
21
|
+
</el-form-item>
|
22
|
+
|
23
|
+
<el-form-item label="表单标签宽度">
|
24
|
+
<el-input-number
|
25
|
+
v-model="data.labelWidth"
|
26
|
+
:min="0"
|
27
|
+
:max="200"
|
28
|
+
:step="10"
|
29
|
+
></el-input-number>
|
30
|
+
</el-form-item>
|
31
|
+
|
32
|
+
<el-form-item label="标签对齐方式">
|
33
|
+
<el-radio-group v-model="data.labelPosition">
|
34
|
+
<el-radio-button label="left">左对齐</el-radio-button>
|
35
|
+
<el-radio-button label="right">右对齐</el-radio-button>
|
36
|
+
<el-radio-button label="top">顶部对齐</el-radio-button>
|
37
|
+
</el-radio-group>
|
38
|
+
</el-form-item>
|
39
|
+
|
40
|
+
<el-form-item label="组件尺寸">
|
41
|
+
<el-radio-group v-model="data.size">
|
42
|
+
<el-radio-button label="medium">medium</el-radio-button>
|
43
|
+
<el-radio-button label="small">small</el-radio-button>
|
44
|
+
<el-radio-button label="mini">mini</el-radio-button>
|
45
|
+
</el-radio-group>
|
46
|
+
</el-form-item>
|
47
|
+
|
48
|
+
<el-form-item label="操作属性">
|
49
|
+
<el-checkbox v-model="data.disabled">禁用 </el-checkbox>
|
50
|
+
<el-checkbox v-model="data.hideLabel">隐藏标签 </el-checkbox>
|
51
|
+
</el-form-item>
|
52
|
+
</el-form>
|
53
|
+
</div>
|
54
|
+
</template>
|
55
|
+
|
56
|
+
<script>
|
57
|
+
export default {
|
58
|
+
props: ["data"]
|
59
|
+
};
|
60
|
+
</script>
|
@@ -0,0 +1,308 @@
|
|
1
|
+
<template>
|
2
|
+
<div v-if="formJson.config">
|
3
|
+
<el-form
|
4
|
+
class="generateForm"
|
5
|
+
:class="{ 'form-hideLabel': formJson.config.hideLabel }"
|
6
|
+
:style="{ width: formWidth }"
|
7
|
+
:label-suffix="formJson.config.labelSuffix"
|
8
|
+
:size="formJson.config.size"
|
9
|
+
:model="models"
|
10
|
+
:label-position="formJson.config.labelPosition"
|
11
|
+
:label-width="formJson.config.labelWidth + 'px'"
|
12
|
+
ref="generateForm"
|
13
|
+
>
|
14
|
+
<genetate-form-item
|
15
|
+
v-for="item in formJson.list"
|
16
|
+
:key="item.key"
|
17
|
+
:models.sync="models"
|
18
|
+
:widget="item"
|
19
|
+
:slotKeys="slotKeys"
|
20
|
+
:remote="remoteData"
|
21
|
+
:config="formJson.config"
|
22
|
+
:prop="item.type === 'grid' ? '' : item.model"
|
23
|
+
:componentsData="componentsData"
|
24
|
+
@input-change="onInputChange"
|
25
|
+
>
|
26
|
+
<template v-for="name in slotKeys" :slot="name">
|
27
|
+
<slot :name="name" />
|
28
|
+
</template>
|
29
|
+
</genetate-form-item>
|
30
|
+
</el-form>
|
31
|
+
<!-- <van-form
|
32
|
+
v-else
|
33
|
+
class="generateForm"
|
34
|
+
:class="{ 'form-hideLabel': formJson.config.hideLabel }"
|
35
|
+
:style="{ width: formWidth }"
|
36
|
+
style="margin: 0 auto;"
|
37
|
+
:label-align="formJson.config.labelPosition"
|
38
|
+
:label-width="formJson.config.labelWidth + 'px'"
|
39
|
+
ref="generateForm"
|
40
|
+
>
|
41
|
+
<genetate-form-item-h5
|
42
|
+
v-for="item in formJson.list"
|
43
|
+
:key="item.key"
|
44
|
+
:models.sync="models"
|
45
|
+
:widget="item"
|
46
|
+
:slotKeys="slotKeys"
|
47
|
+
:remote="remoteData"
|
48
|
+
:config="formJson.config"
|
49
|
+
:prop="item.type === 'grid' ? '' : item.model"
|
50
|
+
:componentsData="componentsData"
|
51
|
+
@input-change="onInputChange"
|
52
|
+
>
|
53
|
+
<template v-for="name in slotKeys" :slot="name">
|
54
|
+
<slot :name="name" />
|
55
|
+
</template>
|
56
|
+
</genetate-form-item-h5>
|
57
|
+
</van-form> -->
|
58
|
+
</div>
|
59
|
+
</template>
|
60
|
+
|
61
|
+
<script>
|
62
|
+
import * as Axios from "lib/theme-chalk/js/axios";
|
63
|
+
import GenetateFormItem from "./GenerateFormItem";
|
64
|
+
|
65
|
+
export default {
|
66
|
+
name: "thFormGenerate",
|
67
|
+
components: { GenetateFormItem },
|
68
|
+
props: {
|
69
|
+
oauthConfig: {
|
70
|
+
type: Object,
|
71
|
+
default: () => {
|
72
|
+
return {};
|
73
|
+
}
|
74
|
+
},
|
75
|
+
data: {
|
76
|
+
type: Object,
|
77
|
+
default: () => {
|
78
|
+
return {};
|
79
|
+
}
|
80
|
+
},
|
81
|
+
remoteData: {
|
82
|
+
type: Object,
|
83
|
+
default: () => {
|
84
|
+
return {};
|
85
|
+
}
|
86
|
+
},
|
87
|
+
value: {
|
88
|
+
type: Object,
|
89
|
+
default: () => {
|
90
|
+
return {};
|
91
|
+
}
|
92
|
+
},
|
93
|
+
slotKeys: {
|
94
|
+
type: Array,
|
95
|
+
default: () => {
|
96
|
+
return [];
|
97
|
+
}
|
98
|
+
},
|
99
|
+
client: String
|
100
|
+
},
|
101
|
+
data() {
|
102
|
+
return {
|
103
|
+
formJson: this.data,
|
104
|
+
models: {},
|
105
|
+
componentsData: [],
|
106
|
+
axios: null
|
107
|
+
};
|
108
|
+
},
|
109
|
+
computed: {
|
110
|
+
formWidth() {
|
111
|
+
if (this.formJson.config.width) return this.formJson.config.width;
|
112
|
+
if (this.client === "mobile") return "375px";
|
113
|
+
|
114
|
+
return "";
|
115
|
+
}
|
116
|
+
},
|
117
|
+
watch: {
|
118
|
+
data(val) {
|
119
|
+
this.setJSON(val);
|
120
|
+
},
|
121
|
+
formJson: {
|
122
|
+
handler(val) {
|
123
|
+
this.$emit("update:data", val);
|
124
|
+
},
|
125
|
+
deep: true
|
126
|
+
},
|
127
|
+
value: {
|
128
|
+
deep: true,
|
129
|
+
handler(val) {
|
130
|
+
this.models = { ...this.models, ...val };
|
131
|
+
}
|
132
|
+
}
|
133
|
+
},
|
134
|
+
created() {
|
135
|
+
this.axios = Axios.init(this.oauthConfig);
|
136
|
+
this.generateModle(this.formJson.list);
|
137
|
+
},
|
138
|
+
mounted() {},
|
139
|
+
methods: {
|
140
|
+
generateModle(genList, modelObj) {
|
141
|
+
if (!genList) return;
|
142
|
+
genList.map(item => {
|
143
|
+
if (item.type === "grid") {
|
144
|
+
item.columns.forEach(item => {
|
145
|
+
this.generateModle(item.list, modelObj);
|
146
|
+
});
|
147
|
+
} else if (item.type === "tabs") {
|
148
|
+
if (modelObj) {
|
149
|
+
this.$set(modelObj, item.model, {});
|
150
|
+
item.tabs.forEach(item2 => {
|
151
|
+
this.$set(modelObj[item.model], item2.value, {});
|
152
|
+
this.generateModle(item2.list, modelObj[item.model][item2.value]);
|
153
|
+
});
|
154
|
+
} else {
|
155
|
+
this.$set(this.models, item.model, {});
|
156
|
+
item.tabs.forEach(item2 => {
|
157
|
+
this.$set(this.models[item.model], item2.value, {});
|
158
|
+
this.generateModle(
|
159
|
+
item2.list,
|
160
|
+
this.models[item.model][item2.value]
|
161
|
+
);
|
162
|
+
});
|
163
|
+
}
|
164
|
+
} else if (item.type === "table" || item.type === "table_h5") {
|
165
|
+
if (modelObj) {
|
166
|
+
this.$set(
|
167
|
+
modelObj,
|
168
|
+
item.model,
|
169
|
+
JSON.parse(item.options.defaultValue || "[]")
|
170
|
+
);
|
171
|
+
this.generateModle(item.list, modelObj[item.model]);
|
172
|
+
} else {
|
173
|
+
this.$set(
|
174
|
+
this.models,
|
175
|
+
item.model,
|
176
|
+
JSON.parse(item.options.defaultValue || "[]")
|
177
|
+
);
|
178
|
+
this.generateModle(item.list, this.models[item.model]);
|
179
|
+
}
|
180
|
+
} else if (modelObj) {
|
181
|
+
if (!modelObj[item.model]) {
|
182
|
+
this.$set(modelObj, item.model, item.options.defaultValue);
|
183
|
+
}
|
184
|
+
|
185
|
+
this.generateRules(item);
|
186
|
+
} else {
|
187
|
+
if (this.value && Object.keys(this.value).indexOf(item.model) >= 0) {
|
188
|
+
this.$set(this.models, item.model, this.value[item.model]);
|
189
|
+
} else {
|
190
|
+
if (item.type === "blank") {
|
191
|
+
this.$set(
|
192
|
+
this.models,
|
193
|
+
item.model,
|
194
|
+
item.options.defaultType === "String"
|
195
|
+
? ""
|
196
|
+
: item.options.defaultType === "Object"
|
197
|
+
? {}
|
198
|
+
: []
|
199
|
+
);
|
200
|
+
} else {
|
201
|
+
this.$set(
|
202
|
+
this.models,
|
203
|
+
item.model,
|
204
|
+
JSON.parse(JSON.stringify(item.options.defaultValue))
|
205
|
+
);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
this.generateRules(item);
|
210
|
+
}
|
211
|
+
});
|
212
|
+
},
|
213
|
+
generateRules(item) {
|
214
|
+
if (!item.rules) item.rules = [];
|
215
|
+
item.rules.forEach(rule => {
|
216
|
+
if (rule.pattern) {
|
217
|
+
rule.pattern = new RegExp(rule.pattern);
|
218
|
+
}
|
219
|
+
});
|
220
|
+
this.hendleRemoteData(item);
|
221
|
+
},
|
222
|
+
hendleRemoteData(item) {
|
223
|
+
if (!item.options.remote) return;
|
224
|
+
if (item.type === "upload" || item.type === "button") return;
|
225
|
+
|
226
|
+
const remoteFunc = item.options.remoteFunc;
|
227
|
+
this.axios({
|
228
|
+
url: remoteFunc.api,
|
229
|
+
method: remoteFunc.method,
|
230
|
+
headers: remoteFunc.headers,
|
231
|
+
data: { ...remoteFunc.params }
|
232
|
+
}).then(res => {
|
233
|
+
const resultData = res.data.records;
|
234
|
+
item.options.remoteOptions = resultData.map(element => {
|
235
|
+
return {
|
236
|
+
value: element[item.options.props.value || "value"],
|
237
|
+
label: element[item.options.props.label || "label"],
|
238
|
+
children: element[item.options.props.children || "children"]
|
239
|
+
};
|
240
|
+
});
|
241
|
+
});
|
242
|
+
},
|
243
|
+
getData() {
|
244
|
+
return new Promise((resolve, reject) => {
|
245
|
+
this.$refs.generateForm.validate(valid => {
|
246
|
+
if (valid) {
|
247
|
+
resolve(this.models);
|
248
|
+
} else {
|
249
|
+
reject(new Error("表单数据校验失败").message);
|
250
|
+
}
|
251
|
+
});
|
252
|
+
});
|
253
|
+
},
|
254
|
+
reset() {
|
255
|
+
this.$refs.generateForm.resetFields();
|
256
|
+
},
|
257
|
+
onInputChange(value, field) {
|
258
|
+
this.$emit("on-change", field, value, this.models);
|
259
|
+
},
|
260
|
+
setJSON(json) {
|
261
|
+
this.formJson = json;
|
262
|
+
this.generateModle(this.formJson.list);
|
263
|
+
}
|
264
|
+
}
|
265
|
+
};
|
266
|
+
</script>
|
267
|
+
|
268
|
+
<style lang="less" scoped>
|
269
|
+
.generateForm {
|
270
|
+
margin: 0 auto;
|
271
|
+
/deep/ .widget-form-list-table > .el-form-item__content {
|
272
|
+
.el-form-item__label {
|
273
|
+
display: none;
|
274
|
+
}
|
275
|
+
.el-form-item__content {
|
276
|
+
margin-left: 0 !important;
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
.form-hideLabel {
|
281
|
+
.el-form-item__label {
|
282
|
+
display: none;
|
283
|
+
}
|
284
|
+
.el-form-item__content {
|
285
|
+
margin-left: 0 !important;
|
286
|
+
}
|
287
|
+
}
|
288
|
+
|
289
|
+
.widget-form-list-filler {
|
290
|
+
margin-bottom: 0 !important;
|
291
|
+
}
|
292
|
+
.widget-form-list-image {
|
293
|
+
margin-bottom: 0 !important;
|
294
|
+
}
|
295
|
+
|
296
|
+
.tableH5 {
|
297
|
+
// 操作按钮布局
|
298
|
+
.tableH5-item > div {
|
299
|
+
display: flex;
|
300
|
+
|
301
|
+
.actions {
|
302
|
+
align-items: center;
|
303
|
+
justify-content: right;
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}
|
307
|
+
}
|
308
|
+
</style>
|