From 1db7db4bf02259e47d5d906d6b21ecc6451b0a09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期一, 23 十月 2023 15:26:46 +0800 Subject: [PATCH] 添加集群手动选主节点, 无线网络显示ip --- src/pages/ai/FileUpload/index.vue | 306 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 306 insertions(+), 0 deletions(-) diff --git a/src/pages/ai/FileUpload/index.vue b/src/pages/ai/FileUpload/index.vue new file mode 100644 index 0000000..a7b8311 --- /dev/null +++ b/src/pages/ai/FileUpload/index.vue @@ -0,0 +1,306 @@ +<template> + <div class="file-uploader"> + <uploader + v-if="single" + ref="uploader" + :options="options" + :file-status-text="statusText" + class="uploader-single" + :sourceType="sourceType" + @file-added="onFileAdded" + @complete="onComplete" + > + <div class="up-bar" v-if="isDrag == true"> + <div class="name">{{ fileName || uploadPlaceholder }}</div> + <uploader-btn slot="suffix" :attrs="attrs"> + <el-tooltip :content="tipWords" placement="top" v-if="tip"> + <div class="open-file-btn"> + <span class="icon iconfont"></span> + </div> + </el-tooltip> + </uploader-btn> + </div> + <el-input + :placeholder="uploadPlaceholder" + v-if="isDrag == false" + size="small" + :readonly="true" + v-model="fileName" + > + <uploader-btn slot="suffix" :attrs="attrs"> + <el-tooltip :content="tipWords" placement="top" v-if="tip"> + <i + class="el-icon-upload2" + style="font-size: 18px; color: #0088ff" + ></i> + </el-tooltip> + <i + v-else + class="el-icon-upload2" + style="font-size: 18px; color: #0088ff" + ></i> + </uploader-btn> + </el-input> + <uploader-list /> + </uploader> + + <uploader + v-else + ref="uploader" + :options="options" + :file-status-text="statusText" + class="uploader-example" + @file-added="onFileAdded" + @file-complete="fileComplete" + @complete="onComplete" + @close="closeHandle" + > + <uploader-btn ref="button" :sourceType="sourceType"> + <i class="el-icon-upload2" style="font-size: 18px; color: #0088ff"></i> + 涓婁紶 + </uploader-btn> + <uploader-list /> + </uploader> + </div> +</template> + +<script> +import uploader from "./uploader"; +import SparkMD5 from "spark-md5"; +import UploaderBtn from "./btn"; +import UploaderList from "./list"; +import UploaderDrop from "./drop"; + +export default { + components: { + uploader, + UploaderBtn, + UploaderList, + UploaderDrop, + }, + props: { + sourceType: { + type: Number, + }, + tip: { + type: Boolean, + default: false, + }, + tipWords: { + type: String, + default: "", + }, + single: { + type: Boolean, + default: false, + }, + uploadPlaceholder: { + type: String, + default: "", + }, + isDrag: { + type: Boolean, + default: false, + }, + url: { + type: String, + default: "/data/api-f/file/upload", + }, + attrs: { + type: Object, + default() { + return {}; + }, + }, + }, + data() { + return { + fileName: "",shouldStop:false, + fileMd5: "", + statusText: { + success: "涓婁紶鎴愬姛", + error: "涓婁紶澶辫触", + uploading: "涓婁紶涓�", + paused: "鏆傚仠涓�", + waiting: "绛夊緟涓�", + }, + }; + }, + computed: { + uploader() { + return this.$refs.uploader.uploader; + }, + options() { + return { + target: this.url, + testChunks: true, + headers: { + Authorization: + sessionStorage.getItem("loginedInfo") && + JSON.parse(sessionStorage.getItem("loginedInfo")).access_token, + }, + }; + }, + }, + methods: { + onFileAdded(file) { + // if (this.sourceType == 3) { + // if ( + // !file.name.endsWith(".tar") || + // !file.name.endsWith(".gz") || + // !file.name.endsWith(".tar.gz") + // ) { + // this.shouldStop = true + // this.$notify.warning("浠呮敮鎸�.tar/.gz/.tar.gz涓夌鏍煎紡鏂囦欢"); + // return + // } + // } + if (this.single) { + this.uploader.fileList = this.uploader.fileList.slice([-1]); + this.$emit("file-added"); + } + this.computeMD5(file); + }, + computeMD5(file) { + let fileReader = new FileReader(); + let time = new Date().getTime(); + let blobSlice = + File.prototype.slice || + File.prototype.mozSlice || + File.prototype.webkitSlice; + let currentChunk = 0; + const chunkSize = 10 * 1024 * 1000; + let chunks = Math.ceil(file.size / chunkSize); + let spark = new SparkMD5.ArrayBuffer(); + // 鏂囦欢鐘舵�佽涓�"璁$畻MD5" + this.statusText.paused = "鍑嗗涓婁紶,姝e湪妫�鏌ユ枃浠�"; + file.pause(); + loadNext(); + fileReader.onload = (e) => { + spark.append(e.target.result); + if (currentChunk < chunks) { + currentChunk++; + loadNext(); + } else { + let md5 = spark.end(); + this.computeMD5Success(md5, file); + this.fileName = file.name; + this.fileMd5 = md5; + } + }; + fileReader.onerror = function () { + this.error(`鏂囦欢${file.name}璇诲彇鍑洪敊锛岃妫�鏌ヨ鏂囦欢`); + file.cancel(); + }; + function loadNext() { + let start = currentChunk * chunkSize; + let end = + start + chunkSize >= file.size ? file.size : start + chunkSize; + fileReader.readAsArrayBuffer(blobSlice.call(file.file, start, end)); + } + }, + computeMD5Success(md5, file) { + //灏嗚嚜瀹氫箟鍙傛暟鐩存帴鍔犺浇uploader瀹炰緥鐨刼pts涓� + if (location.href.indexOf("dataStack") >= 0) { + Object.assign(this.uploader.opts, { + query: { + stackId: this.DataStackPool.selectedDir.id, + // ...this.params, + }, + }); + } + file.uniqueIdentifier = md5; + file.resume(); + this.statusText.paused = "鏆傚仠涓�"; + }, + onComplete() { + if (this.shouldStop) { + return + } + this.$emit("complete", { + filename: this.fileName, + identifier: this.fileMd5, + }); + }, + fileComplete() {}, + closeHandle() { + this.$emit("close"); + }, + }, + mounted() { + this.isDrag; + this.$nextTick(() => { + window.uploader = this.$refs.uploader.uploader; + }); + }, +}; +</script> + +<style lang="scss"> +.file-uploader { + .el-input__suffix, + .el-input__suffix-inner { + outline: none !important; + } + .el-tooltip.focusing { + outline: none; + } + .uploader-example { + width: 99%; + // padding: 15px; + // margin: 40px auto 0; + font-size: 12px; + // box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + background-color: #fff; + } + .uploader-example .uploader-btn { + position: relative; + display: none; + // float: right; + // top: -45px; + } + .uploader-example .uploader-list { + max-height: 440px; + overflow: auto; + overflow-x: hidden; + overflow-y: auto; + } + .uploader-single { + position: unset; + .close { + display: none; + } + .uploader-btn { + border: 0px; + } + .uploader-file { + // height: 2px; + .uploader-file-progress { + // background: #3d68e1; + } + .uploader-file-info { + // display: none; + } + } + + .up-bar { + height: 30px; + background: #f2f2f7; + border-radius: 2px; + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + padding: 0 20px; + .iconfont { + font-size: 16px; + color: #333; + } + .name { + color: #bdbdbd; + font-size: 14px; + } + } + } +} +</style>> -- Gitblit v1.8.0