| | |
| | | >锁定版本</a-button |
| | | > |
| | | <a-button type="primary" @click="viewSopFile">SOP查看</a-button> |
| | | <a-button v-if="originalZipUrl" type="primary" @click="preview" |
| | | >原始包预览</a-button |
| | | > |
| | | </template> |
| | | </a-card> |
| | | </a-layout-footer> |
| | |
| | | <a-empty v-else /> |
| | | </div> |
| | | </a-modal> |
| | | |
| | | <a-modal |
| | | :visible="fileTreeViewVisible" |
| | | :footer="null" |
| | | :width="860" |
| | | title="文件列表" |
| | | :destroyOnClose="true" |
| | | @cancel="fileTreeViewVisible = false" |
| | | > |
| | | <div class="log-content"> |
| | | <a-tree |
| | | class="file-tree-view" |
| | | v-if="fileTreeView.length" |
| | | :show-line="true" |
| | | defaultExpandAll |
| | | :tree-data="fileTreeView" |
| | | > |
| | | <template slot="custom" slot-scope="item"> |
| | | <div class="flex-r space-between"> |
| | | <span class="node-title">{{ item.title }} </span> |
| | | <span |
| | | class="icon-wrap" |
| | | v-if="item.isLeaf && viewAble(item.type)" |
| | | title="预览" |
| | | @click="view(item)" |
| | | > |
| | | <a-icon type="file-search" /> |
| | | </span> |
| | | </div> |
| | | </template> |
| | | </a-tree> |
| | | <a-empty v-else /> |
| | | </div> |
| | | </a-modal> |
| | | <a-modal |
| | | :visible="showSop" |
| | | :footer="null" |
| | | :width="1366" |
| | | title="SOP查看" |
| | | :destroyOnClose="true" |
| | | @cancel="showSop = false"> |
| | | @cancel="showSop = false" |
| | | > |
| | | <div style="height: 600px"> |
| | | <sop-list :parentCode="parentCode"></sop-list> |
| | | </div> |
| | | </a-modal> |
| | | <a-modal |
| | | :width="600" |
| | | :visible="previewVisible" |
| | | :footer="null" |
| | | @cancel="handleCancel" |
| | | > |
| | | <img alt="" style="width: 100%" :src="imgUrl" /> |
| | | </a-modal> |
| | | </div> |
| | | </template> |
| | |
| | | getOriginalZip, |
| | | checkExist, |
| | | getzipAndRarInfo, |
| | | decompress, |
| | | } from "./apis"; |
| | | import { |
| | | searchDefaultMailUser, |
| | |
| | | mixins: [WSMixin], |
| | | data() { |
| | | return { |
| | | imgUrl: "", |
| | | previewVisible: false, |
| | | showSop: false, |
| | | fileTreeVisible: false, |
| | | fileTree: [], |
| | | fileTreeViewVisible: false, |
| | | fileTreeView: [], |
| | | userListAll: [], |
| | | mailList: [], |
| | | tester: [], |
| | |
| | | |
| | | return res; |
| | | }, |
| | | format(list) { |
| | | format(list, needTime = true) { |
| | | let counter = this.counter(); |
| | | let obj = { |
| | | counter, |
| | |
| | | // children: [], |
| | | // }; |
| | | list.forEach((v) => { |
| | | let url = v.fileName; |
| | | let url = needTime ? v.fileName : v; |
| | | let fileTime = v.fileTime; |
| | | let arr = url.split("/"); |
| | | let splitStr = needTime ? "/" : "\\"; |
| | | let arr = url.split(splitStr); |
| | | let fileName = arr.pop(); |
| | | let files = fileName.split("."); |
| | | let type = files.length ? files[files.length - 1].toLowerCase() : ""; |
| | | |
| | | let tmp = obj; |
| | | |
| | | for (let i = 0, len = arr.length; i < len; i++) { |
| | |
| | | title: arr[i], |
| | | key: parent.key + "-" + parent.counter(), |
| | | children: [], |
| | | scopedSlots: { title: "custom" }, |
| | | counter: this.counter(), |
| | | }; |
| | | // tmp[arr[i]].parent.children.push(tmp[arr[i]]); |
| | |
| | | } |
| | | // console.log(tmp.children, 'children') |
| | | tmp.children.push({ |
| | | url, |
| | | type, |
| | | fileName, |
| | | fileTime, |
| | | key: tmp.key + "-" + tmp.counter(), |
| | | title: fileName + " " + fileTime, |
| | | title: needTime ? fileName + " " + fileTime : fileName, |
| | | scopedSlots: { title: "custom" }, |
| | | isLeaf: true, |
| | | }); |
| | | // console.log(obj, '......') |
| | |
| | | return count++; |
| | | }; |
| | | }, |
| | | // 查看压缩包内文件目录结构 |
| | | viewRar() { |
| | | let loading = this.$layer.loading(); |
| | | // console.log(this.originalZipUrl); |
| | | getzipAndRarInfo(this.originalZipUrl) |
| | | .then((res) => { |
| | | let { code, data, data2 } = res.data; |
| | | let list = []; |
| | | let list = { children: [] }; |
| | | if (code && data) { |
| | | console.log(data2); |
| | | list = this.format(data2); |
| | |
| | | this.$layer.close(loading); |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | // 解压压缩包到服务器 然后返回内部文件的结构和路径 路径可用来预览 |
| | | preview() { |
| | | let loading = this.$layer.loading(); |
| | | decompress(this.originalZipUrl) |
| | | .then((res) => { |
| | | let { code, data, data2, msg } = res.data; |
| | | let list = []; |
| | | if (code && data) { |
| | | // console.log(data); |
| | | this.$message.success("解析成功"); |
| | | let { |
| | | children: [ |
| | | { |
| | | children: [{ children: list1 }], |
| | | }, |
| | | ], |
| | | } = this.format(data2, false); |
| | | list = list1; |
| | | } else { |
| | | this.$message.error(msg); |
| | | } |
| | | this.$layer.close(loading); |
| | | |
| | | this.fileTreeView = list; |
| | | |
| | | // this.fileTreeView = list.children[0]["children"][0]["children"]; |
| | | this.fileTreeViewVisible = true; |
| | | // console.log(list, "===list111"); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | this.$layer.close(loading); |
| | | }); |
| | | }, |
| | | viewAble(type) { |
| | | return ["bmp", "jpg", "jpeg", "png", "pdf", "doc", "docx", "dwg"].some( |
| | | (v) => v == type |
| | | ); |
| | | }, |
| | | view(obj) { |
| | | switch (obj.type) { |
| | | // 图片 |
| | | case "bmp": |
| | | case "jpg": |
| | | case "jpeg": |
| | | case "png": |
| | | this.imgUrl = this.webUrl + obj.url; |
| | | this.previewVisible = true; |
| | | break; |
| | | case "pdf": |
| | | window.open(this.webUrl + obj.url); |
| | | break; |
| | | case "doc": |
| | | case "docx": |
| | | case "dwg": |
| | | this.dwgReview(obj.url); |
| | | break; |
| | | // default: |
| | | // this.$message.warn("该类型文件暂不支持预览"); |
| | | // break; |
| | | } |
| | | }, |
| | | handleCancel() { |
| | | this.previewVisible = false; |
| | | }, |
| | | }, |
| | | mounted() { |
| | |
| | | /deep/.ant-descriptions-row .ant-descriptions-item:first-child { |
| | | width: 180px; |
| | | } |
| | | .file-tree-view /deep/ li { |
| | | // display: flex; |
| | | // flex-direction: row; |
| | | .ant-tree-switcher { |
| | | float: left; |
| | | } |
| | | .ant-tree-node-content-wrapper { |
| | | display: block; |
| | | cursor: auto; |
| | | .ant-tree-title { |
| | | display: block; |
| | | } |
| | | } |
| | | .ant-tree-child-tree { |
| | | flex-basis: 100%; |
| | | } |
| | | .icon-wrap { |
| | | cursor: pointer; |
| | | font-size: 22px; |
| | | } |
| | | } |
| | | .flex-r { |
| | | display: flex; |
| | | flex-direction: row; |
| | | &.space-between { |
| | | justify-content: space-between; |
| | | } |
| | | } |
| | | </style> |