| | |
| | | |
| | | 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) |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | |
| | | 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 |
| | | }) |
| | | } |
| | | |
| | |
| | | .iconfont { |
| | | user-select: none; |
| | | } |
| | | |
| | | .el-pagination .el-pager .number { |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | } |
| | | |
| | | .el-pagination__jump { |
| | | font-size: 14px !important; |
| | | } |
| | |
| | | </div> |
| | | <div class="teleNum">010-84155885</div> |
| | | </div> |
| | | <router-link to="/connectUs"> |
| | | <div class="advice"> |
| | | <div class="title"> |
| | | <span class="iconfont"></span>建议反馈 |
| | | </div> |
| | | <div class="des">您的每一条建议声音,我们都认真对待</div> |
| | | </div> |
| | | </router-link> |
| | | |
| | | <div class="advice" @click="jump1()"> |
| | | <div class="title"><span class="iconfont"></span>建议反馈</div> |
| | | <div class="des">您的每一条建议声音,我们都认真对待</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div |
| | |
| | | > |
| | | <span class="iconfont"></span>联系我们 |
| | | </div> |
| | | <div class="backToTop iconfont" v-if="showConnect" @click="backToTop"></div> |
| | | <div class="backToTop iconfont" v-if="showConnect" @click="backToTop"> |
| | |  |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | created() { |
| | | window.addEventListener("scroll", this.scrollListener); |
| | | }, |
| | | destroyed() { |
| | | destroyed() { |
| | | window.removeEventListener("scroll", this.scrollListener); |
| | | }, |
| | | methods: { |
| | |
| | | _this.isShowConnectBox = false; |
| | | }, 100); |
| | | }, |
| | | //添加滚动监听 |
| | | //添加滚动监听 |
| | | scrollListener() { |
| | | //页面滑动触发事件 (滚动条移动则调用是否显示返回顶部按钮事件) |
| | | var a = document.documentElement.clientHeight; // 滚动容器的可视高 |
| | |
| | | |
| | | //检查滚动条是否在顶部,控制返回顶部按钮的隐藏和显示 |
| | | }, |
| | | jump1() { |
| | | window.open("http://smartai.com/contact"); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | © 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> |
| | |
| | | default: false, |
| | | }, |
| | | }, |
| | | methods: { |
| | | jump() { |
| | | window.open("http://www.smartai.com/"); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | |
| | | <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"> |
| | |
| | | <!-- 已登录情况 --> |
| | | <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> |
| | |
| | | > |
| | | <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> |
| | |
| | | </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> |
| | |
| | | }); |
| | | }, |
| | | |
| | | jump(id) { |
| | | jump(id, type) { |
| | | if (type) { |
| | | sessionStorage.setItem("type", type); |
| | | } |
| | | this.$router.push({ |
| | | path: "/personalCenter", |
| | | query: { |
| | |
| | | |
| | | .label { |
| | | color: #3d3d3d; |
| | | &:hover { |
| | | color: #0065ff; |
| | | } |
| | | } |
| | | } |
| | | .right { |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | ul { |
| | | height: 300px; |
| | | height: 200px; |
| | | border-top: 1px solid #e9ebee; |
| | | border-bottom: 1px solid #e9ebee; |
| | | |
| | |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onAddDevice", treeNode.id); |
| | | }); |
| | | btn.innerHTML = ""; |
| | | |
| | | item.appendChild(btn); |
| | | } |
| | |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onImport", treeNode.id); |
| | | }); |
| | | btn.innerHTML = ""; |
| | | |
| | | item.appendChild(btn); |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | <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"> |
| | |
| | | padding: 20px 0; |
| | | border-top: 1px solid #e9ebee; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | |
| | | .cancel { |
| | |
| | | padding: 20px 0; |
| | | border-top: 1px solid #e9ebee; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | |
| | | .cancel { |
| | |
| | | if (index == 0) { |
| | | this.$router.push("/"); |
| | | } |
| | | if (index == 2 || index == 4) { |
| | | window.open("http://smartai.com/contact"); |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | right: 20px; |
| | | bottom: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | |
| | |
| | | |
| | | .btns { |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | |
| | |
| | | </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)" |
| | | ></span |
| | | > |
| | | <!-- 集群详情 --> |
| | | <span |
| | | class="iconfont option" |
| | | @click="showChildrenLIst(index, item.clusterId)" |
| | | ></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)" |
| | | ></span |
| | | > |
| | | <!-- 集群详情 --> |
| | | <span |
| | | class="iconfont option" |
| | | @click="showChildrenLIst(index, item.clusterId)" |
| | | ></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"> |
| | |  |
| | | <div class="iconfont" @click="showClusterChild = null"> |
| | |  |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <div class="empty" v-else>暂无数据</div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | .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 { |
| | |
| | | .btns { |
| | | margin-top: 40px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | .btns { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | .btns { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | .btns { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | bottom: 10px; |
| | | right: 10px; |
| | | |
| | |
| | | <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> |
| | | |
| | |
| | | @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> |
| | |
| | | <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"> |
| | |
| | | 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); |
| | | } |
| | | }); |
| | |
| | | let devObj = {}; |
| | | let sdkIds = []; |
| | | devObj.devId = dev.devId; |
| | | dev.sdkList.forEach((sdk) => { |
| | | dev.sdkList1.forEach((sdk) => { |
| | | if (sdk.isUpgrade) { |
| | | sdkIds.push(sdk.id); |
| | | } |
| | |
| | | }); |
| | | } |
| | | }, |
| | | toDetail(productName) { |
| | | toDetail(id) { |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: productName, |
| | | id: id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | .connect { |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .el-button { |
| | |
| | | |
| | | .btns { |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | margin-top: 20px; |
| | | |
| | | .delBtn { |
| | |
| | | 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; |
| | |
| | | <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"> |
| | |
| | | InValidCount: { type: String, default: "" }, |
| | | RunningCount: { type: String, default: "" }, |
| | | NoDeal: { type: String, default: "" }, |
| | | image: {}, |
| | | }, |
| | | data() { |
| | | return {}; |
| | |
| | | </div> |
| | | <div class="des"> |
| | | <div class="desItem"> |
| | | <i class="iconfont"></i>{{ eventName }} |
| | | <i class="iconfont"></i>等级: {{ eventName }} |
| | | </div> |
| | | <div class="desItem"> |
| | | <i class="iconfont"></i>{{ timeName }} |
| | | <i class="iconfont"></i>时间: {{ timeName }} |
| | | </div> |
| | | <div class="desItem" v-if="rule.desc"> |
| | | <i class="iconfont"></i>{{ rule.desc }} |
| | | <div class="desItem"> |
| | | <i class="iconfont"></i>描述: |
| | | {{ rule.desc ? rule.desc : "-" }} |
| | | </div> |
| | | <div class="desItem" v-if="rule.voice && rule.voice.name"> |
| | | <i class="iconfont"></i>声音: |
| | | {{ rule.voice.name }} |
| | | </div> |
| | | |
| | | <div class="desItem" v-else> |
| | | <i class="iconfont"></i>声音: - |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | .desItem { |
| | | margin-top: 7px; |
| | | font-size: 13px; |
| | | .iconfont { |
| | | margin-right: 10px; |
| | | font-size: 16px; |
| | |
| | | } |
| | | |
| | | .el-input ::v-deep { |
| | | width: 50px; |
| | | width: 100px; |
| | | height: 32px; |
| | | |
| | | input { |
| | | width: 50px; |
| | | width: 100px; |
| | | height: 32px; |
| | | } |
| | | } |
| | | |
| | | .el-select { |
| | | width: 68px; |
| | | width: 100px; |
| | | } |
| | | |
| | | .font { |
| | |
| | | .btns { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | left: 0; |
| | | right: 0; |
| | |
| | | }); |
| | | }, |
| | | 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(); |
| | | }) |
| | |
| | | return; |
| | | } |
| | | |
| | | this.$confirm( |
| | | "此操作将永久删除该规则, 所关联的任务将会失效,是否继续?", |
| | | { |
| | | center: true, |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | } |
| | | ) |
| | | this.$confirm("此操作将删除该规则, 所关联的任务将会失效,是否继续?", { |
| | | center: true, |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | }) |
| | | .then(() => { |
| | | deleteTimeRule({ id: tabId }).then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | |
| | | padding: 0 20px; |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | .btns { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | left: 0; |
| | | right: 0; |
| | |
| | | :InValidCount="`${PollData.RealTimeInvalid}`" |
| | | :RunningCount="`${PollData.RealTimeRun}`" |
| | | :NoDeal="`${PollData.RealTimeNoDeal}`" |
| | | image="realTime (2).png" |
| | | ></HashrateCard> |
| | | |
| | | <!-- 轮询算力信息 --> |
| | |
| | | :InValidCount="`${PollData.PollInvalid}`" |
| | | :RunningCount="`${PollData.PollRun}`" |
| | | :NoDeal="`${PollData.PollNoDeal}`" |
| | | image="polling.png" |
| | | ></HashrateCard> |
| | | </div> |
| | | </div> |
| | |
| | | .control { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | top: 20px; |
| | | right: 20px; |
| | | |
| | |
| | | .control { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | top: 20px; |
| | | right: 20px; |
| | | |
| | |
| | | <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"> |
| | |
| | | .btns { |
| | | margin-top: 10px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | font-size: 14px; |
| | |
| | | </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> |
| | |
| | | <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> |
| | |
| | | refresh() { |
| | | this.$emit("refresh"); |
| | | }, |
| | | buyProduct(productName) { |
| | | buyProduct(id) { |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: productName, |
| | | id: id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | </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> |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | buyProduct(modelName) { |
| | | buyProduct(id) { |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: modelName, |
| | | id: id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | {{ 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> |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | buyProduct(modelName) { |
| | | buyProduct(id) { |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: modelName, |
| | | id: id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | display: flex; |
| | | height: 300px; |
| | | .left { |
| | | margin-top: 114px; |
| | | margin-top: 76px; |
| | | margin-left: 20px; |
| | | margin-right: 30px; |
| | | width: 195px; |
| | |
| | | } |
| | | |
| | | .middle { |
| | | margin-top: 55px; |
| | | margin-top: 16px; |
| | | margin-right: 19px; |
| | | width: 404px; |
| | | height: 100%; |
| | |
| | | bottom: 20px; |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | |
| | | .question { |
| | | margin-right: 20px; |
| | |
| | | <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!请 |
| | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | userBuyInfo:Object, |
| | | userBuyInfo: Object, |
| | | userCardArr: { |
| | | type: Array, |
| | | default: () => { |
| | |
| | | num: "_", |
| | | label: "待付款", |
| | | }, |
| | | { |
| | | /* { |
| | | num: "_", |
| | | label: "待续费", |
| | | }, |
| | | { |
| | | num: "_", |
| | | label: "消息中心", |
| | | }, |
| | | }, */ |
| | | ]; |
| | | }, |
| | | }, |
| | |
| | | { |
| | | img: "/images/index/beforeSell.png", |
| | | title: "售前咨询", |
| | | des: "致电0315-2233066,领取您的专属权益", |
| | | des: "致电010-84155885,领取您的专属权益", |
| | | router: "/", |
| | | }, |
| | | { |
| | |
| | | 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", |
| | | ], |
| | | }, |
| | | ], |
| | |
| | | num: res.data.needPay, |
| | | label: "待付款", |
| | | }, |
| | | { |
| | | /* { |
| | | num: res.data.needRenewal, |
| | | label: "待续费", |
| | | }, |
| | | { |
| | | num: "_", |
| | | label: "消息中心", |
| | | }, |
| | | }, */ |
| | | ]; |
| | | }); |
| | | }, |
| | |
| | | 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); |
| | |
| | | |
| | | .item { |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | |
| | | .label { |
| | |
| | | .btns { |
| | | margin-top: 40px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | <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> |
| | |
| | | margin: 30px auto; |
| | | display: flex; |
| | | justify-content: center; |
| | | |
| | | .heart { |
| | | display: flex; |
| | | } |
| | | |
| | | .left-menu { |
| | | margin-right: 24px; |
| | | } |
| | |
| | | min-height: 856px; |
| | | box-sizing: border-box; |
| | | background-color: #fff; |
| | | width: 1196px; |
| | | width: 1036px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | .btns { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | data() {
|
| | | return {
|
| | | menuList: [
|
| | | { name: "账户总览" },
|
| | | // { name: "账户总览" },
|
| | | { name: "订单管理" },
|
| | | { name: "消息中心" },
|
| | | // { name: "消息中心" },
|
| | | { name: "基本资料" },
|
| | | { name: "子账户管理" },
|
| | | ],
|
| | |
| | | <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"> |
| | |
| | | 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> |
| | | |
| | |
| | | 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> |
| | |
| | | <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> |
| | |
| | | ></el-pagination> |
| | | </div> |
| | | </div> |
| | | |
| | | <ConfirmOrder |
| | | v-if="showOrder" |
| | | :orderId="orderId" |
| | | @close="closeBox" |
| | | ></ConfirmOrder> |
| | | </div> |
| | | |
| | | <div class="order-detail" v-else> |
| | |
| | | </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: "", //输入框内容 |
| | |
| | | form: {}, //处理中的设备 |
| | | isShowDetail: false, |
| | | showTable: false, |
| | | orderId: "", |
| | | showOrder: false, |
| | | status: -10, |
| | | }; |
| | | }, |
| | | methods: { |
| | |
| | | productBaseId: "0", |
| | | orderName: "", |
| | | orderType: "", |
| | | status: 0, |
| | | status: this.status, |
| | | }; |
| | | getOrders(param) |
| | | .then((res) => { |
| | |
| | | |
| | | clearSearch() { |
| | | debugger; |
| | | this.searchTime = this.getDateInit(); |
| | | this.searchTime = []; |
| | | debugger; |
| | | this.inputText = ""; |
| | | this.searchingBtn(); |
| | |
| | | |
| | | 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() {}, |
| | | }; |
| | |
| | | color: #fff; |
| | | background: #0065ff; |
| | | border-radius: 3px; |
| | | margin-right: 20px; |
| | | margin-right: 10px; |
| | | } |
| | | .right { |
| | | display: flex; |
| | |
| | | color: #fff; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-left: 195px; |
| | | margin-left: 20px; |
| | | cursor: pointer; |
| | | } |
| | | .resetBtn { |
| | |
| | | } |
| | | } |
| | | |
| | | .selectStatus { |
| | | margin: 0 10px; |
| | | margin-right: 30px; |
| | | width: 100px; |
| | | } |
| | | |
| | | .el-input ::v-deep { |
| | | width: 200px; |
| | | margin-left: 10px; |
| | |
| | | .btns { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 32px; |
| | | font-size: 14px; |
| | |
| | | |
| | | <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" |
| | |
| | | <span class="iconfont"></span> |
| | | <span>添加子账号</span> |
| | | </div> |
| | | <div class="button export" @click="isShowRelate = true"> |
| | | <!-- <div class="button export" @click="isShowRelate = true"> |
| | | <span class="iconfont"></span> |
| | | <span>关联子账号</span> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | |
| | | <div class="table-area"> |
| | |
| | | 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="用户类型"> |
| | |
| | | durationArr: [ |
| | | { |
| | | value: 1, |
| | | label: "一年", |
| | | label: "1年", |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "两年", |
| | | label: "2年", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "三年", |
| | | label: "3年", |
| | | }, |
| | | ], //所属集群下拉框 |
| | | timeLength: null, //选中的授权时长 |
| | |
| | | isChangePwd: false, |
| | | industryId: "", |
| | | address: [], |
| | | authDuration: "", |
| | | authDuration: 1, |
| | | areaId: "", |
| | | provinceId: "", |
| | | menuIds: [], |
| | |
| | | industryId: "", |
| | | areaId: "", |
| | | provinceId: "", |
| | | authDuration: "", |
| | | authDuration: 1, |
| | | }; |
| | | this.$nextTick(() => { |
| | | this.$refs.treeMenus.setCheckedKeys([]); |
| | |
| | | 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) { |
| | |
| | | inputText: this.inputText, |
| | | page: this.page, |
| | | size: this.size, |
| | | authDuration: this.timeLength, |
| | | }) |
| | | .then((res) => { |
| | | if (res.success) { |
| | |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: this.data.productName, |
| | | id: this.data.id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | display: flex; |
| | | |
| | | img { |
| | | margin: 0 10px; |
| | | margin-left: 10px; |
| | | width: 60px; |
| | | height: 60px; |
| | | } |
| | | |
| | | .right { |
| | | margin-left: 10px; |
| | | .name { |
| | | margin-bottom: 10px; |
| | | font-size: 16px; |
| | |
| | | <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"> |
| | |
| | | </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"> |
| | |
| | | </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> |
| | |
| | | |
| | | <div class="total"> |
| | | <div class="money"> |
| | | 应付款<span class="number">{{ sum }}元</span> |
| | | 应付款<span class="number">{{ orderInfo.orderMoney }}元</span> |
| | | </div> |
| | | |
| | | <div class="policy"> |
| | |
| | | <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 |
| | |
| | | @close="showUploadBox = false" |
| | | @back="back" |
| | | v-if="showUploadBox" |
| | | @closeAll="closeAll" |
| | | > |
| | | </UploadBox> |
| | | </div> |
| | |
| | | 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) => { |
| | |
| | | } |
| | | }, |
| | | close() { |
| | | this.$emit("close"); |
| | | }, |
| | | closeAll() { |
| | | this.showUploadBox = false; |
| | | this.$emit("close"); |
| | | }, |
| | | confirmOrder() { |
| | |
| | | .policy { |
| | | margin-top: 10px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | |
| | |
| | | right: 20px; |
| | | bottom: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | |
| | |
| | | right: 20px; |
| | | bottom: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | |
| | |
| | | <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"> |
| | |
| | | </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> |
| | |
| | | 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() { |
| | |
| | | this.cartItem.timeLength = year; |
| | | }, |
| | | selectModel(index) { |
| | | console.log("-----"); |
| | | console.log(this.isSmartCalDot); |
| | | if (this.isSmartCalDot) { |
| | | return; |
| | | } |
| | |
| | | }, |
| | | ]; |
| | | resumeOrder({ |
| | | orderMoney: this.numeral(this.sum).value(), |
| | | orderMoney: this.numeral(this.totalMoney).value(), |
| | | payMethod: 0, |
| | | products, |
| | | status: 0, |
| | |
| | | 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({ |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | .el-tag { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | .el-select__tags-text { |
| | | color: #999; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | <el-image |
| | | class="preview" |
| | | v-if="item.appendix" |
| | | :src="`http://${item.appendix}`" |
| | | :src="`/httpImage/${item.appendix}`" |
| | | fit="contain" |
| | | ></el-image> |
| | | <el-upload |
| | |
| | | duration: 2500, |
| | | offset: 57, |
| | | }); |
| | | |
| | | if (this.$route.path === "/personalCenter") { |
| | | this.$emit("closeAll"); |
| | | return; |
| | | } |
| | | |
| | | this.$router.push({ |
| | | path: "/personalCenter", |
| | | query: { |
| | | id: 1, |
| | | id: 0, |
| | | }, |
| | | }); |
| | | } |
| | |
| | | right: 20px; |
| | | bottom: 20px; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | text-align: center; |
| | | line-height: 40px; |
| | | |
| | |
| | | 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(); |
| | |
| | | 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; |
| | | }); |
| | | }, |
| | |
| | | }); |
| | | 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(); |
| | |
| | | }) |
| | | .catch((err) => { |
| | | this.loading.close(); |
| | | //后门 |
| | | this.$router.push({ |
| | | path: "/register/success", |
| | | query: { info: this.userInfo }, |
| | | }); |
| | | this.$notify({ |
| | | type: "error", |
| | | message: err.msg, |
| | |
| | | .el-scrollbar__view { |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .el-cascader-node__postfix::before { |
| | | display: none !important; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | background-size: 100% 100%; |
| | | font-size: 14px; |
| | | |
| | | .Header ::v-deep { |
| | | .right .link { |
| | | color: #3d3d3d; |
| | | |
| | | &:hover { |
| | | color: #0065ff; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .registerHeart { |
| | | margin: 0 auto; |
| | | width: 1280px; |
| | |
| | | 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"); |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | height: calc(100vh - 130px); |
| | | } |
| | | .left-tree-box .el-tabs--border-card .el-tabs__header { |
| | | display: block; |
| | | margin-bottom: 10px; |
| | | } |
| | | .column { |
| | |
| | | <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> |
| | | |
| | |
| | | sdk: {}, |
| | | }, |
| | | methods: { |
| | | buyProduct(productName) { |
| | | buyProduct(id) { |
| | | this.$router.push({ |
| | | path: "/productDetail", |
| | | query: { |
| | | name: productName, |
| | | id: id, |
| | | }, |
| | | }); |
| | | }, |
| | |
| | | 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, |
| | |
| | | // 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, //开启代理 |