wangzhihui %!s(int64=4) %!d(string=hai) anos
pai
achega
15636a192d
Modificáronse 3 ficheiros con 300 adicións e 0 borrados
  1. 199 0
      src/components/PicTimeline.vue
  2. 8 0
      src/router/index.js
  3. 93 0
      src/views/test/test.vue

+ 199 - 0
src/components/PicTimeline.vue

@@ -0,0 +1,199 @@
+<template>
+  <div class="pic-container">
+    <div v-for="(item, index) in list" :key="item" class="pic-main">
+      <div :class="index % 2 == 0 ? 'box' : 'box bottom-box'">
+        <div class="card-note">
+          {{ item.userName }} 拍摄于
+          <br />
+          {{ item.createTime }}
+        </div>
+        <div class="media-box" style="position: relative">
+          <el-image
+            v-if="item.mediaType == 1"
+            style="width: 100%; height: 100%"
+            fit="contain"
+            :src="item.downloadUrl"
+            :preview-src-list="previewSrcList"
+          ></el-image>
+          <video
+            style="width: 100%; height: 100%"
+            v-else
+            :src="item.downloadUrl"
+          ></video>
+          <img
+            @click="openVideoModal(item.downloadUrl)"
+            v-if="item.mediaType == 2"
+            src="../assets/icon-player.png"
+            style="
+              object-fit: contain;
+              width: 40px;
+              height: 40px;
+              position: absolute;
+              top: calc(50% - 20px);
+              left: calc(50% - 20px);
+              background: #fff;
+              border-radius: 50%;
+            "
+            alt=""
+          />
+        </div>
+        <div class="checkbox-group df aic jcsa">
+          <el-checkbox
+            @change="auditMedia(item.id, 1, index, item.mediaType)"
+            :model-value="item.audit == 1"
+            label="通过"
+          ></el-checkbox>
+          <el-checkbox
+            @change="auditMedia(item.id, 2, index, item.mediaType)"
+            :model-value="item.audit == 2"
+            label="未通过"
+          ></el-checkbox>
+        </div>
+      </div>
+      <div :class="index % 2 == 0 ? 's-line' : 's-line top210px'"></div>
+      <div class="point"></div>
+      <div class="l-line" v-if="index + 1 != list.length"></div>
+    </div>
+    <el-dialog
+      v-model="videoModal"
+      title="视频审核"
+      width="20%"
+      :before-close="videoClose"
+    >
+      <video
+        autoplay
+        controls
+        style="width: 100%; height: 100%"
+        :src="currentUrl"
+      ></video>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { onMounted, ref, watch } from "_vue@3.2.20@vue";
+import store from "../store";
+import { useStore } from "vuex";
+import api from "../apis/fetch";
+export default {
+  setup(props, ctx) {
+    let currentUrl = ref("");
+    let videoModal = ref(false);
+    function openVideoModal(url) {
+      currentUrl.value = url;
+      videoModal.value = true;
+    }
+
+    async function auditMedia(mediaId, a, index, mediaType) {
+      //   console.log(mediaId, a, index, mediaType);
+      let res = await api.auditMedia({
+        mediaId,
+        audit: a,
+      });
+    }
+    onMounted(() => {});
+    return {
+      currentUrl,
+      videoModal,
+      openVideoModal,
+      auditMedia,
+      list,
+    };
+  },
+};
+</script>
+<style scoped>
+* {
+  --box-width: 200px;
+}
+
+.pic-container {
+  width: 100%;
+  height: 100%;
+  box-sizing: border-box;
+  display: flex;
+  padding: 20px;
+  overflow-x: scroll;
+  overflow-y: hidden;
+  white-space: nowrap;
+}
+
+.pic-main {
+  position: relative;
+  width: 120px;
+}
+.box {
+  position: absolute;
+  height: 240px;
+  width: var(--box-width);
+  border: 1px solid #dddddd;
+  transition: all 0.5s;
+  background: #fff;
+  z-index: 10;
+}
+
+.s-line {
+  position: absolute;
+  left: 100px;
+  top: 242px;
+  height: 20px;
+  border-left: 2px dashed;
+  box-sizing: border-box;
+  border-color: #97caf6;
+}
+.point {
+  position: relative;
+  left: 93px;
+  top: 258px;
+  width: 16px;
+  height: 16px;
+  background-image: url(../images/blue-circle.png);
+}
+
+.l-line {
+  position: relative;
+  bottom: 30px;
+  left: 111px;
+  top: 249px;
+  height: 3px;
+  width: 100px;
+  background-color: #0094fe;
+}
+
+.bottom-box {
+  top: 290px;
+}
+.top210px {
+  top: 270px;
+}
+
+.box:hover {
+  transform: scale(1.2);
+}
+
+.media-box {
+  width: 80px;
+  height: 80px;
+  margin-top: 10px;
+}
+
+.card-note {
+  height: 30px;
+  font-size: 12px;
+  font-family: PingFangSC-Regular, PingFang SC;
+  font-weight: 400;
+  color: #777777;
+  padding: 10px 20px;
+}
+
+.media-box {
+  width: 100%;
+  height: 100px;
+  margin-top: 20px;
+}
+
+.checkbox-group {
+  width: 200px;
+  height: 50px;
+  margin-top: 20px;
+}
+</style>

+ 8 - 0
src/router/index.js

@@ -113,6 +113,14 @@ const router = createRouter({
       },
       component: () => import("../views/index/mediaCheck.vue"),
     },
+    {
+      path: "/test/test",
+      name: "test",
+      meta: {
+        title: "test",
+      },
+      component: () => import("../views/test/test.vue"),
+    },
   ],
 });
 

+ 93 - 0
src/views/test/test.vue

@@ -0,0 +1,93 @@
+<template>
+  <PicTimelineVue :list="list"></PicTimelineVue>
+</template>
+<script>
+import PicTimelineVue from "../../components/PicTimeline.vue";
+import { ref } from "_vue@3.2.20@vue";
+
+export default {
+  components: {
+    PicTimelineVue,
+  },
+  setup() {
+    let list = ref([
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh1",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh2",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+      {
+        name: "wzh3",
+        url: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/login-modal.png",
+      },
+    ]);
+
+    return {
+      list,
+    };
+  },
+};
+</script>