<template> <el-container> <el-main> <!--面包屑导航区域--> <!-- <div>--> <!-- <el-breadcrumb separator-class="el-icon-arrow-right">--> <!-- <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>--> <!-- <el-breadcrumb-item>车辆调度</el-breadcrumb-item>--> <!-- <el-breadcrumb-item>驾驶员信息</el-breadcrumb-item>--> <!-- </el-breadcrumb>--> <!-- </div>--> <el-card style="background-color: #F5F7FA"> <!--搜索区域--> <div> <el-row :gutter="24"> <el-col :span="5"> <el-input v-model="queryInfo.driverName" prefix-icon="el-icon-search" clearable placeholder="请输入驾驶员姓名"></el-input> </el-col> <el-col :span="5"> <el-input v-model="queryInfo.driverMobile" prefix-icon="el-icon-search" clearable placeholder="请输入联系方式"></el-input> </el-col> <el-col :span="5"> <el-input v-model="queryInfo.driverCompany" prefix-icon="el-icon-search" clearable placeholder="请输入公司名称"></el-input> </el-col> <el-col :span="5"> <el-select v-model="queryInfo.driverStatus" clearable placeholder="请选择驾驶员状态"> <el-option v-for="item in driverStatusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-col> </el-row> <el-row style="margin-top: 20px;"> <el-button type="primary" @click="getDriverInfoList">查询驾驶员信息</el-button> <el-button type="success" @click="addDriverInfoFormVisible = true">增加驾驶员信息</el-button> </el-row> </div> <!--驾驶员信息列表区域--> <div style="margin-top: 20px;"> <el-table :data="driverInfoList" border stripe highlight-current-row v-loading="listLoading" @selection-change="selsChange" element-loading-text="拼命加载中"> <el-table-column type="selection" width="55" :selectable="isSelectable" align="center"></el-table-column> <el-table-column type="index" align="center"></el-table-column> <el-table-column label="姓名" prop="driverName" align="center" width="100"></el-table-column> <el-table-column label="联系方式" prop="driverMobile" align="center" width="130"></el-table-column> <el-table-column label="职位" prop="driverPosition" align="center" width="100"> <template slot-scope="scope"> <span v-if="scope.row.driverPosition ==='1'">队长</span> <span v-if="scope.row.driverPosition ==='2'">班长</span> <span v-if="scope.row.driverPosition ==='3'">副班长</span> <span v-if="scope.row.driverPosition ==='4'">员工</span> </template> </el-table-column> <el-table-column label="状态" prop="driverStatus" align="center" width="120"> <template slot-scope="scope"> <span v-if="scope.row.driverStatus ==='1'">空闲状态</span> <span v-if="scope.row.driverStatus ==='2'">执行状态</span> <span v-if="scope.row.driverStatus ==='3'">轮休状态</span> <span v-if="scope.row.driverStatus ==='4'">请假状态</span> </template> </el-table-column> <el-table-column label="驾驶证" prop="driverLicenseNumber" align="center" width="200"></el-table-column> <el-table-column label="工号" prop="jobNumber" align="center" width="150"></el-table-column> <el-table-column label="公司" prop="driverCompany" align="center" width="160"></el-table-column> <el-table-column label="操作" width="220px" align="center" fixed="right"> <template slot-scope="scope"> <!--查看按钮--> <el-tooltip effect="dark" content="编辑" placement="top-start" :enterable="false"> <el-button type="primary" icon="el-icon-edit" size="mini" @click="showEditDialogVisible(scope.$index,scope.row)">编辑 </el-button> </el-tooltip> <!--取消调度按钮--> <el-tooltip effect="dark" content="删除" placement="top-start" :enterable="false"> <el-button type="danger" icon="el-icon-delete" size="mini" :loading="delLoading" :disabled="scope.row.driverStatus==='2'" @click="removeDriverInfo(scope.$index,scope.row)">删除 </el-button> </el-tooltip> </template> </el-table-column> </el-table> <!--分页区域--> <div style="margin-top: 10px"> <el-row :gutter="24"> <el-col :span="5"> <el-button type="danger" icon="el-icon-delete" @click="batchRemove" :disabled="this.sels.length===0">批量删除 </el-button> </el-col> <el-col :span="10" style="margin-top: 5px"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="queryInfo.pageNum" :page-sizes="[10,20,30,50]" :page-size="queryInfo.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </el-col> </el-row> </div> </div> </el-card> <!-- 增加驾驶员信息对话框 --> <div> <el-dialog style="margin-top: -50px" title="增加驾驶员信息" text-align="center" :visible.sync="addDriverInfoFormVisible" width="50%" @close="addDriverInfoDialogClosed"> <el-form :model="addDriverInfoForm" label-width="100px" status-icon :rules="addDriverInfoFormRules" ref="addDriverInfoFormRef" size="medium" align="center" :inline="true" style="background-color: #F5F7FA"> <div style="margin-top: -15px"> <br> <el-form-item label="司机姓名:" prop="driverName"> <el-input v-model="addDriverInfoForm.driverName" style="width: 300px;" clearable placeholder="请输入驾驶员姓名"></el-input> </el-form-item> <el-form-item label="联系方式:" prop="driverMobile"> <el-input v-model="addDriverInfoForm.driverMobile" style="width: 300px;" clearable placeholder="请输入驾驶员联系方式"></el-input> </el-form-item> <el-form-item label="司机状态:" prop="driverStatus"> <el-select v-model="addDriverInfoForm.driverStatus" style="width: 300px" clearable placeholder="请选择驾驶员类型"> <el-option v-for="item in driverStatusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="驾驶证号:" prop="driverLicenseNumber"> <el-input v-model="addDriverInfoForm.driverLicenseNumber" style="width: 300px;" clearable placeholder="请输入驾驶证号码"></el-input> </el-form-item> <el-form-item label="工作职位:" prop="driverPosition"> <el-select v-model="addDriverInfoForm.driverPosition" style="width: 300px" clearable placeholder="请选择驾驶员类型"> <el-option v-for="item in driverPositionList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="员工号码:" prop="jobNumber"> <el-input v-model="addDriverInfoForm.jobNumber" style="width: 300px;" clearable placeholder="请输入员工号码"></el-input> </el-form-item> <el-form-item label="司机公司:" prop="driverCompany"> <el-input v-model="addDriverInfoForm.driverCompany" style="width: 300px;" clearable placeholder="请输入驾驶员所属公司"></el-input> </el-form-item> <br> </div> </el-form> <!--底部按钮区域--> <span slot="footer" class="dialog-footer"> <el-button @click="addDriverInfoFormVisible = false">取 消</el-button> <el-button type="primary" :loading="addLoading" @click="addDriverInfo">增 加</el-button> </span> </el-dialog> </div> <!-- 编辑驾驶员信息,对话框 --> <div> <el-dialog style="margin-top: -70px" title="编辑驾驶员信息" :visible.sync="editDialogVisible" text-align="center" width="50%" @close="editDriverInfoDialogClosed"> <el-form :model="editDriverInfoForm" label-width="100px" status-icon :rules="editDriverInfoFormRules" ref="editDriverInfoFormRef" :inline="true" size="medium" align="center" style="background-color: #F5F7FA"> <div style="margin-top: -15px"> <br> <el-form-item label="司机姓名:" prop="driverName"> <el-input v-model="editDriverInfoForm.driverName" style="width: 300px;" clearable placeholder="请输入驾驶员姓名"></el-input> </el-form-item> <el-form-item label="联系方式:" prop="driverMobile"> <el-input v-model="editDriverInfoForm.driverMobile" style="width: 300px;" clearable placeholder="请输入驾驶员联系方式"></el-input> </el-form-item> <el-form-item label="司机状态:" prop="driverStatus"> <el-select v-model="editDriverInfoForm.driverStatus" style="width: 300px" clearable placeholder="请选择驾驶员类型"> <el-option v-for="item in driverStatusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="驾驶证号:" prop="driverLicenseNumber"> <el-input v-model="editDriverInfoForm.driverLicenseNumber" style="width: 300px;" clearable placeholder="请输入驾驶证号码"></el-input> </el-form-item> <el-form-item label="工作职位:" prop="driverPosition"> <el-select v-model="editDriverInfoForm.driverPosition" style="width: 300px" clearable placeholder="请选择驾驶员类型"> <el-option v-for="item in driverPositionList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="员工号码:" prop="jobNumber"> <el-input v-model="editDriverInfoForm.jobNumber" style="width: 300px;" clearable placeholder="请输入员工号码"></el-input> </el-form-item> <el-form-item label="司机公司:" prop="driverCompany"> <el-input v-model="editDriverInfoForm.driverCompany" style="width: 300px;" clearable placeholder="请输入驾驶员所属公司"></el-input> </el-form-item> <br> </div> </el-form> <!--底部按钮区域--> <span slot="footer" class="dialog-footer"> <el-button @click="editDialogVisible = false">取 消</el-button> <el-button type="primary" :loading="editLoading" @click="editDriverInfo">编 辑</el-button> </span> </el-dialog> </div> </el-main> </el-container> </template> <script> import { selectDriverInfoList, insertDriverInfo, updateDriverInfo, batchRemoveDriverInfo, deleteDriverInfo, } from "../../api/dispatch_api"; export default { name: "dispatch_api", created() { //刷新驾驶员信息列表 this.getDriverInfoList(); }, data() { //验证手机号的自定义规则 var driverMobileValid = (rule, value, callback) => { //验证手机号的正则表达式 const regMobile = /^(0|86|17951)?(13[0-9]|15[0123456789]|17[678]|18[0-9]|14[57])[0-9]{8}$/; if (regMobile.test(value)) { //合法的手机号 return callback(); } callback(new Error('请输入合法的手机号')); }; return { /** * 查询信息列表 */ queryInfo: { //驾驶员姓名 driverName: '', //驾驶员联系方式 driverMobile: '', //驾驶员所属公司 driverCompany: '', //驾驶员状态 driverStatus: '', //当前的页数 pageNum: 1, //当前每页显示多少条数据 pageSize: 10 }, /** * 设置,总条数 */ total: 0, /** * 批量删除的选中列表 */ sels: [], /** * 驾驶员信息列表 */ driverInfoList: [], /** * 新增驾驶员信息表单 */ addDriverInfoForm: { driverName: '', driverLicenseNumber: '', driverMobile: '', jobNumber: '', driverPosition: '1', driverCompany: '', driverStatus: '1', }, /** * 编辑驾驶员信息表单 */ editDriverInfoForm: {}, /** * 控制,添加驾驶员信息对话框的显示与隐藏 */ addDriverInfoFormVisible: false, /** * 控制,编辑驾驶员信息对话框的显示与隐藏 */ editDialogVisible: false, /* 列表加载 */ listLoading: false, /* 添加加载 */ addLoading: false, /* 编辑加载 */ editLoading: false, /* 删除加载 */ delLoading: false, /** * 司机职位,列表 */ driverPositionList: [ { value: '1', label: '队长' }, { value: '2', label: '班长' }, { value: '3', label: '副班长' }, { value: '4', label: '员工' }, ], /** * 驾驶员状态,列表 */ driverStatusList: [ { value: '1', label: '空闲状态' }, { value: '2', label: '执行状态' }, { value: '3', label: '轮休状态' }, { value: '4', label: '请假状态' }, ], /** * 添加驾驶员信息,表单的验证规则对象 */ addDriverInfoFormRules: { driverName: [ {required: true, message: '请选择驾驶员姓名', trigger: ['blur', 'change']}, ], driverLicenseNumber: [ {required: true, message: '请输入驾驶证号码', trigger: ['blur', 'change']}, ], driverMobile: [ {required: true, message: '请输入联系方式', trigger: ['blur', 'change']}, {validator: driverMobileValid, trigger: 'blur'} ], jobNumber: [ {required: true, message: '请输入员工号码', trigger: ['blur', 'change']}, ], driverPosition: [ {required: true, message: '请选择工作职位', trigger: ['blur', 'change']}, ], driverCompany: [ {required: true, message: '请输入驾驶员所属公司', trigger: ['blur', 'change']}, ], driverStatus: [ {required: true, message: '请选择驾驶员状态', trigger: ['blur', 'change']}, ], }, /** * 编辑驾驶员信息,表单的验证规则对象 */ editDriverInfoFormRules: { driverName: [ {required: true, message: '请选择驾驶员姓名', trigger: ['blur', 'change']}, ], driverLicenseNumber: [ {required: true, message: '请输入驾驶证号码', trigger: ['blur', 'change']}, ], driverMobile: [ {required: true, message: '请输入联系方式', trigger: ['blur', 'change']}, {validator: driverMobileValid, trigger: 'blur'} ], jobNumber: [ {required: true, message: '请输入员工号码', trigger: ['blur', 'change']}, ], driverPosition: [ {required: true, message: '请选择工作职位', trigger: ['blur', 'change']}, ], driverCompany: [ {required: true, message: '请输入驾驶员所属公司', trigger: ['blur', 'change']}, ], driverStatus: [ {required: true, message: '请选择驾驶员状态', trigger: ['blur', 'change']}, ], } } }, methods: { /** * 获取驾驶员信息列表 */ getDriverInfoList() { //开启加载 this.listLoading = true; selectDriverInfoList(this.queryInfo).then((response) => { let res = response.data; if (res.code !== '200'){ //关闭加载 this.listLoading = false; return this.$message.error('获取驾驶员信息列表,失败'); } // 获取驾驶员信息列表数据 this.driverInfoList = res.data.list; // 获取列表的总记录数 this.total = res.data.total; //关闭加载 this.listLoading = false; this.$message.success('获取驾驶员信息列表,成功'); }).catch(error => { this.listLoading = false; this.$message.error(error.toString()); }); }, /** * 增加驾驶员信息 */ addDriverInfo() { /*进行表单的预验证*/ this.$refs.addDriverInfoFormRef.validate(valid => { // 未通过,表单预校验 if (!valid) return; // 通过,表单预检验,开启加载 this.addLoading = true; insertDriverInfo(this.addDriverInfoForm).then((response) => { let res = response.data; if (res.code !== '200'){ //关闭加载 this.addLoading = false; return this.$message.error('添加驾驶员信息,失败'); } //关闭加载 this.addLoading = false; this.$message.success('添加驾驶员信息,成功'); //关闭对话框 this.addDriverInfoFormVisible = false; //刷新驾驶员信息列表 this.getDriverInfoList(); }).catch(error => { this.addLoading = false; this.$message.error(error.toString()); }); }) }, /** * 删除驾驶员信息 */ removeDriverInfo(index, row) { //弹框询问是否删除驾驶员信息 this.$confirm('此操作永久删除该驾驶员信息, 是否继续?', '警告', { confirmButtonText: '确定删除', cancelButtonText: '取消', type: 'warning' } ).then(() => { //开启加载 this.delLoading = true; deleteDriverInfo(row).then((response) => { let res = response.data; if (res.code !== '200') { //关闭加载 this.delLoading = false; return this.$message.error('删除驾驶员信息,失败'); } //关闭加载 this.delLoading = false; this.$message.success('删除驾驶员信息,成功!'); //刷新驾驶员信息列表 this.getDriverInfoList(); }).catch(error => { this.delLoading = false; this.$message.error(error.toString()); }); }).catch(() => { }); }, /** * 批量删除,之前的选中 */ selsChange: function (sels) { this.sels = sels; }, /** * 驾驶员状态为执行状态的时候,无法被选中 */ isSelectable(row, index) { if (row.driverStatus === '2') { return false; } else { return true; } }, /** * 批量删除功能 */ batchRemove() { var ids = this.sels.map(item => item.id).toString(); console.log(ids); //弹框询问是否批量删除选中的车辆调度记录 this.$confirm('此操作将永久删除,选中的驾驶员信息, 是否继续?', '警告', { confirmButtonText: '确定删除', cancelButtonText: '取消', type: 'warning' } ).then(() => { //开启加载 this.listLoading = true; let params = {ids: ids}; batchRemoveDriverInfo(params).then(response => { let res = response.data; if (res.code !== '200') { this.listLoading = false; return this.$message.error('批量删除驾驶员信息,失败'); } this.$message.success('批量删除驶员信息,成功!'); this.listLoading = false; //刷新驾驶员信息列表 this.getDriverInfoList(); }).catch(error => { this.delLoading = false; this.$message.error(error.toString()); }); }).catch(() => { }); }, /** * 编辑驾驶员信息 */ editDriverInfo() { /*进行表单的预验证*/ this.$refs.editDriverInfoFormRef.validate(valid => { // 未通过,表单预校验 if (!valid) return; // 通过,表单预检验,开启加载 this.editLoading = true; updateDriverInfo(this.editDriverInfoForm).then((response) => { let res = response.data; if (res.code !== '200') { //关闭加载 this.editLoading = false; return this.$message.error('修改驾驶员信息,失败'); } //关闭加载 this.editLoading = false; this.$message.success('修改驾驶员信息,成功!'); // 关闭,编辑驾驶员信息对话框 this.editDialogVisible = false; //刷新驾驶员信息列表 this.getDriverInfoList(); }).catch(error => { this.editLoading = false; this.$message.error(error.toString()); }); }) }, /** * 添加驾驶员信息对话框,关闭时,重置对话框 */ addDriverInfoDialogClosed() { this.$refs.addDriverInfoFormRef.resetFields(); }, /** * 编辑驾驶员信息对话框,关闭时,重置对话框 */ editDriverInfoDialogClosed() { this.$refs.editDriverInfoFormRef.resetFields(); }, /** * 打开编辑驾驶员信息对话框 */ showEditDialogVisible(index, row) { this.editDriverInfoForm = Object.assign({}, row); this.editDialogVisible = true; }, /** * 监听pageSize改变的事件 */ handleSizeChange(newSize) { this.queryInfo.pageSize = newSize; //刷新驾驶员信息列表 this.getDriverInfoList(); }, /** * 监听当前页码值改变的事件 */ handleCurrentChange(newPage) { this.queryInfo.pageNum = newPage; //刷新驾驶员信息列表 this.getDriverInfoList(); }, } } </script> <style scoped> </style>