Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
ferry_web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jianan
ferry_web
Commits
a0427fb7
Unverified
Commit
a0427fb7
authored
Sep 27, 2020
by
lanyulei
Committed by
GitHub
Sep 27, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #31 from lanyulei/dev
表单设计器支持文件上传功能。
parents
af83992b
cfc4c4e4
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
185 additions
and
12 deletions
+185
-12
src/components/VueFormMaking/components/Container.vue
+1
-1
src/components/VueFormMaking/components/GenerateFormItem.vue
+15
-1
src/components/VueFormMaking/components/Upload/file.vue
+61
-0
src/components/VueFormMaking/components/WidgetConfig.vue
+74
-4
src/components/VueFormMaking/components/WidgetFormFields.vue
+10
-4
src/components/VueFormMaking/components/componentsConfig.js
+20
-0
src/components/VueFormMaking/lang/zh-CN.js
+3
-1
src/views/process/admin/template-manager.vue
+1
-1
No files found.
src/components/VueFormMaking/components/Container.vue
View file @
a0427fb7
...
@@ -95,7 +95,7 @@
...
@@ -95,7 +95,7 @@
<div
class=
"config-tab"
:class=
"{active: configTab=='form'}"
@
click=
"handleConfigSelect('form')"
>
{{ $t('fm.config.form.title') }}
</div>
<div
class=
"config-tab"
:class=
"{active: configTab=='form'}"
@
click=
"handleConfigSelect('form')"
>
{{ $t('fm.config.form.title') }}
</div>
</el-header>
</el-header>
<el-main
class=
"config-content"
>
<el-main
class=
"config-content"
>
<widget-config
v-show=
"configTab=='widget'"
:data=
"widgetFormSelect"
/>
<widget-config
v-
if=
"widgetFormSelect!==null"
v-
show=
"configTab=='widget'"
:data=
"widgetFormSelect"
/>
<form-config
v-show=
"configTab=='form'"
:data=
"widgetForm.config"
/>
<form-config
v-show=
"configTab=='form'"
:data=
"widgetForm.config"
/>
</el-main>
</el-main>
</el-container>
</el-container>
...
...
src/components/VueFormMaking/components/GenerateFormItem.vue
View file @
a0427fb7
...
@@ -17,6 +17,14 @@
...
@@ -17,6 +17,14 @@
<
template
v-else-if=
"widget.type === 'editor'"
>
<
template
v-else-if=
"widget.type === 'editor'"
>
<div
class=
"previewEditorDiv"
v-html=
"dataModel"
/>
<div
class=
"previewEditorDiv"
v-html=
"dataModel"
/>
</
template
>
</
template
>
<
template
v-if=
"widget.type=='file'"
>
<div
v-for=
"(uploadUrlItem, uploadUrlIndex) of dataModel"
:key=
"uploadUrlIndex"
>
<i
style=
"color: #909399;"
class=
"el-icon-document"
/>
<a
:href=
"uploadUrlItem.url"
target=
"_blank"
>
{{
uploadUrlItem
.
name
}}
</a>
</div>
</
template
>
<
template
v-else-if=
"widget.type=='imgupload'"
>
<
template
v-else-if=
"widget.type=='imgupload'"
>
<fm-upload
<fm-upload
v-model=
"dataModel"
v-model=
"dataModel"
...
@@ -246,6 +254,10 @@
...
@@ -246,6 +254,10 @@
/>
/>
</
template
>
</
template
>
<
template
v-if=
"widget.type=='file'"
>
<FileUpload
:element=
"widget"
/>
</
template
>
<
template
v-if=
"widget.type === 'editor'"
>
<
template
v-if=
"widget.type === 'editor'"
>
<vue-editor
<vue-editor
v-model=
"dataModel"
v-model=
"dataModel"
...
@@ -302,11 +314,13 @@
...
@@ -302,11 +314,13 @@
<
script
>
<
script
>
import
FmUpload
from
'./Upload'
import
FmUpload
from
'./Upload'
import
FileUpload
from
'./Upload/file'
export
default
{
export
default
{
name
:
'GenetateFormItem'
,
name
:
'GenetateFormItem'
,
components
:
{
components
:
{
FmUpload
FmUpload
,
FileUpload
},
},
/* eslint-disable */
/* eslint-disable */
props
:
[
'widget'
,
'models'
,
'rules'
,
'remote'
,
'data'
,
'disabled'
,
'preview'
,
'isLabel'
],
props
:
[
'widget'
,
'models'
,
'rules'
,
'remote'
,
'data'
,
'disabled'
,
'preview'
,
'isLabel'
],
...
...
src/components/VueFormMaking/components/Upload/file.vue
0 → 100644
View file @
a0427fb7
<
template
>
<div>
<el-upload
:action=
"element.options.action"
:on-success=
"handleSuccess"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"element.options.length"
:headers=
"element.options.headers"
:on-exceed=
"handleExceed"
:file-list=
"element.options.defaultValue"
:disabled=
"element.options.disabled"
:style=
"
{'width': element.options.width}"
>
<div
v-if=
"!preview"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
{{
element
.
options
.
tip
}}
</div>
</div>
</el-upload>
</div>
</
template
>
<
script
>
export
default
{
name
:
'FileUpload'
,
// eslint-disable-next-line vue/require-prop-types
props
:
[
'element'
,
'preview'
],
data
()
{
return
{
currentRemoveUid
:
''
}
},
methods
:
{
handleRemove
(
file
,
fileList
)
{
this
.
element
.
options
.
defaultValue
=
fileList
},
handlePreview
(
file
)
{
window
.
open
(
file
.
url
,
'_blank'
)
},
handleExceed
(
files
,
fileList
)
{
this
.
$message
.
warning
(
`最多允许上传
${
this
.
element
.
options
.
length
}
个文件。`
)
},
beforeRemove
(
file
,
fileList
)
{
this
.
currentRemoveUid
=
file
.
uid
return
this
.
$confirm
(
`确定要移除
${
file
.
name
}
?`
)
},
handleSuccess
(
response
,
file
,
fileList
)
{
this
.
element
.
options
.
defaultValue
.
push
({
name
:
file
.
name
,
url
:
response
.
data
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/components/VueFormMaking/components/WidgetConfig.vue
View file @
a0427fb7
...
@@ -36,6 +36,9 @@
...
@@ -36,6 +36,9 @@
v-model=
"data.options.labelWidthStatus"
v-model=
"data.options.labelWidthStatus"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
v-if=
"Object.keys(data.options).indexOf('tip')>=0"
:label=
"$t('fm.config.widget.tip')"
>
<el-input
v-model=
"data.options.tip"
/>
</el-form-item>
<!-- 兰玉磊结束添加 -->
<!-- 兰玉磊结束添加 -->
<!-- 高度 -->
<!-- 高度 -->
...
@@ -75,7 +78,7 @@
...
@@ -75,7 +78,7 @@
<el-input-number
v-model=
"data.options.step"
:min=
"0"
:max=
"100"
:step=
"1"
/>
<el-input-number
v-model=
"data.options.step"
:min=
"0"
:max=
"100"
:step=
"1"
/>
</el-form-item>
</el-form-item>
<!-- 是否多选 -->
<!-- 是否多选 -->
<el-form-item
v-if=
"data.type=='select'
|| data.type=='imgupload'
"
:label=
"$t('fm.config.widget.multiple')"
>
<el-form-item
v-if=
"data.type=='select'"
:label=
"$t('fm.config.widget.multiple')"
>
<el-switch
v-model=
"data.options.multiple"
@
change=
"handleSelectMuliple"
/>
<el-switch
v-model=
"data.options.multiple"
@
change=
"handleSelectMuliple"
/>
</el-form-item>
</el-form-item>
<!-- 是否可搜索 -->
<!-- 是否可搜索 -->
...
@@ -263,12 +266,12 @@
...
@@ -263,12 +266,12 @@
</el-form-item>
</el-form-item>
</
template
>
</
template
>
<!-- 图片上传 -->
<!-- 图片上传 -->
<
template
v-if=
"data.type=='imgupload'"
>
<
template
v-if=
"data.type=='imgupload'
|| data.type=='file'
"
>
<el-form-item
:label=
"$t('fm.config.widget.limit')"
>
<el-form-item
:label=
"$t('fm.config.widget.limit')"
>
<el-input
v-model
.
number=
"data.options.length"
type=
"number"
/>
<el-input
v-model
.
number=
"data.options.length"
type=
"number"
/>
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('fm.config.widget.isQiniu')"
>
<el-form-item
v-if=
"Object.keys(data.options).indexOf('isQiniu')>0"
:label=
"$t('fm.config.widget.isQiniu')"
>
<el-switch
v-model=
"data.options.isQiniu"
/>
<el-switch
v-model=
"data.options.isQiniu"
/>
</el-form-item>
</el-form-item>
<template
v-if=
"data.options.isQiniu"
>
<template
v-if=
"data.options.isQiniu"
>
...
@@ -283,6 +286,37 @@
...
@@ -283,6 +286,37 @@
<el-form-item
:label=
"$t('fm.config.widget.imageAction')"
:required=
"true"
>
<el-form-item
:label=
"$t('fm.config.widget.imageAction')"
:required=
"true"
>
<el-input
v-model=
"data.options.action"
/>
<el-input
v-model=
"data.options.action"
/>
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('fm.config.widget.setHeaders')"
>
<el-row
v-for=
"(uploadItem, uploadIndex) in headers"
:key=
"uploadIndex"
>
<el-col
:span=
"10"
>
<el-input
v-model=
"uploadItem.key"
type=
"textarea"
:rows=
"1"
placeholder=
"KEY"
/>
</el-col>
<el-col
:span=
"10"
style=
"float: left; margin-left: 10px"
>
<el-input
v-model=
"uploadItem.value"
type=
"textarea"
:rows=
"1"
placeholder=
"VALUE"
/>
</el-col>
<el-col
:span=
"2"
>
<el-button
type=
"danger"
icon=
"el-icon-delete"
plain
circle
style=
"padding: 4px; margin-left: 5px;"
@
click=
"handleDelHeader(uploadIndex)"
/>
</el-col>
</el-row>
<el-button
type=
"text"
style=
"font-size: 12px; color: #1890ff"
@
click=
"handleAddHeader"
>
添加
</el-button>
</el-form-item>
</
template
>
</
template
>
</template>
</template>
<!-- 多行文本 -->
<!-- 多行文本 -->
...
@@ -438,7 +472,8 @@ export default {
...
@@ -438,7 +472,8 @@ export default {
pattern
:
null
,
pattern
:
null
,
range
:
null
,
range
:
null
,
length
:
null
length
:
null
}
},
headers
:
[]
}
}
},
},
computed
:
{
computed
:
{
...
@@ -474,9 +509,44 @@ export default {
...
@@ -474,9 +509,44 @@ export default {
this
.
validateDataType
(
this
.
data
.
options
.
dataType
)
this
.
validateDataType
(
this
.
data
.
options
.
dataType
)
this
.
valiatePattern
(
this
.
data
.
options
.
pattern
)
this
.
valiatePattern
(
this
.
data
.
options
.
pattern
)
}
}
},
headers
:
{
handler
:
function
(
val
)
{
if
(
this
.
data
.
options
)
{
if
(
this
.
headers
.
length
>
0
)
{
this
.
data
.
options
.
headers
=
{}
for
(
var
headerValue
of
this
.
headers
)
{
this
.
data
.
options
.
headers
[
headerValue
.
key
]
=
headerValue
.
value
}
}
else
{
this
.
data
.
options
.
headers
=
{}
}
}
},
deep
:
true
}
}
},
},
created
()
{
this
.
handleInitHeaders
()
},
methods
:
{
methods
:
{
handleInitHeaders
()
{
for
(
var
key
in
this
.
data
.
options
.
headers
)
{
this
.
headers
.
push
({
key
:
key
,
value
:
this
.
data
.
options
.
headers
[
key
]
})
}
},
handleAddHeader
()
{
this
.
headers
.
push
({
key
:
''
,
value
:
''
})
},
handleDelHeader
(
index
)
{
this
.
headers
.
splice
(
index
,
1
)
},
handleOptionsRemove
(
index
)
{
handleOptionsRemove
(
index
)
{
if
(
this
.
data
.
type
===
'grid'
)
{
if
(
this
.
data
.
type
===
'grid'
)
{
this
.
data
.
columns
.
splice
(
index
,
1
)
this
.
data
.
columns
.
splice
(
index
,
1
)
...
...
src/components/VueFormMaking/components/WidgetFormFields.vue
View file @
a0427fb7
...
@@ -157,6 +157,10 @@
...
@@ -157,6 +157,10 @@
/>
/>
</
template
>
</
template
>
<
template
v-if=
"element.type=='file'"
>
<FileUpload
:element=
"element"
/>
</
template
>
<
template
v-if=
"element.type == 'cascader'"
>
<
template
v-if=
"element.type == 'cascader'"
>
<el-cascader
<el-cascader
v-model=
"element.options.defaultValue"
v-model=
"element.options.defaultValue"
...
@@ -214,12 +218,14 @@
...
@@ -214,12 +218,14 @@
<
script
>
<
script
>
import
FmUpload
from
'./Upload'
import
FmUpload
from
'./Upload'
import
FileUpload
from
'./Upload/file'
export
default
{
export
default
{
name
:
'WidgetFormFields'
,
name
:
'WidgetFormFields'
,
/* eslint-disable */
/* eslint-disable */
props
:
[
'element'
],
props
:
[
'element'
],
components
:
{
components
:
{
FmUpload
FmUpload
,
},
FileUpload
}
}
}
</
script
>
</
script
>
src/components/VueFormMaking/components/componentsConfig.js
View file @
a0427fb7
...
@@ -308,6 +308,26 @@ export const advanceComponents = [
...
@@ -308,6 +308,26 @@ export const advanceComponents = [
}
}
},
},
{
{
type
:
'file'
,
icon
:
'icon-wenjianshangchuan'
,
options
:
{
defaultValue
:
[],
width
:
''
,
tokenFunc
:
'funcGetToken'
,
token
:
''
,
domain
:
'http://pfp81ptt6.bkt.clouddn.com/'
,
disabled
:
false
,
length
:
9
,
headers
:
{},
// isQiniu: false,
tip
:
''
,
// 提示说明
action
:
'https://jsonplaceholder.typicode.com/photos/'
,
labelWidth
:
100
,
labelWidthDisabled
:
false
,
labelWidthStatus
:
true
}
},
{
type
:
'editor'
,
type
:
'editor'
,
icon
:
'icon-fuwenbenkuang'
,
icon
:
'icon-fuwenbenkuang'
,
options
:
{
options
:
{
...
...
src/components/VueFormMaking/lang/zh-CN.js
View file @
a0427fb7
...
@@ -24,7 +24,8 @@ export default {
...
@@ -24,7 +24,8 @@ export default {
subform
:
'子表单'
,
subform
:
'子表单'
,
grid
:
'栅格布局'
,
grid
:
'栅格布局'
,
tabs
:
'标签页'
,
tabs
:
'标签页'
,
divider
:
'分割线'
divider
:
'分割线'
,
file
:
'文件'
},
},
basic
:
{
basic
:
{
title
:
'基础字段'
title
:
'基础字段'
...
@@ -117,6 +118,7 @@ export default {
...
@@ -117,6 +118,7 @@ export default {
limit
:
'最大上传数'
,
limit
:
'最大上传数'
,
isQiniu
:
'使用七牛上传'
,
isQiniu
:
'使用七牛上传'
,
tokenFunc
:
'获取七牛Token方法'
,
tokenFunc
:
'获取七牛Token方法'
,
setHeaders
:
'设置上传的请求头部'
,
imageAction
:
'图片上传地址'
,
imageAction
:
'图片上传地址'
,
tip
:
'提示说明文字'
,
tip
:
'提示说明文字'
,
action
:
'上传地址'
,
action
:
'上传地址'
,
...
...
src/views/process/admin/template-manager.vue
View file @
a0427fb7
...
@@ -103,7 +103,7 @@
...
@@ -103,7 +103,7 @@
upload
upload
generate-code
generate-code
generate-json
generate-json
:advance-fields=
"['editor', '
cascader', 'imgupload
']"
:advance-fields=
"['editor', '
imgupload', 'file
']"
>
>
<
template
slot=
"action"
/>
<
template
slot=
"action"
/>
</fm-making-form>
</fm-making-form>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment