这次芜杂的表单工作写了将近两天了
最终要呈现的是这样子的表
首先您想要一个页面展示,在这个项目里的逻辑是去到系统设置里的菜单管理去设置添加页面。不再赘述。
第二在相关目录下创建两个新的文件,在这里我们创立了一个farmers.vue,以及farmers-add-or-update.vue
里面的内容大体是杨哥写的,而我则是做一些细微的改动.
写到以上页面后我的步骤以后我还有一些细节没有做好
第一个就是我需要有选择框的时候都是写死的数据,而实际上,户主编号是和农户类型挂钩的
而农户类型的选择框是写在【字典管理】里的,关于里面怎么去写,参考已写的内容.
我原来写的代码
<el-col :span="10">
<el-form-item label="文化程度" prop="farmerEducation">
<el-select
v-model="dataForm.farmerEducation"
placeholder="请选择文化程度"
>
<el-option label="小学" value="a"></el-option>
<el-option label="初中" vaule="b"></el-option>
<el-option label="高中" value="c"></el-option>
<el-option label="大专" value="d"></el-option>
<el-option label="本科" value="e"></el-option>
<el-option label="硕士" value="f"></el-option>
<el-option label="博士" value="g"></el-option>
</el-select>
<!-- <el-input v-model="dataForm.farmerEducation" :disabled="disabled" placeholder="文化程度"></el-input> -->
</el-form-item>
</el-col>
但是现在不要这么写,先去字典管理里去添加.
添加好了以后直接在farmer add-or-update中添加
添加这个即可
<el-dict
code="EDUCATION_TYPE"
v-model="dataForm.farmerEducation"
></el-dict>
<el-form-item label="文化程度" prop="farmerEducation">
<el-dict
code="EDUCATION_TYPE"
v-model="dataForm.farmerEducation"
></el-dict>
<!-- <el-select
v-model="dataForm.farmerEducation"
placeholder="请选择文化程度"
>
<el-option label="小学" value="a"></el-option>
<el-option label="初中" vaule="b"></el-option>
<el-option label="高中" value="c"></el-option>
<el-option label="大专" value="d"></el-option>
<el-option label="本科" value="e"></el-option>
<el-option label="硕士" value="f"></el-option>
<el-option label="博士" value="g"></el-option>
</el-select> -->
<!-- <el-input v-model="dataForm.farmerEducation" :disabled="disabled" placeholder="文化程度"></el-input> -->
</el-form-item>
然后回到farmer.vue在文化程度这一栏添加以下<template>标签里的内容即可.
<template slot-scope="scope">
<span>{{
transDict('EDUCATION_TYPE', scope.row.farmerEducation)
}}</span>
</template>
<el-table-column
prop="farmerEducation"
header-align="center"
align="center"
label="文化程度"
>
<template slot-scope="scope">
<span>{{
transDict('EDUCATION_TYPE', scope.row.farmerEducation)
}}</span>
</template>
</el-table-column>
然后再到后来图片中需要添加正则或者一些表格内只能出现字符或者数字的情况,您就要写正则.
代码如下:
<template>
<el-dialog
:title="!dataForm.id ? '新增' : !disabled ? '修改' : '查看'"
:close-on-click-modal="false"
:visible.sync="visible"
>
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
label-width="150px"
>
<el-row>
<el-col :span="10">
<el-form-item label="户主编号" prop="farmerNo">
<el-input
v-model="dataForm.farmerNo"
onkeyup="this.value = this.value.replace(/[^\d.]/g,'');"
:disabled="disabled"
:maxlength="15"
placeholder="户主编号"
></el-input> </el-form-item
></el-col>
<el-col :span="10"
><el-form-item label="农户类型" prop="farmerType">
<el-dict code="FARMER_TYPE" v-model="dataForm.farmerType"></el-dict>
<!-- <el-input v-model="dataForm.farmerType" :disabled="disabled" placeholder="农户类型"></el-input> -->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item
label="户主名称"
prop="farmerName"
:rules="[
{ required: true, message: '请输入用户名', trigger: 'blur' },
]"
>
<el-input
v-model="dataForm.farmerName"
:disabled="disabled"
:maxlength="10"
@keyup.native="
dataForm.farmerName = dataForm.farmerName.replace(
/[^\u4E00-\u9FA5]/g,
''
)
"
placeholder="户主名称"
></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="年份">
<el-date-picker
type="year"
placeholder="选择日期"
v-model="dataForm.year"
style="width: 70%"
value-format="yyyy"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10"
><el-form-item label="年龄" prop="farmerAge">
<!-- <el-input
v-model="dataForm.farmerAge"
:disabled="disabled"
maxlength="3"
></el-input> -->
<el-input-number
:disabled="disabled"
v-model="dataForm.farmerAge"
:min="1"
:max="120"
label="年龄"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" prop="farmerSex">
<!-- <el-input
v-model="dataForm.farmerSex"
:disabled="disabled"
placeholder="户主性别"
></el-input> -->
<el-dict code="SEX" v-model="dataForm.farmerSex"></el-dict>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item label="家庭人口" prop="farmerMember">
<!-- <el-input
v-model="dataForm.farmerMember"
:disabled="disabled"
:maxlength="5"
placeholder="家庭人口"
></el-input> -->
<el-input-number
:disabled="disabled"
v-model="dataForm.farmerMember"
:min="0"
:max="20"
label="家庭人口"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="劳动力" prop="farmerLabour">
<!-- <el-input
v-model="dataForm.farmerLabour"
:disabled="disabled"
:maxlength="5"
placeholder="劳动力"
></el-input> -->
<el-input-number
:disabled="disabled"
v-model="dataForm.farmerLabour"
:min="0"
:max="20"
label="劳动力"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item label="总耕地面积(亩)" prop="cultivatedArea">
<!-- <el-input
v-model="dataForm.cultivatedArea"
:disabled="disabled"
:maxlength="10"
placeholder="总耕地面积(亩)"
></el-input> -->
<el-input-number
:disabled="disabled"
v-model="dataForm.cultivatedArea"
:min="0"
:max="10000000"
label="总耕地面积"
:precision="2"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="总种植面积(亩次)" prop="plantingArea">
<!-- <el-input
v-model="dataForm.plantingArea"
:disabled="disabled"
:maxlength="10"
placeholder="总种植面积(亩次)"
></el-input> -->
<el-input-number
:disabled="disabled"
v-model="dataForm.plantingArea"
:min="0"
:max="10000000"
label="总种植面积"
:precision="2"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item label="家庭经济状态" prop="economicsState">
<el-dict
code="ECONOMY_TYPE"
v-model="dataForm.economicsState"
></el-dict>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="电话" prop="farmerPhone">
<el-input
v-model.trim="dataForm.farmerPhone"
maxlength="11"
:disabled="disabled"
placeholder="电话"
></el-input>
<!-- <el-input
v-model="dataForm.farmerPhone"
:disabled="disabled"
placeholder="电话"
></el-input> -->
</el-form-item>
</el-col>
</el-row>
<el-form-item label="文化程度" prop="farmerEducation">
<el-dict
code="EDUCATION_TYPE"
v-model="dataForm.farmerEducation"
></el-dict>
<!-- <el-select
v-model="dataForm.farmerEducation"
placeholder="请选择文化程度"
>
<el-option label="小学" value="a"></el-option>
<el-option label="初中" vaule="b"></el-option>
<el-option label="高中" value="c"></el-option>
<el-option label="大专" value="d"></el-option>
<el-option label="本科" value="e"></el-option>
<el-option label="硕士" value="f"></el-option>
<el-option label="博士" value="g"></el-option>
</el-select> -->
<!-- <el-input v-model="dataForm.farmerEducation" :disabled="disabled" placeholder="文化程度"></el-input> -->
</el-form-item>
<el-form-item label="联系地址" prop="farmerArr">
<!-- <el-input
v-model="dataForm.farmerArr"
:disabled="disabled"
placeholder="联系地址"
:maxlength="50"
></el-input> -->
<el-input
type="textarea"
:rows="2"
placeholder="请输入地址"
v-model="dataForm.farmerArr"
maxlength="150"
>
</el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button v-if="!disabled" type="primary" @click="dataFormSubmit()"
>确定</el-button
>
</span>
</el-dialog>
</template>
<script>
var checkPhone = (rule, value, callback) => {
if (value == '') {
callback()
}
if (!(/^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/).test(value)) {
callback(new Error("格式不正确"))
} else {
callback()
}
}
// var checkAge = (rule, value, callback) => {
// if (value == '') {
// callback()
// }
// if (!(/^[1-9]\d?$|^1[01]\d$|^120$/).test(value)) {
// callback(new Error("年龄范围在1~120"))
// } else {
// callback()
// }
// }
export default {
data () {
return {
disabled: false,
visible: false,
dataForm: {
id: 0,
farmerNo: '',
farmerType: '',
year: '',
farmerName: '',
farmerSex: '',
farmerAge: '',
farmerEducation: '',
farmerMember: '',
farmerLabour: '',
cultivatedArea: '',
plantingArea: '',
economicsState: '',
farmerArr: '',
farmerPhone: '',
// dataRule: {
// personName: [
// {required: true, message: '名称不能为空', trigger: ['blur', 'change']}
// ],
// buildingId: [
// {required: true, message: '危房名不能为空', trigger: ['blur', 'change']}
// ],
// age: [
// {required: true, message: '年龄名不能为空', trigger: ['blur', 'change']}
// ],
// typeId: [
// {required: true, message: '类型名不能为空', trigger: ['blur', 'change']}
// ],
// farmerPhone:[
// {required: false,validator:checkPhone, trigger: ['blur', 'change']}
// ]
// }
},
dataRule: {
farmerName: [
{ maxLength: "5", message: '名称不能为空', trigger: 'blur' },
],
// farmerAge: [
// { required: true, message: '年龄不能为空' },
// // { type: 'number', message: '年龄必须为数字值' }, // 且不包括小数
// // { pattern: /^[1-9]\d?$|^1[01]\d$|^120$/, message: '范围在0-120', trigger: 'blur' }
// // { pattern: /^[1-9]*$/, message: '请输入正整数', trigger: 'blur' }, // 可以输入多位正整数
// { required: true, validator: checkAge, trigger: ['blur', 'change'] }
// ],
farmerPhone: [
{ required: false, validator: checkPhone, trigger: ['blur', 'change'] }
]
}
}
},
methods: {
init (id, disabled) {
this.disabled = disabled
this.dataForm.id = id || ''
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.$http({
url: `/pesticide/farmers/info/${this.dataForm.id}`,
method: 'get'
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataForm = data.farmers
}
})
}
})
},
// 表单提交
dataFormSubmit () {
this.$refs['dataForm']
.validate((valid) => {
if (valid) {
this.$http({
url: `/pesticide/farmers/${!this.dataForm.id ? 'save' : 'update'}`,
method: 'post',
data: this.dataForm
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500
})
this.visible = false
this.$emit('refreshDataList')
}
})
}
})
}
}
}
</script>
farmer.vue代码如下
<template>
<div class="mod-farmers">
<el-form
:inline="true"
:model="searchForm"
@keyup.enter.native="getDataList()"
>
<el-form-item>
<el-input
v-model="searchForm.name"
placeholder="参数名"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
<!-- v-if="isAuth('pesticide:farmers:save')" -->
<el-button
v-if="isAuth('pesticide:farmers:save')"
type="primary"
@click="addOrUpdateHandle()"
>新增</el-button
>
<el-button
v-if="isAuth('pesticide:farmers:delete')"
type="danger"
@click="deleteHandle()"
:disabled="dataListSelections.length <= 0"
>批量删除</el-button
>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
@selection-change="selectionChangeHandle"
style="width: 100%"
>
<el-table-column
type="selection"
header-align="center"
align="center"
width="50"
>
</el-table-column>
<el-table-column
prop="farmerNo"
header-align="center"
align="center"
label="户主编号"
>
</el-table-column>
<el-table-column
prop="farmerType"
header-align="center"
align="center"
label="农户类型"
>
<template slot-scope="scope">
<span>{{ transDict('FARMER_TYPE', scope.row.farmerType) }}</span>
</template>
</el-table-column>
<el-table-column
prop="year"
header-align="center"
align="center"
label="年份"
>
</el-table-column>
<el-table-column
prop="farmerName"
header-align="center"
align="center"
label="户主名称"
>
</el-table-column>
<el-table-column
prop="farmerSex"
header-align="center"
align="center"
label="户主性别"
>
</el-table-column>
<el-table-column
prop="farmerAge"
header-align="center"
align="center"
label="年龄"
>
</el-table-column>
<el-table-column
prop="farmerEducation"
header-align="center"
align="center"
label="文化程度"
>
<template slot-scope="scope">
<span>{{
transDict('EDUCATION_TYPE', scope.row.farmerEducation)
}}</span>
</template>
</el-table-column>
<el-table-column
prop="farmerMember"
header-align="center"
align="center"
label="家庭人口"
>
</el-table-column>
<el-table-column
prop="farmerLabour"
header-align="center"
align="center"
label="劳动力"
>
</el-table-column>
<el-table-column
prop="cultivatedArea"
header-align="center"
align="center"
label="总耕地面积(亩)"
>
</el-table-column>
<el-table-column
prop="plantingArea"
header-align="center"
align="center"
label="总种植面积(亩次)"
>
</el-table-column>
<el-table-column
prop="economicsState"
header-align="center"
align="center"
label="家庭经济状态"
>
<template slot-scope="scope">
<span>{{ transDict('ECONOMY_TYPE', scope.row.economicsState) }}</span>
</template>
</el-table-column>
<el-table-column
prop="farmerArr"
header-align="center"
align="center"
label="联系地址"
>
</el-table-column>
<el-table-column
prop="farmerPhone"
header-align="center"
align="center"
label="电话"
>
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
label="操作"
>
<template slot-scope="scope">
<el-button
v-if="isAuth('pesticide:farmers:info')"
type="text"
size="small"
@click="showDetails(scope.row.id)"
>查看</el-button
>
<el-button
v-if="isAuth('pesticide:farmers:update')"
type="text"
size="small"
@click="addOrUpdateHandle(scope.row.id)"
>修改
</el-button>
<el-button
v-if="isAuth('pesticide:farmers:delete')"
type="text"
size="small"
@click="deleteHandle(scope.row.id)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
>
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList"
></add-or-update>
</div>
</template>
<script>
import AddOrUpdate from './farmers-add-or-update'
export default {
data () {
return {
searchForm: {
name: ''
},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListSelections: [],
addOrUpdateVisible: false
}
},
components: {
AddOrUpdate
},
activated () {
this.getDataList()
},
methods: {
// 获取数据列表
getDataList () {
this.$http({
url: '/pesticide/farmers/list',
method: 'get',
params: {
'page': this.pageIndex,
'limit': this.pageSize,
'name': this.searchForm.name
}
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.page.records
this.totalPage = data.page.total
} else {
this.dataList = []
this.totalPage = 0
}
})
},
// 每页数
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
// 当前页
currentChangeHandle (val) {
this.pageIndex = val
this.getDataList()
},
// 多选
selectionChangeHandle (val) {
this.dataListSelections = val
},
// 查看详情
showDetails (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id, true)
})
},
// 新增 / 修改
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
},
// 删除
deleteHandle (id) {
let ids = id ? [id] : this.dataListSelections.map(item => {
return item.id
})
this.$confirm('确定对所选项进行[删除]操作?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http({
url: '/pesticide/farmers/delete',
method: 'post',
data: ids
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500
})
this.getDataList()
}
})
}).catch(() => {
})
}
}
}
</script>
最终效果像这样,所以不要忘记查看文档,有时候文档会帮助你更快地解决问题