Commit 2d40e4bc1476552373fd6e71e7a348b2abfa394e

Authored by YunaiV
1 parent 4c56a07c

Form 动态表单的清理,去除无用的代码

yudao-admin-ui/src/views/bpm/form/build/CodeTypeDialog.vue deleted
1 -<template>  
2 - <div>  
3 - <el-dialog  
4 - v-bind="$attrs"  
5 - width="500px"  
6 - :close-on-click-modal="false"  
7 - :modal-append-to-body="false"  
8 - v-on="$listeners"  
9 - @open="onOpen"  
10 - @close="onClose"  
11 - >  
12 - <el-row :gutter="15">  
13 - <el-form  
14 - ref="elForm"  
15 - :model="formData"  
16 - :rules="rules"  
17 - size="medium"  
18 - label-width="100px"  
19 - >  
20 - <el-col :span="24">  
21 - <el-form-item label="生成类型" prop="type">  
22 - <el-radio-group v-model="formData.type">  
23 - <el-radio-button  
24 - v-for="(item, index) in typeOptions"  
25 - :key="index"  
26 - :label="item.value"  
27 - :disabled="item.disabled"  
28 - >  
29 - {{ item.label }}  
30 - </el-radio-button>  
31 - </el-radio-group>  
32 - </el-form-item>  
33 - <el-form-item v-if="showFileName" label="文件名" prop="fileName">  
34 - <el-input v-model="formData.fileName" placeholder="请输入文件名" clearable />  
35 - </el-form-item>  
36 - </el-col>  
37 - </el-form>  
38 - </el-row>  
39 -  
40 - <div slot="footer">  
41 - <el-button @click="close">  
42 - 取消  
43 - </el-button>  
44 - <el-button type="primary" @click="handelConfirm">  
45 - 确定  
46 - </el-button>  
47 - </div>  
48 - </el-dialog>  
49 - </div>  
50 -</template>  
51 -<script>  
52 -export default {  
53 - inheritAttrs: false,  
54 - props: ['showFileName'],  
55 - data() {  
56 - return {  
57 - formData: {  
58 - fileName: undefined,  
59 - type: 'file'  
60 - },  
61 - rules: {  
62 - fileName: [{  
63 - required: true,  
64 - message: '请输入文件名',  
65 - trigger: 'blur'  
66 - }],  
67 - type: [{  
68 - required: true,  
69 - message: '生成类型不能为空',  
70 - trigger: 'change'  
71 - }]  
72 - },  
73 - typeOptions: [{  
74 - label: '页面',  
75 - value: 'file'  
76 - }, {  
77 - label: '弹窗',  
78 - value: 'dialog'  
79 - }]  
80 - }  
81 - },  
82 - computed: {  
83 - },  
84 - watch: {},  
85 - mounted() {},  
86 - methods: {  
87 - onOpen() {  
88 - if (this.showFileName) {  
89 - this.formData.fileName = `${+new Date()}.vue`  
90 - }  
91 - },  
92 - onClose() {  
93 - },  
94 - close(e) {  
95 - this.$emit('update:visible', false)  
96 - },  
97 - handelConfirm() {  
98 - this.$refs.elForm.validate(valid => {  
99 - if (!valid) return  
100 - this.$emit('confirm', { ...this.formData })  
101 - this.close()  
102 - })  
103 - }  
104 - }  
105 -}  
106 -</script>  
yudao-admin-ui/src/views/bpm/form/build/RightPanel.vue
@@ -5,9 +5,9 @@ @@ -5,9 +5,9 @@
5 <el-tab-pane label="表单属性" name="form" /> 5 <el-tab-pane label="表单属性" name="form" />
6 </el-tabs> 6 </el-tabs>
7 <div class="field-box"> 7 <div class="field-box">
8 - <a class="document-link" target="_blank" :href="documentLink" title="查看组件文档">  
9 - <i class="el-icon-link" />  
10 - </a> 8 +<!-- <a class="document-link" target="_blank" :href="documentLink" title="查看组件文档">-->
  9 +<!-- <i class="el-icon-link" />-->
  10 +<!-- </a>-->
