作者 zhuzhaoping

合并分支 'master_dev' 到 'master'

Master dev



查看合并请求 !15
@@ -3,4 +3,23 @@ import http from "../http"; @@ -3,4 +3,23 @@ import http from "../http";
3 3
4 let baseServiceURL = 'wms-server-warehouse' 4 let baseServiceURL = 'wms-server-warehouse'
5 5
  6 +
  7 +//车辆定位
6 export const selectVehicle = params => { return axios.get(`${baseServiceURL}/map/location/lastlocation`, { params: params }); }; 8 export const selectVehicle = params => { return axios.get(`${baseServiceURL}/map/location/lastlocation`, { params: params }); };
  9 +//出任务
  10 +export const insertSelective = params => { return http.post(`${baseServiceURL}/map/location/insertSelective`, params); };
  11 +
  12 +
  13 +//车辆轨迹
  14 +export const historyTrack = params => { return axios.get(`${baseServiceURL}/map/location/historyTrack`, { params: params }); };
  15 +
  16 +//出勤历史
  17 +export const selectHistroy = params => { return axios.get(`${baseServiceURL}/map/location/selectHistroy`, { params: params }); };
  18 +
  19 +//出勤车辆
  20 +export const selectList = params => { return axios.get(`${baseServiceURL}/map/location/selectList`, { params: params }); };
  21 +export const DoneTask = params => { return http.post(`${baseServiceURL}/map/location/DoneTask`, params); };
  22 +
  23 +//根据用户查询所属出勤车辆
  24 +export const selectNameList = params => { return axios.get(`${baseServiceURL}/map/location/selectNameList`, { params: params }); };
  25 +
  1 +import axios from 'axios'
  2 +import http from "../http";
  3 +
  4 +let base = 'byonet-import/verecord';
  5 +
  6 +export const list = params => {return http.get(`${base}/list`, params);};
  7 +
  8 +export const remove = params => {return axios.post(`${base}/remove`, params);};
  9 +
  10 +export const save = params => {return http.post(`${base}/save`, params);};
  11 +
  12 +export const edit = params => {return http.put(`${base}/edit`, params);};
  13 +
  14 +
  15 +
@@ -53,3 +53,15 @@ export const loginedUserInfo = () => { @@ -53,3 +53,15 @@ export const loginedUserInfo = () => {
53 } 53 }
54 } 54 }
55 }; 55 };
  56 +
  57 +export const isAdmin = () => {
  58 + let session_user_info = sessionStorage.getItem('user');
  59 + if (session_user_info && jsutil.checkNull(session_user_info)){
  60 + let isAdmin = JSON.parse(sessionStorage.getItem('user')).companyName;
  61 + if (isAdmin === "ROLE_admin" || isAdmin=== "ROLE_kako"){
  62 + return true;
  63 + }
  64 + }else {
  65 + return false;
  66 + }
  67 +};
@@ -111,6 +111,9 @@ import definition from './views/technological/definition.vue' @@ -111,6 +111,9 @@ import definition from './views/technological/definition.vue'
111 111
112 //仓库场站管理 112 //仓库场站管理
113 import vehicle from './views/deploy/vehicle.vue' 113 import vehicle from './views/deploy/vehicle.vue'
  114 +import trajectory from './views/deploy/trajectory.vue'
  115 +import attendance from './views/deploy/attendance.vue'
  116 +import conveyance from './views/deploy/conveyance.vue'
