Commit fbd137a0 authored by 王康's avatar 王康

form

parent 7307c7e6
...@@ -9,11 +9,12 @@ ...@@ -9,11 +9,12 @@
<div> <div>
<!--表单部分--> <!--表单部分-->
<el-form ref="form" <el-form ref="form"
:label-position="formStyle && formStyle.formOptions && formStyle.formOptions.labelPosition || 'right'"
element-loading-text="加载中" element-loading-text="加载中"
:label-width="formStyle && formStyle.formOptions && formStyle.formOptions.labelWidth || '170px'"
:model="formModel" :model="formModel"
:rules="rules" :rules="rules"
label-width="200px" :style=" formStyle && formStyle.formOptions && formStyle.formOptions.style || {width:'80%',margin:'0 auto'}">
style="width:80%;margin:0 auto">
<el-form-item v-for="column in showUserColumns" <el-form-item v-for="column in showUserColumns"
v-show="!column.hide" v-show="!column.hide"
:key="column.id" :key="column.id"
...@@ -26,6 +27,7 @@ ...@@ -26,6 +27,7 @@
<!-- --> <!-- -->
<el-date-picker v-if="column.widgetType === 6 || column.type === 'datetime' || column.type === 'date'" <el-date-picker v-if="column.widgetType === 6 || column.type === 'datetime' || column.type === 'date'"
v-model="formModel[column.codeCamel]" v-model="formModel[column.codeCamel]"
:style="formStyle && formStyle.datePicker && formStyle.datePicker.style || {width: '65%'}"
:type="column.dateType || 'date'" :type="column.dateType || 'date'"
align="right" :disabled="column.disabled" align="right" :disabled="column.disabled"
@change="column.change && column.change($event)" @change="column.change && column.change($event)"
...@@ -36,8 +38,10 @@ ...@@ -36,8 +38,10 @@
<el-select v-else-if="column.widgetType === 2" <el-select v-else-if="column.widgetType === 2"
v-model="formModel[column.codeCamel]" v-model="formModel[column.codeCamel]"
@change="column.change && column.change($event)" @change="column.change && column.change($event)"
:style="formStyle && formStyle.select && formStyle.select.style || {width: '65%'}"
:multiple="column.multiple" :multiple="column.multiple"
:disabled="column.disabled" :disabled="column.disabled"
style="width: 50%"
clearable> clearable>
<el-option v-for="(item,key) in column.options" <el-option v-for="(item,key) in column.options"
:key="key" :key="key"
...@@ -47,10 +51,12 @@ ...@@ -47,10 +51,12 @@
</el-select> </el-select>
<!-- 4 文本域 --> <!-- 4 文本域 -->
<el-input v-else-if="column.widgetType === 4" <el-input v-else-if="column.widgetType === 4"
:style="formStyle && formStyle.textarea && formStyle.textarea.style || {width: '65%'}"
v-model="formModel[column.codeCamel]" v-model="formModel[column.codeCamel]"
type="textarea" :disabled="column.disabled" type="textarea" :disabled="column.disabled"
:autosize="{ minRows: 2, maxRows: 5}" :resize="formStyle && formStyle.textarea && formStyle.textarea.resize || 'vertical'"
:rows="2" @change="column.change && column.change($event)"> :autosize="formStyle && formStyle.textarea && formStyle.textarea.autosize || { minRows: 4, maxRows: 6}"
:rows="formStyle && formStyle.textarea && formStyle.textarea.rows || 4" @change="column.change && column.change($event)">
</el-input> </el-input>
<!-- 5 复选框 --> <!-- 5 复选框 -->
<el-checkbox v-else-if="column.widgetType === 3 && !column.options" <el-checkbox v-else-if="column.widgetType === 3 && !column.options"
...@@ -69,6 +75,7 @@ ...@@ -69,6 +75,7 @@
<quill-editor v-else-if="column.widgetType === 5" <quill-editor v-else-if="column.widgetType === 5"
ref="textEditor" :disabled="column.disabled" ref="textEditor" :disabled="column.disabled"
v-model="formModel[column.codeCamel]" v-model="formModel[column.codeCamel]"
:style="formStyle && formStyle.quillEdito && formStyle.quillEdito.style || {width:'65%'}"
:options="editorOption" :options="editorOption"
@blur="onEditorBlur($event)" @blur="onEditorBlur($event)"
@focus="onEditorFocus($event)" @focus="onEditorFocus($event)"
...@@ -97,6 +104,7 @@ ...@@ -97,6 +104,7 @@
</el-upload> </el-upload>
<!-- 1 普通input --> <!-- 1 普通input -->
<el-input v-else <el-input v-else
:style="formStyle && formStyle.input && formStyle.input.style || {width:'65%'}"
v-model="formModel[column.codeCamel]" v-model="formModel[column.codeCamel]"
:disabled="column.disabled" :disabled="column.disabled"
@change="column.change && column.change($event)"></el-input> @change="column.change && column.change($event)"></el-input>
...@@ -288,6 +296,26 @@ ...@@ -288,6 +296,26 @@
tips: { tips: {
type: Object, type: Object,
required: false required: false
},
/**
* 表单样式设置,格式为:
* formStyle: {
* formOptions: { labelWidth: '170px', labelPosition: 'right' },
* datePicker: { style: { width: '60%' }},
* input: { style: { width: '60%' }},
* select: { style: { width: '60%' }},
* textarea: {
* style: { width: '60%' },
* resize: 'none',
* autosize: { minRows: 3, maxRows: 5 },
* rows: 3
* },
* quillEdito: { style: { width: '65%' }}
* },
*/
formStyle: {
type: Object,
required: false
} }
}, },
data() { data() {
...@@ -461,9 +489,11 @@ ...@@ -461,9 +489,11 @@
}, },
// 判断是否一个对象的所有属性都为空 // 判断是否一个对象的所有属性都为空
isEmpty(obj) { isEmpty(obj) {
_.forEach(obj, function(val) { for (var key in obj) {
if (val) return false if (obj[key] && _.trim(obj[key])) {
}) return false
}
}
return true return true
}, },
validate() { validate() {
...@@ -523,7 +553,7 @@ ...@@ -523,7 +553,7 @@
self.showUserColumns = _.cloneDeep(self.columns) self.showUserColumns = _.cloneDeep(self.columns)
// console.log(504, self.showUserColumns) // console.log(504, self.showUserColumns)
// console.log(514, self.formModel) // console.log(514, self.formModel)
// 将字符串对象进行替换处理 // 处理传来的表单字段
_.each(self.showUserColumns, function(column, index) { _.each(self.showUserColumns, function(column, index) {
if (typeof column === 'string') { if (typeof column === 'string') {
// 生成一个新对象 // 生成一个新对象
...@@ -576,7 +606,9 @@ ...@@ -576,7 +606,9 @@
const self = this const self = this
console.log('点击了提交函数') console.log('点击了提交函数')
console.log(self.formModel) console.log(self.formModel)
self.formModel = processData ? processData(self.formModel, self.isCancel) : self.formModel // 对表单数据进行处理 // 对表单数据进行处理
self.formModel = processData ? processData(self.formModel, self.isCancel) : self.formModel
// 如果在processData中禁止提交了,显示提示信息
if (self.isCancel.cancelSubmit) { if (self.isCancel.cancelSubmit) {
console.log('取消提交') console.log('取消提交')
if (self.tips && !self.tips.hidde) { if (self.tips && !self.tips.hidde) {
...@@ -591,11 +623,18 @@ ...@@ -591,11 +623,18 @@
// var params = _.cloneDeep(self.formModel) // var params = _.cloneDeep(self.formModel)
// params = JSON.stringify(params) // params = JSON.stringify(params)
// console.log(self.formModel) // console.log(self.formModel)
// console.log(params) // 如果所有值都为空 禁止提交
// if (self.isEmpty(self.formModel)) return if (self.isEmpty(self.formModel)) {
self.$message({
message: '不能都为空',
type: 'error'
})
return
}
// 验证、提交
self.$refs.form.validate((valid) => { self.$refs.form.validate((valid) => {
if (valid) { if (valid) {
console.log('valid通过!') // console.log('valid通过!')
// 存在tableId 则修改信息 // 存在tableId 则修改信息
if (self.tableId) { if (self.tableId) {
request(self.schema.modelUnderscorePlural + '/' + self.tableId + '/edit', { request(self.schema.modelUnderscorePlural + '/' + self.tableId + '/edit', {
...@@ -605,10 +644,10 @@ ...@@ -605,10 +644,10 @@
transformRequest: transformRequest:
function(obj) { function(obj) {
var str = [] var str = []
// // 删除空值的属性 // 删除空值的属性
// obj = _.omitBy(obj, function(value) { obj = _.omitBy(obj, function(value) {
// return !value return value === null // 删除value=null的属性,剩下的返回给新对象
// }) })
for (var p in obj) { for (var p in obj) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p])) str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]))
} }
...@@ -616,7 +655,7 @@ ...@@ -616,7 +655,7 @@
} }
}).then(resp => { }).then(resp => {
console.log('修改成功') console.log('修改成功')
self.resetForm() // self.resetForm()
if (self.tips && !self.tips.hidde) { if (self.tips && !self.tips.hidde) {
self.$message({ self.$message({
message: self.tips.editSuccess.text, message: self.tips.editSuccess.text,
...@@ -637,6 +676,14 @@ ...@@ -637,6 +676,14 @@
} }
}) })
} else { // 不存在tableId 则创建一条数据 } else { // 不存在tableId 则创建一条数据
console.log(self.formModel)
// if (self.isEmpty(self.formModel)) {
// self.$message({
// message: '不能都为空',
// type: 'error'
// })
// return
// }
request(self.schema.modelUnderscorePlural + '/new', { request(self.schema.modelUnderscorePlural + '/new', {
method: 'post', method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' },
......
<template> <template>
<!----> <!--:refers="judgeRefers"-->
<div> <div>
<hm-complex-form :schema="schema['HmUser']" <hm-complex-form :schema="schema['HmUser']"
:columns="showUserColumns" :columns="showUserColumns"
:buttons="showUserButtons" :buttons="showUserButtons"
:layout="layout" :layout="layout"
:tips="tips" :tips="tips"
:tableId="tableId" :refers="userRefers">
:refers="judgeRefers">
</hm-complex-form> </hm-complex-form>
</div> </div>
</template> </template>
...@@ -56,8 +55,8 @@ ...@@ -56,8 +55,8 @@
// 3多选 不支持默认值 // 3多选 不支持默认值
{ name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'], change: this.inputChange }, { name: '部门ID', codeCamel: 'departmentId', widgetType: 3, options: ['美女', '帅哥'], change: this.inputChange },
// 4密码 // 4密码
// { codeCamel: 'password', widgetType: 4, change: this.inputChange }, { name: '密码', codeCamel: 'password', widgetType: 4, change: this.inputChange },
'password', // 'password',
// 6日期 // 6日期
{ name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime', { name: '新建时间', codeCamel: 'createTime', widgetType: 6, dateType: 'datetime',
dateFormate: 'yyyy-MM-dd HH:mm:ss', change: this.inputChange dateFormate: 'yyyy-MM-dd HH:mm:ss', change: this.inputChange
...@@ -73,18 +72,28 @@ ...@@ -73,18 +72,28 @@
// 8文件 // 8文件
{ name: '选择头像', codeCamel: 'avatar', widgetType: 8, url: '/api/upload' } // url是后台接口地址 { name: '选择头像', codeCamel: 'avatar', widgetType: 8, url: '/api/upload' } // url是后台接口地址
], ],
showUserColumnss: [ showUserColumns2: [
{ name: '模板名称', codeCamel: 'name', widgetType: 1, rule: { required: true, message: '模板名称不能为空', trigger: 'blur' }}, // 1普通input
{ name: '选择模板', codeCamel: 'template', widgetType: 8, url: '/zhangjiakouOA/upload_template', rule: { required: true, message: '模板不能为空', trigger: 'blur' }}, { name: '用户名称', codeCamel: 'username', widgetType: 1 },
{ name: '使用科室', codeCamel: 'departmentId', widgetType: 2, multiple: true, { name: '部门ID', codeCamel: 'departmentId', widgetType: 1 },
options: [ { name: '部门名称', codeCamel: 'departmentName', widgetType: 1 },
{ value: '104', label: 'APP技术支持' }, { name: '密码', codeCamel: 'password', widgetType: 1 },
{ value: '105', label: '党组成员' }, { name: '电话', codeCamel: 'mobile', widgetType: 1 },
{ value: '106', label: '专职检委' }, { name: '电子邮件', codeCamel: 'email', widgetType: 1 },
{ value: '107', label: '正处级检察员' } { name: '新建时间', codeCamel: 'createTime', widgetType: 1 },
], { name: '登陆id', codeCamel: 'loginid', widgetType: 1 }
rule: { required: true, message: '科室不能为空', trigger: 'blur' }}
], ],
userIncludes: {
'hm_user': {
includes: ['user_id']
}
},
// 主查外
userRefers: {
'cc_shift': {
includes: ['applicant_id']
}
},
// 要显示按钮 // 要显示按钮
showUserButtons: [ showUserButtons: [
{ text: '确定', type: 1, method: this.method1, beforeSubmit: this.processData }, { text: '确定', type: 1, method: this.method1, beforeSubmit: this.processData },
...@@ -94,7 +103,7 @@ ...@@ -94,7 +103,7 @@
], ],
// showUserButtons: [] // showUserButtons: []
// 布局方式 // 布局方式
layout: { left: 2, middle: 20, right: 2 }, layout: { left: 4, middle: 16, right: 4 },
// 自定义提示消息 // 自定义提示消息
tips: { tips: {
hidde: false, // 是否显示提示,默认false显示 hidde: false, // 是否显示提示,默认false显示
...@@ -104,6 +113,23 @@ ...@@ -104,6 +113,23 @@
editError: { text: '编辑失败' }, // 编辑失败的提示 editError: { text: '编辑失败' }, // 编辑失败的提示
otherError: { text: '填写有误,不可以提交' } // processData中取消提交的提示 otherError: { text: '填写有误,不可以提交' } // processData中取消提交的提示
}, },
// 各类型表单样式设置
formStyle: {
formOptions: {
labelWidth: '170px',
labelPosition: 'right'
},
datePicker: { style: { width: '60%' }},
input: { style: { width: '60%' }},
select: { style: { width: '60%' }},
textarea: {
style: { width: '60%' },
resize: 'none',
autosize: { minRows: 3, maxRows: 5 },
rows: 3
},
quillEdito: { style: { width: '65%' }}
},
// 'cc_option': { // 'cc_option': {
// includes: ['ccSubjectId'] // includes: ['ccSubjectId']
// } // }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment