wenhongquan 3 years ago
parent
commit
5dc8869a80

+ 9 - 0
src/api/system/task.js

@@ -85,4 +85,13 @@ export function hcTask(data) {
         method: "post",
         data: data
     });
+}
+
+// 到达现场
+export function ddTask(data) {
+    return request({
+        url: "/system/tasklog",
+        method: "post",
+        data: data,
+    });
 }

+ 12 - 0
src/components/MapSelect/index.jsx

@@ -258,6 +258,17 @@ export default defineComponent({
         });
     };
 
+    const getlocationaddr=(location,backcall) => {
+      fetch(
+        `https://restapi.amap.com/v3/geocode/regeo?location=${location}&key=1c7f1c8eda2ccbe7d0e125a7e2fc2a61`
+      ).then((res) => res.json())
+        .then((data) => {
+          if (backcall) {
+            backcall(data);
+           }
+        })
+    }
+
     const getlocalname = (location) => {
       fetch(
         `https://restapi.amap.com/v3/geocode/regeo?location=${location}&key=1c7f1c8eda2ccbe7d0e125a7e2fc2a61`,
@@ -351,6 +362,7 @@ export default defineComponent({
       searchaddr,
       selectpoint,
       getLocation,
+      getlocationaddr,
     };
   },
   render() {

+ 26 - 2
src/components/Task/Add/index.vue

@@ -3,6 +3,11 @@
     <el-form :model="taskinfo" label-width="120px">
       <el-row>
         <el-col :span="12">
+          <el-form-item label="工单号:">
+             <el-input v-model="taskinfo.taskCode" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
           <el-form-item label="事件来源:">
             <el-select
               v-model="taskinfo.taskType"
@@ -134,11 +139,11 @@
             </el-select>
           </el-form-item>
         </el-col>
-        <el-col :span="24">
+        <!-- <el-col :span="24">
           <el-form-item label="备注">
             <el-input type="textarea" v-model="taskinfo.remark" />
           </el-form-item>
-        </el-col>
+        </el-col> -->
 
         <el-col :span="12">
           <el-form-item label="事件地址">
@@ -178,6 +183,9 @@
 
 <script>
 import { ref, watch, defineComponent, onMounted } from "vue";
+import {
+  listTask,
+} from "@/api/system/task";
 import { useDict } from "@/utils/dict";
 import { cloneDeep } from "lodash";
 import { listDept, getDept } from "@/api/system/dept";
@@ -185,6 +193,7 @@ import MapSelect from "@/components/MapSelect";
 import { Plus } from "@element-plus/icons-vue";
 // 文件上传组件
 import ImageUpload from "@/components/ImageUpload";
+import moment from "moment";
 import { treeselect as deptTreeselect } from "@/api/system/dept";
 
 export default defineComponent({
@@ -210,6 +219,9 @@ export default defineComponent({
       "sys_area"
       );
     const taskinfo = ref({});
+    listTask({ taskCode: moment().year() + "" }).then(res => {
+       taskinfo.value.taskCode = moment().year()+(Array(3).join(0) + (res.total+1)).slice(-3)
+    })
 
     watch(
       () => formlocation.value.addr,
@@ -221,6 +233,18 @@ export default defineComponent({
       () => formlocation.value.locations,
       () => {
         taskinfo.value.taskLocation = formlocation.value.locations;
+        if (formlocation.value.locations != "") {
+          mapSelect.value.getlocationaddr(formlocation.value.locations, (data) => {
+            var qu = data.regeocode.addressComponent.district;
+            if (qu) {
+              for (var i in sys_area.value) {
+                if (sys_area.value[i].label == qu) {
+                  taskinfo.value.taskArea = sys_area.value[i].value
+                }
+              }
+            }
+      })
+    }
       }
     );
 

+ 28 - 1
src/views/mb/task/add/index.vue

@@ -10,12 +10,24 @@
       <van-form @submit="onSubmit">
         <van-cell-group inset>
           <van-field
+            v-model="taskinfo.taskCode"
+            name="工单编号"
+            label="工单编号"
+            placeholder="工单编号"
+          />
+          <van-field
             v-model="taskinfo.taskName"
             name="工单名称"
             label="工单名称"
             placeholder="工单名称"
           />
           <van-field
+            v-model="taskinfo.taskcode"
+            name="工单名称"
+            label="工单名称"
+            placeholder="工单名称"
+          />
+          <van-field
             v-model="taskinfo.taskTime"
             is-link
             readonly
@@ -184,6 +196,7 @@ listUser({ pageSize: 1000 }).then((res) => {
 
 const taskinfo = ref({
   taskName: null,
+  taskCode: null,
   taskContent: null,
   taskTime: null,
   taskEventType: null,
@@ -199,12 +212,26 @@ watch(
   () => formlocation.value.addr,
   () => {
     taskinfo.value.taskAddr = formlocation.value.addr;
+
   }
 );
 watch(
   () => formlocation.value.locations,
   () => {
     taskinfo.value.taskLocation = formlocation.value.locations;
+    if (formlocation.value.locations != "") {
+      mapSelect.value.getlocationaddr(formlocation.value.locations, (data) => {
+         var qu = data.regeocode.addressComponent.district;
+            if (qu) {
+              for (var i in sys_area.value) {
+                if (sys_area.value[i].label == qu) {
+                  taskinfo.value.taskArea = sys_area.value[i].value
+                }
+              }
+            }
+      })
+    }
+
   }
 );
 
@@ -213,7 +240,7 @@ watch(() => task_event_type.value, () => {
 })
 
 const onSubmit = async () => {
-  if (taskinfo.taskName === null || taskinfo.taskName === '') {
+  if (taskinfo.taskName === null || taskinfo.taskName === '' || taskinfo.taskCode === null || taskinfo.taskCode === '') {
     Toast.fail("请填写完整");
     return;
   }

+ 38 - 19
src/views/mb/task/detail/index.vue

@@ -69,7 +69,7 @@
           </van-row>
           <van-row>
             <van-col :span="24">详细地址:{{ taskinfo.taskAddr }}</van-col>
-            <van-col :span="24">备注信息:{{ taskinfo.remark }}</van-col>
+            <!-- <van-col :span="24">备注信息:{{ taskinfo.remark }}</van-col> -->
           </van-row>
           <van-row>
 
@@ -96,33 +96,33 @@
           </van-collapse-item>
           <van-collapse-item class="citem" title="派发信息" name="2" v-if="taskinfo.status > 1">
             <van-row>
-            <van-col :span="12"
+            <van-col :span="24"
               >负责人:{{
                 allusers.filter(
                   (i) =>
-                    i.userId.toString() ===
-                    JSON.parse(
-                      taskinfo.tblTaskLogList.filter(
-                        (ii) => ii.taskStatus === 2
-                      )[0].logDes
-                    ).fzr.toString()
-                )[0]?.nickName ?? "-"
+                    (JSON.parse(
+                          taskinfo.tblTaskLogList.filter(
+                            (ii) => ii.taskStatus === 2
+                          )[0].logDes
+                        ).fzr ?? []
+                      ).indexOf(i.userId+"") != -1
+                ).map((i) => i.nickName).join(",")
               }}</van-col
             >
-            <van-col :span="12"
+            <van-col :span="24"
               >联系方式:{{
-                allusers.filter(
+                 allusers.filter(
                   (i) =>
-                    i.userId.toString() ===
-                    JSON.parse(
-                      taskinfo.tblTaskLogList.filter(
-                        (ii) => ii.taskStatus === 2
-                      )[0].logDes
-                    ).fzr.toString()
-                )[0]?.phonenumber ?? "-"
+                    (JSON.parse(
+                          taskinfo.tblTaskLogList.filter(
+                            (ii) => ii.taskStatus === 2
+                          )[0].logDes
+                        ).fzr ?? []
+                      ).indexOf(i.userId+"") != -1
+                ).map((i) => i.phonenumber).join(",")
               }}</van-col
             >
-            <van-col :span="12"
+            <van-col :span="24"
               >处置班组:{{
                 alldept
                   .filter(
@@ -454,7 +454,26 @@ const taskinfo = ref({
 
 onMounted(() => {
   getTask(Number(route.params.id)).then((res) => {
+    var templist = {};
+    var list = res.data.tblTaskLogList;
+    for (var i in list) {
+      var log = list[i];
+      if (templist.hasOwnProperty(log.taskStatus + "")) {
+
+        if (moment(templist[log.taskStatus + ""].createTime).unix() - moment(log.createTime).unix() < 0) {
+          templist[log.taskStatus + ""] = log;
+        }
+      } else {
+         templist[log.taskStatus+""] = log;
+      }
+    }
+    var lists = [];
+    for (var i in templist) {
+      lists.push(templist[i]);
+    }
     taskinfo.value = res.data;
+    taskinfo.value.tblTaskLogList = lists;
+    // taskinfo.value = res.data;
   });
 });
 const onClickLeft = () => {

+ 23 - 0
src/views/mb/task/index.vue

@@ -81,6 +81,15 @@
                         ><div>任务内容: {{ item.taskContent }}</div></van-col
                       >
                     </van-row>
+                    <van-row v-if="item.status == 2 && ((item.tblTaskLogList??[]).filter(i=>i.taskStatus==-1).length<1)">
+                        <van-col span="24">
+                         <div style="text-align:right">
+                            <van-button type="primary" size="small" @click.stop="daoda(item)">到达现场</van-button>
+                          </div>
+
+                        </van-col>
+
+                    </van-row>
                   </div>
                 </div>
               </div>
@@ -102,7 +111,9 @@ import {
   delTask,
   addTask,
   updateTask,
+  ddTask,
 } from "@/api/system/task";
+import { Toast } from "vant";
 
 const tasklist = ref([]);
 const loading = ref(false);
@@ -180,6 +191,18 @@ const onClickLeft = () => {
 const onClickRight = () => {
   router.push("/mb/task/add")
 };
+
+const daoda = (item) => {
+  ddTask({
+    taskId: item.taskId,
+    taskStatus: -1,
+    logDes: JSON.stringify({"desc":"到达"})
+  }).then(res => {
+    Toast.success("成功");
+    onRefresh();
+  })
+}
+
 </script>
 
 <style lang="scss">

+ 52 - 26
src/views/task/detail/index.vue

@@ -112,8 +112,8 @@
             <el-col :span="6">上报人:{{ taskinfo.taskReporter }}</el-col>
           </el-row>
           <el-row>
-            <el-col :span="12">详细地址:{{ taskinfo.taskAddr }}</el-col>
-            <el-col :span="12">备注信息:{{ taskinfo.remark }}</el-col>
+            <el-col :span="24">详细地址:{{ taskinfo.taskAddr }}</el-col>
+            <!-- <el-col :span="12">备注信息:{{ taskinfo.remark }}</el-col> -->
           </el-row>
           <el-row>
             <el-col :span="12">现场照片:</el-col>
@@ -146,26 +146,28 @@
               >负责人:{{
                 allusers.filter(
                   (i) =>
-                    i.userId.toString() ===
-                    JSON.parse(
-                      taskinfo.tblTaskLogList.filter(
-                        (ii) => ii.taskStatus === 2
-                      )[0].logDes
-                    ).fzr.toString()
-                )[0]?.nickName ?? "-"
+                    (JSON.parse(
+                          taskinfo.tblTaskLogList.filter(
+                            (ii) => ii.taskStatus === 2
+                          )[0].logDes
+                        ).fzr ?? []
+                      ).indexOf(i.userId+"") != -1
+                ).map((i) => i.nickName).join(",")
               }}</el-col
             >
             <el-col :span="6"
               >联系方式:{{
+
                 allusers.filter(
                   (i) =>
-                    i.userId.toString() ===
-                    JSON.parse(
-                      taskinfo.tblTaskLogList.filter(
-                        (ii) => ii.taskStatus === 2
-                      )[0].logDes
-                    ).fzr.toString()
-                )[0]?.phonenumber ?? "-"
+                    (JSON.parse(
+                          taskinfo.tblTaskLogList.filter(
+                            (ii) => ii.taskStatus === 2
+                          )[0].logDes
+                        ).fzr ?? []
+                      ).indexOf(i.userId+"") != -1
+                ).map((i) => i.phonenumber).join(",")
+
               }}</el-col
             >
             <el-col :span="6"
@@ -436,22 +438,28 @@
       <div>
         <el-form :model="pdobj" label-width="120px">
           <el-form-item label="负责班组"
-            ><el-tree-select
+            >
+            <el-select v-model="pdobj.fzbz" multiple placeholder="">
+              <el-option v-for="dept in ywdept" :label="dept.deptName" :value="dept.deptId"></el-option>
+            </el-select>
+
+            <!-- <el-tree-select
               style="width: 100%"
               v-model="pdobj.fzbz"
               multiple
-              :data="treedept"
-          /></el-form-item>
+              :data="ywdept"
+          /> -->
+          </el-form-item>
           <el-form-item label="负责人">
             <el-select
               v-model="pdobj.fzr"
               placeholder="请选择"
               style="width: 100%"
+              multiple
             >
               <el-option
-                v-for="item in allusers.filter(
-                  (i) => (pdobj.fzbz ?? []).indexOf(i.deptId) !== -1
-                )"
+                v-for="item in fzrusers"
+                :key="item.userId"
                 :label="item.nickName"
                 :value="item.userId"
               />
@@ -805,7 +813,7 @@ const showbh = ref(false);
 const showcz = ref(false);
 const showgz = ref(false);
 const showsh = ref(false);
-const pdobj = ref({ fzbz: [], fzr: "" });
+const pdobj = ref({ fzbz: [], fzr: [] });
 const bhobj = ref({ resonRemark: [], files: "", images: [] });
 const czobj = ref({
   qsdes: "",
@@ -917,8 +925,10 @@ const Taskdistributed = () => {
 // console.error(route.params.id)
 
 const alldept = ref([]);
+const ywdept = ref([]);
 listDept().then((response) => {
   alldept.value = cloneDeep(response.data);
+  ywdept.value = alldept.value.filter(i => i.deptName.indexOf('运营') != -1 && i.deptName.indexOf('生产') == -1);
 });
 
 function setdatakey(dept) {
@@ -990,12 +1000,27 @@ onMounted(() => {
     taskinfo.value.tblTaskLogList = lists;
   });
 });
+
+
+const fzrusers = ref([]);
+
+watch(() => pdobj.value.fzbz, () => {
+  fzrusers.value =  allusers.value.filter(
+                  (i) => (pdobj.value.fzbz ?? []).indexOf(i.deptId) != -1 && i.nickName.indexOf("热线处置")!=-1
+  ).map(i => { i.userId = i.userId + ""; return i; })
+
+})
+
+
 </script>
 
 <style lang="scss">
 .demo-tabs {
   width: 100%;
 }
+ .el-select {
+    width: 100% !important;
+  }
 .taskdetail {
   background: #fff;
   padding: 30px 22px;
@@ -1004,9 +1029,10 @@ onMounted(() => {
   padding-top: 20px;
   position: relative;
 
-  .el-select {
-    width: 100%;
-  }
+  // .el-select {
+  //   width: 100%;
+  // }
+
   .title {
     color: #2b3551;
     font-size: 16px;