liwei19941102 2 лет назад
Родитель
Сommit
389831bab3

+ 21 - 0
src/assets/json/carService.json

@@ -66,6 +66,13 @@
             "prop": "remark",
             "visible": true,
             "isTemplate": false
+        },{
+            "placeholder": "请输入图片",
+            "type": "image",
+            "label": "图片",
+            "prop": "file",
+            "visible": true,
+            "isTemplate": false
         }]
     },
     {
@@ -121,6 +128,13 @@
             "prop": "remark",
             "visible": true,
             "isTemplate": false
+        },{
+            "placeholder": "请输入图片",
+            "type": "image",
+            "label": "图片",
+            "prop": "file",
+            "visible": true,
+            "isTemplate": false
         }]
     },
     {
@@ -188,6 +202,13 @@
             "isTemplate": false,
             "itemSpan":24,
             "unit":""
+        },{
+            "placeholder": "请输入图片",
+            "type": "image",
+            "label": "图片",
+            "prop": "file",
+            "visible": true,
+            "isTemplate": false
         }]
     }
 ]

+ 42 - 0
src/assets/json/table.json

@@ -63,6 +63,13 @@
 		"prop": "cash",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 },{
 	"dataName": "maintenanceInfo",
@@ -119,6 +126,13 @@
 		"prop": "remark",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 },{
 	"dataName": "insuranceInfo",
@@ -196,6 +210,13 @@
 		"prop": "lrr",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 },{
 	"dataName": "trafficAccidentInfo",
@@ -258,6 +279,13 @@
 		"prop": "lrr",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 },{
 	"dataName": "violationInfo",
@@ -320,6 +348,13 @@
 		"prop": "lrr",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 },{
 	"dataName": "changeInfo",
@@ -375,5 +410,12 @@
 		"prop": "lrr",
 		"visible": true,
 		"isTemplate": false
+	},{
+		"placeholder": "请输入图片",
+		"type": "image",
+		"label": "图片",
+		"prop": "file",
+		"visible": true,
+		"isTemplate": false
 	}]
 }]

+ 2 - 2
src/components/HomeComponents/countPage.vue

@@ -6,7 +6,7 @@
         <div class="divContent" style="display: flex;flex-direction: row;justify-content: space-around;align-items: center;">
             <div>
                 <div class="divBackGround">
-                    <div class="countFont" style="color: #16FF84;">1784</div>
+                    <div class="countFont" style="color: #16FF84;">{{ people }}</div>
                 </div>
                 <div style="display: flex;flex-direction: row;justify-content: center;margin-top: 10px;">
                     <div class="titleClass">
