<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.licensePlateNumber" clearable prefix-icon="el-icon-search"
                                      placeholder="请输入车牌号码"></el-input>
                        </el-col>
                        <el-col :span="5">
                            <el-input v-model="queryInfo.vehicleCompany" clearable prefix-icon="el-icon-search"
                                      placeholder="请输入车辆公司"></el-input>
                        </el-col>
                        <el-col :span="5">
                            <el-select v-model="queryInfo.vehicleStatus" clearable placeholder="请选择车辆状态">
                                <el-option
                                        v-for="item in vehicleStatusList"
                                        :key="item.value"
                                        :label="item.label"
                                        :value="item.value">
                                </el-option>
                            </el-select>
                        </el-col>
                        <el-col :span="5">
                            <el-select v-model="queryInfo.vehicleType" clearable placeholder="请选择车辆类型">
                                <el-option
                                        v-for="item in vehicleTypeList"
                                        :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="getVehicleInfoList">查询车辆信息</el-button>
                        <el-button type="success" @click="addVehicleInfoFormVisible = true">增加车辆信息</el-button>

                    </el-row>
                </div>
                <!--车辆信息列表区域-->
                <div style="margin-top: 20px;">
                    <el-table :data="vehicleInfoList" 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="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="licensePlateNumber" align="center"
                                         width="130"></el-table-column>
                        <el-table-column label="车辆状态" prop="vehicleStatus" align="center" width="100">
                            <template slot-scope="scope">
                                <span v-if="scope.row.vehicleStatus ==='1'">空闲状态</span>
                                <span v-if="scope.row.vehicleStatus ==='2'">执行状态</span>
                                <span v-if="scope.row.vehicleStatus ==='3'">在修状态</span>
                                <span v-if="scope.row.vehicleStatus ==='4'">损坏未修</span>
                                <span v-if="scope.row.vehicleStatus ==='5'">保养状态</span>
                            </template>
                        </el-table-column>
                        <el-table-column label="车辆载重/Kg" prop="vehicleLoad" align="center"
                                         width="110"></el-table-column>
                        <el-table-column label="挂车与否" prop="isTrailer" align="center" width="110">
                            <template slot-scope="scope">
                                <span v-if="scope.row.isTrailer ==='1'">有挂车</span>
                                <span v-if="scope.row.isTrailer ==='2'">没有挂车</span>
                            </template>
                        </el-table-column>
                        <el-table-column label="开始空闲时间" prop="freetime" align="center" width="160"></el-table-column>

                        <el-table-column label="车辆公司" prop="vehicleCompany" align="center"
                                         width="200"></el-table-column>
                        <el-table-column label="行驶证号" prop="drivingLicenseNumber" align="center"
                                         width="160"></el-table-column>
                        <el-table-column label="操作" width="200px" 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.vehicleStatus==='2'"
                                               @click="removeVehicleInfo(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="增加车辆信息"
                        :visible.sync="addVehicleInfoFormVisible"
                        width="50%" @close="addVehicleInfoDialogClosed">
                    <el-form :model="addVehicleInfoForm" label-width="100px" status-icon
                             :rules="addVehicleInfoFormRules" ref="addVehicleInfoFormRef"
                             style="margin-left:10%;margin-right:10%;background-color: #F5F7FA">
                        <div style="margin-left: 30px">
                            <br>
                            <el-form-item label="车牌号码:" prop="licensePlateNumber">
                                <el-input v-model="addVehicleInfoForm.licensePlateNumber" clearable
                                          style="width: 300px;"
                                          placeholder="请输入车牌号码"></el-input>
                            </el-form-item>
                            <el-form-item label="行驶证号:" prop="drivingLicenseNumber">
                                <el-input v-model="addVehicleInfoForm.drivingLicenseNumber" clearable
                                          style="width: 300px;"
                                          placeholder="请输入车辆行驶证号"></el-input>
                            </el-form-item>
                            <el-form-item label="车辆类型:" prop="vehicleType">
                                <el-select v-model="addVehicleInfoForm.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="vehicleLoad">
                                <el-input-number style="width: 200px" v-model="addVehicleInfoForm.vehicleLoad"
                                                 :min="10" :max="10000" controls-position="right">
                                </el-input-number>
                                <span style="margin-left:5px;font-size: 18px">Kg</span>
                            </el-form-item>
                            <el-form-item label="有无挂车:" prop="vehicleType">
                                <el-select v-model="addVehicleInfoForm.isTrailer" style="width: 300px" clearable
                                           placeholder="请选择有无挂车">
                                    <el-option
                                            v-for="item in isTrailerList"
                                            :key="item.value"
                                            :label="item.label"
                                            :value="item.value">
                                    </el-option>
                                </el-select>
                            </el-form-item>
                            <el-form-item label="车辆公司:" prop="vehicleCompany">
                                <el-input v-model="addVehicleInfoForm.vehicleCompany" clearable style="width: 300px;"
                                          placeholder="请输入车辆公司"></el-input>
                            </el-form-item>
                            <br>
                        </div>
                    </el-form>
                    <!--底部按钮区域-->
                    <span slot="footer" class="dialog-footer">
                        <el-button @click="addVehicleInfoFormVisible = false">取 消</el-button>
                        <el-button type="primary" :loading="addLoading" @click="addVehicleInfo">增 加</el-button>
                    </span>
                </el-dialog>
            </div>
            <!-- 编辑车辆信息,对话框 -->
            <div>
                <el-dialog
                        title="编辑车辆信息"
                        text-align="center"
                        :visible.sync="editDialogVisible"
                        width="60%" @close="editVehicleInfoDialogClosed">
                    <el-form :model="editVehicleInfoForm" label-width="100px" status-icon
                             :rules="editVehicleInfoFormRules" ref="editVehicleInfoFormRef"
                             :inline="true" align="center"
                             style="background-color: #F5F7FA">
                        <div>
                            <br>
                            <el-form-item label="车牌号码:" prop="licensePlateNumber">
                                <el-input v-model="editVehicleInfoForm.licensePlateNumber" clearable readonly
                                          style="width:250px"
                                          placeholder="请输入车牌号码"></el-input>
                            </el-form-item>
                            <el-form-item label="行驶证号:" prop="drivingLicenseNumber">
                                <el-input v-model="editVehicleInfoForm.drivingLicenseNumber" clearable
                                          style="width:250px"
                                          placeholder="请输入车辆行驶证号"></el-input>
                            </el-form-item>
                            <el-form-item label="车辆类型:" prop="vehicleType">
                                <el-select v-model="editVehicleInfoForm.vehicleType" clearable
                                           style="width:250px"
                                           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="vehicleLoad">
                                <el-input-number v-model="editVehicleInfoForm.vehicleLoad"
                                                 clearable style="width:220px"
                                                 :min="10" :max="10000" controls-position="right">
                                </el-input-number>
                                <span style="margin-left:5px;font-size: 18px">Kg</span>
                            </el-form-item>
                            <el-form-item label="车辆状态:" prop="vehicleStatus">
                                <el-select v-model="editVehicleInfoForm.vehicleStatus" clearable
                                           style="width:250px"
                                           clearable placeholder="请选择车辆状态">
                                    <el-option
                                            v-for="item in vehicleStatusList"
                                            :key="item.value"
                                            :label="item.label"
                                            :value="item.value">
                                    </el-option>
                                </el-select>
                            </el-form-item>
                            <el-form-item label="有无挂车:" prop="vehicleType">
                                <el-select v-model="editVehicleInfoForm.isTrailer" clearable
                                           style="width:250px" clearable
                                           placeholder="请选择有无挂车">
                                    <el-option
                                            v-for="item in isTrailerList"
                                            :key="item.value"
                                            :label="item.label"
                                            :value="item.value">
                                    </el-option>
                                </el-select>
                            </el-form-item>
                            <el-form-item label="车辆公司:" prop="vehicleCompany">
                                <el-input v-model="editVehicleInfoForm.vehicleCompany" clearable
                                          style="width:250px"
                                          placeholder="请输入车辆公司"></el-input>
                            </el-form-item>
                            <el-form-item label="空闲时间:" prop="freetime">
                                <el-date-picker v-model="editVehicleInfoForm.freetime" type="datetime"
                                                style="width:250px"
                                                placeholder="选择调度时间"></el-date-picker>
                            </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="editVehicleInfo">编 辑</el-button>
                    </span>
                </el-dialog>
            </div>
        </el-main>
    </el-container>
