From f76b96c26b878840ecc80b79d1e28e477d5573e6 Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期一, 01 七月 2024 18:10:25 +0800 Subject: [PATCH] 模型发布管理 添加 --- src/views/iot/modelLibrary/index.vue | 348 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 323 insertions(+), 25 deletions(-) diff --git a/src/views/iot/modelLibrary/index.vue b/src/views/iot/modelLibrary/index.vue index cfc36db..a8e4aec 100644 --- a/src/views/iot/modelLibrary/index.vue +++ b/src/views/iot/modelLibrary/index.vue @@ -1,50 +1,120 @@ <template> <div v-loading="loading" class="modelLibiraryBox"> <el-card> - <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" style="margin-bottom: -20px"> - <el-form-item label="妯″瀷鍚嶇О" prop="templateName"> - <el-input v-model="queryParams.templateName" placeholder="璇疯緭鍏ユā鍨嬪悕绉�" clearable size="small" @keyup.enter.native="handleQuery" /> + <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" + style="margin-bottom: -20px"> + <el-form-item label="妯″瀷鍚嶇О" prop="name"> + <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ユā鍨嬪悕绉�" clearable size="small" + @keyup.enter.native="setQueryParamsQuery" /> </el-form-item> <el-form-item label="妯″瀷绫诲埆" prop="type"> - <el-select v-model="queryParams.type" placeholder="璇烽�夋嫨妯″瀷绫诲埆" clearable size="small"> - <el-option v-for="dict in dict.type.iot_model_library_type" :key="dict.value" :label="dict.label" :value="dict.value" /> + <el-select v-model="queryParams.type" @change="getList" placeholder="璇烽�夋嫨妯″瀷绫诲埆" clearable + size="small"> + <el-option v-for="dict in dict.type.iot_model_library_type" :key="dict.value" + :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini">鎼滅储</el-button> - <el-button icon="el-icon-refresh" size="mini">閲嶇疆</el-button> + <el-button type="primary" icon="el-icon-search" size="mini" + @click="setQueryParamsQuery">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="setQueryParamsRest">閲嶇疆</el-button> </el-form-item> <el-form-item style="float: right"> - <el-button type="primary" plain icon="el-icon-plus" size="mini" v-hasPermi="['iot:modelLibrary:add']">鏂板</el-button> + <el-button type="primary" @click="setModelLibraryAdd" plain icon="el-icon-plus" size="mini" + v-hasPermi="['iot:modelLibrary:add']">鏂板</el-button> + <el-button type="danger" @click="setModelLibraryRemove" plain icon="el-icon-delete" size="mini" + v-hasPermi="['iot:modelLibrary:remove']">鍒犻櫎</el-button> </el-form-item> </el-form> </el-card> <el-card class="modelLibiraryContent"> <div class="modelLibiraryTable"> - <el-table :data="templateList" border> + <el-table :data="templateList" border @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" /> <el-table-column label="妯″瀷鍚嶇О" align="center" prop="name" /> <el-table-column label="妯″瀷绫诲瀷" align="center" prop="type" /> - <el-table-column label="妯″瀷澶у皬" align="center" prop="type" /> + <el-table-column label="妯″瀷澶у皬" align="center" prop="sizes" :formatter="formatterSize" /> <el-table-column label="妯″瀷鍦板潃" align="center" prop="path" /> - <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createime" /> + <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" :formatter="formatterTime" /> <el-table-column label="鎻忚堪" align="center" prop="bak" /> - <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="200"> + <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="240"> <template slot-scope="scope"> - <el-button size="small" type="primary" style="padding: 5px" icon="el-icon-edit" v-hasPermi="['iot:template:query']" v-if="scope.row.isSys == '0' ? true : !isTenant">淇敼</el-button> - <el-button size="small" type="danger" style="padding: 5px" icon="el-icon-delete" v-hasPermi="['iot:template:remove']" v-if="scope.row.isSys == '0' ? true : !isTenant">鍒犻櫎</el-button> - <el-button size="small" type="warning" style="padding: 5px" icon="el-icon-download" v-hasPermi="['iot:template:query']" v-if="scope.row.isSys == '0' ? true : !isTenant">涓嬭浇</el-button> + <!-- <el-button size="small" type="primary" style="padding: 5px" icon="el-icon-edit" + v-hasPermi="['iot:modelLibrary:add']">淇敼</el-button> --> + <!-- <el-button size="small" type="danger" style="padding: 5px" icon="el-icon-delete" + v-hasPermi="['iot:modelLibrary:remove']">鍒犻櫎</el-button> --> + <el-button size="small" @click="setModelLibraryExport(scope.row)" type="warning" + style="padding: 5px" icon="el-icon-download" + v-hasPermi="['iot:modelLibrary:export']">涓嬭浇</el-button> + <!-- <el-button size="small" type="success" style="padding: 5px" + icon="el-icon-monitor">棰勮</el-button> --> </template> </el-table-column> </el-table> - <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageIndex" + :limit.sync="queryParams.pageSize" @pagination="getList" /> </div> </el-card> - <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false"></el-dialog> + <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false"> + <el-form ref="modelFrom" :model="modelFrom" :rules="rules" label-width="80px"> + <!-- <el-form-item label="妯″瀷鍚嶇О" prop="name"> + <el-input v-model="modelFrom.name"></el-input> + </el-form-item> --> + <!-- <el-form-item label="妯″瀷绫诲埆" prop="type"> + <el-select v-model="modelFrom.type" style="width: 100%" placeholder="璇烽�夋嫨妯″瀷绫诲埆" clearable + size="small"> + <el-option v-for="dict in dict.type.iot_model_library_type" :key="dict.value" + :label="dict.label" :value="dict.value" /> + </el-select> + </el-form-item> --> + <el-form-item label="妯″瀷鍦板潃" prop="path"> + <div style="display: flex"> + <div style="flex: 1"> + <input style="display: none" @change="setFileChange" id="fileInput" type="file" + accept=".zip"></input> + <el-input disabled v-model="modelFrom.path" /> + </div> + <div style="margin-left: 10px"> + <el-link style="margin: 0px 10px" title="閫夋嫨" :underline="false" icon="el-icon-plus" + @click="setFileCheck"></el-link> + <el-link style="margin: 0px 10px" title="涓婁紶" :underline="false" icon="el-icon-upload2" + @click="setFileInset"></el-link> + </div> + </div> + </el-form-item> + <!-- <el-form-item label="鎻忚堪"> + <el-input v-model="modelFrom.bak"></el-input> + </el-form-item> --> + </el-form> + <div slot="footer" class="dialog-footer"> + <!-- <el-button type="primary" v-show="modelFrom.ids">淇� 鏀�</el-button> --> + <el-button type="primary" @click="setSsubmitForm('modelFrom')">鏂� 澧�</el-button> + <el-button>鍙� 娑�</el-button> + </div> + </el-dialog> + <iframe id="downFrame" ref="myIfream" src="" + style="display: none; border: 0; padding: 0; height: 0; width: 0"></iframe> </div> </template> <script> -// import { listModelLibrary } from '@/api/iot/modelLibrary'; +import { + modelSelectFiles, + modelSelectPath, + modelSelectMetasByPageAndCount, + modelUploadFiles, + modelSelectMappers, + modelInsertFiles, + modelDeleteMetas, + modelDownloadFile, + modelDownloadetaReq, +} from '@/api/iot/modelLibrary'; +import { saveAs } from 'file-saver' +import configTools from '../../../assets/js/configTools'; +import { getToken } from "@/utils/auth"; +import $ from 'jquery' +import axios from 'axios'; +import request from '@/utils/request'; export default { name: 'modelLibirary', dicts: ['iot_model_library_type'], @@ -52,7 +122,7 @@ return { loading: false, queryParams: { - pageNum: 1, + pageIndex: 1, pageSize: 10, name: null, type: null, @@ -60,15 +130,36 @@ // 鏄惁涓虹鎴� isTenant: false, templateList: [ - { - name: 'test', - }, + ], // 鎬绘潯鏁� total: 0, title: '', // 鏄惁鏄剧ず寮瑰嚭灞� open: false, + modelFrom: { + name: '', + type: '', + path: '', + bak: '', + ids: '', + }, + selectPath: null, + selectMappers: null, + //琛ㄥ崟楠岃瘉 + rules: { + name: [ + { + required: true, + message: '妯″瀷鍚嶇О涓嶈兘涓虹┖', + trigger: 'blur', + }, + ], + type: [{ required: true, message: '璇烽�夋嫨妯″瀷绫诲埆', trigger: 'change' }], + path: [{ required: true, message: '璇烽�夋嫨闇�瑕佷笂浼犵殑妯″瀷鏂囦欢', trigger: 'change' }], + }, + multipleSelection: [], + headers: { Authorization: "Bearer " + getToken() }, }; }, created() { @@ -82,10 +173,215 @@ this.getList(); }, - getList() { - // listModelLibrary(this.queryParams).then((response) => { - // }) ; + getSelectPath() { + modelSelectPath().then((response) => { + if (response.code == 200 && response.msg) { + this.selectPath = response.msg; + } else { + this.$message('妯″瀷涓婁紶璺緞鑾峰彇澶辫触: ' + response.msg); + } + }); }, + handleSelectionChange(val) { + this.multipleSelection = val; + }, + //鏌ヨ + setQueryParamsQuery() { + this.queryParams.pageIndex = 1; + this.getList(); + }, + // 閲嶇疆 + setQueryParamsRest() { + this.queryParams = { + pageIndex: 1, + pageSize: 10, + name: null, + type: null, + } + this.getList(); + }, + // 鎼滅储 + getList() { + if (!this.selectPath) { + this.getSelectPath(); + } + modelSelectMetasByPageAndCount(this.queryParams).then((response) => { + if (response.code == 200) { + + this.total = response.data.length; + this.templateList = response.data; + } else { + this.$message('妯″瀷鏁版嵁鍒楄〃鑾峰彇澶辫触銆�'); + } + }) + }, + setModelLibraryRemove() { + if (this.multipleSelection.length <= 0) { + return this.$message('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁'); + } + const std = []; + this.multipleSelection.filter((response) => { + std.push(response.id); + }) + modelDeleteMetas({ ids: std.toString() }).then((response) => { + if (response.code == 200) { + this.$message({ + message: '涓夌淮妯″瀷鍒犻櫎鎴愬姛', + type: 'success' + }); + this.setQueryParamsQuery(); + } else { + this.$message('涓夌淮妯″瀷鍒犻櫎澶辫触'); + } + }) + }, + setModelLibraryExport(row) { + modelDownloadetaReq({ ids: [row.id] }).then((response) => { + if (response.code == 200) { + this.setModelDownloadFile(response.msg) + } else { + this.$message(response.msg); + } + }) + }, + setModelDownloadFile(res) { + const url = process.env.VUE_APP_BASE_API + "model/downloadFile?&guid=" + res + axios.get(url, { + headers: { + "Authorization": "Bearer " + getToken(), + "Content-Type": "application/x-www-form-urlencoded", + }, + responseType: "blob", + }).then(response => { + if (!response.headers) return + var elink = document.createElement('a'); + // 浣跨敤鍚庣鎻愪緵鐨勬枃浠跺悕 鍛藉悕 + const fileName = response.headers['content-disposition'].split("''")[1]; + console.log(fileName); + elink.style.display = 'none'; + // 鏂囦欢涓嬭浇鍦板潃璧嬪�� + elink.href = window.URL.createObjectURL(response.data); + let str = fileName; + if (fileName.indexOf("UTF-8''") > -1) { + str = fileName.replace("UTF-8''", '') + } + elink.download = str; + elink.click(); + this.$message({ + message: '鏂囦欢瀵煎嚭鎴愬姛', + type: 'success' + }); + }) + }, + // 娣诲姞涓夌淮妯″瀷 + setModelLibraryAdd() { + this.setFromRest(); + this.open = true; + this.title = '娣诲姞涓夌淮妯″瀷'; + }, + setModelLibraryCannel() { + this.open = false; + this.title = ''; + this.setFromRest(); + document.getElementById('fileInput').value = ""; + this.selectMappers = null; + }, + setSsubmitForm(formName) { + if (!this.selectMappers) { + this.$message('涓夌淮妯″瀷鏈笂浼犳棤娉曟柊澧�'); + } + this.$refs[formName].validate((valid) => { + if (valid) { + this.setModelInsertFiles(this.selectMappers) + } else { + console.log('error submit!!'); + return false; + } + }); + }, + setModelInsertFiles(res) { + modelInsertFiles(JSON.stringify(res)).then((response) => { + if (response.code == 200) { + this.$message({ + message: '涓夌淮妯″瀷娣诲姞鎴愬姛', + type: 'success' + }); + this.setModelLibraryCannel(); + this.setQueryParamsQuery(); + } else { + this.$message('涓夌淮妯″瀷娣诲姞澶辫触'); + } + }) + }, + // 鏂囦欢閫夋嫨 + setFileCheck() { + document.getElementById('fileInput').click(); + }, + + setFileChange() { + const inputFile = document.getElementById('fileInput').files; + if (inputFile.length > 0) { + this.modelFrom.path = inputFile[0].name; + } else { + this.$message('鑾峰彇涓婁紶鏂囦欢淇℃伅澶辫触锛岃閲嶆柊灏濊瘯'); + } + }, + // 鏂囦欢涓婁紶 + setFileInset() { + if (!this.selectPath) { + this.getSelectPath(); + } + var formData = new FormData(); + const fs = document.getElementById('fileInput').files; + for (var i = 0, c = fs.length; i < c; i++) { + formData.append(fs[i].name, fs[i]); // fs.files[i].name,file + } + modelUploadFiles(this.selectPath, formData).then((response) => { + if (response.code == 200) { + this.$message({ + message: '鏁版嵁涓婁紶鎴愬姛', + type: 'success' + }); + this.setModelSelectMappers() + } else { + this.$message('鏁版嵁涓婁紶澶辫触'); + } + }) + }, + setModelSelectMappers() { + if (!this.selectPath) { + this.getSelectPath(); + } + this.selectMappers = null; + modelSelectMappers({ path: this.selectPath }).then((response) => { + if (response.code == 200) { + this.selectMappers = response.data; + } else { + this.$message('鏁版嵁鏄犲皠鏌ヨ澶辫触'); + } + }) + }, + // 琛ㄥ崟閲嶇疆 + setFromRest() { + this.modelFrom = { + name: '', + type: '', + path: '', + bak: '', + ids: '', + }; + }, + formatterSize(row, column, cellValue, index) { + return configTools.formatterSize(cellValue); + }, + formatterTime(row, column, cellValue, index) { + if (cellValue) { + return configTools.formatterTime(cellValue); + } else { + return null + } + + } }, }; </script> @@ -98,6 +394,7 @@ position: absolute; display: flex; flex-direction: column; + .modelLibiraryContent { margin: 6px 0px; flex: 1; @@ -106,6 +403,7 @@ ::v-deep .el-card__body { padding: 15px !important; } + .modelLibiraryTable { width: calc(100% - 30px); height: calc(100% - 36px); -- Gitblit v1.9.3