|  | @@ -0,0 +1,200 @@
 | 
												
													
														
															|  | 
 |  | +/**
 | 
												
													
														
															|  | 
 |  | +  // author:jiana
 | 
												
													
														
															|  | 
 |  | +  // time:2025-04-23
 | 
												
													
														
															|  | 
 |  | +  // desc:运单管理
 | 
												
													
														
															|  | 
 |  | +*/
 | 
												
													
														
															|  | 
 |  | +<template>
 | 
												
													
														
															|  | 
 |  | +  <div class="deviceAbnormality">
 | 
												
													
														
															|  | 
 |  | +    <Card>
 | 
												
													
														
															|  | 
 |  | +      <!-- 筛选 -->
 | 
												
													
														
															|  | 
 |  | +      <Row :gutter="8">
 | 
												
													
														
															|  | 
 |  | +        <Col span="10">
 | 
												
													
														
															|  | 
 |  | +          运单号 <Input v-model="filtInfoData.waybillNum" placeholder="请输入运单号" style="width:80%"/>
 | 
												
													
														
															|  | 
 |  | +        </Col>
 | 
												
													
														
															|  | 
 |  | +        <Col span="2">
 | 
												
													
														
															|  | 
 |  | +          <Button type="primary" @click="getData">查询</Button>
 | 
												
													
														
															|  | 
 |  | +        </Col>
 | 
												
													
														
															|  | 
 |  | +        <Col span="2">
 | 
												
													
														
															|  | 
 |  | +          <Button @click="resetData">重置</Button>
 | 
												
													
														
															|  | 
 |  | +        </Col>
 | 
												
													
														
															|  | 
 |  | +      </Row>
 | 
												
													
														
															|  | 
 |  | +    </Card>
 | 
												
													
														
															|  | 
 |  | +    <Card style="margin-top:20px;">
 | 
												
													
														
															|  | 
 |  | +      <Row>
 | 
												
													
														
															|  | 
 |  | +        <Col span="12">
 | 
												
													
														
															|  | 
 |  | +          运单列表
 | 
												
													
														
															|  | 
 |  | +        </Col>
 | 
												
													
														
															|  | 
 |  | +        <Col span="12" style="text-align: right;">
 | 
												
													
														
															|  | 
 |  | +          <!-- <Button @click="batchOperation">批量操作</Button> -->
 | 
												
													
														
															|  | 
 |  | +        </Col>
 | 
												
													
														
															|  | 
 |  | +      </Row>
 | 
												
													
														
															|  | 
 |  | +      <!-- 表格部分 -->
 | 
												
													
														
															|  | 
 |  | +      <el-table v-loading="loading" :data="TabData.data" border style="width: 100%;margin-top:20px;" @selection-change="handleSelectionChange">
 | 
												
													
														
															|  | 
 |  | +        <!-- <el-table-column type="selection" align="center" width="50"/> -->
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="运单号" width="180" prop="waybillNum" align="center"/>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="运输起始地" width="100" prop="waybill.transportOrigin" align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="运输目的地" width="120" prop="waybill.transportDestination" align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="司机姓名" prop="waybill.driverName" width="120"  align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="司机手机号" prop="waybill.driverPhone" width="120" align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="车牌" prop="waybill.plateNumber" width="120" align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="状态" align="center" width="100">
 | 
												
													
														
															|  | 
 |  | +          <template #default="scope">
 | 
												
													
														
															|  | 
 |  | +            <Tag color="green" v-if="scope.row.status == 'NORMAL'">正常</Tag>
 | 
												
													
														
															|  | 
 |  | +            <Tag color="red" v-if="scope.row.status == 'ABNORMAL'">异常</Tag>
 | 
												
													
														
															|  | 
 |  | +          </template>
 | 
												
													
														
															|  | 
 |  | +        </el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="关联单号" prop="waybill.orderNum" width="220" align="center"></el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="添加时间" width="160" align="center">
 | 
												
													
														
															|  | 
 |  | +          <template #default="scope">
 | 
												
													
														
															|  | 
 |  | +            {{ moment(scope.row.addTime).format('yyyy-MM-DD hh:mm:ss') || '暂无'}}
 | 
												
													
														
															|  | 
 |  | +          </template>
 | 
												
													
														
															|  | 
 |  | +        </el-table-column>
 | 
												
													
														
															|  | 
 |  | +        <el-table-column label="操作" width="180"  fixed="right" align="center">
 | 
												
													
														
															|  | 
 |  | +          <template  #default="scope">
 | 
												
													
														
															|  | 
 |  | +            <Button class="opt_btn" size="small" type="primary" ghost @click="lookTrack(scope.row.id)">查看轨迹</Button>
 | 
												
													
														
															|  | 
 |  | +            <Button class="opt_btn" size="small" type="warning" @click="lookInfo(scope.row.exceptionInfo)">查看异常</Button>
 | 
												
													
														
															|  | 
 |  | +          </template>
 | 
												
													
														
															|  | 
 |  | +        </el-table-column>
 | 
												
													
														
															|  | 
 |  | +      </el-table>
 | 
												
													
														
															|  | 
 |  | +      <!-- 分页 -->
 | 
												
													
														
															|  | 
 |  | +      <div class="page_style">
 | 
												
													
														
															|  | 
 |  | +        <Page :total="TabData.total" :model-value="currentPage" show-elevator show-total @on-change="changePage" />
 | 
												
													
														
															|  | 
 |  | +      </div>
 | 
												
													
														
															|  | 
 |  | +    </Card>
 | 
												
													
														
															|  | 
 |  | +    <!-- 查看轨迹 -->
 | 
												
													
														
															|  | 
 |  | +    <Modal v-model="showModal" width="75%" title="查看轨迹">
 | 
												
													
														
															|  | 
 |  | +      <mapTrack></mapTrack>
 | 
												
													
														
															|  | 
 |  | +    </Modal>
 | 
												
													
														
															|  | 
 |  | +    <!-- 查看异常 -->
 | 
												
													
														
															|  | 
 |  | +    <Modal v-model="showInfo" width="60%" title="查看异常">
 | 
												
													
														
															|  | 
 |  | +      <el-descriptions title="">
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="设备经度:">{{exceptionInfo.deviceLon}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="设备纬度:">{{exceptionInfo.devideLat}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="车辆经度:">{{exceptionInfo.carLon}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="车辆纬度:">{{exceptionInfo.carLat}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="车辆是否在电子围栏:">{{exceptionInfo.carinCircle == true ? '是':'否'}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="设备是否在电子围栏:">{{exceptionInfo.deviceInCircle == true ? '是':'否'}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="设备到电子围栏中心距离:">{{exceptionInfo.distance}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="车辆到电子围栏中心距离:">{{exceptionInfo.cardistance}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +          <el-descriptions-item label="设备及车辆之间的距离:">{{exceptionInfo.carDevieDistance}}</el-descriptions-item>
 | 
												
													
														
															|  | 
 |  | +      </el-descriptions>
 | 
												
													
														
															|  | 
 |  | +    </Modal>
 | 
												
													
														
															|  | 
 |  | +  </div>
 | 
												
													
														
															|  | 
 |  | +</template>
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +<script>
 | 
												
													
														
															|  | 
 |  | +import { defineComponent, ref ,reactive, onMounted} from 'vue'
 | 
												
													
														
															|  | 
 |  | +import { tms } from '@/request/api'
 | 
												
													
														
															|  | 
 |  | +import { Message,Modal,Spin,Input } from 'view-ui-plus'
 | 
												
													
														
															|  | 
 |  | +import moment from 'moment'
 | 
												
													
														
															|  | 
 |  | +import {useRoute} from 'vue-router'
 | 
												
													
														
															|  | 
 |  | +import mapTrack from "./mapTrack.vue"
 | 
												
													
														
															|  | 
 |  | +export default defineComponent({
 | 
												
													
														
															|  | 
 |  | +  components:{
 | 
												
													
														
															|  | 
 |  | +    mapTrack
 | 
												
													
														
															|  | 
 |  | +  },
 | 
												
													
														
															|  | 
 |  | +  setup() {
 | 
												
													
														
															|  | 
 |  | +    const route = useRoute()
 | 
												
													
														
															|  | 
 |  | +    let filtInfoData = reactive({ // 搜索
 | 
												
													
														
															|  | 
 |  | +      limit:10,offset:0,waybillNum:'',type:'LOADING'
 | 
												
													
														
															|  | 
 |  | +    })
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    let TabData = ref([])  // 列表数据
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    let loading = ref(false)
 | 
												
													
														
															|  | 
 |  | +    //获取列表内容
 | 
												
													
														
															|  | 
 |  | +    async function getData(){
 | 
												
													
														
															|  | 
 |  | +      loading.value = true
 | 
												
													
														
															|  | 
 |  | +      await tms.queryWaybillExceptionByCondition(filtInfoData).then(res =>{
 | 
												
													
														
															|  | 
 |  | +        if (res.code == 0) {
 | 
												
													
														
															|  | 
 |  | +          TabData.value = res
 | 
												
													
														
															|  | 
 |  | +        }
 | 
												
													
														
															|  | 
 |  | +      })
 | 
												
													
														
															|  | 
 |  | +      loading.value = false
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +    //重置
 | 
												
													
														
															|  | 
 |  | +    function resetData(){
 | 
												
													
														
															|  | 
 |  | +      filtInfoData.offset = 0
 | 
												
													
														
															|  | 
 |  | +      filtInfoData.limit = 10
 | 
												
													
														
															|  | 
 |  | +      filtInfoData.waybillNum = ''
 | 
												
													
														
															|  | 
 |  | +      filtInfoData.type = 'DEVICE'
 | 
												
													
														
															|  | 
 |  | +      getData()
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    let currentPage = ref(1)
 | 
												
													
														
															|  | 
 |  | +    //更改页码
 | 
												
													
														
															|  | 
 |  | +    function changePage (page) {
 | 
												
													
														
															|  | 
 |  | +      if(TabData.value.limit){
 | 
												
													
														
															|  | 
 |  | +        filtInfoData.offset = (page -1) *  TabData.value.limit  //更新偏移量
 | 
												
													
														
															|  | 
 |  | +        currentPage = page  //切换当前页码
 | 
												
													
														
															|  | 
 |  | +        getData() 
 | 
												
													
														
															|  | 
 |  | +      }
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    //删除
 | 
												
													
														
															|  | 
 |  | +    function deleteInfo(id){
 | 
												
													
														
															|  | 
 |  | +      this.$Modal.confirm({
 | 
												
													
														
															|  | 
 |  | +        title: '提示',
 | 
												
													
														
															|  | 
 |  | +        content: '<p>确定删除该信息吗?</p>',
 | 
												
													
														
															|  | 
 |  | +        onOk: async() => {
 | 
												
													
														
															|  | 
 |  | +          const params={
 | 
												
													
														
															|  | 
 |  | +            id:id,
 | 
												
													
														
															|  | 
 |  | +            reason:offSafeValue.value
 | 
												
													
														
															|  | 
 |  | +          }
 | 
												
													
														
															|  | 
 |  | +          await cow.cattleDealoffSale(params).then(res=>{
 | 
												
													
														
															|  | 
 |  | +            if(res.code === 101){
 | 
												
													
														
															|  | 
 |  | +              Message.success('删除成功!');
 | 
												
													
														
															|  | 
 |  | +              getData()
 | 
												
													
														
															|  | 
 |  | +            }
 | 
												
													
														
															|  | 
 |  | +          })
 | 
												
													
														
															|  | 
 |  | +        },
 | 
												
													
														
															|  | 
 |  | +        onCancel: () => {
 | 
												
													
														
															|  | 
 |  | +          this.$Message.info('Clicked cancel');
 | 
												
													
														
															|  | 
 |  | +        }
 | 
												
													
														
															|  | 
 |  | +      })
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    //批量操作
 | 
												
													
														
															|  | 
 |  | +    function batchOperation(){
 | 
												
													
														
															|  | 
 |  | +      
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    // 选择监听器
 | 
												
													
														
															|  | 
 |  | +    const handleSelectionChange = (val) =>{
 | 
												
													
														
															|  | 
 |  | +      context.emit("selection-change", val)
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    const showModal = ref(false)
 | 
												
													
														
															|  | 
 |  | +    // 查看详情
 | 
												
													
														
															|  | 
 |  | +    function lookTrack(){
 | 
												
													
														
															|  | 
 |  | +      showModal.value = true
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +    const showInfo = ref(false)
 | 
												
													
														
															|  | 
 |  | +    const exceptionInfo = ref({})
 | 
												
													
														
															|  | 
 |  | +    //查看异常
 | 
												
													
														
															|  | 
 |  | +    function lookInfo(data){
 | 
												
													
														
															|  | 
 |  | +      showInfo.value = true
 | 
												
													
														
															|  | 
 |  | +      exceptionInfo.value = JSON.parse(data)
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +    onMounted(()=>{
 | 
												
													
														
															|  | 
 |  | +      getData() 
 | 
												
													
														
															|  | 
 |  | +    })
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +    return {
 | 
												
													
														
															|  | 
 |  | +      handleSelectionChange,getData,changePage,moment,deleteInfo,TabData,filtInfoData,
 | 
												
													
														
															|  | 
 |  | +      loading,batchOperation,resetData,exceptionInfo,showInfo,lookInfo,lookTrack,showModal
 | 
												
													
														
															|  | 
 |  | +    }
 | 
												
													
														
															|  | 
 |  | +  },
 | 
												
													
														
															|  | 
 |  | +})
 | 
												
													
														
															|  | 
 |  | +</script>
 | 
												
													
														
															|  | 
 |  | +
 | 
												
													
														
															|  | 
 |  | +<style lang="scss" scoped>
 | 
												
													
														
															|  | 
 |  | +.deviceAbnormality{
 | 
												
													
														
															|  | 
 |  | +  padding: 1em;
 | 
												
													
														
															|  | 
 |  | +  .opt_btn{margin-bottom:3px; margin-right: 3px;}
 | 
												
													
														
															|  | 
 |  | +  .page_style{
 | 
												
													
														
															|  | 
 |  | +    text-align: right; margin-top: 1em;
 | 
												
													
														
															|  | 
 |  | +    // background-color: var(--system-container-background);
 | 
												
													
														
															|  | 
 |  | +  }
 | 
												
													
														
															|  | 
 |  | +}
 | 
												
													
														
															|  | 
 |  | +</style>
 |