From b6dd47e1fa3b748c62210e9a70413feb3bcecf4e Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Fri, 13 Aug 2021 19:20:32 +0800
Subject: [PATCH] 图片附件预览

---
 src/views/resource/attachCopy.vue |  708 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 367 insertions(+), 341 deletions(-)

diff --git a/src/views/resource/attachCopy.vue b/src/views/resource/attachCopy.vue
index 1bc1fde..e8e8ac4 100644
--- a/src/views/resource/attachCopy.vue
+++ b/src/views/resource/attachCopy.vue
@@ -1,72 +1,80 @@
 <template>
-  <basic-container class="hasButTwo">
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      :page.sync="page"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      v-model="form"
-      ref="crud"
-      @row-del="rowDel"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
-      <template slot="menuLeft">
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          v-if="permission.attach_upload"
-          icon="el-icon-upload2"
-          @click="handleUpload"
-          >上 传
-        </el-button>
-        <el-button
-          type="danger"
-          size="small"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.attach_delete"
-          @click="handleDelete"
-          >删 除
-        </el-button>
-      </template>
-      <template slot-scope="scope" slot="menu">
-        <el-button
-          type="text"
-          icon="el-icon-download"
-          size="small"
-          v-if="permission.attach_download"
-          @click="handleDownload(scope.row)"
-          >下载
-        </el-button>
-      </template>
-      <template slot-scope="{ row }" slot="attachSize">
-        <el-tag>{{ `${row.attachSize} KB` }}</el-tag>
-      </template>
-    </avue-crud>
-    <el-dialog
-      title="附件管理"
-      append-to-body
-      :visible.sync="attachBox"
-      width="555px"
-    >
-      <avue-form
-        ref="form"
-        :option="attachOption"
-        v-model="attachForm"
-        :upload-after="uploadAfter"
-      >
-      </avue-form>
-    </el-dialog>
-  </basic-container>
+    <basic-container class="hasButTwo">
+        <avue-crud :option="option"
+                   :table-loading="loading"
+                   :data="data"
+                   :page.sync="page"
+                   :permission="permissionList"
+                   :before-open="beforeOpen"
+                   v-model="form"
+                   ref="crud"
+                   @row-del="rowDel"
+                   @search-change="searchChange"
+                   @search-reset="searchReset"
+                   @selection-change="selectionChange"
+                   @current-change="currentChange"
+                   @size-change="sizeChange"
+                   @refresh-change="refreshChange"
+                   @on-load="onLoad">
+            <template slot="menuLeft">
+                <el-button type="primary"
+                           size="small"
+                           plain
+                           v-if="permission.attach_upload"
+                           icon="el-icon-upload2"
+                           @click="handleUpload">上 传
+                </el-button>
+                <el-button type="danger"
+                           size="small"
+                           icon="el-icon-delete"
+                           plain
+                           v-if="permission.attach_delete"
+                           @click="handleDelete">删 除
+                </el-button>
+            </template>
+            <template slot-scope="scope"
+                      slot="menu">
+                <el-button type="text"
+                           icon="el-icon-download"
+                           size="small"
+                           v-if="permission.attach_download"
+                           @click="handleDownload(scope.row)">下载
+                </el-button>
+                <el-button type="text"
+                           icon="el-icon-picture-outline-round"
+                           size="small"
+                           v-show="!fileFormat(scope.row)"
+                           @click="seeImages(scope.row)">预览
+                </el-button>
+            </template>
+            <template slot-scope="{ row }"
+                      slot="attachSize">
+                <el-tag>{{ `${row.attachSize} KB` }}</el-tag>
+            </template>
+        </avue-crud>
+        <el-dialog title="附件管理"
+                   append-to-body
+                   :visible.sync="attachBox"
+                   width="555px">
+            <avue-form ref="form"
+                       :option="attachOption"
+                       v-model="attachForm"
+                       :upload-after="uploadAfter">
+            </avue-form>
+        </el-dialog>
+
+        <el-dialog title="预览"
+                   append-to-body
+                   :visible.sync="imgSee"
+                   class="see-img-box">
+
+            <div class="img"
+                 :style="{background: imgUrl}">
+
+            </div>
+
+        </el-dialog>
+    </basic-container>
 </template>
 
 <script>
