sunran пре 3 година
родитељ
комит
d4829962ae

+ 19 - 3
src/views/weibao/components/vanUploader.vue

@@ -46,10 +46,26 @@ export default {
   methods: {
     // 返回布尔值
     beforeRead(file) {
-      if (file.type !== 'image/jpeg' || file.type !== 'image/png') {
-        this.$toast('请上传 jpg/png 格式图片')
-        return false
+      if (file.length) {
+        file.forEach((item) => {
+          if (
+            item.name.indexOf('.png') == -1 &&
+            item.name.indexOf('.jpg') == -1
+          ) {
+            this.$toast('请上传 jpg/png 格式图片')
+            throw error
+          }
+        })
+      } else {
+        if (
+          file.name.indexOf('.png') == -1 &&
+          file.name.indexOf('.jpg') == -1
+        ) {
+          this.$toast('请上传 jpg/png 格式图片')
+          return false
+        }
       }
+
       return true
     },
     afterRead(file) {

+ 24 - 8
src/views/weibao/views/consultation/details.vue

@@ -43,15 +43,27 @@
         </van-col>
       </van-row>
       <div class="videoimg">
-        <p>图片视频:</p>
-        <div class="boximg">
-          <div v-for="(item,index) in appendFile" :key="index">
-            <van-image v-if="item.indexOf('.png')==-1||item.indexOf('.jpg')==-1" fit="contain" :src="item" alt="" @click="showPopup" />
-            <video v-else @click="showvideoplay=true" style="object-fit:cover;" :src="item"></video>
+        <div>
+          <p>照片:</p>
+          <div class="boximg">
+            <div v-for="(item,index) in pics" :key="index">
+              <van-image fit="contain" :src="item" alt="" @click="showPopup" />
+            </div>
+          </div>
+          <van-image-preview v-model="show" :images="pics"></van-image-preview>
+        </div>
+        <div>
+          <p>视频:</p>
+          <div class="boximg">
+            <div v-for="(item,index) in videos" :key="index">
+              <video @click="showvideoplay=true,videourl=item" style="object-fit:cover;" :src="item" poster='../../assets/video.png'></video>
+            </div>
           </div>
         </div>
-        <van-image-preview v-model="show" :images="appendFile"></van-image-preview>
       </div>
+      <van-dialog style="width:100%;border-radius:0;height:200px" v-model="showvideoplay" :show-cancel-button="false" :show-confirm-button="false" closeOnClickOverlay>
+        <video controls preload="auto" style="width:100%;height:200px;object-fit: contain;" :src="videourl" v-if="videourl"></video>
+      </van-dialog>
     </div>
 
   </div>
@@ -62,11 +74,14 @@ export default {
   data() {
     return {
       show: false,
+      showvideoplay: false,
       streetList: [],
       form: {},
       appendFile: [],
       id: '',
       orgform: {},
+      pics: [],
+      videos: [],
     }
   },
   created() {
@@ -80,8 +95,9 @@ export default {
     async consultationDetail() {
       const res = await consultationDetail({ id: this.id })
       this.form = res.data
-      if (!res.data.pics) return
-      this.appendFile = this.form.pics.split(',')
+      this.pics = res.data.pics.split(',')
+      if (!res.data.videos) return
+      this.videos = res.data.videos.split(',')
     },
   },
 }

+ 30 - 25
src/views/weibao/views/consultation/initiateConsultation.vue

@@ -14,7 +14,7 @@
             <!-- {{form.workDate?form.workDate:'请选择'}} -->
             <van-field v-model="form.workDate" :rules="[{ required: true}]" placeholder="请选择会商时间" />
           </van-col>
-          <van-popup v-model="dateshow" position="bottom" :style="{ height: '30%' }">
+          <van-popup v-model="dateshow" position="bottom" :style="{ height: '50%' }">
             <van-datetime-picker @confirm="dateConfirm" @cancel="dateshow=false" v-model="workDate" type="date" :min-date="minDate" :max-date="maxDate" :columns-order="[ 'year','month', 'day']"
               :formatter="formatter" />
           </van-popup>
@@ -25,8 +25,8 @@
             <van-field v-model="form.streetName" @click="clickstreetShow" :rules="[{ required: true}]" placeholder="请选择街道" disabled />
           </van-col>
           <!-- <van-col span="18" @click="streetshowPopup">{{form.streetName?form.streetName:'请选择'}}</van-col> -->
-          <van-popup v-model="streetShow" position="bottom" :style="{ height: '30%' }">
-            <van-picker show-toolbar :columns="streetList" @confirm="onConfirm" @cancel="streetShow=false" value-key="name" />
+          <van-popup v-model="streetShow" position="bottom" :style="{ height: '50%' }">
+            <van-picker default-index="2" show-toolbar :columns="streetList" @confirm="onConfirm" @cancel="streetShow=false" value-key="name" />
           </van-popup>
         </van-row>
         <van-row class="cell">
@@ -70,22 +70,8 @@
             <van-field class="textarea" v-model="form.content" :rules="[{ required: true}]" rows="1" type="textarea" placeholder="请输入活动详情" />
           </van-col>
         </van-row>
-        <van-row class="cell">
-          <van-col span="6">图片视频:</van-col>
-          <van-col class="col" span="18" ref="col">
-            <div class="box" ref="boxlist">
-              <div class="boxlist">
-                <div v-for="(item,index) in form.fileList" :key="index">
-                  <img v-if="item.type.indexOf('image') !== -1" :src="item.url" alt="">
-                  <video v-else style="object-fit:cover;" :src="item.url"></video>
-                </div>
-              </div>
-              <van-uploader v-model="fileList" accept="*" :after-read="afterRead" @delete='deleteUploader'>
-              </van-uploader>
-            </div>
-
-          </van-col>
-        </van-row>
+        <vanUploader :text="'图片'" @getfileList="getfileList"></vanUploader>
+        <vanUploader :text="'视频'" @getfileList="getfileList"></vanUploader>
       </div>
       <div style="text-align:center;">
         <van-button native-type="submit">确 定</van-button>
@@ -101,7 +87,9 @@ import {
   getStreetList,
   organizationList,
 } from '../../api/index.js'
+import vanUploader from '../../components/vanUploader.vue'
 export default {
+  components: { vanUploader },
   data() {
     return {
       streetshowPopup: false,
@@ -127,6 +115,8 @@ export default {
       orgform: {},
       result: [],
       resultId: [],
+      pics: [],
+      videos: [],
     }
   },
   created() {
@@ -135,6 +125,21 @@ export default {
     this.organizationList()
   },
   methods: {
+    getfileList(v, index) {
+      if (index == undefined) {
+        if (v.indexOf('.png') != -1 || v.indexOf('.jpg') != -1) {
+          this.pics.push(v)
+        } else {
+          this.videos.push(v)
+        }
+      } else {
+        if (v == '图片') {
+          this.pics.splice(index, 1)
+        } else {
+          this.videos.splice(index, 1)
+        }
+      }
+    },
     clickdateshow() {
       if (this.id) return
       this.dateshow = !this.dateshow
@@ -187,12 +192,12 @@ export default {
       this.positionSearch = ''
     },
     async consultationSave() {
-      var appendFile = []
-      this.form.fileList.forEach((item) => {
-        appendFile.push(item.url)
-      })
-
-      this.form.pics = appendFile.join(',')
+      if (this.pics.length == 0) {
+        this.$toast.fail('请选择至少一张图片')
+        return
+      }
+      this.form.pics = this.pics.join(',')
+      this.form.videos = this.videos.join(',')
       var data = JSON.parse(JSON.stringify(this.form))
       data.workDate = data.workDate + ' 00:00:00'
       const res = await consultationSave(data)

+ 24 - 9
src/views/weibao/views/reporting/details.vue

@@ -31,17 +31,28 @@
         </van-col>
       </van-row>
       <div class="videoimg">
-        <p>图片视频:</p>
-        <div class="boximg">
-          <div v-for="(item,index) in appendFile" :key="index">
-            <van-image v-if="item.indexOf('.png')==-1||item.indexOf('.jpg')==-1" fit="contain" :src="item" alt="" @click="showPopup" />
-            <video v-else @click="showvideoplay=true" style="object-fit:cover;" :src="item"></video>
+        <div>
+          <p>照片:</p>
+          <div class="boximg">
+            <div v-for="(item,index) in pics" :key="index">
+              <van-image fit="contain" :src="item" alt="" @click="showPopup" />
+            </div>
+          </div>
+          <van-image-preview v-model="show" :images="pics"></van-image-preview>
+        </div>
+        <div>
+          <p>视频:</p>
+          <div class="boximg">
+            <div v-for="(item,index) in videos" :key="index">
+              <video @click="showvideoplay=true,videourl=item" style="object-fit:cover;" :src="item" poster='../../assets/video.png'></video>
+            </div>
           </div>
         </div>
-        <van-image-preview v-model="show" :images="appendFile"></van-image-preview>
       </div>
     </div>
-
+    <van-dialog style="width:100%;border-radius:0;height:200px" v-model="showvideoplay" :show-cancel-button="false" :show-confirm-button="false" closeOnClickOverlay>
+    <video controls preload="auto" style="width:100%;height:200px;object-fit: contain;" :src="videourl" v-if="videourl"></video>
+    </van-dialog>
   </div>
 </template>
 <script>
@@ -50,11 +61,14 @@ export default {
   data() {
     return {
       show: false,
+      showvideoplay: false,
       streetList: [],
       form: {},
       appendFile: '',
       id: '',
       orgform: {},
+      pics: [],
+      videos: [],
     }
   },
   created() {
@@ -65,8 +79,9 @@ export default {
     async mandatoryDetail() {
       const res = await mandatoryDetail({ id: this.id })
       this.form = res.data
-        if(!res.data.appendFile)return
-      this.appendFile = this.form.appendFile.split(',')
+      this.pics = res.data.pics.split(',')
+      if (!res.data.videos) return
+      this.videos = res.data.videos.split(',')
     },
   },
 }

+ 3 - 0
src/views/weibao/views/reporting/index.vue

@@ -28,6 +28,9 @@
     <div class="casebox" v-else>
       <van-list v-model="loading" :immediate-check="false" :finished="finished" finished-text="没有更多了" @load="onLoad">
         <div class="list" v-for="item in historyList" :key="item.id" @click="$router.push({path:'/reporting/details',query:{id:item.id}})">
+          <div class="img">
+            <van-image fit="cover" :src="getpics(item.appendFile)" alt="" />
+          </div>
           <div class="text">
             <p class="title">报告事件:{{item.event}}</p>
             <p class="mes">报告人:{{item.operator}}</p>

+ 12 - 46
src/views/weibao/views/reporting/initiateConsultation.vue

@@ -58,7 +58,6 @@
 <script>
 import {
   mandatorySave,
-  uploadImage,
   getStreetList,
   organizationList,
 } from '../../api/index.js'
@@ -89,6 +88,8 @@ export default {
       orgform: {},
       result: [],
       resultId: [],
+      pics: [],
+      videos: [],
     }
   },
   activated() {
@@ -104,15 +105,15 @@ export default {
     getfileList(v, index) {
       if (index == undefined) {
         if (v.indexOf('.png') != -1 || v.indexOf('.jpg') != -1) {
-          this.imgUrl.push(v)
+          this.pics.push(v)
         } else {
-          this.multiMediaUrl.push(v)
+          this.videos.push(v)
         }
       } else {
         if (v == '图片') {
-          this.imgUrl.splice(index, 1)
+          this.pics.splice(index, 1)
         } else {
-          this.multiMediaUrl.splice(index, 1)
+          this.videos.splice(index, 1)
         }
       }
     },
@@ -159,12 +160,12 @@ export default {
       this.positionSearch = ''
     },
     async mandatorySave() {
-      var appendFile = []
-      this.form.fileList.forEach((item) => {
-        appendFile.push(item.url)
-      })
-
-      this.form.appendFile = appendFile.join(',')
+      if (this.pics.length == 0) {
+        this.$toast.fail('请选择至少一张图片')
+        return
+      }
+      this.form.pics = this.pics.join(',')
+      this.form.videos = this.videos.join(',')
       var data = JSON.parse(JSON.stringify(this.form))
       data.mandatoryDate = data.mandatoryDate + ' 00:00:00'
       const res = await mandatorySave(data)
@@ -179,41 +180,6 @@ export default {
       this.show = true
     },
     getPositionList() {},
-    async afterRead(file) {
-      console.log(file.file)
-      file.status = 'uploading'
-      file.message = '上传中...'
-      let formDate = new FormData()
-
-      //添加入参
-      formDate.append('file', file.file)
-      const res = await uploadImage(formDate)
-      if (res.code == '0000') {
-        file.status = 'success'
-        file.message = '成功'
-        this.form.fileList.push({
-          url: res.data,
-          type: file.file.type,
-        })
-        // 上传图片 设置col高度
-        if (this.form.fileList.length % 2 == 0) {
-          var index = 3.2 * (this.form.fileList.length / 2 + 1) + 'rem'
-          this.$refs.boxlist.style.height = index
-        }
-      } else {
-        file.status = 'failed'
-        file.message = '上传失败'
-      }
-    },
-    deleteUploader(v, index) {
-      console.log(index)
-      this.form.fileList.splice(index.index, 1)
-      // 上传图片 设置col高度
-      if (this.form.fileList.length % 2 == 0) {
-        var index = 3.2 * (this.form.fileList.length / 2 + 1) + 'rem'
-        this.$refs.boxlist.style.height = index
-      }
-    },
     formatter(type, val) {
       if (type === 'year') {
         return val + '年'