liwei19941102 2 lat temu
rodzic
commit
dd9f8d8ccf

+ 4 - 0
src/api/carSchedule/types.ts

@@ -52,6 +52,8 @@ export interface CarScheduleForm extends BaseEntity {
    */
   uTime?: string;
 
+  carNum?: string;
+
 }
 
 export interface CarScheduleQuery extends PageQuery {
@@ -80,6 +82,8 @@ export interface CarScheduleQuery extends PageQuery {
      * 日期范围参数
      */
     params?: any;
+
+    carNum?: string;
 }
 
 

+ 83 - 1
src/views/car/carInfo/add.vue

@@ -260,6 +260,52 @@
                         </el-descriptions-item>
                     </el-descriptions>
 
+                    <el-descriptions :column="3">
+                        <el-descriptions-item>
+                            <template #label>
+                                <div style="display: inline-block;min-width: 100px;text-align: right">
+                                    <span style="color: red">*</span> 路线
+                                </div>
+                            </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-select>
+                            </div>
+                        </el-descriptions-item>
+
+                        <el-descriptions-item>
+                            <template #label>
+                                <div style="display: inline-block;min-width: 100px;text-align: right">
+                                    <span style="color: red">*</span> 司机
+                                </div>
+                            </template>
+                            <div class="content-w">
+                                <el-select v-model="ext2.driverInfo" class="m-2" placeholder="请选择司机"
+                                    style="width: 240px">
+                                    <el-option v-for="item in sjList" :key="item.userId" :label="item.nickName"
+                                        :value="item.userId" />
+                                </el-select>
+                            </div>
+                        </el-descriptions-item>
+
+                        <el-descriptions-item>
+                            <template #label>
+                                <div style="display: inline-block;min-width: 100px;text-align: right">
+                                    <span style="color: red">*</span> 跟车人员
+                                </div>
+                            </template>
+                            <div class="content-w">
+                                <el-select v-model="ext2.attendantInfo" class="m-2" placeholder="请选择跟车人员"
+                                    style="width: 240px">
+                                    <el-option v-for="item in ckList" :key="item.userId" :label="item.nickName"
+                                        :value="item.userId" />
+                                </el-select>
+                            </div>
+                        </el-descriptions-item>
+                    </el-descriptions>
+
                 </el-col>
 
                 <div style="margin-left: auto;margin-right: 20px;" v-if="carId != 0 && carId != null"><el-button
@@ -328,6 +374,8 @@ import tableElm from "@/components/Public/table.vue";
 import { getDicts } from '@/api/system/dict/data'
 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';
 
 const route = useRoute();
 const router = useRouter();
@@ -350,6 +398,12 @@ const initFormData: CarInfoForm = {
     ext2: undefined
 }
 
+const ext2 = ref({
+    driverInfo:undefined,
+    attendantInfo:undefined,
+    pathId:undefined
+})
+
 const formParams = ref({
     bussinessType: undefined,
     energyType: undefined,
@@ -449,6 +503,12 @@ const formList = ref([
     { placeholder: "请输入金额", type: 'input', label: '金额', prop: 'carNum', visible: true, isTemplate: false },
 ])
 
+
+const sjList = ref([])
+const driver = ref(null)
+const ckList = ref([])
+const ck = ref(null)
+
 const reset = () => {
     form.value = {};
     console.log(0)
@@ -467,6 +527,8 @@ const dialog = reactive<DialogOption>({
     title: ''
 });
 
+const carPathList = ref([])
+
 const carTypeList = ref([]);
 const energyTypeList = ref([])
 const bussinessTypeList = ref([])
@@ -506,6 +568,14 @@ const deleteObj = (data) => {
     })
 }
 
+const getUserList = async () => {
+    const res = await allocatedUserList({ pageSize: 1000, roleId: '1763484881548447746' });
+    sjList.value = res.rows
+    const ckres = await allocatedUserList({ pageSize: 1000, roleId: '1763484977044361217' });
+    ckList.value = ckres.rows
+}
+
+
 const childrenClick = (data) => {
     if (data.func == 'updateObj') {
         updateObj(data.data)
@@ -516,6 +586,7 @@ const childrenClick = (data) => {
 
 const submit = async () => {
     form.value.ext1 = JSON.stringify(formParams.value);
+    form.value.ext2 = JSON.stringify(ext2.value)
     console.log(form.value)
     buttonLoading.value = true;
     if (form.value.id) {
@@ -592,6 +663,9 @@ const setTableData = (tab) => {
 const setData = async (id) => {
     const res = await getCarInfo(id);
     formParams.value = JSON.parse(res.data.ext1)
+    if(res.data.ext2 != null){
+        ext2.value = JSON.parse(res.data.ext2)
+    }
     form.value = res.data
     // formParams.value = res
 }
@@ -608,9 +682,17 @@ const addObj = () => {
     dialog.visible = true
 }
 
+const getcarPathList = async () => {
+  const res = await listCarPath(queryParams.value);
+  carPathList.value = res.rows;
+}
+
+
 const getData = async () => {
     let objId = route.query.id
     carId.value = route.query.id
+    await getcarPathList();
+    await getUserList();
     await getDictsData('tbl_car_type', carTypeList);
     await getDictsData('energy_type', energyTypeList);
     await getDictsData('business_type', bussinessTypeList);
@@ -637,7 +719,7 @@ const getData = async () => {
 reset();
 setTimeout(() => {
     getData();
-}, 100);
+}, 100); 
 
 </script>
 

+ 3 - 2
src/views/car/work/addCarWork.vue

@@ -56,7 +56,7 @@
                         </el-descriptions-item>
 
                     </el-descriptions>
-                    <el-descriptions :column="4" style="width: 100%;">
+                    <!-- <el-descriptions :column="4" style="width: 100%;">
                         <el-descriptions-item>
 
                             <template #label>
@@ -102,7 +102,7 @@
                                 </el-select>
                             </div>
                         </el-descriptions-item>
-                    </el-descriptions>
+                    </el-descriptions> -->
                     <!-- <tableElm :columns="columns" ref="table"></tableElm> -->
                 </el-col>
             </el-row>
@@ -484,6 +484,7 @@ const setData = async (id) => {
 
 }
 
+
 const goBack = () => {
     useTagsViewStore().delView(route);
     router.back();

+ 3 - 5
src/views/car/work/carWork.vue

@@ -129,12 +129,12 @@ const data = reactive<PageData<CarPathForm, CarPathQuery>>({
 
 const columns = ref([
   // {label: '上层位置', prop: 'v', visible: true},
-  { label: '车牌', prop: 'carNum', pprop: "ext1", visible: true, isTemplate: false, isTemplateJson: true },
+  // { label: '车牌', prop: 'carNum', pprop: "ext1", visible: true, isTemplate: false, isTemplateJson: true },
   { label: '作业名称', prop: 'name', pprop: "ext1", visible: true, isTemplate: false },
   { label: '作业类型', prop: 'type', pprop: "ext2", func: "getWorkType", visible: true, isTemplate: false, isTemplateJsonFormat: true },
   { label: '网格', prop: 'wangge', pprop: "ext2", visible: true, isTemplate: false, isTemplateJson: true},
-  { label: '跟车人员', prop: 'attendantInfo', visible: true, isTemplate: true, func: "getattend" },
-  { label: '驾驶员、联系方式', prop: 'driverInfo', visible: true, isTemplate: true, func: "getDriverTable" },
+  // { label: '跟车人员', prop: 'attendantInfo', visible: true, isTemplate: true, func: "getattend" },
+  // { label: '驾驶员、联系方式', prop: 'driverInfo', visible: true, isTemplate: true, func: "getDriverTable" },
 ])
 
 const { queryParams, form, rules } = toRefs(data);
@@ -153,7 +153,6 @@ const getList = async () => {
 const getWorkType = (value) => {
   for (var index in workTypeList.value) {
     if (workTypeList.value[index].dictValue == value) {
-      console.log(workTypeList.value[index].dictLabel)
       return workTypeList.value[index].dictLabel
     }
   }
@@ -178,7 +177,6 @@ const childFormat = ({ data, fn }) => {
       if(data.func == 'getWorkType'){
         str = getWorkType(value)
       }
-      console.log(str)
       fn(str)
     }
   } else {

+ 77 - 33
src/views/car/work/schedule.vue

@@ -45,14 +45,20 @@
 
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
       <el-form ref="carInfoFormRef" :model="dateObj" :rules="rules" label-width="80px">
-        <el-form-item label="路线">
-          <el-select v-model="line" placeholder="请选择路线" style="width: 240px" @change="changeSelect">
-            <el-option v-for="item in carPathList" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
+        <el-form-item label="出发时间">
+          <el-time-picker v-model="startTime" :picker-options="{
+        selectableRange: '00:00:00 - 23:59:59'
+      }" placeholder="选择出发时间">
+          </el-time-picker>
         </el-form-item>
         <el-form-item label="车辆">
-          <el-select v-model="form.carNum" value-key="id" placeholder="请选择车辆" style="width: 240px">
-            <el-option v-for="item in carInfoList" :key="item.carNum" :label="item.carNum" :value="item.carNum" />
+          <el-select v-model="form.carId" placeholder="请选择车辆" style="width: 240px" @change="changeCarNum">
+            <el-option v-for="item in carInfoList" :key="item.id" :label="item.carNum" :value="item.id" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="路线">
+          <el-select v-model="line" placeholder="请选择路线" style="width: 240px">
+            <el-option v-for="item in carPathList" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
         </el-form-item>
         <el-form-item label="司机">
@@ -88,7 +94,8 @@ import { CarInfoVO, CarInfoQuery, CarInfoForm } from '@/api/carInfo/types';
 import tableElm from "@/components/Public/table.vue";
 import { allocatedUserList, authUserCancel, authUserCancelAll } from "@/api/system/role";
 import { useRoute, useRouter } from "vue-router";
-import moment from 'moment';
+import moment, { months } from 'moment';
+import Data from "@/views/system/dict/data.vue";
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
@@ -106,6 +113,9 @@ const carPathList = ref([]);
 const line = ref(null);
 const carPathObj = ref(null)
 const carInfoList = ref<CarInfoVO[]>([])
+const startTime = ref(new Date(2016, 9, 10, 0, 0))
+
+const carInfoObj = ref()
 
 const queryFormRef = ref<ElFormInstance>();
 const carScheduleFormRef = ref<ElFormInstance>();
@@ -119,7 +129,7 @@ const initFormData: CarScheduleForm = {
   id: undefined,
   pathInfo: undefined,
   scheduleDate: undefined,
-  carNum: undefined
+  carNum: undefined,
 }
 
 const selectDate = ref<Date>(null)
@@ -136,7 +146,7 @@ const formParams = ref({
 });
 
 const data = reactive<PageData<CarScheduleForm, CarScheduleQuery>>({
-  form: { ...initFormData },
+  form: { ...initFormData,carId:undefined },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
@@ -178,19 +188,33 @@ const addSchedule = () => {
 }
 
 const getcarInfoList = async () => {
-  const carList = await listCarInfo(queryParams.value);
+  const carList = await listCarInfo({pageSize:10000});
   carInfoList.value = carList.rows
 }
 
+const getCarNum = (value) =>{
+      for(var index in carInfoList.value){
+            if(carInfoList.value[index].id == value){
+                       return carInfoList.value[index].carNum
+            }
+      }
+}
+
+const getCarId = (value) =>{
+      for(var index in carInfoList.value){
+            if(carInfoList.value[index].carNum == value){
+                       return carInfoList.value[index].id
+            }
+      }
+}
+
 const getUserList = async () => {
   loading.value = true;
   const res = await allocatedUserList({ pageSize: 1000, roleId: '1763484881548447746' });
   sjList.value = res.rows
-  console.log(sjList.value)
   loading.value = true;
   const ckres = await allocatedUserList({ pageSize: 1000, roleId: '1763484977044361217' });
   ckList.value = ckres.rows
-  console.log(ckList.value)
 }
 
 const getattend = (value) => {
@@ -252,13 +276,15 @@ const getList = async () => {
   loading.value = false;
 }
 
-const changeSelect = (val) => {
-  for (var index in carPathList.value) {
-    if (val == carPathList.value[index].id) {
-      carPathObj.value = carPathList.value[index]
-      form.value.carNum = JSON.parse(carPathObj.value.ext1).carNum
-      formParams.value.driverInfo = carPathList.value[index].driverInfo
-      formParams.value.attendantInfo = carPathList.value[index].attendantInfo
+const changeCarNum = (val) => {
+  for (var i in carInfoList.value) {
+    if (val == carInfoList.value[i].id) {
+      if (carInfoList.value[i].ext2 != null) {
+        var obj = JSON.parse(carInfoList.value[i].ext2)
+        line.value = obj.pathId
+        formParams.value.driverInfo = obj.driverInfo;
+        formParams.value.attendantInfo = obj.attendantInfo;
+      }
     }
   }
 }
@@ -278,6 +304,7 @@ const reset = () => {
   }
   line.value = null;
   carPathObj.value = null;
+  startTime.value = new Date("2024-01-01 00:00:00")
   carScheduleFormRef.value?.resetFields();
 }
 
@@ -315,11 +342,11 @@ const handleUpdate = async (row?: CarScheduleVO) => {
   form.value.id = _id
   // Object.assign(form.value, res.data);
   var data = JSON.parse(res.data.pathInfo);
-  form.value.carNum = row.carNum
+  startTime.value = new Date(row.scheduleDate);
+  form.value.carId = getCarId(row.carNum);
   formParams.value.driverInfo = data.driverInfo
   formParams.value.attendantInfo = data.attendantInfo
   line.value = data.lineID
-  console.log(formParams.value)
   dialog.visible = true;
   dialog.title = "修改车及人员排班";
 }
@@ -358,28 +385,30 @@ const handleExport = () => {
 }
 
 const submitSchedule = async () => {
-  console.log(selectDate.value)
   var dataList = [];
+  for(var index in carPathList.value){
+            if(carPathList.value[index].id == line.value){
+              carPathObj.value = carPathList.value[index]
+            }
+  }
   if (carPathObj.value != null) {
     var stationList = JSON.parse(carPathObj.value.stationList)
-    console.log(stationList);
     for (var index in stationList) {
       var obj = {};
       obj.order = Number(index) + 1
       obj.location = stationList[index].data.dictValue
       if (stationList[index].timeObj) {
-        obj.planInTime = stationList[index].timeObj.startTime + ":00"
-        obj.planOutTime = stationList[index].timeObj.endTime + ":00"
-      }else{
+        obj.planInTime =  timeDateFormat(stationList[index].timeObj.startTime + ":00")
+        obj.planOutTime = timeDateFormat(stationList[index].timeObj.endTime + ":00")
+      } else {
         obj.planInTime = ''
         obj.planOutTime = ''
       }
       obj.stationName = stationList[index].data.dictLabel
       dataList.push(obj)
       if (index == 0) {
-        console.log(stationList[index].timeObj.startTime + ":00");
-        var date = moment(selectDate.value).format('YYYY-MM-DD') + ' ' + stationList[index].timeObj.startTime + ":00";
-        form.value.scheduleDate = date;
+        // var date = moment(selectDate.value).format('YYYY-MM-DD') + ' ' + stationList[index].timeObj.startTime + ":00";
+        form.value.scheduleDate = moment(selectDate.value).format('YYYY-MM-DD') + ' '+moment(startTime.value).format('HH:mm:ss');
       }
     }
   }
@@ -387,6 +416,7 @@ const submitSchedule = async () => {
   lineobj.lineID = line.value
   lineobj.pathLine = dataList
   form.value.pathInfo = JSON.stringify(lineobj);
+  form.value.carNum = getCarNum(form.value.carId);
   if (form.value.id) {
     await updateCarSchedule(form.value).finally(() => buttonLoading.value = false);
   } else {
@@ -403,22 +433,36 @@ const initData = async () => {
   const res = await listCarPath({ pageSize: 1000 });
   carPathList.value = res.rows
   selectDate.value = new Date();
-  console.log(selectDate.value)
   initList(selectDate.value);
 }
 
 
 const initList = (val) => {
-  console.log(val)
   queryParams.value.params.scheduleDate = moment(val).format('YYYY-MM-DD');
   listCarSchedule(queryParams.value).then(res => {
-    console.log(res)
-    console.log(table.value)
     table.value.setDataList(res.rows);
     total.value = res.total;
   })
 }
 
+const getTimeData = (date) => {
+          var startDate = moment(new Date()).format("YYYY-MM-DD HH:mm:ss")+" "+date
+          var time = startTime.value.getTime() - new Date(2016, 9, 10, 0, 0).getTime()
+          var siteTime = new Date(date).getTime() + time
+          // var str = moment(siteTime).format("YYYY-MM-DD HH:mm:ss")
+          var str = moment(siteTime).format("YYYY-MM-DD HH:mm:ss")
+         return str
+}
+
+const timeDateFormat = (date) =>{
+          var startDate = moment(startTime.value).format("YYYY-MM-DD")+" "+date
+          console.log(startTime.value)
+          var time =  startTime.value.getTime() - new Date(2016, 9, 10, 0, 0).getTime()
+          var siteTime = new Date(startDate).getTime() + time
+          var str = moment(siteTime).format("HH:mm:ss")
+         return str
+}
+
 // const initList = (data) =>{
 //   console.log(data)
 //   var date = data.day;