@@ -74,286 +82,304 @@
 import { mapGetters } from "vuex";
 
 export default {
-  data() {
-    var type = 4;
-    var deptid = this.$route.query.deptId;
-    return {
-      form: {},
-      query: {},
-      putParam: "",
-      loading: true,
-      page: {
-        pageSize: 10,
-        currentPage: 1,
-        total: 0,
-      },
-      attachBox: false,
-      selectionList: [],
-      option: {
-        height: "auto",
-        calcHeight: 30,
-        tip: false,
-        searchShow: true,
-        searchMenuSpan: 6,
-        border: false,
-        index: true,
-        stripe: true,
-        viewBtn: true,
-        selection: true,
-        dialogClickModal: false,
-        column: [
-          {
-            label: "附件地址",
-            prop: "link",
-            rules: [
-              {
-                required: true,
-                message: "请输入附件地址",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "附件域名",
-            prop: "domain",
-            search: true,
-            rules: [
-              {
-                required: true,
-                message: "请输入附件域名",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "附件名称",
-            prop: "name",
-            search: true,
-            rules: [
-              {
-                required: true,
-                message: "请输入附件名称",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "附件原名",
-            prop: "originalName",
-            search: true,
-            rules: [
-              {
-                required: true,
-                message: "请输入附件原名",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "附件拓展名",
-            prop: "extension",
-            rules: [
-              {
-                required: true,
-                message: "请输入附件拓展名",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "所属公司",
-            prop: "enterprisename",
-            rules: [
-              {
-                required: true,
-                message: "请输入所属公司",
-                trigger: "blur",
-              },
-            ],
-          },
-          {
-            label: "附件大小",
-            prop: "attachSize",
-            slot: true,
-            rules: [
-              {
-                required: true,
-                message: "请输入附件大小",
-                trigger: "blur",
-              },
-            ],
-          },
-        ],
-      },
-      data: [],
-      attachForm: {},
-      attachOption: {
-        submitBtn: false,
-        emptyBtn: false,
-        column: [
-          {
-            label: "附件上传",
-            prop: "attachFile",
-            type: "upload",
-            drag: true,
-            loadText: "模板上传中,请稍等",
-            span: 24,
-            propsHttp: {
-              res: "data",
+    data () {
+        var type = 4;
+        var deptid = this.$route.query.deptId;
+        return {
+            form: {},
+            query: {},
+            putParam: "",
+            loading: true,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
             },
-            action:
-              "/api/blade-resource/oss/endpoint/put-file-attach?type=" +
-              type +
-              "&deptid=" +
-              deptid,
-          },
-        ],
-      },
-    };
-  },
-  computed: {
-    ...mapGetters(["permission"]),
-    permissionList() {
-      return {
-        addBtn: false,
-        editBtn: false,
-        viewBtn: false,
-        delBtn: this.vaildData(this.permission.attach_delete, false),
-      };
+            attachBox: false,
+            selectionList: [],
+            option: {
+                height: "auto",
+                calcHeight: 30,
+                tip: false,
+                searchShow: true,
+                searchMenuSpan: 6,
+                border: false,
+                index: true,
+                stripe: true,
+                viewBtn: true,
+                selection: true,
+                dialogClickModal: false,
+                column: [
+                    {
+                        label: "附件地址",
+                        prop: "link",
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件地址",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "附件域名",
+                        prop: "domain",
+                        search: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件域名",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "附件名称",
+                        prop: "name",
+                        search: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件名称",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "附件原名",
+                        prop: "originalName",
+                        search: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件原名",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "附件拓展名",
+                        prop: "extension",
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件拓展名",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "所属公司",
+                        prop: "enterprisename",
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入所属公司",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                    {
+                        label: "附件大小",
+                        prop: "attachSize",
+                        slot: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请输入附件大小",
+                                trigger: "blur",
+                            },
+                        ],
+                    },
+                ],
+            },
+            data: [],
+            attachForm: {},
+            attachOption: {
+                submitBtn: false,
+                emptyBtn: false,
+                column: [
+                    {
+                        label: "附件上传",
+                        prop: "attachFile",
+                        type: "upload",
+                        drag: true,
+                        loadText: "模板上传中,请稍等",
+                        span: 24,
+                        propsHttp: {
+                            res: "data",
+                        },
+                        action:
+                            "/api/blade-resource/oss/endpoint/put-file-attach?type=" +
+                            type +
+                            "&deptid=" +
+                            deptid,
+                    },
+                ],
+            },
+            imgSee: false,
+            imgUrl: ""
+        };
     },
-    ids() {
-      let ids = [];
-      this.selectionList.forEach((ele) => {
-        ids.push(ele.id);
-      });
-      return ids.join(",");
+    computed: {
+        ...mapGetters(["permission"]),
+        permissionList () {
+            return {
+                addBtn: false,
+                editBtn: false,
+                viewBtn: false,
+                delBtn: this.vaildData(this.permission.attach_delete, false),
+            };
+        },
+        ids () {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
     },
-  },
-  mounted() {
-    var flag = false,
-      i = 0,
-      ind = null;
-    this.$store.state.tags.tagList.forEach((item, index) => {
-      if (item.label == "保安单位附件上传") {
-        if (flag == false) {
-          ind = index;
-          flag = true;
+    mounted () {
+        var flag = false,
+            i = 0,
+            ind = null;
+        this.$store.state.tags.tagList.forEach((item, index) => {
+            if (item.label == "保安单位附件上传") {
+                if (flag == false) {
+                    ind = index;
+                    flag = true;
+                }
+                i++;
+            }
+        });
+        if (i > 1) {
+            this.$store.state.tags.tagList.splice(ind, 1);
         }
-        i++;
-      }
-    });
-    if (i > 1) {
-      this.$store.state.tags.tagList.splice(ind, 1);
-    }
-  },
-  methods: {
-    handleUpload() {
-      this.attachBox = true;
     },
-    uploadAfter(res, done, loading, column) {
-      window.console.log(column);
-      this.attachBox = false;
-      this.refreshChange();
-      done();
-    },
-    handleDownload(row) {
-      window.open(`${row.link}`);
-    },
-    rowDel(row) {
-      this.$confirm("确定将选择数据删除?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          return remove(row.id);
-        })
-        .then(() => {
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "操作成功!",
-          });
-        });
-    },
-    handleDelete() {
-      if (this.selectionList.length === 0) {
-        this.$message.warning("请选择至少一条数据");
-        return;
-      }
-      this.$confirm("确定将选择数据删除?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          return remove(this.ids);
-        })
-        .then(() => {
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "操作成功!",
-          });
-          this.$refs.crud.toggleSelection();
-        });
-    },
-    beforeOpen(done, type) {
-      if (["edit", "view"].includes(type)) {
-        getDetail(this.form.id).then((res) => {
-          this.form = res.data.data;
-        });
-      }
-      done();
-    },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
-    },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
-    },
-    selectionChange(list) {
-      this.selectionList = list;
-    },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
-    },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-    },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-    },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
-    },
-    onLoad(page, params = {}) {
-      params.type = 4;
-      params.deptid = this.$route.query.deptId;
-      console.log(params.deptid);
-      this.loading = true;
-      getList(
-        page.currentPage,
-        page.pageSize,
-        Object.assign(params, this.query)
-      ).then((res) => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        for (var k in this.data) {
-          this.data[k]["enterprisename"] = this.$route.query.enterprisename;
+    methods: {
+        handleUpload () {
+            this.attachBox = true;
+        },
+        uploadAfter (res, done, loading, column) {
+            window.console.log(column);
+            this.attachBox = false;
+            this.refreshChange();
+            done();
+        },
+        handleDownload (row) {
+            window.open(`${row.link}`);
+        },
+        rowDel (row) {
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(row.id);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                });
+        },
+        handleDelete () {
+            if (this.selectionList.length === 0) {
+                this.$message.warning("请选择至少一条数据");
+                return;
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(this.ids);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    this.$refs.crud.toggleSelection();
+                });
+        },
+        beforeOpen (done, type) {
+            if (["edit", "view"].includes(type)) {
+                getDetail(this.form.id).then((res) => {
+                    this.form = res.data.data;
+                });
+            }
+            done();
+        },
+        searchReset () {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange (params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange (list) {
+            this.selectionList = list;
+        },
+        selectionClear () {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        currentChange (currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange (pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange () {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad (page, params = {}) {
+            params.type = 4;
+            params.deptid = this.$route.query.deptId;
+            console.log(params.deptid);
+            this.loading = true;
+            getList(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                for (var k in this.data) {
+                    this.data[k]["enterprisename"] = this.$route.query.enterprisename;
+                }
+                console.log(this.data);
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+
+        seeImages (row) {
+            this.imgUrl = "";
+            this.imgUrl = "url(" + row.link + ") center center / contain no-repeat";
+
+            this.imgSee = true;
+        },
+
+        fileFormat (row) {
+            var index = row.link.lastIndexOf(".");
+            var ext = row.link.substr(index + 1);
+
+            return [
+                'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
+                indexOf(ext.toLowerCase()) == -1;
         }
-        console.log(this.data);
-        this.loading = false;
-        this.selectionClear();
-      });
     },
-  },
 };
 </script>
 

--
Gitblit v1.9.3