11 <el-scrollbar class="right-scrollbar"> 11 <el-scrollbar class="right-scrollbar">
12 <!-- 组件属性 --> 12 <!-- 组件属性 -->
13 <el-form v-show="currentTab==='field' && showField" size="small" label-width="90px"> 13 <el-form v-show="currentTab==='field' && showField" size="small" label-width="90px">
yudao-admin-ui/src/views/bpm/form/build/index.vue
@@ -2,28 +2,17 @@ @@ -2,28 +2,17 @@
2 <div class="container"> 2 <div class="container">
3 <div class="left-board"> 3 <div class="left-board">
4 <div class="logo-wrapper"> 4 <div class="logo-wrapper">
5 - <div class="logo">  
6 - <img :src="logo" alt="logo"> Form Generator  
7 - </div> 5 + <div class="logo">流程表单</div>
8 </div> 6 </div>
9 <el-scrollbar class="left-scrollbar"> 7 <el-scrollbar class="left-scrollbar">
  8 + <!-- 左边:表单项 -->
10 <div class="components-list"> 9 <div class="components-list">
11 <div class="components-title"> 10 <div class="components-title">
12 <svg-icon icon-class="component" />输入型组件 11 <svg-icon icon-class="component" />输入型组件
13 </div> 12 </div>
14 - <draggable  
15 - class="components-draggable"  
16 - :list="inputComponents"  
17 - :group="{ name: 'componentsGroup', pull: 'clone', put: false }"  
18 - :clone="cloneComponent"  
19 - draggable=".components-item"  
20 - :sort="false"  
21 - @end="onEnd"  
22 - >  
23 - <div  
24 - v-for="(element, index) in inputComponents" :key="index" class="components-item"  
25 - @click="addComponent(element)"  
26 - > 13 + <draggable class="components-draggable" :list="inputComponents" :group="{ name: 'componentsGroup', pull: 'clone', put: false }"
  14 + :clone="cloneComponent" draggable=".components-item" :sort="false" @end="onEnd">
  15 + <div v-for="(element, index) in inputComponents" :key="index" class="components-item" @click="addComponent(element)">
27 <div class="components-body"> 16 <div class="components-body">
28 <svg-icon :icon-class="element.tagIcon" /> 17 <svg-icon :icon-class="element.tagIcon" />
29 {{ element.label }} 18 {{ element.label }}
@@ -33,21 +22,9 @@ @@ -33,21 +22,9 @@
33 <div class="components-title"> 22 <div class="components-title">
34 <svg-icon icon-class="component" />选择型组件 23 <svg-icon icon-class="component" />选择型组件
35 </div> 24 </div>
36 - <draggable  
37 - class="components-draggable"  
38 - :list="selectComponents"  
39 - :group="{ name: 'componentsGroup', pull: 'clone', put: false }"  
40 - :clone="cloneComponent"  
41 - draggable=".components-item"  
42 - :sort="false"  
43 - @end="onEnd"  
44 - >  
45 - <div  
46 - v-for="(element, index) in selectComponents"  
47 - :key="index"  
48 - class="components-item"  
49 - @click="addComponent(element)"  
50 - > 25 + <draggable class="components-draggable" :list="selectComponents" :group="{ name: 'componentsGroup', pull: 'clone', put: false }"
  26 + :clone="cloneComponent" draggable=".components-item" :sort="false" @end="onEnd">
  27 + <div v-for="(element, index) in selectComponents" :key="index" class="components-item" @click="addComponent(element)">
51 <div class="components-body"> 28 <div class="components-body">
52 <svg-icon :icon-class="element.tagIcon" /> 29 <svg-icon :icon-class="element.tagIcon" />
53 {{ element.label }} 30 {{ element.label }}
@@ -57,22 +34,17 @@ @@ -57,22 +34,17 @@
57 <div class="components-title"> 34 <div class="components-title">
58 <svg-icon icon-class="component" /> 布局型组件 35 <svg-icon icon-class="component" /> 布局型组件
59 </div> 36 </div>
60 - <draggable  
61 - class="components-draggable" :list="layoutComponents"  
62 - :group="{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent"  
63 - draggable=".components-item" :sort="false" @end="onEnd"  
64 - >  
65 - <div  
66 - v-for="(element, index) in layoutComponents" :key="index" class="components-item"  
67 - @click="addComponent(element)"  
68 - > 37 + <draggable class="components-draggable" :list="layoutComponents" :group="{ name: 'componentsGroup', pull: 'clone', put: false }"
  38 + :clone="cloneComponent" draggable=".components-item" :sort="false" @end="onEnd">
  39 + <div v-for="(element, index) in layoutComponents" :key="index" class="components-item" @click="addComponent(element)">
