Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

Hwf 1 viikko sitten
vanhempi
commit
f01f0750ff

+ 18 - 0
src/api/duty/eventing.ts

@@ -77,3 +77,21 @@ export function getEventCasualties(data) {
     data: data
   });
 }
+
+
+// 列出应急干部
+export function listContact(params) {
+  return request({
+    url: "/api/emergency_plan/contact/list",
+    method: "get",
+    params: params
+  });
+}
+
+// 列出应急干部详情
+export function listInfo(id) {
+  return request({
+    url: "/api/emergency_plan/contact/info/"+id,
+    method: "get"
+  });
+}

+ 18 - 1
src/api/event.ts

@@ -53,7 +53,7 @@ export function getSignInfo(data) {
   });
 }
 
-export function signEvent(data) {
+export function checkEvent(data) {
   return request({
     url: "/api/event_management/checkin/check",
     method: "post",
@@ -61,6 +61,14 @@ export function signEvent(data) {
   });
 }
 
+export function signEvent(data) {
+  return request({
+    url: "/api/qrcode/check",
+    method: "post",
+    data: data
+  });
+}
+
 export function uploadCasualties(data) {
   return request({
     url: "/api/event_management/event/upload_casualties",
@@ -121,3 +129,12 @@ export function getTaskRegistrationDetail(params) {
     params: params
   });
 }
+
+
+// 趋势统计
+export function getEventCompletedTrend() {
+  return request({
+    url: "/api/event_management/event_xp/completed_trend",
+    method: "get"
+  });
+}

+ 1 - 1
src/permission.ts

@@ -10,7 +10,7 @@ import setPageTitle from "@/utils/set-page-title";
 import usePermissionStore from '@/store/modules/permission';
 
 NProgress.configure({ showSpinner: false });
-const whiteList = ['/login', '/yzy/callback', '/mplogin'];
+const whiteList = ['/login', '/yzy/callback', '/mplogin', '/signPage', '/signOK'];
 
 router.beforeEach(async (to, from, next) => {
   NProgress.start();

+ 9 - 4
src/views/disasterRiskMonitor/cadreInformation.vue

@@ -22,7 +22,7 @@
             <div style="margin: 30px 15px">
               <div class="online-box">
                 <div style="font-size: 18px; font-weight: bold">
-                  {{ personalInformation.name }}
+                  {{ personalInformation.contactName }}
                 </div>
                 <div
                   class="isOnline"
@@ -37,7 +37,7 @@
         </div>
         <div class="unit1-box">
           <div class="text" style="margin: 5px 0">所属单位</div>
-          <div class="info-content">{{ personalInformation.unit_name }}</div>
+          <div class="info-content">{{ personalInformation.unitName }}</div>
         </div>
         <div class="unit1-box">
           <div class="text" style="margin: 5px 0">职务</div>
@@ -56,7 +56,7 @@
                   src="@/assets/images/index/videoImage2.png"
                   style="height: 20px"
               />
-              <div style="color: #5991d0; margin-left: 5px">视频</div>
+              <div style="color: #5991d0; margin-left: 5px" @click="callVideo(personalInformation.phone)">视频</div>
             </div>
           </div>
 
@@ -72,6 +72,7 @@ import profile from "@/assets/images/tempImage/用户.png";
 import offlineUser from "@/assets/images/threePreventionResponsiblePerson/offlineUsers.png";
 import onlineUser from "@/assets/images/threePreventionResponsiblePerson/onlineUsers.png";
 import { getPersonalCard } from "@/api/persons";
+import { listInfo } from "@/api/duty/eventing";
 
 const isShowInformation = ref(false);
 const personalInformation = ref({});
@@ -84,7 +85,7 @@ const requestParameters = ref({
 });
 const route = useRoute();
 const userId = ref(route.query.id);
-getPersonalCard(userId.value).then(res => {
+listInfo(userId.value).then(res => {
   personalInformation.value = res.data || [];
 });
 
@@ -93,6 +94,10 @@ const showPersonalInformation = item => {
   isShowInformation.value = true;
   personalInformation.value = item;
 };
+
+const callVideo = (number) => {
+  window.location.href = `weixin://dl/call?phone=${number}&type=video`;
+};
 </script>
 
 <style scoped lang="scss">

+ 99 - 1
src/views/disasterRiskMonitor/chartOptions.ts

@@ -3,7 +3,7 @@ import { graphic } from "echarts";
 export const chartOption1 = {
   legend: {},
   grid: {
-    top: "40px",
+    top: "60px",
     left: "30px",
     right: "20px",
     bottom: "30px"
@@ -152,6 +152,104 @@ export const chartOption1 = {
         }
       },
       data: []
+    },
+    {
+      name: "公共卫生事件",
+      type: "line",
+      smooth: true, //是否平滑
+      showAllSymbol: true,
+      symbol: "circle",
+      symbolSize: 6,
+      lineStyle: {
+        color: "#9bbdf4"
+      },
+      label: {
+        show: true,
+        position: "top",
+        textStyle: {
+          color: "#9bbdf4",
+          fontSize: 10
+        }
+      },
+
+      itemStyle: {
+        color: "#9bbdf4",
+        borderColor: "#fff",
+        borderWidth: 1
+      },
+      areaStyle: {
+        normal: {
+          color: new graphic.LinearGradient(
+            0,
+            0,
+            0,
+            1,
+            [
+              {
+                offset: 0,
+                color: "rgba(0,202,149,0.3)"
+              },
+              {
+                offset: 1,
+                color: "rgba(0,202,149,0)"
+              }
+            ],
+            false
+          ),
+          shadowColor: "rgba(0,202,149, 0.9)",
+          shadowBlur: 20
+        }
+      },
+      data: []
+    },
+    {
+      name: "社会安全事件",
+      type: "line",
+      smooth: true, //是否平滑
+      showAllSymbol: true,
+      symbol: "circle",
+      symbolSize: 6,
+      lineStyle: {
+        color: "#f9df83"
+      },
+      label: {
+        show: true,
+        position: "top",
+        textStyle: {
+          color: "#f9df83",
+          fontSize: 10
+        }
+      },
+
+      itemStyle: {
+        color: "#f9df83",
+        borderColor: "#fff",
+        borderWidth: 1
+      },
+      areaStyle: {
+        normal: {
+          color: new graphic.LinearGradient(
+            0,
+            0,
+            0,
+            1,
+            [
+              {
+                offset: 0,
+                color: "rgba(0,202,149,0.3)"
+              },
+              {
+                offset: 1,
+                color: "rgba(0,202,149,0)"
+              }
+            ],
+            false
+          ),
+          shadowColor: "rgba(0,202,149, 0.9)",
+          shadowBlur: 20
+        }
+      },
+      data: []
     }
   ]
 };

+ 52 - 38
src/views/disasterRiskMonitor/cityEmergencyEvent.vue

@@ -79,9 +79,9 @@
             </template>
           </el-table-column>
           <el-table-column label="位置" prop="address" align="center"/>
-          <el-table-column label="发生时间" prop="create_time" align="center"/>
-          <el-table-column label="受伤人数" prop="data4" align="center"/>
-          <el-table-column label="死亡人数" prop="data5" align="center"/>
+          <el-table-column label="发生时间" prop="event_time" align="center"/>
+          <el-table-column label="受伤人数" prop="injuries" align="center"/>
+          <el-table-column label="死亡人数" prop="deaths" align="center"/>
         </el-table>
       </div>
     </div>
@@ -106,15 +106,15 @@
       </div>
       <div class="unit-box">
         <div class="text">发生时间</div>
-        <div class="info-content">{{ rowDetail.create_time }}</div>
+        <div class="info-content">{{ rowDetail.event_time }}</div>
       </div>
       <div class="unit-box">
         <div class="text">受伤人数</div>
-        <div class="info-content">{{ rowDetail.data4 }}</div>
+        <div class="info-content">{{ rowDetail.injuries }}</div>
       </div>
       <div class="unit-box">
         <div class="text">死亡人数</div>
-        <div class="info-content">{{ rowDetail.data5 }}</div>
+        <div class="info-content">{{ rowDetail.deaths }}</div>
       </div>
     </van-popup>
   </div>
@@ -127,6 +127,7 @@ import {getEvent} from "@/api/duty/eventing";
 import {chartOption1} from "@/views/disasterRiskMonitor/chartOptions";
 import searchImg from "@/assets/images/search.png";
 import { iconList } from '@/components/Map/mapData';
+import { getActiveEventList, getEventCompletedTrend } from "@/api/event";
 
 const proxy = getCurrentInstance()?.proxy;
 const {mm_event_type} = toRefs<any>(
@@ -184,7 +185,7 @@ let dataList = ref([]);
 const option1 = ref(chartOption1);
 const queryParams = reactive({
   page: 1,
-  pageSize: 10,
+  page_size: 10,
   year: ''
 });
 let loading = ref(false);
@@ -230,12 +231,22 @@ const getList = () => {
     loading.value = false;
   });
 };
+
+const getCompletedTrend = async() => {
+  getEventCompletedTrend().then((res) => {
+    option1.value.xAxis[0].data = res.data.xAxis;
+    res.data.series.forEach((n, i)=>{
+      option1.value.series[i].data = n;
+    });
+  })
+};
+
 const rowDetail = ref({
   address: '',
   event_type: '',
-  create_time: '',
-  data4: '',
-  data5: ''
+  event_time: '',
+  injuries: '',
+  deaths: ''
 });
 const handleRowClick = (row) => {
   setTimeout(() => {
@@ -244,37 +255,40 @@ const handleRowClick = (row) => {
   }, 10)
 };
 const initData = () => {
-  // getActiveEventList().then(res => {
-  //   if (res.data.event_id != noticeBarState.value.event_id) {
-  //     noticeBarState.value.show = true;
-  //     noticeBarState.value.event_id = res.data.event_id;
-  //     noticeBarState.value.event_title = res.data.event_title;
-  //   }
-  // });
-  noticeBarState.value = [
-    {
-      event_id: "",
-      time: "2024-03-01 12:12:12",
-      event_title: "茂名市茂南区xxx高速路口发生交通事故,今日凌晨三点在xx高速路口,由于突降暴雨路面湿滑,导致路面积水严重,不少路过车辆都减速慢行…"
+  getActiveEventList().then(res => {
+    if (res.data.event_id != '') {
+      noticeBarState.value = [{
+        event_id: res.data.event_id,
+        time: res.data.event_time,
+        event_title: res.data.event_description
+      }];
     }
-  ];
+  });
+  // noticeBarState.value = [
+  //   {
+  //     event_id: "",
+  //     time: "2024-03-01 12:12:12",
+  //     event_title: "茂名市茂南区xxx高速路口发生交通事故,今日凌晨三点在xx高速路口,由于突降暴雨路面湿滑,导致路面积水严重,不少路过车辆都减速慢行…"
+  //   }
+  // ];
   // 趋势统计
-  option1.value.xAxis[0].data = [
-    "2024-01",
-    "2024-02",
-    "2024-03",
-    "2024-04",
-    "2024-05",
-    "2024-06"
-  ];
-  option1.value.series[0].data = [
-    502.84, 205.97, 332.79, 281.55, 398.35, 214.02
-  ];
-  option1.value.series[1].data = [
-    281.55, 398.35, 214.02, 179.55, 289.57, 356.14
-  ];
+  // option1.value.xAxis[0].data = [
+  //   "2024-01",
+  //   "2024-02",
+  //   "2024-03",
+  //   "2024-04",
+  //   "2024-05",
+  //   "2024-06"
+  // ];
+  // option1.value.series[0].data = [
+  //   502.84, 205.97, 332.79, 281.55, 398.35, 214.02
+  // ];
+  // option1.value.series[1].data = [
+  //   281.55, 398.35, 214.02, 179.55, 289.57, 356.14
+  // ];
   // 事件列表
-  getList()
+  getList();
+  getCompletedTrend();
 };
 </script>
 

+ 42 - 9
src/views/disasterRiskMonitor/emergencyOfficials.vue

@@ -34,7 +34,7 @@
           finished-text="没有更多了"
           @load="onLoad"
       >
-        <div v-for="(item, index) in list" :key="item.id">
+        <div v-for="(item, index) in persons" :key="item.id">
           <div class="person-box2" @click="personInform(item)">
             <div class="circle">
               <img :src="onlineUser" alt="" />
@@ -74,7 +74,9 @@ import searchImg from "@/assets/images/search.png";
 import closeImg from "@/assets/images/close.png";
 import OrganizationalStructure from "@/views/threePreventionResponsiblePerson/organizationalStructure.vue";
 import { getPersonalData, getPersonalType } from "@/api/persons";
+import { listContact } from "@/api/duty/eventing";
 
+/*
 const list = ref([
   {
     id: "1",
@@ -157,6 +159,7 @@ const list = ref([
     expertType: "其它突发事件"
   }
 ]);
+*/
 const router = useRouter();
 const keywords = ref("");
 let responsibility_type = ref([]);
@@ -181,7 +184,7 @@ const requestParameters = ref({
   type_parent_id: "",
   page: 1,
   pageSize: 10,
-  Name: keywords,
+  contactName: keywords,
   checkedId: ""
 });
 const personInform = item => {
@@ -189,6 +192,7 @@ const personInform = item => {
 };
 const persons = ref([]);
 const onLoad = () => {
+  /*
   getPersonalData(requestParameters.value).then(res => {
     var item = res.data || [];
     // 重置 persons 数组(如果是第一页)
@@ -208,15 +212,44 @@ const onLoad = () => {
     requestParameters.value.page++;
     loading.value = false;
   });
+  */
+  listContact(requestParameters.value).then(res => {
+    var item = res.data || [];
+    // 重置 persons 数组(如果是第一页)
+    if (requestParameters.value.page == 1) {
+      persons.value = [];
+    }
+
+    // 将新数据添加到 persons 数组中
+    item.forEach((i)=>{
+      persons.value.push({
+        id: i.id,
+        name: i.contactName,
+        unit: i.unitName,
+        position: i.position,
+        phone:i.phone
+      })
+    });
+
+    // 检查是否加载了所有数据
+    if (persons.value.length >= res.total) {
+      finished.value = true;
+    } else {
+      finished.value = false;
+    }
+    requestParameters.value.page++;
+    loading.value = false;
+  });
 };
 onMounted(() => {
-  getDicts("responsibility_type").then(res => {
-    res.data.unshift({ dictLabel: "所有类型", dictValue: "" });
-    responsibility_type.value = res.data;
-  });
-  getPersonalType(requestParameters.value).then(res => {
-    responsibility_type = res.data || [];
-  });
+  // getDicts("responsibility_type").then(res => {
+  //   res.data.unshift({ dictLabel: "所有类型", dictValue: "" });
+  //   responsibility_type.value = res.data;
+  // });
+  //getPersonalType(requestParameters.value).then(res => {
+  //  responsibility_type = res.data || [];
+  //});
+  onLoad();
 });
 const onSearch = keywords => {
   requestParameters.value.page = 1;

+ 17 - 2
src/views/disasterRiskMonitor/expertinformation.vue

@@ -62,11 +62,11 @@
       <div class="button-style">
         <div class="button-one">
           <img src="@/assets/images/index/phoneImage.png" style="height: 30px" />
-          <div style="color: #546ee4">电话</div>
+          <div style="color: #546ee4" @click="callPhone(inform.mobile_phone)">电话</div>
         </div>
         <div class="button-two">
           <img src="@/assets/images/index/videoImage.png" style="height: 30px" />
-          <div style="color: #ffffff; margin-left: 5px">视频通话</div>
+          <div style="color: #ffffff; margin-left: 5px" @click="callVideo(inform.mobile_phone)">视频通话</div>
         </div>
       </div>
     </div>
@@ -77,9 +77,24 @@
 import onlineUser from "@/assets/images/threePreventionResponsiblePerson/onlineUsers.png";
 import offlineUser from "@/assets/images/threePreventionResponsiblePerson/offlineUsers.png";
 import {getExpertInfo} from "@/api/expert";
+import {showToast} from "vant";
+
 const route = useRoute();
 const inform = ref({});
 
+const callPhone = (number) => {
+  if (number == '') {
+    showToast('手机号码为空');
+  }
+  else {
+    window.location.href = `tel:${number}`;
+  }
+};
+
+const callVideo = (number) => {
+  window.location.href = `weixin://dl/call?phone=${number}&type=video`;
+};
+
 onMounted(() => {
   getExpertInfo(route.query.id).then((res) => {
     inform.value = res.data;

+ 4 - 0
src/views/event/index.vue

@@ -363,6 +363,10 @@ const handleCloseEvent = index => {
       font-size: 16px;
       color: #414f64;
       font-weight: 600;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      margin-right: 10px;
     }
 
     .item-title-control {

+ 45 - 32
src/views/signPage/index.vue

@@ -1,5 +1,9 @@
 <template>
   <div class="container">
+    <div style="padding: 16px 0 ;display:flex;flex-direction: row;justify-content: space-between;" v-if="type === '2'">
+      <div class="van-doc-block__title"></div>
+      <div class="van-doc-block__sub_title" @click="change_user">换人签到</div>
+    </div>
     <van-form @submit="onSubmit">
       <van-cell-group inset>
         <van-field
@@ -51,24 +55,12 @@
         <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit">
           确定签到
         </van-button>
-
-        <div class="div-line"></div>
-
-        <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
-          取消签到
-        </van-button>
       </div>
 
       <div class="button-list" v-if="type === '2'">
         <van-button :loading="loading" loading-text="签退中..." block type="danger" native-type="submit">
           确定签退
         </van-button>
-
-        <div class="div-line"></div>
-
-        <van-button block type="default" @click="handleSignCancel">
-          取消签退
-        </van-button>
       </div>
     </van-form>
   </div>
@@ -110,32 +102,45 @@ const onSubmit = () => {
   loading.value = true;
   signEvent(data).then((res)=>{
     loading.value = false;
+    if(submitMethod == '1') {
+      form.value.sign_time = res.data.sign_time;
+      localStorage.setItem(event_id+"_signData", JSON.stringify(form.value));
+    }  
+    else {
+      localStorage.removeItem(event_id+"_signData");
+    }
     router.push("/signOK?type="+submitMethod)
   })
 }
 
-
-const handleSignCancel = () => {
-  router.push("/")
-}
+const change_user = () => {
+  type.value = '1';
+  form.value = {
+    user_id: '0',
+    nick_name: '',
+    dept_id: '0',
+    dept_name: '',
+    duties: '',
+    sign_time: '',
+    phone: ''
+  };
+  localStorage.removeItem(event_id+"_signData");
+};
 
 onMounted(() => {
-  if (/(wxworklocal)/i.test(navigator.userAgent)) {
-    getSignInfo({event_id: event_id}).then((res)=> {
-      const user = res.data;
-      console.log('user', user);
-      type.value = user.sign_time == '' ? '1' : '2';
-
-      form.value = {
-        user_id: user.user_id,
-        nick_name: user.nick_name,
-        dept_id: user.dept_id,
-        dept_name: user.dept_name,
-        duties: user.duties,
-        sign_time: user.sign_time,
-        phone: user.phone
-      }
-    })
+  const jsonData = localStorage.getItem(event_id+"_signData");
+  if (jsonData) {
+    const user = JSON.parse(jsonData);
+    type.value = user.sign_time == '' ? '1' : '2';
+    form.value = {
+      user_id: user.user_id,
+      nick_name: user.nick_name,
+      dept_id: user.dept_id,
+      dept_name: user.dept_name,
+      duties: user.duties,
+      sign_time: user.sign_time,
+      phone: user.phone
+    }
   }
 })
 </script>
@@ -150,5 +155,13 @@ onMounted(() => {
   .div-line {
     height: 16px;
   }
+  .van-doc-block__sub_title {
+    margin: 0px;
+    padding: 0 6vmin;
+    font-size: 3.6vmin;
+    font-weight: 400;
+    line-height: 6.0vmin;
+    color: #1989fa;
+  }
 }
 </style>

+ 154 - 0
src/views/signPage/index.vue.bak

@@ -0,0 +1,154 @@
+<template>
+  <div class="container">
+    <van-form @submit="onSubmit">
+      <van-cell-group inset>
+        <van-field
+            v-model="form.nick_name"
+            name="姓名"
+            label="姓名"
+            placeholder="请填写姓名"
+            required
+            :rules="[{ required: true, message: '请填写姓名' }]"
+        />
+        <van-field
+            v-model="form.duties"
+            name="职务"
+            label="职务"
+            placeholder="请填写职务"
+            required
+            :rules="[{ required: true, message: '请填写职务' }]"
+        />
+        <van-field
+            v-model="form.dept_name"
+            name="单位"
+            label="单位"
+            placeholder="请填写单位"
+            required
+            :rules="[{ required: true, message: '请填写单位' }]"
+        />
+        <van-field
+            v-model="form.phone"
+            name="联系方式"
+            label="联系方式"
+            placeholder="请填写联系方式"
+            required
+            :rules="[
+                { required: true, message: '请填写联系方式' },
+                { validator: validatePhone, message: '请输入正确的联系方式' }
+            ]"
+        />
+
+        <van-field
+            v-show="type === '2'"
+            readonly
+            v-model="form.sign_time"
+            name="签到时间"
+            label="签到时间"
+        />
+      </van-cell-group>
+
+      <div class="button-list" v-if="type === '1'">
+        <van-button :loading="loading" loading-text="签到中..." block type="primary" native-type="submit">
+          确定签到
+        </van-button>
+
+        <div class="div-line"></div>
+
+        <van-button block type="default" @click="handleSignCancel" v-if="type === '1'">
+          取消签到
+        </van-button>
+      </div>
+
+      <div class="button-list" v-if="type === '2'">
+        <van-button :loading="loading" loading-text="签退中..." block type="danger" native-type="submit">
+          确定签退
+        </van-button>
+
+        <div class="div-line"></div>
+
+        <van-button block type="default" @click="handleSignCancel">
+          取消签退
+        </van-button>
+      </div>
+    </van-form>
+  </div>
+</template>
+
+<script lang="ts" setup name="signPage">
+import {onMounted, ref} from "vue";
+import {validatePhone} from "@/utils/validate";
+import { getSignInfo, signEvent } from '@/api/event';
+import { useRoute, useRouter } from 'vue-router';
+
+const route = useRoute();
+const router = useRouter()
+
+const loading = ref(false);
+
+const event_id = route.query.event_id as string;
+
+// 1 签到 2 签退
+const type = ref('1');
+const form = ref({
+  user_id: '0',
+  nick_name: '',
+  dept_id: '0',
+  dept_name: '',
+  duties: '',
+  sign_time: '',
+  phone: ''
+})
+
+// 提交
+const onSubmit = () => {
+  const submitMethod = type.value === '1' ? '1' : '2';
+  const data = {
+    ...form.value,
+    event_id: event_id,
+    type: submitMethod
+  };
+  loading.value = true;
+  signEvent(data).then((res)=>{
+    loading.value = false;
+    router.push("/signOK?type="+submitMethod)
+  })
+}
+
+
+const handleSignCancel = () => {
+  router.push("/")
+}
+
+onMounted(() => {
+  if (/(wxworklocal)/i.test(navigator.userAgent)) {
+    getSignInfo({event_id: event_id}).then((res)=> {
+      const user = res.data;
+      console.log('user', user);
+      type.value = user.sign_time == '' ? '1' : '2';
+
+      form.value = {
+        user_id: user.user_id,
+        nick_name: user.nick_name,
+        dept_id: user.dept_id,
+        dept_name: user.dept_name,
+        duties: user.duties,
+        sign_time: user.sign_time,
+        phone: user.phone
+      }
+    })
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+.container {
+  padding-top: 16px;
+
+  .button-list {
+    margin: 16px;
+  }
+  .div-line {
+    height: 16px;
+  }
+}
+</style>

+ 4 - 0
src/views/worker/eventManagement/eventList.vue

@@ -262,6 +262,10 @@ const handleEventAdd = () => {
       font-size: 16px;
       color: #414f64;
       font-weight: 600;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      margin-right: 10px;
     }
 
     .item-title-control {

+ 2 - 2
src/views/worker/inspectionWork/patorlTaskResultAdd.vue

@@ -30,9 +30,9 @@
                 :rules="[{ required: false, message: '请填写备注信息'  }]"
             />
 
-            <van-field name="fileList" label="现场照片" label-align="top">
+            <van-field name="fileList" label="现场照片或视频" label-align="top">
                 <template #input>
-                    <ImageUpload v-model="point.fileList" :fileType="['png', 'jpeg', 'jpg']"/>
+                    <ImageUpload v-model="point.fileList" :fileType="['png', 'jpeg', 'jpg', 'mp4']"/>
                 </template>
             </van-field>
         </div>