</template>

<script>
    import {
        selectVehicleInfoList,
        insertVehicleInfo,
        updateVehicleInfo,
        batchRemoveVehicleInfo,
        deleteVehicleInfo, deleteDispatchNote
    } from "../../api/dispatch_api";

    export default {
        name: "dispatch_api",
        created() {
            //获取车辆信息列表
            this.getVehicleInfoList();
        },
        data() {
            return {
                /**
                 * 查询信息列表
                 */
                queryInfo: {
                    //车牌号
                    licensePlateNumber: '',
                    //车辆所属公司
                    vehicleCompany: '',
                    //车辆状态
                    vehicleStatus: '',
                    //车辆类型
                    vehicleType: '',
                    //当前的页数
                    pageNum: 1,
                    //当前每页显示多少条数据
                    pageSize: 10
                },
                /**
                 * 设置,总条数
                 */
                total: 0,
                /**
                 * 批量删除,选中列表
                 */
                sels: [],
                /**
                 * 车辆信息列表
                 */
                vehicleInfoList: [],
                /**
                 * 新增车辆信息表单
                 */
                addVehicleInfoForm: {
                    vehicleType: '2',
                    licensePlateNumber: '',
                    vehicleLoad: '',
                    isTrailer: '2',
                    vehicleCompany: '',
                    drivingLicenseNumber: '',
                },
                /**
                 * 编辑车辆信息表单
                 */
                editVehicleInfoForm: {},
                /**
                 * 控制,添加车辆信息对话框的显示与隐藏
                 */
                addVehicleInfoFormVisible: false,
                /**
                 * 控制,编辑车辆信息对话框的显示与隐藏
                 */
                editDialogVisible: false,
                /* 列表加载 */
                listLoading: false,
                /* 添加加载 */
                addLoading: false,
                /* 编辑加载 */
                editLoading: false,
                /* 删除加载 */
                delLoading: false,
                /**
                 * 车辆类型,选项列表
                 */
                vehicleTypeList: [
                    {
                        value: '1',
                        label: '重型货车'
                    },
                    {
                        value: '2',
                        label: '中型货车'
                    },
                    {
                        value: '3',
                        label: '经济货车'
                    },
                    {
                        value: '4',
                        label: '微型货车'
                    },
                    {
                        value: '5',
                        label: '拖车'
                    },
                    {
                        value: '6',
                        label: '叉车'
                    }
                ],
                /**
                 * 挂车与否,列表
                 */
                isTrailerList: [
                    {
                        value: '1',
                        label: '有挂车'
                    },
                    {
                        value: '2',
                        label: '没有挂车'
                    },
                ],
                /**
                 * 车辆状态列表
                 */
                vehicleStatusList: [
                    {
                        value: '1',
                        label: '空闲状态'
                    },
                    {
                        value: '2',
                        label: '执行状态'
                    },
                    {
                        value: '3',
                        label: '在修状态'
                    },
                    {
                        value: '4',
                        label: '损坏未修状态'
                    },
                    {
                        value: '5',
                        label: '保养状态'
                    },
                ],
                /**
                 * 添加车辆信息表单的验证规则对象
                 */
                addVehicleInfoFormRules: {
                    vehicleType: [
                        {required: true, message: '请选择车辆类型', trigger: ['blur', 'change']},
                    ],
                    licensePlateNumber: [
                        {required: true, message: '请输入车牌号', trigger: ['blur', 'change']},
                    ],
                    vehicleLoad: [
                        {required: true, message: '请输入车辆载重', trigger: ['blur', 'change']},
                    ],
                    isTrailer: [
                        {required: true, message: '请选择有无挂车', trigger: ['blur', 'change']},
                    ],
                    vehicleCompany: [
                        {required: true, message: '请输入车辆公司名称', trigger: ['blur', 'change']},
                    ],
                    drivingLicenseNumber: [
                        {required: true, message: '请输入车辆行驶证号', trigger: ['blur', 'change']},
                    ],
                },
                /**
                 * 编辑车辆信息表单的验证规则对象
                 */
                editVehicleInfoFormRules: {
                    vehicleStatus: [
                        {required: true, message: '请选择车辆状态', trigger: ['blur', 'change']},
                    ],
                    freetime: [
                        {required: true, message: '请选择开始空闲时间', trigger: ['blur', 'change']},
                    ],
                    vehicleType: [
                        {required: true, message: '请选择车辆类型', trigger: ['blur', 'change']},
                    ],
                    licensePlateNumber: [
                        {required: true, message: '请输入车牌号', trigger: ['blur', 'change']},
                    ],
                    vehicleLoad: [
                        {required: true, message: '请输入车辆载重', trigger: ['blur', 'change']},
                    ],
                    isTrailer: [
                        {required: true, message: '请选择有无挂车', trigger: ['blur', 'change']},
                    ],
                    vehicleCompany: [
                        {required: true, message: '请输入车辆公司名称', trigger: ['blur', 'change']},
                    ],
                    drivingLicenseNumber: [
                        {required: true, message: '请输入车辆行驶证号', trigger: ['blur', 'change']},
                    ],
                }
            }
        },
        methods: {
            /**
             * 管理员端,获取车辆信息列表
             */
            getVehicleInfoList() {
                //开启加载
                this.listLoading = true;
                selectVehicleInfoList(this.queryInfo).then((response) => {
                    let res = response.data;
                    if (res.code !== '200') {
                        //关闭加载
                        this.listLoading = false;
                        return this.$message.error('获取车辆信息列表失败');
                    }
                    // 获取车辆信息列表数据
                    this.vehicleInfoList = res.data.list;
                    // 获取列表的总记录数
                    this.total = res.data.total;
                    //关闭加载
                    this.listLoading = false;
                    this.$message.success('获取车辆信息列表,成功');
                }).catch(error => {
                    this.listLoading = false;
                    this.$message.error(error.toString());
                });
            },
            /**
             * 管理员端,增加车辆信息
             */
            addVehicleInfo() {
                /*进行表单的预验证*/
                this.$refs.addVehicleInfoFormRef.validate(valid => {
                    // 未通过,表单预校验
                    if (!valid) return;
                    // 通过,表单预检验,发起添加车辆信息的网络请求,开启加载
                    this.addLoading = true;
                    insertVehicleInfo(this.addVehicleInfoForm).then((response) => {
                        let res = response.data;
                        //添加调度记录信息,失败
                        if (res.code !== '200') {
                            //关闭加载
                            this.addLoading = false;
                            if(res.code === '406'){
                                return this.$message.error('该车牌号已存在,请重新填写');
                            }
                            return this.$message.error('添加车辆信息,失败');
                        }
                        //关闭加载
                        this.addLoading = false;
                        this.$message.success('添加调度记录信息,成功');
                        //隐藏对话框
                        this.addVehicleInfoFormVisible = false;
                        //刷新车辆信息列表
                        this.getVehicleInfoList();
                    }).catch(error => {
                        this.addLoading = false;
                        this.$message.error(error.toString());
                    });

                })
            },
            /**
             * 管理员端,删除车辆信息
             */
            removeVehicleInfo(index, row) {
                //弹框询问是否删除车辆信息
                this.$confirm('此操作永久删除该车辆信息, 是否继续?', '警告', {
                        confirmButtonText: '确定删除',
                        cancelButtonText: '取消',
                        type: 'warning'
                    }
                ).then(() => {
                    //开启加载
                    this.delLoading = true;
                    deleteVehicleInfo(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.getVehicleInfoList();
                    }).catch(error => {
                        this.delLoading = false;
                        this.$message.error(error.toString());
                    });
                }).catch(() => {
                });
            },

            /**
             * 批量删除,之前的选中
             */
            selsChange: function (sels) {
                this.sels = sels;
            },
            /**
             * 车辆状态为执行状态的时候,无法被选中
             */
            isSelectable(row, index) {
                if (row.vehicleStatus === '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};
                    batchRemoveVehicleInfo(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.getVehicleInfoList();
                    }).catch(error => {
                        this.delLoading = false;
                        this.$message.error(error.toString());
                    });
                }).catch(() => {
                });
            },
            /**
             * 管理员端,编辑车辆信息
             */
            editVehicleInfo() {
                /*进行表单的预验证*/
                this.$refs.editVehicleInfoFormRef.validate(valid => {
                    // 未通过,表单预校验
                    if (!valid) return;
                    // 通过,表单预校验,开启加载
                    this.editLoading = true;
                    updateVehicleInfo(this.editVehicleInfoForm).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.getVehicleInfoList();
                    }).catch(error => {
                        this.editLoading = false;
                        this.$message.error(error.toString());
                    });
                })
            },

            /**
             * 添加车辆信息对话框,关闭时,重置对话框
             */
            addVehicleInfoDialogClosed() {
                this.$refs.addVehicleInfoFormRef.resetFields();
            },
            /**
             * 编辑车辆信息对话框,关闭时,重置对话框
             */
            editVehicleInfoDialogClosed() {
                this.$refs.editVehicleInfoFormRef.resetFields();
            },
            /**
             * 打开编辑车辆信息对话框
             */
            showEditDialogVisible(index, row) {
                this.editVehicleInfoForm = Object.assign({}, row);
                this.editDialogVisible = true;
            },
            /**
             * 监听pageSize改变的事件
             */
            handleSizeChange(newSize) {
                this.queryInfo.pageSize = newSize;
                //刷新车辆信息列表
                this.getVehicleInfoList();

            },
            /**
             * 监听当前页码值改变的事件
             */
            handleCurrentChange(newPage) {
                this.queryInfo.pageNum = newPage;
                //刷新车辆信息列表
                this.getVehicleInfoList();
            },
        }
    }
</script>

<style scoped>

</style>