桌面图标自适应,应用中心添加升级角标;应用中心算法卸载联调,tab名称更新;统计查询(集群)场景查询参数更新
7个文件已修改
187 ■■■■■ 已修改文件
public/apps.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Pool/VideoPhotoData.ts 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/search.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/ai/index/App.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/ai/index/api.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/desktop/index/components/ToolsEntry.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/apps.json
@@ -318,9 +318,9 @@
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "1.0.1",
      "remoteVersion": "1.0.2",
      "installed": true,
      "isUpgrade": false,
      "isUpgrade": true,
      "progressMsg": ""
    },
    {
src/Pool/VideoPhotoData.ts
@@ -252,7 +252,13 @@
  }
  async queryTaskList() {
    const rsp: any = await getTaskList({});
    let params:any = {};
    if(this.searchFrom == 'cluster'){
      params.isPlatform = 1
    }
    console.log(params)
    debugger
    const rsp: any = await getTaskList(params);
    if (rsp && rsp.success) {
      // this.tasks.splice(0, this.tasks.length)
      // rsp.data.forEach(element => {
src/api/search.ts
@@ -32,7 +32,7 @@
  return request({
    url: "/data/api-v/task/aggregateTaskList",
    method: "get",
    data: query
    params: query
  });
};
src/pages/ai/index/App.vue
@@ -19,7 +19,7 @@
              @tab-click="handleTabClick"
              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">
@@ -86,13 +86,12 @@
                                <div v-if="item.remoteVersion">最新版本:{{item.remoteVersion}}</div>
                              </div>
                              <div class="mask-btn">
                                <!-- <el-button
                                  v-if="!item.isDefault"
                                  @click="unLoad(item)"
                                <el-button
                                  @click="unLoadSdk(item)"
                                  type="primary"
                                  size="small"
                                  class="bot-btn"
                                >卸载</el-button>-->
                                >卸载</el-button>
                                <el-button
                                  v-if="item.isUpgrade"
                                  @click="donwload(item)"
@@ -176,7 +175,7 @@
                            element-loading-background="rgba(0,0,0,.8)"
                          >
                            <i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
                            <div class="mask" v-if="!item.isDefault || item.isUpgrade">
                            <div class="mask" >
                              <div class="info-onmask">
                                <div>当前版本:{{item.version}}</div>
                                <div v-if="item.remoteVersion">最新版本:{{item.remoteVersion}}</div>
@@ -233,6 +232,7 @@
                          >
                            <div class="mask">
                              <el-button
                                size="small"
                                type="primary"
                                class="bot-btn"
                                @click="downloadApp(item)"
@@ -474,7 +474,7 @@
</template>
<script>
import { findAllSdk, downloadSdk, installSdk, getInstallInfo } from "./api";
import { findAllSdk, downloadSdk, installSdk, getInstallInfo, removeSdk} from "./api";
import { getApps, installApp, removeApp, getUnActivedSdk, actPageAlg, getUnActivedApp, actApp } from "@/api/app";
import FileUploader from "@/components/subComponents/FileUpload/index";
@@ -679,26 +679,47 @@
      this.installedApps = iArry;
      this.storeApps = sArry;
    },
    //卸载算法
    unLoadSdk(sdk){
      let _this = this;
      this.$confirm('确定要卸载该算法吗?','提示').then(()=>{
        sdk.unloadLoading = true;
        removeSdk({ sdkId: sdk.id }).then(res => {
          if (res && res.success) {
            sdk.unloadLoading = false;
            _this.getAllSdk();
            window.parent.postMessage({
              msg: "AppUpdate"
            }, '*')
          }
        }).catch(e => {
          console.log(e);
          sdk.unloadLoading = false;
        })
      }).catch( e => {
        console.log(e)
      })
    },
    //卸载应用
    unLoad(app) {
      app.unloadLoading = true;
      let _this = this;
      removeApp({ appId: app.id }).then(res => {
        if (res && res.success) {
          //setTimeout(() => {
      this.$confirm('确定要卸载该应用吗?','提示').then(()=>{
        app.unloadLoading = true;
        removeApp({ appId: app.id }).then(res => {
          if (res && res.success) {
            app.unloadLoading = false;
            _this.getAllApps();
            window.parent.postMessage({
              msg: "AppUpdate"
            }, '*')
          }
        }).catch(e => {
          console.log(e);
          app.unloadLoading = false;
          _this.getAllApps();
          window.parent.postMessage({
            msg: "AppUpdate"
          }, '*')
          //}, 3000);
        }
      }).catch(e => {
        console.log(e);
        app.unloadLoading = false;
        })
      }).catch( e => {
        console.log(e)
      })
    },
    // actSdk (id) {
    //   this.actSdkId = id;
src/pages/ai/index/api.ts
@@ -149,4 +149,13 @@
    method: 'post',
    params: file
  })
}
//卸载已安装算法
export const removeSdk = (sdk: any) => {
  return request({
    url: '/data/api-v/sdk/unInstall',
    method: 'post',
    data: sdk
  })
}
src/pages/desktop/index/components/ToolsEntry.vue
@@ -1,31 +1,35 @@
<template>
  <div class="tools-entry">
    <div class="entry-wrap">
      <el-carousel height="600px" :autoplay="false" arrow="never">
      <el-carousel :height="rowSize==3?'600px':'770px'" :autoplay="false" arrow="never">
        <el-carousel-item v-for="(carousel,index) in carousels" :key="index">
          <div class="app-list clearFix sdk-list" >
          <div class="app-list clearFix sdk-list">
            <div v-for="item in carousel" :key="item.id">
              <div class="app" v-if="item.url" @click="dockClick(item)">
              <div class="wrap">
                <div class="app-icon">
                  <img :src="item.src" :alt="item.alt" />
                <div class="wrap">
                  <div class="app-icon">
                    <div
                      class="badge"
                      v-if="item.name=='algorithmManage' && badgeNum > 0"
                    >{{badgeNum}}</div>
                    <img :src="item.src" :alt="item.alt" />
                  </div>
                  <div class="app-name">{{item.title}}</div>
                </div>
                <div class="app-name">{{item.title}}</div>
              </div>
              <div class="app sdk" v-if="item.sdk_name">
                <div class="wrap">
                  <div class="app-icon">
                    <img
                      :src="item.iconBlob.indexOf(',')>0? item.iconBlob:`data:image/png;base64,${item.iconBlob}`"
                      style="width:82%"
                    />
                  </div>
                  <div class="app-name">{{item.sdk_name}}</div>
                </div>
              </div>
            </div>
            <div class="app sdk" v-if="item.sdk_name">
              <div class="wrap">
                <div class="app-icon">
                  <img
                    :src="item.iconBlob.indexOf(',')>0? item.iconBlob:`data:image/png;base64,${item.iconBlob}`"
                    style="width:82%"
                  />
                </div>
                <div class="app-name">{{item.sdk_name}}</div>
              </div>
            </div>
            </div>
            <!-- <div class="app" v-for="dock in stateDocks" :key="dock.id" @click="dockClick(dock)">
              <div class="wrap">
                <div class="app-icon">
