ZZJ
2022-07-14 2b99047683332624832c1dfcae596e957a710b7d
bug修复
56个文件已修改
1个文件已删除
952 ■■■■■ 已修改文件
public/images/equipmentManagement/add.png.png 补丁 | 查看 | 原始文档 | blame | 历史
src/Pool/TaskMange.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/product.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/common.css 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Connect.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Footer.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Header.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/IndexHeader.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/canvas/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/giantTree/zTree/ztree.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/GB28181/components/DevList.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/GB28181/components/FormArea.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/GB28181/components/TreeArea.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/connectUs/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/equipmentDetail/components/SettingBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/equipmentDetail/components/UnbindBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/equipmentList/components/AddBox.vue 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/equipmentList/components/JoinClusterBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/equipmentList/components/QuitClusterBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/AlgManage/components/AlgCard.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/AlgManage/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraInfo/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/components/AddRuleBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/components/HashrateCard.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/components/RuleItem.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/components/SdkSettingBox.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/components/TimeSlider.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/CameraManage/CameraRules/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/HashManage/components/ClusterCard.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/HashManage/components/SettingBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hashrate/HashManage/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/components/commendContent.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/components/rightColumn.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/components/rightRrid.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/components/rightTabs.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/components/userCard.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/index.vue 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/manageCenter/index.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/AddBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/Content.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/JoinClusterBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/LeftMenu.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/OrderMng.vue 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/QuitClusterBox.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/SubAccount.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/components/productCard.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productDetail/components/ConfirmOrder.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productDetail/components/OffpayInstruct.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productDetail/components/PayCard.vue 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productDetail/components/UploadBox.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productDetail/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/register/components/SelectType.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/register/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/search/components/Banner.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/search/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/trialCenter/components/SdkItem.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/images/equipmentManagement/add.png.png
Binary files differ
src/Pool/TaskMange.ts
@@ -66,7 +66,12 @@
    let res:any = await findAllSdk({ userId: "", nodeId: id })
    if (res && res.success) {
      this.list1 = res.data
      this.list1 = []
      res.data.forEach(item => {
        if(item.installed) {
          this.list1.push(item)
        }
      });
    }
  }
src/api/product.ts
@@ -301,4 +301,14 @@
        url: `/saas/api-s/saasProduct/getFreeList`,
        method: 'post',
    })
}
}
//根据id查询产品
export const getProductById = (data: any) => {
    return request({
        url: `/saas/api-s/saasProduct/getProductById`,
        method: 'post',
        data
    })
}
src/assets/css/common.css
@@ -27,3 +27,12 @@
.iconfont {
  user-select: none;
}
.el-pagination .el-pager .number {
  font-size: 14px;
  font-weight: 400;
}
.el-pagination__jump {
  font-size: 14px !important;
}
src/components/Connect.vue
@@ -13,14 +13,11 @@
        </div>
        <div class="teleNum">010-84155885</div>
      </div>
      <router-link to="/connectUs">
        <div class="advice">
          <div class="title">
            <span class="iconfont">&#xe612;</span>建议反馈
          </div>
          <div class="des">您的每一条建议声音,我们都认真对待</div>
        </div>
      </router-link>
      <div class="advice" @click="jump1()">
        <div class="title"><span class="iconfont">&#xe612;</span>建议反馈</div>
        <div class="des">您的每一条建议声音,我们都认真对待</div>
      </div>
    </div>
    <div
@@ -30,7 +27,9 @@
    >
      <span class="iconfont">&#xe611;</span>联系我们
    </div>
    <div class="backToTop iconfont" v-if="showConnect" @click="backToTop">&#xe610;</div>
    <div class="backToTop iconfont" v-if="showConnect" @click="backToTop">
      &#xe610;
    </div>
  </div>
</template>
@@ -45,7 +44,7 @@
  created() {
    window.addEventListener("scroll", this.scrollListener);
  },
   destroyed() {
  destroyed() {
    window.removeEventListener("scroll", this.scrollListener);
  },
  methods: {
@@ -79,7 +78,7 @@
        _this.isShowConnectBox = false;
      }, 100);
    },
     //添加滚动监听
    //添加滚动监听
    scrollListener() {
      //页面滑动触发事件 (滚动条移动则调用是否显示返回顶部按钮事件)
      var a = document.documentElement.clientHeight; // 滚动容器的可视高
@@ -95,6 +94,9 @@
      //检查滚动条是否在顶部,控制返回顶部按钮的隐藏和显示
    },
    jump1() {
      window.open("http://smartai.com/contact");
    },
  },
};
</script>
src/components/Footer.vue
@@ -4,7 +4,7 @@
      © 2009-2019 smartai.com 版权所有 ICP证:45456566 公网安备 436435455号
    </div>
    <div class="right">
      <span class="label">关于我们</span>
      <span class="label" @click="jump">关于我们</span>
      <span class="label">法律声明</span>
      <span class="label">隐私政策</span>
      <span class="label">廉正举报</span>
@@ -22,6 +22,11 @@
      default: false,
    },
  },
  methods: {
    jump() {
      window.open("http://www.smartai.com/");
    },
  },
};
</script>
src/components/Header.vue
@@ -8,13 +8,19 @@
    <div class="right">
      <div class="link"><router-link to="/">首页</router-link></div>
      <div class="link" @click="$router.push('/connectUs')">联系我们</div>
      <div class="link">关于我们</div>
      <div class="link" @click="jump">关于我们</div>
    </div>
  </div>
</template>
<script>
export default {};
export default {
  methods: {
    jump() {
      window.open("http://www.smartai.com/");
    },
  },
};
</script>
<style scoped lang="scss">
src/components/IndexHeader.vue
@@ -49,11 +49,12 @@
        <!-- 已登录情况 -->
        <img
          class="userImg"
          src="/images/index/default.png"
          src="/images/index/8.jpg"
          alt=""
          v-if="userInfo"
          @mouseenter="showUserBox"
          @mouseleave="hiddenUserBox"
          style="border-radius: 50%"
        />
      </div>
    </div>
@@ -67,14 +68,14 @@
    >
      <div class="userName">{{ userInfo.username }}</div>
      <ul>
        <li class="money">
        <!--   <li class="money">
          <div class="label">余额</div>
          <div class="content">
            <span class="button">充值</span>
            <span class="number">¥0</span>
          </div>
        </li>
 -->
        <li class="personal">
          <div class="label">
            <router-link to="/personalCenter">个人中心</router-link>
@@ -86,19 +87,19 @@
        </li>
        <li>
          <div class="label" @click="jump(1)">订单管理</div>
          <div class="label" @click="jump(0)">订单管理</div>
        </li>
        <li>
        <!--  <li>
          <div class="label">产品续费</div>
        </li>
        </li> -->
        <li>
        <!--  <li>
          <div class="label">未读消息</div>
        </li>
        </li> -->
        <li>
          <div class="label">未支付订单</div>
          <div class="label" @click="jump(0, 1)">未支付订单</div>
        </li>
        <li>
@@ -213,7 +214,10 @@
      });
    },
    jump(id) {
    jump(id, type) {
      if (type) {
        sessionStorage.setItem("type", type);
      }
      this.$router.push({
        path: "/personalCenter",
        query: {
@@ -327,6 +331,9 @@
      .label {
        color: #3d3d3d;
        &:hover {
          color: #0065ff;
        }
      }
    }
    .right {
@@ -440,7 +447,7 @@
  top: 64px;
  padding: 0 20px;
  width: 240px;
  height: 427px;
  height: 327px;
  background-color: #fff;
  box-shadow: 0px 4px 12px rgba(96, 100, 106, 0.12);
  border-radius: 4px;
@@ -452,7 +459,7 @@
  }
  ul {
    height: 300px;
    height: 200px;
    border-top: 1px solid #e9ebee;
    border-bottom: 1px solid #e9ebee;
src/components/canvas/index.vue
@@ -635,7 +635,7 @@
  .dialog-footer {
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
src/components/giantTree/zTree/ztree.vue
@@ -264,6 +264,7 @@
          // this.clickRemove(treeNode)
          _vue.$emit("onAddDevice", treeNode.id);
        });
        btn.innerHTML = "&#xe642;";
        item.appendChild(btn);
      }
@@ -288,6 +289,7 @@
          // this.clickRemove(treeNode)
          _vue.$emit("onImport", treeNode.id);
        });
        btn.innerHTML = "&#xe643;";
        item.appendChild(btn);
      }
@@ -661,6 +663,15 @@
  top: 2px;
}
.ztree i.iconshishishipin,
.ztree i.icondaoru {
  margin-right: 8px;
  font-size: 18px;
  vertical-align: middle;
  width: 24px;
  text-align: left;
}
.ztree li a.primary {
  color: #3d68e1;
}
src/views/GB28181/components/DevList.vue
@@ -9,7 +9,11 @@
    <div class="list scroll">
      <div class="devItem" v-for="(item, index) in devList" :key="index">
        <div class="mainInfo">
          <img v-if="item.type == 1" src="/images/hashrate/集群.png" alt="" />
          <img
            v-if="item.type == 1"
            src="/images/hashrate/cluster.png"
            alt=""
          />
          <img v-else src="/images/hashrate/equipment.png" alt="" />
          <div class="right">
src/views/GB28181/components/FormArea.vue
@@ -303,7 +303,7 @@
    padding: 20px 0;
    border-top: 1px solid #e9ebee;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    .cancel {
src/views/GB28181/components/TreeArea.vue
@@ -278,7 +278,7 @@
    padding: 20px 0;
    border-top: 1px solid #e9ebee;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    .cancel {
src/views/connectUs/index.vue
@@ -37,6 +37,9 @@
      if (index == 0) {
        this.$router.push("/");
      }
      if (index == 2 || index == 4) {
        window.open("http://smartai.com/contact");
      }
    },
  },
};
src/views/equipmentManagement/equipmentDetail/components/SettingBox.vue
@@ -368,7 +368,7 @@
    right: 20px;
    bottom: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 40px;
src/views/equipmentManagement/equipmentDetail/components/UnbindBox.vue
@@ -118,7 +118,7 @@
  .btns {
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 40px;
src/views/equipmentManagement/equipmentList/components/AddBox.vue
@@ -25,74 +25,77 @@
          </div>
        </div>
        <div class="body" v-if="listType == 'cluster'">
          <div class="row" v-for="(item, index) in clusterList" :key="index">
            <div class="content">
              <div class="rowItem index">{{ index + 1 }}</div>
              <div class="rowItem name">{{ item.clusterName }}</div>
              <div class="rowItem ip">{{ item.virtualIp }}</div>
              <div class="rowItem status">
                <div v-if="!item.canAdd" class="status green">已添加</div>
                <div v-else class="status">未添加</div>
          <template v-if="clusterList.length > 0">
            <div class="row" v-for="(item, index) in clusterList" :key="index">
              <div class="content">
                <div class="rowItem index">{{ index + 1 }}</div>
                <div class="rowItem name">{{ item.clusterName }}</div>
                <div class="rowItem ip">{{ item.virtualIp }}</div>
                <div class="rowItem status">
                  <div v-if="!item.canAdd" class="status green">已添加</div>
                  <div v-else class="status">未添加</div>
                </div>
                <div class="rowItem options">
                  <!-- 添加 -->
                  <span v-if="!item.canAdd">-</span>
                  <template v-else>
                    <span
                      class="iconfont option"
                      @click="showBox('cluster', item.clusterId)"
                      >&#xe63f;</span
                    >
                    <!-- 集群详情  -->
                    <span
                      class="iconfont option"
                      @click="showChildrenLIst(index, item.clusterId)"
                      >&#xe63e;</span
                    >
                  </template>
                </div>
              </div>
              <div class="rowItem options">
                <!-- 添加 -->
                <span v-if="!item.canAdd">-</span>
                <template v-else>
                  <span
                    class="iconfont option"
                    @click="showBox('cluster', item.clusterId)"
                    >&#xe63f;</span
                  >
                  <!-- 集群详情  -->
                  <span
                    class="iconfont option"
                    @click="showChildrenLIst(index, item.clusterId)"
                    >&#xe63e;</span
                  >
                </template>
              </div>
            </div>
            <div
              class="overList"
              :class="{ isShow: showClusterChild == index }"
            >
              <el-table
                :data="overList"
                :fit="true"
                header-row-class-name="overList-head"
              <div
                class="overList"
                :class="{ isShow: showClusterChild == index }"
              >
                <el-table-column
                  label="序号"
                  type="index"
                  width="146"
                  class-name="index "
                <el-table
                  :data="overList"
                  :fit="true"
                  header-row-class-name="overList-head"
                >
                </el-table-column>
                <el-table-column
                  prop="dev_id"
                  label="设备ID"
                  width="146"
                ></el-table-column>
                  <el-table-column
                    label="序号"
                    type="index"
                    width="146"
                    class-name="index "
                  >
                  </el-table-column>
                  <el-table-column
                    prop="dev_id"
                    label="设备ID"
                    width="146"
                  ></el-table-column>
                <el-table-column
                  prop="dev_ip"
                  label="设备IP"
                  width="146"
                ></el-table-column>
                  <el-table-column
                    prop="dev_ip"
                    label="设备IP"
                    width="146"
                  ></el-table-column>
                <el-table-column
                  prop="dev_name"
                  label="设备名称"
                  width="240"
                ></el-table-column>
              </el-table>
                  <el-table-column
                    prop="dev_name"
                    label="设备名称"
                    width="240"
                  ></el-table-column>
                </el-table>
              <div class="iconfont" @click="showClusterChild = null">
                &#xe63d;
                <div class="iconfont" @click="showClusterChild = null">
                  &#xe63d;
                </div>
              </div>
            </div>
          </div>
          </template>
          <div class="empty" v-else>暂无数据</div>
        </div>
      </div>
@@ -346,6 +349,15 @@
  .clusterList {
    max-height: 507px;
    overflow-y: overlay;
    .empty {
      height: 60px;
      background-color: rgb(233, 235, 238);
      line-height: 60px;
      color: #909399;
      font-size: 14px;
      text-align: center;
    }
  }
  .tableList {
@@ -557,7 +569,7 @@
    .btns {
      margin-top: 40px;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      text-align: center;
      line-height: 32px;
      font-size: 14px;
src/views/equipmentManagement/equipmentList/components/JoinClusterBox.vue
@@ -413,7 +413,7 @@
  .btns {
    margin-top: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
src/views/equipmentManagement/equipmentList/components/QuitClusterBox.vue
@@ -142,7 +142,7 @@
  .btns {
    margin-top: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
src/views/hashrate/AlgManage/components/AlgCard.vue
@@ -128,7 +128,7 @@
    .btns {
      position: absolute;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      bottom: 10px;
      right: 10px;
src/views/hashrate/AlgManage/index.vue
@@ -10,9 +10,7 @@
        <div class="algCard" v-for="(item, index) in payAlg" :key="index">
          <img :src="item.logoUrl" alt="" draggable="false" />
          <div class="name">{{ item.productName }}</div>
          <span class="button pay" @click="toDetail(item.productName)"
            >购买</span
          >
          <span class="button pay" @click="toDetail(item.id)">购买</span>
        </div>
      </div>
@@ -34,9 +32,7 @@
            @dragstart="dragStart(item)"
          />
          <div class="name">{{ item.productName }}</div>
          <span class="button detail" @click="toDetail(item.productName)"
            >查看详情</span
          >
          <span class="button detail" @click="toDetail(item.id)">查看详情</span>
        </div>
      </div>
    </div>
@@ -53,25 +49,25 @@
        <div class="algList">
          <!-- 算法card -->
          <Card
            v-for="(alg, index) in item.sdkList"
            v-for="(alg, index) in item.sdkList1"
            :key="index"
            :alg="alg"
            :devId="item.devId"
            @unInstall="item.sdkList.splice(index, 1)"
            @unInstall="item.sdkList1.splice(index, 1)"
          ></Card>
          <!-- 拖拽存放box -->
          <div
            class="dropBox"
            v-if="dragAlg"
            @dragover="dragover($event)"
            @drop="drop(item.sdkList, item.devId)"
            @drop="drop(item.sdkList1, item.devId)"
          >
            请拖动到此处
          </div>
          <!-- 空算法情况 -->
          <div
            class="empty"
            v-if="item.sdkList && item.sdkList.length === 0 && !dragAlg"
            v-if="item.sdkList1 && item.sdkList1.length === 0 && !dragAlg"
          >
            <img src="/images/hashrate/sdkEmpty.png" alt="" />
            <div class="des">
@@ -190,6 +186,13 @@
        this.equipmentArr = [];
        res.data.forEach((item, index) => {
          if (item.sdkList) {
            let sdkList1 = [];
            item.sdkList.forEach((sdk) => {
              if (sdk.installed) {
                sdkList1.push(sdk);
              }
            });
            item.sdkList1 = sdkList1;
            this.equipmentArr.push(item);
          }
        });
@@ -255,7 +258,7 @@
        let devObj = {};
        let sdkIds = [];
        devObj.devId = dev.devId;
        dev.sdkList.forEach((sdk) => {
        dev.sdkList1.forEach((sdk) => {
          if (sdk.isUpgrade) {
            sdkIds.push(sdk.id);
          }
@@ -275,11 +278,11 @@
        });
      }
    },
    toDetail(productName) {
    toDetail(id) {
      this.$router.push({
        path: "/productDetail",
        query: {
          name: productName,
          id: id,
        },
      });
    },
src/views/hashrate/CameraManage/CameraInfo/index.vue
@@ -735,7 +735,7 @@
      .connect {
        margin-bottom: 20px;
        display: flex;
        justify-content: end;
        justify-content: flex-end;
      }
      .el-button {
@@ -862,7 +862,7 @@
  .btns {
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    margin-top: 20px;
    .delBtn {
src/views/hashrate/CameraManage/CameraRules/components/AddRuleBox.vue
@@ -253,7 +253,7 @@
  background-color: #fff;
  box-shadow: 0px 2px 16px 0px rgba(0, 43, 106, 0.25);
  z-index: 2;
  z-index: 2002;
  .title {
    box-sizing: border-box;
src/views/hashrate/CameraManage/CameraRules/components/HashrateCard.vue
@@ -1,7 +1,7 @@
<template>
  <div class="HashrateCard">
    <div class="hashrate">
      <img :src="`/images/hashrate/${title}.png`" alt="" />
      <img :src="`/images/hashrate/${image}`" alt="" />
      <div class="hashrateContent">
        <div class="label">{{ title }}</div>
        <div class="data">
@@ -56,6 +56,7 @@
    InValidCount: { type: String, default: "" },
    RunningCount: { type: String, default: "" },
    NoDeal: { type: String, default: "" },
    image: {},
  },
  data() {
    return {};
src/views/hashrate/CameraManage/CameraRules/components/RuleItem.vue
@@ -9,13 +9,22 @@
        </div>
        <div class="des">
          <div class="desItem">
            <i class="iconfont">&#xe611;</i>{{ eventName }}
            <i class="iconfont">&#xe663;</i>等级: {{ eventName }}
          </div>
          <div class="desItem">
            <i class="iconfont">&#xe611;</i>{{ timeName }}
            <i class="iconfont">&#xe662;</i>时间: {{ timeName }}
          </div>
          <div class="desItem" v-if="rule.desc">
            <i class="iconfont">&#xe611;</i>{{ rule.desc }}
          <div class="desItem">
            <i class="iconfont">&#xe664;</i>描述:
            {{ rule.desc ? rule.desc : "-" }}
          </div>
          <div class="desItem" v-if="rule.voice && rule.voice.name">
            <i class="iconfont">&#xe665;</i>声音:
            {{ rule.voice.name }}
          </div>
          <div class="desItem" v-else>
            <i class="iconfont">&#xe665;</i>声音: -
          </div>
        </div>
      </div>
@@ -292,6 +301,7 @@
    .desItem {
      margin-top: 7px;
      font-size: 13px;
      .iconfont {
        margin-right: 10px;
        font-size: 16px;
src/views/hashrate/CameraManage/CameraRules/components/SdkSettingBox.vue
@@ -1091,17 +1091,17 @@
      }
      .el-input ::v-deep {
        width: 50px;
        width: 100px;
        height: 32px;
        input {
          width: 50px;
          width: 100px;
          height: 32px;
        }
      }
      .el-select {
        width: 68px;
        width: 100px;
      }
      .font {
@@ -1128,7 +1128,7 @@
  .btns {
    position: absolute;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    align-items: center;
    left: 0;
    right: 0;
src/views/hashrate/CameraManage/CameraRules/components/TimeSlider.vue
@@ -182,11 +182,27 @@
      });
    },
    chooseEdit(data) {
      this.$prompt("请输入新的场景名称", "提示", {
      this.$prompt("请输入新的时间段名称", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
      })
        .then(({ value }) => {
          let repeat = false;
          this.VideoManageData.TimeRules.forEach((item) => {
            if (item.name === value) {
              repeat = true;
            }
          });
          console.log("aaa");
          console.log(repeat);
          if (repeat) {
            this.$notify({
              message: "名称不能重复",
              type: "warning",
            });
            return;
          }
          this.activeTabObj.name = value;
          this.save();
        })
@@ -251,14 +267,11 @@
          return;
        }
        this.$confirm(
          "此操作将永久删除该规则, 所关联的任务将会失效,是否继续?",
          {
            center: true,
            confirmButtonText: "确定",
            cancelButtonText: "取消",
          }
        )
        this.$confirm("此操作将删除该规则, 所关联的任务将会失效,是否继续?", {
          center: true,
          confirmButtonText: "确定",
          cancelButtonText: "取消",
        })
          .then(() => {
            deleteTimeRule({ id: tabId }).then((rsp) => {
              if (rsp && rsp.success) {
@@ -382,7 +395,7 @@
    padding: 0 20px;
    margin-top: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
@@ -479,7 +492,7 @@
  .btns {
    position: absolute;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    align-items: center;
    left: 0;
    right: 0;
src/views/hashrate/CameraManage/CameraRules/index.vue
@@ -25,6 +25,7 @@
            :InValidCount="`${PollData.RealTimeInvalid}`"
            :RunningCount="`${PollData.RealTimeRun}`"
            :NoDeal="`${PollData.RealTimeNoDeal}`"
            image="realTime (2).png"
          ></HashrateCard>
          <!-- 轮询算力信息 -->
@@ -36,6 +37,7 @@
            :InValidCount="`${PollData.PollInvalid}`"
            :RunningCount="`${PollData.PollRun}`"
            :NoDeal="`${PollData.PollNoDeal}`"
            image="polling.png"
          ></HashrateCard>
        </div>
      </div>
@@ -1178,7 +1180,7 @@
    .control {
      position: absolute;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      top: 20px;
      right: 20px;
@@ -1239,7 +1241,7 @@
    .control {
      position: absolute;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      top: 20px;
      right: 20px;
src/views/hashrate/HashManage/components/ClusterCard.vue
@@ -1,7 +1,7 @@
<template>
  <div class="ClusterCard">
    <div class="cardHeader">
      <img v-if="info.type == 1" src="/images/hashrate/集群.png" alt="" />
      <img v-if="info.type == 1" src="/images/hashrate/cluster.png" alt="" />
      <img v-else src="/images/hashrate/equipment.png" alt="" />
      <div class="info">
src/views/hashrate/HashManage/components/SettingBox.vue
@@ -278,7 +278,7 @@
    .btns {
      margin-top: 10px;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      text-align: center;
      line-height: 40px;
      font-size: 14px;
src/views/hashrate/HashManage/index.vue
@@ -16,12 +16,12 @@
          </div>
        </div>
        <!-- 实时算力 -->
        <HashCard :type="0" :hashrate="realTime"></HashCard>
        <HashCard :type="0" :hashrate="polling"></HashCard>
      </div>
      <div class="medium">
        <!-- 轮询算力 -->
        <HashCard class="topCard" :type="1" :hashrate="polling"></HashCard>
        <HashCard class="topCard" :type="1" :hashrate="realTime"></HashCard>
        <!-- 数据栈算力 -->
        <HashCard :type="2" :hashrate="stack"></HashCard>
      </div>
src/views/index/components/commendContent.vue
@@ -12,7 +12,7 @@
      <div class="title">{{ item.productName }}</div>
      <div class="des limitRow2">{{ item.description }}</div>
      <price :priceNew="item.priceBase ? item.priceBase : 0"></price>
      <div class="button" @click="buyProduct(item.productName)">立即购买</div>
      <div class="button" @click="buyProduct(item.id)">立即购买</div>
    </div>
  </div>
</template>
@@ -33,11 +33,11 @@
    refresh() {
      this.$emit("refresh");
    },
    buyProduct(productName) {
    buyProduct(id) {
      this.$router.push({
        path: "/productDetail",
        query: {
          name: productName,
          id: id,
        },
      });
    },
src/views/index/components/rightColumn.vue
@@ -14,7 +14,7 @@
        </li>
      </ul>
      <price :priceNew="item.priceBase"></price>
      <div class="button" @click="buyProduct(item.modelName)">立即购买</div>
      <div class="button" @click="buyProduct(item.id)">立即购买</div>
    </div>
  </div>
</template>
@@ -44,11 +44,11 @@
    }
  },
  methods: {
    buyProduct(modelName) {
    buyProduct(id) {
      this.$router.push({
        path: "/productDetail",
        query: {
          name: modelName,
          id: id,
        },
      });
    },
src/views/index/components/rightRrid.vue
@@ -9,7 +9,7 @@
        {{ item.description }}
      </div>
      <price :priceNew="item.priceBase"></price>
      <div class="button" @click="buyProduct(item.modelName)">立即购买</div>
      <div class="button" @click="buyProduct(item.id)">立即购买</div>
    </div>
  </div>
</template>
@@ -39,11 +39,11 @@
    }
  },
  methods: {
    buyProduct(modelName) {
    buyProduct(id) {
      this.$router.push({
        path: "/productDetail",
        query: {
          name: modelName,
          id: id,
        },
      });
    },
src/views/index/components/rightTabs.vue
@@ -110,7 +110,7 @@
      display: flex;
      height: 300px;
      .left {
        margin-top: 114px;
        margin-top: 76px;
        margin-left: 20px;
        margin-right: 30px;
        width: 195px;
@@ -130,7 +130,7 @@
      }
      .middle {
        margin-top: 55px;
        margin-top: 16px;
        margin-right: 19px;
        width: 404px;
        height: 100%;
@@ -188,7 +188,7 @@
      bottom: 20px;
      width: 100%;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      .question {
        margin-right: 20px;
src/views/index/components/userCard.vue
@@ -1,7 +1,8 @@
<template>
  <div class="userCard">
    <div class="profile">
      <img src="/images/index/default.png" alt="" />
      <img v-if="!userInfo" src="/images/index/default.png" alt="" />
      <img v-else src="/images/index/8.jpg" style="border-radius: 50%" alt="" />
    </div>
    <div class="notification" v-if="!userInfo">
      Hi!请
@@ -25,7 +26,7 @@
<script>
export default {
  props: {
    userBuyInfo:Object,
    userBuyInfo: Object,
    userCardArr: {
      type: Array,
      default: () => {
@@ -34,14 +35,14 @@
            num: "_",
            label: "待付款",
          },
          {
          /*   {
            num: "_",
            label: "待续费",
          },
          {
            num: "_",
            label: "消息中心",
          },
          }, */
        ];
      },
    },
src/views/index/index.vue
@@ -153,7 +153,7 @@
        {
          img: "/images/index/beforeSell.png",
          title: "售前咨询",
          des: "致电0315-2233066,领取您的专属权益",
          des: "致电010-84155885,领取您的专属权益",
          router: "/",
        },
        {
@@ -214,154 +214,53 @@
          typeId: 2,
          pic: "/images/index/modelbgc.png",
          name: "边缘计算设备",
          desc:
            "一种部署在近场侧的高可用的软硬一体产品,提升应用程序的快速响应能力、节省带宽流量成本",
          desc: "一种部署在近场侧的高可用的软硬一体产品,提升应用程序的快速响应能力、节省带宽流量成本",
          product: [
            {
              name: "边缘计算设备1",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              name: "高性能边缘计算设备",
              title: "NVIDIA Jetson Xavier NX AI边缘计算盒子",
              des: "系统尺寸小巧,安装灵活,接口丰富,具备灵活的扩展能力。可广泛应用于制造、铁路、督察、环保、智慧城市、医疗保健和生命科学、智能机器等领域。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                    "软硬一体,预装了贝思科自研的爽灵企业级AI操作系统",
                    "开箱即用,助力企业快速开启AI应用的构建",
                    "开放兼容,适配当前主流硬件平台x86、ARM、AI芯片等",
                    "工业级设计,高抗震,适应严酷工业环境",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                    "CPU:6-core NVIDIA Carmel ARM®v8.2 64-bit CPU 6MB L2 + 4MB L3",
                    "GPU:384-core NVIDIA VoltaTM GPU with 48 Tensor Cores",
                  ],
                },
              ],
              img: "/images/index/equipment.png",
            },
            {
              name: "边缘计算设备2",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              name: "低功耗边缘计算设备",
              title: "Jetson AGX Xavier AI边缘计算盒子",
              des: "此产品搭载Jetson AGX Xavier核心模块,预装了贝思科自研的—爽灵企业级AI操作系统,能以30W的低功耗提供高达321Tops的实时推理能力。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                    "软硬一体,预装了贝思科自研的爽灵企业级AI操作系统",
                    "开箱即用,助力企业快速开启AI应用的构建",
                    "开放兼容,适配当前主流硬件平台x86、ARM、AI芯片等",
                    "工业级设计,高抗震,适应严酷工业环境",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                  ],
                },
              ],
              img: "/images/index/equipment.png",
            },
            {
              name: "边缘计算设备3",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                  ],
                },
              ],
              img: "/images/index/equipment.png",
            },
            {
              name: "边缘计算设备4",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                  ],
                },
              ],
              img: "/images/index/equipment.png",
            },
            {
              name: "边缘计算设备5",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                  ],
                },
              ],
              img: "/images/index/equipment.png",
            },
            {
              name: "边缘计算设备6",
              title: "LE-V-S003 高性能边缘计算主机",
              des:
                "专为高性能视频应用打造,强悍的双志强处理器,轻松应对高算力应用场景的需求。",
              content: [
                {
                  key: "特点",
                  value: [
                    "搭载两颗高性能志强处理器,可提供高达64T的凶猛算力",
                    "Server系列,具备单台与集群服务",
                    "支持算力虚拟化管控,高稳定性单机热备",
                  ],
                },
                {
                  key: "配置",
                  value: [
                    "英特尔 志强 Silver 4114 10核处理器 x 2",
                    "64GB 内存 (16GB x 4) + 480GB SSD 存储 + 8TB HDD 存储 千兆 LAN x 4",
                    "CPU:Volta 512 CUDA Cores + 64 Tensor Cores + 2 NVDLA10TFLOPs(FP16) 32TOPs(INT8)",
                    "GPU:8x Carmel ARM V8.2",
                  ],
                },
              ],
@@ -383,14 +282,14 @@
            num: res.data.needPay,
            label: "待付款",
          },
          {
          /* {
            num: res.data.needRenewal,
            label: "待续费",
          },
          {
            num: "_",
            label: "消息中心",
          },
          }, */
        ];
      });
    },
src/views/manageCenter/index.vue
@@ -872,6 +872,13 @@
        return item == route.permission;
      });
      if (val) {
        if (route.path === "/search") {
          const { href } = this.$router.resolve({
            path: "/search",
          });
          window.open(href, "_blank");
          return;
        }
        this.$router.push(route.path);
      } else if (!userInfo.parentId) {
        this.$router.push(route.openPath);
@@ -1234,7 +1241,7 @@
      .item {
        display: flex;
        justify-content: end;
        justify-content: flex-end;
        align-items: center;
        .label {
src/views/personalCenter/components/AddBox.vue
@@ -571,7 +571,7 @@
    .btns {
      margin-top: 40px;
      display: flex;
      justify-content: end;
      justify-content: flex-end;
      text-align: center;
      line-height: 32px;
      font-size: 14px;
src/views/personalCenter/components/Content.vue
@@ -1,10 +1,12 @@
<template>
  <div class="whiteContent Content">
    <LeftMenu @mChange="mChange"> </LeftMenu>
    <div class="right-content">
      <SubAccount v-if="activeIndex == 4"></SubAccount>
      <BasicInfo v-if="activeIndex == 3" @gotolist="gotolist"></BasicInfo>
      <OrderMng v-if="activeIndex == 1"></OrderMng>
    <div class="heart">
      <LeftMenu @mChange="mChange"> </LeftMenu>
      <div class="right-content">
        <SubAccount v-if="activeIndex == 2"></SubAccount>
        <BasicInfo v-if="activeIndex == 1" @gotolist="gotolist"></BasicInfo>
        <OrderMng v-if="activeIndex == 0"></OrderMng>
      </div>
    </div>
  </div>
</template>
@@ -68,6 +70,11 @@
  margin: 30px auto;
  display: flex;
  justify-content: center;
  .heart {
    display: flex;
  }
  .left-menu {
    margin-right: 24px;
  }
@@ -80,7 +87,7 @@
    min-height: 856px;
    box-sizing: border-box;
    background-color: #fff;
    width: 1196px;
    width: 1036px;
  }
}
</style>
src/views/personalCenter/components/JoinClusterBox.vue
@@ -321,7 +321,7 @@
  .btns {
    margin-top: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
src/views/personalCenter/components/LeftMenu.vue
@@ -31,9 +31,9 @@
  data() {
    return {
      menuList: [
        { name: "账户总览" },
        // { name: "账户总览" },
        { name: "订单管理" },
        { name: "消息中心" },
        // { name: "消息中心" },
        { name: "基本资料" },
        { name: "子账户管理" },
      ],
src/views/personalCenter/components/OrderMng.vue
@@ -5,7 +5,11 @@
      <div class="left">
        <div class="id">
          订单编号/产品名称
          <el-input v-model="inputText" placeholder="请输入"></el-input>
          <el-input
            style="width: 140px"
            v-model="inputText"
            placeholder="请输入"
          ></el-input>
        </div>
        <div class="cluster">
@@ -18,7 +22,25 @@
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            :default-time="['00:00:00', '23:59:59']"
            style="width: 212px"
          ></el-date-picker>
        </div>
        <div class="id">
          状态
          <el-select
            class="selectStatus"
            v-model="status"
            @change="searchingBtn"
          >
            <el-option label="全部" :value="-10"></el-option>
            <el-option label="已取消" :value="-1"></el-option>
            <el-option label="未下单" :value="0"></el-option>
            <el-option label="待支付" :value="1"></el-option>
            <el-option label="已支付" :value="2"></el-option>
            <el-option label="审核中" :value="11"></el-option>
            <el-option label="已驳回" :value="12"></el-option>
          </el-select>
        </div>
      </div>
@@ -60,8 +82,15 @@
          prop="createTime"
          label="创建时间"
          show-overflow-tooltip
          sortable
          width="180"
        ></el-table-column>
        <el-table-column prop="orderMoney" label="订单金额"></el-table-column>
        <el-table-column
          prop="orderMoney"
          label="订单金额(元)"
          sortable
          width="140"
        ></el-table-column>
        <el-table-column label="支付方式">
          <template slot-scope="scope">
            <div v-if="scope.row.payMethod == 0">线下汇款</div>
@@ -69,11 +98,27 @@
            <div v-if="scope.row.payMethod == 2">微信</div>
          </template>
        </el-table-column>
        <el-table-column prop="status" label="订单状态"></el-table-column>
        <el-table-column
          prop="status"
          label="订单状态"
          sortable
        ></el-table-column>
        <el-table-column label="操作">
        <el-table-column label="操作" width="140">
          <template slot-scope="scope">
            <span class="option" @click="showDetail(scope.row)">订单详情</span>
            <span class="option" @click="showDetail(scope.row)">详情</span>
            <span
              class="option"
              v-if="scope.row.status === '待支付'"
              @click="showPayBox(scope.row.id)"
              >支付</span
            >
            <span
              class="option"
              v-if="scope.row.status === '待支付'"
              @click="cancel(scope.row.id)"
              >取消</span
            >
          </template>
        </el-table-column>
      </el-table>
@@ -90,6 +135,12 @@
        ></el-pagination>
      </div>
    </div>
    <ConfirmOrder
      v-if="showOrder"
      :orderId="orderId"
      @close="closeBox"
    ></ConfirmOrder>
  </div>
  <div class="order-detail" v-else>
@@ -237,20 +288,25 @@
</template>
<script>
import { getOrders, getAuthFile } from "@/api/order";
import { getOrders, getAuthFile, cancelOrder } from "@/api/order";
import { getOrderById } from "@/api/product";
import ConfirmOrder from "@/views/productDetail/components/ConfirmOrder";
export default {
  components: {},
  components: {
    ConfirmOrder,
  },
  created() {
    let type = sessionStorage.getItem("type");
    if (type) {
      this.status = +type;
      sessionStorage.removeItem("type");
    }
    this.searchingBtn();
  },
  data() {
    return {
      searchTime: [
        this.$moment().format("YYYY-MM-DD 00:00:00"),
        this.$moment().format("YYYY-MM-DD HH:mm:ss"),
      ], //搜索时间
      searchTime: [], //搜索时间
      page: 1,
      size: 10, //分页相关
      inputText: "", //输入框内容
@@ -277,6 +333,9 @@
      form: {}, //处理中的设备
      isShowDetail: false,
      showTable: false,
      orderId: "",
      showOrder: false,
      status: -10,
    };
  },
  methods: {
@@ -291,7 +350,7 @@
        productBaseId: "0",
        orderName: "",
        orderType: "",
        status: 0,
        status: this.status,
      };
      getOrders(param)
        .then((res) => {
@@ -397,7 +456,7 @@
    clearSearch() {
      debugger;
      this.searchTime = this.getDateInit();
      this.searchTime = [];
      debugger;
      this.inputText = "";
      this.searchingBtn();
@@ -551,6 +610,30 @@
      window.URL.revokeObjectURL(Temp);
    },
    showPayBox(id) {
      this.showOrder = true;
      this.orderId = id;
    },
    cancel(id) {
      cancelOrder("/saas/api-s/saasOrder/cancel/" + id).then((res) => {
        if (res && res.success) {
          this.$notify({
            type: "success",
            message: "订单取消成功",
            duration: 2500,
            offset: 57,
          });
          this.searchingBtn();
        }
      });
    },
    closeBox() {
      this.showOrder = false;
      this.searchingBtn();
    },
  },
  mounted() {},
};
@@ -586,7 +669,7 @@
    color: #fff;
    background: #0065ff;
    border-radius: 3px;
    margin-right: 20px;
    margin-right: 10px;
  }
  .right {
    display: flex;
@@ -602,7 +685,7 @@
    color: #fff;
    align-items: center;
    justify-content: center;
    margin-left: 195px;
    margin-left: 20px;
    cursor: pointer;
  }
  .resetBtn {
@@ -663,6 +746,12 @@
      }
    }
    .selectStatus {
      margin: 0 10px;
      margin-right: 30px;
      width: 100px;
    }
    .el-input ::v-deep {
      width: 200px;
      margin-left: 10px;
src/views/personalCenter/components/QuitClusterBox.vue
@@ -110,7 +110,7 @@
  .btns {
    margin-top: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 32px;
    font-size: 14px;
src/views/personalCenter/components/SubAccount.vue
@@ -10,7 +10,11 @@
        <div class="cluster">
          授权时长
          <el-select v-model="timeLength" placeholder="请选择">
          <el-select
            @change="findUserList"
            v-model="timeLength"
            placeholder="请选择"
          >
            <el-option
              v-for="item in durationArr"
              :key="item.value"
@@ -33,10 +37,10 @@
        <span class="iconfont">&#xe614;</span>
        <span>添加子账号</span>
      </div>
      <div class="button export" @click="isShowRelate = true">
      <!-- <div class="button export" @click="isShowRelate = true">
        <span class="iconfont">&#xe614;</span>
        <span>关联子账号</span>
      </div>
      </div> -->
    </div>
    <div class="table-area">
@@ -52,14 +56,19 @@
            scope.$index + 1 + (page - 1) * size
          }}</template>
        </el-table-column>
        <el-table-column
        <!--  <el-table-column
          prop="trueName"
          label="姓名"
          show-overflow-tooltip
        ></el-table-column>
        ></el-table-column> -->
        <el-table-column
          prop="username"
          label="用户名"
          show-overflow-tooltip
        ></el-table-column>
        <el-table-column
          prop="phoneNum"
          label="手机号"
          show-overflow-tooltip
        ></el-table-column>
        <el-table-column prop="userType" label="用户类型">
@@ -291,15 +300,15 @@
      durationArr: [
        {
          value: 1,
          label: "一年",
          label: "1年",
        },
        {
          value: 2,
          label: "两年",
          label: "2年",
        },
        {
          value: 3,
          label: "三年",
          label: "3年",
        },
      ], //所属集群下拉框
      timeLength: null, //选中的授权时长
@@ -318,7 +327,7 @@
        isChangePwd: false,
        industryId: "",
        address: [],
        authDuration: "",
        authDuration: 1,
        areaId: "",
        provinceId: "",
        menuIds: [],
@@ -401,7 +410,7 @@
        industryId: "",
        areaId: "",
        provinceId: "",
        authDuration: "",
        authDuration: 1,
      };
      this.$nextTick(() => {
        this.$refs.treeMenus.setCheckedKeys([]);
@@ -436,6 +445,15 @@
            menuIds: this.ruleForm.menuIds,
            dataIds: this.ruleForm.dataIds,
          };
          if (typeof json.areaId === "string") {
            delete json.areaId;
          }
          if (typeof json.authDuration === "string") {
            delete json.authDuration;
          }
          saveSubUser(json)
            .then((res) => {
              if (res.success) {
@@ -460,6 +478,7 @@
        inputText: this.inputText,
        page: this.page,
        size: this.size,
        authDuration: this.timeLength,
      })
        .then((res) => {
          if (res.success) {
src/views/product/components/productCard.vue
@@ -45,7 +45,7 @@
      this.$router.push({
        path: "/productDetail",
        query: {
          name: this.data.productName,
          id: this.data.id,
        },
      });
    },
@@ -92,12 +92,13 @@
    display: flex;
    img {
      margin: 0 10px;
      margin-left: 10px;
      width: 60px;
      height: 60px;
    }
    .right {
      margin-left: 10px;
      .name {
        margin-bottom: 10px;
        font-size: 16px;
src/views/productDetail/components/ConfirmOrder.vue
@@ -17,9 +17,10 @@
          <el-table-column
            prop="productName"
            label="产品名称"
            width="200"
          ></el-table-column>
          <el-table-column label="配置详情">
          <el-table-column label="配置详情" width="250">
            <template slot-scope="scope">
              <div style="text-align: left">
                <p v-if="scope.row.moduleNames.length > 0">
@@ -55,7 +56,7 @@
            </template>
          </el-table-column>
          <el-table-column prop="devCount" label="购买数量"></el-table-column>
          <el-table-column pro="devIdList" label="绑定设备">
          <el-table-column pro="devIdList" label="绑定设备" width="250">
            <template slot-scope="scope">
              <div>
                <p v-for="item in scope.row.devIdList" :key="item">
@@ -65,7 +66,11 @@
            </template>
          </el-table-column>
          <el-table-column label="优惠" prop="discount"></el-table-column>
          <el-table-column label="小计" prop="productPrice"></el-table-column>
          <el-table-column label="小计">
            <template>
              {{ orderInfo.orderMoney }}
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="title">支付方式</div>
@@ -100,7 +105,7 @@
      <div class="total">
        <div class="money">
          应付款<span class="number">{{ sum }}元</span>
          应付款<span class="number">{{ orderInfo.orderMoney }}元</span>
        </div>
        <div class="policy">
@@ -134,7 +139,11 @@
      <OffpayInstruct
        v-if="showOffpayInstruct"
        @close="showOffpayInstruct = false"
        :offerData="{ username: username, sum: sum, orderId: orderId }"
        :offerData="{
          username: username,
          sum: orderInfo.orderMoney,
          orderId: orderId,
        }"
        @confirm="confirmOrder"
      ></OffpayInstruct>
      <UploadBox
@@ -142,6 +151,7 @@
        @close="showUploadBox = false"
        @back="back"
        v-if="showUploadBox"
        @closeAll="closeAll"
      >
      </UploadBox>
    </div>
@@ -178,21 +188,14 @@
      showUploadBox: false,
    };
  },
  computed: {
    sum() {
      let sum = 0;
      sum = this.orders.reduce((prev, next) => prev + next.productPrice, 0);
      return this.numeral(sum).format("0,0.00");
    },
  },
  mounted() {
    this.getResumeList();
    this.username = JSON.parse(sessionStorage.getItem("userInfo")).username;
  },
  methods: {
    assureOnlinePay() {
      this.onlinePayVisible = false;
      this.$router.replace("/Layout/ManageOrder");
      this.$emit("close");
      this.$router.replace("/personalCenter?id=0");
    },
    getResumeList() {
      getOrderById(this.orderId).then((res) => {
@@ -264,6 +267,10 @@
      }
    },
    close() {
      this.$emit("close");
    },
    closeAll() {
      this.showUploadBox = false;
      this.$emit("close");
    },
    confirmOrder() {
@@ -380,7 +387,7 @@
      .policy {
        margin-top: 10px;
        display: flex;
        justify-content: end;
        justify-content: flex-end;
        align-items: center;
        font-size: 14px;
@@ -400,7 +407,7 @@
    right: 20px;
    bottom: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 40px;
src/views/productDetail/components/OffpayInstruct.vue
@@ -142,7 +142,7 @@
    right: 20px;
    bottom: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 40px;
src/views/productDetail/components/PayCard.vue
@@ -19,22 +19,31 @@
      <div class="title">
        <div class="name">{{ data.productName }}</div>
        <div class="tagList">
          <span class="tag" v-for="(name, index) in labels" :key="index">{{
          <!-- <span class="tag" v-for="(name, index) in labels" :key="index">{{
            name
          }}</span>
          }}</span> -->
          <span class="tag red" v-if="data.productType == 1">软件</span>
          <span class="tag orange" v-if="data.productType == 4">应用</span>
          <span class="tag lightBlue" v-if="data.productType == 3">SDK</span>
          <span class="tag" v-if="data.productType == 2">软硬一体</span>
          <span class="tag blue" v-if="data.productType == 5">产品密钥</span>
        </div>
      </div>
      <div class="des">{{ data.description }}</div>
      <div class="typeVersion">
        <div class="label">型号:</div>
        <div class="typeVersionContent">{{ data.productModel }}</div>
        <div class="typeVersionContent">
          {{ data.productModel ? data.productModel : "-" }}
        </div>
        <div class="label">版本:</div>
        <div class="typeVersionContent">{{ data.productVersion }}</div>
        <div class="typeVersionContent">
          {{ data.productVersion ? data.productVersion : "-" }}
        </div>
      </div>
      <div class="price">
        <div class="label">价格</div>
        <div class="number">¥{{ data.priceBase }}.00</div>
        <div class="number">¥{{ this.totalMoney }}.00</div>
      </div>
      <div class="row">
@@ -299,9 +308,9 @@
      </div>
      <div class="btns">
        <div class="button addCar">加入购物车</div>
        <!-- <div class="button addCar">加入购物车</div> -->
        <div class="button pay" @click="confirmNow">
          {{ data.priceBase ? "立即购买" : "免费试用" }}
          {{ totalMoney ? "立即购买" : "免费试用" }}
        </div>
      </div>
    </div>
@@ -372,6 +381,28 @@
      showOrder: false,
      orderId: "",
    };
  },
  computed: {
    totalMoney() {
      let modulesPrice = 0;
      this.cartItem.moduleIds.forEach((id) => {
        this.data.modulePriceSet.forEach((module) => {
          if (module.moduleId === id) {
            modulesPrice += module.modulePrice;
          }
        });
      });
      let priceSingle =
        this.data.priceBase +
        this.data.authPrice * this.cartItem.authCount +
        this.data.chUnitPrice * this.cartItem.chCount +
        modulesPrice;
      console.log(this.data);
      return priceSingle * this.cartItem.devCount * this.cartItem.timeLength;
    },
  },
  methods: {
    getInfo() {
@@ -453,8 +484,6 @@
      this.cartItem.timeLength = year;
    },
    selectModel(index) {
      console.log("-----");
      console.log(this.isSmartCalDot);
      if (this.isSmartCalDot) {
        return;
      }
@@ -534,7 +563,7 @@
        },
      ];
      resumeOrder({
        orderMoney: this.numeral(this.sum).value(),
        orderMoney: this.numeral(this.totalMoney).value(),
        payMethod: 0,
        products,
        status: 0,
@@ -543,13 +572,13 @@
        if (res.success) {
          this.orderId = res.data.orderId;
          if (this.data.priceBase == 0) {
          if (this.totalMoney == 0) {
            resumePay({ orderId: this.orderId, payMethod: 5 }).then((res) => {
              if (res.success) {
                this.$router.push({
                  path: "/personalCenter",
                  query: {
                    id: 1,
                    id: 0,
                  },
                });
                this.$notify({
@@ -630,6 +659,26 @@
          padding: 2px 5px;
          border: 1px solid #ff5033;
          color: #ff5033;
          &.red {
            color: #ff4f32;
            border-color: #ff4f32;
          }
          &.orange {
            color: #ff9500;
            border-color: #ff9500;
          }
          &.lightBlue {
            color: #00bee7;
            border-color: #00bee7;
          }
          &.blue {
            color: #0064ff;
            border-color: #0064ff;
          }
        }
      }
    }
@@ -770,6 +819,10 @@
        .el-tag {
          margin-top: 0;
        }
        .el-select__tags-text {
          color: #999;
        }
      }
    }
src/views/productDetail/components/UploadBox.vue
@@ -65,7 +65,7 @@
            <el-image
              class="preview"
              v-if="item.appendix"
              :src="`http://${item.appendix}`"
              :src="`/httpImage/${item.appendix}`"
              fit="contain"
            ></el-image>
            <el-upload
@@ -208,10 +208,16 @@
                  duration: 2500,
                  offset: 57,
                });
                if (this.$route.path === "/personalCenter") {
                  this.$emit("closeAll");
                  return;
                }
                this.$router.push({
                  path: "/personalCenter",
                  query: {
                    id: 1,
                    id: 0,
                  },
                });
              }
@@ -288,7 +294,7 @@
    right: 20px;
    bottom: 20px;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    text-align: center;
    line-height: 40px;
src/views/productDetail/index.vue
@@ -27,7 +27,7 @@
import PayCard from "@/views/productDetail/components/PayCard";
import Footer from "@/components/Footer";
import Function from "@/views/productDetail/components/Function";
import { findAllCenterProduct } from "@/api/product";
import { getProductById } from "@/api/product";
export default {
  created() {
    this.getProduct();
@@ -49,16 +49,10 @@
  methods: {
    getProduct() {
      let param = {
        page: 1,
        size: 1,
        inputText: this.$route.query.name,
        archType: "",
        gpuType: "",
        publishStatus: 1,
        productType: 0,
        id: this.$route.query.id,
      };
      findAllCenterProduct(param).then((res) => {
        this.data.data = res.data.list[0];
      getProductById(param).then((res) => {
        this.data.data = res.data;
        this.showData = true;
      });
    },
src/views/register/components/SelectType.vue
@@ -177,6 +177,14 @@
          });
          this.info.provinceId = this.info.address[0];
          this.info.areaId = this.info.address[1];
          for (const key in this.info) {
            if (this.info[key] === "") {
              delete this.info[key];
            }
          }
          if (this.info.userType == 2) {
            this.info.trueName = this.info.companyName;
          }
          entireUserInfo(this.info)
            .then(() => {
              this.loading.close();
@@ -193,11 +201,6 @@
            })
            .catch((err) => {
              this.loading.close();
              //后门
              this.$router.push({
                path: "/register/success",
                query: { info: this.userInfo },
              });
              this.$notify({
                type: "error",
                message: err.msg,
@@ -419,5 +422,9 @@
  .el-scrollbar__view {
    overflow: hidden;
  }
  .el-cascader-node__postfix::before {
    display: none !important;
  }
}
</style>
src/views/register/index.vue
@@ -78,6 +78,16 @@
  background-size: 100% 100%;
  font-size: 14px;
  .Header ::v-deep {
    .right .link {
      color: #3d3d3d;
      &:hover {
        color: #0065ff;
      }
    }
  }
  .registerHeart {
    margin: 0 auto;
    width: 1280px;
src/views/search/components/Banner.vue
@@ -19,7 +19,10 @@
        userId: JSON.parse(sessionStorage.getItem("userInfo")).id,
        menuId: "89098e9f-baaa-4a69-9e9b-26444dd69ff6",
      });
      this.$router.push("/search");
      const { href } = this.$router.resolve({
        path: "/search",
      });
      window.open(href, "_blank");
    },
  },
};
src/views/search/index.vue
@@ -132,7 +132,6 @@
  height: calc(100vh - 130px);
}
.left-tree-box .el-tabs--border-card .el-tabs__header {
  display: block;
  margin-bottom: 10px;
}
.column {
src/views/trialCenter/components/SdkItem.vue
@@ -7,7 +7,7 @@
    <div class="des limitRow2">
      {{ sdk.description }}
    </div>
    <div class="button" @click="buyProduct(sdk.productName)">立即试用</div>
    <div class="button" @click="buyProduct(sdk.id)">立即试用</div>
  </div>
</template>
@@ -17,11 +17,11 @@
    sdk: {},
  },
  methods: {
    buyProduct(productName) {
    buyProduct(id) {
      this.$router.push({
        path: "/productDetail",
        query: {
          name: productName,
          id: id,
        },
      });
    },
vue.config.js
@@ -14,8 +14,13 @@
    proxy: {
      "/api": {
        // target: "http://192.168.20.10:7004",
<<<<<<< HEAD
        // target: "http://192.168.20.174:7070",
        target: "http://192.168.20.115:7070",
=======
        target: "http://192.168.20.115:7070",
        // target: "http://192.168.20.235:7070",
>>>>>>> bug修复
        //  target: "http://192.168.20.117:7080",
        // secure: false,
        changeOrigin: true,
@@ -26,6 +31,10 @@
        // target: "http://222.128.87.51:7003",
        // target: "http://192.168.20.10:7009",
        // target: "http://192.168.20.189:7009",
<<<<<<< HEAD
=======
        // target: "http://192.168.20.235:7070",
>>>>>>> bug修复
        target: "http://192.168.20.115:7070",
        changeOrigin: true, //开启代理