69 <div class="components-body"> 40 <div class="components-body">
70 <svg-icon :icon-class="element.tagIcon" /> 41 <svg-icon :icon-class="element.tagIcon" />
71 {{ element.label }} 42 {{ element.label }}
72 </div> 43 </div>
73 </div> 44 </div>
74 </draggable> 45 </draggable>
75 - <!-- 动态表单 --> 46 +
  47 + <!-- 左边:动态表单 -->
76 <el-form ref="form" :model="form" :rules="rules" label-width="80px"> 48 <el-form ref="form" :model="form" :rules="rules" label-width="80px">
77 <el-form-item label="表单名" prop="name"> 49 <el-form-item label="表单名" prop="name">
78 <el-input v-model="form.name" placeholder="请输入表单名" /> 50 <el-input v-model="form.name" placeholder="请输入表单名" />
@@ -84,7 +56,7 @@ @@ -84,7 +56,7 @@
84 </el-radio-group> 56 </el-radio-group>
85 </el-form-item> 57 </el-form-item>
86 <el-form-item label="备注" prop="remark"> 58 <el-form-item label="备注" prop="remark">
87 - <el-input v-model="form.remark" placeholder="请输入备注" /> 59 + <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" />
88 </el-form-item> 60 </el-form-item>
89 </el-form> 61 </el-form>
90 </div> 62 </div>
@@ -92,38 +64,21 @@ @@ -92,38 +64,21 @@
92 </div> 64 </div>
93 65
94 <div class="center-board"> 66 <div class="center-board">
  67 + <!-- 上面:操作按钮 -->
95 <div class="action-bar"> 68 <div class="action-bar">
96 - <el-button icon="el-icon-download" type="text" @click="download">  
97 - 导出vue文件  
98 - </el-button>  
99 - <el-button class="copy-btn-main" icon="el-icon-document-copy" type="text" @click="copy">  
100 - 复制代码  
101 - </el-button>  
102 <el-button class="delete-btn" icon="el-icon-delete" type="text" @click="empty"> 69 <el-button class="delete-btn" icon="el-icon-delete" type="text" @click="empty">
103 清空 70 清空
104 </el-button> 71 </el-button>
105 </div> 72 </div>
  73 + <!-- 中间,表单 -->
106 <el-scrollbar class="center-scrollbar"> 74 <el-scrollbar class="center-scrollbar">
107 <el-row class="center-board-row" :gutter="formConf.gutter"> 75 <el-row class="center-board-row" :gutter="formConf.gutter">
108 - <el-form  
109 - :size="formConf.size"  
110 - :label-position="formConf.labelPosition"  
111 - :disabled="formConf.disabled"  
112 - :label-width="formConf.labelWidth + 'px'"  
113 - > 76 + <el-form :size="formConf.size" :label-position="formConf.labelPosition" :disabled="formConf.disabled"
  77 + :label-width="formConf.labelWidth + 'px'">
114 <draggable class="drawing-board" :list="drawingList" :animation="340" group="componentsGroup"> 78 <draggable class="drawing-board" :list="drawingList" :animation="340" group="componentsGroup">
115 - <draggable-item  
116 - v-for="(element, index) in drawingList"  
117 - :key="element.renderKey"  
118 - :drawing-list="drawingList"  
119 - :element="element"  
120 - :index="index"  
121 - :active-id="activeId"  
122 - :form-conf="formConf"  
123 - @activeItem="activeFormItem"  
124 - @copyItem="drawingItemCopy"  
125 - @deleteItem="drawingItemDelete"  
126 - /> 79 + <draggable-item v-for="(element, index) in drawingList" :key="element.renderKey" :drawing-list="drawingList"
  80 + :element="element" :index="index" :active-id="activeId" :form-conf="formConf"
  81 + @activeItem="activeFormItem" @copyItem="drawingItemCopy" @deleteItem="drawingItemDelete"/>
