main #34

Merged
charles merged 191 commits from main into prod 2025-11-19 16:18:39 +08:00
8 changed files with 126 additions and 90 deletions
Showing only changes of commit c0a15392c4 - Show all commits

View File

@ -333,7 +333,7 @@ export const asyncRoutes = [
title: "资源概览",
fullPath: "/overview",
noCache: true,
icon: "el-icon-s-data"
icon: "el-icon-folder-opened"
},
children: [
{
@ -358,7 +358,7 @@ export const asyncRoutes = [
title: "订单管理",
fullPath: "/orderManagement",
noCache: true,
icon: "el-icon-s-order"
icon: "el-icon-document-copy"
},
alwaysShow: true,
children: [
@ -381,7 +381,7 @@ export const asyncRoutes = [
title: "资源管理",
fullPath: "/resourceManagement",
noCache: true,
icon: "el-icon-s-management"
icon: "el-icon-paperclip"
},
alwaysShow: true,
children: [
@ -805,7 +805,7 @@ export const asyncRoutes = [
component: Layout,
meta: {
title: "工单管理",
icon: "el-icon-s-ticket",
icon: "el-icon-tickets",
noCache: true,
fullPath: "/workOrderManagement"
},
@ -866,7 +866,7 @@ export const asyncRoutes = [
path: "/rechargeManagement",
component: Layout,
meta: {
title: "充值管理",
title: "充值记录",
icon: "el-icon-money",
noCache: true,
fullPath: "/rechargeManagement"
@ -876,7 +876,7 @@ export const asyncRoutes = [
path: "index",
component: () => import("@/views/customer/rechargeRecord"),
name: "RechargeManagement",
meta: { title: "充值管理", fullPath: "/rechargeManagement/index" },
meta: { title: "充值记录", fullPath: "/rechargeManagement/index" },
}
]
},
@ -1107,7 +1107,7 @@ export const asyncRoutes = [
component: Layout,
name: "demandMangement",
redirect: "/demandMangement/index",
meta: { fullPath: "/demandMangement", title: "需求管理", noCache: true, icon: 'el-icon-s-claim' },
meta: { fullPath: "/demandMangement", title: "需求管理", noCache: true, icon: 'el-icon-document-checked' },
children: [
{
path: "index",
@ -1128,7 +1128,7 @@ export const asyncRoutes = [
component: Layout,
name: "productMangement",
redirect: "/productMangement/index",
meta: { fullPath: "/productMangement", title: "商品管理", noCache: true, icon: 'el-icon-s-shop' },
meta: { fullPath: "/productMangement", title: "商品管理", noCache: true, icon: 'el-icon-shopping-cart-full' },
children: [
{
path: "index",
@ -1841,7 +1841,7 @@ export const asyncRoutes = [
{
path: "/administrator", component: Layout, redirect: "/administrator/index", meta: {
title: "企业管理",
icon: "el-icon-s-custom",
icon: "el-icon-office-building",
noCache: true,
fullPath: "/administrator"
},

View File

@ -24,7 +24,10 @@
</div>
<div class="findButton" v-else>
<el-row class="rowBottom">
<el-col :span="8" class="colOne">
<el-col :span="2" class="colCharge">
<el-button class="recharge-btn" @click="$router.push('/kbossCharge')" >充值</el-button>
</el-col>
<el-col :span="4" class="colOne">
<el-select size="small" v-model="recharge_path" placeholder="请选择充值途径" @change="changeSelect">
<el-option label="支付宝" value='0'>
</el-option>
@ -303,4 +306,26 @@ export default {
.really-price {
color: #6a7581;
}
.recharge-btn {
background: linear-gradient(135deg, #4fc3f7, #29b6f6);
color: white;
padding: 12px 34px;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
transition: all 0.3s ease;
}
.recharge-btn:hover {
background: linear-gradient(135deg, #4fc3f7, #29b6f6);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
}
.recharge-btn:active {
transform: translateY(2px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
</style>

View File

@ -114,11 +114,11 @@ export default {
this.url = `${baseUrl}?redirectUrl=${redirectUrl}&signinSecurityToken=${token}`;
} else {
console.error('未能从API响应中获取到token:', response);
this.$message.error('获取登录信息失败,请重试');
}
} catch (error) {
console.error('获取百度云Token失败:', error);
this.$message.error('网络错误,获取登录信息失败');
} finally {
this.loading = false;
}

View File

@ -2,10 +2,29 @@
<div v-loading="loading" class="customerGood">
<!-- <div class="tip"><img src="./svg/tip.svg" alt="">资源列表只展示未到期产品</div>-->
<!-- <SshTerminal></SshTerminal>-->
<div>
<ul class="search-box">
<li>
<el-input-group class="search-input">
<el-input size="mini" placeholder="请输入关键词" clearable></el-input>
<el-button slot="append" icon="el-icon-search" size="mini"></el-button>
</el-input-group>
</li>
<li>
<span class="search-label">创建日期:</span>
<el-date-picker size="mini" style="width: 220px;" type="datetimerange" align="right"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" ></el-date-picker>
</li>
<li>
<el-button size="mini" >重置</el-button>
<el-button type="primary" size="mini">查询</el-button>
</li>
</ul>
</div>
<el-table :data="tableData" style="width: 100%;font-size: 12px" height="calc(100vh - 130px)" border>
<el-table-column min-width="150px" align="center" prop="productname" label="产品名称"></el-table-column>
<el-table-column min-width="150px" align="center" prop="productdesc" label="产品描述"
:show-overflow-tooltip="true">
<el-table-column min-width="90px" align="center" prop="productname" label="产品名称"></el-table-column>
<el-table-column min-width="150px" align="center" prop="productdesc" label="产品描述" :show-overflow-tooltip="true">
<template slot-scope="{row}">
{{ row.productdesc ? row.productdesc : '-' }}
</template>
@ -26,46 +45,38 @@
</el-table-column> -->
<el-table-column prop="" label="操作" align="center" width="120px">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="goJiNanChaoSuan()" v-if="scope.row.providername==='济南超算'">
<el-button type="primary" size="mini" @click="goJiNanChaoSuan()" v-if="scope.row.providername === '济南超算'">
<div style="display: flex;justify-content: center;align-items: center">
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg"
alt="">超算产品
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg" alt="">超算产品
</div>
</el-button>
<el-button type="primary" size="mini" @click="goBaiDu(scope.row.product_url)"
v-else-if="(scope.row.providername==='百度智能云')">
v-else-if="(scope.row.providername === '百度智能云')">
<div style="display: flex;justify-content: center;align-items: center">
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg"
alt="">百度产品
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg" alt="">实例使用
</div>
</el-button>
<el-button type="primary" size="mini" @click="goJd"
v-else-if="(scope.row.providername==='京东云')"
>
<el-button type="primary" size="mini" @click="goJd" v-else-if="(scope.row.providername === '京东云')">
<!-- <i class="el-icon-edit-outline"></i> -->
<div style="display: flex;justify-content: center;align-items: center">
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg"
alt="">京东产品
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg" alt="">京东产品
</div>
</el-button>
<el-button type="primary" size="mini" @click="goUcloud(scope.row.region)"
v-else-if="(scope.row.providername==='优刻得科技股份有限公司')">
v-else-if="(scope.row.providername === '优刻得科技股份有限公司')">
<!-- <i class="el-icon-edit-outline"></i> -->
<div style="display: flex;justify-content: center;align-items: center">
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg"
alt="">集群二
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg" alt="">集群二
</div>
</el-button>
<el-button size="mini" @click="nodeThree(scope.row)" v-else-if="(scope.row.classify === 'E')">
详情
</el-button>
<div v-else-if="scope.row.classify ==='CPCC' ">
<el-button size="mini" type="primary"
@click="openCpccDetail(scope.row)">
<div v-else-if="scope.row.classify === 'CPCC'">
<el-button size="mini" type="primary" @click="openCpccDetail(scope.row)">
容器化详情
</el-button>
<el-button size="mini" type="primary"
@click="$router.push('/customer/SshTerminal')">
<el-button size="mini" type="primary" @click="$router.push('/customer/SshTerminal')">
登录
</el-button>
</div>
@ -81,11 +92,10 @@
<!-- </el-dropdown>-->
<el-button type="primary" size="mini" @click="goCaption()"
v-else-if="(scope.row.providername==='北京首都在线科技股份有限公司')">
v-else-if="(scope.row.providername === '北京首都在线科技股份有限公司')">
<!-- <i class="el-icon-edit-outline"></i> -->
<div style="display: flex;justify-content: center;align-items: center">
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg"
alt="">集群一
<img style="width: 12px;margin-right: 5px;height: 12px;" src="./svg/跳转.svg" alt="">集群一
</div>
</el-button>
<span v-else>-</span>
@ -109,11 +119,7 @@
<div class="guige">
<span>{{ scope.row.productname }}* {{ scope.row.gpu }}</span>
<el-popover
placement="top"
title=""
width="200"
trigger="hover">
<el-popover placement="top" title="" width="200" trigger="hover">
<span class="tipStyle" slot="reference">查看详情</span>
<div>
@ -143,7 +149,7 @@
<div class="itemOut">
<div>登录指令</div>
<div>ssh ****** <span class="copyBtn">
<i @click="copyText('ssh -p '+scope.row.port+' '+scope.row.loginname+'@'+scope.row.ip_region)"
<i @click="copyText('ssh -p ' + scope.row.port + ' ' + scope.row.loginname + '@' + scope.row.ip_region)"
class="el-icon-copy-document"></i>
</span>
</div>
@ -162,10 +168,7 @@
<!-- </el-table-column>-->
<el-table-column min-width="150px" fixed="right" property="address" label="操作">
<template slot-scope="scope">
<el-popconfirm
@confirm="shutDownThree(scope.row)"
title="确定将该设备关机吗?"
>
<el-popconfirm @confirm="shutDownThree(scope.row)" title="确定将该设备关机吗?">
<el-button slot="reference" :loading="deleteBtnLoading" type="danger" size="mini">
关机
</el-button>
@ -176,21 +179,14 @@
</el-table>
</el-dialog>
<el-dialog
title="登录信息"
:visible.sync="rqyVisible"
width="800"
>
<el-dialog title="登录信息" :visible.sync="rqyVisible" width="800">
<el-descriptions title="" direction="vertical" :column="4" border>
<el-descriptions-item label="实例id">{{ cpccDetail.id }}</el-descriptions-item>
<el-descriptions-item label="实例名称">{{ cpccDetail.source_name }}</el-descriptions-item>
<el-descriptions-item label="状态">进行中</el-descriptions-item>
<el-descriptions-item label="健康状态">
<el-tag
type="success"
effect="dark">
<el-tag type="success" effect="dark">
正常
</el-tag>
</el-descriptions-item>
@ -215,14 +211,14 @@
<el-descriptions-item label="核心数">{{ cpccDetail.source_cpurate }}</el-descriptions-item>
<el-descriptions-item label="数据盘">{{ cpccDetail.source_storagelimits }}</el-descriptions-item>
<el-descriptions-item label="系统盘">{{ cpccDetail.disk_sys_limit }}</el-descriptions-item>
<el-descriptions-item v-if="cpccDetail.source_gpu!=='0'" label="卡数">{{
<el-descriptions-item v-if="cpccDetail.source_gpu !== '0'" label="卡数">{{
cpccDetail.source_gpu
}}
</el-descriptions-item>
</el-descriptions>
<span slot="footer" class="dialog-footer">
<!-- <el-button @click="rqyVisible = false"> </el-button>-->
<!-- <el-button @click="rqyVisible = false"> </el-button>-->
<el-button type="primary" @click="rqyVisible = false"> </el-button>
</span>
</el-dialog>
@ -230,16 +226,16 @@
</template>
<script>
import {getCustomerGoodsAPI, HpcAccessTimeAPI} from '@/api/customer/userResource'
import {getJinanchaosuanSign} from '@/api/JiNanChaoSuan/jiNanChaoSuanUserList'
import {goJdUrl} from "@/api/product/jdApi";
import {reqDeleteK8sCloud, reqGetInstance} from "@/api/k8s";
import {Terminal} from "xterm";
import { getCustomerGoodsAPI, HpcAccessTimeAPI } from '@/api/customer/userResource'
import { getJinanchaosuanSign } from '@/api/JiNanChaoSuan/jiNanChaoSuanUserList'
import { goJdUrl } from "@/api/product/jdApi";
import { reqDeleteK8sCloud, reqGetInstance } from "@/api/k8s";
import { Terminal } from "xterm";
import SshTerminal from "@/views/customer/userResource/SshTerminal.vue";
export default {
name: "userResource",
components: {SshTerminal},
components: { SshTerminal },
data() {
return {
isShowPass: false,
@ -302,7 +298,7 @@ export default {
this.deleteBtnLoading = false
if (res.status) {
this.$message.success("删除成功~")
reqGetInstance({customer_goods_id: item.id, orgid: sessionStorage.getItem('orgid')}).then(res => {
reqGetInstance({ customer_goods_id: item.id, orgid: sessionStorage.getItem('orgid') }).then(res => {
if (res.status) {
this.datailList = res.data
}
@ -314,7 +310,7 @@ export default {
},
nodeThree(row) {
this.detailBtnLoading = true
reqGetInstance({customer_goods_id: row.id, orgid: sessionStorage.getItem('orgid')}).then(res => {
reqGetInstance({ customer_goods_id: row.id, orgid: sessionStorage.getItem('orgid') }).then(res => {
this.detailBtnLoading = false
if (res.status) {
this.dialogTableVisible = true
@ -357,7 +353,7 @@ export default {
})
},
HpcAccessTime() {
HpcAccessTimeAPI({orgid: sessionStorage.getItem("orgid")}).then(res => {
HpcAccessTimeAPI({ orgid: sessionStorage.getItem("orgid") }).then(res => {
if (rs.status == true) {
}
@ -404,8 +400,7 @@ export default {
</script>
<style lang="scss" scoped>
.customerGood {
}
.customerGood {}
.tip {
color: #ff9120;
@ -478,4 +473,23 @@ export default {
justify-content: flex-start;
align-items: center;
}
.search-input{
display: flex;
}
.search-box {
display: flex;
align-items: center;
justify-content: flex-start;
background-color: white;
padding: 10px;
margin-bottom: 10px;
border-radius: 8px;
}
.search-box li {
margin-right: 15px;
display: flex;
align-items: center;
justify-content: flex-start;
}
</style>

View File

@ -246,6 +246,7 @@ export default Vue.extend({
.title {
font-size: 30px;
font-weight: 600;
margin-bottom: 18px;
}
.banner-title {

View File

@ -46,14 +46,14 @@
<el-form-item label="公司类别" prop="company_type" required class="full-width">
<!-- <el-form-item label="公司类别" prop="company_type" required class="full-width">
<el-checkbox-group v-model="form.company_type">
<el-checkbox v-for="item in company_category_list" :key="item.value"
:label="item.label"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form-item> -->
<div class="form-row">
<el-form-item label="联系人" prop="contact_person" required class="form-item-half">

View File

@ -78,8 +78,6 @@ export default {
this.url = resultUrlLast
console.log('iframeurl', resultUrlLast)
this.flag = true
} else {
this.$message.error('获取token失败')
}
})

View File

@ -64,8 +64,6 @@ export default {
this.url = resultUrlLast
console.log('url', resultUrlLast)
this.flag = true
} else {
this.$message.error('获取token失败')
}
})