Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
N
nse-ui
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
吴超
nse-ui
Commits
13ec4642
Commit
13ec4642
authored
Aug 20, 2025
by
周海峰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
密钥管理
parent
0fa75ffc
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
875 行增加
和
10 行删除
+875
-10
src/api/ruleConfig/keyManagement.js
+77
-0
src/views/ruleConfig/keyManagement/components/ParamsConfig.vue
+531
-0
src/views/ruleConfig/keyManagement/index.vue
+267
-10
没有找到文件。
src/api/ruleConfig/keyManagement.js
0 → 100644
View file @
13ec4642
import
request
from
'@/utils/request'
import
{
parseStrEmpty
}
from
"@/utils/ruoyi"
/**
* 密管方式列表
* @param {*} query
* @returns
*/
export
function
queryKeys
(
query
)
{
return
request
({
url
:
'/key/manager/queryKeys'
,
method
:
'get'
,
params
:
query
})
}
/**
* 修改使用的密管方式
*/
export
function
editIsUse
(
data
)
{
return
request
({
url
:
'/key/manager/editIsUse'
,
method
:
'post'
,
data
:
data
})
}
/**
* 参数配置
* @param {*} query
* @returns
*/
export
function
showKeyParams
(
query
)
{
return
request
({
url
:
'key/manager/showKeyParams'
,
method
:
'get'
,
params
:
query
})
}
/**
*
* @param {*} query
* @returns
*/
export
function
testCallKey
(
query
)
{
return
request
({
url
:
'key/manager/testCallKey'
,
method
:
'get'
,
params
:
query
})
}
/** * 参数配置区域
* @param {*} data
* @returns {string}
*/
export
function
saveKeyParams
(
data
)
{
return
request
({
url
:
'/key/manager/saveKeyParams'
,
method
:
'post'
,
data
:
data
})
}
export
function
uploadHsmConfig
(
formData
)
{
return
request
({
url
:
'/key/manager/uploadHsmConfig'
,
method
:
'post'
,
data
:
formData
,
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
}
\ No newline at end of file
src/views/ruleConfig/keyManagement/components/ParamsConfig.vue
0 → 100644
View file @
13ec4642
<
template
>
<div
class=
"params-config"
>
<div
v-if=
"!editable"
class=
"mask"
@
click
.
stop=
"handleMaskClick"
></div>
<div
v-if=
"type === 'local'"
style=
"display: flex; justify-content: center; align-items: center; height: 300px;"
>
<span
style=
"font-size: 40px; color: #909399;"
>
无需参数配置
</span>
</div>
<!-- 加密机配置 -->
<div
v-if=
"type === 'machine'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"密钥索引"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sdkkeyid"
placeholder=
"110"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* sdkkeyid: SM2加密的密钥索引
</div>
</div>
</el-form-item>
<el-form-item
label=
"私钥授权码"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sdkpassword"
type=
"password"
placeholder=
"****"
show-password
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* SDKPassword: SM2加密私钥授权码
</div>
</div>
</el-form-item>
<el-form-item
label=
"配置文件"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sdkPath"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"button-group"
>
<el-button
type=
"primary"
@
click=
"downloadTemplate"
>
下载配置模板
</el-button>
<el-button
type=
"primary"
@
click=
"uploadConfig"
>
上传配置文件
</el-button>
</div>
<div
class=
"tip-text"
>
* SDKPath: 点击下载HsmConfig模板,修改配置信息,然后上传HsmConfig文件
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- 云加密机配置 -->
<div
v-if=
"type === 'cloud'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"密钥索引"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sdkkeyid"
placeholder=
"110"
style=
"width: 500px;"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
SDKKeyid: SM2加密的密钥索引
</div>
</div>
</el-form-item>
<el-form-item
label=
"私钥授权码"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sdkpassword"
type=
"password"
placeholder=
"****"
show-password
style=
"width: 500px;"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
SDKPassword: SM2加密私钥授权码
</div>
</div>
</el-form-item>
<el-form-item
label=
"配置文件"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.hsmfiledir"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"button-group"
>
<el-button
type=
"primary"
@
click=
"downloadTemplate"
>
下载配置模板
</el-button>
<el-button
type=
"primary"
@
click=
"uploadConfig"
>
上传配置文件
</el-button>
</div>
<div
class=
"tip-text"
>
* SDKPath: 点击下载HsmConfig模板,修改配置信息,然后上传HsmConfig文件
</div>
</div>
</el-form-item>
<el-form-item
label=
"客户端证书"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keystoredir"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"button-group"
>
<el-button
type=
"primary"
@
click=
"uploadCert('client')"
>
上传证书
</el-button>
</div>
<div
class=
"tip-text"
>
* KeyStore: 类似client.p12客户端证书上传,此处上传路径应和配置文件中客户端证书路径保持一致
</div>
</div>
</el-form-item>
<el-form-item
label=
"CA证书"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.truststoredir"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"button-group"
>
<el-button
type=
"primary"
@
click=
"uploadCert('ca')"
>
上传证书
</el-button>
</div>
<div
class=
"tip-text"
>
* TrustStore: 类似ca.cer CA证书上传,此处上传路径应和配置文件里的证书路径保持一致
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- 国芯加密卡配置 -->
<div
v-else-if=
"type === 'card'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"权限密码"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.password"
placeholder=
"110"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* Ccore.PhKeyHandle.password
</div>
</div>
</el-form-item>
<el-form-item
label=
"比特值"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.bits"
placeholder=
"pass"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.bits
</div>
</div>
</el-form-item>
<el-form-item
label=
"X向量"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.x"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.X
</div>
</div>
</el-form-item>
<el-form-item
label=
"Y向量"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.y"
placeholder=
"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.Y
</div>
</div>
</el-form-item>
<el-form-item
label=
"哈希值"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.m"
placeholder=
"0, 27, 28, 35, 90, -3, -128, 76, -117, -31, 86"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.M
</div>
</div>
</el-form-item>
<el-form-item
label=
"密钥密文"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.c"
placeholder=
"-18, 92, 111, -108, 103, -78, 28, 59, 67, -5"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.C
</div>
</div>
</el-form-item>
<el-form-item
label=
"向量长度"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.l"
placeholder=
"16"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* ECCCipher.L
</div>
</div>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
>
参数生成
</el-button>
<span
class=
"tip-text"
style=
"margin-left: 16px;"
>
* 点击自动带入加密卡的相关参数
</span>
</el-form-item>
</el-form>
</div>
<!-- KMS配置 -->
<div
v-else-if=
"type === 'kms'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"主键"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.tid"
placeholder=
"110"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.tid: 加密机设备ID
</div>
</div>
</el-form-item>
<el-form-item
label=
"访问密钥"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.credaccesskey"
type=
"password"
placeholder=
"****"
show-password
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.credaccesskey: 加密机设备密码
</div>
</div>
</el-form-item>
<el-form-item
label=
"私钥"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.secretkey"
type=
"password"
placeholder=
"************"
show-password
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.secretkey: 私钥
</div>
</div>
</el-form-item>
<el-form-item
label=
"序列"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.iv"
placeholder=
"1,2,3,4,5,6,7,8,9,8,7,6,"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.iv: 序列
</div>
</div>
</el-form-item>
<el-form-item
label=
"协议"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.protocol"
placeholder=
"http"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.protocol: 协议
</div>
</div>
</el-form-item>
<el-form-item
label=
"地址"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.host"
placeholder=
"kotest.gh--truststoredir.com"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.host: 地址
</div>
</div>
</el-form-item>
<el-form-item
label=
"端口"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.credport"
placeholder=
"18180"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.credential.credport: 端口
</div>
</div>
</el-form-item>
<el-form-item
label=
"主密钥"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyid"
placeholder=
"5984eba--2884--4ef7--a0c"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.keyid.keyid
</div>
</div>
</el-form-item>
<el-form-item
label=
"密钥的类型"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyspec"
placeholder=
"SM4"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.keyid.keyspec
</div>
</div>
</el-form-item>
<el-form-item
label=
"密钥用途"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyusage"
placeholder=
"ENCRYPT_DECRYPT"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.keyid.keyusage
</div>
</div>
</el-form-item>
<el-form-item
label=
"密钥来源"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.origin"
placeholder=
"KMS"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.keyid.origin
</div>
</div>
</el-form-item>
<el-form-item
label=
"保护级别"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.protectionlevel"
placeholder=
"HSM"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* kms.keyid.protectionlevel
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- THKMS配置 -->
<div
v-else-if=
"type === 'thkms'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"协议"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.protocol"
placeholder=
"110"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* thkms.protocol
</div>
</div>
</el-form-item>
<el-form-item
label=
"主机"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.host"
placeholder=
"pass"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* thkms.host
</div>
</div>
</el-form-item>
<el-form-item
label=
"端口"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.credport"
placeholder=
"/home/ghca/data/"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* thkms.credport
</div>
</div>
</el-form-item>
<el-form-item
label=
"应用ID"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.appId"
placeholder=
"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* thkms.appId
</div>
</div>
</el-form-item>
<el-form-item
label=
"主密钥"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyid"
placeholder=
"0, 27, 28, 35, 90, -3, -128, 76, -117, -31, 86"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* thkms.keyid
</div>
</div>
</el-form-item>
<el-form-item
label=
"私钥证书"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sm2pri"
placeholder=
"-18, 92, 111, -108, 103, -78, 28, 59, 67, -5"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"uploadCert('sm2')"
>
上传证书
</el-button>
<div
class=
"tip-text"
>
* 类似sm2pri.pkcs8.der 证书上传
</div>
</div>
</el-form-item>
<el-form-item
label=
"公钥证书"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.sm2pub"
placeholder=
"16"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"uploadCert('sm2pub')"
>
上传证书
</el-button>
<div
class=
"tip-text"
>
* 类似sm2pub.cer 证书上传
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- 得安加密机配置 -->
<div
v-else-if=
"type === 'dean'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"IP"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.ip"
placeholder=
"110"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* IP
</div>
</div>
</el-form-item>
<el-form-item
label=
"端口"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.port"
placeholder=
"pass"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* 端口
</div>
</div>
</el-form-item>
<el-form-item
label=
"密码"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.password"
type=
"password"
placeholder=
"********"
show-password
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* 密码
</div>
</div>
</el-form-item>
<el-form-item
label=
"算法类型"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.algorithm"
placeholder=
"SM4"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* 算法类型
</div>
</div>
</el-form-item>
<el-form-item
label=
"密钥号"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyNo"
placeholder=
"0, 27, 28, 35, 90, -3, -128, 76, -117, -31, 83, 84, 46, 61, -97, -92, 120, -19, 46, -121, -27, -107, -58, 90, 118, 0, 6, 105, 68, -41, 96, 30"
style=
"width: 500px"
:disabled=
"!editable"
/>
<div
class=
"tip-text"
>
* 密钥号
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- 量子加密机配置 -->
<div
v-else-if=
"type === 'star'"
class=
"params-form"
>
<el-form
label-width=
"120px"
label-position=
"left"
>
<el-form-item
label=
"配置文件"
required
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.configPath"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"downloadTemplate"
>
下载配置模板
</el-button>
<el-button
type=
"primary"
@
click=
"uploadConfig"
>
上传配置文件
</el-button>
</div>
</el-form-item>
<el-form-item
label=
"用户证书路径"
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.certsPath"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"uploadCert('certs')"
>
上传证书
</el-button>
<div
class=
"tip-text"
>
* certs.pem
</div>
</div>
</el-form-item>
<el-form-item
label=
"用户密钥路径"
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.keyPath"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"uploadCert('sigkey')"
>
上传证书
</el-button>
<div
class=
"tip-text"
>
* sig.key.pem
</div>
</div>
</el-form-item>
<el-form-item
label=
"服务端CA证书路径"
>
<div
class=
"input-group"
>
<el-input
v-model=
"params.caPath"
style=
"width: 500px"
:disabled=
"!editable"
/>
<el-button
type=
"primary"
@
click=
"uploadCert('ca')"
>
上传证书
</el-button>
<div
class=
"tip-text"
>
* ca.crt.pem
</div>
</div>
</el-form-item>
</el-form>
</div>
<!-- 三末加密机配置 -->
<div
v-else-if=
"type === 'threeTerm'"
class=
"params-form"
>
<el-form
label-width=
"100px"
>
<div
class=
"config-buttons"
style=
"text-align: left;"
>
<el-button
type=
"primary"
@
click=
"downloadTemplate"
>
下载配置模板
</el-button>
<el-button
type=
"primary"
@
click=
"uploadConfig"
>
上传配置文件
</el-button>
</div>
</el-form>
</div>
</div>
</
template
>
<
script
>
export
default
{
name
:
'ParamsConfig'
,
props
:
{
// 密管类型
type
:
{
type
:
String
,
required
:
true
},
// 参数值
modelValue
:
{
type
:
Object
,
default
:
()
=>
({})
},
// 是否可编辑
editable
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
params
:
this
.
modelValue
}
},
watch
:
{
params
:
{
deep
:
true
,
handler
(
val
)
{
this
.
$emit
(
'update:modelValue'
,
val
)
}
},
modelValue
:
{
deep
:
true
,
handler
(
val
)
{
this
.
params
=
val
}
}
},
methods
:
{
// 下载配置模板
downloadTemplate
()
{
this
.
$emit
(
'download-template'
)
},
// 上传配置文件
uploadConfig
()
{
this
.
$emit
(
'upload-config'
)
},
// 上传证书
uploadCert
(
type
)
{
this
.
$emit
(
'upload-cert'
,
type
)
},
handleMaskClick
()
{
this
.
$modal
&&
this
.
$modal
.
msgWarning
?
this
.
$modal
.
msgWarning
(
'不可编辑,请点击“编辑”按钮'
)
:
alert
(
'不可编辑,请点击“编辑”按钮'
)
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.params-config
{
position
:
relative
;
.params-form
{
padding
:
20px
;
border
:
1px
solid
#dcdfe6
;
border-radius
:
4px
;
margin
:
10px
0
;
.tip
{
font-size
:
12px
;
color
:
#909399
;
line-height
:
1.2
;
padding
:
4px
0
;
margin-top
:
4px
;
}
.input-group
{
display
:
flex
;
align-items
:
center
;
gap
:
12px
;
.button-group
{
display
:
flex
;
gap
:
8px
;
}
.tip-text
{
color
:
#F56C6C
;
font-size
:
14px
;
white-space
:
nowrap
;
}
}
.input-with-buttons
{
display
:
flex
;
align-items
:
center
;
gap
:
10px
;
.button-group
{
display
:
flex
;
gap
:
8px
;
}
}
:deep
(
.el-form-item__label
)
{
font-weight
:
normal
;
}
.required-star
{
color
:
#f56c6c
;
margin-left
:
4px
;
font-size
:
14px
;
cursor
:
help
;
}
.config-buttons
{
text-align
:
center
;
button
{
margin
:
0
10px
;
}
}
}
&
.disabled-mask
{
pointer-events
:
auto
;
}
&
.disabled-mask
{
//
禁用所有交互
pointer-events
:
auto
;
}
:disabled
,
.disabled-mask
button
,
.disabled-mask
.el-button
{
pointer-events
:
none
!important
;
opacity
:
0.6
;
}
.mask
{
position
:
absolute
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
255
,
255
,
255
,
0.6
);
z-index
:
10
;
cursor
:
not-allowed
;
}
}
</
style
>
src/views/ruleConfig/keyManagement/index.vue
View file @
13ec4642
...
@@ -12,10 +12,19 @@
...
@@ -12,10 +12,19 @@
<div
class=
"section-content"
>
<div
class=
"section-content"
>
<div
class=
"form-item"
>
<div
class=
"form-item"
>
<span
class=
"label"
>
密管方式
</span>
<span
class=
"label"
>
密管方式
</span>
<el-select
v-model=
"keyManageType"
placeholder=
"请选择"
style=
"width: 200px;padding-right: 10px;"
>
<el-select
<el-option
label=
"三末加密机"
value=
"threeTerm"
></el-option>
v-model=
"keyManageType"
placeholder=
"请选择"
style=
"width: 200px;padding-right: 10px;"
@
change=
"handleKeyManageChange"
>
<el-option
v-for=
"item in keyManageData"
:key=
"item.id"
:label=
"item.typename"
:value=
"item.id"
>
</el-option>
</el-select>
</el-select>
<el-checkbox
v-model=
"isEnabled"
>
是否启用
</el-checkbox>
<el-checkbox
v-model=
"isEnabled"
@
change=
"handleEnableChange"
>
是否启用
</el-checkbox>
<span
class=
"tip"
>
<span
class=
"tip"
>
* 平台只能选择一种密管方式,切换加密规则,平台可切换密管方式。
* 平台只能选择一种密管方式,切换加密规则,平台可切换密管方式。
</span>
</span>
...
@@ -27,31 +36,279 @@
...
@@ -27,31 +36,279 @@
<div
class=
"section-card"
>
<div
class=
"section-card"
>
<div
class=
"section-title"
>
参数配置区域:
</div>
<div
class=
"section-title"
>
参数配置区域:
</div>
<div
class=
"section-content"
>
<div
class=
"section-content"
>
<div
class=
"button-group"
>
<params-config
<el-button
type=
"primary"
>
下载配置模板
</el-button>
v-model=
"configParams"
<el-button
type=
"primary"
>
上传配置文件
</el-button>
:type=
"getConfigType"
</div>
:editable=
"isEditing"
@
download-template=
"handleDownloadTemplate"
@
upload-config=
"handleUploadConfig"
@
upload-cert=
"handleUploadCert"
/>
</div>
</div>
</div>
</div>
<!-- 底部按钮 -->
<!-- 底部按钮 -->
<div
class=
"footer"
>
<div
class=
"footer"
>
<el-button
type=
"primary"
>
编辑
</el-button>
<template
v-if=
"isEditing"
>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
@
click=
"handleTest"
>
测试
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
</
template
>
<
template
v-else
>
<el-button
type=
"primary"
@
click=
"isEditing = true"
>
编辑
</el-button>
</
template
>
</div>
</div>
</div>
</div>
<!-- 上传配置文件弹层 -->
<el-dialog
title=
"上传配置文件"
v-model=
"uploadDialogVisible"
width=
"500px"
:close-on-click-modal=
"false"
:close-on-press-escape=
"false"
@
close=
"handleUploadCancel"
>
<div
style=
"padding: 10px 0;"
>
<el-upload
drag
action=
""
:auto-upload=
"false"
:file-list=
"uploadFileList"
:on-change=
"handleFileChange"
:show-file-list=
"true"
:limit=
"1"
>
<i
class=
"el-icon-upload"
style=
"font-size:48px;color:#409EFF;"
></i>
<div
class=
"el-upload__text"
style=
"font-size:16px;color:#909399;"
>
点击或拖拽文件到此处进行上传
</div>
</el-upload>
</div>
<div
style=
"text-align:center;margin-top:20px;"
>
<el-button
@
click=
"handleUploadCancel"
>
取消
</el-button>
<el-button
type=
"primary"
:loading=
"uploadLoading"
@
click=
"handleUploadConfirm"
>
确定
</el-button>
</div>
</el-dialog>
</template>
</template>
<
script
>
<
script
>
import
{
queryKeys
,
showKeyParams
,
editIsUse
,
testCallKey
,
saveKeyParams
,
uploadHsmConfig
}
from
"@/api/ruleConfig/keyManagement.js"
import
ParamsConfig
from
'./components/ParamsConfig.vue'
/**
/**
* 规则管理-密钥管理
* 规则管理-密钥管理
*/
*/
export
default
{
export
default
{
components
:
{
ParamsConfig
},
name
:
'KeyManagement'
,
name
:
'KeyManagement'
,
data
()
{
data
()
{
return
{
return
{
keyManageType
:
'三末加密机'
,
keyManageType
:
''
,
isEnabled
:
false
isEnabled
:
false
,
keyManageData
:
[],
// 存储完整的数据
configParams
:
{},
// 参数配置数据
isEditing
:
false
,
// 是否处于编辑状态
uploadDialogVisible
:
false
,
// 上传配置文件弹层可见性
uploadFile
:
null
,
uploadFileList
:
[],
uploadLoading
:
false
// 上传按钮加载状态
}
}
},
created
()
{
this
.
getKeyManageOptions
()
},
computed
:
{
// 获取配置类型
getConfigType
()
{
const
typeMap
=
{
'本地管理'
:
'local'
,
'加密机'
:
'machine'
,
'云加密机'
:
'cloud'
,
'国芯加密卡'
:
'card'
,
'KMS'
:
'kms'
,
'THKMS'
:
'thkms'
,
'得安加密机'
:
'dean'
,
'量子加密机'
:
'star'
,
'三未加密机'
:
'threeTerm'
}
const
selectedOption
=
this
.
keyManageData
.
find
(
item
=>
item
.
id
===
this
.
keyManageType
)
return
selectedOption
?
typeMap
[
selectedOption
.
typename
]
:
''
}
},
watch
:
{},
methods
:
{
// 获取密管方式选项
async
getKeyManageOptions
()
{
try
{
const
res
=
await
queryKeys
()
console
.
log
(
'获取密管方式选项:'
,
res
)
if
(
res
.
code
===
"POP_00014"
)
{
// 存储完整数据
this
.
keyManageData
=
res
.
data
// 设置选项数据
// 找到 isuse 为 1 的选项并设置为默认值
const
activeOption
=
res
.
data
.
find
(
item
=>
item
.
isuse
===
"1"
)
if
(
activeOption
)
{
this
.
keyManageType
=
activeOption
.
id
// 设置启用状态
this
.
isEnabled
=
true
}
}
}
catch
(
error
)
{
console
.
error
(
'获取密管方式选项失败:'
,
error
)
}
},
// 处理密管方式变更
async
handleKeyManageChange
(
newVal
)
{
// 设置启用状态
const
selectedOption
=
this
.
keyManageData
.
find
(
item
=>
item
.
id
===
newVal
)
this
.
isEnabled
=
selectedOption
?
selectedOption
.
isuse
===
"1"
:
false
// 退出编辑状态
this
.
isEditing
=
false
// 清空之前的参数
this
.
configParams
=
{}
// 调用showKeyParams获取参数
try
{
const
res
=
await
showKeyParams
({
typeid
:
newVal
})
if
(
res
.
code
===
"POP_00014"
)
{
this
.
configParams
=
res
.
data
}
else
{
this
.
$modal
.
msgError
(
'获取参数失败'
)
}
}
catch
(
error
)
{
console
.
error
(
'获取密管参数失败:'
,
error
)
this
.
$modal
.
msgError
(
'获取参数失败'
)
}
},
// 处理启用状态变更
// 处理下载配置模板
handleDownloadTemplate
()
{
// TODO: 实现下载配置模板的逻辑
this
.
$modal
.
msgSuccess
(
'开始下载配置模板'
)
},
// 处理上传配置文件
handleUploadConfig
()
{
console
.
log
(
'上传配置文件'
)
this
.
uploadDialogVisible
=
true
;
this
.
uploadFile
=
null
;
this
.
uploadFileList
=
[];
},
// 处理证书上传
handleUploadCert
(
type
)
{
// TODO: 实现证书上传的逻辑
this
.
$modal
.
msgSuccess
(
`开始上传
${
type
}
证书`
)
},
async
handleEnableChange
(
newVal
)
{
if
(
!
this
.
keyManageType
)
{
// this.isEnabled = false
this
.
$modal
.
msgError
(
'请先选择密管方式'
)
return
}
const
oldVal
=
!
newVal
try
{
const
res
=
await
editIsUse
({
typeid
:
this
.
keyManageType
,
isuse
:
newVal
?
"1"
:
"0"
})
if
(
res
.
code
===
"POP_00014"
)
{
this
.
$modal
.
msgSuccess
(
newVal
?
'启用成功'
:
'禁用成功'
)
// 重新获取列表以更新状态
await
this
.
getKeyManageOptions
()
}
else
{
// 如果失败,恢复之前的状态
this
.
isEnabled
=
oldVal
this
.
$modal
.
msgError
(
'操作失败'
)
}
}
catch
(
error
)
{
// 发生错误时恢复之前的状态
this
.
isEnabled
=
oldVal
console
.
error
(
'修改启用状态失败:'
,
error
)
this
.
$modal
.
msgError
(
'操作失败'
)
}
},
// 取消编辑
handleCancel
()
{
// 可选:重置参数
this
.
isEditing
=
false
},
// 测试
async
handleTest
()
{
try
{
const
res
=
await
testCallKey
({
typeid
:
this
.
keyManageType
})
if
(
res
.
code
===
'POP_00014'
)
{
this
.
$modal
.
msgSuccess
(
'测试成功'
)
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
||
'测试失败'
)
}
}
catch
(
error
)
{
this
.
$modal
.
msgError
(
'测试异常'
)
}
},
// 确认
async
handleConfirm
()
{
try
{
const
res
=
await
saveKeyParams
({
...
this
.
configParams
,
typeid
:
this
.
keyManageType
})
if
(
res
.
code
===
'POP_00014'
)
{
this
.
$modal
.
msgSuccess
(
'保存成功'
)
this
.
isEditing
=
false
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
||
'保存失败'
)
}
}
catch
(
error
)
{
this
.
$modal
.
msgError
(
'保存异常'
)
}
finally
{
await
this
.
handleCancel
()
// 重新获取密管方式选项
await
this
.
getKeyManageOptions
()
}
},
// 处理文件变更
handleFileChange
(
file
,
fileList
)
{
this
.
uploadFile
=
file
.
raw
;
this
.
uploadFileList
=
fileList
;
},
// 处理上传取消
handleUploadCancel
()
{
this
.
uploadDialogVisible
=
false
;
this
.
uploadFile
=
null
;
this
.
uploadFileList
=
[];
},
// 处理上传确认
async
handleUploadConfirm
()
{
console
.
log
(
'上传文件:'
,
this
.
uploadFile
);
if
(
!
this
.
uploadFile
)
{
this
.
$modal
.
msgWarning
(
'请先选择文件'
);
return
;
}
this
.
uploadLoading
=
true
;
try
{
const
filePath
=
this
.
configParams
.
sdkPath
||
''
;
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
uploadFile
);
formData
.
append
(
'filePath'
,
filePath
);
const
res
=
await
uploadHsmConfig
(
formData
);
if
(
res
.
code
===
'POP_00014'
)
{
this
.
$modal
.
msgSuccess
(
'上传成功'
);
this
.
uploadDialogVisible
=
false
;
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
||
'上传失败'
);
}
}
catch
(
error
)
{
this
.
$modal
.
msgError
(
'上传异常'
);
}
finally
{
this
.
uploadLoading
=
false
;
}
},
}
}
}
}
</
script
>
</
script
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论