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