Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
VueElementTemplate
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄瑜
VueElementTemplate
Commits
dff3abd8
Commit
dff3abd8
authored
Jun 03, 2018
by
王康
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
form
parent
3e415d21
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
171 additions
and
73 deletions
+171
-73
HmComplexForm.vue
src/views/haomo/components/forms/HmComplexForm.vue
+171
-73
No files found.
src/views/haomo/components/forms/HmComplexForm.vue
View file @
dff3abd8
...
...
@@ -13,7 +13,7 @@
element-loading-text=
"加载中"
:label-width=
"formStyle && formStyle.formOptions && formStyle.formOptions.labelWidth || '163px'"
:model=
"formModel"
:rules=
"myRules"
:rules=
"
rules ||
myRules"
:style=
" formStyle && formStyle.formOptions && formStyle.formOptions.style ||
{width:'100%'}">
<el-form-item
v-for=
"column in showUserColumns"
v-show=
"!column.hide"
...
...
@@ -27,6 +27,7 @@
v-model=
"formModel[column.codeCamel]"
:style=
"formStyle && formStyle.datePicker && formStyle.datePicker.style ||
{width: '70%'}"
:ref="column.ref || ''"
:placeholder="column.placeholder || ''"
:readonly="column.readonly"
:type="column.dateType || 'date'"
align="right" :disabled="column.disabled"
...
...
@@ -106,12 +107,14 @@
:name=
"column.param || 'picture'"
:action=
"column.url || '/api/upload'"
:on-remove=
"handleRemove"
class=
"a"
:limit=
"column.limit || 3"
:on-change=
"column.change || handleChange"
:file-list=
"fileList"
:file-list=
"
column.
fileList"
ref=
"upload"
:on-success=
"uploadSuccess"
>
<el-button
slot=
"trigger"
size=
"small"
type=
"primary"
@
click=
"currentFile = column.codeCamel"
:before-upload=
"column.beforeUpload || beforeUpload"
:on-success=
"(res, file, fileList)=>
{ return uploadSuccess(res, file, fileList, column.codeCamel, column.fileData)}">
<el-button
slot=
"trigger"
size=
"small"
type=
"primary"
class=
"b"
:disabled=
"column.disabled"
>
选取文件
</el-button>
</el-upload>
<!-- 8树形图 -->
...
...
@@ -120,12 +123,13 @@
<div
class=
"hm-form_form_div"
@
mouseenter=
"currentTree = column.codeCamel;treeComponent = column.ref"
v-else-if=
"column.widgetType === 9"
:style=
"formStyle && formStyle.elTree && formStyle.elTree.style ||
{width: '70%'}">
<el-tree
:data=
"column.options"
:ref=
"column.ref || 'tree'"
show-checkbox
:show-checkbox=
"column.checkBox || false"
node-key=
"id"
accordion
:accordion=
"column.accordion || false"
:draggable=
"column.draggable || false"
@
node-click=
"handleNodeChange"
@
check-change=
"handleCheckChange"
:default-checked-keys=
"
defaultKeys ||
formModel[column.codeCamel]"
:default-checked-keys=
"formModel[column.codeCamel]"
:props=
"column.props || treeProps"
>
</el-tree>
</div>
...
...
@@ -197,7 +201,8 @@
<
script
>
import
_
from
'lodash'
import
request
from
'@/utils/request'
import
{
paramEncode
}
from
'@/utils'
// import commonApi from '@/api/commonApi'
/**
* 毫末科技的表单组件.
*
...
...
@@ -230,7 +235,7 @@
* change属性可选,值为函数类型,表示input的change事件的执行方法,参数即为input输入内容
* default属性可选(复选框不支持),设置默认值,取值规范参考form/videoconferencing.vue
* hide属性可选,设置该表单字段是否显示,值为boolean
* ref属性树形控件必传,其他可选,用来获取当前表单dom节点
* ref属性树形控件
(值必须与codeCamel相同)
必传,其他可选,用来获取当前表单dom节点
* param属性可选,当表单类型为文件类型时,可传入param字段,值为后台规定必传参数,默认值为picture
* accept属性可选,当表单类型为文件类型时,可传入accept字段,限制限制上传文件类型,取值规范参考w3c
* fileData属性可选,当表单类型为文件类型时,取值为all(表示返回路径+文件名),取值为filePath(表示只返回路径),取值fileName(表示只返回文件名),如果不传,默认只返回路径
...
...
@@ -323,11 +328,12 @@
* 如果需要取消提交,将cancelSubmit值改为true
* type=2,执行组件的重置方法,如果用户传入了method,会作为重置方法的回调函数执行
* type=3,取消,直接执行用户传入的方法
* 如果要自定义按钮执行方法,可以不传type
* 示例:[
* {text: '确定', type: 1, method: method1, beforeSubmit: this.processData},
* {text: '重置', type: 2, method: method2},
* {text: '取消', type: 3, method: method3},
* {text: '
取消', type: 3,
method: method3}
* {text: '
自定义',
method: method3}
* ]
*/
buttons
:
{
...
...
@@ -400,14 +406,19 @@
* 函数对象 键为固定值,值为函数
* 属性beforeRender,编辑/修改数据时,请求数据后表单渲染前执行,可对数据进行处理,beforeRender函数接受两个参数
* 第一个参数为请求的数据,第二个参数为表单的绑定对象formModel,该函数需要将请求的数据绑定到formModel,并返回formModel
* 属性uploadFun,上传文件的回调函数,第一个参数为文件上传成功的返回值response,第二个参数为表单的绑定对象formModel
* 属性uploadFun,上传文件的回调函数,第一个参数为文件上传成功的返回值response,第二个参数为表单的绑定对象formModel,
* 第三个参数为当前删除的文件的详细信息
* 属性removeFun,删除文件的回调函数,第一个参数为当前删除文件的信息file,第二个参数为表单的绑定对象formModel
* 格式为: 属性beforeRender为固定键
* {
* beforeRender: function(resp.data, formModel) {
* do something
* return formModel
* },
* uploadFun: function(response, formModel) {
* uploadFun: function(response, formModel, file) {
* do something
* },
* removeFun: function(file, formModel) {
* do something
* }
* }
...
...
@@ -519,7 +530,6 @@
relateData
:
{},
// 中间表数据
Loading
:
true
,
// 加载等待
form
:
null
,
defaultKeys
:
[],
// 默认选中项
formModel
:
{},
// 双向绑定的数据对象
formModelDeal
:
{},
// 新建或编辑时,提交之前用户对formModel处理之后的数据对象。原因:以级联表单为例,
// 级联表单v-model绑定的是数组,而往数据库中存储的是数组中的某一个字符串,如果把v-model的值经processData处理之后(数组--->字符串),仍然用formModel接收,Vue监听会报错(expected Array,got string),此时需要用formModealDeal接收并提交,不改变表单绑定的数据对象formModel
...
...
@@ -645,73 +655,102 @@
}
},
created
()
{
// this.validate()
// this.$set(this.defaultKeys, 0, 161)
this
.
init
()
this
.
getData
()
this
.
getList
()
},
methods
:
{
// 文件上传前的函数
beforeUpload
(
file
)
{
// console.log('组件中的文件上传前', file)
// return false // 如果return false 则文件上传取消
},
// 删除服务器的文件
deleteUploadFile
(
filePath
)
{
// 删除服务器上封面图片的文件
request
(
'delete_file?file_path='
+
filePath
,
{
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
}
}).
then
(
resp
=>
{
console
.
log
(
'服务器上的文件删除了'
,
resp
)
})
},
// 上传文件成功的回调函数
uploadSuccess
(
response
,
file
,
fileList
)
{
uploadSuccess
(
response
,
file
,
fileList
,
code
,
fileData
)
{
const
self
=
this
console
.
log
(
'上传成功'
)
console
.
log
(
response
)
// console.log(self.currentFile)
console
.
log
(
file
)
console
.
log
(
'fileList'
,
fileList
)
console
.
log
(
'上传成功'
,
code
,
fileData
,
response
,
file
,
fileList
)
console
.
log
(
'formModel'
,
self
.
formModel
)
for
(
var
i
=
0
,
len
=
self
.
showUserColumns
.
length
;
i
<
len
;
i
++
)
{
// && !self.showUserColumns[i].edited
if
(
self
.
showUserColumns
[
i
].
widgetType
===
8
)
{
// self.$set(self.showUserColumns[i], 'edited', true)
for
(
var
key
in
self
.
formModel
)
{
if
(
key
===
self
.
currentFile
&&
self
.
showUserColumns
[
i
].
codeCamel
===
self
.
currentFile
)
{
// self.formModel[key] = response.message || response.visitName
// 张家口
// self.formModel[key] = response.visitName + response.fileName
// 通用
if
(
response
.
visitName
&&
response
.
saveName
)
{
// 如果fileData值为all 则存路径+名称
if
(
self
.
showUserColumns
[
i
].
fileData
===
'all'
)
{
// self.formModel[key] = response.visitName + '' + response.fileName + '_' + response.saveName
self
.
formModel
[
key
].
push
(
response
.
visitName
+
''
+
response
.
fileName
+
'_'
+
response
.
saveName
)
}
else
if
(
self
.
showUserColumns
[
i
].
fileData
===
'fileName'
)
{
// self.formModel[key] = response.saveName
self
.
formModel
[
key
].
push
(
response
.
saveName
)
}
else
{
// self.formModel[key] = response.visitName + '' + response.fileName
self
.
formModel
[
key
].
push
(
response
.
visitName
+
''
+
response
.
fileName
)
}
}
else
if
(
response
.
message
)
{
// self.formModel[key] = file.name + '_' + response.message
self
.
formModel
[
key
].
push
(
file
.
name
+
'_'
+
response
.
message
)
// self.formModel[key].push(file.name + '_' + response.message)
}
break
}
}
// break
if
(
response
.
visitName
&&
response
.
saveName
)
{
// 如果fileData值为all 则存路径+名称
if
(
fileData
===
'all'
)
{
self
.
formModel
[
code
].
push
(
response
.
visitName
+
''
+
response
.
fileName
+
'_'
+
response
.
saveName
)
}
else
if
(
fileData
===
'fileName'
)
{
self
.
formModel
[
code
].
push
(
response
.
saveName
)
}
else
{
self
.
formModel
[
code
].
push
(
response
.
visitName
+
''
+
response
.
fileName
)
}
}
else
if
(
response
.
message
)
{
self
.
formModel
[
code
].
push
(
response
.
message
+
'_'
+
file
.
name
)
}
// for (var i = 0, len = self.showUserColumns.length; i
<
len
;
i
++
)
{
// if (self.showUserColumns[i].widgetType === 8) {
// for (var key in self.formModel) {
// if (key === self.currentFile && self.showUserColumns[i].codeCamel === self.currentFile) {
// if (response.visitName && response.saveName) {
// // 如果fileData值为all 则存路径+名称
// if (self.showUserColumns[i].fileData === 'all') {
// self.formModel[key].push(response.visitName + '' + response.fileName + '_' + response.saveName)
// } else if (self.showUserColumns[i].fileData === 'fileName') {
// self.formModel[key].push(response.saveName)
// } else {
// self.formModel[key].push(response.visitName + '' + response.fileName)
// }
// } else if (response.message) {
// self.formModel[key].push(response.message + '_' + file.name)
// }
// break
// }
// }
// }
// }
// 执行用户的方法
if
(
self
.
funObject
&&
self
.
funObject
.
uploadFun
)
{
self
.
funObject
.
uploadFun
(
response
,
self
.
formModel
)
self
.
funObject
.
uploadFun
(
response
,
self
.
formModel
,
file
)
}
},
uploadClick1
()
{
console
.
log
(
'upload点解十家'
)
},
uploadClick
(
codeCamel
)
{
console
.
log
(
'触发了点击事件'
)
this
.
currentFile
=
codeCamel
console
.
log
(
this
.
currentFile
)
},
// 删除文件时的回调函数
handleRemove
(
file
,
fileList
)
{
const
self
=
this
console
.
log
(
'文件删除'
,
file
,
fileList
)
console
.
log
(
'删除前'
,
self
.
formModel
)
// var reg = new RegExp('^' + file.response.message + '$', 'g')
// console.log(reg)
if
(
file
.
response
.
message
)
{
console
.
log
(
'删除前'
,
self
.
currentFile
,
self
.
formModel
)
// 新建时删除服务器中的文件(通知通报的上传接口)
if
(
!
self
.
tableId
)
{
if
(
file
&&
file
.
response
&&
file
.
response
.
message
)
{
self
.
deleteUploadFile
(
file
.
response
.
message
)
}
else
if
(
file
&&
file
.
response
&&
file
.
response
.
fileName
)
{
// 新建时删除服务器中的文件(会议等其他上传接口)
const
path
=
file
.
response
.
visitName
+
file
.
response
.
fileName
self
.
deleteUploadFile
(
path
)
}
}
// 新建时 删除文件 (通知通报的上传接口)
if
(
file
.
response
&&
file
.
response
.
message
)
{
_
.
each
(
self
.
formModel
[
self
.
currentFile
],
function
(
item
,
index
)
{
if
(
_
.
endsWith
(
item
,
file
.
response
.
message
))
{
self
.
$delete
(
self
.
formModel
[
self
.
currentFile
],
index
)
}
})
}
else
if
(
file
.
response
.
fileName
)
{
}
else
if
(
file
.
response
&&
file
.
response
.
fileName
)
{
// (会议等其他上传接口)
_
.
each
(
self
.
formModel
[
self
.
currentFile
],
function
(
item
,
index
)
{
if
(
_
.
endsWith
(
item
,
file
.
response
.
fileName
))
{
self
.
$delete
(
self
.
formModel
[
self
.
currentFile
],
index
)
...
...
@@ -721,6 +760,19 @@
})
}
// 编辑时 删除文件
if
(
file
.
status
===
'success'
)
{
_
.
each
(
self
.
formModel
[
self
.
currentFile
],
function
(
item
,
index
)
{
if
(
_
.
endsWith
(
item
,
file
.
name
)
||
_
.
endsWith
(
item
,
file
.
url
))
{
self
.
$delete
(
self
.
formModel
[
self
.
currentFile
],
index
)
}
})
}
// 删除文件时 执行用户的方法
if
(
self
.
funObject
&&
self
.
funObject
.
removeFun
)
{
self
.
funObject
.
removeFun
(
file
,
self
.
formModel
)
}
// self.formModel[self.currentFile] = ''
console
.
log
(
'删除后'
,
self
.
formModel
)
},
...
...
@@ -730,14 +782,17 @@
// console.log('自己的')
},
// 树形选择器
handleCheckChange
(
data
,
checked
,
indeterminate
)
{
handleCheckChange
(
data
,
checked
,
indeterminate
,
aaa
)
{
const
self
=
this
console
.
log
(
'handleCheckChange函数'
)
// console.log(data)
// console.log(checked)
// console.log(indeterminate)
console
.
log
(
aaa
)
// console.log(this.$refs.tree[0].getCheckedNodes(true))
// console.log('当前选择的codecamel:', self.currentTree)
// console.log('当前选择的tree组件', self.treeComponent)
console
.
log
(
self
.
$refs
[
self
.
treeComponent
][
0
].
getCheckedKeys
(
true
))
// console.log('默认选中', self.defaultKeys)
// console.log(self.$refs[self.treeComponent][0].getCheckedKeys(true))
for
(
var
i
=
0
,
len
=
self
.
showUserColumns
.
length
;
i
<
len
;
i
++
)
{
// && !self.showUserColumns[i].edited
if
(
self
.
showUserColumns
[
i
].
widgetType
===
9
)
{
...
...
@@ -758,7 +813,7 @@
},
// 树形选择器
handleNodeChange
(
data
,
node
,
com
)
{
console
.
log
(
com
)
//
console.log(com)
},
treeCheck
(
data1
,
data2
)
{
console
.
log
(
this
.
currentTree
)
...
...
@@ -947,8 +1002,6 @@
// 如果只是单表
}
else
if
(
resp
.
data
.
length
>
0
)
{
console
.
log
(
'单表查询'
,
resp
.
data
)
self
.
defaultKeys
.
push
(
parseInt
(
resp
.
data
[
0
].
departmentId
))
console
.
log
(
self
.
defaultKeys
)
var
formArray
=
_
.
keys
(
self
.
formModel
)
// 提取formModel的属性到数组
if
(
resp
.
data
[
0
].
superior
&&
!
self
.
isEmptyObject
(
resp
.
data
[
0
].
superior
))
{
self
.
formModel
=
_
.
pick
(
resp
.
data
[
0
].
superior
,
formArray
)
// 根据数组中的属性提取出data中对应的数据
...
...
@@ -962,6 +1015,7 @@
// console.log('获取到数据', self.formModel)
// 处理返回来的数据
console
.
log
(
'getList处理多选前'
,
self
.
formModel
)
_
.
each
(
self
.
columns
,
function
(
item
,
index
)
{
// 下拉框多选时将字符串转为数组 column.widgetType === 3 && !column.options
if
(
item
.
widgetType
===
2
&&
item
.
multiple
===
true
)
{
...
...
@@ -992,11 +1046,25 @@
})
}
// 树形控件、文件上传,将请求回来的字符串放数组中
if
(
item
.
widgetType
===
9
||
item
.
widgetType
===
8
||
item
.
widgetType
===
10
)
{
if
(
item
.
widgetType
===
8
||
item
.
widgetType
===
10
)
{
_
.
forEach
(
self
.
formModel
,
function
(
value
,
key
)
{
if
(
item
.
codeCamel
===
key
)
{
// console.log(11111, self.formModel[key])
self
.
formModel
[
key
]
=
self
.
formModel
[
key
].
split
(
','
)
}
})
}
// 树形控件、文件上传,将请求回来的字符串放数组中
if
(
item
.
widgetType
===
9
)
{
_
.
forEach
(
self
.
formModel
,
function
(
value
,
key
)
{
if
(
item
.
codeCamel
===
key
)
{
// let str1 = ''
// let str2 = ''
// str1 = self.formModel[key].split(',')[0]
// str2 = self.formModel[key].split(',')[1]
// console.log(11111, self.formModel[key])
self
.
formModel
[
key
]
=
self
.
formModel
[
key
].
split
(
','
)
self
.
$refs
[
key
][
0
].
setCheckedKeys
(
self
.
formModel
[
key
])
}
})
}
...
...
@@ -1004,7 +1072,7 @@
}
console
.
log
(
'getList'
,
self
.
formModel
)
}).
catch
(
error
=>
{
console
.
log
(
error
)
console
.
error
(
error
)
})
},
// 初始化
...
...
@@ -1065,6 +1133,9 @@
*/
onSubmit
(
callback
,
processData
)
{
const
self
=
this
// 提交上传文件到服务器
// console.log(self.$refs.upload[0])
// self.$refs.upload[0].submit()
console
.
log
(
'点击了提交函数'
,
self
.
formModel
)
// 如果所有值都为空 禁止提交
if
(
self
.
isEmpty
(
self
.
formModel
))
{
...
...
@@ -1076,11 +1147,11 @@
}
// 提交之前对表单数据进行处理
self
.
formModelDeal
=
processData
?
processData
(
self
.
formModel
,
self
.
isCancel
)
:
self
.
formModel
console
.
log
(
'表单数据经过了处理'
,
self
.
formModel
)
console
.
log
(
'表单数据经过了处理'
,
self
.
formModel
Deal
)
// 如果在processData中禁止提交了,显示提示信息
if
(
self
.
isCancel
.
cancelSubmit
)
{
console
.
log
(
'取消提交'
)
if
(
self
.
tips
&&
!
self
.
isEmptyObject
(
self
.
tips
)
&&
!
self
.
tips
.
hidde
)
{
if
(
self
.
tips
&&
!
self
.
isEmptyObject
(
self
.
tips
)
&&
!
self
.
tips
.
hidde
&&
self
.
tips
.
otherError
&&
!
self
.
isEmptyObject
(
self
.
tips
.
otherError
)
)
{
self
.
$message
({
message
:
self
.
tips
.
otherError
.
text
,
type
:
'error'
...
...
@@ -1150,7 +1221,7 @@
callback
(
resp
.
data
,
self
.
formModelDeal
)
}
}).
catch
(
err
=>
{
console
.
log
(
err
)
console
.
error
(
err
)
if
(
self
.
tips
&&
!
self
.
isEmptyObject
(
self
.
tips
)
&&
!
self
.
tips
.
hidde
)
{
self
.
$message
({
message
:
self
.
tips
.
editError
.
text
,
...
...
@@ -1230,7 +1301,7 @@
// console.log('部分属性', self.partPropModel)
}
// 发送新建请求
console
.
log
(
'请求之前'
,
self
.
formModel
)
console
.
log
(
'请求之前'
,
self
.
formModel
Deal
)
request
(
self
.
schema
.
modelUnderscorePlural
+
'/new'
,
{
method
:
'post'
,
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded;charset=UTF-8'
},
...
...
@@ -1315,13 +1386,23 @@
const
url
=
_
.
keys
(
self
.
refers
)[
0
]
+
's'
+
'/create/batch'
// const string = self.transformRequest(self.foreignArray)
const
string
=
JSON
.
stringify
(
self
.
foreignArray
)
request
.
post
(
url
+
'?params='
+
string
,
{
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
}
request
(
url
,
{
method
:
'POST'
,
data
:
{
params
:
string
},
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded;charset=UTF-8'
},
transformRequest
:
paramEncode
}).
then
(
resp
=>
{
console
.
log
(
'批量创建成功'
,
resp
.
data
)
}).
catch
(
error
=>
{
console
.
log
(
'批量创建失败'
,
error
)
})
// request.post(url + '?params=' + string, {
// headers: { 'Content-Type': 'application/json;charset=UTF-8' }
// }).then(resp => {
// console.log('批量创建成功', resp.data)
// }).catch(error => {
// console.log('批量创建失败', error)
// })
}
// 提示信息
if
(
self
.
tips
&&
!
self
.
isEmptyObject
(
self
.
tips
)
&&
!
self
.
tips
.
hidde
)
{
...
...
@@ -1338,7 +1419,7 @@
self
.
currentFile
=
''
self
.
currentTree
=
''
}).
catch
(
err
=>
{
console
.
log
(
err
)
console
.
error
(
err
)
if
(
self
.
tips
&&
!
self
.
isEmptyObject
(
self
.
tips
)
&&
!
self
.
tips
.
hidde
)
{
self
.
$message
({
message
:
self
.
tips
.
newError
.
text
,
...
...
@@ -1389,6 +1470,23 @@
if
(
typeof
(
callback
)
===
'function'
)
{
callback
(
self
.
formModel
,
self
.
formModelDeal
)
}
console
.
log
(
self
.
formModel
,
self
.
formModelDeal
)
// console.log('id', self.tableId)
// 如果是新建时点了取消 删除服务器上的文件
if
(
!
self
.
tableId
)
{
_
.
each
(
self
.
showUserColumns
,
function
(
item
,
key
)
{
if
(
item
.
widgetType
===
8
)
{
_
.
each
(
self
.
formModel
[
item
.
codeCamel
],
function
(
str
,
k
)
{
const
i
=
str
.
indexOf
(
'_'
)
let
path
=
''
if
(
i
>
0
)
{
path
=
str
.
slice
(
0
,
i
)
self
.
deleteUploadFile
(
path
)
}
})
}
})
}
// self.close()
},
close
()
{
...
...
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