<template> <el-container> <el-main> <el-card style="background-color: #F5F7FA"> <!-- 搜素区域 --> <div> <el-form :model="queryInfo" :rules="queryFormRules" ref="queryFormRef" status-icon> <el-form-item> <el-col :span="4"> <el-form-item prop="gmtCreate"> <el-date-picker v-model="queryInfo.gmtCreate" type="date" value-format="yyyy-MM-dd" placeholder="选择创建调度时间" style="width: 200px"></el-date-picker> </el-form-item> </el-col> <el-col :span="4" style="margin-left: 50px"> <el-form-item prop="dispatchType"> <el-select v-model="queryInfo.dispatchType" placeholder="请选择业务类型" style="width: 200px" clearable> <el-option v-for="item in dispatchTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="4" style="margin-left: 50px"> <el-form-item prop="status"> <el-select v-model="queryInfo.status" placeholder="记录状态" clearable style="width:200px;margin-left: 6px"> <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> </el-col> <el-button type="primary" style="margin-left: 60px" @click="getDispatchNodeList">查询调度记录 </el-button> <el-button type="success" style="margin-left: 15px" @click="dispatchFormVisible = true"> 我要调度车辆 </el-button> </el-form-item> </el-form> <el-row style="margin-top: 20px;"> </el-row> </div> <!--调度记录列表区域--> <div style="margin-top: 20px;"> <el-table :data="DispatchNoteList" border highlight-current-row v-loading="listLoading" :row-class-name="rowStatus" element-loading-text="拼命加载中"> <el-table-column type="index" align="center"></el-table-column> <el-table-column label="用户名称" prop="userName" align="center" width="100"></el-table-column> <el-table-column label="联系方式" prop="userMobile" align="center" width="120"></el-table-column> <el-table-column label="状态" prop="status" align="center" width="120"> <template slot-scope="scope"> <span v-if="scope.row.status ==='1'">完成状态</span> <span v-if="scope.row.status ==='2'">执行状态</span> <span v-if="scope.row.status ==='3'">取消状态</span> <span v-if="scope.row.status ==='4'">待执行状态</span> </template> </el-table-column> <el-table-column label="业务类型" prop="dispatchType" align="center" width="120"> <template slot-scope="scope"> <span v-if="scope.row.dispatchType ==='1'">进站送货</span> <span v-if="scope.row.dispatchType ==='2'">出站提货</span> <span v-if="scope.row.dispatchType ==='3'">货物调拨</span> <span v-if="scope.row.dispatchType ==='4'">货物流转</span> </template> </el-table-column> <el-table-column label="车牌号码" prop="licensePlateNumber" align="center" width="120"></el-table-column> <el-table-column label="车辆类型" prop="vehicleType" align="center" width="120"> <template slot-scope="scope"> <span v-if="scope.row.vehicleType ==='1'">重型货车</span> <span v-if="scope.row.vehicleType ==='2'">中型货车</span> <span v-if="scope.row.vehicleType ==='3'">轻型货车</span> <span v-if="scope.row.vehicleType ==='4'">微型货车</span> <span v-if="scope.row.vehicleType ==='5'">拖车</span> <span v-if="scope.row.vehicleType ==='6'">叉车</span> </template> </el-table-column> <el-table-column label="场站位置" prop="station" align="center" width="120"> <template slot-scope="scope"> <span v-if="scope.row.station ==='1'">西货站</span> <span v-if="scope.row.station ==='2'">综保区</span> <span v-if="scope.row.station ==='3'">军投</span> <span v-if="scope.row.station ==='4'">快邮</span> </template> </el-table-column> <el-table-column label="创建时间" prop="gmtCreate" align="center" width="160"></el-table-column> <el-table-column label="开始时间" prop="beginTime" align="center" width="160"></el-table-column> <el-table-column label="完成时间" prop="endTime" align="center" width="160"></el-table-column> <el-table-column label="操作" width="220px" fixed="right" align="center"> <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="showDialogVisible(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" :disabled="scope.row.endTime!==null && scope.row.endTime!==''" @click="cancelDispatch(scope.row)" :loading="cancelLoading">取消调度 </el-button> </el-tooltip> </template> </el-table-column> </el-table> <!--分页区域--> <div style="margin-top: 10px"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="this.queryInfo.pageNum" :page-sizes="[10,20,30,50]" :page-size="this.queryInfo.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </div> </el-card> <!-- 我要调度车辆,对话框 --> <div> <el-dialog title="我要调度车辆" :visible.sync="dispatchFormVisible" width="50%" @close="dispatchDialogClosed"> <!-- :rules="dispatchFormRules" ref="dispatchFormRef"--> <el-form :model="dispatchForm" label-width="100px" status-icon :rules="dispatchFormRules" ref="dispatchFormRef" style="margin-left:10%;margin-right:10%;background-color: #F5F7FA"> <br> <el-form-item label="车辆类型:" prop="vehicleType"> <el-select v-model="dispatchForm.vehicleType" style="width: 300px" clearable placeholder="请选择车辆类型"> <el-option v-for="item in vehicleTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="车辆数量:" prop="vehicleNumber"> <el-input-number style="width: 200px" v-model="dispatchForm.vehicleNumber" :min="1" :max="100" controls-position="right"> </el-input-number> <span style="margin-left:5px;font-size: 18px">辆</span> </el-form-item> <el-form-item label="场站位置:" prop="station"> <el-select v-model="dispatchForm.station" style="width: 300px" clearable placeholder="请选择场站位置"> <el-option v-for="item in stationList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="业务类型:" prop="dispatchType"> <el-select v-model="dispatchForm.dispatchType" style="width: 300px;" clearable placeholder="请选择业务类型"> <el-option v-for="item in dispatchTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <br> </el-form> <!--底部按钮区域--> <span slot="footer" class="dialog-footer"> <el-button @click="dispatchFormVisible = false">取 消</el-button> <el-button type="primary" @click="dispatchVehicle" :loading="dispatchLoading">确定调度车辆</el-button> </span> </el-dialog> </div> <!-- 查看调度记录,对话框 --> <div> <el-dialog style="margin-top: -50px" title="查看调度记录明细" :visible.sync="viewDialogVisible" text-align="center" width="60%" @close="showDialogClosed"> <!-- 表单显示区域 :rules="dispatchFormRules" --> <el-form :model="showForm" ref="showFormRef" :inline="true" align="center" style="background-color: #F5F7FA;margin-left: 5%;margin-right: 5%"> <div style="margin-top: -15px"> <br> <el-form-item label="用户名称:" prop="userName"> <el-input v-model="showForm.userName" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="联系方式:" prop="userMobile"> <el-input v-model="showForm.userMobile" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="车辆类型:" prop="vehicleType"> <el-select v-model="showForm.vehicleType" style="width:200px" size="small" readonly placeholder="请选择车辆类型"> <el-option v-for="item in vehicleTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="车牌号码:" prop="licensePlateNumber"> <el-input v-model="showForm.licensePlateNumber" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="场站位置:" prop="station"> <el-select v-model="showForm.station" style="width:200px" readonly size="small" placeholder="请选择场站位置"> <el-option v-for="item in stationList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="业务类型:" prop="dispatchType"> <el-select v-model="showForm.dispatchType" style="width:200px" readonly size="small" placeholder="请选择业务类型"> <el-option v-for="item in dispatchTypeList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="创建时间:" prop="gmtCreate"> <el-input v-model="showForm.gmtCreate" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="开始时间:" prop="beginTime"> <el-input v-model="showForm.beginTime" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="结束时间:" prop="endTime"> <el-input v-model="showForm.endTime" style="width: 200px;" size="small" readonly></el-input> </el-form-item> <el-form-item label="记录状态:" prop="status"> <el-select v-model="showForm.status" placeholder="记录状态" style="width:200px" size="small" readonly> <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <br> </div> </el-form> <!--底部按钮区域--> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="viewDialogVisible = false">结束查看</el-button> </span> </el-dialog> </div> </el-main> </el-container> </template> <script> import {selectDispatchNoteList, dispatch, cancel, getUser} from '../../api/dispatch_api' export default { name: 'dispatch_api', created() { }, data() { /** * 验证手机号的自定义规则 */ var userMobileValid = (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: { //用户姓名 userName: '', //用户联系方式 userMobile: '', //记录状态 status: '', //调度时间 gmtCreate: new Date(), //业务类型 dispatchType: '', //当前的页数 pageNum: 1, //当前每页显示多少条数据 pageSize: 10 }, /** * 记录列表,总条数 */ total: 0, /** * 所有,调度记录列表 */ DispatchNoteList: [], /** * 我要调度车辆,表单 */ dispatchForm: { userName: '', userMobile: '', //车辆数量 vehicleNumber: 1, //车辆类型 vehicleType: '2', //场站位置 station: '1', //调度业务类型 dispatchType: '1' }, /** * 查看记录明细,表单 */ showForm: {}, /** * 控制添加用户对话框的显示与隐藏 */ dispatchFormVisible: false, /** * 控制查看调度记录明细,对话框的显示与隐藏 */ viewDialogVisible: false, /** * loading加载 */ /* 获取列表时的加载 */ listLoading: false, /* 调度车辆时的加载 */ dispatchLoading: false, /* 取消调度时的加载 */ cancelLoading: false, /** * 业务类型,选项列表 */ dispatchTypeList: [ { value: '1', label: '进站送货' }, { value: '2', label: '出站提货' }, { value: '3', label: '货物流转' }, { value: '4', label: '货物调拨' } ], /** * 车辆类型,选项列表 */ vehicleTypeList: [ { value: '1', label: '重型货车' }, { value: '2', label: '中型货车' }, { value: '3', label: '经济货车' }, { value: '4', label: '微型货车' }, { value: '5', label: '拖车' }, { value: '6', label: '叉车' } ], /** * 记录状态,列表 */ statusList: [ { value: '1', label: '完成状态' }, { value: '2', label: '执行状态' }, { value: '3', label: '取消状态' }, { value: '4', label: '待执行状态' } ], /** * 场站位置,选项列表 */ stationList: [ { value: '1', label: '西货站' }, { value: '2', label: '综保区' }, { value: '3', label: '军投' }, { value: '4', label: '快邮' } ], queryFormRules: { userName: [ {required: true, message: '请输入姓名', trigger: ['blur', 'change']}, ], userMobile: [ {required: true, message: '请输入联系方式', trigger: ['blur', 'change']}, {validator: userMobileValid, trigger: 'blur'} ], }, /** * 调度车辆表单的验证规则对象 */ dispatchFormRules: { status: [ {required: true, message: '请选择记录状态', trigger: ['blur', 'change']}, ], gmtCreate: [ {required: true, message: '请选择创建时间', trigger: ['blur', 'change']}, ], endTime: [ {required: true, message: '请选择结束时间', trigger: ['blur', 'change']}, ], licensePlateNumber: [ {required: true, message: '请输入车牌号', trigger: ['blur', 'change']}, ], userName: [ {required: true, message: '请输入姓名', trigger: ['blur', 'change']}, ], userMobile: [ {required: true, message: '请输入联系方式', trigger: ['blur', 'change']}, {validator: userMobileValid, trigger: 'blur'} ], vehicleType: [ {required: true, message: '请选择车辆类型', trigger: ['blur', 'change']}, ], vehicleNumber: [ {required: true, message: '请选择车辆数量', trigger: ['blur', 'change']}, ], station: [ {required: true, message: '请选择场站位置', trigger: ['blur', 'change']}, ], dispatchType: [ {required: true, message: '请选择调度业务类型', trigger: ['blur', 'change']}, ], }, } }, methods: { /** * 监听,调度车辆对话框的关闭事件 */ dispatchDialogClosed() { //重置对话框 this.$refs.dispatchFormRef.resetFields(); }, /** * 监听,查看调度记录对话框的关闭事件 */ showDialogClosed() { //重置对话框 this.$refs.showFormRef.resetFields(); }, /** * 监听pageSize改变的事件 */ handleSizeChange(newSize) { this.queryInfo.pageSize = newSize; //刷新调度记录列表 this.getDispatchNodeList(); }, /** * 监听当前页码值改变的事件 */ handleCurrentChange(newPage) { this.queryInfo.pageNum = newPage; //刷新调度记录列表 this.getDispatchNodeList(); }, /** * 打开,查看调度记录明细,对话框 * @param row */ showDialogVisible(row) { this.showForm = row; this.viewDialogVisible = true; }, /** * 用户端,获取车辆调度记录 */ getDispatchNodeList() { this.listLoading = true; selectDispatchNoteList(this.queryInfo).then((response) => { let res = response.data; if (res.code !== '200') { this.listLoading = false; return this.$message.error('获取车辆调度列表失败'); } // 获取车辆调度列表数据 this.DispatchNoteList = res.data.list; // 获取列表的总记录数 this.total = res.data.total; this.listLoading = false; this.$message.success('获取车辆调度列表,成功!'); }).catch(error => { this.listLoading = false; this.$message.error(error.toString()); }); }, /** * 用户端,我要调度车辆,方法 */ dispatchVehicle() { this.dispatchLoading = true; dispatch(this.dispatchForm).then((response) => { let res = response.data; if (res.code !== '200') { this.dispatchLoading = false; return this.$message.error('车辆繁忙,请稍后重试'); } //关闭加载 this.dispatchLoading = false; this.$message.success('调度车辆成功!'); //调度成功,隐藏对话框 this.dispatchFormVisible = false; /* 将调度车辆信息=>查询列表 */ // 用户名称 this.queryInfo.userName = this.dispatchForm.userName; // 联系方式 this.queryInfo.userMobile = this.dispatchForm.userMobile; // 调度业务类型 this.queryInfo.dispatchType = this.dispatchForm.dispatchType; // 创建时间为当前时间(需留意) this.queryInfo.gmtCreate = new Date(); //刷新车辆调度列表 this.getDispatchNodeList(); }).catch(error => { this.dispatchLoading = false; this.$message.error(error.toString()); }); }, /** * 用户端,取消调度车辆,方法 */ cancelDispatch(row) { //弹框询问是否取消车辆调度 this.$confirm('此操作将取消该车辆的调度, 是否继续?', '警告', { confirmButtonText: '确定取消调度', cancelButtonText: '取消', type: 'warning' } ).then(() => { //开启加载 this.cancelLoading = true; cancel(row).then((response) => { let res = response.data; if (res.code !== '200') { this.cancelLoading = false; return this.$message.error('取消车辆调度,失败!请人工介入'); } //关闭加载 this.cancelLoading = false; this.$message.success('取消调度车辆,成功!'); //刷新车辆调度列表 this.getDispatchNodeList(); }).catch(error => { //关闭加载 this.cancelLoading = false; this.$message.error(error.toString()); }); }).catch(() => { }); }, /** * 获取用户信息 */ getUserInfo(param) { getUser(param).then((response) => { let res = response.data; if (res.code !== '200') { return this.$message.error('网络异常,请刷新界面!'); } if (res.data.list.length === 0) { return this.$message.error('网络异常,请刷新界面!'); } if (res.data.list[0].mobilephone === null || res.data.list[0].mobilephone === '') { return this.$message.error('请填写您的手机号码'); } this.queryInfo.userMobile = res.data.list[0].mobilephone; this.dispatchForm.userMobile = res.data.list[0].mobilephone; this.$message.success('欢迎使用,车辆调度系统!'); }).catch((error) => { this.$message.error(error.toString()); }); }, /** * 根据状态的不同区分颜色 * * @param row * @param rowIndex */ rowStatus({row, rowIndex}) { if (row.status === '1') { return 'success-row'; } if (row.status === '2') { return 'run-row'; } if (row.status === '3') { return 'cancel-row'; } if (row.status === '4') { return 'await-row'; } } }, mounted() { var user = sessionStorage.getItem('user'); if (user) { user = JSON.parse(user); console.log(user); this.queryInfo.userName = user.username; this.dispatchForm.userName = user.username; let param = { userName: this.queryInfo.userName }; this.getUserInfo(param); } /** * 渲染完成之后,在获取调度记录列表 */ // this.getDispatchNodeList(); } } </script> <style> /* 完成状态 */ .el-table .success-row { background: rgba(64, 158, 255, 0.2); } /* 执行状态 */ .el-table .run-row { background: rgba(103, 194, 58, 0.2); } /* 取消状态 */ .el-table .cancel-row { background: rgba(144, 147, 153, 0.2); } /* 待执行状态 */ .el-table .await-row { background: rgba(230, 162, 60, 0.2); } </style>