From e2b173475a8bf14717a53f2daa0257804644bd45 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 19 六月 2024 11:23:26 +0800
Subject: [PATCH] ‘’

---
 h5/pages/staff/snapshot.vue                          |    2 
 admin/src/components/operation/HiddenDangerParam.vue |  275 +++++++++++++++++++++++++++++++++++++++++++++
 admin/src/views/operation/danger/record.vue          |   39 +++++
 3 files changed, 311 insertions(+), 5 deletions(-)

diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
new file mode 100644
index 0000000..c8bfb1a
--- /dev/null
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -0,0 +1,275 @@
+<template>
+  <GlobalWindow
+    title="鏂板闅愭偅闅忔墜鎷�"
+    width="600px"
+    :visible.sync="isShowModal"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="param" ref="paramRef" :rules="rules">
+      <el-form-item label="鎻愭姤浜�" prop="realname">
+        <div>{{ userInfo.realname }}</div>
+      </el-form-item>
+      <el-form-item label="鑱旂郴鐢佃瘽" prop="mobile">
+        {{ userInfo.mobile }}
+      </el-form-item>
+      <el-form-item label="鎻愭姤鏃堕棿" prop="submitTime">
+        <el-date-picker
+          v-model="param.submitTime"
+          format="yyyy-MM-dd HH:mm"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetime"
+          default-time="08:00:00"
+        />
+      </el-form-item>
+      <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
+        <el-select v-model="param.areaId" @change="changeArea" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in addrList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="澶勭悊浜�" prop="checkUserId">
+        <el-select v-model="param.checkUserId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in memberList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="闅愭偅绫诲瀷" prop="cateId">
+        <el-select v-model="param.cateId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in typeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐜板満鎯呭喌">
+        <div class="file_list">
+          <el-upload
+            class="avatar-uploader"
+            :data="uploadData"
+            :auto-upload="true"
+            :action="uploadImgUrl"
+            :show-file-list="false"
+            :on-success="uploadAvatarSuccess"
+            :before-upload="beforeUpload"
+          >
+            <div class="upload_wrap">
+              <i class="el-icon-plus avatar-uploader-icon"></i>
+              <div>鍥剧墖/瑙嗛</div>
+            </div>
+          </el-upload>
+          <div v-for="(item, i) in fileList" :key="i" class="item">
+            <i @click="handleDelImg(i)" class="el-icon-error close"></i>
+            <el-image
+              :src="item.fileurlFull"
+              :preview-src-list="[item.fileurlFull]"
+              v-if="item.type == 0"
+              class="img"
+            ></el-image>
+            <video
+              :src="item.fileurlFull"
+              controls
+              v-if="item.type == 1"
+              class="img"
+            ></video>
+          </div>
+        </div>
+      </el-form-item>
+      <el-form-item label="鎯呭喌璇存槑" prop="content">
+        <el-input
+          type="textarea"
+          :rows="4"
+          v-model="param.content"
+          placeholder="璇疯緭鍏�"
+        ></el-input>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadFaceImg from '@/components/common/UploadFaceImg'
+import { allList, memberList } from '@/api/business/hiddenDangerParam'
+import { create } from '@/api/business/hiddenDanger'
+export default {
+  name: 'OperaVisitsHkWindow',
+  extends: BaseOpera,
+  components: {
+    GlobalWindow
+  },
+  data () {
+    return {
+      isShowModal: false,
+      param: {},
+      userInfo: this.$store.state.userInfo,
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
+      typeList: [],
+      addrList: [],
+      memberList: [],
+      fileList: [],
+
+      uploadData: {
+        folder: 'HIDDEN_DANGER_FILE'
+      },
+      rules: {
+        // starttime: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
+        areaId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        checkUserId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        faceImgUrl: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
+
+        content: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      }
+    }
+  },
+  created () {
+    this.initData()
+  },
+  methods: {
+    initData () {
+      allList({ type: 1 }).then(res => { // 绫诲瀷
+        this.typeList = res || []
+      })
+      allList({ type: 0 }).then(res => { // 浣嶇疆
+        this.addrList = res || []
+      })
+      memberList({}).then(res => {
+        this.memberList = res || []
+      })
+    },
+    changeArea (e) {
+      const item = this.addrList.find(i => i.id === e)
+      const arr = []
+      const memberIds = item.memberIds.split(',')
+      const memberNames = item.memberNames.split(',')
+      if (memberIds && memberIds.length === 1) {
+        this.$set(this.param, 'checkUserId', memberIds[0])
+      }
+      memberIds.forEach((mem, i) => {
+        arr.push({
+          id: memberIds[i],
+          name: memberNames[i]
+        })
+      })
+      this.memberList = arr
+    },
+    beforeUpload (file) {
+      if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/png', 'image/gif'].indexOf(file.type) == -1) {
+        this.$message.error('璇蜂笂浼犳纭殑瑙嗛/鍥剧墖鏍煎紡')
+        return false
+      }
+    },
+    uploadAvatarSuccess (file) {
+      console.log('file', file)
+      const item = file.data[0]
+      if (['.mp4', '.avi', '.flv', '.wmv'].indexOf(item.imgaddr) === -1) {
+        this.fileList.push({
+          type: 0,
+          fileurl: item.imgaddr,
+          fileurlFull: item.url
+        })
+      } else {
+        this.fileList.push({
+          type: 1,
+          fileurl: item.imgaddr,
+          fileurlFull: item.url
+        })
+      }
+      console.log('file', this.fileList)
+      // this.$set(this.param, 'faceImg', file.imgurl)
+      // this.$set(this.param, 'faceImgUrl', file.imgurlfull)
+    },
+    handleDelImg (i) {
+      this.fileList.splice(i, 1)
+    },
+    // 鍚屾淇℃伅
+    confirm () {
+      this.$refs.paramRef.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        create({
+          ...this.param,
+          applyCheckUserId: this.param.checkUserId,
+          submitFileList: this.fileList,
+          memberId: this.userInfo.memberId
+        })
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鎻愪氦鎴愬姛')
+            this.$emit('success')
+            this.$emit('close')
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+$image-width: 90px;
+.avatar-uploader {
+  width: $image-width !important;
+  height: $image-width;
+  margin-bottom: 30px;
+  .upload_wrap {
+    width: 90px;
+    height: 90px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    color: #999999;
+  }
+  .avatar-uploader .el-upload:hover {
+    border-color: #409eff;
+  }
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    text-align: center;
+  }
+}
+.file_list {
+  display: flex;
+  flex-wrap: wrap;
+  .item {
+    width: 90px;
+    max-height: 90px;
+    margin-left: 10px;
+    position: relative;
+    .close{
+      font-size: 20px;
+      position: absolute;
+      right: -10px;
+      top: -10px;
+      z-index: 111;
+      color: red;
+      cursor: pointer;
+    }
+    .img {
+      width: 90px;
+      max-height: 90px;
+    }
+  }
+}
+</style>
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index 83b4168..da410d6 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -60,8 +60,9 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:empower:create', 'business:empower:delete']">
-        <!--<li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li> -->
+      <ul class="toolbar" v-permissions="['business:hiddendanger:create', 'business:hiddendanger:exportExcel']">
+        <li><el-button type="primary" icon="el-icon-plus" v-permissions="['business:hiddendanger:create']" @click="handleEdit">鏂板缓</el-button></li>
+        <li><el-button type="primary" v-permissions="['business:hiddendanger:exportExcel']" @click="handleEx">瀵煎嚭</el-button></li>
       </ul>
       <el-table
           v-loading="isWorking.search"
@@ -101,6 +102,8 @@
       </pagination>
     </template>
     <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="handlePageChange"/>
+    <!-- 鏂板缓 -->
+    <HiddenDangerParam @close="isShowEdit = false" @success="search"  v-if="isShowEdit" ref="HiddenDangerParamRef" />
   </TableLayout>
 </template>
 
@@ -109,14 +112,16 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
+import HiddenDangerParam from '@/components/operation/HiddenDangerParam.vue'
 import { timeForMat } from '@/utils/util'
-import { allList } from '@/api/business/hiddenDangerParam'
+import { allList, exportExcel } from '@/api/business/hiddenDangerParam'
 export default {
   name: 'Empower',
   extends: BaseTable,
-  components: { TableLayout, Pagination ,OperaHiddenDangerWindow},
+  components: { TableLayout, Pagination ,OperaHiddenDangerWindow, HiddenDangerParam},
   data () {
     return {
+      isShowEdit: false,
       // 鎼滅储
       searchForm: {
         memberName: '',
@@ -145,6 +150,32 @@
     this.loadParams()
   },
   methods: {
+    handleEx () {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.exLoading = true
+          exportExcel({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.exLoading = false
+            })
+        })
+    },
+    handleEdit () {
+      this.isShowEdit = true
+      this.$nextTick(() => {
+        this.$refs.HiddenDangerParamRef.isShowModal = true
+      })
+    },
     changeRadio (e) {
       this.searchForm.radio = e
       if (e === '0') {
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index c0a30be..341a36e 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -125,7 +125,7 @@
           <text
             class="mr6"
             :style="{ color: param.submitTime ? '#000000' : '#999999' }"
-            >{{ param.submitTime ? param.submitTime : "璇烽�夋嫨" }}</text
+            >{{ param.submitTime ? param.submitTime.slice(0, 16) : "璇烽�夋嫨" }}</text
           >
           <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
         </view>

--
Gitblit v1.9.3