@@ -44,7 +48,7 @@
                </div>
                <div class="app-name">{{item.sdk_name}}</div>
              </div>
            </div> -->
            </div>-->
          </div>
        </el-carousel-item>
      </el-carousel>
@@ -76,7 +80,9 @@
          src: 'data:image/png;base64,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TER++23Yf3wmWvzbw+PV+9/6qr72NIxukYHBsz8qD6ZsExPVRLmKKlWlets5GPsn8mNyzeuQkXE6en2vhikpKW/6+expNN2ievXkIOljqcGECZApFYsmTy7zdTZeLGUXOt6niWXbgtex0NllvRnTZLbLx/jEHfr8cxGIP9AsIKCs46mdZFncsLI67eHra9Hjz/U53t0r+DCmxcKmrh9t6bx1K7Zjt1hz6FBZx5MsJH1Kb9q0wO1K7yhj7B8swy26uHt3mcfZIGS0MzN79WYuAMY0mEgV1UTrsh+DEFvIUnR7//1Xb+cCYEyT5ZCPPKxRo7IOI9pSkny14Pk6XACMaSB7mkck6+lRNh4Jy+HDyzqePBy7VesSE1+9nQuAMQ2S/8KX694zTnDy9sZjXMODZs1KPeCLC/JQgH5buhsd/erd/DXgO8aeJtEtqlo1d2fuTqBePWkVnZTi+TwLjbWQjuCEgQFqUQQymzUTAlni2LhxGCO+p5Vt2pR5/ERUxNKzZ0Nj16+0XN2p06t365VmTKY5egwdH5FYuXr1nLXy4LxZa9eqM3K2YvGnn6pWv/jZKFe8ZpsHJzgAgHh5lh59VI7j1xfeeLRrF2JffzcXgJZq127UqKSRhoY5a9XGufVOnhQu6IkhLVsCOK10NqY8+grjxSf37qn6CQeD6d7eEPgMWwtuxwWgpQy9xb9z948bBxesQnjLlkrnYZpFXKMV6D5/frBY51+rf0ZGYdtxAWgpaipWi9rOzgIw56uvsJfCcUYM/O9/Q0N9Lpqf8vEBAHgWvjl/C6ClRGtYkU3lykrnYBriCTxEo6gog/OZyRXmDRsGAEIUfWUuLgAtRWuFtzC4dEnpHExhvliDlH37cnbqX8wZ1b17UOutKaa9ir/MPheAlhLzcVA6uGoV2sFQjH8Dv1NnGolWoJ7olp5OC3AUJ2bMCG1qorJo7+p6ttFql0ZrHj8u6XhcAFoqNMK7Z90r0dGUTWbi4bBhuAdHVHn6VOlcrJylIRI/JCTQj1glti9dqmon39TraWUV5rA+1vLLJUuABUKI0i/Sy98SvyPyr8GoMlJ76f0yeLDUFBWpeePGFERZMCn/lWZYOZkifsf3mZm4iUPivYQEcqNvxPK7d3FDWinHRkSEhXl7W1hERQHF+0xfUv8HrASX0hIwkmoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMDctMTNUMjA6MTM6MjcrMDg6MDBhLSN6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTA3LTEzVDIwOjEzOjI3KzA4OjAwEHCbxgAAAEp0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fcWp6eWVjbDNocXIvZ2Vuem9uZy5zdmcBgnXEAAAAAElFTkSuQmCC',
          title: '人员跟踪'
        }
      ]
      ],
      rowSize: 3,
      badgeNum: 0,
    }
  },
  computed: {
@@ -86,8 +92,17 @@
    carousels () {
      let pages = 0;
      let tempArr = this.stateDocks.concat(this.installedSdk);
      let arr = this.chunk(tempArr,18);
      let upgradeArr = tempArr.filter(item => item.isUpgrade);
      this.badgeNum = upgradeArr.length;
      let arr = null;
      //根据屏幕高度来判断是展示3排还是4排 阈值:970
      if(window.innerHeight >= 930 ){
        this.rowSize = 4;
        arr = this.chunk(tempArr, 24);
      }else{
        this.rowSize = 3;
        arr = this.chunk(tempArr, 18);
      }
      console.log(arr)
      return arr
    }
@@ -114,17 +129,17 @@
  },
  methods: {
    chunk(arr,size){
      size = Math.max(size,0);
      const len = arr == null ? 0: arr.length;
      if(!len || size <1){
    chunk (arr, size) {
      size = Math.max(size, 0);
      const len = arr == null ? 0 : arr.length;
      if (!len || size < 1) {
        return []
      }
      let index = 0;
      let resIndex = 0;
      const result = new Array(Math.ceil(len/size))
      while(index<len){
        result[resIndex++] = arr.slice(index,index+=size)
      const result = new Array(Math.ceil(len / size))
      while (index < len) {
        result[resIndex++] = arr.slice(index, index += size)
      }
      return result
    },
@@ -209,15 +224,15 @@
</script>
<style lang="scss">
.el-carousel__arrow--left{
.el-carousel__arrow--left {
  left: 0 !important;
}
.el-carousel__arrow--right{
.el-carousel__arrow--right {
  right: 0 !important;
}
.el-carousel__button{
.el-carousel__button {
  width: 12px !important;
  height: 12px !important;;
  height: 12px !important;
  border-radius: 50% !important;
}
.tools-entry {
@@ -242,10 +257,24 @@
            width: 110px;
            height: 110px;
            margin: auto;
            position: relative;
            img {
              vertical-align: middle;
              margin-right: -3px;
            }
            .badge {
              position: absolute;
              top: 12px;
              right: 5px;
              width: 22px;
              height: 22px;
              font-size: 14px;
              background-color: red;
              border-radius: 50%;
              color: #fff;
              line-height: 22px;
              text-align: center;
            }
          }
          .el-loading-mask {
            border-radius: 8px;
vue.config.js
@@ -56,7 +56,7 @@
    })
    // config.module.rule('fonts').use('url-loader').loader('file-loader').options({ name: 'fonts/[name].[ext]', publicPath: '../' })
    //config.module.rule('fonts').use('url-loader').loader('file-loader').options({ name: 'fonts/[name].[ext]', outputPath: '../' })
  },
  productionSourceMap: false,
  filenameHashing: false,