From 9057e04efad1b7d61c77a72e5c37a504d0aee935 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 26 九月 2025 09:24:03 +0800
Subject: [PATCH] H5静态化

---
 admin/src/components/common/UploadImage.vue |  153 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 153 insertions(+), 0 deletions(-)

diff --git a/admin/src/components/common/UploadImage.vue b/admin/src/components/common/UploadImage.vue
new file mode 100644
index 0000000..8ada0f0
--- /dev/null
+++ b/admin/src/components/common/UploadImage.vue
@@ -0,0 +1,153 @@
+<template>
+  <div>
+    <el-upload
+      :action="uploadImgUrl"
+      :data="uploadData"
+      list-type="picture-card"
+      :file-list="fileList"
+      accept=".jpg,.png"
+      :before-upload="beforeUpload"
+      :on-success="uploadSuccess"
+      :on-error="fail"
+    >
+      <i class="el-icon-plus icon"></i>
+      <div slot="file" slot-scope="{file}">
+        <img
+          class="el-upload-list__item-thumbnail"
+          :src="file.url" alt=""
+          style="width: 100px;height: 100px;"
+        >
+        <span class="el-upload-list__item-actions">
+          <span
+            class="el-upload-list__item-preview"
+            @click="handlePictureCardPreview(file)"
+          >
+            <i class="el-icon-zoom-in"></i>
+          </span>
+          <span
+            class="el-upload-list__item-delete"
+            @click="handleRemove(file)"
+          >
+            <i class="el-icon-delete"></i>
+          </span>
+        </span>
+      </div>
+    </el-upload>
+    <el-image-viewer
+      v-if="showViewer"
+      :on-close="closeViewer"
+      :initialIndex="tempIndex"
+      :url-list="srcList"
+      :z-index="3000"
+    />
+  </div>
+
+</template>
+
+<script>
+import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+export default {
+  components: {
+    ElImageViewer
+  },
+  props: {
+    fileList: {
+      type: Array,
+      default: () => []
+    },
+    uploadData: Object,
+  },
+  data() {
+    return {
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/uploadLocal',
+      realList: [],
+      srcList: [],
+      tempIndex: 0,
+      showViewer: false,
+    }
+  },
+  watch: {
+    fileList: {
+      handler(val) {
+        console.log(val);
+        if (val.length==0) {
+          this.realList = []
+          this.srcList = []
+        }
+      }
+
+    }
+  },
+  methods: {
+    beforeUpload(file) {
+      this.$emit('beginUpload')
+      return true
+    },
+     // 涓婁紶鍥剧墖鎴愬姛
+     uploadSuccess (res, file, fileList) {
+      // console.log('this.fileList', this.fileList);
+      // console.log('fileList', fileList);
+      this.$emit('uploadEnd')
+      this.realList = fileList
+      this.srcList.push(res.data.url)
+      // console.log('file', file);
+      if (res.code === 200) {
+        this.fileList.push(
+          {
+            fileurl: res.data.imgaddr,
+            name: res.data.originname,
+            url: res.data.url
+          }
+        )
+      } else {
+        this.$message.error(res.msg || '涓婁紶澶辫触')
+      }
+    },
+    fail (err, file, fileList) {
+      this.$emit('uploadEnd')
+      this.$message.error('涓婁紶澶辫触')
+    },
+    handlePictureCardPreview(file) {
+      // this.tempIndex = this.srcList.findIndex(item => item == file.response.data.url )
+      // console.log(file);
+      this.tempIndex = this.fileList.findIndex(item => item.url == file.url )
+      // console.log( this.tempIndex);
+      this.srcList = this.fileList.map(item => item.url)
+      this.showViewer = true
+    },
+    closeViewer() {
+      this.showViewer = false
+    },
+    handleRemove(file) {
+      console.log(this.fileList);
+      let tempIndex = this.realList.findIndex(item => item.url === file.url)
+      // debugger
+      this.realList.splice(tempIndex, 1)
+      this.fileList.splice(tempIndex, 1)
+      this.srcList.splice(tempIndex, 1)
+
+    }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+  width: 90px !important;
+  height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+  width: 90px !important;
+  height: 90px !important;
+}
+.icon {
+  -webkit-transform: translate(-50%,-50%);
+  -ms-transform: translate(-50%,-50%);
+  transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+  width: 90px !important;
+  height: 90px !important;
+}
+</style>
+

--
Gitblit v1.9.3