127 </draggable> 82 </draggable>
128 <div v-show="!drawingList.length" class="empty-info"> 83 <div v-show="!drawingList.length" class="empty-info">
129 从左侧拖入或点选组件进行表单设计 84 从左侧拖入或点选组件进行表单设计
@@ -133,28 +88,14 @@ @@ -133,28 +88,14 @@
133 </el-scrollbar> 88 </el-scrollbar>
134 </div> 89 </div>
135 90
136 - <right-panel  
137 - :active-data="activeData"  
138 - :form-conf="formConf"  
139 - :show-field="!!drawingList.length"  
140 - @tag-change="tagChange"  
141 - /> 91 + <!-- 右边:组件属性/表单属性 -->
  92 + <right-panel :active-data="activeData" :form-conf="formConf" :show-field="!!drawingList.length" @tag-change="tagChange"/>
142 93
143 - <code-type-dialog  
144 - :visible.sync="dialogVisible"  
145 - title="选择生成类型"  
146 - :show-file-name="showFileName"  
147 - @confirm="generate"  
148 - />  
149 - <input id="copyNode" type="hidden">  
150 </div> 94 </div>
151 </template> 95 </template>
152 96
153 <script> 97 <script>
154 import draggable from 'vuedraggable' 98 import draggable from 'vuedraggable'
155 -import { saveAs } from 'file-saver'  
156 -import beautifier from 'js-beautify'  
157 -import ClipboardJS from 'clipboard'  
158 import render from '@/utils/generator/render' 99 import render from '@/utils/generator/render'
159 import RightPanel from './RightPanel' 100 import RightPanel from './RightPanel'
160 import { 101 import {
@@ -163,17 +104,8 @@ import { @@ -163,17 +104,8 @@ import {
163 layoutComponents, 104 layoutComponents,
164 formConf 105 formConf
165 } from '@/utils/generator/config' 106 } from '@/utils/generator/config'
166 -import {  
167 - exportDefault, beautifierConf, isNumberStr, titleCase  
168 -} from '@/utils/index'  
169 -import {  
170 - makeUpHtml, vueTemplate, vueScript, cssStyle  
171 -} from '@/utils/generator/html'  
172 -import { makeUpJs } from '@/utils/generator/js'  
173 -import { makeUpCss } from '@/utils/generator/css'  
174 import drawingDefalut from '@/utils/generator/drawingDefalut' 107 import drawingDefalut from '@/utils/generator/drawingDefalut'
175 -import logo from '@/assets/logo/logo.png'  
176 -import CodeTypeDialog from './CodeTypeDialog' 108 +// import logo from '@/assets/logo/logo.png'
177 import DraggableItem from './DraggableItem' 109 import DraggableItem from './DraggableItem'
178 110
179 const emptyActiveData = { style: {}, autosize: {} } 111 const emptyActiveData = { style: {}, autosize: {} }
@@ -185,26 +117,24 @@ export default { @@ -185,26 +117,24 @@ export default {
185 draggable, 117 draggable,
186 render, 118 render,
187 RightPanel, 119 RightPanel,
188 - CodeTypeDialog,  
189 DraggableItem 120 DraggableItem
190 }, 121 },
191 data() { 122 data() {
192 return { 123 return {
193 - logo, 124 + // logo,
194 idGlobal: 100, 125 idGlobal: 100,
195 - formConf, // 126 + formConf, // 表单格式
196 inputComponents, 127 inputComponents,
197 selectComponents, 128 selectComponents,
198 layoutComponents, 129 layoutComponents,
199 labelWidth: 100, 130 labelWidth: 100,
200 - drawingList: drawingDefalut, 131 + drawingList: drawingDefalut, // 表单项的数组
201 drawingData: {}, 132 drawingData: {},
202 activeId: drawingDefalut[0].formId, 133 activeId: drawingDefalut[0].formId,
203 - drawerVisible: false,  
204 - formData: {},  
205 - dialogVisible: false,  
206 - generateConf: null,  
207 - showFileName: false, 134 + // drawerVisible: false,
  135 + // formData: {},
  136 + // dialogVisible: false,
  137 + // showFileName: false,
208 activeData: drawingDefalut[0], 138 activeData: drawingDefalut[0],
209 139
210 // 表单参数 140 // 表单参数
@@ -238,22 +168,6 @@ export default { @@ -238,22 +168,6 @@ export default {
238 immediate: true 168 immediate: true
239 } 169 }
240 }, 170 },
241 - mounted() {  
242 - const clipboard = new ClipboardJS('#copyNode', {  
243 - text: trigger => {  
244 - const codeStr = this.generateCode()  
245 - this.$notify({  
246 - title: '成功',  
247 - message: '代码已复制到剪切板,可粘贴。',  
248 - type: 'success'  
249 - })  
250 - return codeStr  
251 - }  
252 - })  
253 - clipboard.on('error', e => {  
254 - this.$message.error('代码复制失败')  
255 - })  
256 - },  
257 methods: { 171 methods: {
258 activeFormItem(element) { 172 activeFormItem(element) {
259 this.activeData = element 173 this.activeData = element
@@ -288,29 +202,13 @@ export default { @@ -288,29 +202,13 @@ export default {
288 } 202 }
289 return tempActiveData 203 return tempActiveData
290 }, 204 },
  205 + // 获得表单数据
291 AssembleFormData() { 206 AssembleFormData() {
292 this.formData = { 207 this.formData = {
293 fields: JSON.parse(JSON.stringify(this.drawingList)), 208 fields: JSON.parse(JSON.stringify(this.drawingList)),
294 ...this.formConf 209 ...this.formConf
295 } 210 }
296 }, 211 },
297 - generate(data) {  
298 - const func = this[`exec${titleCase(this.operationType)}`]  
299 - this.generateConf = data  
300 - func && func(data)  
301 - },  
302 - execRun(data) {  
303 - this.AssembleFormData()  
304 - this.drawerVisible = true  
305 - },  
306 - execDownload(data) {  
307 - const codeStr = this.generateCode()  
308 - const blob = new Blob([codeStr], { type: 'text/plain;charset=utf-8' })  
309 - saveAs(blob, data.fileName)  
310 - },  
311 - execCopy(data) {  
312 - document.getElementById('copyNode').click()  
313 - },  
314 empty() { 212 empty() {
315 this.$confirm('确定要清空所有组件吗?', '提示', { type: 'warning' }).then( 213 this.$confirm('确定要清空所有组件吗?', '提示', { type: 'warning' }).then(
316 () => { 214 () => {
@@ -346,29 +244,6 @@ export default { @@ -346,29 +244,6 @@ export default {
346 } 244 }
347 }) 245 })
348 }, 246 },
349 - generateCode() {  
350 - const { type } = this.generateConf  
351 - this.AssembleFormData()  
352 - const script = vueScript(makeUpJs(this.formData, type))  
353 - const html = vueTemplate(makeUpHtml(this.formData, type))  
354 - const css = cssStyle(makeUpCss(this.formData))  
355 - return beautifier.html(html + script + css, beautifierConf.html)  
356 - },  
357 - download() {  
358 - this.dialogVisible = true  
359 - this.showFileName = true  
360 - this.operationType = 'download'  
361 - },  
362 - run() {  
363 - this.dialogVisible = true  
364 - this.showFileName = false  
365 - this.operationType = 'run'  
366 - },  
367 - copy() {  
368 - this.dialogVisible = true  
369 - this.showFileName = false  
370 - this.operationType = 'copy'  
371 - },  
372 tagChange(newTag) { 247 tagChange(newTag) {
373 newTag = this.cloneComponent(newTag) 248 newTag = this.cloneComponent(newTag)
374 newTag.vModel = this.activeData.vModel 249 newTag.vModel = this.activeData.vModel
@@ -654,19 +529,6 @@ $lighterBlue: #409EFF; @@ -654,19 +529,6 @@ $lighterBlue: #409EFF;
654 font-weight: 600; 529 font-weight: 600;
655 font-size: 17px; 530 font-size: 17px;
656 white-space: nowrap; 531 white-space: nowrap;
657 - > img{  
658 - width: 30px;  
659 - height: 30px;  
660 - vertical-align: top;  
661 - }  
662 - .github{  
663 - display: inline-block;  
664 - vertical-align: sub;  
665 - margin-left: 15px;  
666 - > img{  
667 - height: 22px;  
668 - }  
669 - }  
670 } 532 }
671 533
672 .center-board-row { 534 .center-board-row {