From 8d270834a630785732829f6cb8af6c1e30fd7f43 Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期二, 12 九月 2023 10:06:03 +0800
Subject: [PATCH] 应用中心 2023-9-12
---
src/pages/ai/index/App.vue | 2662 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/pages/ai/index/mixins.ts | 0
src/pages/ai/index/main.ts | 12
public/apps.json | 23
src/pages/ai/index/api.ts | 161 +++
5 files changed, 2,858 insertions(+), 0 deletions(-)
diff --git a/public/apps.json b/public/apps.json
index c30c9ce..c35a2d7 100644
--- a/public/apps.json
+++ b/public/apps.json
@@ -2,6 +2,29 @@
"code": 200,
"data": [
{
+ "id": "7dea48a4-8294-4914-85d8-c2bbd4caf553",
+ "name": "搴旂敤涓績",
+ "package": "algorithmManage",
+ "type": "2",
+ "url": "/view/ai/",
+ "title": "搴旂敤涓績",
+ "width": 1243,
+ "height": 670,
+ "iconBlob": "",
+ "icon": "../../images/app-mid/algorithm-store.png",
+ "version": "1.0.0",
+ "create_time": "2020-10-09 14:00:02",
+ "create_by": "",
+ "update_time": "",
+ "update_by": "",
+ "isDelete": 0,
+ "isDefault": true,
+ "remoteVersion": "",
+ "installed": true,
+ "isUpgrade": false,
+ "progressMsg": ""
+ },
+ {
"id": "850b5e86-dbcf-40f2-8511-745a4d06ec84",
"name": "鏃ュ織绠$悊",
"package": "syslog",
diff --git a/src/pages/ai/index/App.vue b/src/pages/ai/index/App.vue
new file mode 100644
index 0000000..13549e1
--- /dev/null
+++ b/src/pages/ai/index/App.vue
@@ -0,0 +1,2662 @@
+<template>
+ <div class="s-task-manage">
+ <div style="height: 100%">
+ <div class="flex-box task-manage">
+ <div class="installModel" v-if="isInstall">
+ <div class="progress-bar">
+ <div class="inner-bar"></div>
+ </div>
+ </div>
+ <!-- 瓒呯骇绠$悊鍛樺彲瑙� -->
+ <div class="super">
+ <div class="left-box">
+ <!-- <div class="title">
+ <label>绠楁硶搴�</label>
+ </div>-->
+ <el-tabs
+ v-model="activeName"
+ type="border-card"
+ @tab-click="handleTabClick"
+ style="height: calc(100% - 20px)"
+ >
+ <el-tab-pane label="宸叉縺娲�" name="myAlgorithm">
+ <div class="width-new-line task-list" v-show="activeName === 'myAlgorithm'">
+ <p class="src-title">绠楁硶杞欢</p>
+ <div class="flex-list">
+ <div class="wrap-box" v-for="item in installedList" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div
+ class="svg-wrap"
+ :class="{ willUpGrade: item.isUpgrade }"
+ v-loading="item.upgradeLoading"
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <!-- <i class="iconfont iconupdate" v-if="item.isUpgrade"></i> -->
+ <img class="update-icon" v-if="item.isUpgrade" src="../../../assets/img/鏇存柊鎻愮ず.png" alt="">
+ <div class="mask" v-if="!item.isDefault || item.isUpgrade">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div class="info-onmask" @click="checkDetail(item, 'active')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ @click="unLoadSdk(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >鍗歌浇</el-button>
+ <el-button
+ v-if="item.isUpgrade"
+ @click="donwload(item, 0)"
+ type="warning"
+ size="small"
+ class="bot-btn"
+ >鍗囩骇</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">
+ {{
+ item.sdk_name
+ }}
+ </span>
+
+ <el-input
+ size="small"
+ v-model="item.sdk_name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="wrap-box" v-for="item in notInstalledList" :key="item.id">
+ <div
+ class="list-choose-item-left list-choose-item-left-uninstal"
+ v-loading="downloading && downloadItem == item.id"
+ >
+ <div class="mask">
+ <div class="left-top">
+ <div v-if="item.installed">褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div
+ class="info-onmask"
+ @click="checkDetail(item, 'activeNotInstall')"
+ >鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button @click="donwload(item,1)" type="primary" class="bot-btn">瀹夎</el-button>
+ </div>
+ </div>
+ <div class="click-download" title="涓嬭浇">
+ <span class="iconfont iconxiazai1"></span>
+ </div>
+ <div class="list-complete-item-handle">
+ <div
+ class="svg-wrap"
+ v-loading="
+ item.installLoading || item.upgradeLoading
+ "
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span class="list-choose-item-left-uninstal">
+ {{
+ item.sdk_name
+ }}
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <p class="src-title">搴旂敤杞欢</p>
+ <div class="flex-list">
+ <div class="wrap-box" v-for="item in installedApps" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div
+ class="svg-wrap"
+ :class="{ willUpGrade: item.isUpgrade }"
+ v-loading="
+ item.unloadLoading || item.upgradeLoading
+ "
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <!-- <i class="iconfont iconupdate" v-if="item.isUpgrade"></i> -->
+ <img class="update-icon" v-if="item.isUpgrade" src="../../../assets/img/鏇存柊鎻愮ず.png" alt="">
+
+ <div class="mask">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <!-- v-if="!item.isDefault" -->
+ <div class="info-onmask" @click="checkDetail(item,'active')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ v-show="!item.isDefault"
+ @click="unLoad(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >鍗歌浇</el-button>
+ <el-button
+ v-if="item.isUpgrade"
+ @click="downloadApp(item, 'upgrade')"
+ type="warning"
+ size="small"
+ class="bot-btn"
+ >鍗囩骇</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name" style="color:grey;">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">{{ item.name }}</span>
+ <el-input
+ size="small"
+ v-model="item.sdk_name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="wrap-box" v-for="item in storeApps" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle uninstall">
+ <div
+ class="svg-wrap"
+ v-loading="
+ item.installLoading || item.upgradeLoading
+ "
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <div class="mask">
+ <div class="left-top">
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <!-- v-if="!item.isDefault" -->
+ <div class="info-onmask" @click="checkDetail(item,'activeNotInstall')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ @click="downloadApp(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >瀹夎</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">{{ item.name }}</span>
+ <el-input
+ size="small"
+ v-model="item.name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-tab-pane>
+
+ <el-tab-pane
+ label="绂荤嚎鍗囩骇/瀹夎"
+ name="upgradeOrInstallation"
+ v-if="isShow('algorithmManage:insOffLine')"
+ >
+ <div class="tab-content">
+ <div class="action-bar">
+ <file-uploader
+ single
+ tip
+ tipWords="涓婁紶绠楁硶"
+ uploadPlaceholder="涓婁紶瀹夎杞欢"
+ url="/data/api-v/sdk/upload"
+ @complete="onFileUpload"
+ @file-added="onFileAdded"
+ />
+ </div>
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="搴旂敤涓績" name="algorithmMall" v-if="isShow('algorithmManage:buy')">
+ <div class="tab-content">
+ <div class="flex-title">
+ <p class="src-title">绠楁硶杞欢</p>
+ </div>
+ <div class="store-list flex-list">
+ <div class="wrap-box" v-for="item in unActivedSDKList" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div class="alg-icon svg-wrap">
+ <!-- <div class="mask" @click="actSdkOrApp(item.id)">
+ <span
+ class="iconfont iconyunxiazai"
+ style="
+ color: #ff6a00;
+ font-size: 20px;
+ position: absolute;
+ top: 45%;
+ left: 45%;
+ "
+ ></span>
+ </div>-->
+ <div class="mask" v-if="!item.isDefault || item.isUpgrade">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div class="info-onmask" @click="actSdkOrApp(item)">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ @click="actSdkOrApp(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >婵�娲�</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">
+ {{
+ item.sdk_name
+ }}
+ </span>
+ <el-input
+ size="small"
+ v-model="item.sdk_name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <p class="src-title">搴旂敤杞欢</p>
+ <div class="app-list flex-list">
+ <div v-if="!unActivedAppList.length" class="empty-tip">鏆傛棤鏁版嵁</div>
+ <div class="wrap-box" v-for="item in unActivedAppList" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div class="alg-icon svg-wrap">
+ <div class="mask" v-if="!item.isDefault || item.isUpgrade">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div class="info-onmask" @click="actSdkOrApp(item,'app')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ @click="actSdkOrApp(item, 'app')"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >婵�娲�</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">{{ item.name }}</span>
+ <el-input
+ size="small"
+ v-model="item.name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- -->
+ </el-tab-pane>
+ <el-tab-pane name="update">
+ <span slot="label">
+ <el-badge class="update-badge" :value="updateNum" :hidden="updateNum==0">鏇存柊</el-badge>
+ </span>
+ <div class="task-list">
+ <div class="flex-title">
+ <p class="src-title">绠楁硶杞欢</p>
+ <el-button @click="batchUpdate('sdk')" size="mini" type="primary">鏇存柊鍏ㄩ儴</el-button>
+ </div>
+ <div class="flex-list">
+ <div
+ v-if="hasNewVersionSdk.length==0"
+ class="empty-tip"
+ >{{errMsg?errMsg:"鏆傛棤鏁版嵁"}}</div>
+ <div class="wrap-box" v-for="item in hasNewVersionSdk" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div
+ class="svg-wrap"
+ :class="{ willUpGrade: item.isUpgrade }"
+ v-loading="item.upgradeLoading"
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <!-- <i class="iconfont iconupdate" v-if="item.isUpgrade"></i> -->
+ <img class="update-icon" v-if="item.isUpgrade" src="../../../assets/img/鏇存柊鎻愮ず.png" alt="">
+
+ <div class="mask" v-if="!item.isDefault || item.isUpgrade">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div class="info-onmask" @click="checkDetail(item,'active')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ @click="unLoadSdk(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >鍗歌浇</el-button>
+ <el-button
+ v-if="item.isUpgrade"
+ @click="donwload(item, 0)"
+ type="warning"
+ size="small"
+ class="bot-btn"
+ >鍗囩骇</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">
+ {{
+ item.sdk_name
+ }}
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="flex-title">
+ <p class="src-title">搴旂敤杞欢</p>
+ <el-button @click="batchUpdate('app')" type="primary" size="mini">鏇存柊鍏ㄩ儴</el-button>
+ </div>
+ <div class="flex-list">
+ <div v-if="!hasNewVersionApp.length" class="empty-tip">鏆傛棤鏁版嵁</div>
+ <div class="wrap-box" v-for="item in hasNewVersionApp" :key="item.id">
+ <div class="list-choose-item-left">
+ <div class="list-complete-item-handle">
+ <div
+ class="svg-wrap"
+ :class="{ willUpGrade: item.isUpgrade }"
+ v-loading="
+ item.unloadLoading || item.upgradeLoading
+ "
+ :element-loading-text="item.progressMsg"
+ element-loading-background="rgba(0,0,0,.8)"
+ >
+ <!-- <i class="iconfont iconupdate" v-if="item.isUpgrade"></i> -->
+ <img class="update-icon" v-if="item.isUpgrade" src="../../../assets/img/鏇存柊鎻愮ず.png" alt="">
+
+ <div class="mask">
+ <div class="left-top">
+ <div>褰撳墠鐗堟湰:{{ item.version }}</div>
+ <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{ item.remoteVersion }}</div>
+ </div>
+ <div class="info-onmask" @click="checkDetail(item,'active')">鏌ョ湅璇︽儏</div>
+ <div class="mask-btn">
+ <el-button
+ v-if="!item.isDefault"
+ @click="unLoad(item)"
+ type="primary"
+ size="small"
+ class="bot-btn"
+ >鍗歌浇</el-button>
+ <el-button
+ v-if="item.isUpgrade"
+ @click="downloadApp(item, 'upgrade')"
+ type="warning"
+ size="small"
+ class="bot-btn"
+ >鍗囩骇</el-button>
+ </div>
+ </div>
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+ <img v-else class="baseImg" :src="item.icon" alt />
+ </div>
+ <div class="alg-name">
+ <div style="padding: 0px 10px 0px 10px">
+ <span v-if="!item.isEdit">{{ item.name }}</span>
+ <el-input
+ size="small"
+ v-model="item.sdk_name"
+ v-if="item.isEdit"
+ v-focus
+ :maxlength="15"
+ @blur="inputBlur(item)"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ </div>
+ </div>
+ <el-dialog
+ title="瀹夎鍖呬俊鎭�"
+ :visible.sync="installDialogVisible"
+ width="40%"
+ :close-on-click-modal="false"
+ >
+ <div class="installInfo">
+ <template v-if="installAppPackage != null">
+ <div>
+ <div>
+ <span>瀹夎鍖呭悕绉帮細</span>
+ <span>{{ installAppPackage.productName }}</span>
+ </div>
+ <div>
+ <span>瀹夎鐗堟湰锛�</span>
+ <span>{{ installAppPackage.version }}</span>
+ </div>
+ <div>
+ <span>鏇存柊鍐呭锛�</span>
+ <span>{{ installAppPackage.installContent }}</span>
+ </div>
+ </div>
+ </template>
+ <template v-if="installSdkPackage != null">
+ <div>
+ <div>
+ <span>瀹夎鍖呭悕绉帮細</span>
+ <span>{{ installSdkPackage.productName }}</span>
+ </div>
+ <div>
+ <span>瀹夎鐗堟湰锛�</span>
+ <span>{{ installSdkPackage.version }}</span>
+ </div>
+ <div>
+ <span>鏇存柊鍐呭锛�</span>
+ <span>{{ installSdkPackage.installContent }}</span>
+ </div>
+ </div>
+ </template>
+ <p>纭畾瀹夎锛�</p>
+ </div>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="installDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="offlineInstall">瀹� 瑁�</el-button>
+ </div>
+ </el-dialog>
+ <!-- <div class="dialog-content" v-if="productDetailVisible" > -->
+ <el-dialog class="product-detail-dialog" :visible="productDetailVisible" @close="closeDial">
+ <!-- <el-button-group> -->
+ <div class="button-group" v-show="!backDisable||!forwardDisable">
+ <el-button size="small" @click="backwards" :disabled="backDisable">
+ <span><</span>
+ </el-button>
+ <!-- <el-button type="primary" size="small" icon="el-icon-arrow-left"></el-button> -->
+ <el-button size="small" @click="forwards" :disabled="forwardDisable">></el-button>
+ <!-- <el-button type="primary" size="small"><i class="el-icon-arrow-right el-icon--right"></i></el-button> -->
+ </div>
+ <!-- </el-button-group> -->
+ <div class="dialog-title" slot="title">{{isSDKDialog?"绠楁硶璇︽儏":"搴旂敤璇︽儏"}}</div>
+ <div class="dialog-content">
+ <div class="box-top">
+ <div class="top-left">
+ <div class="banner">
+ <el-carousel
+ ref="carousel"
+ :autoplay="false"
+ indicator-position="none"
+ :arrow="
+ productDetail.pics !== undefined
+ ? productDetail.pics.length > 1
+ ? 'always'
+ : 'never'
+ : 'never'
+ "
+ @change="changeHandle"
+ >
+ <!-- :arrow="productDetail.pics.length > 1 ? 'always' : 'never'" -->
+ <el-carousel-item v-for="(item, index) in productDetail.pics" :key="index">
+ <div class="imgwrap">
+ <img
+ v-if="item.type != 'video'"
+ :src="item.url"
+ class="cursor-pointer"
+ preview
+ />
+ <video v-if="item.type == 'video'" :src="item.url" controls></video>
+ </div>
+ </el-carousel-item>
+ </el-carousel>
+ </div>
+ </div>
+ <div class="top-right">
+ <!-- <div class="title">{{curCheckTarget.sdk_name}}</div> -->
+ <div class="summary">
+ <div class="icon">
+ <img
+ v-if="productDetail.iconBlob"
+ class="baseImg"
+ :src="
+ productDetail.iconBlob.indexOf(',') > 0
+ ? productDetail.iconBlob
+ : `data:image/png;base64,${productDetail.iconBlob}`
+ "
+ alt
+ />
+ </div>
+ <div class="right-desc">
+ <div class="name">
+ <el-tooltip
+ class
+ effect="dark"
+ :content="productDetail.productName"
+ placement="right-start"
+ >
+ <span>{{ productDetail.productName }}</span>
+ </el-tooltip>
+ </div>
+ <div class="tags">
+ <el-tag type="info" size="small" color="#fff" v-if="!isSDKDialog">搴旂敤</el-tag>
+ <el-tag type="info" size="small" color="#fff" v-if="isSDKDialog">绠楁硶</el-tag>
+ </div>
+ <div class="btns">
+ <el-button
+ size="small"
+ type="warning"
+ v-if="needToUpgradeInWin||productDetail.isUpgrade"
+ @click="upgradeSDKinWin"
+ >
+ {{
+ isUpgrading ? "鍗囩骇涓�.." : "鍗囩骇"
+ }}
+ </el-button>
+ <el-button
+ size="small"
+ type="primary"
+ v-if="isActive&&!isDefaultApp"
+ @click="unloadSDKinWin"
+ >鍗歌浇</el-button>
+ <el-button
+ size="small"
+ type="primary"
+ v-if="!isActive&&!showInstallNotActive"
+ @click="showInputCode=!showInputCode"
+ >婵�娲�</el-button>
+ <el-button
+ size="small"
+ type="primary"
+ v-if="!isActive&&showInstallNotActive"
+ @click="downloadSdkInSide"
+ >{{isUpgrading?"瀹夎涓�..":"瀹夎"}}</el-button>
+ <el-button
+ size="small"
+ type="success"
+ v-if="!isSDKDialog&&isActive"
+ @click="openApp"
+ >鎵撳紑</el-button>
+ </div>
+ </div>
+ </div>
+ <div class="jihuo-input" v-if="showInputCode">
+ <el-input
+ size="small"
+ v-model="activeCode"
+ placeholder="00000-00000-00000-00000-00000"
+ @blur="getCodeDetail"
+ ></el-input>
+ <el-button type="primary" size="small" @click="actived">婵�娲�</el-button>
+ <el-button type="primary" size="small" @click="cancelActivate">鍙栨秷</el-button>
+ </div>
+ <div class="product-intruduction">
+ <div class="part-title" v-if="!showInputCode">绠�浠�</div>
+ <div class="text">
+ <div class="single-desc">
+ <div>鐗堟湰锛�</div>
+ <div>
+ {{
+ productDetail.productVersion === ""
+ ? "鏆傛棤"
+ : productDetail.productVersion
+ }}
+ </div>
+ </div>
+ <div class="single-desc">
+ <div>姒傝堪锛�</div>
+ <div>
+ {{
+ productDetail.description === ""
+ ? "鏆傛棤"
+ : productDetail.description
+ }}
+ </div>
+ </div>
+ <div class="single-desc">
+ <div>璇﹁堪锛�</div>
+ <div>
+ {{
+ productDetail.summary === ""
+ ? "鏆傛棤"
+ : productDetail.summary
+ }}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="box-bottom">
+ <div class="bot-left">
+ <div class="part-title">{{ isSDKDialog ? "搴旂敤鍦烘櫙" : "鍔熻兘鐗圭偣" }}</div>
+ <div class="list-zone">
+ <div class="list-item" v-for="(item, index) in productDetail.funcInfo" :key="index">
+ <el-tag
+ type
+ size="small"
+ effect="dark"
+ >{{ item.title === "" ? "鏆傛棤鏁版嵁" : item.title }}</el-tag>
+ <div class="desc">
+ {{
+ item.desc === ""
+ ? "鏆傛棤鏁版嵁"
+ : item.desc
+ }}
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="bot-right">
+ <div class="part-title">鎺ㄨ崘绠楁硶</div>
+ <div class="item-zone">
+ <div class="item" v-for="(item, index) in otherProducts" :key="index">
+ <el-tag type="info" color="inherit" size="small">
+ {{
+ item.productTypeName === ""
+ ? "鏆傛棤鏁版嵁"
+ : item.productTypeName
+ }}
+ </el-tag>
+ <div class="icon">
+ <img
+ v-if="item.iconBlob"
+ class="baseImg"
+ :src="
+ item.iconBlob.indexOf(',') > 0
+ ? item.iconBlob
+ : `data:image/png;base64,${item.iconBlob}`
+ "
+ alt
+ />
+
+ <div class="icon-name">
+ <el-tooltip
+ class
+ effect="dark"
+ :content="item.name === '' ? '鏆傛棤鏁版嵁':item.name"
+ placement="top-start"
+ >
+ <span>{{ item.name === "" ? "鏆傛棤鏁版嵁" : item.name }}</span>
+ </el-tooltip>
+ </div>
+ </div>
+ <div class="look-button">
+ <el-button type="primary" size="mini" @click="checkInWindow(item)">鏌ョ湅</el-button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-dialog>
+ <el-dialog
+ :visible.sync="showActivateSuccess"
+ title="婵�娲绘垚鍔燂紒"
+ width="30%"
+ class="active-Dial"
+ :before-close="handleClose"
+ >
+ <div class="dialog-active">
+ <ul class="desc">
+ <li>
+ <label>婵�娲荤爜:</label>
+ <span>{{ activedSdkOrApp.activateCode }}</span>
+ </li>
+ <li>
+ <label>浜у搧鍚嶇О:</label>
+ <span>{{ activedSdkOrApp.productName }}</span>
+ </li>
+ <li>
+ <label>閰嶇疆璇︽儏:</label>
+ <span>{{ activedSdkOrApp.setting }}</span>
+ </li>
+ <li>
+ <label>鏈嶅姟鍒版湡鏃�:</label>
+ <span>{{ activedSdkOrApp.expireTime }}</span>
+ </li>
+ <li>
+ <label>璁稿彲璇�:</label>
+ <span>{{ activedSdkOrApp.licence }}</span>
+ </li>
+ </ul>
+ <div class="text-right">
+ <el-button type="primary" @click="checkMyAlgorith">纭畾</el-button>
+ <p class="tip">鎻愮ず锛氳鍦ㄢ�滃凡婵�娲烩�濅腑鏌ョ湅骞跺畨瑁呯畻娉�</p>
+ </div>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {
+ findAllSdk,
+ downloadSdk,
+ installSdk,
+ getInstallInfo,
+ removeSdk,
+} from "./api";
+import {
+ getApps,
+ installApp,
+ getAppDetail,
+ removeApp,
+ getUnActivedSdk,
+ actPageAlg,
+ getUnActivedApp,
+ actApp,
+} from "@/api/app";
+
+import bus from "@/plugin/bus";
+import FileUploader from "@/components/subComponents/FileUpload/index";
+export default {
+ name: "algorithmManage",
+ props: {},
+ components: {
+ FileUploader,
+ },
+ computed: {
+ updateNum() {
+ return this.hasNewVersionApp.length + this.hasNewVersionSdk.length;
+ },
+ // notInstalledList () {
+ // return this.sdkList.filter(sdk => {
+ // return sdk.installed === false;
+ // });
+ // },
+ // installedList () {
+ // return this.sdkList.filter(sdk => {
+ // return sdk.installed === true && !sdk.isUpgrade;
+ // });
+ // },
+ // ungradeList () {
+ // // 鍗囩骇澶勭悊浼氬鑷撮噸澶嶇殑key,闇�瑕佷慨鏀�
+ // let arr = this.sdkList.filter(sdk => {
+ // return sdk.isUpgrade === true;
+ // });
+ // arr.forEach(sdk => {
+ // sdk.upgradeLoading = false;
+ // });
+ // return arr;
+ // },
+ isAdmin() {
+ if (
+ sessionStorage.getItem("userInfo") &&
+ sessionStorage.getItem("userInfo") !== ""
+ ) {
+ let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
+ return loginName === "superadmin" || loginName === "basic";
+ }
+
+ return false;
+ },
+ },
+ data() {
+ return {
+ sdkList: [],
+ installedList: [],
+ hasNewVersionSdk: [],
+ hasNewVersionApp: [],
+ notInstalledList: [],
+ buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
+ activeName: "myAlgorithm",
+ patchUpdateStatus: "",
+ downloadItem: "",
+ downloading: false,
+ direction: "rtl",
+ actStep: 0,
+ showActivateSuccess: false,
+ activeCode: "",
+ isInstall: false,
+ installDialogVisible: false,
+ installPackage: {},
+ installAppPackage: null,
+ installSdkPackage: null,
+ isActive: true,
+ isDefaultApp: false,
+ installPercentage: 0,
+ unActivedSDKList: [],
+ unActivedAppList: [],
+ isSDKDialog: true,
+ //actSdkId: '',
+ actType: "",
+ actId: "",
+ activedSdkOrApp: {
+ activateCode: "",
+ productName: "",
+ setting: "",
+ expireTime: "",
+ licence: "",
+ devIds: "",
+ },
+ // unloadLoading: false,
+ // installLoading: false,
+ installedApps: [],
+ storeApps: [],
+ installFile: {},
+ freshTimer: null,
+ appUpgreading: true,
+ sdkUpgreading: true,
+ autoRefresh: true,
+ curCheckTarget: {},
+ productDetailVisible: false,
+ isUpgrading: false,
+ productDetail: {},
+ otherProducts: [],
+ backStack: [],
+ forwardStack: [],
+ backDisable: true,
+ forwardDisable: true,
+ showInputCode: false,
+ needToUpgradeInWin: false,
+ errMsg: "",
+ showInstallNotActive: false
+ };
+ },
+ directives: {
+ focus: {
+ inserted: function (el) {
+ el.querySelector("input").focus();
+ },
+ },
+ },
+
+ mounted() {
+ // 鑾峰彇鎵�鏈夊簲鐢�
+ this.autoRefreshAppAndSdkState();
+
+ this.getUnActivedList();
+ this.getUnActivedAppList();
+ },
+ beforeDestroy() {
+ this.autoRefresh = false;
+ },
+ methods: {
+ isShow(authority) {
+ return (
+ this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
+ );
+ },
+ batchUpdate(type) {
+ if (type == "sdk") {
+ this.hasNewVersionSdk.forEach((sdk) => {
+ this.donwload(sdk, 0);
+ });
+ } else {
+ this.hasNewVersionApp.forEach((app) => {
+ this.downloadApp(app, "upgrade");
+ });
+ }
+ },
+ closeDial() {
+ this.productDetailVisible = false
+ this.productDetail = {}
+ this.otherProducts = []
+ },
+ checkDetail(item, type) {
+ if (type == 'inactive') {
+ this.isActive = false
+ this.showInstallNotActive = false
+ this.showInputCode = false
+ } else if (type == 'active') {
+ this.showInputCode = false
+ this.showInstallNotActive = false
+ this.isActive = true
+ } else if (type == 'activeNotInstall') {
+ this.showInputCode = false
+ this.isActive = false
+ this.showInstallNotActive = true
+ }
+ this.checkIsDefOrNot(item.id)
+ this.needToUpgradeInWin = item.isUpgrade ? true : false
+ this.resetStack()
+ if (item.sdk_type === undefined) {
+ this.isSDKDialog = false
+ } else {
+ this.isSDKDialog = true
+ }
+ this.productDetailVisible = true;
+ let _this = this;
+ getAppDetail({ id: item.id }).then((res) => {
+ _this.productDetail = res.data.detail;
+ _this.productDetail.isUpgrade = item.isUpgrade;
+ _this.productDetail.iconBlob = item.iconBlob;
+
+ _this.otherProducts = res.data.randoms;
+ });
+ },
+ resetStack() {
+ this.forwardStack = []
+ this.backStack = []
+ this.backDisable = true
+ this.forwardDisable = true
+
+ },
+ checkInWindow(item) {
+ this.backStack.push([this.productDetail, this.otherProducts])
+ this.backDisable = false
+ this.checkIsDefOrNot(item.id)
+
+ let _this = this;
+ getAppDetail({ id: item.id }).then((res) => {
+ _this.productDetail = res.data.detail;
+ _this.productDetail.iconBlob = item.iconBlob
+ this.actId = _this.productDetail.productBaseId
+ let flag = false
+ const allNeedToNew = [...this.hasNewVersionSdk, ...this.hasNewVersionApp]
+ for (let i = 0; i < allNeedToNew.length; i++) {
+ const item = allNeedToNew[i];
+ if (item.id == _this.productDetail.productBaseId) {
+ flag = true
+ }
+ }
+ this.needToUpgradeInWin = flag
+ _this.productDetail.isUpgrade = flag
+
+ _this.otherProducts = res.data.randoms;
+ });
+ },
+ checkIsDefOrNot(id) {
+ if (id.length > 10) {
+ this.isDefaultApp = false
+ } else {
+ this.isDefaultApp = true
+ }
+ },
+ backwards() {
+ if (this.backStack.length == 0) {
+ this.backDisable = true
+ return
+ }
+
+ this.forwardStack.push([this.productDetail, this.otherProducts])
+ let item = this.backStack.pop()
+ this.productDetail = item[0]
+ this.checkIsDefOrNot(this.productDetail.productBaseId)
+ this.otherProducts = item[1]
+ this.forwardDisable = false
+ if (this.backStack.length == 0) {
+ this.backDisable = true
+
+ }
+ },
+ forwards() {
+ if (this.forwardStack.length == 0) {
+ this.forwardDisable = true
+ return
+ }
+
+ this.backStack.push([this.productDetail, this.otherProducts])
+ this.backDisable = false
+ let item = this.forwardStack.pop()
+
+ this.productDetail = item[0]
+ this.otherProducts = item[1]
+ if (this.forwardStack.length == 0) {
+ this.forwardDisable = true
+ }
+
+ },
+ //绂荤嚎瀹夎
+ offlineInstall() {
+ this.installDialogVisible = false;
+ this.isInstall = true;
+ //瀹夎
+ installSdk(this.installFile)
+ .then((res) => {
+ if (res.success) {
+ this.isInstall = false;
+ this.$message({
+ type: "success",
+ message: '瀹夎鎴愬姛,灏嗚烦杞嚦"宸叉縺娲�"涓煡鐪�',
+ });
+ setTimeout(() => {
+ this.getAllSdk();
+ window.parent.postMessage(
+ {
+ msg: "AppUpdate",
+ },
+ "*"
+ );
+ this.activeName = "myAlgorithm";
+ }, 3000);
+ }
+ })
+ .catch((e) => {
+ this.isInstall = false;
+ this.$message({
+ type: "error",
+ message: e.data,
+ });
+ });
+ },
+
+ downloadApp(app, action) {
+ if (action == "upgrade") {
+ app.upgradeLoading = true;
+ } else {
+ app.installLoading = true;
+ }
+ let _this = this;
+
+ installApp({ path: app.id })
+ .then((res) => {
+ if (res && res.success) {
+ _this.$notify({
+ title: "鎴愬姛",
+ message: "瀹夎搴旂敤鎴愬姛",
+ type: "success",
+ });
+ setTimeout(() => {
+ if (action == "upgrade") {
+ app.upgradeLoading = false;
+ } else {
+ app.installLoading = false;
+ }
+ // _this.getAllApps();
+ window.parent.postMessage(
+ {
+ msg: "AppUpdate",
+ },
+ "*"
+ );
+ }, 3000);
+ } else {
+ }
+ })
+ .catch((e) => {
+ _this.$notify({
+ title: "瀹夎澶辫触",
+ message: e.data,
+ type: "warning",
+ });
+ if (action == "upgrade") {
+ app.upgradeLoading = false;
+ } else {
+ app.installLoading = false;
+ }
+ });
+
+ // 寮�鍚嚜鍔ㄥ埛鏂�
+ this.appUpgreading = true;
+ },
+ async getAllApps() {
+ let iArry = [];
+ let sArry = [];
+ let nArry = [];
+ let rsp = await getApps();
+ if (rsp && rsp.success) {
+ // 閬嶅巻app鐨勮繃绋嬮噸缃�
+ this.appUpgreading = false;
+
+ rsp.data.forEach((item) => {
+ let obj = Object.assign(
+ { unloadLoading: false, upgradeLoading: false },
+ item
+ );
+ if (obj.progressMsg !== "" && obj.progressMsg !== "宸插畨瑁�") {
+ obj.upgradeLoading = true;
+
+ this.appUpgreading = true;
+ }
+ item.installed ? iArry.push(obj) : sArry.push(obj);
+ item.isUpgrade && nArry.push(obj);
+ });
+ }
+ this.installedApps = iArry;
+ this.storeApps = sArry;
+ this.hasNewVersionApp = nArry;
+ },
+
+ //鍗歌浇
+ unLoad(app) {
+ let _this = this;
+ this.$confirm("纭畾瑕佸嵏杞借搴旂敤鍚�?", "鎻愮ず")
+ .then(() => {
+ _this.productDetailVisible = false
+
+ app.unloadLoading = true;
+ removeApp({ appId: app.id })
+ .then((res) => {
+ if (res && res.success) {
+ app.unloadLoading = false;
+ _this.getAllApps();
+ window.parent.postMessage(
+ {
+ msg: "AppUpdate",
+ },
+ "*"
+ );
+ _this.$notify({
+ title: "鎴愬姛",
+ message: "鍗歌浇搴旂敤鎴愬姛",
+ type: "success",
+ });
+ }
+ })
+ .catch((e) => {
+ console.log(e);
+ app.unloadLoading = false;
+ });
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ },
+
+ actSdkOrApp(item, type = "sdk") {
+ this.checkDetail(item, "inactive");
+ this.actType = type;
+ this.actId = item.id;
+ this.actStep = 0;
+ this.activeCode = "";
+ this.activedSdkOrApp = this.newActInfo();
+ },
+
+ cancelActivate() {
+ this.showInputCode = false
+ this.activeCode = ""
+ },
+ newActInfo() {
+ return {
+ activateCode: "",
+ productName: "",
+ setting: "",
+ expireTime: "",
+ licence: "",
+ devIds: "",
+ };
+ },
+ getUnActivedList() {
+ getUnActivedSdk().then((res) => {
+ if (res.code == 200) {
+ this.unActivedSDKList = res.data;
+ }
+ });
+ },
+ getUnActivedAppList() {
+ getUnActivedApp().then((res) => {
+ if (res.code == 200) {
+ this.unActivedAppList = res.data;
+ }
+ });
+ },
+ actived() {
+ let _this = this;
+ if (this.activeCode.trim() == "") {
+ this.$notify({
+ type: "error",
+ message: "婵�娲荤爜涓嶈兘涓虹┖",
+ });
+ return;
+ }
+ if (this.actType == "sdk") {
+ //婵�娲荤畻娉�
+ actPageAlg(this.actId, this.activeCode)
+ .then((res) => {
+ if (res.data.isSuccess) {
+ this.productDetailVisible = false;
+ _this.activedSdkOrApp = res.data.successMsg;
+ this.showActivateSuccess = true
+ _this.actStep++;
+ _this.getUnActivedList();
+ _this.getAllSdk();
+ } else {
+ _this.$notify({
+ type: "error",
+ message: res.data.failMsg.failMsg,
+ });
+ }
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ } else if (this.actType == "app") {
+ //婵�娲诲簲鐢�
+ actApp(this.actId, this.activeCode)
+ .then((res) => {
+ if (res.data.isSuccess) {
+ this.productDetailVisible = false;
+ _this.activedSdkOrApp = res.data.successMsg;
+ this.showActivateSuccess = true
+ _this.actStep++;
+ _this.getUnActivedAppList();
+ _this.getAllApps();
+ } else {
+ _this.$notify({
+ type: "error",
+ message: res.data.failMsg.failMsg,
+ });
+ }
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ }
+ },
+ getCodeDetail() { },
+ checkMyAlgorith() {
+ this.showActivateSuccess = false;
+ this.activeName = "myAlgorithm";
+ },
+ onFileUpload(file) {
+ //this.patchUpdateStatus = `<span style="color:green">涓婁紶鎴愬姛, 鐐瑰嚮鍗囩骇鎸夐挳寮�濮嬪畨瑁�</span>`;
+ this.patchFile = { ...file };
+ this.fileAdded = true;
+ const h = this.$createElement;
+ //涓婁紶瀹屾垚鑾峰彇瀹夎淇℃伅
+ let _this = this;
+ getInstallInfo(file)
+ .then((res) => {
+ _this.installFile = file;
+ if (res.success) {
+ _this.installDialogVisible = true;
+ if (res.data.apps.length > 0) {
+ _this.installAppPackage = {
+ appId: res.data.apps[0].appId,
+ version: res.data.apps[0].version,
+ productName: res.data.productName,
+ installContent: res.data.apps[0].installContent,
+ };
+ }
+ if (res.data.sdks.length > 0) {
+ _this.installSdkPackage = {
+ appId: res.data.sdks[0].sdkId,
+ version: res.data.sdks[0].version,
+ productName: res.data.productName,
+ installContent: res.data.sdks[0].installContent,
+ };
+ }
+ }
+ })
+ .catch((e) => {
+ this.$message({
+ type: "error",
+ message: e.data,
+ });
+ });
+ },
+ openApp() {
+ let message = 'toOpenApp?' + this.productDetail.productBaseId;
+ window.parent.postMessage({
+ msg: message
+ }, "*")
+ },
+
+ onFileAdded(f) {
+ this.patchUpdateStatus = "";
+ },
+
+ async getAllSdk() {
+ let installedList = [];
+ let unInstalledList = [];
+ let hasNewVersionList = [];
+ let res = await findAllSdk();
+ if (res && res.success) {
+ this.sdkUpgreading = false;
+
+ res.data.forEach((item) => {
+ let obj = Object.assign(
+ { unloadLoading: false, upgradeLoading: false },
+ item
+ );
+ if (obj.progressMsg !== "" && obj.progressMsg !== "宸插畨瑁�") {
+ obj.upgradeLoading = true;
+
+ this.sdkUpgreading = true;
+ }
+
+ //绠楁硶杞欢 宸插畨瑁呭叾涓寘鍚緟鍗囩骇 鏈畨瑁�
+ item.installed ? installedList.push(obj) : unInstalledList.push(obj);
+ item.isUpgrade ? hasNewVersionList.push(obj) : null
+ });
+ }
+ this.installedList = installedList;
+ this.notInstalledList = unInstalledList;
+ this.hasNewVersionSdk = hasNewVersionList;
+ },
+ unloadSDKinWin() {
+
+ let appToUnload
+ let sdkToUnload
+ if (this.productDetail.productTypeName == "搴旂敤") {
+ appToUnload = this.installedApps.find((item) => {
+ return item.id == this.productDetail.productBaseId
+ })
+ this.unLoad(appToUnload)
+ } else {
+ sdkToUnload = this.installedList.find((item) => {
+ return item.id == this.productDetail.productBaseId
+ })
+ this.unLoadSdk(sdkToUnload)
+ }
+ },
+ //鍗歌浇绠楁硶
+ unLoadSdk(sdk) {
+ let _this = this;
+ this.$confirm("纭畾瑕佸嵏杞借绠楁硶鍚�?", "鎻愮ず")
+ .then(() => {
+ _this.productDetailVisible = false
+ sdk.unloadLoading = true;
+ removeSdk({ sdkId: sdk.id })
+ .then((res) => {
+ if (res && res.success) {
+ sdk.unloadLoading = false;
+ this.$notify({
+ title: "鎴愬姛",
+ message: "鍗歌浇瀹屾垚",
+ type: "success",
+ });
+ _this.getAllSdk();
+ window.parent.postMessage(
+ {
+ msg: "AppUpdate",
+ },
+ "*"
+ );
+ }
+ })
+ .catch((e) => {
+ console.log(e);
+ sdk.unloadLoading = false;
+ });
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ },
+ upgradeSDKinWin() {
+ this.isUpgrading = !this.isUpgrading;
+
+ let _this = this;
+ if (this.productDetail.productTypeName == "搴旂敤") {
+ installApp({ path: this.productDetail.productBaseId })
+ .then((res) => {
+ if (res && res.success) {
+ this.$notify({
+ title: "鎴愬姛",
+ message: "鍗囩骇瀹屾垚",
+ type: "success",
+ });
+ this.needToUpgradeInWin = false
+ this.productDetail.isUpgrade = false
+ this.isUpgrading = !this.isUpgrading;
+
+ }
+ })
+ .catch((e) => {
+ _this.$notify({
+ title: "鍗囩骇澶辫触",
+ message: e.data,
+ type: "warning",
+ });
+ this.isUpgrading = !this.isUpgrading;
+ });
+
+ // 寮�鍚嚜鍔ㄥ埛鏂�
+ this.appUpgreading = true;
+ } else {
+ downloadSdk({ path: this.productDetail.productBaseId }).then((res) => {
+ this.needToUpgradeInWin = false
+ this.productDetail.isUpgrade = false
+ this.isUpgrading = !this.isUpgrading;
+ this.$notify({
+ title: "鎴愬姛",
+ message: "鍗囩骇瀹屾垚",
+ type: "success",
+ });
+ }).catch((err) => {
+ this.$notify({
+ title: "鍗囩骇澶辫触",
+ message: err.data,
+ type: "warning",
+ });
+ this.isUpgrading = !this.isUpgrading;
+ })
+ this.sdkUpgreading = true;
+ }
+
+
+
+ },
+ downloadSdkInSide() {
+ this.downloadItem = this.productDetail.productBaseId;
+ this.isUpgrading = true;
+ downloadSdk({ path: this.productDetail.productBaseId })
+ .then((rsp) => {
+ this.productDetailVisible = false;
+ this.downloadItem = "";
+ this.$notify({
+ type: "success",
+ message: "绠楁硶宸插畨瑁�",
+ });
+ this.isUpgrading = false
+ })
+ .catch((err) => {
+ this.$notify({
+ type: "warning",
+ message: err.data,
+ });
+ this.downloadItem = "";
+ this.isUpgrading = false
+ });
+ // 寮�鍚嚜鍔ㄥ埛鏂�
+ this.sdkUpgreading = true;
+ },
+ donwload(item, typ) {
+ item.upgradeLoading = true;
+ this.downloadItem = item.id;
+
+ downloadSdk({ path: item.id })
+ .then((rsp) => {
+ item.upgradeLoading = false;
+ //this.downloading = false;
+ this.downloadItem = "";
+ this.$notify({
+ type: "success",
+ message: typ == 1 ? "绠楁硶瀹夎鎴愬姛" : "绠楁硶鍗囩骇鎴愬姛"
+ });
+ })
+ .catch((err) => {
+ this.$notify({
+ type: "warning",
+ message: err.data,
+ });
+ item.upgradeLoading = false;
+ //this.downloading = false;
+ this.downloadItem = "";
+ });
+ // 寮�鍚嚜鍔ㄥ埛鏂�
+ this.sdkUpgreading = true;
+ },
+ inputBlur(item) {
+ this.$set(item, "isEdit", false);
+ },
+ handleTabClick() { },
+ autoRefreshAppAndSdkState() {
+ // 鍏抽棴鍚庨��鍑�
+ if (!this.autoRefresh) {
+ return;
+ }
+
+ if (this.appUpgreading) {
+ this.getAllApps();
+ }
+
+ if (this.sdkUpgreading) {
+ this.getAllSdk();
+ }
+
+ let _this = this;
+ setTimeout(() => {
+ _this.autoRefreshAppAndSdkState();
+ }, 500);
+ },
+ },
+};
+</script>
+<style lang="scss">
+.s-task-manage {
+ width: 100% !important;
+ height: 100%;
+ box-sizing: border-box;
+ text-align: left;
+ min-width: 1106px;
+
+ .el-tabs {
+ height: calc(100% - 50px);
+ // margin-top: 5px !important;
+ }
+ .el-tabs--border-card > .el-tabs__header {
+ border: none;
+ }
+ .el-tabs__item.is-top {
+ height: 50px;
+ padding: 5px 50px !important;
+ font-size: 15px;
+ border: none !important;
+ }
+ .el-tabs__item.is-top.is-active {
+ font-weight: bold;
+ }
+ .el-tabs__content {
+ width: 100%;
+ height: calc(100% - 34px);
+ box-sizing: border-box;
+ }
+ .el-tab-pane {
+ width: 100%;
+ height: 100%;
+ }
+ .product-detail-dialog {
+ .dialog-title {
+ font-size: 13px;
+ }
+ .el-dialog {
+ width: 50%;
+ min-width: 920px;
+ position: relative;
+ }
+ .el-dialog__header {
+ text-align: center;
+ padding: 6px;
+
+ .el-dialog__headerbtn {
+ position: absolute;
+ top: 5px;
+
+ right: 20px;
+ padding: 0;
+ background: transparent;
+ outline: none;
+ cursor: pointer;
+ font-size: 20px;
+ }
+ }
+ .el-dialog__body {
+ background-color: rgba(222, 225, 230, 1);
+ padding: 8px 3px;
+ .button-group {
+ position: absolute;
+ top: 3px;
+
+ left: 6px;
+ left: 10px;
+ .el-button--small {
+ padding: 5px 12px;
+ }
+ button {
+ font-size: 18px;
+ line-height: 12px;
+ }
+ }
+ }
+
+ .dialog-content {
+ .box-top {
+ height: 330px;
+ .top-left {
+ float: left;
+ width: 55%;
+ background-color: rgba(253, 253, 253, 1);
+ margin: 0 0.5%;
+ height: 330px;
+ border-radius: 2px;
+ .banner {
+ text-align: center;
+ margin-top: 3px;
+ video {
+ margin: 0px auto;
+ margin-top: 23px;
+
+ width: 443px;
+ height: 277px;
+ }
+ img {
+ max-width: 90%;
+ margin-top: 28px;
+ }
+ }
+ }
+ .top-right {
+ float: left;
+ width: 43%;
+ margin: 0 0.5%;
+ height: 330px;
+ background-color: rgba(253, 253, 253, 1);
+ position: relative;
+ border-radius: 2px;
+ overflow: hidden;
+ .summary {
+ height: 120px;
+ margin: 5px 5px 0 5px;
+ .icon {
+ margin: 0 10px;
+ margin-top: 8px;
+ float: left;
+ .baseImg {
+ max-width: 106px;
+ max-height: 106px;
+ }
+ }
+
+ .right-desc {
+ float: left;
+ position: absolute;
+ left: 140px;
+ .name {
+ font-size: 28px;
+
+ margin-bottom: 5px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ width: 250px;
+ }
+ .tags {
+ margin-bottom: 10px;
+ .el-tag {
+ margin-right: 10px;
+ }
+ }
+ }
+ }
+ .jihuo-input {
+ margin-left: 10px;
+ margin-bottom: 10px;
+ .el-input {
+ float: left;
+ width: 63%;
+ margin-bottom: 8px;
+ margin-right: 10px;
+ }
+ el-button {
+ float: left;
+ }
+ }
+ .product-intruduction {
+ height: 200px;
+ margin-top: 3px;
+
+ .part-title {
+ display: block;
+ line-height: 20px;
+
+ font-size: 16px;
+ margin-left: 24px;
+ border-bottom: 3px solid #3d68e1;
+ width: fit-content;
+ height: 26px;
+ margin-bottom: 8px;
+ }
+ .text {
+ height: 156px;
+ overflow: auto;
+ padding: 0 15px 0px 15px;
+
+ .single-desc {
+ margin-bottom: 10px;
+ font-size: 13px;
+ }
+ }
+ }
+ }
+ }
+ .box-bottom {
+ margin-top: 8px;
+
+ height: 240px;
+ .bot-left {
+ width: 49%;
+ height: 240px;
+ background-color: rgba(253, 253, 253, 1);
+ margin: 0 0.5%;
+ border-radius: 2px;
+ float: left;
+ .part-title {
+ display: block;
+ line-height: 35px;
+ font-size: 16px;
+ margin-left: 24px;
+ border-bottom: 3px solid #3d68e1;
+ width: fit-content;
+ margin-bottom: 10px;
+
+ height: 33px;
+ }
+ .list-zone {
+ overflow: auto;
+ height: 190px;
+ padding: 0 20px;
+ .list-item {
+ .desc {
+ background-color: rgba(242, 242, 242, 1.3);
+ margin: 5px 12px 0 12px;
+ font-size: 12px;
+ line-height: 18px;
+ }
+ margin-bottom: 12px;
+ }
+ }
+ }
+ .bot-right {
+ height: 240px;
+ float: left;
+ background-color: rgba(253, 253, 253, 1);
+ width: 49%;
+ margin: 0 0.5%;
+ border-radius: 2px;
+
+ .part-title {
+ display: block;
+ line-height: 35px;
+ font-size: 16px;
+ margin-left: 24px;
+ border-bottom: 3px solid #3d68e1;
+ width: fit-content;
+ margin-bottom: 5px;
+ height: 33px;
+ }
+ .item-zone {
+ overflow: auto;
+ height: 225px;
+ padding: 0px 12px;
+
+ .item {
+ height: 165px;
+ width: 130px;
+ float: left;
+ border-radius: 10px;
+ box-shadow: 0px 5px 14px rgba(0, 0, 0, 0.0666666666666667);
+ position: relative;
+
+ .el-tag {
+ float: right;
+ margin: 8px;
+ }
+ .icon {
+ margin: 0 auto;
+ img {
+ max-width: 60px;
+ max-height: 60px;
+ position: absolute;
+ top: 20%;
+ left: 26%;
+ }
+ .icon-name {
+ text-align: center;
+ position: absolute;
+ top: 61%;
+ left: 12%;
+ width: 100px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ font-size: 13px;
+ }
+ }
+ .look-button {
+ position: absolute;
+ left: 30%;
+
+ top: 76%;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+.flex-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.el-loading-mask .el-loading-spinner {
+ top: 40px !important;
+}
+.el-loading-mask .el-loading-spinner svg {
+ transform: none !important;
+ top: 20px !important;
+ left: 40% !important;
+}
+.el-loading-mask .el-loading-spinner p.el-loading-text {
+ display: block !important;
+ text-align: center !important;
+ bottom: 10px !important;
+ top: 80px !important;
+ right: 0 !important;
+ color: #78adf7;
+}
+.el-loading-mask .el-loading-spinner .path {
+ stroke: #78adf7;
+}
+.installInfo {
+ text-indent: 2em;
+ font-size: 14px;
+ line-height: 26px;
+ p {
+ text-align: center;
+ }
+}
+.src-title {
+ //color: #bfbfbf;
+ color: #bbcee8;
+ font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC";
+ font-weight: 650;
+ font-style: normal;
+ height: 36px;
+ font-size: 15px;
+ padding-left: 25px;
+}
+.update-badge .el-badge__content.is-fixed {
+ top: 10px;
+ right: 4px;
+}
+.empty-tip {
+ padding-left: 25px;
+ color: #ccc;
+}
+.task-manage {
+ height: 100%;
+ .installModel {
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.7);
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 100;
+ .progress-bar {
+ width: 70%;
+ height: 17px;
+ border-radius: 3px;
+ background-color: rgb(227, 229, 231);
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ background: url("/images/algo/green.gif");
+ overflow: hidden;
+ transform: translate(-50%, -50%);
+ .inner-bar {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 100%;
+ transition: width 3s;
+ background-color: #3d68e1;
+ }
+ }
+ }
+ .el-tab-pane {
+ height: auto !important;
+ }
+ .el-tabs--border-card > .el-tabs__content {
+ padding: 0 !important;
+ overflow: auto !important;
+ background-color: #fff;
+ }
+ .el-tabs__content {
+ padding: 0 !important;
+ overflow: auto !important;
+ }
+ //height: calc(100% - 10px);
+ // .super {
+ // .right-box {
+ // width: 58% !important;
+ // }
+ // }
+
+ .super {
+ width: 100%;
+ height: 100%;
+ .title {
+ margin-bottom: 10px;
+ line-height: 30px;
+ font-family: PingFangSC-Medium;
+ font-size: 16px;
+ color: #222222;
+ }
+ .left-box {
+ // width: 41%;
+ height: 100%;
+ box-sizing: border-box;
+ // float: left;
+ .el-drawer__header {
+ border-bottom: 2px solid #eee;
+ padding-bottom: 10px;
+ font-size: 16px;
+ margin-bottom: 0px;
+ span {
+ outline: none !important;
+ }
+ }
+ .action-bar {
+ margin-bottom: 30px;
+ .el-input {
+ width: 100%;
+ }
+ }
+ .task-list {
+ // background: #1c364a;
+ background: #fff;
+ padding: 20px;
+ box-sizing: border-box;
+
+ .flex-list {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ min-height: 200px;
+ .wrap-box {
+ width: 11%;
+ }
+ .list-choose-item-left {
+ width: 80%;
+ height: auto;
+ margin: auto;
+ margin-bottom: 30px;
+ max-width: 150px;
+ .mask {
+ width: 100%;
+
+ .el-button + .el-button {
+ margin-left: 0 !important;
+ }
+ }
+ }
+ }
+ }
+ .store-list,
+ .app-list {
+ display: flex;
+ flex-wrap: wrap;
+ .wrap-box {
+ width: 11%;
+ margin-bottom: 30px;
+ .list-choose-item-left {
+ width: 80%;
+ height: auto;
+ margin: auto;
+ margin-bottom: 30px;
+ max-width: 150px;
+ }
+ .inner {
+ width: 80%;
+ box-sizing: border-box;
+ position: relative;
+ font-size: 14px;
+ padding-bottom: 10px;
+ transition: all 1s;
+ background: #ffffff;
+ border: 1px solid #e2e2e2;
+ box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
+ border-radius: 4px;
+ margin: auto;
+ .alg-icon {
+ position: relative;
+ width: 80%;
+ margin: auto;
+ padding-top: 80%;
+ svg {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+ .alg-name {
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+ }
+ .mask {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.65);
+ backdrop-filter: blur(1px) brightness(100%);
+ text-align: center;
+ z-index: 1;
+ border-radius: 3px;
+ display: none;
+ svg {
+ position: absolute;
+ top: 49%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 33;
+ }
+ }
+ &:hover {
+ .mask {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+ .drawer-content {
+ font-family: "PingFangSC-Regular";
+ .el-step__title.is-process {
+ border-color: #3d68e1 !important;
+ color: #3d68e1 !important;
+ font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
+ }
+ .el-step__head.is-process {
+ border-color: #3d68e1 !important;
+ color: #3d68e1 !important;
+ font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
+ }
+ .el-input {
+ width: 100%;
+ margin-bottom: 30px;
+ }
+ .current-step {
+ margin: 40px 30px 30px;
+ }
+ .act-code {
+ padding: 0 30px;
+ p {
+ font-size: 15px;
+ margin-bottom: 16px;
+ }
+ }
+ .desc {
+ padding: 0 30px;
+ margin-bottom: 30px;
+ li {
+ border-bottom: 1px solid #eee;
+ height: 45px;
+ line-height: 45px;
+ font-size: 14px;
+ &:last-child {
+ border-bottom: none;
+ }
+ label {
+ display: inline-block;
+ width: 90px;
+ padding-left: 14px;
+ font-weight: bold;
+ }
+ }
+ }
+ .text-right {
+ padding-right: 30px;
+ text-align: right;
+ .tip {
+ color: #999;
+ line-height: 38px;
+ }
+ }
+ }
+ .tab-content {
+ padding: 20px 20px;
+ }
+ }
+ .mask {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.65);
+ backdrop-filter: blur(1px) brightness(100%);
+ text-align: center;
+ z-index: 1;
+ border-radius: 3px;
+ display: none;
+ .info-onmask {
+ color: #fff;
+ }
+ .left-top {
+ position: absolute;
+ left: 5px;
+ top: 5px;
+ font-size: 12px;
+ color: #90d6ff;
+ }
+ .mask-btn {
+ width: 100%;
+ display: flex;
+ }
+ i {
+ color: #fff;
+ position: relative;
+ top: 40%;
+ display: contents;
+ }
+ i:hover {
+ color: rgba(255, 255, 255, 0.685);
+ }
+ }
+
+ .text-css {
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .move-hear {
+ margin: 10px 0 0 0;
+ font-size: 5rem;
+ }
+ .list-choose-item {
+ cursor: pointer;
+ position: relative;
+ font-size: 14px;
+ display: inline-block;
+ @media screen and(min-width: 1640px) {
+ margin: 30px 20px 20px 20px;
+ }
+ @media screen and(min-width: 1460px) and(max-width: 1640px) {
+ margin: 30px 20px 20px 10px;
+ }
+ @media screen and(max-width: 1460px) {
+ margin: 30px 10px 20px 10px;
+ }
+ min-width: 126px;
+ height: 120px;
+ transition: all 1s;
+ background: #fff;
+ border: 1px solid #e2e2e2;
+ box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
+ border-radius: 4px;
+ }
+ .list-choose-item:hover {
+ .mask {
+ display: block;
+ }
+ }
+
+ .alg-shadow {
+ -webkit-box-shadow: 0px 0px 10px 3px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0px 0px 10px 3px rgba(0, 0, 0, 0.3);
+ box-shadow: 0px 0px 10px 3px rgba(0, 0, 0, 0.3);
+ }
+ .select-color {
+ margin-top: 16px;
+ text-align: center;
+ line-height: 28px;
+ // background-color: #3498DB;
+ }
+ .list-choose-item-left {
+ cursor: pointer;
+ position: relative;
+ font-size: 14px;
+
+ transition: all 1s;
+ // background: #ffffff;
+ border-radius: 4px;
+ p {
+ display: none;
+ text-align: right;
+ width: 100%;
+ position: absolute;
+ right: 10px;
+ top: 5px;
+ }
+ .click-download {
+ position: absolute;
+ left: 80%;
+ top: 5%;
+ }
+ }
+ .list-choose-item-left:hover {
+ .mask {
+ display: flex;
+ align-items: flex-end;
+ flex-wrap: wrap;
+ justify-content: center;
+ top: 0;
+
+ .bot-btn {
+ flex: 1;
+ }
+ &.flex-center {
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+ .list-choose-item-left-uninstal {
+ color: gray;
+ filter: grayscale(100%);
+ }
+ .list-complete-item.sortable-chosen {
+ background: #4ab7bd;
+ }
+ .list-choose-item.sortable-ghost {
+ background: #30b08f;
+ }
+ .width-new-line {
+ word-wrap: break-word;
+ word-break: break-all;
+ }
+ .dndList-list {
+ max-width: 40%;
+ }
+ .dic-border {
+ width: 98%;
+ min-height: 170px;
+ background: #fff;
+ padding: 10px 10px 10px 20px;
+ }
+ .min-h {
+ min-height: 130px;
+ }
+ .parent-div {
+ border-right: 1px solid rgba(24, 28, 33, 0.5);
+ max-width: 140px;
+ position: relative;
+ }
+ .list-choose-header {
+ position: relative;
+ width: 74px;
+ height: 74px;
+ background-image: linear-gradient(-137deg, #7076f2 0%, #3d63e1 100%);
+ box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
+ border-radius: 37px;
+ margin: 10px 25px;
+ }
+
+ .task-name-div {
+ font-family: PingFangSC-Medium;
+ font-size: 15px;
+ color: #4b68e6;
+ text-align: center;
+ margin-top: 6px;
+ max-width: 120px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .border-dash {
+ height: 30px;
+ width: 96%;
+ margin-bottom: 10px;
+ border: 1px dashed rgba(24, 28, 33, 0.5);
+ }
+ .i-setting {
+ position: absolute;
+ font-size: 28px;
+ margin-top: -25px;
+ margin-left: -30px;
+ }
+ .i-delete {
+ position: absolute;
+ font-size: 28px;
+ margin-top: -25px;
+ margin-left: -8px;
+ color: red;
+ }
+ .i-bell {
+ float: left;
+ position: relative;
+ left: 10px;
+ top: 10px;
+ font-size: 24px;
+ color: red;
+ }
+ .task-msg {
+ padding-left: 10px;
+ }
+ .b-top {
+ width: 100%;
+ padding-top: 10px;
+ }
+ .b-bottom {
+ width: 100%;
+ border-bottom: 1px solid rgba(24, 28, 33, 0.5);
+ }
+ .i-set-right {
+ position: absolute;
+ left: 80px;
+ top: -11px;
+ font-size: 24px;
+ }
+ .i-remove-right {
+ position: absolute;
+ right: -1px;
+ top: -11px;
+ font-size: 24px;
+ color: red;
+ }
+ .alg-t {
+ line-height: 31px;
+ font-family: PingFangSC-Medium;
+ font-size: 14px;
+ color: #222222;
+ }
+ .alg-name {
+ //margin-top: 12px;
+ line-height: 20px;
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ letter-spacing: 0.05em;
+ color: #333;
+ // background-color: #ecf5ff;
+ .el-input {
+ position: relative;
+ font-size: 14px;
+ display: inline-block;
+ width: 100%;
+ }
+ }
+ .unit-class {
+ margin-left: 10px;
+ text-align: center;
+ line-height: 38px;
+ }
+ .el-input {
+ position: relative;
+ font-size: 14px;
+ display: inline-block;
+ width: 80%;
+ }
+ .list-complete-item-handle {
+ height: 100%;
+ //padding-bottom: 10px;
+ text-align: center;
+ .svg-wrap {
+ //width: 80%;
+ width: 100%;
+ margin: auto;
+ padding-top: 80%;
+ padding-top: 100%;
+ position: relative;
+ box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
+ border-radius: 25px;
+ svg {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ .baseImg {
+ width: 100%;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ max-height: 150px;
+ // max-width: 106px;
+ // max-height: 106px;
+ }
+ }
+ .willUpGrade {
+ .update-icon {
+ position: absolute;
+ top: -8px;
+ right: -8px;
+ z-index: 999;
+
+ }
+ .iconupdate {
+ color: #01e667;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ font-weight: 550;
+ font-size: 26px;
+ z-index: 999;
+ }
+ }
+ &.uninstall {
+ .svg-wrap {
+ filter: grayscale(100%);
+ }
+ .alg-name {
+ color: grey;
+ }
+ }
+ }
+ .dragAreaR {
+ height: 100%;
+ }
+ .drag-info {
+ min-width: 126px;
+ height: 120px;
+ border: 1px dashed #3d68e1;
+ box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
+ // box-shadow: 0px 0px 10px 3px rgba(0,0,0,0.3);
+ border-radius: 4px;
+ margin: 30px 10px 20px 10px;
+ }
+ .drag-info-text {
+ letter-spacing: 3px;
+ line-height: 20px;
+ width: 80px;
+ height: 42px;
+ font-family: PingFangSC-Regular;
+ font-size: 13px;
+ color: #3d68e1;
+ text-align: center;
+ }
+ .task-edit {
+ font-size: 26px;
+ position: relative;
+ bottom: -6px;
+ }
+ .el-button--cancle {
+ background: #eaeaea;
+ border-radius: 2px;
+ border-color: #eaeaea;
+ font-family: PingFangSC-Medium;
+ font-size: 13px;
+ color: #222222;
+ margin-right: 12px;
+ }
+ .click-changeImg {
+ cursor: pointer;
+ display: none;
+ background: rgba(0, 0, 0, 0.35);
+ width: 74px;
+ line-height: 20px;
+ color: rgb(255, 255, 255);
+ font-size: 14px;
+ opacity: 1;
+ border-radius: 6px;
+ }
+
+ .task-name-google {
+ position: relative;
+ top: 30px;
+ width: 126px;
+ height: 120px;
+ border: 1px solid #fff;
+ background: #fff;
+ border-radius: 4px;
+ cursor: pointer;
+ .set-task {
+ display: none;
+ cursor: pointer;
+ }
+
+ .el-switch__core {
+ width: 27px !important;
+ height: 14px;
+ }
+ .el-switch__core:after {
+ width: 10px;
+ height: 10px;
+ }
+ .el-switch.is-checked .el-switch__core::after {
+ left: 100%;
+ margin-left: -11px;
+ }
+ }
+ .task-name-google:hover {
+ .mask {
+ display: block;
+ }
+ }
+ }
+}
+.active-Dial {
+ .el-dialog {
+ min-width: 400px;
+ }
+
+ .dialog-active {
+ .desc {
+ padding: 0 30px;
+ margin-bottom: 30px;
+ li {
+ border-bottom: 1px solid #eee;
+ height: 45px;
+ line-height: 45px;
+ font-size: 14px;
+ &:last-child {
+ border-bottom: none;
+ }
+ label {
+ display: inline-block;
+ width: 90px;
+ padding-left: 14px;
+ font-weight: bold;
+ }
+ }
+ }
+ .text-right {
+ padding-right: 30px;
+ text-align: right;
+ .tip {
+ color: #999;
+ line-height: 38px;
+ }
+ }
+ }
+}
+</style>
+
diff --git a/src/pages/ai/index/api.ts b/src/pages/ai/index/api.ts
new file mode 100644
index 0000000..371bbfc
--- /dev/null
+++ b/src/pages/ai/index/api.ts
@@ -0,0 +1,161 @@
+import request from '@/scripts/httpRequest'
+import qs from "qs";
+
+// 鏌ヨ鎵�鏈夌畻娉�
+export const findAllSdk = (query: any) => {
+ return request({
+ url: "/data/api-v/sdk/findAllSdk",
+ method: "get",
+ params: query
+ });
+};
+
+// 鏌ユ壘鎵�鏈変换鍔★紝鍖呭惈浠诲姟淇℃伅鍜屽搴旂殑绠楁硶淇℃伅
+export const findAll = (query: any) => {
+ return request({
+ url: "/data/api-v/task/findAll",
+ method: "get",
+ params: query
+ });
+};
+
+// 缁欎换鍔℃坊鍔犵畻娉�
+export const addTaskSdk = (query: any) => {
+ return request({
+ url: "/data/api-v/task/addTaskSdk",
+ method: "post",
+ data: query
+ })
+}
+
+// 缁欎换鍔″垹闄ょ畻娉�
+export const delTaskSdk = (query: any) => {
+ return request({
+ url: "/data/api-v/task/delTaskSdk",
+ method: 'get',
+ params: query
+ })
+}
+
+// 鍒犻櫎浠诲姟
+export const deleteTask = (query: any) => {
+ return request({
+ url: '/data/api-v/task/delete',
+ method: 'get',
+ params: query
+ })
+}
+
+// 鏇存柊浠诲姟鐘舵��
+export const updateTaskStatus = (query: any) => {
+ return request({
+ url: '/data/api-v/task/updateTaskStatus',
+ method: 'post',
+ data: query
+ })
+}
+
+// 鏇存柊浠诲姟鍚嶇О
+export const updateTaskName = (query: any) => {
+ return request({
+ url: '/data/api-v/task/updateTaskName',
+ method: 'post',
+ data: qs.stringify(query)
+ })
+}
+
+// 鑾峰彇绠楁硶鍙傛暟
+export const getSdkArgs = (query: any) => {
+ return request({
+ url: '/data/api-v/sdkArg/getSdkArgs',
+ method: 'get',
+ params: query
+ })
+}
+
+// 绠楁硶鍙傛暟淇濆瓨
+export const saveTaskSdkRule = (query: any) => {
+ return request({
+ url: '/data/api-v/task/saveTaskSdkRule',
+ method: 'post',
+ data: query
+ })
+}
+
+// 娣诲姞浠诲姟
+export const addTask = (query: any) => {
+ return request({
+ url: '/data/api-v/task/addTask',
+ method: 'post',
+ data: query
+ })
+}
+
+// 鏌ヨ绠楁硶瑙勫垯
+export const getRulesByTaskSdk = (query: any) => {
+ return request({
+ url: '/data/api-v/task/getRulesByTaskSdk',
+ method: 'get',
+ params: query
+ })
+}
+
+// 鎭㈠榛樿
+export const deleteTaskSdkRule = (query: any) => {
+ return request({
+ url: '/data/api-v/task/deleteTaskSdkRule',
+ method: 'post',
+ data: qs.stringify(query)
+ })
+}
+
+// 鏍规嵁绫诲瀷鏌ユ壘瀛楀吀
+export const findByType = (query: any) => {
+ return request({
+ url: '/data/api-v/dictionary/findByType',
+ method: "get",
+ params: query
+ })
+}
+
+// 鏌ヨ妫�绱㈡爣绛�
+export const getTagList = (query: any) => {
+ return request({
+ url: '/data/api-v/es/tagList',
+ method: 'post',
+ data: query
+ })
+}
+//瀹夎绠楁硶
+export const downloadSdk = (query: any) => {
+ return request({
+ url: '/data/api-v/sdk/sdkDownload',
+ method: 'get',
+ params: query
+ })
+}
+//涓婁紶瀹屾垚鑾峰彇瀹夎淇℃伅
+export const getInstallInfo = (data: any) => {
+ return request({
+ url: '/data/api-v/sdk/showInstallInfo',
+ method: 'post',
+ params: data
+ })
+}
+//瀹夎宸蹭笂浼犵殑绠楁硶鎺ュ彛
+export const installSdk = (file: any) => {
+ return request({
+ url: '/data/api-v/sdk/install',
+ method: 'post',
+ params: file
+ })
+}
+
+//鍗歌浇宸插畨瑁呯畻娉�
+export const removeSdk = (sdk: any) => {
+ return request({
+ url: '/data/api-v/sdk/unInstall',
+ method: 'post',
+ data: sdk
+ })
+}
\ No newline at end of file
diff --git a/src/pages/ai/index/main.ts b/src/pages/ai/index/main.ts
new file mode 100644
index 0000000..491ea9a
--- /dev/null
+++ b/src/pages/ai/index/main.ts
@@ -0,0 +1,12 @@
+import Vue from 'vue';
+import App from './App.vue';
+
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import "@/assets/css/element-variables.scss";
+Vue.use(ElementUI)
+
+new Vue({
+ el: '#app',
+ render: h => h(App)
+})
diff --git a/src/pages/ai/index/mixins.ts b/src/pages/ai/index/mixins.ts
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/pages/ai/index/mixins.ts
--
Gitblit v1.8.0