heyujie
2022-06-10 3504ac3d05431d23f74dfecc41eccb491d855cab
src/pages/ai/index/App.vue
@@ -1,6 +1,6 @@
<template>
  <div class="s-task-manage">
    <div style="height:100%;">
    <div style="height: 100%">
      <div class="flex-box task-manage">
        <div class="installModel" v-if="isInstall">
          <div class="progress-bar">
@@ -8,7 +8,7 @@
          </div>
        </div>
        <!-- 超级管理员可见 -->
        <div class="super" v-if="isSuperUser">
        <div class="super">
          <div class="left-box">
            <!-- <div class="title">
          <label>算法库</label>
@@ -17,68 +17,65 @@
              v-model="activeName"
              type="border-card"
              @tab-click="handleTabClick"
              style="height: calc(100% - 20px);"
              style="height: calc(100% - 20px)"
            >
              <el-tab-pane label="已安装" name="myAlgorithm">
              <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 ungradeList" :key="item.id">
                    <div class="wrap-box" v-for="item in installedList" :key="item.id">
                      <div class="list-choose-item-left">
                        <div class="mask">
                          <el-button type="primary" class="bot-btn" @click="donwload(item)">升级</el-button>
                        </div>
                        <div class="list-complete-item-handle">
                          <div class="svg-wrap">
                            <!-- <svg class="icon" aria-hidden="true" style="font-size:7rem;">
                              <use :xlink:href="`#${item.icon}`" />
                            </svg>-->
                          <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="`data:image/png;base64,${item.iconBlob}`"
                              :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>{{ item.sdk_name }}</span>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                    <div class="wrap-box" v-for="(item) in installedList" :key="item.id">
                      <div class="list-choose-item-left">
                        <!-- <div class="mask" v-if="!item.isEdit">
                          <el-button
                            @click="commandAlgLib(item)"
                            type="primary"
                            class="bot-btn"
                          >编辑名称</el-button>
                        </div>-->
                        <div class="list-complete-item-handle">
                          <!-- <span :class="`iconfont ${item.icon}`" style="font-size:3rem;"></span> -->
                          <div class="svg-wrap">
                            <div class="mask" v-if="!item.isEdit">
                              <el-button
                                @click="commandAlgLib(item)"
                                type="primary"
                                class="bot-btn"
                              >编辑名称</el-button>
                            </div>
                            <!-- <svg class="icon" aria-hidden="true" style="font-size:7rem;">
                              <use :xlink:href="`#${item.icon}`" />
                            </svg>-->
                            <img
                              class="baseImg"
                              :src="`data:image/png;base64,${item.iconBlob}`"
                              alt
                            />
                          </div>
                          <div class="alg-name">
                            <div style="padding:0px 10px 0px 10px;">
                              <span v-if="!item.isEdit">{{ item.sdk_name }}</span>
                            <div style="padding: 0px 10px 0px 10px">
                              <span v-if="!item.isEdit">
                                {{
                                item.sdk_name
                                }}
                              </span>
                              <el-input
                                size="small"
@@ -93,29 +90,55 @@
                        </div>
                      </div>
                    </div>
                    <!-- </draggable> -->
                    <div class="wrap-box" v-for="(item) in notInstalledList" :key="item.id">
                    <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">
                          <el-button type="primary" class="bot-btn" @click="donwload(item)">安装</el-button>
                          <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">
                          <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="`data:image/png;base64,${item.iconBlob}`"
                              :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 style="padding: 0px 10px 0px 10px">
                              <span class="list-choose-item-left-uninstal">
                                {{
                                item.sdk_name
                                }}
                              </span>
                            </div>
                          </div>
                        </div>
@@ -124,25 +147,117 @@
                  </div>
                  <p class="src-title">应用软件</p>
                  <div class="flex-list">
                    <div class="wrap-box" v-for="(item) in mockOtherInstalledList" :key="item.id">
                    <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">
                            <div class="mask" v-if="!item.isEdit">
                              <el-button
                                @click="commandAlgLib(item)"
                                type="primary"
                                class="bot-btn"
                              >编辑名称</el-button>
                          <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 class="baseImg" :src="`${item.iconBlob}`" alt />
                            <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 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"
@@ -160,7 +275,7 @@
              <el-tab-pane
                label="离线升级/安装"
                name="upgradeOrInstallation"
                v-show="activeName==='upgradeOrInstallation'"
                v-if="isShow('algorithmManage:insOffLine')"
              >
                <div class="tab-content">
                  <div class="action-bar">
@@ -176,29 +291,62 @@
                  </div>
                </div>
              </el-tab-pane>
              <el-tab-pane label="应用中心" name="algorithmMall" v-show="activeName==='algorithmMall'">
              <el-tab-pane label="应用中心" name="algorithmMall" v-if="isShow('algorithmManage:buy')">
                <div class="tab-content">
                  <p class="src-title">算法软件</p>
                  <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="actSdk(item.id)">
                            <!-- <div class="mask" @click="actSdkOrApp(item.id)">
                              <span
                                class="iconfont iconyunxiazai"
                                style="color:#ff6a00;font-size:20px;position:absolute;top:45%;left:45%"
                                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}`"
                              :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 style="padding: 0px 10px 0px 10px">
                              <span v-if="!item.isEdit">
                                {{
                                item.sdk_name
                                }}
                              </span>
                              <el-input
                                size="small"
                                v-model="item.sdk_name"
@@ -215,20 +363,191 @@
                  </div>
                  <p class="src-title">应用软件</p>
                  <div class="app-list flex-list">
                    <div class="wrap-box" v-for="item in mockApps" :key="item.id">
                    <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" ></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,'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}`"
                              :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 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"