@@ -116,7 +116,7 @@ onMounted(() => {
         font-weight: bold;
         font-size: 42px;
         line-height: 17px;
-        text-align: right;
+        text-align: center !important;
         font-style: normal;
         text-transform: none;
     }

+ 37 - 34
src/components/HomeComponents/stationPie.vue

@@ -8,7 +8,7 @@
                 style="display: flex;flex-direction: row;justify-content: space-around;align-items: center;padding-right: 1vw;">
                 <div style="display: flex;flex-direction: row;margin-top: 1vh;padding-left: 1vw;">
                     <div ref="stationchart" style="width:10vw;height: 20vh;"></div>
-                    <div style="display: flex;flex-direction: column;justify-content: space-around;">
+                    <div style="display: flex;flex-direction: column;">
                         <div class="countDiv"
                             style="display: flex;flex-direction: column;justify-content: space-between;">
                             <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
@@ -23,45 +23,48 @@
                             <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
                                     src="@/assets/images/homeImages/bottom.png"></div>
                         </div>
-                        <div class="countDiv" style="display: flex;flex-direction: column;justify-content: space-between;">
-                        <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
-                        <div style="display: flex;flex-direction: row;justify-content: space-around;">
-                            <div class="typeClass">
-                                在线设备
-                            </div>
-                            <div class="countClass" style="color: #22FE31;">
-                                1
+                        <div class="countDiv"
+                            style="display: flex;flex-direction: column;justify-content: space-between;margin-top: 0.5vh;">
+                            <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
+                            <div style="display: flex;flex-direction: row;justify-content: space-around;">
+                                <div class="typeClass">
+                                    在线设备
+                                </div>
+                                <div class="countClass" style="color: #22FE31;">
+                                    1
+                                </div>
                             </div>
+                            <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
+                                    src="@/assets/images/homeImages/bottom.png"></div>
                         </div>
-                        <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
-                                src="@/assets/images/homeImages/bottom.png"></div>
-                    </div>
-                    <div class="countDiv" style="display: flex;flex-direction: column;justify-content: space-between;">
-                        <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
-                        <div style="display: flex;flex-direction: row;justify-content: space-around;">
-                            <div class="typeClass">
-                                箱体总数
-                            </div>
-                            <div class="countClass" style="color: #FEF822;">
-                                3200
+                        <div class="countDiv"
+                            style="display: flex;flex-direction: column;justify-content: space-between;margin-top: 0.5vh;">
+                            <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
+                            <div style="display: flex;flex-direction: row;justify-content: space-around;">
+                                <div class="typeClass">
+                                    箱体总数
+                                </div>
+                                <div class="countClass" style="color: #FEF822;">
+                                    3200
+                                </div>
                             </div>
+                            <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
+                                    src="@/assets/images/homeImages/bottom.png"></div>
                         </div>
-                        <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
-                                src="@/assets/images/homeImages/bottom.png"></div>
-                    </div>
-                    <div class="countDiv" style="display: flex;flex-direction: column;justify-content: space-between;">
-                        <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
-                        <div style="display: flex;flex-direction: row;justify-content: space-around;">
-                            <div class="typeClass">
-                                3100
-                            </div>
-                            <div class="countClass" style="color: #22FE31;">
-                                259
+                        <div class="countDiv"
+                            style="display: flex;flex-direction: column;justify-content: space-between;margin-top: 0.5vh;">
+                            <div><img style="width: 2vw;height: 1vh;" src="@/assets/images/homeImages/up.png"></div>
+                            <div style="display: flex;flex-direction: row;justify-content: space-around;">
+                                <div class="typeClass">
+                                    3100
+                                </div>
+                                <div class="countClass" style="color: #22FE31;">
+                                    259
+                                </div>
                             </div>
+                            <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
+                                    src="@/assets/images/homeImages/bottom.png"></div>
                         </div>
-                        <div style="margin-left: 6vw;"><img style="width: 2vw;height: 1vh;"
-                                src="@/assets/images/homeImages/bottom.png"></div>
-                    </div>
                     </div>
 
                     <!-- <div style="width:10vw;margin-left: 1vw;padding-right: 1vw;">

+ 1 - 1
src/components/HomeStatics/countPage.vue

@@ -54,7 +54,7 @@ onMounted(() => {
     width: 100%;
     background: rgba(255, 255, 255, 0.85);
     border-radius: 8px 8px 8px 8px;
-    box-shadow: 0px 0px 6px 6px rgba(0, 0, 0, 0.1);
+    box-shadow: 0px 0px 6px 6px rgba(0, 0, 0, 0.3);
 
     .title {
         font-family: Source Han Sans CN, Source Han Sans CN;

+ 3 - 3
src/components/Map/map.vue

@@ -91,10 +91,10 @@ const setDataList = (data) => {
 
 const initMap = () => {
     window._AMapSecurityConfig = {
-        securityJsCode: '8e920f73eb2e6880a92ea6662eefc476',
+        securityJsCode: 'b16e0ff6d065a3b8a87e6c448e982ca4',
     }
     AMapLoader.load({
-        key: "88d0fc14bcd5921a4e5a09ef1a3ab31a", // 申请好的Web端开发者Key,首次调用 load 时必填
+        key: "c60c1af6d4f39c5220f3ad36298a8830", // 申请好的Web端开发者Key,首次调用 load 时必填
         version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
         // plugins:[''], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
     }).then((AMap) => {
@@ -108,7 +108,7 @@ const initMap = () => {
         mapObj.value = map;
         console.log(map)
         if (props.darkType) {
-            var styleName = "amap://styles/darkblue";
+            var styleName = "amap://styles/8b9b98f3e261fb3096f4425490da9c5d";
             map.setMapStyle(styleName);
         }
         // 添加插件

+ 69 - 9
src/views/car/carInfo/add.vue

@@ -269,8 +269,8 @@
                             </template>
                             <div class="content-w">
                                 <el-select v-model="ext2.pathId" filterable placeholder="业务分类">
-                                    <el-option v-for="item in carPathList" :key="item.id"
-                                        :label="item.name" :value="item.id" />
+                                    <el-option v-for="item in carPathList" :key="item.id" :label="item.name"
+                                        :value="item.id" />
                                 </el-select>
                             </div>
                         </el-descriptions-item>
@@ -366,6 +366,14 @@
                         :placeholder="item.placeholder" />
                     <el-date-picker v-if="item.type == 'date'" value-format="YYYY-MM-DD HH:mm:ss"
                         v-model="addForm[item.prop]" type="date" :placeholder="item.placeholder" />
+                    <el-upload v-if="item.type == 'image'" v-model:file-list="fileList"
+                        :headers="headers"
+                        :action="uploadImgUrl" list-type="picture-card"
+                        :on-remove="handleRemove"  :on-success="handleUploadSuccess">
+                        <el-icon>
+                            <Plus />
+                        </el-icon>
+                    </el-upload>
                 </el-form-item>
             </el-form>
 
@@ -390,6 +398,24 @@ import tableJson from "@/assets/json/table.json"
 import useTagsViewStore from '@/store/modules/tagsView';
 import { allocatedUserList, authUserCancel, authUserCancelAll } from "@/api/system/role";
 import { listCarPath, getCarPath, delCarPath, addCarPath, updateCarPath } from '@/api/carPath';
+import type { UploadProps, UploadUserFile } from 'element-plus'
+import { globalHeaders } from '@/utils/request';
+import { getToken } from '@/utils/auth';
+
+const fileList = ref<UploadUserFile[]>([
+
+])
+
+const fileData = ref([])
+
+const headers = ref({
+    "Authorization":'Bearer ' +getToken(),
+    "Clientid":'e5cd7e4891bf95d1d19206ce24a7b32e',
+    "Accept":'application/json, text/plain, */*'
+});
+
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const uploadImgUrl = ref(baseUrl + "/resource/oss/upload"); // 上传的图片服务器地址
 
 const route = useRoute();
 const router = useRouter();
@@ -413,9 +439,9 @@ const initFormData: CarInfoForm = {
 }
 
 const ext2 = ref({
-    driverInfo:undefined,
-    attendantInfo:undefined,
-    pathId:undefined
+    driverInfo: undefined,
+    attendantInfo: undefined,
+    pathId: undefined
 })
 
 const formParams = ref({
@@ -438,6 +464,11 @@ const formParams = ref({
     sydw: undefined
 })
 
+const upload = reactive<UploadOption>({
+  headers: globalHeaders(),
+  url: 'http://47.104.97.60/api/resource/oss/upload'
+})
+
 const table = ref(tableElm)
 
 const addForm = ref({});
@@ -524,6 +555,8 @@ const ckList = ref([])
 const ck = ref(null)
 
 const reset = () => {
+    console.log(111111111111)
+    console.log(upload)
     form.value = {};
     console.log(0)
 }
@@ -548,17 +581,40 @@ const energyTypeList = ref([])
 const bussinessTypeList = ref([])
 const carId = ref(0);
 
+const handleRemove = (uploadFile, uploadFiles) =>{
+    console.log(uploadFile)
+    const arry = fileData.value.filter((item) => item.ossId != fileData.value.ossId)
+    fileData.value = arry;
+    fileList.value = arry;
+}
+
 const getDictsData = (param, obj) => {
     getDicts(param).then(res => {
         obj.value = res.data;
     })
 }
 
+const handleUploadSuccess = (response, file, fileList) =>{
+     console.log(response)
+     console.log(response.data.url)
+     if(response.code == 200){
+        var obj = {
+            name:response.data.fileName,
+            url:response.data.url.replaceAll("http://127.0.0.1:9000","https://khy.xiaole.vip/khyfile").split('?')[0],
+            ossId:response.data.ossId
+        }
+     } 
+     fileData.value.push(obj)
+}
+
 const updateObj = (data) => {
     addObj();
     dialog.visible = true
     console.log(data)
     addForm.value = data
+    console.log(JSON.parse(data.fileList))
+    fileList.value = JSON.parse(data.fileList)
+    fileData.value = JSON.parse(data.fileList)
     console.log(addForm.value)
 }
 
@@ -630,12 +686,14 @@ const submitForm = () => {
         }
     }
     if (addForm.value.id != null) {
+        addForm.value.fileList = JSON.stringify(fileData.value)
         for (var index in arry) {
             if (arry[index].id == addForm.value.id) {
                 arry[index] = addForm.value
             }
         }
     } else {
+        addForm.value.fileList = JSON.stringify(fileData.value)
         addForm.value.id = 'id-' + new Date().getTime().toString(36) + '-' + Math.random().toString(36).substr(2, 9);
         arry.push(addForm.value);
     }
@@ -678,7 +736,7 @@ const setData = async (id) => {
     const res = await getCarInfo(id);
     console.log(res)
     formParams.value = JSON.parse(res.data.ext1)
-    if(res.data.ext2 != null){
+    if (res.data.ext2 != null) {
         ext2.value = JSON.parse(res.data.ext2)
     }
     form.value = res.data
@@ -698,8 +756,8 @@ const addObj = () => {
 }
 
 const getcarPathList = async () => {
-  const res = await listCarPath(queryParams.value);
-  carPathList.value = res.rows;
+    const res = await listCarPath(queryParams.value);
+    carPathList.value = res.rows;
 }
 
 
@@ -731,10 +789,12 @@ const getData = async () => {
     }
 }
 
+
+
 reset();
 setTimeout(() => {
     getData();
-}, 100); 
+}, 100);
 
 </script>
 

+ 51 - 9
src/views/car/vehicleService/index.vue

@@ -13,14 +13,14 @@
                         <!-- <carWork></carWork> -->
                         <oilUse @addInfoObj="openDialog" ref="service1Obj"></oilUse>
                     </el-tab-pane>
-                    <el-tab-pane label="加油" name="2" >
+                    <el-tab-pane label="加油" name="2">
                         <oilUse @addInfoObj="openDialog" ref="service2Obj"></oilUse>
                         <!-- <schedule></schedule> -->
                     </el-tab-pane>
                     <el-tab-pane label="维修" name="3">
                         <oilUse @addInfoObj="openDialog" ref="service3Obj"></oilUse>
                     </el-tab-pane>
-           
+
                 </el-tabs>
             </div>
         </el-card>
@@ -32,6 +32,13 @@
                         :placeholder="item.placeholder" />
                     <el-date-picker v-if="item.type == 'date'" value-format="YYYY-MM-DD HH:mm:ss"
                         v-model="addForm[item.prop]" type="date" :placeholder="item.placeholder" />
+                    <el-upload v-if="item.type == 'image'" v-model:file-list="fileList" :headers="headers"
+                        :action="uploadImgUrl" list-type="picture-card" :on-remove="handleRemove"
+                        :on-success="handleUploadSuccess">
+                        <el-icon>
+                            <Plus />
+                        </el-icon>
+                    </el-upload>
                 </el-form-item>
             </el-form>
 
@@ -51,6 +58,7 @@ import { CarInfoVO, CarInfoQuery, CarInfoForm } from '@/api/carInfo/types';
 import { listCarService, getCarService, delCarService, addCarService, updateCarService } from '@/api/carService';
 import tableElm from "@/components/Public/table.vue";
 import { useRoute, useRouter } from "vue-router";
+import { getToken } from '@/utils/auth';
 
 import oilUse from './serviceInfo.vue';
 import serviceJson from '@/assets/json/carService.json'
@@ -58,6 +66,9 @@ import serviceJson from '@/assets/json/carService.json'
 const route = useRoute();
 const router = useRouter();
 
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const uploadImgUrl = ref(baseUrl + "/resource/oss/upload");
+
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
 const carInfoList = ref<CarInfoVO[]>([]);
@@ -71,7 +82,7 @@ const total = ref(0);
 const value2 = ref('')
 const addForm = ref({});
 
-const activeName = ref("4")
+const activeName = ref("1")
 
 const queryFormRef = ref<ElFormInstance>();
 const carInfoFormRef = ref<ElFormInstance>();
@@ -88,6 +99,12 @@ const dialog = reactive<DialogOption>({
     title: ''
 });
 
+const headers = ref({
+    "Authorization":'Bearer ' +getToken(),
+    "Clientid":'e5cd7e4891bf95d1d19206ce24a7b32e',
+    "Accept":'application/json, text/plain, */*'
+});
+
 const table = ref(tableElm)
 
 const service1Obj = ref(oilUse)
@@ -123,6 +140,10 @@ const initFormData: CarInfoForm = {
 
 const carId = ref(null);
 
+const fileList = ref<UploadUserFile[]>([])
+
+const fileData = ref([])
+
 const data = reactive<PageData<CarInfoForm, CarInfoQuery>>({
     form: { ...initFormData },
     queryParams: {
@@ -203,11 +224,33 @@ const getList = async () => {
 
 const openDialog = () => {
     formList.value = serviceJson[activeName.value - 1].columns
+    fileList.value = []
+    fileData.value = []
     console.log(formList.value)
     addForm.value = {}
     dialog.visible = true
 }
 
+const handleUploadSuccess = (response, file, fileList) =>{
+     console.log(response)
+     console.log(response.data.url)
+     if(response.code == 200){
+        var obj = {
+            name:response.data.fileName,
+            url:response.data.url.replaceAll("http://127.0.0.1:9000","https://khy.xiaole.vip/khyfile").split('?')[0],
+            ossId:response.data.ossId
+        }
+     } 
+     fileData.value.push(obj)
+}
+
+const handleRemove = (uploadFile, uploadFiles) =>{
+    console.log(uploadFile)
+    const arry = fileData.value.filter((item) => item.ossId != fileData.value.ossId)
+    fileData.value = arry;
+    fileList.value = arry;
+}
+
 const childrenClick = (data) => {
     if (data.func == "updateObj") {
         updateObj(data.data)
@@ -217,9 +260,9 @@ const childrenClick = (data) => {
 const updateObj = (data) => {
     carId.value = data.id
     console.log(carId.value)
-    service3Obj.value.initData(data,activeName.value)
-    service2Obj.value.initData(data,activeName.value)
-    service1Obj.value.initData(data,activeName.value)
+    service3Obj.value.initData(data, activeName.value)
+    service2Obj.value.initData(data, activeName.value)
+    service1Obj.value.initData(data, activeName.value)
 }
 
 const submitService = () => {
@@ -227,11 +270,10 @@ const submitService = () => {
         carId: carId.value
     };
     var key = serviceJson[activeName.value - 1].dataName
+    addForm.value = fileData.value
     obj[key] = JSON.stringify(addForm.value);
-    console.log(obj)
-    console.log(addForm.value)
     addCarService(obj).then(res => {
-        if(res.code == 200){
+        if (res.code == 200) {
             dialog.visible = false
         }
     })

+ 91 - 18
src/views/statics/passengerFlow.vue

@@ -8,7 +8,7 @@
                         <div class="search" v-show="showSearch" style="display: flex;flex-direction: row;">
                             <div style="width: 80%;">
                                 <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
-                                    <el-form-item label="路线">
+                                    <!-- <el-form-item label="路线">
                                         <el-select v-model="line" placeholder="请选择路线" style="width: 120px">
                                             <el-option v-for="item in carPathList" :key="item.id" :label="item.name"
                                                 :value="item.id" />
@@ -16,12 +16,12 @@
                                     </el-form-item>
                                     <el-form-item label="车辆">
                                         <el-select v-model="line" placeholder="请选择车辆" style="width: 120px">
-                                            <el-option v-for="item in carInfoList" :key="item.id" :label="item.name"
+                                            <el-option v-for="item in carInfoList" :key="item.id" :label="item.carNum"
                                                 :value="item.id" />
                                         </el-select>
-                                    </el-form-item>
+                                    </el-form-item> -->
                                     <el-form-item label="时间" prop="carNum">
-                                        <el-date-picker v-model="value2" type="datetimerange" :shortcuts="shortcuts"
+                                        <el-date-picker v-model="dataValue" type="daterange" :shortcuts="shortcuts"
                                             range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
                                     </el-form-item>
                                 </el-form>
@@ -31,18 +31,14 @@
                                     <!-- <el-button type="primary" plain @click="goadd">今天</el-button>
                                     <el-button type="primary" plain @click="resetQuery">昨天</el-button>
                                     <el-button type="primary" plain @click="resetQuery">近三天</el-button> -->
-                                    <el-button type="primary" @click="goadd">查询</el-button>
+                                    <el-button type="primary" @click="searchCar">查询</el-button>
                                     <el-button @click="resetQuery">重置</el-button>
                                 </el-form-item>
                             </div>
                         </div>
                     </transition>
                     <el-card shadow="never">
-
                         <tableElm @childToParent='childrenClick' :columns="columns1" ref="table1"></tableElm>
-
-                        <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                            v-model:limit="queryParams.pageSize" @pagination="getList" />
                     </el-card>
                 </div>
             </el-tab-pane>
@@ -53,7 +49,7 @@
                         <div class="search" v-show="showSearch" style="display: flex;flex-direction: row;">
                             <div style="width: 80%;">
                                 <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
-                                    <el-form-item label="路线">
+                                    <!-- <el-form-item label="路线">
                                         <el-select v-model="line" placeholder="请选择路线" style="width: 120px">
                                             <el-option v-for="item in carPathList" :key="item.id" :label="item.name"
                                                 :value="item.id" />
@@ -64,9 +60,9 @@
                                             <el-option v-for="item in carInfoList" :key="item.id" :label="item.name"
                                                 :value="item.id" />
                                         </el-select>
-                                    </el-form-item>
+                                    </el-form-item> -->
                                     <el-form-item label="时间" prop="carNum">
-                                        <el-date-picker v-model="value2" type="datetimerange" :shortcuts="shortcuts"
+                                        <el-date-picker v-model="dataValue2" type="daterange" :shortcuts="shortcuts"
                                             range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
                                     </el-form-item>
                                 </el-form>
@@ -83,11 +79,7 @@
                         </div>
                     </transition>
                     <el-card shadow="never">
-
                         <tableElm @childToParent='childrenClick' :columns="columns2" ref="table2"></tableElm>
-
-                        <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                            v-model:limit="queryParams.pageSize" @pagination="getList" />
                     </el-card>
                 </div>
             </el-tab-pane>
@@ -99,8 +91,10 @@
 import { listCarInfo, getCarInfo, delCarInfo, addCarInfo, updateCarInfo } from '@/api/carInfo';
 import { CarInfoVO, CarInfoQuery, CarInfoForm } from '@/api/carInfo/types';
 import { listCarPath, getCarPath, delCarPath, addCarPath, updateCarPath } from '@/api/carPath';
+import { getCountData } from '@/api/gpsData';
 import tableElm from "@/components/Public/table.vue";
 import { useRoute, useRouter } from "vue-router";
+import moment from 'moment';
 
 const route = useRoute();
 const router = useRouter();
@@ -121,6 +115,15 @@ const carPathList = ref([])
 const queryFormRef = ref<ElFormInstance>();
 const carInfoFormRef = ref<ElFormInstance>();
 
+const dataValue = ref<[Date, Date]>([
+    new Date(new Date().getTime() - 3600 * 24 * 1000),
+    new Date(),
+])
+
+const dataValue2 = ref<[Date, Date]>([
+    new Date(new Date().getTime() - 3600 * 24 * 1000),
+    new Date(),
+])
 
 const dialog = reactive<DialogOption>({
     visible: false,
@@ -131,6 +134,8 @@ const table = ref(tableElm)
 const table1 = ref(tableElm)
 const table2 = ref(tableElm)
 const activeName = ref("first")
+const carFlowList = ref([])
+const lineFlowList = ref([])
 
 const columns = ref([
     // {label: '上层位置', prop: 'v', visible: true},
@@ -235,12 +240,21 @@ const data = reactive<PageData<CarInfoForm, CarInfoQuery>>({
     }
 });
 
+const paramData = ref({
+    starttime: '',
+    endtime: ''
+})
+
 const { queryParams, form, rules } = toRefs(data);
 
 const goadd = () => {
     router.push("/car/work/addWork")
 }
 
+const searchData = () => {
+    console.log(dataValue.value)
+}
+
 /** 查询车辆信息列表 */
 const getList = async () => {
     // loading.value = true;
@@ -389,10 +403,69 @@ const initData = async () => {
     const res = await listCarPath({ pageSize: 1000 });
     carPathList.value = res.rows
     const res2 = await listCarInfo({ pageSize: 1000 });
-    carInfoList.value = res.rows
+    carInfoList.value = res2.rows
+    carFlowList.value = [];
+    for (var index in carInfoList.value) {
+        if (carInfoList.value[index].deviceInfos != null) {
+            var deviceCode = JSON.parse(carInfoList.value[index].deviceInfos).code
+            await getFlowData(deviceCode,carInfoList.value[index].carNum)
+        }
+        //getFlowData();
+    }
+    table1.value.setButton([]);
+    // console.log(carFlowList.value)
+    table1.value.setDataList(carFlowList.value);
+}
+
+const searchCar = async() =>{
+    carFlowList.value = [];
+    for (var index in carInfoList.value) {
+        if (carInfoList.value[index].deviceInfos != null) {
+            var deviceCode = JSON.parse(carInfoList.value[index].deviceInfos).code
+            await getFlowData(deviceCode,carInfoList.value[index].carNum)
+        }
+        //getFlowData();
+    }
+    table1.value.setButton([]);
+    // console.log(carFlowList.value)
+    table1.value.setDataList(carFlowList.value);
+}
+
+const getFlowData = (carCode,carNum) => {
+    var obj = {
+        starttime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
+        endtime: moment(dataValue.value[1]).format('YYYY-MM-DD')
+    }
+    getCountData({ devicecode: carCode, params: obj }).then(res => {
+        var data = {
+            carNum: carNum,
+            startTime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
+            endTime: moment(dataValue.value[1]).format('YYYY-MM-DD'),
+            upCount: res.data.totalin,
+            downCount: res.data.totalout
+        }
+        carFlowList.value.push(data);
+    })
+}
+
+const getStationData = (carCode,siteName) => {
+    var obj = {
+        starttime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
+        endtime: moment(dataValue.value[1]).format('YYYY-MM-DD')
+    }
+    getCountData({ devicecode: carCode, params: obj }).then(res => {
+        var data = {
+            siteName: siteName,
+            startTime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
+            endTime: moment(dataValue.value[1]).format('YYYY-MM-DD'),
+            upCount: res.data.totalin,
+            downCount: res.data.totalout
+        }
+        carFlowList.value.push(data);
+    })
 }
 
 onMounted(() => {
-    getList();
+    initData();
 });
 </script>

+ 43 - 24
src/views/yunying/message/index.vue

@@ -16,30 +16,36 @@
         </el-checkbox-group>
       </el-form-item>
       <el-form-item label="发布范围">
-        <el-radio-group v-model="formdata.type" class="ml-4">
-          <el-radio value="1" size="large">按路线</el-radio>
-          <el-radio value="2" size="large">按站点</el-radio>
+        <el-radio-group v-model="radio">
+          <el-radio :label="1">按站点</el-radio>
+          <el-radio :label="2">按线路</el-radio>
         </el-radio-group>
       </el-form-item>
       <el-form-item label="发布类型">
-      <el-input
-      v-model="input3"
-      style="max-width: 600px"
-      placeholder="搜索或选择"
-      class="input-with-select"
-    >
-      <template #prepend>
-        <el-button :icon="Search" />
-      </template>
-      <template #append>
-        <el-select v-model="select" placeholder="选择" style="width: 115px">
-          <el-option label="Restaurant" value="1" />
-          <el-option label="Order No." value="2" />
-          <el-option label="Tel" value="3" />
-        </el-select>
-      </template>
-    </el-input>
-  </el-form-item>
+        <!-- <el-input v-model="input3" style="max-width: 600px" placeholder="搜索或选择" class="input-with-select">
+          <template #prepend>
+            <el-button :icon="Search" />
+          </template>
+<template #append>
+            <el-select v-model="select" placeholder="选择" style="width: 115px">
+              <el-option label="Restaurant" value="1" />
+              <el-option label="Order No." value="2" />
+              <el-option label="Tel" value="3" />
+            </el-select>
+          </template>
+</el-input> -->
+        <div v-if="radio == 2">
+          <el-select v-model="line" placeholder="请选择路线" style="width: 300px">
+            <el-option v-for="item in carPathList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+        </div>
+        <div v-if="radio == 1">
+          <el-select v-model="site" placeholder="请选择站点" style="width: 300px">
+            <el-option v-for="item in sites" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
+          </el-select>
+        </div>
+
+      </el-form-item>
       <!-- <el-form-item label="设备">
         <el-tree-select v-model="formdata.devicelist"
           :data="sites.map(i => { return { value: i.dictLabel, label: i.dictLabel, children: JSON.parse(i.remark).filter(j => { return j.type == 'led' || j.type == 'tts' }).map(j => { return { value: `${i.dictCode}_${j.type}_${j.code}`, label: `${i.dictLabel}—${j.name}` } }) } })"
@@ -61,21 +67,27 @@ import { useRoute, useRouter } from "vue-router";
 import { updateData, listData } from "@/api/system/dict/data";
 import { playdevice } from '@/api/gpsData';
 import { ElMessage } from "element-plus";
+import { listCarPath, getCarPath, delCarPath, addCarPath, updateCarPath } from '@/api/carPath';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 import { Search } from '@element-plus/icons-vue'
 
 
+const carPathList = ref([])
+const line =ref([])
+const site =ref()
+
 const sites = ref([]);
 const formdata = ref({
   title: "",
   message: "",
   devicelist: [],
-  checkList:[],
-  type: '1'
+  checkList: [],
+  type: 1
 })
 
 const select = ref([])
-const input3 =ref()
+const input3 = ref()
+const radio = ref(1)
 
 const route = useRoute();
 const router = useRouter();
@@ -96,6 +108,11 @@ const sendMessage = () => {
 }
 
 
+const initData = async () => {
+  const res = await listCarPath({ pageSize: 1000 });
+  carPathList.value = res.rows
+}
+
 
 const getSites = () => {
   listData({ dictType: "tbl_sites" }).then(res2 => {
@@ -104,12 +121,14 @@ const getSites = () => {
 }
 
 onMounted(() => {
+  initData();
   getSites();
   // treeRef.value.expandNode(treeRef.value.getNode(1))
 })
 
 
 
+
 </script>
 
 <style lang="scss" scoped>