114 import station from './views/deploy/station.vue' 117 import station from './views/deploy/station.vue'
115 import house from './views/deploy/house.vue' 118 import house from './views/deploy/house.vue'
116 import inventroyrecord from './views/deploy/inventroyrecord.vue' 119 import inventroyrecord from './views/deploy/inventroyrecord.vue'
@@ -564,6 +567,9 @@ let routes = [ @@ -564,6 +567,9 @@ let routes = [
564 iconCls:'el-icon-goods', 567 iconCls:'el-icon-goods',
565 children:[ 568 children:[
566 {path:'/vehicle',component:vehicle,name:'车辆定位'}, 569 {path:'/vehicle',component:vehicle,name:'车辆定位'},
  570 + {path:'/trajectory',component:trajectory,name:'车辆轨迹'},
  571 + {path:'/attendance',component:attendance,name:'出勤历史'},
  572 + {path:'/conveyance',component:conveyance,name:'出勤车辆'},
567 {path:'/station',component:station,name:'场站管理'}, 573 {path:'/station',component:station,name:'场站管理'},
568 {path:'/house',component:house,name:'仓库管理'}, 574 {path:'/house',component:house,name:'仓库管理'},
569 {path:'/inventroyrecord',component:inventroyrecord,name:'库存变更记录'}, 575 {path:'/inventroyrecord',component:inventroyrecord,name:'库存变更记录'},
@@ -655,7 +661,7 @@ let routes = [ @@ -655,7 +661,7 @@ let routes = [
655 name: '车辆调度管理', 661 name: '车辆调度管理',
656 iconCls: 'el-icon-truck', 662 iconCls: 'el-icon-truck',
657 children: [ 663 children: [
658 - {path: '/dispatch', component: Dispatch, name: '车辆调度'}, 664 + {path: '/dispatch', component: Dispatch, name: '车辆管理'},
659 {path: '/dispatchNode', component: DispatchNode, name: '调度记录'}, 665 {path: '/dispatchNode', component: DispatchNode, name: '调度记录'},
660 {path: '/vehicleInfo', component: VehicleInfo, name: '车辆信息'}, 666 {path: '/vehicleInfo', component: VehicleInfo, name: '车辆信息'},
661 {path: '/driverInfo', component: DriverInfo, name: '驾驶员信息'}, 667 {path: '/driverInfo', component: DriverInfo, name: '驾驶员信息'},
  1 +<template>
  2 + <el-row>
  3 + <el-card style="background-color: #F5F7FA">
  4 + <!-- 搜索区域-->
  5 + <el-row class="toolbar">
  6 + <el-form :model="queryInfo" :rules="rules" ref="ruleForm">
  7 + <el-col :span="6">
  8 + <el-form-item label="" prop="lisenceNo">
  9 + <el-input v-model="queryInfo.lisenceNo" size="small" style="width: 170px"
  10 + placeholder="车牌号" clearable required>
  11 + <template slot="prepend">车牌号</template>
  12 + </el-input>
  13 + </el-form-item>
  14 + </el-col>
  15 + <el-col :span="2">
  16 + <el-button type="primary" icon="el-icon-search" size="small" @click="getList()">
  17 + 查询
  18 + </el-button>
  19 +<!-- <el-button type="success" icon="el-icon-edit" size="small" @click="applyAdd()">新增</el-button>-->
  20 + </el-col>
  21 + </el-form>
  22 + </el-row>
  23 + <!-- 列表区域-->
  24 + <el-row>
  25 + <template>
  26 + <el-table
  27 + :data="tableData"
  28 + border
  29 + :cell-style="{textAlign:'center'}"
  30 + style="border-radius: 10px 10px 0px 0px;line-height: 25px"
  31 + :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="small"
  32 + >
  33 + <el-table-column
  34 + fixed
  35 + prop="lisenceNo"
  36 + label="车牌号"
  37 + width="150">
  38 + </el-table-column>
  39 + <el-table-column
  40 + prop="username"
  41 + label="用户名"
  42 + width="150">
  43 + </el-table-column>
  44 + <el-table-column
  45 + prop="starttime"
  46 + label="开始时间"
  47 + width="200">
  48 + </el-table-column>
  49 + <el-table-column
  50 + prop="endtime"
  51 + label="结束时间"
  52 + width="200">
  53 + </el-table-column>
  54 + </el-table>
  55 + </template>
  56 + </el-row>
  57 + <el-row style="margin-top: 10px" class="toolbar">
  58 + <el-pagination
  59 + @size-change="handleSizeChange"
  60 + @current-change="handleCurrentChange"
  61 + :current-page="queryInfo.pageSize"
  62 + :page-size="queryInfo.pageNum"
  63 + :page-sizes="[10, 50, 100, 500]"
  64 + layout="total, sizes, prev, pager, next, jumper"
  65 + :total="total">
  66 + </el-pagination>
  67 + </el-row>
  68 + <el-row>
  69 + <el-dialog :title="dialogMap[dialogApply]" :visible.sync="apply_dialog" width="70%" >
  70 + <el-form :model="addForm" :rules="rules" ref="addForm" style="margin-top: 40px">
  71 + <el-row>
  72 + <el-col :span="11">
  73 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderAuthorName">
  74 + <el-input v-model="addForm.orderAuthorName" autocomplete="off" size="small" style="width: 350px">
  75 + <template slot="prepend">结算人名称</template>
  76 + </el-input>
  77 + </el-form-item>
  78 + </el-col>
  79 + <el-col :span="12">
  80 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderAuthorid">
  81 + <el-input v-model="addForm.orderAuthorid" autocomplete="off" size="small" style="width: 350px">
  82 + <template slot="prepend">结算人ID</template>
  83 + </el-input>
  84 + </el-form-item>
  85 + </el-col>
  86 + </el-row>
  87 + <el-row>
  88 + <el-col :span="11">
  89 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderOperatorId">
  90 + <el-input v-model="addForm.orderOperatorId" autocomplete="off" size="small" style="width: 350px">
  91 + <template slot="prepend">经办人</template>
  92 + </el-input>
  93 + </el-form-item>
  94 + </el-col>
  95 + <el-col :span="12">
  96 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderTotalAmount">
  97 + <el-input v-model="addForm.orderTotalAmount" autocomplete="off" size="small" style="width: 350px">
  98 + <template slot="prepend">订单总额度</template>
  99 + </el-input>
  100 + </el-form-item>
  101 + </el-col>
  102 + </el-row>
  103 + <el-row>
  104 + <el-col :span="11">
  105 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderType">
  106 + <div class="my-text-area">
  107 + <div class="el-input-group__prepend prepand">支付方式</div>
  108 + <el-select v-model="addForm.orderType" placeholder="请选择生效状态" size="small" style="width: 260px">
  109 + <el-option label="现金" value="现金"></el-option>
  110 + <el-option label="微信" value="微信"></el-option>
  111 + <el-option label="支付宝" value="支付宝"></el-option>
  112 + <el-option label="银行转账" value="银行转账"></el-option>
  113 + </el-select>
  114 + </div>
  115 + </el-form-item>
  116 + </el-col>
  117 + <el-col :span="12">
  118 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderState">
  119 + <div class="my-text-area">
  120 + <div class="el-input-group__prepend prepand">支付状态</div>
  121 + <el-select v-model="addForm.orderState" placeholder="请选择生效状态" size="small" style="width: 260px">
  122 + <el-option label="未支付" value="000"></el-option>
  123 + <el-option label="已支付" value="001"></el-option>
  124 + <el-option label="作废" value="111"></el-option>
  125 + </el-select>
  126 + </div>
  127 + </el-form-item>
  128 + </el-col>
  129 + </el-row>
  130 + <el-row>
  131 + <el-col :span="11">
  132 + <el-form-item label=" " :label-width="formLabelWidth" prop="orderRemark">
  133 + <el-input v-model="addForm.orderRemark" autocomplete="off" size="small" style="width: 350px">
  134 + <template slot="prepend">备注</template>
  135 + </el-input>
  136 + </el-form-item>
  137 + </el-col>
  138 + </el-row>
  139 + </el-form>
  140 + <div slot="footer" class="dialog-footer">
  141 + <el-button @click="apply_dialog = false" size="small">取 消</el-button>
  142 + <el-button type="primary" @click="dialogApply==='create'?add():edit()" size="small">提 交</el-button>
  143 + </div>
  144 + </el-dialog>
  145 + </el-row>
  146 + </el-card>
  147 + </el-row>
  148 +</template>
  149 +
  150 +<script>
  151 + import {selectHistroy} from '../../api/consigner/vehicle';
  152 +
  153 + export default {
  154 + name: "attendance",
  155 + data() {
  156 + return {
  157 + queryInfo: {
  158 + lisenceNo:'',
  159 + // busnessType:'',
  160 + // state:'',
  161 + // 当前页数
  162 + pageNum: 1,
  163 + // 每页几条数据
  164 + pageSize: 10,
  165 + },
  166 + total: 0,
  167 + tableData:[],
  168 + dialogMap: {
  169 + update: '编辑',
  170 + create: '新增'
  171 + },
  172 + dis: undefined,
  173 + dialogApply: 'create',
  174 + apply_dialog: false,
  175 + addForm: {
  176 + orderAuthorName: '',
  177 + orderAuthorid: '',
  178 + orderCreatTime: '',
  179 + orderOperatorId: '',
  180 + orderRemark: '',
  181 + orderState: '',
  182 + orderTotalAmount:'',
  183 + orderUpdateTime:'',
  184 + orderType:''
  185 + },
  186 + formLabelWidth: '120px',
  187 + rules: {
  188 + companyId: [
  189 + { required: true, message: '必填', trigger: 'change' }
  190 + ],
  191 + // needCount: [
  192 + // { required: true, message: '请输入需要车辆数量', trigger: 'blur' },
  193 + // ],
  194 + // orginStation: [
  195 + // { required: true, message: '请输入起始场站', trigger: 'blur' },
  196 + // ],
  197 + // endStation: [
  198 + // { required: true, message: '请输入目的场站', trigger: 'blur' },
  199 + // ],
  200 + },
  201 + }
  202 + },
  203 + methods: {
  204 + handleSizeChange(val) {
  205 + this.queryInfo.pageSize = val
  206 + this.getList()
  207 + },
  208 + handleCurrentChange(val) {
  209 + this.queryInfo.pageNum = val
  210 + this.getList()
  211 + },
  212 + getList() {
  213 + const _this = this
  214 + selectHistroy(this.queryInfo).then((response) => {
  215 + const res = response.data
  216 + console.log(response.data)
  217 + if (res.code !== '200') {
  218 + return _this.$message.error('获取消息收发记录,失败!')
  219 + }
  220 + // 获取列表数据
  221 + _this.tableData = res.data.list
  222 + // 获取列表的总记录数
  223 + _this.total = res.data.total
  224 + _this.$message.success('获取消息收发记录,成功!')
  225 + }).catch(error => {
  226 + // 关闭加载
  227 + _this.$message.error(error.toString())
  228 + })
  229 + },
  230 + // 添加对话框,打开事件
  231 + applyAdd() {
  232 + this.addForm = {
  233 + orderAuthorName: '',
  234 + orderAuthorid: '',
  235 + orderCreatTime: '',
  236 + orderOperatorId: '',
  237 + orderRemark: '',
  238 + orderState: '',
  239 + orderTotalAmount:'',
  240 + orderUpdateTime:'',
  241 + orderType:''
  242 + };
  243 + this.dialogApply= 'create';
  244 + this.dis= 'create';
  245 + this.apply_dialog = true;
  246 + },
  247 + // 添加功能
  248 + add() {
  249 + this.$refs.addForm.validate(valid => {
  250 + // 未通过,表单预校验
  251 + if (!valid) return;
  252 + save(this.addForm).then((response) => {
  253 + let res = response.data;
  254 + // 添加失败
  255 + if (res.code !== '200') {
  256 + return this.$message.error(res.msg);
  257 + }
  258 + // 添加,成功
  259 + this.$message.success(res.msg);
  260 + // 隐藏对话框
  261 + this.apply_dialog = false;
  262 + // 刷新列表
  263 + this.getList();
  264 + }).catch(error => {
  265 + this.$message.error(error.toString());
  266 + });
  267 + })
  268 + },
  269 +// 打开编辑
  270 + applyEdit(row) {
  271 + this.apply_dialog = true;
  272 + this.dialogApply = 'update';
  273 + this.dis= 'update';
  274 + this.addForm=row;
  275 + },
  276 + // 编辑功能
  277 + edit() {
  278 + // 进行表单的预验证
  279 + this.$refs.addForm.validate(valid => {
  280 + // 未通过,表单预校验
  281 + if (!valid) return
  282 + edit(this.addForm).then((response) => {
  283 + // console.log(row)
  284 + const res = response.data
  285 + if (res.code != '200') {
  286 + return this.$message.error(res.msg)
  287 + }
  288 + this.$message.success(res.msg)
  289 + // 隐藏对话框
  290 + this.apply_dialog = false
  291 + // 刷新列表
  292 + this.getList()
  293 + }).catch(error => {
  294 + this.$message.error(error.toString())
  295 + })
  296 + })
  297 + },
  298 + // 删除
  299 + applyDel(row) {
  300 + // 弹框询问是否删除?
  301 + this.$confirm('此操作永久删除该消息收发记录, 是否继续?', '警告', {
  302 + confirmButtonText: '确定删除',
  303 + cancelButtonText: '取消',
  304 + type: 'warning'
  305 + }
  306 + ).then(() => {
  307 + // console.log(row);
  308 + remove(row).then((response) => {
  309 + // console.log(row)
  310 + const res = response.data
  311 + this.$message.success(res.msg)
  312 + this.getList()
  313 + }).catch(error => {
  314 + this.$message.error(error)
  315 + })
  316 + }).catch(() => {
  317 + })
  318 + },
  319 + },
  320 + mounted() {
  321 + this.getList();
  322 + // this.getYardList();
  323 +
  324 + }
  325 +
  326 + }
  327 +</script>
  328 +
  329 +<style scoped>
  330 + .toolbar{
  331 + height: 60px;
  332 + background-color: white;
  333 + /*line-height: 60px;*/
  334 + vertical-align: middle;
  335 + border-radius: 5px 5px 5px 5px;
  336 + padding: 15px 0 0 20px;
  337 + box-shadow: 0px 5px 5px #e5e8eb;
  338 + }
  339 + .my-text-area .prepand{
  340 + float: left;
  341 + width:89px;
  342 + height: 28px;
  343 + font-size: 12px;
  344 + line-height: 28px;
  345 + }
  346 +</style>
  347 +<style>
  348 + .my-text-area .el-textarea__inner{
  349 + min-height: 28px;
  350 + height: 28px;
  351 + border-bottom-left-radius: 0;
  352 + border-top-left-radius: 0;
  353 + }
  354 +</style>
  1 +<template>
  2 + <el-row>
  3 + <el-card style="background-color: #F5F7FA">
  4 + <!-- 搜索区域-->
  5 + <el-row class="toolbar">
  6 + <el-form :model="queryInfo">
  7 + <el-col :span="6">
  8 + <el-form-item label="" prop="lisenceNo">
  9 + <el-input v-model="queryInfo.lisenceNo" size="small" style="width: 170px"
  10 + placeholder="车牌号" clearable required>
  11 + <template slot="prepend">车牌号</template>
  12 + </el-input>
  13 + </el-form-item>
  14 + </el-col>
  15 + <el-col :span="2">
  16 + <el-button type="primary" icon="el-icon-search" size="small" @click="getList()">
  17 + 查询
  18 + </el-button>
  19 + <!-- <el-button type="success" icon="el-icon-edit" size="small" @click="applyAdd()">新增</el-button>-->
  20 + </el-col>
  21 + </el-form>
  22 + </el-row>
  23 + <!-- 列表区域-->
  24 + <el-row>
  25 + <el-table
  26 + :data="tableData"
  27 + border
  28 + :cell-style="{textAlign:'center'}"
  29 + style="border-radius: 10px 10px 0px 0px;line-height: 25px"
  30 + :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="small"
  31 + >
  32 + <el-table-column
  33 + fixed
  34 + prop="lisenceNo"
  35 + label="车牌号"
  36 + width="120">
  37 + </el-table-column>
  38 + <el-table-column
  39 + prop="username"
  40 + label="用户名"
  41 + width="120">
  42 + </el-table-column>
  43 + <el-table-column
  44 + prop="starttime"
  45 + label="开始时间">
  46 + </el-table-column>
  47 + <el-table-column
  48 + fixed="right"
  49 + label="操作"
  50 + width="120">
  51 + <template slot-scope="scope">
  52 + <el-button type="danger" size="mini" @click="applyEnd(scope.row)">结束出勤</el-button>
  53 + </template>
  54 + </el-table-column>
  55 + </el-table>
  56 + </el-row>
  57 + <el-row style="margin-top: 10px" class="toolbar">
  58 + <el-pagination
  59 + @size-change="handleSizeChange"
  60 + @current-change="handleCurrentChange"
  61 + :current-page="queryInfo.pageSize"
  62 + :page-size="queryInfo.pageNum"
  63 + :page-sizes="[10, 50, 100, 500]"
  64 + layout="total, sizes, prev, pager, next, jumper"
  65 + :total="total">
  66 + </el-pagination>
  67 + </el-row>
  68 + </el-card>
  69 + </el-row>
  70 +</template>
  71 +
  72 +<script>
  73 + import {selectList,DoneTask} from '../../api/consigner/vehicle';
  74 +
  75 + export default {
  76 + data() {
  77 + return {
  78 + queryInfo: {
  79 + lisenceNo:'',
  80 + // 当前页数
  81 + pageNum: 1,
  82 + // 每页几条数据
  83 + pageSize: 10,
  84 + },
  85 + total: 0,
  86 + tableData:[],
  87 + }
  88 + },
  89 + methods: {
  90 + handleSizeChange(val) {
  91 + this.queryInfo.pageSize = val
  92 + this.getList()
  93 + },
  94 + handleCurrentChange(val) {
  95 + this.queryInfo.pageNum = val
  96 + this.getList()
  97 + },
  98 + getList() {
  99 + const _this = this
  100 + selectList(this.queryInfo).then((response) => {
  101 + const res = response.data
  102 + console.log(response.data)
  103 + if (res.code !== '200') {
  104 + return _this.$message.error('获取消息收发记录,失败!')
  105 + }
  106 + // 获取列表数据
  107 + _this.tableData = res.data.list;
  108 + // 获取列表的总记录数
  109 + _this.total = res.data.total
  110 + _this.$message.success('获取消息收发记录,成功!')
  111 + }).catch(error => {
  112 + // 关闭加载
  113 + _this.$message.error(error.toString())
  114 + })
  115 + },
  116 + // 结束出勤
  117 + applyEnd(row) {
  118 + // 弹框询问是否结束?
  119 + this.$confirm('是否继续?', '警告', {
  120 + confirmButtonText: '确定结束',
  121 + cancelButtonText: '取消',
  122 + type: 'warning'
  123 + }
  124 + ).then(() => {
  125 + DoneTask(row).then((response) => {
  126 + const res = response.data
  127 + this.$message.success(res.msg)
  128 + this.getList()
  129 + }).catch(error => {
  130 + this.$message.error(error)
  131 + })
  132 + }).catch(() => {
  133 + })
  134 + },
  135 + },
  136 + mounted() {
  137 + this.getList();
  138 + }
  139 +
  140 + }
  141 +</script>
  142 +
  1 +<template>
  2 + <div>
  3 + <el-row>
  4 + <el-card style="background-color: #F5F7FA">
  5 + <el-row>
  6 + <el-form :model="queryInfo" :rules="rules" ref="ruleForm">
  7 + <el-col :span="4.5">
  8 + <el-form-item label="" prop="vclN">
  9 + <el-input v-model="queryInfo.vclN" size="small" style="width: 170px"
  10 + placeholder="车牌号" clearable required>
  11 + <template slot="prepend">车牌号</template>
  12 + </el-input>
  13 + </el-form-item>
  14 + </el-col>
  15 + <el-col :span="4.5">
  16 + <el-form-item label="" prop="vco">
  17 + <div class="my-text-area">
  18 + <div class="el-input-group__prepend prepand">车牌类型</div>
  19 + <el-select v-model="queryInfo.vco" placeholder="车牌类型" style="width: 70px">
  20 + <el-option label="蓝牌" value="1"></el-option>
  21 + <el-option label="黄牌" value="2"></el-option>
  22 + <el-option label="绿牌" value="3"></el-option>
  23 + </el-select>
  24 + </div>
  25 + </el-form-item>
  26 + </el-col>
  27 + <el-col :span="6.5">
  28 + <el-form-item label="" prop="qryEtm">
  29 + <div class="my-text-area">
  30 + <div class="el-input-group__prepend prepand">开始时间</div>
  31 + <!-- <span class="demonstration">带快捷选项</span>-->
  32 + <el-date-picker
  33 + v-model="queryInfo.qryEtm"
  34 + type="datetime"
  35 + value-format="yyyy-MM-dd HH:mm:ss"
  36 + format="yyyy-MM-dd HH:mm:ss"
  37 + placeholder="选择日期时间"
  38 + align="right" style="width: 170px"
  39 + :picker-options="pickerOptions">
  40 + </el-date-picker>
  41 + </div>
  42 + </el-form-item>
  43 + </el-col>
  44 + <el-col :span="6.5">
  45 + <el-form-item label="" prop="qryBtm">
  46 + <div class="my-text-area">
  47 + <div class="el-input-group__prepend prepand">结束时间</div>
  48 + <!-- <span class="demonstration">带快捷选项</span>-->
  49 + <el-date-picker
  50 + v-model="queryInfo.qryBtm"
  51 + type="datetime"
  52 + value-format="yyyy-MM-dd HH:mm:ss"
  53 + format="yyyy-MM-dd HH:mm:ss"
  54 + placeholder="选择日期时间"
  55 + align="right" style="width: 170px"
  56 + :picker-options="pickerOptions">
  57 + </el-date-picker>
  58 + </div>
  59 + </el-form-item>
  60 + </el-col>
  61 + </el-form>
  62 + <el-col :span="1">
  63 + <el-button type="primary" size="mini" @click="getList()">
  64 + 查询
  65 + </el-button>
  66 + </el-col>
  67 + </el-row>
  68 + </el-card>
  69 + </el-row>
  70 + <div id="mapContainer" ref="mapContainer" style="width: 100%; height: 500px;"></div>
  71 + </div>
  72 +</template>
  73 +<script>
  74 + import AMapLoader from '@amap/amap-jsapi-loader';
  75 + import { historyTrack } from '../../api/consigner/vehicle';
  76 +
  77 +
  78 + export default {
  79 + data() {
  80 + return {
  81 + mapInstance: null,
  82 + queryInfo: {
  83 + vclN: '',
  84 + vco: '2',
  85 + //开始时间
  86 + qryEtm: '',
  87 + //结束时间
  88 + qryBtm: '',
  89 + },
  90 + pickerOptions: {
  91 + shortcuts: [{
  92 + text: '最近一周',
  93 + onClick(picker) {
  94 + const end = new Date();
  95 + const start = new Date();
  96 + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  97 + picker.$emit('pick', [start, end]);
  98 + }
  99 + }, {
  100 + text: '最近一个月',
  101 + onClick(picker) {
  102 + const end = new Date();
  103 + const start = new Date();
  104 + start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  105 + picker.$emit('pick', [start, end]);
  106 + }
  107 + }, {
  108 + text: '最近三个月',
  109 + onClick(picker) {
  110 + const end = new Date();
  111 + const start = new Date();
  112 + start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  113 + picker.$emit('pick', [start, end]);
  114 + }
  115 + }]
  116 + },
  117 + tableData:[],
  118 + myArray: [{
  119 + "mlg": "24284.1",
  120 + "agl": "268",
  121 + "gtm": "20211110/000025",
  122 + "hgt": "302",
  123 + "lat": "17783673",
  124 + "lon": "63774741",
  125 + "spd": "0.0"
  126 + },
  127 + {
  128 + "mlg": "24284.1",
  129 + "agl": "268",
  130 + "gtm": "20211110/000055",
  131 + "hgt": "302",
  132 + "lat": "17783673",
  133 + "lon": "63774741",
  134 + "spd": "0.0"
  135 + }],
  136 + convertedCoords: [],
  137 + rules: {
  138 + vclN: [
  139 + { required: true, message: '请输入车牌号', trigger: 'blur' },
  140 + // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  141 + ],
  142 + vco: [
  143 + { required: true, message: '请选择车牌类型', trigger: 'change' }
  144 + ],
  145 + qryEtm: [
  146 + { required: true, message: '请选择开始日期', trigger: 'change' }
  147 + ],
  148 + qryBtm: [
  149 + { required: true, message: '请选择结束日期', trigger: 'change' }
  150 + ],
  151 + }
  152 + };
  153 + },
  154 + computed:{
  155 + },
  156 + methods: {
  157 + getList() {
  158 + this.$refs.ruleForm.validate(valid => {
  159 + if (!valid) return;
  160 + const _this = this;
  161 + historyTrack(this.queryInfo).then((response) => {
  162 + const res = response.data;
  163 + if (res.code !== '200') {
  164 + return _this.$message.error('获取车辆轨迹失败!');
  165 + }
  166 + // 调用initMap方法,并将轨迹数据传递过去
  167 + _this.initMap(res.data.data.trackArray);
  168 + _this.$message.success('获取车辆轨迹成功!');
  169 + }).catch(error => {
  170 + _this.$message.error('获取车辆轨迹失败:' + error.toString());
  171 + });
  172 + })
  173 + },
  174 + initMap(trackArray) {
  175 + const _this = this;
  176 + AMapLoader.load({
  177 + key: 'fdb27c13681d084e85ff8457b5cbe540',
  178 + version: '2.0',
  179 + plugins: [], // 可以加载地图插件,比如定位、地图工具等
  180 + }).then((AMap) => {
  181 + // 创建地图对象并存储在 _this.mapInstance 中
  182 + _this.map = new AMap.Map('mapContainer', {
  183 + zoom: 10, // 设置地图缩放级别
  184 + center: [116.397428, 39.90923], // 设置地图中心点坐标
  185 + });
  186 + // 将轨迹数据添加到地图上
  187 + //var lineArr = trackArray.map((item) => [item.longitude / 600000.0, item.latitude / 600000.0]);
  188 + this.convertedCoords = this.convertBDToAMap(trackArray);
  189 + console.log(this.convertedCoords)
  190 + _this.poly = new AMap.Polyline({
  191 + path: this.convertedCoords, // 设置折线路径
  192 + strokeColor: "#3366ff", // 线颜色
  193 + strokeOpacity: 1, // 线透明度
  194 + strokeWeight: 3, // 线宽
  195 + strokeStyle: "solid", // 线样式
  196 + });
  197 + _this.poly.setMap(_this.map);
  198 + _this.map.setCenter(this.convertedCoords[0])
  199 + //_this.map.setFitView();
  200 + }).catch((err) => {
  201 + console.error('初始化地图失败:', err);
  202 + });
  203 + },
  204 + convertBDToAMap(bdCoordData) {
  205 + const aMapCoordData = [];
  206 + bdCoordData.forEach(coord => {
  207 + const lon = parseFloat(coord.lon) / 600000.0; // 将经度从北斗格式转换为高德地图格式
  208 + const lat = parseFloat(coord.lat) / 600000.0; // 将纬度从北斗格式转换为高德地图格式
  209 + aMapCoordData.push([lon, lat]); // 添加到结果数组
  210 + });
  211 + return aMapCoordData;
  212 + },
  213 +
  214 +
  215 + },
  216 +
  217 + mounted() {
  218 + this.initMap(this.myArray);
  219 + },
  220 + };
  221 +</script>
  222 +
  223 +<style scoped>
  224 + .my-text-area .prepand{
  225 + float: left;
  226 + width:89px;
  227 + height: 28px;
  228 + font-size: 12px;
  229 + line-height: 28px;
  230 + }
  231 +</style>
  232 +<style>
  233 + .my-text-area .el-textarea__inner{
  234 + min-height: 28px;
  235 + height: 28px;
  236 + border-bottom-left-radius: 0;
  237 + border-top-left-radius: 0;
  238 + }
  239 + .rounded-corner {
  240 + border-radius: 10px; /* 设置圆角的半径为10像素 */
  241 + background-color: #f0f0f0; /* 背景颜色 */
  242 + padding: 10px; /* 内边距 */
  243 + margin: 10px; /* 外边距 */
  244 + box-shadow: 0 0 5px #ddd; /* 盒子阴影效果 */
  245 + }
  246 +</style>
@@ -3,29 +3,51 @@ @@ -3,29 +3,51 @@
3 <el-row> 3 <el-row>
4 <el-card style="background-color: #F5F7FA"> 4 <el-card style="background-color: #F5F7FA">
5 <el-row> 5 <el-row>
6 - <el-col :span="5">  
7 - <el-input v-model="queryInfo.vno" prefix-icon="el-icon-search" size="small" style="width: 200px"  
8 - placeholder="车牌号" clearable>  
9 - <template slot="prepend">车牌号</template>  
10 - </el-input>  
11 - </el-col>  
12 - <el-col :offset="1" :span="12">  
13 - <div class="my-text-area">  
14 - <div class="el-input-group__prepend prepand">车牌类型</div>  
15 - <el-select v-model="queryInfo.vnocolor" placeholder="车牌类型" style="width: 200px" clearable>  
16 - <el-option label="蓝色" value="1"></el-option>  
17 - <el-option label="黄色" value="2"></el-option>  
18 - <el-option label="绿色" value="3"></el-option>  
19 - </el-select>  
20 - </div>  
21 - </el-col>  
22 - <el-col :span="3">  
23 - <el-button type="primary" icon="el-icon-search" size="small" @click="getList()">  
24 - 查询  
25 - </el-button>  
26 - </el-col>  
27 - </el-row> 6 + <el-form :model="queryInfo" :rules="rules" ref="ruleForm">
  7 + <el-col :span="6">
  8 + <el-form-item label="" prop="vno">
  9 + <div class="my-text-area">
  10 + <div class="el-input-group__prepend prepand">车牌号</div>
  11 + <el-select v-model="queryInfo.vno"
  12 + @click.native="getCreden"
  13 + default-first-option
  14 + :loading="loading" clearable placeholder="请选择" style="width: 100px">
  15 + <el-option
  16 + v-for="item in vnos"
  17 + :key="item.lisenceNo"
  18 + :label="item.lisenceNo"
  19 + :value="item.lisenceNo"
  20 + :disabled="item.disabled">
  21 + </el-option>
  22 + </el-select>
  23 + </div>
  24 +
28 25
  26 +<!-- <el-input v-model="queryInfo.vno" size="small" style="width: 200px"-->
  27 +<!-- placeholder="车牌号" clearable required>-->
  28 +<!-- <template slot="prepend">车牌号</template>-->
  29 +<!-- </el-input>-->
  30 + </el-form-item>
  31 + </el-col>
  32 + <el-col :span="6">
  33 + <el-form-item label="" prop="vnocolor">
  34 + <div class="my-text-area">
  35 + <div class="el-input-group__prepend prepand">车牌类型</div>
  36 + <el-select required v-model="queryInfo.vnocolor" placeholder="车牌类型" style="width: 100px">
  37 + <el-option label="蓝牌" value="1"></el-option>
  38 + <el-option label="黄牌" value="2"></el-option>
  39 + <el-option label="绿牌" value="3"></el-option>
  40 + </el-select>
  41 + </div>
  42 + </el-form-item>
  43 + </el-col>
  44 + <el-col :span="3">
  45 + <el-button type="primary" icon="el-icon-search" size="mini" @click="getList()">
  46 + 查询
  47 + </el-button>
  48 + </el-col>
  49 + </el-form>
  50 + </el-row>
29 </el-card> 51 </el-card>
30 </el-row> 52 </el-row>
31 <div id="mapContainer" style="width: 100%; height: 500px;"></div> 53 <div id="mapContainer" style="width: 100%; height: 500px;"></div>
@@ -33,7 +55,8 @@ @@ -33,7 +55,8 @@
33 </template> 55 </template>
34 <script> 56 <script>
35 import AMapLoader from '@amap/amap-jsapi-loader'; 57 import AMapLoader from '@amap/amap-jsapi-loader';
36 - import { selectVehicle } from '../../api/consigner/vehicle'; 58 + import { selectVehicle,selectNameList } from '../../api/consigner/vehicle';
  59 + import {loginedUserInfo} from "../../api/user";
37 60
38 export default { 61 export default {
39 name: 'MapComponent', 62 name: 'MapComponent',
@@ -42,12 +65,44 @@ @@ -42,12 +65,44 @@
42 mapInstance: null, 65 mapInstance: null,
43 queryInfo: { 66 queryInfo: {
44 vno: '', 67 vno: '',
45 - vnocolor: '' 68 + vnocolor: '2'
  69 + },
  70 + vnos:[],
  71 + loading:false,
  72 + rules: {
  73 + vno: [
  74 + { required: true, message: '请输入车牌号', trigger: 'blur' },
  75 + // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  76 + ],
  77 + vnocolor: [
  78 + { required: true, message: '请选择车牌类型', trigger: 'change' }
  79 + ],
46 } 80 }
47 }; 81 };
48 }, 82 },
49 methods: { 83 methods: {
  84 + //获取车牌号
  85 + getCreden(){
  86 + this.vnos=[];
  87 + //let params={};
  88 + this.loading = true;
  89 + console.log(loginedUserInfo().username)
  90 + selectNameList({'username':loginedUserInfo().username}).then(res =>{
  91 + console.log(res)
  92 + if (res!=null) {
  93 + console.log(res.data.data)
  94 + setTimeout(() => {
  95 + this.loading = false;
  96 + this.vnos=res.data.data;
  97 + }, 200);
  98 + } else {
  99 + this.vnos = [];
  100 + }
  101 + });
  102 + },
50 getList() { 103 getList() {
  104 + this.$refs.ruleForm.validate(valid => {
  105 + if (!valid) return;
51 const _this = this; 106 const _this = this;
52 selectVehicle(this.queryInfo).then((response) => { 107 selectVehicle(this.queryInfo).then((response) => {
53 const res = response.data; 108 const res = response.data;
@@ -92,6 +147,7 @@ @@ -92,6 +147,7 @@
92 }).catch(error => { 147 }).catch(error => {
93 _this.$message.error('获取车辆位置失败:' + error.toString()); 148 _this.$message.error('获取车辆位置失败:' + error.toString());
94 }); 149 });
  150 + })
95 }, 151 },
96 initMap() { 152 initMap() {
97 AMapLoader.load({ 153 AMapLoader.load({
@@ -2,724 +2,834 @@ @@ -2,724 +2,834 @@
2 <el-container> 2 <el-container>
3 <el-main> 3 <el-main>
4 <el-card style="background-color: #F5F7FA"> 4 <el-card style="background-color: #F5F7FA">
5 - <!-- 搜素区域 -->  
6 - <div>  
7 - <el-form :model="queryInfo" :rules="queryFormRules" ref="queryFormRef" status-icon>  
8 - <el-form-item>  
9 - <el-col :span="4">  
10 - <el-form-item prop="gmtCreate">  
11 - <el-date-picker v-model="queryInfo.gmtCreate" type="date" value-format="yyyy-MM-dd"  
12 - placeholder="选择创建调度时间"  
13 - style="width: 200px"></el-date-picker> 5 + <!--工具条-->
  6 + <el-row>
  7 + <el-form :model="filters" :rules="rules" ref="ruleForm">
  8 + <el-col :span="5">
  9 + <el-form-item label="" prop="trailerFrameNo">
  10 + <el-input v-model="filters.trailerFrameNo" placeholder="车牌号查询" style="width: 170px">
  11 + <template slot="prepend">车牌号</template>
  12 + </el-input>
14 </el-form-item> 13 </el-form-item>
15 </el-col> 14 </el-col>
16 - <el-col :span="4" style="margin-left: 50px">  
17 - <el-form-item prop="dispatchType">  
18 - <el-select v-model="queryInfo.dispatchType" placeholder="请选择业务类型"  
19 - style="width: 200px"  
20 - clearable>  
21 - <el-option  
22 - v-for="item in dispatchTypeList"  
23 - :key="item.value"  
24 - :label="item.label"  
25 - :value="item.value">  
26 - </el-option>  
27 - </el-select> 15 + <el-col :span="6">
  16 + <el-form-item label="" prop="veState">
  17 + <div class="my-text-area">
  18 + <div class="el-input-group__prepend prepand">备案状态</div>
  19 + <el-select v-model="filters.veState" placeholder="请选择" style="width: 100px">
  20 + <el-option
  21 + v-for="item in veStateOptions"
  22 + :key="item.value"
  23 + :label="item.label"
  24 + :value="item.value">
  25 + </el-option>
  26 + </el-select>
  27 + </div>
28 </el-form-item> 28 </el-form-item>
29 </el-col> 29 </el-col>
30 - <el-col :span="4" style="margin-left: 50px">  
31 - <el-form-item prop="status">  
32 - <el-select v-model="queryInfo.status" placeholder="记录状态" clearable  
33 - style="width:200px;margin-left: 6px">  
34 - <el-option  
35 - v-for="item in statusList"  
36 - :key="item.value"  
37 - :label="item.label"  
38 - :value="item.value">  
39 - </el-option>  
40 - </el-select> 30 + <el-col :span="6">
  31 + <el-form-item label="" prop="veClassFlag">
  32 + <div class="my-text-area">
  33 + <div class="el-input-group__prepend prepand">业务类型</div>
  34 + <el-select v-model="filters.veClassFlag" placeholder="请选择" style="width:100px">
  35 + <el-option
  36 + v-for="item in options"
  37 + :key="item.value"
  38 + :label="item.label"
  39 + :value="item.value">
  40 + </el-option>
  41 + </el-select>
  42 + </div>
41 </el-form-item> 43 </el-form-item>
42 </el-col> 44 </el-col>
43 - <el-button type="primary" style="margin-left: 60px"  
44 - @click="getDispatchNodeList">查询调度记录  
45 - </el-button>  
46 - <el-button type="success" style="margin-left: 15px" @click="dispatchFormVisible = true">  
47 - 我要调度车辆  
48 - </el-button>  
49 - </el-form-item>  
50 - </el-form>  
51 - <el-row style="margin-top: 20px;"> 45 + <el-col :span="6">
  46 + <el-form-item>
  47 + <el-button type="primary" v-on:click="getReCord(1)">查询</el-button>
  48 + <el-button type="success" @click="companyAdd">新增</el-button>
  49 + </el-form-item>
  50 + </el-col>
  51 + </el-form>
52 </el-row> 52 </el-row>
53 - </div>  
54 - <!--调度记录列表区域-->  
55 - <div style="margin-top: 20px;">  
56 - <el-table :data="DispatchNoteList" border highlight-current-row v-loading="listLoading"  
57 - :row-class-name="rowStatus"  
58 - element-loading-text="拼命加载中">  
59 - <el-table-column type="index" align="center"></el-table-column>  
60 - <el-table-column label="用户名称" prop="userName" align="center" width="100"></el-table-column>  
61 - <el-table-column label="联系方式" prop="userMobile" align="center" width="120"></el-table-column>  
62 - <el-table-column label="状态" prop="status" align="center" width="120">  
63 - <template slot-scope="scope">  
64 - <span v-if="scope.row.status ==='1'">完成状态</span>  
65 - <span v-if="scope.row.status ==='2'">执行状态</span>  
66 - <span v-if="scope.row.status ==='3'">取消状态</span>  
67 - <span v-if="scope.row.status ==='4'">待执行状态</span>  
68 - </template> 53 + <!--列表-->
  54 + <el-table :data="recordList" highlight-current-row v-loading="listLoading" style="border-radius: 10px 10px 0px 0px;line-height: 25px"
  55 + :header-cell-style="{background:'#6F8294',color:'#FFFFFF'}" size="small">
  56 + <el-table-column type="selection" width="55" fixed="left">
69 </el-table-column> 57 </el-table-column>
70 - <el-table-column label="业务类型" prop="dispatchType" align="center" width="120">  
71 - <template slot-scope="scope">  
72 - <span v-if="scope.row.dispatchType ==='1'">进站送货</span>  
73 - <span v-if="scope.row.dispatchType ==='2'">出站提货</span>  
74 - <span v-if="scope.row.dispatchType ==='3'">货物调拨</span>  
75 - <span v-if="scope.row.dispatchType ==='4'">货物流转</span>  
76 - </template> 58 + <el-table-column prop="coCode" label="运输公司名称" width="120px" >
77 </el-table-column> 59 </el-table-column>
78 - <el-table-column label="车牌号码" prop="licensePlateNumber" align="center"  
79 - width="120"></el-table-column>  
80 - <el-table-column label="车辆类型" prop="vehicleType" align="center" width="120">  
81 - <template slot-scope="scope">  
82 - <span v-if="scope.row.vehicleType ==='1'">重型货车</span>  
83 - <span v-if="scope.row.vehicleType ==='2'">中型货车</span>  
84 - <span v-if="scope.row.vehicleType ==='3'">轻型货车</span>  
85 - <span v-if="scope.row.vehicleType ==='4'">微型货车</span>  
86 - <span v-if="scope.row.vehicleType ==='5'">拖车</span>  
87 - <span v-if="scope.row.vehicleType ==='6'">叉车</span>  
88 - </template> 60 + <el-table-column prop="proposer" label="挂靠单位" width="120px" >
89 </el-table-column> 61 </el-table-column>
90 - <el-table-column label="场站位置" prop="station" align="center" width="120">  
91 - <template slot-scope="scope">  
92 - <span v-if="scope.row.station ==='1'">西货站</span>  
93 - <span v-if="scope.row.station ==='2'">综保区</span>  
94 - <span v-if="scope.row.station ==='3'">军投</span>  
95 - <span v-if="scope.row.station ==='4'">快邮</span>  
96 - </template> 62 + <el-table-column prop="veClassFlag" label="业务类型" :formatter="veClassFlag" width="130px" >
  63 + </el-table-column>
  64 + <el-table-column prop="domesticLisenceNo" label="国内车牌" width="100px">
  65 + </el-table-column>
  66 + <el-table-column prop="veOwnerName" label="车主姓名" width="100px" >
  67 + </el-table-column>
  68 + <el-table-column prop="ownerInsideTel" label="车主联系方式" width="110px" >
  69 + </el-table-column>
  70 + <el-table-column prop="mainPort" label="关区代码" width="100px" >
  71 + </el-table-column>
  72 + <el-table-column prop="selfWt" label="自重" width="90px">
  73 + </el-table-column>
  74 + <el-table-column prop="veTon" label="载重" width="90px">
  75 + </el-table-column>
  76 + <el-table-column prop="returnmessage" label="备案结果" width="100px">
  77 + </el-table-column>
  78 + <el-table-column prop="createDate" label="创建时间" width="160px">
97 </el-table-column> 79 </el-table-column>
98 - <el-table-column label="创建时间" prop="gmtCreate" align="center" width="160"></el-table-column>  
99 - <el-table-column label="开始时间" prop="beginTime" align="center" width="160"></el-table-column>  
100 - <el-table-column label="完成时间" prop="endTime" align="center" width="160"></el-table-column>  
101 - <el-table-column label="操作" width="220px" fixed="right" align="center"> 80 + <el-table-column prop="updateDate" label="更新时间" width="160px">
  81 + </el-table-column>
  82 + <el-table-column label="操作" align="center" width="240" fixed="right">
  83 +<!-- v-if="isAdmin"-->
102 <template slot-scope="scope"> 84 <template slot-scope="scope">
103 - <!--查看按钮-->  
104 - <el-tooltip effect="dark" content="查看" placement="top-start" :enterable="false">  
105 - <el-button type="primary" icon="el-icon-edit" size="mini"  
106 - @click="showDialogVisible(scope.row)">查看  
107 - </el-button>  
108 - </el-tooltip>  
109 - <!--取消调度按钮-->  
110 - <el-tooltip effect="dark" content="取消调度" placement="top-start" :enterable="false">  
111 - <el-button type="danger" icon="el-icon-delete" size="mini"  
112 - :disabled="scope.row.endTime!==null && scope.row.endTime!==''"  
113 - @click="cancelDispatch(scope.row)" :loading="cancelLoading">取消调度  
114 - </el-button>  
115 - </el-tooltip> 85 + <el-button type="warning" size="mini" @click="handlOut(scope.$index, scope.row)">出任务</el-button>
  86 + <el-button type="success" size="mini" @click="handlEdit(scope.$index, scope.row)">编辑</el-button>
  87 + <el-button type="danger" size="mini" @click="handleDel(scope.$index, scope.row)">删除</el-button>
116 </template> 88 </template>
117 </el-table-column> 89 </el-table-column>
118 </el-table> 90 </el-table>
119 - <!--分页区域-->  
120 - <div style="margin-top: 10px"> 91 + <!-- 分页-->
  92 + <div style="margin-top: 10px" class="toolbar">
121 <el-pagination 93 <el-pagination
122 @size-change="handleSizeChange" 94 @size-change="handleSizeChange"
123 @current-change="handleCurrentChange" 95 @current-change="handleCurrentChange"
124 - :current-page="this.queryInfo.pageNum"  
125 - :page-sizes="[10,20,30,50]"  
126 - :page-size="this.queryInfo.pageSize" 96 + :current-page="pageSize"
  97 + :page-sizes="[10, 100, 200, 300]"
  98 + :page-size="10"
127 layout="total, sizes, prev, pager, next, jumper" 99 layout="total, sizes, prev, pager, next, jumper"
128 - :total="total"> 100 + :total="this.total">
129 </el-pagination> 101 </el-pagination>
130 </div> 102 </div>
131 - </div>  
132 - </el-card>  
133 - <!-- 我要调度车辆,对话框 -->  
134 - <div>  
135 - <el-dialog  
136 - title="我要调度车辆"  
137 - :visible.sync="dispatchFormVisible"  
138 - width="50%" @close="dispatchDialogClosed">  
139 - <!-- :rules="dispatchFormRules" ref="dispatchFormRef"-->  
140 - <el-form :model="dispatchForm" label-width="100px" status-icon  
141 - :rules="dispatchFormRules" ref="dispatchFormRef"  
142 - style="margin-left:10%;margin-right:10%;background-color: #F5F7FA">  
143 - <br>  
144 - <el-form-item label="车辆类型:" prop="vehicleType">  
145 - <el-select v-model="dispatchForm.vehicleType" style="width: 300px" clearable  
146 - placeholder="请选择车辆类型">  
147 - <el-option  
148 - v-for="item in vehicleTypeList"  
149 - :key="item.value"  
150 - :label="item.label"  
151 - :value="item.value">  
152 - </el-option>  
153 - </el-select>  
154 - </el-form-item>  
155 - <el-form-item label="车辆数量:" prop="vehicleNumber">  
156 - <el-input-number style="width: 200px" v-model="dispatchForm.vehicleNumber"  
157 - :min="1" :max="100" controls-position="right">  
158 - </el-input-number>  
159 - <span style="margin-left:5px;font-size: 18px">辆</span> 103 + <el-dialog :title=dialogMap[dialogStatus] :visible.sync="addFormVisible" :close-on-click-modal="false" width="80%" v-dialog-drag>
  104 + <el-form :model="addForm" label-width="20px" :rules="addFormRules" ref="addForm" label-position="left">
  105 + <el-row>
  106 + <el-col :span="7">
  107 + <el-row>
  108 + <el-form-item label=" " prop="domesticLisenceNo">
  109 + <el-input v-model="addForm.domesticLisenceNo" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
  110 + @change="findTrailerFrameNo(addForm.domesticLisenceNo)"
  111 + auto-complete="on" placeholder="国内车牌">
  112 + <template slot="prepend">国内车牌</template>
  113 + </el-input>
  114 + </el-form-item>
  115 + </el-row>
  116 + <el-row>
  117 + <el-form-item label=" " prop="veOwnerName">
  118 + <el-input v-model="addForm.veOwnerName" auto-complete="on" placeholder="车主姓名">
  119 + <template slot="prepend">车主姓名</template>
  120 + </el-input>
  121 + </el-form-item>
  122 + </el-row>
  123 + <el-row>
  124 + <el-form-item label=" " prop="proposer">
  125 + <el-input v-model="addForm.proposer" auto-complete="on" placeholder="挂靠单位">
  126 + <template slot="prepend">挂靠单位</template>
  127 + </el-input>
  128 + </el-form-item>
  129 + </el-row>
  130 + <el-row>
  131 + <el-form-item label=" " prop="coCode">
  132 + <el-input v-model="addForm.coCode" auto-complete="on" placeholder="运输公司名称">
  133 + <template slot="prepend">运输公司名称</template>
  134 + </el-input>
  135 + </el-form-item>
  136 + </el-row>
  137 + <el-row>
  138 + <el-form-item label=" " prop="veClassFlag">
  139 + <div class="my-text-area">
  140 + <div class="el-input-group__prepend prepand">业务类型</div>
  141 + <el-select v-model="addForm.veClassFlag" placeholder="请选择" style="width: 165px">
  142 + <el-option
  143 + v-for="item in options"
  144 + :key="item.value"
  145 + :label="item.label"
  146 + :value="item.value">
  147 + </el-option>
  148 + </el-select>
  149 + </div>
  150 + </el-form-item>
  151 + </el-row>
  152 + <el-row>
  153 + <el-form-item label="" prop="icCode">
  154 + <el-input v-model="addForm.icCode" auto-complete="on" placeholder="IC卡编号">
  155 + <template slot="prepend">IC卡编号</template>
  156 + </el-input>
  157 + </el-form-item>
  158 + </el-row>
  159 + </el-col>
  160 + <el-col :offset="1" :span="7">
  161 + <el-row>
  162 + <el-form-item label=" " prop="mainPort">
  163 + <div class="my-text-area">
  164 + <div class="el-input-group__prepend prepand">海关代码</div>
  165 + <el-select v-model="addForm.mainPort" placeholder="请选择" style="width: 165px">
  166 + <el-option
  167 + v-for="item in mainPortOptions"
  168 + :key="item.value"
  169 + :label="item.label"
  170 + :value="item.value">
  171 + </el-option>
  172 + </el-select>
  173 + </div>
  174 + </el-form-item>
  175 + </el-row>
  176 + <el-row>
  177 + <el-form-item label=" " prop="ownerInsideTel">
  178 + <el-input v-model="addForm.ownerInsideTel" auto-complete="on" placeholder="车主联系电话">
  179 + <template slot="prepend">车主联系电话</template>
  180 + </el-input>
  181 + </el-form-item>
  182 + </el-row>
  183 + <el-row>
  184 + <el-form-item label=" " prop="veFactoryDate">
  185 + <div class="my-text-area">
  186 + <div class="el-input-group__prepend prepand">行驶证有效期</div>
  187 + <el-date-picker
  188 + style="width: 165px"
  189 + v-model="addForm.veFactoryDate"
  190 + type="date"
  191 + placeholder="选择日期">
  192 + </el-date-picker>
  193 + </div>
  194 + </el-form-item>
  195 + </el-row>
  196 + <el-row>
  197 + <el-form-item label=" " prop="veState">
  198 + <div class="my-text-area">
  199 + <div class="el-input-group__prepend prepand">备案状态</div>
  200 + <el-select v-model="addForm.veState" placeholder="请选择" style="width: 165px">
  201 + <el-option
  202 + v-for="item in veStateOptions"
  203 + :key="item.value"
  204 + :label="item.label"
  205 + :value="item.value">
  206 + </el-option>
  207 + </el-select>
  208 + </div>
  209 + </el-form-item>
  210 + </el-row>
  211 + <el-row>
  212 + <el-form-item label=" " prop="selfWt">
  213 + <el-input v-model="addForm.selfWt" auto-complete="on" oninput="value=value.replace(/[^\d.+]/g,'')" placeholder="单位为KG">
  214 + <template slot="prepend">自重/空车重量</template>
  215 + </el-input>
  216 + </el-form-item>
  217 + </el-row>
  218 + <el-row>
  219 + <el-form-item label=" " prop="lockNum">
  220 + <div class="my-text-area">
  221 + <div class="el-input-group__prepend prepand">关锁号</div>
  222 + <el-autocomplete
  223 + class="inline-input"
  224 + v-model="addForm.lockNum"
  225 + :fetch-suggestions="querySearch"
  226 + value-key="lockNum"
  227 + highlight-first-item
  228 + clearable
  229 + placeholder="请输入内容"
  230 + style="width: 165px"
  231 + ></el-autocomplete>
  232 + </div>
  233 + </el-form-item>
  234 + </el-row>
  235 + </el-col>
  236 + <el-col :offset="1" :span="7">
  237 + <el-row>
  238 + <el-form-item label=" " prop="veTon">
  239 + <el-input v-model="addForm.veTon" auto-complete="on" placeholder="核定载货重量">
  240 + <template slot="prepend">载货重量</template>
  241 + </el-input>
  242 + </el-form-item>
  243 + </el-row>
  244 + <el-row>
  245 + <el-form-item label=" " prop="trailerLicenseNo">
  246 + <el-input v-model="addForm.trailerLicenseNo" auto-complete="on" placeholder="挂车牌号">
  247 + <template slot="prepend">挂车牌号</template>
  248 + </el-input>
  249 + </el-form-item>
  250 + </el-row>
  251 + <el-row>
  252 + <el-form-item label=" " prop="trailerFrameNo">
  253 + <el-input v-model="addForm.trailerFrameNo" auto-complete="on" placeholder="挂车车架号">
  254 + <template slot="prepend">挂车架号</template>
  255 + </el-input>
  256 + </el-form-item>
  257 + </el-row>
  258 + <el-row>
  259 + <el-form-item label=" " prop="apprNo">
  260 + <el-input v-model="addForm.apprNo" auto-complete="on" placeholder="车辆备案编号">
  261 + <template slot="prepend">车辆备案编号</template>
  262 + </el-input>
  263 + </el-form-item>
  264 + </el-row>
  265 + <el-row>
  266 + <el-form-item label=" " prop="veCustomsNo">
  267 + <el-input v-model="addForm.veCustomsNo" auto-complete="on" placeholder="电子车牌编号">
  268 + <template slot="prepend">电子车牌编号</template>
  269 + </el-input>
  270 + </el-form-item>
  271 + </el-row>
  272 + <el-row>
  273 + <el-form-item label=" " prop="memo">
  274 + <el-input v-model="addForm.memo" auto-complete="on" placeholder="备注">
  275 + <template slot="prepend">备注</template>
  276 + </el-input>
  277 + </el-form-item>
  278 + </el-row>
  279 + </el-col>
  280 + </el-row>
  281 + </el-form>
  282 + <div slot="footer" class="dialog-footer">
  283 + <el-button @click="addFormVisible = false" type="danger"
  284 + style="width: 100px">取消</el-button>
  285 + <el-button type="primary" style="width: 100px"
  286 + @click="dialogStatus ==='save'? addSubmit():editSubmit()" v-loading="addloading">保存</el-button>
  287 + </div>
  288 + </el-dialog>
  289 +<!-- //出任务-->
  290 + <el-dialog title="出任务" :visible.sync="dialogVisible">
  291 + <el-form :model="form">
  292 + <el-form-item label="" :label-width="formLabelWidth">
  293 + <el-col :span="15">
  294 + <el-input v-model="form.lisenceNo" autocomplete="off" disabled>
  295 + <template slot="prepend">车牌号</template>
  296 + </el-input>
  297 + </el-col>
160 </el-form-item> 298 </el-form-item>
161 - <el-form-item label="场站位置:" prop="station">  
162 - <el-select v-model="dispatchForm.station" style="width: 300px" clearable  
163 - placeholder="请选择场站位置">  
164 - <el-option  
165 - v-for="item in stationList"  
166 - :key="item.value"  
167 - :label="item.label"  
168 - :value="item.value">  
169 - </el-option>  
170 - </el-select> 299 + <el-form-item label="" :label-width="formLabelWidth">
  300 + <div class="my-text-area">
  301 + <div class="el-input-group__prepend prepand">用户名</div>
  302 + <el-col :span="14">
  303 + <el-select v-model="form.username"
  304 + @click.native="getUsers"
  305 + default-first-option
  306 + :loading="loading" clearable placeholder="请选择">
  307 + <el-option
  308 + v-for="item in usernames"
  309 + :key="item.username"
  310 + :label="item.username"
  311 + :value="item.username"
  312 + :disabled="item.disabled">
  313 + </el-option>
  314 + </el-select>
  315 + </el-col>
  316 + </div>
171 </el-form-item> 317 </el-form-item>
172 - <el-form-item label="业务类型:" prop="dispatchType">  
173 - <el-select v-model="dispatchForm.dispatchType" style="width: 300px;" clearable  
174 - placeholder="请选择业务类型">  
175 - <el-option  
176 - v-for="item in dispatchTypeList"  
177 - :key="item.value"  
178 - :label="item.label"  
179 - :value="item.value">  
180 - </el-option>  
181 - </el-select> 318 + <el-form-item label="" :label-width="formLabelWidth">
  319 + <el-col :span="14">
  320 + <el-tag v-if="lisenceNoSatus=false" type="success">在线</el-tag>
  321 + <el-tag v-else type="info">离线</el-tag>
  322 + </el-col>
182 </el-form-item> 323 </el-form-item>
183 - <br>  
184 </el-form> 324 </el-form>
185 - <!--底部按钮区域-->  
186 - <span slot="footer" class="dialog-footer">  
187 - <el-button @click="dispatchFormVisible = false">取 消</el-button>  
188 - <el-button type="primary" @click="dispatchVehicle" :loading="dispatchLoading">确定调度车辆</el-button>  
189 - </span>  
190 - </el-dialog>  
191 - </div>  
192 - <!-- 查看调度记录,对话框 -->  
193 - <div>  
194 - <el-dialog  
195 - style="margin-top: -50px"  
196 - title="查看调度记录明细"  
197 - :visible.sync="viewDialogVisible"  
198 - text-align="center"  
199 - width="60%" @close="showDialogClosed">  
200 - <!-- 表单显示区域 :rules="dispatchFormRules" -->  
201 - <el-form :model="showForm" ref="showFormRef"  
202 - :inline="true" align="center"  
203 - style="background-color: #F5F7FA;margin-left: 5%;margin-right: 5%">  
204 - <div style="margin-top: -15px">  
205 - <br>  
206 - <el-form-item label="用户名称:" prop="userName">  
207 - <el-input v-model="showForm.userName" style="width: 200px;" size="small"  
208 - readonly></el-input>  
209 - </el-form-item>  
210 - <el-form-item label="联系方式:" prop="userMobile">  
211 - <el-input v-model="showForm.userMobile" style="width: 200px;" size="small"  
212 - readonly></el-input>  
213 - </el-form-item>  
214 - <el-form-item label="车辆类型:" prop="vehicleType">  
215 - <el-select v-model="showForm.vehicleType" style="width:200px" size="small" readonly  
216 - placeholder="请选择车辆类型">  
217 - <el-option  
218 - v-for="item in vehicleTypeList"  
219 - :key="item.value"  
220 - :label="item.label"  
221 - :value="item.value">  
222 - </el-option>  
223 - </el-select>  
224 - </el-form-item>  
225 - <el-form-item label="车牌号码:" prop="licensePlateNumber">  
226 - <el-input v-model="showForm.licensePlateNumber" style="width: 200px;" size="small"  
227 - readonly></el-input>  
228 - </el-form-item>  
229 - <el-form-item label="场站位置:" prop="station">  
230 - <el-select v-model="showForm.station" style="width:200px" readonly size="small"  
231 - placeholder="请选择场站位置">  
232 - <el-option  
233 - v-for="item in stationList"  
234 - :key="item.value"  
235 - :label="item.label"  
236 - :value="item.value">  
237 - </el-option>  
238 - </el-select>  
239 - </el-form-item>  
240 - <el-form-item label="业务类型:" prop="dispatchType">  
241 - <el-select v-model="showForm.dispatchType" style="width:200px" readonly size="small"  
242 - placeholder="请选择业务类型">  
243 - <el-option  
244 - v-for="item in dispatchTypeList"  
245 - :key="item.value"  
246 - :label="item.label"  
247 - :value="item.value">  
248 - </el-option>  
249 - </el-select>  
250 - </el-form-item>  
251 - <el-form-item label="创建时间:" prop="gmtCreate">  
252 - <el-input v-model="showForm.gmtCreate" style="width: 200px;" size="small"  
253 - readonly></el-input>  
254 - </el-form-item>  
255 - <el-form-item label="开始时间:" prop="beginTime">  
256 - <el-input v-model="showForm.beginTime" style="width: 200px;" size="small"  
257 - readonly></el-input>  
258 - </el-form-item>  
259 - <el-form-item label="结束时间:" prop="endTime">  
260 - <el-input v-model="showForm.endTime" style="width: 200px;" size="small"  
261 - readonly></el-input>  
262 - </el-form-item>  
263 - <el-form-item label="记录状态:" prop="status">  
264 - <el-select v-model="showForm.status" placeholder="记录状态" style="width:200px" size="small"  
265 - readonly>  
266 - <el-option  
267 - v-for="item in statusList"  
268 - :key="item.value"  
269 - :label="item.label"  
270 - :value="item.value">  
271 - </el-option>  
272 - </el-select>  
273 - </el-form-item>  
274 - <br>  
275 - </div>  
276 - </el-form>  
277 - <!--底部按钮区域-->  
278 - <span slot="footer" class="dialog-footer">  
279 - <el-button type="primary" @click="viewDialogVisible = false">结束查看</el-button>  
280 - </span> 325 + <div slot="footer" class="dialog-footer">
  326 + <el-button @click="dialogVisible = false">取 消</el-button>
  327 + <el-button @click="saveOut()">确 定</el-button>
  328 + </div>
281 </el-dialog> 329 </el-dialog>
282 - </div> 330 + </el-card>
283 </el-main> 331 </el-main>
284 </el-container> 332 </el-container>
285 </template> 333 </template>
286 334
287 <script> 335 <script>
288 - import {selectDispatchNoteList, dispatch, cancel, getUser} from '../../api/dispatch_api' 336 + // import {selectDispatchNoteList, dispatch, cancel, getUser} from '../../api/dispatch_api'
  337 +
  338 + import { list, save, remove, edit} from '../../api/road_verecord/verecord';
  339 + import {isAdmin, loginedUserInfo} from "../../api/user";
  340 + //获取关锁列表
  341 + // import {list as lockList} from "../../api/lock_info/lock_info";
  342 + import { getUserList } from '../../api/user';
  343 + import {selectVehicle, insertSelective, selectHistroy} from '../../api/consigner/vehicle';
289 344
290 export default { 345 export default {
291 - name: 'dispatch_api',  
292 - created() {  
293 346
294 - },  
295 data() { 347 data() {
296 - /**  
297 - * 验证手机号的自定义规则  
298 - */  
299 - var userMobileValid = (rule, value, callback) => {  
300 - //验证手机号的正则表达式  
301 - const regMobile = /^(0|86|17951)?(13[0-9]|15[0123456789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;  
302 - if (regMobile.test(value)) {  
303 - //合法的手机号  
304 - return callback();  
305 - }  
306 - callback(new Error('请输入合法的手机号'));  
307 - };  
308 return { 348 return {
309 - /**  
310 - * 查询列表  
311 - */  
312 - queryInfo: {  
313 - //用户姓名  
314 - userName: '',  
315 - //用户联系方式  
316 - userMobile: '',  
317 - //记录状态  
318 - status: '',  
319 - //调度时间  
320 - gmtCreate: new Date(),  
321 - //业务类型  
322 - dispatchType: '',  
323 - //当前的页数  
324 - pageNum: 1,  
325 - //当前每页显示多少条数据  
326 - pageSize: 10 349 + filters: {
  350 + trailerFrameNo: '',
  351 + veState: '',
  352 + veClassFlag: '',
327 }, 353 },
328 - /**  
329 - * 记录列表,总条数  
330 - */  
331 - total: 0,  
332 - /**  
333 - * 所有,调度记录列表  
334 - */  
335 - DispatchNoteList: [],  
336 - /**  
337 - * 我要调度车辆,表单  
338 - */  
339 - dispatchForm: {  
340 - userName: '',  
341 - userMobile: '',  
342 - //车辆数量  
343 - vehicleNumber: 1,  
344 - //车辆类型  
345 - vehicleType: '2',  
346 - //场站位置  
347 - station: '1',  
348 - //调度业务类型  
349 - dispatchType: '1' 354 + rules: {
  355 + // trailerFrameNo: [
  356 + // { required: true, message: '请输入车牌号', trigger: 'blur' },
  357 + // // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  358 + // ],
  359 + // veState: [
  360 + // { required: true, message: '请选择备案状态', trigger: 'change' }
  361 + // ],
  362 + // veClassFlag: [
  363 + // { required: true, message: '请选择业务类型', trigger: 'change' }
  364 + // ],
350 }, 365 },
351 -  
352 - /**  
353 - * 查看记录明细,表单  
354 - */  
355 - showForm: {},  
356 - /**  
357 - * 控制添加用户对话框的显示与隐藏  
358 - */  
359 - dispatchFormVisible: false,  
360 - /**  
361 - * 控制查看调度记录明细,对话框的显示与隐藏  
362 - */  
363 - viewDialogVisible: false,  
364 - /**  
365 - * loading加载  
366 - */  
367 - /* 获取列表时的加载 */ 366 + recordList: [],
  367 + lockInfoList: [],
  368 + total: 0,
  369 + pageSize: 1,
  370 + limitSize: 10,
368 listLoading: false, 371 listLoading: false,
369 - /* 调度车辆时的加载 */  
370 - dispatchLoading: false,  
371 - /* 取消调度时的加载 */  
372 - cancelLoading: false,  
373 - /**  
374 - * 业务类型,选项列表  
375 - */  
376 - dispatchTypeList: [  
377 - {  
378 - value: '1',  
379 - label: '进站送货'  
380 - },  
381 - {  
382 - value: '2',  
383 - label: '出站提货'  
384 - },  
385 - {  
386 - value: '3',  
387 - label: '货物流转'  
388 - },  
389 - {  
390 - value: '4',  
391 - label: '货物调拨'  
392 - }  
393 - ],  
394 - /**  
395 - * 车辆类型,选项列表  
396 - */  
397 - vehicleTypeList: [  
398 - {  
399 - value: '1',  
400 - label: '重型货车'  
401 - },  
402 - {  
403 - value: '2',  
404 - label: '中型货车'  
405 - },  
406 - {  
407 - value: '3',  
408 - label: '经济货车'  
409 - },  
410 - {  
411 - value: '4',  
412 - label: '微型货车'  
413 - },  
414 - {  
415 - value: '5',  
416 - label: '拖车'  
417 - },  
418 - {  
419 - value: '6',  
420 - label: '叉车'  
421 - }  
422 - ],  
423 - /**  
424 - * 记录状态,列表  
425 - */  
426 - statusList: [  
427 - {  
428 - value: '1',  
429 - label: '完成状态'  
430 - },  
431 - {  
432 - value: '2',  
433 - label: '执行状态'  
434 - },  
435 - {  
436 - value: '3',  
437 - label: '取消状态'  
438 - },  
439 - {  
440 - value: '4',  
441 - label: '待执行状态'  
442 - }  
443 - ],  
444 -  
445 - /**  
446 - * 场站位置,选项列表  
447 - */  
448 - stationList: [  
449 - {  
450 - value: '1',  
451 - label: '西货站'  
452 - },  
453 - {  
454 - value: '2',  
455 - label: '综保区'  
456 - },  
457 - {  
458 - value: '3',  
459 - label: '军投'  
460 - },  
461 - {  
462 - value: '4',  
463 - label: '快邮'  
464 - }  
465 - ],  
466 -  
467 - queryFormRules: {  
468 - userName: [  
469 - {required: true, message: '请输入姓名', trigger: ['blur', 'change']},  
470 - ],  
471 - userMobile: [  
472 - {required: true, message: '请输入联系方式', trigger: ['blur', 'change']},  
473 - {validator: userMobileValid, trigger: 'blur'}  
474 - ], 372 + isAdmin: false,
  373 + addFormVisible: false,
  374 + disabledOne: true,
  375 + dialogMap: {
  376 + edit: '编辑',
  377 + save: '新增'
475 }, 378 },
476 - /**  
477 - * 调度车辆表单的验证规则对象  
478 - */  
479 - dispatchFormRules: {  
480 - status: [  
481 - {required: true, message: '请选择记录状态', trigger: ['blur', 'change']},  
482 - ],  
483 - gmtCreate: [  
484 - {required: true, message: '请选择创建时间', trigger: ['blur', 'change']}, 379 + dialogStatus: undefined,
  380 + addloading: false,
  381 + addForm: {
  382 + mainPort: '4604',
  383 + proposer: '',
  384 + coCode: '',
  385 + domesticLisenceNo: '',
  386 + veOwnerName: '',
  387 + ownerInsideTel: '',
  388 + veFactoryDate: '',
  389 + selfWt: '',
  390 + veTon: '',
  391 + trailerLicenseNo: '',
  392 + apprNo: '',
  393 + veClassFlag: '',
  394 + memo: '',
  395 + createBy: '',
  396 + veState: 'N',
  397 + icCode: '',
  398 + lockNum: ''
  399 + },
  400 + options: [{
  401 + value: '0',
  402 + label: '普通车辆'
  403 + }, {
  404 + value: '1',
  405 + label: '调拨车辆'
  406 + },{
  407 + value: '2',
  408 + label: '分拨车辆'
  409 + }],
  410 + mainPortOptions: [{
  411 + value: '4604',
  412 + label: '4604'
  413 + }, {
  414 + value: '4620',
  415 + label: '4620'
  416 + }],
  417 +
  418 + veStateOptions: [{
  419 + value: 'Y',
  420 + label: '黑名单'
  421 + }, {
  422 + value: 'N',
  423 + label: '白名单'
  424 + }],
  425 + addFormRules: {
  426 + mainPort: [
  427 + { required: true, message: '请输入海关关区', trigger: 'blur' }
485 ], 428 ],
486 - endTime: [  
487 - {required: true, message: '请选择结束时间', trigger: ['blur', 'change']}, 429 + proposer: [
  430 + { required: true, message: '请输入挂靠单位', trigger: 'blur' }
488 ], 431 ],
489 - licensePlateNumber: [  
490 - {required: true, message: '请输入车牌号', trigger: ['blur', 'change']}, 432 + coCode: [
  433 + { required: true, message: '请输入运输公司名称', trigger: 'blur' }
491 ], 434 ],
492 - userName: [  
493 - {required: true, message: '请输入姓名', trigger: ['blur', 'change']}, 435 + domesticLisenceNo: [
  436 + { required: true, message: '请输入国内车牌', trigger: 'blur' }
494 ], 437 ],
495 - userMobile: [  
496 - {required: true, message: '请输入联系方式', trigger: ['blur', 'change']},  
497 - {validator: userMobileValid, trigger: 'blur'} 438 + veOwnerName: [
  439 + { required: true, message: '请输入车主姓名', trigger: 'blur' }
498 ], 440 ],
499 - vehicleType: [  
500 - {required: true, message: '请选择车辆类型', trigger: ['blur', 'change']},  
501 - 441 + veClassFlag: [
  442 + { required: true, message: '请选择车辆属性', trigger: 'blur' }
502 ], 443 ],
503 - vehicleNumber: [  
504 - {required: true, message: '请选择车辆数量', trigger: ['blur', 'change']}, 444 + ownerInsideTel: [
  445 + { required: true, message: '手机号不能为空', trigger: 'blur' },
  446 + { type: 'number', message: '手机号格式不正确', trigger: 'blur',
  447 + transform(value){
  448 + var phone = 11 && /^((13|14|15|16|17|18|19)[0-9]{1}\d{8})$/
  449 + if (!phone.test(value)){
  450 + return false;
  451 + }else {
  452 + return Number(value);
  453 + }
  454 + }}
505 ], 455 ],
506 - station: [  
507 - {required: true, message: '请选择场站位置', trigger: ['blur', 'change']}, 456 + veFactoryDate: [
  457 + { required: true, message: '请选择驾驶证有效期', trigger: 'blur' }
508 ], 458 ],
509 - dispatchType: [  
510 - {required: true, message: '请选择调度业务类型', trigger: ['blur', 'change']}, 459 + selfWt: [
  460 + { required: true, message: '请输入车辆自重', trigger: 'blur' }
511 ], 461 ],
  462 + veState: [
  463 + { required: true, message: '请选择备案状态', trigger: 'blur' }
  464 + ]
  465 + },
  466 + dialogVisible:false,
  467 + form: {
  468 + lisenceNo: '',
  469 + username: '',
  470 + id:'',
  471 + starttime:''
512 }, 472 },
  473 + usernames:[],
  474 + queryInfo: {
  475 + vno: '',
  476 + vnocolor: '2'
  477 + },
  478 + lisenceNoSatus:'',
  479 + formLabelWidth: '120px',
  480 + loading:false,
513 } 481 }
514 }, 482 },
  483 + mounted() {
  484 + this.isAdmin = isAdmin();
  485 + this.getReCord();
  486 + },
515 methods: { 487 methods: {
516 - /**  
517 - * 监听,调度车辆对话框的关闭事件  
518 - */  
519 - dispatchDialogClosed() {  
520 - //重置对话框  
521 - this.$refs.dispatchFormRef.resetFields(); 488 + //出任务
  489 + handlOut(index,row){
  490 + this.dialogVisible=true;
  491 + this.form.lisenceNo=row.domesticLisenceNo;
  492 + this.getUsers();
  493 + this.getLisenceNoStatus(row.domesticLisenceNo)
522 }, 494 },
523 -  
524 - /**  
525 - * 监听,查看调度记录对话框的关闭事件  
526 - */  
527 - showDialogClosed() {  
528 - //重置对话框  
529 - this.$refs.showFormRef.resetFields(); 495 + //确定出任务
  496 + saveOut() {
  497 + const _this = this
  498 + insertSelective(this.form).then((response) => {
  499 + const res = response.data
  500 + if (res.code !== '200') {
  501 + return _this.$message.error('出任务,失败!')
  502 + }
  503 + _this.$message.success('出任务,成功!')
  504 + this.dialogVisible=false;
  505 + this.$router.push(
  506 + {
  507 + path:'conveyance'
  508 + }
  509 + )
  510 + }).catch(error => {
  511 + // 关闭加载
  512 + _this.$message.warning('车辆已出任务')
  513 + })
530 }, 514 },
  515 + //获取用户名
  516 + getUsers:function() {
  517 + let para = {};
  518 + this.listLoading = true;
  519 + getUserList(para).then((res) => {
  520 + let response = res.data.data;
  521 + console.log(response)
  522 + this.usernames=res.data.data.list;
  523 + }).catch((error) => {
  524 + this.$message.error(error.toString());
  525 + });
531 526
532 - /**  
533 - * 监听pageSize改变的事件  
534 - */  
535 - handleSizeChange(newSize) {  
536 - this.queryInfo.pageSize = newSize;  
537 - //刷新调度记录列表  
538 - this.getDispatchNodeList();  
539 }, 527 },
540 - /**  
541 - * 监听当前页码值改变的事件  
542 - */  
543 - handleCurrentChange(newPage) {  
544 - this.queryInfo.pageNum = newPage;  
545 - //刷新调度记录列表  
546 - this.getDispatchNodeList();  
547 - },  
548 - /**  
549 - * 打开,查看调度记录明细,对话框  
550 - * @param row  
551 - */  
552 - showDialogVisible(row) {  
553 - this.showForm = row;  
554 - this.viewDialogVisible = true; 528 + //车辆状态
  529 + getLisenceNoStatus(lisenceNo){
  530 + this.queryInfo.vno=lisenceNo;
  531 + selectVehicle(this.queryInfo).then((response) => {
  532 + const res = response.data;
  533 + this.lisenceNoSatus=res.data.data.firstVcl.offlineState;
  534 + }).catch(error => {
  535 + this.$message.error('获取车辆状态失败:' + error.toString());
  536 + });
555 }, 537 },
556 - /**  
557 - * 用户端,获取车辆调度记录  
558 - */  
559 - getDispatchNodeList() { 538 + //获取备案列表
  539 + getReCord(val) {
  540 + let pageSize = this.pageSize;
  541 + if (val != undefined){
  542 + pageSize = val;
  543 + }
  544 + let para = {
  545 + pageSize: pageSize,
  546 + limitSize: this.limitSize,
  547 + trailerFrameNo: this.filters.trailerFrameNo,
  548 + veState: this.filters.veState,
  549 + veClassFlag: this.filters.veClassFlag,
  550 + userId: loginedUserInfo().userId
  551 + };
  552 + if (isAdmin()){
  553 + para.userId = '';
  554 + }
560 this.listLoading = true; 555 this.listLoading = true;
561 - selectDispatchNoteList(this.queryInfo).then((response) => {  
562 - let res = response.data;  
563 - if (res.code !== '200') {  
564 - this.listLoading = false;  
565 - return this.$message.error('获取车辆调度列表失败');  
566 - }  
567 - // 获取车辆调度列表数据  
568 - this.DispatchNoteList = res.data.list;  
569 - // 获取列表的总记录数  
570 - this.total = res.data.total; 556 + list(para).then((res) => {
  557 + this.total = res.data.data.total;
  558 + this.recordList = res.data.data.list;
571 this.listLoading = false; 559 this.listLoading = false;
572 - this.$message.success('获取车辆调度列表,成功!');  
573 - }).catch(error => { 560 + }).catch((error) => {
574 this.listLoading = false; 561 this.listLoading = false;
575 - this.$message.error(error.toString()); 562 + if(null!= error.response && error.response!==undefined){
  563 + let status= error.response.status;
  564 + let msg = error.response.statusText;
  565 + alert(status+msg);
  566 + }else {
  567 + alert(error);
  568 + }
576 }); 569 });
577 }, 570 },
578 - /**  
579 - * 用户端,我要调度车辆,方法  
580 - */  
581 - dispatchVehicle() {  
582 - this.dispatchLoading = true;  
583 - dispatch(this.dispatchForm).then((response) => {  
584 - let res = response.data;  
585 - if (res.code !== '200') {  
586 - this.dispatchLoading = false;  
587 - return this.$message.error('车辆繁忙,请稍后重试'); 571 +
  572 + // 分页
  573 + handleSizeChange(val) {
  574 + this.limitSize = val;
  575 + this.getReCord();
  576 + },
  577 + handleCurrentChange(val) {
  578 + this.pageSize = val;
  579 + this.getReCord();
  580 +
  581 + },
  582 +
  583 + findTrailerFrameNo(value){
  584 + let para = {
  585 + trailerFrameNo: value
  586 + };
  587 + list(para).then((res) => {
  588 + if (res.data.data.total > 0){
  589 + this.addForm.mainPort = res.data.data.list[0].mainPort;
  590 + this.addForm.proposer = res.data.data.list[0].proposer;
  591 + this.addForm.coCode = res.data.data.list[0].coCode;
  592 + this.addForm.domesticLisenceNo = res.data.data.list[0].domesticLisenceNo;
  593 + this.addForm.veOwnerName = res.data.data.list[0].veOwnerName;
  594 + this.addForm.ownerInsideTel = res.data.data.list[0].ownerInsideTel;
  595 + this.addForm.veFactoryDate = res.data.data.list[0].veFactoryDate;
  596 + this.addForm.selfWt = res.data.data.list[0].selfWt;
  597 + this.addForm.veTon = res.data.data.list[0].veTon;
  598 + this.addForm.trailerLicenseNo = res.data.data.list[0].trailerLicenseNo;
  599 + this.addForm.apprNo = res.data.data.list[0].apprNo;
  600 + this.addForm.veClassFlag = res.data.data.list[0].veClassFlag;
  601 + this.addForm.memo = res.data.data.list[0].memo;
  602 + this.addForm.veState = res.data.data.list[0].veState;
  603 + this.$message({
  604 + message: '该车辆已有备案',
  605 + type: 'error'
  606 + });
  607 + }else {
  608 + this.$message({
  609 + message: '该车辆没有备案',
  610 + type: 'success'
  611 + });
  612 + this.addForm.mainPort = '4604';
  613 + this.addForm.proposer = '';
  614 + this.addForm.coCode = '';
  615 + this.addForm.veOwnerName = '';
  616 + this.addForm.ownerInsideTel = '';
  617 + this.addForm.veFactoryDate = '';
  618 + this.addForm.selfWt = '';
  619 + this.addForm.veTon = '';
  620 + this.addForm.trailerLicenseNo = '';
  621 + this.addForm.apprNo = '';
  622 + this.addForm.veClassFlag = '';
  623 + this.addForm.memo = '';
  624 + this.addForm.veState = 'N';
  625 + }
  626 + }).catch((error) => {
  627 + if(null!= error.response && error.response!==undefined){
  628 + let status= error.response.status;
  629 + let msg = error.response.statusText;
  630 + alert(status+msg);
  631 + }else {
  632 + alert(error);
588 } 633 }
589 - //关闭加载  
590 - this.dispatchLoading = false;  
591 - this.$message.success('调度车辆成功!');  
592 - //调度成功,隐藏对话框  
593 - this.dispatchFormVisible = false;  
594 - /* 将调度车辆信息=>查询列表 */  
595 - // 用户名称  
596 - this.queryInfo.userName = this.dispatchForm.userName;  
597 - // 联系方式  
598 - this.queryInfo.userMobile = this.dispatchForm.userMobile;  
599 - // 调度业务类型  
600 - this.queryInfo.dispatchType = this.dispatchForm.dispatchType;  
601 - // 创建时间为当前时间(需留意)  
602 - this.queryInfo.gmtCreate = new Date();  
603 - //刷新车辆调度列表  
604 - this.getDispatchNodeList();  
605 - }).catch(error => {  
606 - this.dispatchLoading = false;  
607 - this.$message.error(error.toString());  
608 }); 634 });
609 }, 635 },
610 - /**  
611 - * 用户端,取消调度车辆,方法  
612 - */  
613 - cancelDispatch(row) {  
614 - //弹框询问是否取消车辆调度  
615 - this.$confirm('此操作将取消该车辆的调度, 是否继续?', '警告', {  
616 - confirmButtonText: '确定取消调度',  
617 - cancelButtonText: '取消',  
618 - type: 'warning' 636 +
  637 + veClassFlag: function(row, column){
  638 + if (row.veClassFlag == '0'){
  639 + return "普通车辆"
  640 + }else if(row.veClassFlag == '1'){
  641 + return "调拨车辆"
  642 + }else if (row.veClassFlag == '2'){
  643 + return "分拨车辆"
  644 + }
  645 + },
  646 + handleDel(index, row){
  647 + this.$confirm('确认删除吗?', '提示', {}).then(() => {
  648 + let param = {
  649 + id: row.id,
  650 + domesticLisenceNo: row.domesticLisenceNo,
  651 + mainPort: row.mainPort
619 } 652 }
620 - ).then(() => {  
621 - //开启加载  
622 - this.cancelLoading = true;  
623 - cancel(row).then((response) => {  
624 - let res = response.data;  
625 - if (res.code !== '200') {  
626 - this.cancelLoading = false;  
627 - return this.$message.error('取消车辆调度,失败!请人工介入'); 653 + remove(param).then((res) => {
  654 + if (res.data.code == 200){
  655 + this.$message({
  656 + message: '删除成功',
  657 + type: 'success'
  658 + });
  659 + }else {
  660 + this.$message({
  661 + message: '删除失败',
  662 + type: 'error'
  663 + });
628 } 664 }
629 - //关闭加载  
630 - this.cancelLoading = false;  
631 - this.$message.success('取消调度车辆,成功!');  
632 - //刷新车辆调度列表  
633 - this.getDispatchNodeList();  
634 - }).catch(error => {  
635 - //关闭加载  
636 - this.cancelLoading = false;  
637 - this.$message.error(error.toString()); 665 + this.getReCord();
  666 + }).catch((error) => {
  667 +
638 }); 668 });
639 - }).catch(() => { 669 + }).catch(() =>{
  670 +
640 }); 671 });
641 }, 672 },
642 - /**  
643 - * 获取用户信息  
644 - */  
645 - getUserInfo(param) {  
646 - getUser(param).then((response) => {  
647 - let res = response.data;  
648 - if (res.code !== '200') {  
649 - return this.$message.error('网络异常,请刷新界面!');  
650 - }  
651 - if (res.data.list.length === 0) {  
652 - return this.$message.error('网络异常,请刷新界面!'); 673 +
  674 + companyAdd:function(){
  675 + this.dialogStatus= "save";
  676 + this.addFormVisible = true;
  677 + this.$refs.addForm.resetFields();
  678 + if (this.$refs.addForm !==undefined) {
  679 + this.$refs.addForm.resetFields();
  680 + }
  681 + },
  682 + handlEdit:function(index, row){
  683 + this.dialogStatus = "edit";
  684 + this.addFormVisible = true;
  685 + this.addForm = Object.assign({}, row);
  686 + },
  687 +
  688 + addSubmit:function(){
  689 + this.$refs.addForm.validate((valid) => {
  690 + if (valid) {
  691 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  692 + this.addloading = true;
  693 + this.addForm.createBy = JSON.parse(sessionStorage.getItem('user')).id;
  694 + let para = Object.assign({}, this.addForm);
  695 + save(para).then((res) => {
  696 + if (res.data.code == 200){
  697 + this.$message({
  698 + message: '提交成功',
  699 + type: 'success'
  700 + });
  701 + this.addFormVisible = false;
  702 + this.addloading = false;
  703 + this.getReCord();
  704 + }else {
  705 + this.addloading = false;
  706 + this.$message({
  707 + message: res.data.msg,
  708 + type: 'error'
  709 + });
  710 + }
  711 + }).catch((error) => {
  712 + alert(error);
  713 + this.addloading = false;
  714 + });
  715 + })
  716 + } else {
  717 + console.log('error submit!!');
  718 + this.addloading = false;
  719 + return false;
653 } 720 }
654 - if (res.data.list[0].mobilephone === null || res.data.list[0].mobilephone === '') {  
655 - return this.$message.error('请填写您的手机号码'); 721 + });
  722 + },
  723 +
  724 + editSubmit:function(){
  725 + this.$refs.addForm.validate((valid) => {
  726 + if (valid) {
  727 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  728 + this.addloading = true;
  729 + let para = Object.assign({}, this.addForm);
  730 + edit(para).then((res) => {
  731 + if (res.data.code == 200){
  732 + this.$message({
  733 + message: '修改成功',
  734 + type: 'success'
  735 + });
  736 + this.addFormVisible = false
  737 + this.addloading = false;
  738 + this.getReCord();
  739 + }else {
  740 + this.addloading = false;
  741 + this.$message({
  742 + message: res.data.msg,
  743 + type: 'error'
  744 + });
  745 + }
  746 + }).catch((error) => {
  747 + alert(error);
  748 + this.addloading = false;
  749 + });
  750 + })
  751 + } else {
  752 + this.addloading = false;
  753 + console.log('error submit!!');
  754 + return false;
656 } 755 }
657 - this.queryInfo.userMobile = res.data.list[0].mobilephone;  
658 - this.dispatchForm.userMobile = res.data.list[0].mobilephone;  
659 - this.$message.success('欢迎使用,车辆调度系统!');  
660 - }).catch((error) => {  
661 - this.$message.error(error.toString());  
662 }); 756 });
663 }, 757 },
664 - /**  
665 - * 根据状态的不同区分颜色  
666 - *  
667 - * @param row  
668 - * @param rowIndex  
669 - */  
670 - rowStatus({row, rowIndex}) {  
671 - if (row.status === '1') {  
672 - return 'success-row';  
673 - }  
674 - if (row.status === '2') {  
675 - return 'run-row';  
676 - }  
677 - if (row.status === '3') {  
678 - return 'cancel-row'; 758 + operationType:function (row, column) {
  759 + if (row.operationType == '1'){
  760 + return '审批通过'
  761 + }else if (row.operationType == '0'){
  762 + return '需手动审批通过'
679 } 763 }
680 - if (row.status === '4') {  
681 - return 'await-row';  
682 - }  
683 - }  
684 - },  
685 - mounted() {  
686 - var user = sessionStorage.getItem('user');  
687 - if (user) {  
688 - user = JSON.parse(user);  
689 - console.log(user);  
690 - this.queryInfo.userName = user.username;  
691 - this.dispatchForm.userName = user.username;  
692 - let param = {  
693 - userName: this.queryInfo.userName 764 + },
  765 +
  766 + querySearch(queryString, cb) {
  767 + var restaurants = this.lockInfoList;
  768 + var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
  769 + // 调用 callback 返回建议列表的数据
  770 + cb(results);
  771 + },
  772 +
  773 + createFilter(queryString) {
  774 +
  775 + return (restaurant) => {
  776 + let rs = (restaurant.lockNum.indexOf(queryString) >= 0)
  777 + return rs;
694 }; 778 };
695 - this.getUserInfo(param);  
696 - }  
697 - /**  
698 - * 渲染完成之后,在获取调度记录列表  
699 - */  
700 - // this.getDispatchNodeList();  
701 - } 779 + },
  780 +
  781 + // 获取关锁列表
  782 + // getLockInfoList(val) {
  783 + // let pageSize = this.pageSize;
  784 + // if (val != undefined){
  785 + // pageSize = val;
  786 + // }
  787 + // let para = {
  788 + // pageSize: pageSize,
  789 + // limitSize: this.limitSize
  790 + // };
  791 + // this.listLoading = true;
  792 + // lockList(para).then((res) => {
  793 + // this.lockInfoList = res.data.data.list;
  794 + // }).catch((error) => {
  795 + // this.listLoading = false;
  796 + // if(null!= error.response && error.response!==undefined){
  797 + // let status= error.response.status;
  798 + // let msg = error.response.statusText;
  799 + // alert(status+msg);
  800 + // }else {
  801 + // alert(error);
  802 + // }
  803 + // });
  804 + // },
  805 + },
  806 +
702 } 807 }
  808 +
703 </script> 809 </script>
704 810
705 -<style>  
706 - /* 完成状态 */  
707 - .el-table .success-row {  
708 - background: rgba(64, 158, 255, 0.2);  
709 - }  
710 811
711 - /* 执行状态 */  
712 - .el-table .run-row {  
713 - background: rgba(103, 194, 58, 0.2); 812 +<style scoped>
  813 + .my-text-area .prepand{
  814 + float: left;
  815 + width:89px;
  816 + height: 28px;
  817 + font-size: 12px;
  818 + line-height: 28px;
714 } 819 }
715 -  
716 - /* 取消状态 */  
717 - .el-table .cancel-row {  
718 - background: rgba(144, 147, 153, 0.2); 820 +</style>
  821 +<style>
  822 + .my-text-area .el-textarea__inner{
  823 + min-height: 28px;
  824 + height: 28px;
  825 + border-bottom-left-radius: 0;
  826 + border-top-left-radius: 0;
719 } 827 }
720 -  
721 - /* 待执行状态 */  
722 - .el-table .await-row {  
723 - background: rgba(230, 162, 60, 0.2); 828 + .rounded-corner {
  829 + border-radius: 10px; /* 设置圆角的半径为10像素 */
  830 + background-color: #f0f0f0; /* 背景颜色 */
  831 + padding: 10px; /* 内边距 */
  832 + margin: 10px; /* 外边距 */
  833 + box-shadow: 0 0 5px #ddd; /* 盒子阴影效果 */
724 } 834 }
725 </style> 835 </style>