@@ -243,1058 +562,1085 @@
                      </div>
                    </div>
                  </div>
                </div>
                <el-drawer title="下载" :visible.sync="actDrawerShow" :direction="direction">
                  <div class="drawer-content">
                    <div class="current-step">
                      <el-steps align-center :active="actStep" finish-status="success">
                        <el-step title="添加激活码"></el-step>
                        <el-step title="激活成功"></el-step>
                      </el-steps>
                    </div>
                    <div v-if="actStep==0">
                      <div class="act-code">
                        <p>使用激活码将新的算法添加到您的账户</p>
                        <el-input
                          v-model="activeCode"
                          placeholder="00000-00000-00000-00000-00000"
                          @blur="getCodeDetail"
                        ></el-input>
                      </div>
                      <div class="text-right">
                        <el-button type="primary" @click="actived">激活</el-button>
                      </div>
                    </div>
                    <div v-else-if="actStep==1">
                      <ul class="desc">
                        <li>
                          <label>激活码:</label>
                          <span>{{activedSdk.activateCode}}</span>
                        </li>
                        <li>
                          <label>产品名称:</label>
                          <span>{{activedSdk.productName}}</span>
                        </li>
                        <li>
                          <label>配置详情:</label>
                          <span>{{activedSdk.setting}}</span>
                        </li>
                        <li>
                          <label>服务到期日:</label>
                          <span>{{activedSdk.expireTime}}</span>
                        </li>
                        <li>
                          <label>许可证:</label>
                          <span>{{activedSdk.licence}}</span>
                        </li>
                        <!-- <li>
                          <label>设备ID:</label>
                          <span>3342-235f-ret55-fdsg</span>
                        </li>-->
                      </ul>
                      <div class="text-right">
                        <el-button type="primary" @click="checkMyAlgorith">确定</el-button>
                        <p class="tip">提示:请在“我的算法”中查看并安装算法</p>
                      </div>
                    </div>
                  </div>
                </el-drawer>
              </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>&#60;</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,
  findAll,
  addTaskSdk,
  delTaskSdk,
  deleteTask,
  updateTaskStatus,
  updateTaskName,
  getSdkArgs,
  saveTaskSdkRule,
  addTask,
  getRulesByTaskSdk,
  deleteTaskSdkRule,
  findByType,
  getTagList,
  downloadSdk,
  installSdk
  installSdk,
  getInstallInfo,
  removeSdk,
} from "./api";
import { getUnActivedSdk, actPageAlg } from "@/api/app";
import {
  getApps,
  installApp,
  getAppDetail,
  removeApp,
  getUnActivedSdk,
  actPageAlg,
  getUnActivedApp,
  actApp,
} from "@/api/app";
import bus from "@/plugin/bus";
import FileUploader from "@/components/subComponents/FileUpload/index";
import TaskManage from "@/Pool/TaskMange";
import VideoManageData from "@/Pool/VideoManageData";
export default {
  name: "algorithmManage",
  props: {},
  components: {
    FileUploader
    FileUploader,
  },
  computed: {
    notInstalledList () {
      return this.TaskMange.list1.filter(sdk => {
        return sdk.installed === false;
      });
    updateNum() {
      return this.hasNewVersionApp.length + this.hasNewVersionSdk.length;
    },
    installedList () {
      return this.TaskMange.list1.filter(sdk => {
        return sdk.installed === true;
      });
    },
    ungradeList () {
      // 升级处理会导致重复的key,需要修改
      return [];
      return this.TaskMange.list1.filter(sdk => {
        return sdk.isUpgrade === true;
      });
    },
    // 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 () {
  data() {
    return {
      TaskMange: new TaskManage,
      VideoManageData: new VideoManageData,
      sdkList: [],
      installedList: [],
      hasNewVersionSdk: [],
      hasNewVersionApp: [],
      notInstalledList: [],
      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
      activeName: "myAlgorithm",
      patchUpdateStatus: "",
      dragging: false,
      list1: [
        {
          sdk_name: "人脸提取"
        }
      ],
      list2: [
        {
          id: "001",
          name: "任务1",
          child: [
            {
              id: "1",
              sdk_name: "人脸检测",
              isSelect: false
            },
            {
              id: "2",
              sdk_name: "人脸对比",
              isSelect: false
            }
          ],
          isSetting: false,
          isShowSetAlgo: false
        }
      ],
      argsList: [],
      baseObject: {
        id: "",
        algoId: "",
        options1: [],
        options2: [],
        options3: [],
        value1: "",
        value2: "",
        value3: "",
        unit: ""
      },
      currentAlgoId: "",
      currentTaskId: "",
      isSuperUser: false,
      downloadItem: "",
      downloading: false,
      sceneDialogVisible: false,
      dialogTitle: '',
      direction: "rtl",
      actDrawerShow: false,
      actStep: 0,
      showActivateSuccess: false,
      activeCode: "",
      sceneTemplates: [],
      appSceneForm: {
        id: "",
        name: "",
        desc: "",
        rules: "",
        txt: ""
      },
      sceneSdks: [],
      sceneRuleList: "",
      isInstall: false,
      installDialogVisible: false,
      installPackage: {},
      installAppPackage: null,
      installSdkPackage: null,
      isActive: true,
      isDefaultApp: false,
      installPercentage: 0,
      unActivedSDKList: [],
      actSdkId: '',
      activedSdk: {
        activateCode: '',
        productName: '',
        setting: '',
        expireTime: '',
        licence: '',
        devIds: ''
      unActivedAppList: [],
      isSDKDialog: true,
      //actSdkId: '',
      actType: "",
      actId: "",
      activedSdkOrApp: {
        activateCode: "",
        productName: "",
        setting: "",
        expireTime: "",
        licence: "",
        devIds: "",
      },
      mockApps:[
        {
          sdk_name:'督查报表',
          iconBlob:'data:image/png;base64,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',
          isEdit:false,
          id: 'dcbb'
        },
        {
          sdk_name:'人员轨迹',
          iconBlob:'data:image/png;base64,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HdHVq1OYeoPx/N9+o2mogGmdO0ttlwE9IbOEWUaC2lgd7uy8h1ZRH7p7V2qztEVvHICIJc/mQ2xsXBJP8AozZ/KfZEkVvbwMeegGcoSYnNOfK9PfK1Yk9lL/+KjX5Mn6JuWmdw7gQ3qbu22JOG1pqQ6ltRzj70/j0BAtmzSR2i4D+ZRM6S2kCDe5l4eHrhV48ht67wBExJVBqepJlV4FeHgwcBh1vb3REiuQVqqU1PYZkAixXPtRHoMhvr7FHZ86pioXLJA6RDevKDQO4EOyNOrM1H58ZOFCTCRfUg0eLLVdBvKIueyOX6OiCGo/2U0Pjyjz1Wt6x9+7J7VZeU2hdQAfYufunh65smtXPotHvHz2bFTAQl7SpYvUdhnQEZkltISzwht6MGOGppV09A2DA8gG274eA8J9LSzoD2E4LfL0NEQgFjAyd+3pLX0j1J47t6Af1+UWBgfwmWRlxwWpX6gtJ01CPzpDpwcM+P9lxA3kOeJuvQqv4H/gADVFMHf55Zcon4C1DnGRkVKbl98xOAANUUx0exa2uEaNjOuYKaMBAxBHi/iFuzvMMQ3mNWtKbZ/ekllHAcE0QUjYuFG4LhvDq9esibm5wrbP1Fu3pDavoGFwADpCPGUosS1p26sT3boRYRX6OzuzAicQ5eBAfTAU9w3imjmgHE4+f86dMYliw8KopayTMCk09E2v8pfL9DtwILdksgsbBgeQy2SVwLpTsWvRMZaW6IKf+VqvXtSTr+N1r15YiUk437ix1HZKBf+C6zh3+TKq4Qxu7d5NfXkA/7J7d/HiT5+m7TlypLAcx0mFwQFIjK3SXanqX7kyBgpt1Ms6daII2RwEdOqE4jyOv2rXDml0h+Y0bYrliOXlZcpIbe9nMx5WNP7lS66C7Vzl4kW6D1OyPHOG2+IkTz961Eht8hV9eexYZCW/SPukx4+lNrewYnAABYSePJp3ce3asl9lbY2uN2pEHagMbtepI2vF0+FSu7YQTH+jTc2adArH2a9iRe6G2jhcvjx5oyriypfHF7iA8sWL4xwGwsLY+KMAKLHsdEv8iiMZGXiO5niWksJeeAjzZ89oP+7C8tkzhLIj3j1+TK/wlrrdv88LZIv4wZ07XJFHIu7OHWylMOOHV69G7/TfIu//559Sj5uB/+b/AHinCN7ZH04nAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA5LTE2VDE4OjEzOjI4KzA4OjAwXyNupQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOS0xNlQxODoxMzoyOCswODowMC5+1hkAAABSdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX21keGw5MTJpdmsvd29kZXdlbnRpZ2Vuem9uZy5zdmc2Qz5CAAAAAElFTkSuQmCC',
          isEdit:false,
          id: 'rygj'
        },
        {
          sdk_name:'以图搜图',
          iconBlob:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAEAYAAACTrr2IAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAJhVJREFUeNrtnXdgTff7x9/PudmkYjZGJIhRezfITUSWTVVQQsi2asaoXTVjr5BE0ti1qkWQxMigsQVFVUvsFUI0kXHP8/uDq9+fNiWcm5PLef3FPed8Ps/zyT3v+5nPAygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKHxgUEEfcORBm+//ULy4OIKrZ612dMTPcEbNVq3QgGvjXpUqPAqT6KG1Ne3D1xxpZCSbZzOxBuF//YUQOMEnJ6fQ6m2IwfRzRgYyeCR3zsuTzX+Ff4VcyQz3srLYiOrgp8xMbopOCLh2jQfgOC84ezbPNPe5WOfUqaO9w89X9b93T257dd4eb7rBkQP4KtvYiKaClTBh7FhU5sUY078/PkUsnpiYyO2AgoKUcDRaYp1GQy6Ixp9xcejNX9GIkJDEYau6VK77009y2yc1+QqA+vOBcak+np6oxhrSrFiBG/iRp5mby22wgoIccG9UwtnNm1WBxhPEjgEB8bSYqlB6utx2vS//EACHEgFfX8vy8eH6lEP3w8PlNlBBoUhxBAMQnpCQtjEt+NlFV9cLPbZsrbO1EIeYEiNo/6E+NjAttXzLllyVVtGwlSvlNkxBoUjSEpHwdXAonVYqvPjVKVPkNud9EYApzCwIbCaKmLBoEYpjACYYGMhtmIJCUYbbUA68hg1zZH+/235lyshtz7siqBff/fnGr5060UCahE7NmsltkIKCPkC+mIwuxYqJdYQzeTX69pXbnndFQAtKwgEvL7kNUVDQR3gjRuOQi4vcdrwrAm4hEOEdOshtiIKCPkLtsIZrODhoh9Jy21NQBCxAMO+UccOOgoI+Uw1WGF68uHr4nYDr7p9+Krc5BaXwJvtqYRPSs7LQmTKRd/IkzMRUlL5zB/2oOvk+eYKTvINXi+Kr+3vhAbmZmWESWvM+Y2O5G0pBTzCnBfSzgQFGYyOfrFaNd2MmatSpQ+1xBJ4qlc7qbSjcEtytrAAAMXfuyN0Mb4vuBWAS3ULrBQuM52g88mK//TauU2hYNdsnTwCU/3/3WcIF1v/y/CEANnI3k4K+0uL3wXv/zLS2Vn0t7jYYvmABLeGveEK3blLXw0MAzcWKFeX2t6DobMzCa1GPgtavT3QL2Wl9ddSouP2vXnwFhULjl8bLN1Q1S00tv/mhm9WqHj1gySEYFR8vdT1Uh0YQFysmt78FRXcC0IRPwnrRIrkdVFAAgC1btmwh0mjoMY7y7LlzJa+gBbfADf07GyO9AIxEEHXKyTF4aLnaas6ZM3I7qKDwv+RE5h1W/ZScLHnB3/MANDQ1ldu/giK9AFzEdNRIT4+naUSCchxWoWiRbLV6lNWoR48wAWeQ+D+Tzu8Jb6cT+EwRAKAlinHv3Fy5HVNQ+E/2oiVt0mikKo5+Rlds1L/VKukFIJaDUZUKHGhEQaFQaYsj3Eu6ZUGeznXhqH/fe+mXAePoB1SRryEc2ZG92MREHGGy3Tigdm04sjN7V6kizOQQ9BZFHBOA6RkZeXGaODp0+fJh17j9oWHXr8tlr4JMzEBDqCXcuTeDmkCtCAA4DvOoKhF0HDrk1YtuZ7TYsF737mRDcVjj5yc+R3ksadWKTnF9UVSpcAqrEA6wKQFtADgycBBQQVAxAAcj1we+/W7exC6EYNOuXeRKN4X+ixfHU0xoaOilS7r1QqHw0W7ZvTdQStmnWVwfaiLMltu/gqF3e5cd6rhO9N7v5iaKxsYG1y5eJGOKht3atbiDHKxwcCB31Me5AnTt7KgPjCpVwneUhH6BgTwJNUSfCxccrrl5+nbassU+o53tgBlly8rtt4I0ODIAXezZnyHUp1b61wOQviH2Y5P0QwAihwjXPL8OwcEoTceEjfv2kRNa0wwbG8ntT0AMwojQD/fxaffudFHzjermuXOO7D7Lb73+nvpSeMGDLRc8LvTQgQDM4kZQBACgC5gPG6kagkg93PW570/Ll+N7as/lR48u7Aai0diE3E8/FdN5M0/YtUvdwWWa7zN398K2Q0EaynqYbTHbogMBeMZRPFe6ZcXCQgc9AF7Apu8vAA5NXQf4Thw0iE5RZ+wcOFCW1vkfqAvKwsXYmKoLbfjpjz+qh7tv8/dv3FhuuxQKxrOmxgHG/tILAD9DJGYqAgDsp/XvMwRwZDd/f/9atWBP3jwoOFjW1vk3TmE6TTY1pe78jTgjIqJJ4yaN/f0MDeU2S+HtKH7CwMXARXoBoDxhC75VBAB8AAvfRwDEHZgrXpw8Wfuiyds8/8E3sMb4Bg2KbS81iDcNHSq3OQpvh6FLXmxGE+mPBfN9jqIQRQBA57DuXQSgjUX7bj6W1tY0C8M42sND7oZ5W/g4mrHhoEHAFJ6ihxFhPjZy40xDhWrST9bRND6EBGa5/SsoReYLm3c4dwrldOkCE9yhEfoTlZiWUhC6Vaumrnr4l5u9nJzktkdBHvi6cJCnKT0A4F2HANtQlTc4OMjdIO8K/abqgeatWslth8J/Y+iS5S/+If0vNRljNSYqAgAc4EX0LsuAMfQtLOvXl7tB3plZ4kXU0WP7PxKerjT+QlykAwEoyat4rCIA4IO09p32AVjiB/IsXlzuBnlnv9V0kiL1LyTUx4ah3V8HNQ2lFwC+gBXCHkUAQKexGNbvIADHsRTTi/Cs/5u4y09Q//lzuc1Q+G8MHpo0K2Wug8m6MSjHa/XvGHyRmQTEFvTC3Fu35DbjXSE38kbIs2dy26Hw3xidzRgiWuigB9CUv4d/drbc/hUU6QXgIL5/pyGAJ0+H/2+/yd0g7wpP5wVQHzsmtx0K/80jb9Ou4lYdzAHUEOrSEf3LEiy9ABzCEi5ZcAHgRdQFTxMT5W6Qd2YKLeKD0kebVZAWwx3F+mtq6aAHMFQMolRFAIBgNELrgm+I0YzjTINaGzbADgPwl/6MpXgoB2P7H38IFtmnKt05ckRuexT+m5JOeenPr0o/WSeYYrwmWBkCANPQCI4FF4AjZ2MbrHS/fx+eMETtH36Qu2HeFvIFcGTWrHiKp2mkBEEt6qTOvBuRc1f6HoBI+FT1S2am3P4VFOkFYA4aksO7b4nlCCLhxpgxHAkbXC26iUR4Gr5BRnLyX9UeDRDmr1kjtz0Kb0dZj9pbam8WRdznQdR69240wXz4HT2K8RxCAampUGMgUgsuEDQZVpirfwJAanVgYOo7OJwvzxCJGXl5iadXZluHvvspOfUNt+5+rn360CrY8Xdr174K1CE3trwO6x4/NthuGMgWjRodSI/evvpuaqrcZilIgyP7+932K1NGc1LVVHPS3p7sMV1s6+4OQ/EozerVCw1pOl+zsHj9OWYioGnTpKSQEGvrkyfl9uNt0UFkFDTCe/QAtCRaxWwNi12/nm1pESd9/bUsrfO/BOIxLB494kDaRRM7dlRe/A+TeAoNqxD28GFS05AAq1M7diQ+D7lpPXPgwNwLZqk0r0IF7KcfaXz//qjIgRhx+bL2OVWiRiNW/usvue0vKDqIjSZttNXE/vturh61bBnH4Sh37d8f99AFOwpxvT0TnWF58aJmqMAitWyZ2DzGO2yiMtn3sZFstbCl1aisrESjkHuVN0RFZV7m5Q/G161LWXSFVUOGPN8oHuGwx4/ltrOgSD8EeEli4sqVlSu/EAIi6cpvVbptU++gmjVVUzUThe/mz8c9uoIz7dtLNkR4KTAcjRQ0mDEj7WSJR09KLlhwoceWrVu26t8yj4LCf6EzAbC0TEurXNnAQJuUUVcOtLrndsrbrEEDVRfqTNMHDICjuJtuODnBBUBc3bqYTkGw+5ceiRUOwOnBA9zDAup3+jSX5ER8sXGjeMB0mKbKtm2H0362jwjOyNCV3QpvhzbikklqWSHPompV1R44qrI/+YSacRl8XqIEmovAJHNz/EGZbPbsmWYrP+bIzEwar3pIAzIyhOSsjUaT//wznuJpRQ9lp+br6EwAMv8SNQ/uGxmdPBUa1rRZ4a/ru6a4pvQtV6yYZr5mfrFmFhaaKMMDuW1MTQ288trkJj5+vH/N/jVrdqSlFbZdCv+fF2HXa9cWnPLUqiwnJ2ylXKS0bo0NGILs+vWRjqsoXaUKkhGJYu8Rei2Z1yPn5k2+R26ocPEipvFwpCYmcmcc55EHDmSNfnREFXrs2MlTJ0+FhunPPpT3RWcCUPyOYeecYBOTPVeWtq++TP82SChIi/qYW8SAClZWtBJeBtS7Ny5jnLjbxwcCUmhZ9epy2/dq2TmRq9DVn38WvARg+po18bRvfFif/ftf3qV3EX/ehM4EIHeDaT9hq5mZdvJEbkcVChdHdvXw696woRiFxjg1ciR60mIe1rt3gRO3yE0avubF585hHCrQqXnzyDO7UUX7DRs+lI1fOjsNaP7oYVfDukqMvI8FR3av5DPf1tZhqesO3+xdu9iRnrDF6dMUQQe5Td++evfiaymNJTSsXj2EYRyioqLEB8ZOtwzPndNmqJLbvPdFZy9oZhtDr/QbigB8qGgn59Tsyj48dSo35H6Ue+4cttAKDO7QQW77dAV1hxH616qlzVCl3u92xPfm5s2O3H6zF1taym1fQdHZC5qbXMxJdaYI7NxTkBTtWL7YlNIeYt2DB8mR3MlvyhSUwAlcMTGR277ChqZhKqZ6eLBnXm/DDWfPvugJtW0rt11vi84EwNRWaGewVOkBfCioq7oc8enp7EwruaPqUUoK5uMgzilBUF9xA21wsGxZjhN3U+Tu3ererik+w8aPl9usN6GzF9TAK++Ykbkejvk+Epo08fe/7Wdm9qb77E+4+fs07tqVzIVd1GjXLlwhT3iWLCm3/UWWl/tO6CYF0V8zZzq4uN337bZsWVHNG6Ezg/KicsPpK2UIUJRgJlJbBPRIHTN0qEk0lct+kP/ym8Nat1O+if36CY95MOVs2/axdvHfmxx4otTgwQ7+vwTcOhkR8eLDovNe6FCRDFyzQ/UnwceHinq4v3+qW/ny6tBAs+upMTG4BH8Mrlv38KervquyIyXl9fvto9zi/Mw7dsRSLOaGq1fnu5NSoWBcwjWs9PJ60SNYulRuc7To7AXNK6PZqxpTqdKL/929K7ejHxv2rQYGpl5zccEv/DlKrlmDq3iMdBMT/sooxyiud+9/3G/v5ubr26SJcBrG4rebN8ueoek3zMb5hw8xmKvz1Ph4PKIzqH/6NJ3iaZh4+TLiBWfB+fFjPk4PcfTJE2ohjtAYFy+uicAl1cpixQRHvgbUqIEJ9IyL167Nq7AEXzs6UnvY4g9bW9n8etkjUFu4BflqfvstMT0mOFwlnyDobCMQnWUjLufrm/Bk1RIb09Wr5XLwY6H2Zo/uv3Y3Miq1rfRt84EzZ1I1hLDhyJFIRAisiXgaYnBg7NikNiv/tB4wd672ORdnF2d/vxIlsgNpgbjt5EltqrNCM/wJmsL2+XPURTksXr8eK+kXREZFJZjv+yG8bVLSi5uk+346uLg2DEiuXp1bw0Uc6ulJZ2gzZ/n54T5qwa58+ULzexyvhWdODt8XmvBJtfrFqdfCDyqrMwHg9dwfW2NikiqvsrMe5e5e2I59LDhyAF9lGxvNYYpROW/YQOPxI0e2aPHqhkTUweqHD8XSOdezKletejgtIriW79+HnBzGu1n6Lt60CYdRH+d69tS5wc9Rnhfm5fEyONKPK1YIzQyK5/adNSueontEUeH3FB3Zkb3YxESMMrEyWODrS0Zcnu5Mm4aVKIn0UqV0boARSuLR1avPQ1Qnsyo2bHis+p4r65c+fVpY/utubFeSLuO5s7P684FxN5WUWZKjvhFYLtW8Tx8xnCqonFJS/vHia3GmUbg6d+7rL/6rsX5hvfgtOBjFz55lErKpRZMmic1jvMP7DRsm14uvJZ7iKYqeP9fGnaCvso8JT2rWRCucRb1CiE2Zg8coVaWKSV/xuYnNt98Wtv86EwBqjyPwVKk4jheKxgsXAlOYi+AyiL7g4uzv98eVEiXsrwUuv95j3Tr0RjecX7cOa9CFoz755B8PGPFMTHzwwGTBMwtjzxUrtB/b3bC7MeKIqamwFmHsumSJzg2vBRsERkXlDMkoZd7Dzi7x6N5N4efPnpW7PfMjnuIpNOzhw4RZMXfDh/XqhXlIJLPBg7U9F51VLLIz/AcP1p6hKCx/df5CUntY8Y9t2qg/v3v9xhezZxeWYx8K9gcCq6ZGtmr1fJlQ0rD9mTPUF+c4uE+fNz54VbCFRXh4bIO19y3d/w5VZdj/kyoZV4cM0f7y6MpuHkyxmD53bkJoTGh40wEDkq2SrRa21L9DYQnNY7LClqxYQc94JI516/ZqzkJqXk66siup8eOcOYXlX+H9IhvRLF4cFGQ/IvBG6pFFizw8PDyYlY1Cr+PIXnyVTUwcrAJmpabOno1mmIrb8fHkj6cca2Pzpuc5Gi2xTqMRV2m+zBu2cuXf5b4Y61JPDETW8OG6sp/DUIfbrFiR2HMfh5cfO/blp3p/jDb+QmyD1c47d6KuOJKa9eypsx5BDnbxADc3h2NtR/l93ayZrv0q9C45ncAMVBw27M7A0ievf799uyMP46v8zyirHxutYv39rlextxejTDuq+p05wzaUCowdqx1KvW05NIlbIn7nzsOuoWHVbK9ff3XB13i3QeaAAViH35BcoYLkDhihI0XGxCTWbLGg0ldDh8rdnroiYX1cmTDnn3/mjTCmrpMm6aoehliHV+t+K7FsY3KaAje06dxZcyl7rKrm6dMO1wI6XFvwL5NYHyh2N3zm35hfqpT93IDk6yHLlgka4RxPj4/HaljxdzVrvmu59ECoTQ0iI1//nPtgCQ3z8ZHckZeh1fLus6Mqum9fYBpNI/1Lk11QEqu1WFUxbu5c9uRgDo6Lk7p8GoJ4vtupU8v6rimB+8qV05Ufsk/Kabu2YmnqSVmJidoXQjvpJbd9UqHt2ttHBXS4fnLkSMMhhsli9ytXaCd9z+0HD37vaMr98BN5PX1K6zKzNXNjYrQfa0NuYSoANGkitV8ciWJcIijoVWanj4YXQif4CR0QMXCg5HMDL+cEDMrBS3Poq6905YXsAqBF29XVvhDZoDkG037/Xe080Ci1b1CQa0rfcnf3FSsmt51vy6tZ+wOBVVMjx4zRPDOtqypz9SqFkxWXmT8fj1AakO5QDbtiIsrt3BlPUVSF/v4iqiw0h1R3e/WS3MGZSMWslJREo5gnqzt+vJmR4mnfzdWjrlyhe/gVQ0JCJK/gOKLYS3fLtEVGAP5BDn2D78qWRQ5747u5c7PSihXPvp2aqu4QuDD1qwUL7DMCIlJn1K4tt5lNGvv7nThuaKjdeqv+PrBD6vM1a7K9hU8Nfr19+8VQZ84cag81n9JdwAhhEQ8Xh2/f/vrn7Al3rHF2lro+/pI3023tqo7+T/K9L3m54mpx2rx5/BMeIE7CGJg1aQFXbNas+e/tbPsM/Zfl3vdEZzsBCwueCC/66tIlmswVUG7nTrIVqqN6UhKX1fTnlOPHExeFhlrH3LnzruW3sx0a/fsQY+MMy7ydRkF168JWHCZU/fxzekK+4pdqNeL4B9rStm1+KaN0zgScQaIo5tbJ9RDulS2bbLV6lNWoR48c2ZEHbS5enMcab8r58dGj946qq23vFWiFSWlpxbuq1pr+WrHinit7rixtrwR91eJQw3Web+S2bbCkGBzu1k2qckUfjKEfOnVK8opxCcvYtUuqcvX+tB59hyjeWKsWjAhArVp8nb2BoCBcf9G5UZsH3Lpuk56OibQXo1NTURJDefCDB2iIwfRzRgYyeCR3zsvj6kjFthIlKEVwQGszM4zlBgi3tn62IPdb2FWsSDPQEBAE/EGLxD8BAHUBAA1pOgfL2AAzcROx588nJ6weZRX16NHfF0yQ7dG0KZI5kmLe/8V/1d63mVB9y5Y9V/ZcWZqjvPivw3PIlz7bsIEWIoYlFADhay7Lx+3sAAC1FAF4e7S/zLsAwMICQD8AwFpkcBcAoGkAQADQHQDYGwBQGsA4ADPkduAN2JAlpcTHIwE3//djriauxOCaNVFJ4qPn0UIHvhYbC2AypF9M1HuErtklcj7fv19sa3zW8KhGI1kw1BQKRlDNmrCR2F55mklBMsJxA7X/mY2WMmkvzX335cT8oIWqP/LKK7kR8+PF2YL0dGqKcPa9cEGygjugF2+S/u+pCICeI46CuWb9b7+9/jmruB8bVqwoWUWpGIwO6elyH97RF3gJStHjS5ckK/AZNBRjZSW1nYoA6DmaMTkDDRb8naZaCyfTRtw0N5esol5sg/j/2Vmo8J/Q1xyNbRK216fYzi7Fi0ttpyIAesqLAB9padpZ/3/ccAaLcFdCAWhJ0aiiJEt9a74gC9hJ2F4vNwZpT3NKVawiAHoKXcdndODhw3yvb4U7tZfw+HV3DsTeD3+Lr1TwKKwnL+mzYhtXMq6UfVO6Q3SKAOgr1riLYo8f53v9FgLomYTpsK3oNryk74J+qAjV0JENJNy4M4mDkSyKL9Kc/328+73tlKV1FN6fU9jDZ9LT873uwAPE3RJ2QdM4Dw0LMWaensOH0AA9JWyvdGqP/VpBl27jniIAego3gh0CcnLyvd6TJuPRvXuSVdiAgjDP0lIbRFRu/4s87myMMAmX7X7HNvSVfvVFEQA9hU4jGauMjPK9nsf9acg/lwffl9zTQkvxl+bN5fa/qKINvIJy9AsG1asnVbn8BXbAX/q/pyIAegqX4fNU1dg43+tjeAeuS/+F4WJci0OkP1z0wVDaeLJhPbVa6kxK1J0NcOufy73viyIA+ko1ysXd/L9gvMlwrWbxqVNwgBv8pBsz8jUagEra46lFJ8VVUYF30Cws7dFD8nIfwoNanzghdbmKAOgpdAfgCflHikky33MlcsKDB8hlV2w8d06yep3QmmbY2DiUcE3xveTkJHc7FBVale6c5B1kbs4V2RvfeXhIVvBLATf8SZPFfQ4elNpuRQD0FG6F2dStUqU3BleNFzqwlfRfHDSjeKqjDfqpoLqYtYl6DBxIA3ANVSScJO2MSRh+4cIBuwN24eclnNR9iSIAegr1RE0+a2x8f3Np3xt3P/ss3/t+0dRUXdq6VXIDtNFrS7im+F5q00bu9pAL537O/fp1LV0a9cibhgYFSV0+N+NMPqKDv99LFAHQczRq2sE5LVvmdz2e4vaHhh0+jC7whveff0pdP/9Ow1B3+fJXs98fGbkaVWOjo3PmoCbGoW6ZMpIV/LLrL0CwwoJ163RlvyIAeg59wdPQ84sv/vsuZr7B2Vj6/feS198dRuhfqxbHGk03NF64UO72KCzsM9wsfRd3744biEYHHURbnsM+mJqUpI05qCs/FAHQd25gNpVxdra3HzgwNTX/IKNGj8T9OVkrVuAeumCHhFuEtXxHSegXGOhQ1TXEZ1BAgNzNoiscfnK+7+PcqJGwFyr00l3Wax4sHBB36j5DkCIA+s5JZPJyQ0N044a40LFjfrftX7N/zZodaWkYywH0+d8Zg6SGf6VpVHP5ckd3VxPfrboLZ13YaMOrczXhW4qIjcVS1MEE6YN04iYWwuX06cRF+76MMIiO1rVfigB8INAyXED0kCFvuk/0MKiV13LuXNjyOqz7j8NE72rHyxBYPBpHMXXdOgcX14Z+44cNk7t93hWHDPeevnvVauGA5g/VsePHaRBdxvTSpXVVH38mbkVHbUYg3QfrVQTgQ6EisjG6eXOHEoH7rmXlPyuv3R/ANYVxuPHNNzqzZzoFwU4QkEPl+MGiRQ7j3Sx9F2/a9GKysOimgvPw8PDw8FCpHLzdNH4Vx47lwzwJow8dwny4oqyZmc4qduFt3H3btsTdcVPCi+/bV1j+KgLwgcGfw0Yo/eYXO3Gs3eqKZUJDeRq+QUZyss4NO4z6ONezp3jcONJw0KVL6hy3Ej67vLy0L5zc7WZ/wHWIz/FWre5VTF/1yeJjx3AF7bjd7Nk0EyNhp7u09hwJG1x98oTb0hbRe8SIwvZb7/MCKPw7YgKHiJWdnA7TKqpChw7ld58ju3MA29iwj/hAY3rqFK6QJzyly1j0ZkPRgIf8/jvVhCOqL1yo+c0wxGj0pk1JSbt3h4RIP0Spvdmju0d3I6PSd55mlrBp145K8XfoMnQowjAOUTKccWiM51Rq/fqERTEJYXM9PQu7ekUAPlQqciBGXL5c/ITR7ZwK9evvubK0ffVl+cfxd2zmOsuv6hdfsDsZ8sZt25CAGIQV/l7//5dZp1dCAgbz95x18KCwXuiAyqdPa9R5G8Xuly8DJrNNZj9+rBUKbSIUcYTJ9rw4c3OeLgZwgxo1VMPpe7F/7dq8l7Nh0Lo176PzdNfZmQbhsC7H8m/08+Ubp21hNsQBOI0Zk7g/Ji+8T3ChZZpQBOADhytjE+VMnJi0fmV65eoz3pjlQP29eyWf+UOGUATXpotLl8pt/0fDy40/bE4XUHXQoMSx+yLCy+putUaLMgfwgUNmAGdOmODgEpB8s1v16m+6P7H/vpurRy1bhv4cTXfmzZPb/o+Glz0uaiwOg9Py5Q4/uc3ycfb21nW1igB86FxCL1iYmnIL8tIs3LhRm+vwTY8leMcahO0OCoIt9tCecePkduOjQbt6Ysbt6V5YmGMX98U+ln376qo6RQA+Fg7BCWjS5FnLvMnGSW8/xkyIiFGF3ZozByEcjO3DhvE+nEU96aPdKrzGSyEQN/EsGh8ZqT7mFuFbTPo04YoAfGxc5ab809Ch6h8D/0it+eWXb/tYQp3YBuGPlizhPM4jA2dneKIm7G7fltudD51XuQXr4RvMXL9e/alril9Kr15Sla8IwMfKQ9hT+YiIVvcCJl7t2qDB2z6WZB77MGxwfLxB/bw+WNS4Ma9CY7TduVNudz50tEJAXnSBZ69Z49DH5aHf/s6d37dcAd/iOM0qhI0gCkWLNejCUZ98IizBN8LU6Gj1sYFpt6a/fe45bYCKxM9iZod379yZHnIwf9W5M4xQEo+uXpXbPZ2xX+YhUDIiUczQEH1Iw6otW+yj3OL8zPM/A/ImBLE2t8OakBDZHFKQlwQaiZIVKvBVHphXMzraxdnf748rBY9oE38htsFq5507H/qX0DwRatWCH2bDy8tLu9FHbjffmZenJ3keesFhyRLRybCJ4aUaNTAEvhwWHy+bXbOpL9YZGVFnBHHprVsdrd2q+v3crl1BiyHtrHDGutxuRvXPn6cg9Ie7ra1sjinIS1+sAcfFCX5Zf4nWnTrFUxRVoefP37U4R3bkKWxgoHlmXP7Wkq5d6Sb6o2K/fhSJBtjWtu2rX7QiAs9DL0w+cYKKcRM0XLtWDDD6xrDn2rWv70x0TXFN6VuuWLHspqhs3GTPHrSgnqioVstm+CjE4kFmJnXDDbFGx47xmphKEcFvDgX3aqeXQ51Bn1zf7+bGpcTebFt4hxEUiig5SMe3+/YVTzPsl2PapcubdhIWlBfHa8uWVXmKQ4WlbduKbcQK5OnkRDtpK/5s3Ro5eIxSVapI7lcgHsPi0SPc4nDcTUxEewDRBw5oHFQ+os++fYfT9p6ICH77cOraRCk5F2i4uC82FtVpKdyaNZPc7rflpRCwAxry0XbtEkvGnF59NyEhv9v/sdVT/XlA6vWuc+fCiGbxYuljnCnoGU14NPx27MhM4DkPZvTocfJUaFjTZrm5uq62+e/tbPsM/eQTU9vcZGOTGjV4maohWdaogc85TUi1sMBKPMM2c3M0Ql32s7DAHwhl/2fPcJ6HCkufPaNSQkk+8/SpZrV4jjr++afRr5pdHHLpkq6Ca2pPOfJBY3dDv7g4TAWAJk103U75MhS/YsbTp+JFjhYmurklTY5tEBp29Ojrt/3LXu8pzCwI9lH3hlz/ccUKCocGTT7cCC8Kb8lUngLesiUziCc/eNCnT2EJgb7hyI7s71emDNc13q1ZdOAASmMJDZMuQ1BB0Z42pDTBnOq4uiY03zs/bMnx49rrbzzsYV8mcOK1Dd7e2IwNlD13Lk2BG9rId4hCQWbu8yBqvXt3bpzZMxri4ZFstbCl1aisLLnNKmpohzjCRc0t1a6DBzEaatSpU0c2g1IxGB3S00UrLMduF5ekpJiY8PCTJ9/6tFer0t5Bl8LNzVVORrVN7Pz9uRJ60EgPD7SFM/o1a4YZaAi17s5NKxQxBqEqRR06JA7JeZBZoXPnw2kRwbV8JcxG/IGgHu6+zd+/fHkqxxXFa4cOYS8mo3KNGrIZZIUDcHrwgNaRJd9t2fK9j3tqg1FyI8SKlWvWFI5hpeBra8uG2IbJZmaCJTfnDHNz8S4dI3MDA/oGsRSQnc0z4cqrMjNfL4+3iaXps+fPqZvwkC/885eFw8VN1OT5c/IVevFJ3f3yCOf5C/5UFMV6tIPuP3ny6vNz3JXLlSgh1qUf6V4RELy9YnOst7BAW+EY+shwfLeTEE+9L1w4PG75xcpHfv1V7uYoqjhyO1vfxZUq8QLNd2gWH4+fEIGIqlVlM0iDETCOjlZyuykoFCJtLNp387G0ts7dkOtL4+PjaTYtwjlr60I35OX+Bvl/wRQUPiIOpEdvX303NVU05PnCeQcHHsfDUS81tdANacUeeJabq/QAFBRkxMHFtWFAcvXq6EFqzflDh7AOvyG5QgVd18vr8QmP37NH6QEoKMhIQlzsmVV2v/+OC6ITt3dx4XnoBUPp9ym8DlsgiXZFRCg9AAWFIoQju6Z4361bly1JI3Q9eFDqnIMchAgekJSU2KlFxUotHR2VHoCCQhEinmIbRFieP093eRZVcnV9tXX5fSmHS0i+c8ewr8HX+NLTE5hG00gUFQFQUCiCxFPslrCtZ87QV+IekdzdtTv6CloOR+MKql25QlvQVmjZpo12ElJ7XREABYUiTDzFlYkIPnFCqCrWRee2bbUbefJ9QHsq8DJMsWjhQtHaZI34qHHjeIoJDQ29dOn125U5AAUFPcLuhnsln/mlShmPQnWK69KFl4l1+NuyZak7LiHk6lWNaGRsZBwXp6vEKgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK+sL/Adce4ol6Z9ftAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA5LTE2VDE4OjEwOjE5KzA4OjAwnOzZ8QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOS0xNlQxODoxMDoxOSswODowMO2xYU0AAABMdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2R4djdsZm1ydG45L3lpdHVzb3V0dS5zdmefitqUAAAAAElFTkSuQmCC',
          isEdit:false,
          id: 'ytst'
        },
      ],
      mockOtherInstalledList: [
        {
          sdk_name: '热力图',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFkAAABZCAYAAABVC4ivAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGMjhBMDM2QzRFQjExRUE4RTM2OUEyRjdCNDdDNDRFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGMjhBMDM3QzRFQjExRUE4RTM2OUEyRjdCNDdDNDRFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkYyOEEwMzRDNEVCMTFFQThFMzY5QTJGN0I0N0M0NEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkYyOEEwMzVDNEVCMTFFQThFMzY5QTJGN0I0N0M0NEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4JksphAAAbH0lEQVR42uxdCVxT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'
          , isEdit: false,
          id: 'rlt',
        },
        {
          sdk_name: '摄像机区域管理',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NUM1MzkyQzVBMDExRUE5M0VCQjU5RUYyNDREREExIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NUM1MzkzQzVBMDExRUE5M0VCQjU5RUYyNDREREExIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODY1QzUzOTBDNUEwMTFFQTkzRUJCNTlFRjI0NEREQTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODY1QzUzOTFDNUEwMTFFQTkzRUJCNTlFRjI0NEREQTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5741nSAAAHMUlEQVR42uxdW2wU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'
          , isEdit: false,
          id: 'qy',
        },
        {
          sdk_name: '比对库管理',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABTCAYAAAABbiB5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzMDVBMzkxQzRFOTExRUE4Q0E4QjBEQzlFRjc3ODYxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzMDVBMzkyQzRFOTExRUE4Q0E4QjBEQzlFRjc3ODYxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTMwNUEzOEZDNEU5MTFFQThDQThCMERDOUVGNzc4NjEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTMwNUEzOTBDNEU5MTFFQThDQThCMERDOUVGNzc4NjEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz635kquAAAJG0lEQVR42uyde3BU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'
          , isEdit: false,
          id: 'bdk',
        },
        {
          sdk_name: '统计查询',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABaCAYAAAAxQ+F4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZFRTMxMkJBQzRFOTExRUFCOEVGRkI1NjAxQjc4RUREIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZFRTMxMkJCQzRFOTExRUFCOEVGRkI1NjAxQjc4RUREIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkVFMzEyQjhDNEU5MTFFQUI4RUZGQjU2MDFCNzhFREQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkVFMzEyQjlDNEU5MTFFQUI4RUZGQjU2MDFCNzhFREQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ygDZAAAAaXUlEQVR42uxdCVhT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'
          , isEdit: false,
          id: 'tj',
        },
        {
          sdk_name: 'GB28181配置',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAABTCAYAAADwZXv0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU5NkNDMEU5QzRFOTExRUFCQUJERUVCM0FEQUI5MTNDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjU5NkNDMEVBQzRFOTExRUFCQUJERUVCM0FEQUI5MTNDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTk2Q0MwRTdDNEU5MTFFQUJBQkRFRUIzQURBQjkxM0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTk2Q0MwRThDNEU5MTFFQUJBQkRFRUIzQURBQjkxM0MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fZXd1AAAPJklEQVR42uxdC1BT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'
          , isEdit: false,
          id: 'gb',
        },
        {
          sdk_name: '摄像机配置',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAABXCAYAAABr9DniAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFN0U1NUMxQzRFOTExRUFBNEZFRUVGN0NFRERBQ0JEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFN0U1NUMyQzRFOTExRUFBNEZFRUVGN0NFRERBQ0JEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU3RTU1QkZDNEU5MTFFQUE0RkVFRUY3Q0VEREFDQkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUU3RTU1QzBDNEU5MTFFQUE0RkVFRUY3Q0VEREFDQkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4sceRgAAATpUlEQVR42uxdB1hT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'
          , isEdit: false,
          id: 'cmr',
        },
        {
          sdk_name: '数据栈配置',
          iconBlob: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFUAAABeCAYAAABSMliZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjMwODczMEJEQzRFOTExRUFCMjRFQTNGQzdFMzZFREUyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjMwODczMEJFQzRFOTExRUFCMjRFQTNGQzdFMzZFREUyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzA4NzMwQkJDNEU5MTFFQUIyNEVBM0ZDN0UzNkVERTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzA4NzMwQkNDNEU5MTFFQUIyNEVBM0ZDN0UzNkVERTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bdJ5DAAASAElEQVR42uxdCVwT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'
          , isEdit: false,
          id: 'cmr',
        },
      ]
    }
  },
  watch: {
    list2: {
      handler (newVal, oldVal) {
        // window.console.log(newVal, oldVal, '监听list2')
        if (newVal !== oldVal) {
          // window.console.log(newVal, '监听list2')
          newVal.map((i, index) => {
            i.child.map(j => {
              this.$set(j, "parentId", i.id);
            });
          });
        }
      },
      deep: true
    }
      // 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.findAllSdk();
    this.findByType();
    this.getBaseList();
    this.findAll();
    this.getUser();
  mounted() {
    // 获取所有应用
    this.autoRefreshAppAndSdkState();
    this.getUnActivedList();
    // this.TaskMange.findAllSdk();
    // this.TaskMange.findByType();
    this.VideoManageData.init();
    this.getUnActivedAppList();
  },
  beforeDestroy() {
    this.autoRefresh = false;
  },
  methods: {
    actSdk (id) {
      this.actSdkId = id;
      this.actDrawerShow = true;
    isShow(authority) {
      return (
        this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
      );
    },
    getUnActivedList () {
      getUnActivedSdk().then(res => {
        if (res.code == 200) {
          debugger
          this.unActivedSDKList = res.data;
        }
      })
    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
    },
    installFormat (percentage) {
      return percentage === 100 ? '安装成功' : `${percentage}%`;
    },
    actived () {
      //this.activeCode
      this.actStep++
      actPageAlg(this.actSdkId, this.activeCode).then(res => {
        if (res.code == 200) {
          // this.activedSdk: {
          //   activateCode:'',
          //   productName:'',
          //   setting:'',
          //   expireTime:'',
          //   licence:'',
          //   devIds:''
          // },
          debugger
          this.activedSdk = res.data.successMsg
          this.actStep++
    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
          }
        }
      }).catch(e => {
        console.log(e)
      })
        this.needToUpgradeInWin = flag
        _this.productDetail.isUpgrade = flag
        _this.otherProducts = res.data.randoms;
      });
    },
    getCodeDetail () { },
    checkMyAlgorith () {
      this.actDrawerShow = false;
    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) {
    onFileUpload(file) {
      //this.patchUpdateStatus = `<span style="color:green">上传成功, 点击升级按钮开始安装</span>`;
      this.patchFile = { ...file };
      this.fileAdded = true;
      const h = this.$createElement;
      // this.$msgbox({
      //     title: '算法信息',
      //     message: h('div', null, [
      //       h('span', null, '算法名称: '),
      //       h('i', { style: 'color: teal' }, file.filename)
      //     ]),
      //     showCancelButton: true,
      //     confirmButtonText: '确定',
      //     cancelButtonText: '取消',
      //     beforeClose: (action, instance, done) => {
      //       if (action === 'confirm') {
      //         instance.confirmButtonLoading = true;
      //         instance.confirmButtonText = '执行中...';
      //         setTimeout(() => {
      //           done();
      //           setTimeout(() => {
      //             instance.confirmButtonLoading = false;
      //           }, 300);
      //         }, 3000);
      //       } else {
      //         done();
      //       }
      //     }
      //   }).then(action => {
      //     this.$message({
      //       type: 'info',
      //       message: 'action: ' + action
      //     });
      //   });
      this.$confirm('', '算法信息', {
        message: `<div class="installInfo">
                    <div><span>算法名称:</span><span>${file.filename}</span></div>
                    <div><span>安装版本:</span><span></span></div>
                    <div><span>更新内容:</span><span></span></div>
                    <p>确定安装此算法?</p>
                  </div>`,
        confirmButtonText: '安装',
        cancelButtonText: '取消',
        dangerouslyUseHTMLString: true,
        type: ''
      }).then(() => {
        this.isInstall = true;
        //安装
        installSdk(file).then(res => {
      //上传完成获取安装信息
      let _this = this;
      getInstallInfo(file)
        .then((res) => {
          _this.installFile = file;
          if (res.success) {
            debugger
            this.isInstall = false;
            //this.$refs['progressBar'].style.width = 100%
            //this.installPercentage = 100%
            this.$message({
              type: 'success',
              message: '安装成功,将跳转至我的算法中查看'
            });
            setTimeout(() => {
              this.findAllSdk();
              this.activeName = 'myAlgorithm';
            }, 3000)
            _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,
          });
        });
      }).catch(() => {
        console.log('取消安装')
      })
    },
    openApp() {
      let message = 'toOpenApp?' + this.productDetail.productBaseId;
      window.parent.postMessage({
        msg: message
      }, "*")
    },
    onFileAdded (f) {
      debugger;
    onFileAdded(f) {
      this.patchUpdateStatus = "";
    },
    // 校验输入的是否是数字
    valiNum (value) {
      if (value) {
        let re = /[^\-?\d.]*$/;
        if (!re.test(value)) {
          // this.$toast({
          //   type: "warning",
          //   message: "请输入数字!"
          // });
          this.$notify({
            title: "提示",
            message: "请输入数字!",
            type: "warning"
          });
        }
      }
    },
    // 左边拖动模块得拖动结束后的触发函数
    endLeft (env) {
      this.dragging = false;
      let taskId = env.to.id;
      let sdkId = this.TaskMange.list1[env.oldIndex].id;
      if (!taskId.length || !sdkId.length) {
        return;
      }
      // 获取到该任务所在的元素
      let task = this.TaskMange.list2.find(i => {
        return i.id === taskId;
      });
      let arr = task.child.filter(i => {
        return i.id === sdkId;
      });
      // window.console.log(task, "拖进来的任务信息", sdkId, arr);
      if (arr && arr.length >= 2) {
        // this.$toast({
        //   type: "warning",
        //   message: "该算法已存在!"
        // });
        this.$notify({
          title: "提示",
          message: "该算法已存在!",
          type: "warning"
        });
        task.child.splice(env.newIndex, 1);
        return true;
      }
      let list = task.child.map((i, index) => {
        let obj = {};
        obj.sdkId = i.id;
        obj.sort = index + 1;
        return obj;
      });
      let json = {
        taskId: taskId,
        sdks: list
      };
      this.addTaskSdk(json);
    },
    // 右边拖动模块开始拖动触发函数
    startRight (env) {
      this.$nextTick(() => {
        this.dragging = true;
      });
      // window.window.console.log(env, "right start");
    },
    // 右边拖动模块拖动结束触发函数
    endRight (env) {
      // window.window.console.log(env, "right end");
    },
    clickSet (data) {
      if (data.isSetting) {
        data.isSetting = false;
      } else {
        data.isSetting = true;
      }
    },
    clickDel (data, Index) {
      this.$confirm("提示:删除后,此任务在摄像机中的应用失效,是否删除?", {
        center: true,
        showConfirmButton: true,
        showCancelButton: true,
        confirmButtonClass: "comfirm-class-sure",
        cancelButtonClass: "comfirm-class-cancle"
      })
        .then(() => {
          this.deleteTask(data);
        })
        .catch(err => { });
    },
    clickSetAlgo (row, data) {
      // window.console.log(row, data, "编辑任务中某一个算法");
      if (row.isShowSetAlgo && data.id === this.TaskMange.currentAlgoId) {
        row.isShowSetAlgo = false;
        data.isSelect = false;
        return false;
      }
      if (data.id !== this.TaskMange.currentAlgoId) {
        let isEdit = false;
        if (this.argsList && this.argsList.length !== 0) {
          this.TaskMange.argsList.map((i, index) => {
            if (i.value2 !== this.argsList[index].value2) {
              isEdit = true;
            }
            if (i.value3 !== this.argsList[index].value3) {
              isEdit = true;
            }
          });
        }
        if (isEdit) {
          this.$notify({
            title: "提示",
            message: "请先保存未保存的配置!",
            type: "warning"
          });
          return false;
        } else {
          let task = this.TaskMange.list2.find(element => {
            return element.isShowSetAlgo;
          });
          // console.log(task, '是否有已经打开编辑的')
          if (task !== undefined) {
            this.$set(task, "isShowSetAlgo", false);
            task.child.map(i => {
              this.$set(i, "isSelect", false);
            });
          }
        }
      }
      this.TaskMange.currentAlgoId = data.id;
      this.TaskMange.currentTaskId = row.id;
      let task = this.TaskMange.list2.find(element => {
        return element.isShowSetAlgo;
      });
      if (task === undefined) {
        this.getSdkArgs(data).then(() => {
          this.getRulesByTaskSdk(row.id, data.id);
        });
        if (row.isShowSetAlgo) {
          row.isShowSetAlgo = false;
        } else {
          row.isShowSetAlgo = true;
          data.isSelect = true;
        }
      } else {
        // this.$toast({
        //   type: "warning",
        //   message: "请先保存未保存的配置!"
        // });
        // this.$notify({
        //   title: "提示",
        //   message: "请先保存未保存的配置!",
        //   type: "warning"
        // });
      }
    },
    async getRulesByTaskSdk (taskId, sdkId) {
      let res = await getRulesByTaskSdk({
        taskId: taskId,
        sdkId: sdkId
      });
      if (res && res.success) {
        if (res.data.rules && res.data.rules.length !== 0) {
          this.TaskMange.argsList = res.data.rules.map((i, index) => {
            let sdk = res.data.argList.find(j => {
              return j.alias === i.sdk_arg_alias;
            });
            let obj = JSON.parse(JSON.stringify(this.TaskMange.baseObject));
            obj.value1 = i.sdk_arg_alias ? i.sdk_arg_alias : "";
            obj.value2 = i.operator ? i.operator : "";
            obj.value3 = i.sdk_arg_value ? i.sdk_arg_value : "";
            obj.unit = sdk.unit ? sdk.unit : "";
            obj.id = i.Id ? i.Id : "";
            obj.algoId = sdkId;
            return obj;
          });
        } else {
          this.TaskMange.argsList = res.data.argList.map(i => {
            let obj = JSON.parse(JSON.stringify(this.TaskMange.baseObject));
            obj.value1 = i.alias ? i.alias : "";
            obj.value2 = i.default_operator ? i.default_operator : "";
            obj.value3 = i.default_value ? i.default_value : "";
            obj.unit = i.unit ? i.unit : "";
            obj.id = "";
            obj.algoId = sdkId;
            return obj;
          });
        }
        // window.console.log(res, '查找算法规则', this.argsList)
        this.argsList = JSON.parse(JSON.stringify(this.TaskMange.argsList));
      }
    },
    async findAllSdk () {
    async getAllSdk() {
      let installedList = [];
      let unInstalledList = [];
      let hasNewVersionList = [];
      let res = await findAllSdk();
      if (res && res.success) {
        // debugger
        this.TaskMange.list1 = res.data.map((i, index) => {
          this.$set(i, "isEdit", false);
          //mock 未安装/待升级
          // if (index == 1 || index == 2) {
          //   this.$set(i, "isUpgrade", true);
          // }
          // if (index == 3 || index == 4) {
          //   this.$set(i, "installed", false);
          // }
          //mock end
          return i;
        });
      }
    },
    addTask () {
      let obj = {
        id: "",
        name: "任务" + this.TaskMange.list2.length,
        child: [],
        isSetting: false,
        isShowSetAlgo: false
      };
      // window.console.log(this.TaskMange.list2, "addTask");
      this.TaskMange.list2.push(obj);
      this.addTaskAsync(obj.name);
      this.$nextTick(() => {
        let taskArea = document.getElementById("taskArea");
        taskArea.scrollTop = taskArea.scrollHeight;
      });
    },
    async findAll () {
      let res = await findAll();
      if (res && res.success) {
        if (res.data && res.data.length !== 0) {
          let list = res.data.map(i => {
            let obj = {};
            obj.id = i.task.taskid;
            obj.name = i.task.taskname;
            obj.enable = i.task.enable;
            obj.is_alarm = i.task.is_alarm;
            obj.child = [];
            if (i.sdks && i.sdks.length !== 0) {
              obj.child = i.sdks.map(j => {
                let t = {};
                t.id = j.id;
                t.ipc_id = j.ipc_id;
                if (i.sdks.length == 1) {
                  t.sdk_name = i.task.taskname;
                  // console.log("单个sdk算法:",t.sdk_name)
                } else {
                  t.sdk_name = j.sdk_name;
                  // console.log("多个sdk算法:",t.sdk_name)
                }
                t.icon = j.icon;
                t.enable = j.enable;
                t.isSelect = false;
                return t;
              });
            }
            obj.isSetting = false;
            obj.isShowSetAlgo = false;
            return obj;
          });
          this.TaskMange.list2 = list;
        }
      }
    },
    clickDelSdk (task, sdk) {
      this.$confirm(
        "提示:删除后,此算法在本任务中移除,同时在摄像机中的应用失效,是否删除?",
        {
          center: true,
          showConfirmButton: true,
          showCancelButton: true,
          confirmButtonClass: "comfirm-class-sure",
          cancelButtonClass: "comfirm-class-cancle"
        }
      )
        .then(() => {
          this.delTaskSdk(task, sdk);
        })
        .catch(err => { });
    },
    selectChange (event, type, data) {
      if (type === "options1") {
        // window.window.console.log(type, data, "选择下拉框");
        data.options1.map(i => {
          if (i.value === data.value1) {
            this.$set(data, "unit", i.unit ? i.unit : "");
        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;
          }
        });
      }
    },
    // 删除任务算法
    async delTaskSdk (task, sdk) {
      let json = {
        taskId: task.id,
        sdkId: sdk.id
      };
      let res = await delTaskSdk(json);
      if (res && res.success) {
        // this.$toast({
        //   type: "success",
        //   message: "删除任务算法成功!"
        // });
        this.$notify({
          title: "成功",
          message: "删除任务算法成功!",
          type: "success"
        });
        this.findAll();
      }
    },
    // 删除任务
    async deleteTask (data, index) {
      // window.console.log(data, "deleteTask");
      let res = await deleteTask({ taskId: data.id });
      // this.$toast({
      //   type: res.success ? "success" : "error",
      //   message: res.msg
      // });
      this.$notify({
        title: res.success ? "成功" : "失败",
        message: res.msg,
        type: res.success ? "success" : "error"
      });
      if (data.id && res.success) {
        this.findAll();
      }
    },
    // 更新任务状态
    async updateTaskStatus (data) {
      // window.console.log(data, '更新任务状态')
      let json = {
        taskId: data.id,
        enable: data.enable
      };
      let res = await updateTaskStatus(json);
      // this.$toast({
      //   type: res.success ? "success" : "error",
      //   message: res.msg
      // });
      this.$notify({
        title: res.success ? "成功" : "失败",
        message: res.msg,
        type: res.success ? "success" : "error"
      });
    },
    // 更新任务名称
    async updateTaskName (data) {
      let json = {
        taskId: data.id,
        taskName: data.name
      };
      let res = await updateTaskName(json);
      // this.$toast({
      //   type: res.success ? "success" : "error",
      //   message: res.msg
      // });
      this.$notify({
        title: res.success ? "成功" : "失败",
        message: res.msg,
        type: res.success ? "success" : "error"
      });
      if (res && res.success) {
        this.$set(data, "isSetting", false);
      }
    },
    // 获取底库数据
    async getBaseList () {
      // let res = await getTagList();
      // if (res && res.success) {
      //   let filter = res.data.filter(i => {
      //     return i.status === 0;
      //   });
      //   let list = filter.map(i => {
      //     let obj = {};
      //     obj.id = i.key;
      //     obj.name = i.title;
      //     obj.value = i.value;
      //     return obj;
      //   });
      //   list.unshift({
      //     id: "",
      //     name: "全部底库",
      //     value: ""
      //   })
      //   // this.TaskMange.baseObject.options3 = [...all, ...list];
      //   this.TaskMange.baseObject.options3 = [...list];
      // }
          //算法软件 已安装其中包含待升级 未安装
          item.installed ? installedList.push(obj) : unInstalledList.push(obj);
          item.isUpgrade ? hasNewVersionList.push(obj) : null
        });
      }
      this.installedList = installedList;
      this.notInstalledList = unInstalledList;
      this.hasNewVersionSdk = hasNewVersionList;
    },
    unloadSDKinWin() {
      this.TaskMange.baseObject.options3 = [
        { id: true, name: true, value: true },
        { id: false, name: false, value: false }
      ];
    },
    // 获取算法参数
    async getSdkArgs (data) {
      let res = await getSdkArgs({
        sdkId: data.id,
        scope: "TASKRULE"
      });
      if (res && res.success) {
        // window.console.log(res, "查询算法参数");
        let list = res.data.map(i => {
          let obj = {};
          obj.name = i.name;
          obj.id = i.alias;
          obj.value = i.alias;
          obj.unit = i.unit;
          obj.must = i.must;
          obj.range = i.range;
          obj.sort = i.sort;
          return obj;
        });
        this.TaskMange.baseObject.options1 = [...list];
      }
    },
    // 查询字典
    async findByType () {
      let res = await findByType();
      if (res && res.success) {
        let list = res.data.RULECOMPUTEBETWEEN.map(i => {
          let obj = {};
          obj.name = i.name;
          obj.value = i.value;
          return obj;
        });
        this.TaskMange.baseObject.options2 = [...list];
      }
    },
    // 算法配置,新建
    add () {
      this.TaskMange.argsList.push(
        JSON.parse(JSON.stringify(this.TaskMange.baseObject))
      );
    },
    // 算法配置 删除
    delRule (index) {
      this.TaskMange.argsList.splice(index, 1);
    },
    // 算法参数保存
    async save () {
      let list = this.TaskMange.argsList.map(i => {
        let obj = {};
        obj.id = i.id;
        obj.operator = i.value2;
        obj.sdk_arg_alias = i.value1;
        obj.sdk_arg_value = i.value3;
        return obj;
      });
      let json = {
        rules: list,
        sdkId: this.TaskMange.currentAlgoId,
        taskId: this.TaskMange.currentTaskId
      };
      let res = await saveTaskSdkRule(json);
      this.$notify({
        title: "提示",
        type: res.success ? "success" : "error",
        message: res.msg
      });
      if (res && res.success) {
        let task = this.TaskMange.list2.find(i => {
          return i.id === this.TaskMange.currentTaskId;
        });
        if (task) {
          this.$set(task, "isShowSetAlgo", false);
          this.TaskMange.argsList = [];
          task.child.map(i => {
            this.$set(i, "isSelect", false);
          });
        }
      }
    },
    getDefault () {
      this.deleteTaskSdkRule(
        this.TaskMange.currentTaskId,
        this.TaskMange.currentAlgoId
      ).then(() => {
        this.getRulesByTaskSdk(
          this.TaskMange.currentTaskId,
          this.TaskMange.currentAlgoId
        );
      });
    },
    async deleteTaskSdkRule (taskId, sdkId) {
      let json = {
        taskId: taskId,
        sdkId: sdkId
      };
      let res = await deleteTaskSdkRule(json);
      // this.$toast({
      //   type: res.success ? "success" : "error",
      //   message: res.msg
      // });
      this.$notify({
        title: res.success ? "成功" : "失败",
        message: res.msg,
        type: res.success ? "success" : "error"
      });
      if (res && res.success) {
        // window.console.log(res, "恢复默认值");
      }
    },
    // 给任务添加算法
    async addTaskSdk (data) {
      let res = await addTaskSdk(data);
      if (res && res.success) {
        // window.console.log(res, 'res')
        this.findAll();
      }
    },
    // 新添加任务
    async addTaskAsync (name) {
      let res = await addTask({ taskname: name });
      // this.$toast({
      //   type: res.success ? "success" : "error",
      //   message: res.msg
      // });
      // window.console.log(res, "addTaskAsync");
      this.$notify({
        title: res.success ? "成功" : "失败",
        message: res.msg,
        type: res.success ? "success" : "error"
      });
      if (res && res.success) {
        this.findAll();
      }
    },
    cancle (row) {
      if (row.isShowSetAlgo) {
        row.isShowSetAlgo = false;
      }
      this.TaskMange.argsList = [];
      this.TaskMange.currentAlgoId = "";
      row.child.map(i => {
        this.$set(i, "isSelect", false);
      });
    },
    cancleTask (row) {
      if (row.isSetting) {
        row.isSetting = false;
      }
    },
    commandAlgo (command, row, item) {
      if (command === 1) {
        // console.log('设置算法')
        this.clickSetAlgo(row, item);
      }
      if (command === 2) {
        // console.log('删除算法')
        this.clickDelSdk(row, item);
      }
    },
    commandTask (command, row) {
      if (command === 1) {
        //编辑任务
        this.clickSet(row);
      }
    },
    getUser () {
      // console.log("登录用户",JSON.parse(sessionStorage.getItem("userInfo")).username)
      if (
        sessionStorage.getItem("userInfo") &&
        (JSON.parse(sessionStorage.getItem("userInfo")).username ==
          "superadmin" ||
          JSON.parse(sessionStorage.getItem("userInfo")).username == "basic")
      ) {
        this.isSuperUser = true;
      let appToUnload
      let sdkToUnload
      if (this.productDetail.productTypeName == "应用") {
        appToUnload = this.installedApps.find((item) => {
          return item.id == this.productDetail.productBaseId
        })
        this.unLoad(appToUnload)
      } else {
        this.isSuperUser = false;
        sdkToUnload = this.installedList.find((item) => {
          return item.id == this.productDetail.productBaseId
        })
        this.unLoadSdk(sdkToUnload)
      }
    },
    donwload (item) {
      this.downloading = true;
    //卸载算法
    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 => {
        .then((rsp) => {
          item.upgradeLoading = false;
          //this.downloading = false;
          this.downloadItem = "";
          this.$notify({
            type: "success",
            message: "算法已安装"
            message: typ == 1 ? "算法安装成功" : "算法升级成功"
          });
          this.downloading = false;
          this.downloadItem = "";
          this.findAllSdk();
        })
        .catch(err => {
        .catch((err) => {
          this.$notify({
            type: "warning",
            message: err.data
            message: err.data,
          });
          this.downloading = false;
          item.upgradeLoading = false;
          //this.downloading = false;
          this.downloadItem = "";
        });
      // 开启自动刷新
      this.sdkUpgreading = true;
    },
    commandAlgLib (item) {
      this.$set(item, "isEdit", true);
    },
    inputBlur (item) {
      // console.log(item, '修改名称')
    inputBlur(item) {
      this.$set(item, "isEdit", false);
    },
    handleTabClick() { },
    autoRefreshAppAndSdkState() {
      // 关闭后退出
      if (!this.autoRefresh) {
        return;
      }
    cleanTemplateForm () {
      this.appSceneForm.name = "";
      this.appSceneForm.desc = "";
      this.appSceneForm.rules = "";
      this.appSceneForm.txt = "";
      if (this.appUpgreading) {
        this.getAllApps();
      }
      this.$refs.ruleEditor.cleanRule();
      if (this.sdkUpgreading) {
        this.getAllSdk();
      }
      let _this = this;
      setTimeout(() => {
        _this.autoRefreshAppAndSdkState();
      }, 500);
    },
    handleTabClick () {
    },
    handleCreateScene () {
      this.sceneDialogVisible = true;
      this.dialogTitle = '创建场景模板';
      this.sceneSdks = this.TaskMange.list1.filter(sdk => {
        return sdk.installed === true;
      });
      this.sceneRuleList = "";
      this.$nextTick(() => {
        this.cleanTemplateForm();
      });
    },
    handleDialogClose () {
      this.sceneDialogVisible = false;
    },
    handleEditScene (item) {
      this.appSceneForm.name = item.name;
      this.appSceneForm.desc = item.desc;
      this.sceneSdks = item.sdks;
      this.sceneRuleList = item.rules;
      this.sceneDialogVisible = true;
      this.dialogTitle = '编辑场景模板';
    },
  }
  },
};
</script>
<style lang="scss">
@@ -1304,16 +1650,7 @@
  box-sizing: border-box;
  text-align: left;
  min-width: 1106px;
  // background-color: #f2f6fc;
  .s-video-manage-breadcrumb {
    height: 5%;
    box-sizing: border-box;
    border: 1px solid #e4e7ed;
    background-color: rgb(255, 255, 255);
    -webkit-box-shadow: #e4e7ed 0px 0px 9px inset;
    box-shadow: #e4e7ed 0px 0px 9px inset;
    border-radius: 5px;
  }
  .el-tabs {
    height: calc(100% - 50px);
    // margin-top: 5px !important;
@@ -1339,31 +1676,316 @@
    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%;
              }
            }
          }
        }
      }
    }
  }
}
.el-breadcrumb__inner {
  font-weight: bold;
  color: #606266;
  cursor: pointer;
.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;
  color: #777;
  line-height: 26px;
  p {
    text-align: center;
    color: #666;
  }
}
.src-title {
  //color: #bfbfbf;
  color: #bbcee8;
  font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC';
  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%;
@@ -1383,7 +2005,7 @@
      position: absolute;
      top: 50%;
      left: 50%;
      background: url('/images/algo/green.gif');
      background: url("/images/algo/green.gif");
      overflow: hidden;
      transform: translate(-50%, -50%);
      .inner-bar {
@@ -1403,6 +2025,7 @@
  .el-tabs--border-card > .el-tabs__content {
    padding: 0 !important;
    overflow: auto !important;
    background-color: #fff;
  }
  .el-tabs__content {
    padding: 0 !important;
@@ -1414,16 +2037,8 @@
  //     width: 58% !important;
  //   }
  // }
  .edit-rules-box {
    padding: 0 2px 0 13px;
  }
  .common {
    .rigth-box {
      width: 90% !important;
    }
  }
  .super,
  .common {
  .super {
    width: 100%;
    height: 100%;
    .title {
@@ -1454,7 +2069,8 @@
        }
      }
      .task-list {
        background: #fdfdfd;
        // background: #1c364a;
        background: #fff;
        padding: 20px;
        box-sizing: border-box;
@@ -1462,189 +2078,39 @@
          display: flex;
          flex-direction: row;
          flex-wrap: wrap;
          min-height: 200px;
          .wrap-box {
            width: 16.66%;
            width: 11%;
          }
          .list-choose-item-left {
            width: 80%;
            height: auto;
            margin: auto;
            margin-bottom: 30px;
            max-width: 200px;
          }
        }
      }
      .appScenarios-list {
        display: flex;
        flex-wrap: wrap;
        .wrap-box {
          width: 16.6%;
          margin-bottom: 30px;
          .inner {
            width: 80%;
            box-sizing: border-box;
            position: relative;
            font-size: 14px;
            padding: 20px 0 50px;
            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;
            &:hover {
              .mask {
                display: block;
              }
            }
            max-width: 150px;
            .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;
              .tool {
                position: absolute;
                top: 49%;
                left: 50%;
                transform: translate(-50%, -50%);
                i {
                  font-size: 50px;
                }
                i:nth-of-type(1) {
                  margin-right: 30px;
                }
                i:nth-of-type(2) {
                  color: red;
                }
              .el-button + .el-button {
                margin-left: 0 !important;
              }
            }
            .scenario-icon {
              display: flex;
              width: 100%;
              height: 100%;
              margin: auto;
              justify-content: center;
              align-content: center;
              align-items: center;
              .single,
              .double,
              .third,
              .four {
                width: 80%;
                padding-top: 80%;
                position: relative;
                margin: auto;
                display: flex;
                flex-wrap: wrap;
                justify-content: center;
                .svg-wrap {
                  width: 50%;
                  position: absolute;
                  height: 0;
                  padding-top: 50%;
                  text-align: center;
                  box-shadow: 0 0 3px 2px rgb(247, 247, 247) inset;
                  svg {
                    position: absolute;
                    top: 50%;
                    left: 50%;
                    transform: translate(-50%, -50%);
                  }
                  .baseImg {
                    position: absolute !important;
                    top: 50%;
                    left: 50%;
                    transform: translate(-50%, -50%);
                  }
                }
              }
              .single {
                margin: auto;
                .svg-wrap {
                  top: 50%;
                  left: 50%;
                  transform: translate(-50%, -50%);
                  box-shadow: none;
                }
              }
              .double {
                .svg-wrap:nth-of-type(1) {
                  top: 50%;
                  transform: translateY(-50%);
                  left: 0;
                }
                .svg-wrap:nth-of-type(2) {
                  top: 50%;
                  transform: translateY(-50%);
                  right: 0;
                }
              }
              .third {
                .svg-wrap:nth-of-type(1) {
                  top: 0;
                  left: 0;
                }
                .svg-wrap:nth-of-type(2) {
                  top: 0;
                  right: 0;
                }
                .svg-wrap:nth-of-type(3) {
                  top: 50%;
                  left: 50%;
                  transform: translateX(-50%);
                }
              }
              .four {
                .svg-wrap:nth-of-type(1) {
                  top: 0;
                  left: 0;
                }
                .svg-wrap:nth-of-type(2) {
                  top: 0;
                  right: 0;
                }
                .svg-wrap:nth-of-type(3) {
                  top: 50%;
                  left: 0;
                }
                .svg-wrap:nth-of-type(4) {
                  top: 50%;
                  right: 0;
                }
              }
            }
            .scenario-name {
              width: 100%;
              height: 36px;
              line-height: 36px;
              text-align: center;
              position: absolute;
              bottom: 10px;
              left: 0;
            }
          }
        }
      }
      .store-list,.app-list {
      .store-list,
      .app-list {
        display: flex;
        flex-wrap: wrap;
        .wrap-box {
          width: 16.6%;
          width: 11%;
          margin-bottom: 30px;
          .list-choose-item-left {
            width: 80%;
            height: auto;
            margin: auto;
            margin-bottom: 30px;
            max-width: 200px;
            max-width: 150px;
          }
          .inner {
            width: 80%;
@@ -1671,9 +2137,9 @@
              }
            }
            .alg-name {
              height: 36px;
              height: 20px;
              text-align: center;
              line-height: 36px;
              line-height: 20px;
            }
            .mask {
              position: absolute;
@@ -1704,16 +2170,16 @@
        }
      }
      .drawer-content {
        font-family: 'PingFangSC-Regular';
        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;
          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;
          font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
        }
        .el-input {
          width: 100%;
@@ -1758,24 +2224,8 @@
        }
      }
      .tab-content {
        padding: 30px 20px;
        padding: 20px 20px;
      }
    }
    .right-box {
      height: 100%;
      padding: 10px 10px;
      box-sizing: border-box;
      float: left;
      .task-manage-table {
        height: calc(100% - 30px);
        margin-top: 5px;
        overflow-x: hidden;
        overflow-y: auto;
      }
      // .task-manage-table::-webkit-scrollbar {
      //   width: 0 !important ;
      // }
    }
    .mask {
      position: absolute;
@@ -1787,7 +2237,20 @@
      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;
@@ -1851,28 +2314,9 @@
      cursor: pointer;
      position: relative;
      font-size: 14px;
      // display: inline-block;
      // @media screen and(min-width: 1895px) {
      //   //margin: 20px 25px 20px 20px;
      //   margin: 20px 30px 20px 20px;
      // }
      // @media screen and(min-width: 1695px) and(max-width:1895px ) {
      //   margin: 20px 10px 20px 15px;
      // }
      // @media screen and(min-width: 1460px) and(max-width: 1695px) {
      //   margin: 20px 25px 20px 20px;
      // }
      // @media screen and(max-width: 1460px) {
      //   margin: 20px 15px 20px 10px;
      // }
      // width: 126px;
      // height: 120px;
      // width: 220px;
      // height: 214px;
      transition: all 1s;
      background: #ffffff;
      //border: 1px solid #e2e2e2;
      //box-shadow: 0 5px 12px 0 rgba(0, 0, 0, 0.07);
      // background: #ffffff;
      border-radius: 4px;
      p {
        display: none;
@@ -1892,15 +2336,22 @@
      .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: darkgray;
      background-color: #ddd;
      color: gray;
      filter: grayscale(100%);
    }
    .list-complete-item.sortable-chosen {
      background: #4ab7bd;
@@ -2009,11 +2460,11 @@
    }
    .alg-name {
      //margin-top: 12px;
      line-height: 36px;
      line-height: 20px;
      font-family: PingFangSC-Regular;
      font-size: 14px;
      letter-spacing: 0.05em;
      color: #3e4664;
      color: #333;
      // background-color: #ecf5ff;
      .el-input {
        position: relative;
@@ -2021,16 +2472,6 @@
        display: inline-block;
        width: 100%;
      }
    }
    .task-name {
      text-align: center;
      margin-top: 16px;
      line-height: 28px;
      font-family: PingFangSC-Regular;
      font-size: 13px;
      color: #222222;
      text-align: center;
      // background-color: #ecf5ff;
    }
    .unit-class {
      margin-left: 10px;
@@ -2055,6 +2496,7 @@
        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%;
@@ -2062,13 +2504,40 @@
          transform: translate(-50%, -50%);
        }
        .baseImg {
          width: 56%;
          width: 100%;
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
          max-width: 106px;
          max-height: 106px;
          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;
        }
      }
    }
@@ -2154,5 +2623,40 @@
    }
  }
}
.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>