mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
5.0
This commit is contained in:
@@ -9,6 +9,7 @@ import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
|
||||
import com.gitee.sop.adminbackend.common.req.StatusUpdateParam;
|
||||
import com.gitee.sop.adminbackend.common.resp.Result;
|
||||
import com.gitee.sop.adminbackend.controller.isv.req.IsvInfoAddParam;
|
||||
import com.gitee.sop.adminbackend.controller.isv.req.IsvInfoUpdateKeysParam;
|
||||
import com.gitee.sop.adminbackend.controller.isv.req.IsvInfoUpdateParam;
|
||||
import com.gitee.sop.adminbackend.controller.isv.req.IsvKeysGenParam;
|
||||
import com.gitee.sop.adminbackend.dao.entity.IsvInfo;
|
||||
@@ -16,6 +17,7 @@ import com.gitee.sop.adminbackend.service.isv.IsvInfoService;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoAddDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
|
||||
import com.gitee.sop.adminbackend.util.CopyUtil;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -104,6 +106,18 @@ public class IsvInfoController {
|
||||
return Result.ok(isvInfoService.update(isvInfoUpdateDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改秘钥
|
||||
*
|
||||
* @param param 表单数据
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
@PostMapping("/updateKeys")
|
||||
public Result<Integer> updateKeys(@Validated @RequestBody IsvInfoUpdateKeysParam param) {
|
||||
IsvInfoUpdateKeysDTO isvInfoUpdateKeysDTO = CopyUtil.copyBean(param, IsvInfoUpdateKeysDTO::new);
|
||||
return Result.ok(isvInfoService.updateKeys(isvInfoUpdateKeysDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*
|
||||
|
@@ -0,0 +1,47 @@
|
||||
package com.gitee.sop.adminbackend.controller.isv.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
|
||||
/**
|
||||
* @author 六如
|
||||
*/
|
||||
@Data
|
||||
public class IsvInfoUpdateKeysParam {
|
||||
|
||||
@NotNull
|
||||
private Long isvId;
|
||||
|
||||
/**
|
||||
* 秘钥格式,1:PKCS8(JAVA适用),2:PKCS1(非JAVA适用)
|
||||
*/
|
||||
@NotNull
|
||||
private Integer keyFormat;
|
||||
|
||||
/**
|
||||
* 开发者生成的公钥, 数据库字段:public_key_isv
|
||||
*/
|
||||
@NotBlank
|
||||
private String publicKeyIsv;
|
||||
|
||||
/**
|
||||
* 开发者生成的私钥(交给开发者), 数据库字段:private_key_isv
|
||||
*/
|
||||
@NotBlank
|
||||
private String privateKeyIsv;
|
||||
|
||||
/**
|
||||
* 平台生成的公钥(交给开发者), 数据库字段:public_key_platform
|
||||
*/
|
||||
@NotBlank
|
||||
private String publicKeyPlatform;
|
||||
|
||||
/**
|
||||
* 平台生成的私钥, 数据库字段:private_key_platform
|
||||
*/
|
||||
@NotBlank
|
||||
private String privateKeyPlatform;
|
||||
}
|
@@ -3,7 +3,6 @@ package com.gitee.sop.adminbackend.controller.serve;
|
||||
import com.gitee.fastmybatis.core.PageInfo;
|
||||
import com.gitee.fastmybatis.core.query.Query;
|
||||
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
|
||||
import com.gitee.sop.adminbackend.common.req.IdParam;
|
||||
import com.gitee.sop.adminbackend.common.req.StatusUpdateParam;
|
||||
import com.gitee.sop.adminbackend.common.resp.Result;
|
||||
import com.gitee.sop.adminbackend.controller.serve.req.ApiInfoParam;
|
||||
|
@@ -14,15 +14,11 @@ import com.gitee.sop.adminbackend.dao.mapper.IsvInfoMapper;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoAddDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysGenDTO;
|
||||
import com.gitee.sop.adminbackend.util.CopyUtil;
|
||||
import com.gitee.sop.adminbackend.util.IdGen;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@@ -30,6 +26,11 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@@ -44,6 +45,7 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
|
||||
private PermIsvRoleService permIsvRoleService;
|
||||
|
||||
public PageInfo<IsvInfoDTO> doPage(LambdaQuery<IsvInfo> query) {
|
||||
query.orderByDesc(IsvInfo::getId);
|
||||
PageInfo<IsvInfo> page = this.page(query);
|
||||
List<IsvInfo> list = page.getList();
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
@@ -106,6 +108,10 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
|
||||
.update();
|
||||
}
|
||||
|
||||
public int updateKeys(IsvInfoUpdateKeysDTO isvInfoUpdateKeysDTO) {
|
||||
return isvKeysService.saveKeys(isvInfoUpdateKeysDTO);
|
||||
}
|
||||
|
||||
|
||||
private void saveIsvRole(IsvInfo isvInfo, List<String> roleCodeList) {
|
||||
Long isvId = isvInfo.getId();
|
||||
@@ -145,6 +151,16 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
|
||||
|
||||
public IsvKeysDTO getKeys(Long isvId) {
|
||||
IsvKeys isvKeys = isvKeysService.get(IsvKeys::getIsvId, isvId);
|
||||
if (isvKeys == null) {
|
||||
IsvKeysDTO isvKeysDTO = new IsvKeysDTO();
|
||||
isvKeysDTO.setIsvId(isvId);
|
||||
isvKeysDTO.setKeyFormat(RSATool.KeyFormat.PKCS8.getValue());
|
||||
isvKeysDTO.setPublicKeyIsv("");
|
||||
isvKeysDTO.setPrivateKeyIsv("");
|
||||
isvKeysDTO.setPublicKeyPlatform("");
|
||||
isvKeysDTO.setPrivateKeyPlatform("");
|
||||
return isvKeysDTO;
|
||||
}
|
||||
return CopyUtil.copyBean(isvKeys, IsvKeysDTO::new);
|
||||
}
|
||||
|
||||
|
@@ -3,6 +3,8 @@ package com.gitee.sop.adminbackend.service.isv;
|
||||
import com.gitee.fastmybatis.core.support.LambdaService;
|
||||
import com.gitee.sop.adminbackend.dao.entity.IsvKeys;
|
||||
import com.gitee.sop.adminbackend.dao.mapper.IsvKeysMapper;
|
||||
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
|
||||
import com.gitee.sop.adminbackend.util.CopyUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
@@ -12,4 +14,13 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class IsvKeysService implements LambdaService<IsvKeys, IsvKeysMapper> {
|
||||
|
||||
public int saveKeys(IsvInfoUpdateKeysDTO isvInfoUpdateKeysDTO) {
|
||||
IsvKeys isvKeys = this.get(IsvKeys::getIsvId, isvInfoUpdateKeysDTO.getIsvId());
|
||||
if (isvKeys == null) {
|
||||
isvKeys = new IsvKeys();
|
||||
}
|
||||
CopyUtil.copyPropertiesIgnoreNull(isvInfoUpdateKeysDTO, isvKeys);
|
||||
return this.saveOrUpdate(isvKeys);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -10,4 +10,5 @@ import lombok.EqualsAndHashCode;
|
||||
@Data
|
||||
public class IsvInfoUpdateDTO extends IsvInfoAddDTO {
|
||||
private Long id;
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,38 @@
|
||||
package com.gitee.sop.adminbackend.service.isv.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* @author 六如
|
||||
*/
|
||||
@Data
|
||||
public class IsvInfoUpdateKeysDTO {
|
||||
|
||||
private Long isvId;
|
||||
|
||||
/**
|
||||
* 秘钥格式,1:PKCS8(JAVA适用),2:PKCS1(非JAVA适用)
|
||||
*/
|
||||
private Integer keyFormat;
|
||||
|
||||
/**
|
||||
* 开发者生成的公钥, 数据库字段:public_key_isv
|
||||
*/
|
||||
private String publicKeyIsv;
|
||||
|
||||
/**
|
||||
* 开发者生成的私钥(交给开发者), 数据库字段:private_key_isv
|
||||
*/
|
||||
private String privateKeyIsv;
|
||||
|
||||
/**
|
||||
* 平台生成的公钥(交给开发者), 数据库字段:public_key_platform
|
||||
*/
|
||||
private String publicKeyPlatform;
|
||||
|
||||
/**
|
||||
* 平台生成的私钥, 数据库字段:private_key_platform
|
||||
*/
|
||||
private String privateKeyPlatform;
|
||||
}
|
@@ -8,6 +8,13 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IsvKeysDTO {
|
||||
|
||||
private Long isvId;
|
||||
|
||||
/**
|
||||
* 秘钥格式,1:PKCS8(JAVA适用),2:PKCS1(非JAVA适用)
|
||||
*/
|
||||
private Integer keyFormat;
|
||||
|
||||
/**
|
||||
* 开发者生成的公钥, 数据库字段:public_key_isv
|
||||
*/
|
||||
|
@@ -1,51 +1,35 @@
|
||||
<h1>vue-pure-admin精简版(国际化版本)</h1>
|
||||
# SOP Admin 前端实现
|
||||
|
||||
[](LICENSE)
|
||||
## 参考文档
|
||||
|
||||
**中文** | [English](./README.en-US.md)
|
||||
- 模板:https://pure-admin.github.io/pure-admin-doc/
|
||||
- 表单表格组件:https://plus-pro-components.com/
|
||||
|
||||
## 介绍
|
||||
## 开发部署
|
||||
|
||||
精简版是基于 [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 [element-plus](https://element-plus.org) 的情况下仍然低于 `2.3MB`,并且会永久同步完整版的代码。开启 `brotli` 压缩和 `cdn` 替换本地库模式后,打包大小低于 `350kb`
|
||||
> 规定 node 版本应不小于 18.18.0
|
||||
|
||||
## 版本选择
|
||||
- macOS用户在命令前面添加`sudo`
|
||||
|
||||
当前是国际化版本,如果您需要非国际化版本 [请点击](https://github.com/pure-admin/pure-admin-thin)
|
||||
```shell
|
||||
# 安装pnpm
|
||||
npm install -g pnpm
|
||||
|
||||
## `js` 版本
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
[点我查看 js 版本](https://pure-admin.github.io/pure-admin-doc/pages/js/)
|
||||
# 启动
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## `max` 版本
|
||||
打包:
|
||||
|
||||
[点我查看 max 版本](https://github.com/pure-admin/vue-pure-admin-max)
|
||||
`pnpm build`
|
||||
|
||||
## 配套视频
|
||||
安装一个包:
|
||||
|
||||
[点我查看 UI 设计](https://www.bilibili.com/video/BV17g411T7rq)
|
||||
[点我查看快速开发教程](https://www.bilibili.com/video/BV1kg411v7QT)
|
||||
`pnpm add 包名`
|
||||
|
||||
## 配套保姆级文档
|
||||
卸载一个包:
|
||||
|
||||
[点我查看 vue-pure-admin 文档](https://pure-admin.github.io/pure-admin-doc)
|
||||
[点我查看 @pureadmin/utils 文档](https://pure-admin-utils.netlify.app)
|
||||
|
||||
## 优质服务、软件外包、赞助支持
|
||||
|
||||
[点我查看详情](https://pure-admin.github.io/pure-admin-doc/pages/service/)
|
||||
|
||||
## 预览
|
||||
|
||||
[查看预览](https://pure-admin-thin.netlify.app/#/login)
|
||||
|
||||
## 维护者
|
||||
|
||||
[xiaoxian521](https://github.com/xiaoxian521)
|
||||
|
||||
## ⚠️ 注意
|
||||
|
||||
精简版不接受任何 `issues` 和 `pr`,如果有问题请到完整版 [issues](https://github.com/pure-admin/vue-pure-admin/issues/new/choose) 去提,谢谢!
|
||||
|
||||
## 许可证
|
||||
|
||||
[MIT © 2020-present, pure-admin](./LICENSE)
|
||||
`pnpm remove 包名`
|
@@ -66,7 +66,7 @@
|
||||
"path": "0.12.7",
|
||||
"pinia": "2.2.2",
|
||||
"pinyin-pro": "3.24.2",
|
||||
"plus-pro-components": "0.1.16",
|
||||
"plus-pro-components": "0.1.17",
|
||||
"qs": "6.13.0",
|
||||
"responsive-storage": "2.2.0",
|
||||
"sortablejs": "1.15.2",
|
||||
|
10
sop-admin/sop-admin-frontend/pnpm-lock.yaml
generated
10
sop-admin/sop-admin-frontend/pnpm-lock.yaml
generated
@@ -63,8 +63,8 @@ importers:
|
||||
specifier: 3.24.2
|
||||
version: 3.24.2
|
||||
plus-pro-components:
|
||||
specifier: 0.1.16
|
||||
version: 0.1.16(element-plus@2.8.0(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))
|
||||
specifier: 0.1.17
|
||||
version: 0.1.17(element-plus@2.8.0(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))
|
||||
qs:
|
||||
specifier: 6.13.0
|
||||
version: 6.13.0
|
||||
@@ -2797,8 +2797,8 @@ packages:
|
||||
pkg-types@1.1.3:
|
||||
resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==}
|
||||
|
||||
plus-pro-components@0.1.16:
|
||||
resolution: {integrity: sha512-SVjqsnuBjn8wMQihA3ltoKUXx7iX4DtF0KHMYpJLgTNUZDfOzSvQb1vKnubSrFfUpaGFa3c6LSfFpFhzvVfT9Q==}
|
||||
plus-pro-components@0.1.17:
|
||||
resolution: {integrity: sha512-a4UaLJHAf+e1aph3iAjNceVFoyaPxmrX6gS7mWmTg8rfou3sPX7qL0IARKuj8P8oQih65AJRunIfaT+s9IZLvw==}
|
||||
peerDependencies:
|
||||
element-plus: ^2.3.4
|
||||
vue: ^3.2.0
|
||||
@@ -6633,7 +6633,7 @@ snapshots:
|
||||
mlly: 1.7.1
|
||||
pathe: 1.1.2
|
||||
|
||||
plus-pro-components@0.1.16(element-plus@2.8.0(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4)):
|
||||
plus-pro-components@0.1.17(element-plus@2.8.0(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4)):
|
||||
dependencies:
|
||||
'@element-plus/icons-vue': 2.3.1(vue@3.4.38(typescript@5.5.4))
|
||||
element-plus: 2.8.0(vue@3.4.38(typescript@5.5.4))
|
||||
|
@@ -8,9 +8,20 @@ const apiUrl: any = createUrl({
|
||||
update: "/isv/update",
|
||||
del: "/isv/delete",
|
||||
getKeys: "/isv/getKeys",
|
||||
updateStatus: "/isv/updateStatus"
|
||||
updateStatus: "/isv/updateStatus",
|
||||
createKeys: "/isv/createKeys",
|
||||
updateKeys: "/isv/updateKeys"
|
||||
});
|
||||
|
||||
/*
|
||||
private String publicKey;
|
||||
private String privateKey;
|
||||
*/
|
||||
export interface KeyStore {
|
||||
publicKey: string;
|
||||
privateKey: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 接口管理
|
||||
*/
|
||||
@@ -27,34 +38,51 @@ export const api: any = {
|
||||
* @param data 表单内容
|
||||
*/
|
||||
add(data: object) {
|
||||
return http.post<Result, any>(apiUrl.add, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.add, { data });
|
||||
},
|
||||
/**
|
||||
* 修改
|
||||
* @param data 表单内容
|
||||
*/
|
||||
update(data: object) {
|
||||
return http.post<Result, any>(apiUrl.update, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.update, { data });
|
||||
},
|
||||
/**
|
||||
* 删除
|
||||
* @param data 表单内容
|
||||
*/
|
||||
del(data: object) {
|
||||
return http.post<Result, any>(apiUrl.del, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.del, { data });
|
||||
},
|
||||
/**
|
||||
* 查看秘钥
|
||||
* @param params
|
||||
*/
|
||||
viewKeys(params: object) {
|
||||
return http.get<Result, any>(apiUrl.getKeys, { params });
|
||||
return http.get<Result<any>, any>(apiUrl.getKeys, { params });
|
||||
},
|
||||
/**
|
||||
* 修改状态
|
||||
* @param data 表单内容
|
||||
*/
|
||||
updateStatus(data: object) {
|
||||
return http.post<Result, any>(apiUrl.updateStatus, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.updateStatus, { data });
|
||||
},
|
||||
/**
|
||||
* 创建秘钥
|
||||
* @param keyFormat 秘钥格式,1:PKCS8(JAVA适用),2:PKCS1(非JAVA适用)
|
||||
*/
|
||||
createKeys(keyFormat): Promise<Result<KeyStore>> {
|
||||
const data = {
|
||||
keyFormat: keyFormat
|
||||
};
|
||||
return http.post<Result<KeyStore>, any>(apiUrl.createKeys, { data });
|
||||
},
|
||||
/**
|
||||
* 修改秘钥
|
||||
* @param data 表单内容
|
||||
*/
|
||||
updateKeys(data: object): Promise<Result<KeyStore>> {
|
||||
return http.post<Result<any>, any>(apiUrl.updateKeys, { data });
|
||||
}
|
||||
};
|
||||
|
@@ -26,27 +26,27 @@ export const api: any = {
|
||||
* @param data 表单内容
|
||||
*/
|
||||
add(data: object) {
|
||||
return http.post<Result, any>(apiUrl.add, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.add, { data });
|
||||
},
|
||||
/**
|
||||
* 修改
|
||||
* @param data 表单内容
|
||||
*/
|
||||
update(data: object) {
|
||||
return http.post<Result, any>(apiUrl.update, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.update, { data });
|
||||
},
|
||||
/**
|
||||
* 删除
|
||||
* @param data 表单内容
|
||||
*/
|
||||
del(data: object) {
|
||||
return http.post<Result, any>(apiUrl.del, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.del, { data });
|
||||
},
|
||||
/**
|
||||
* 修改状态
|
||||
* @param data 表单内容
|
||||
*/
|
||||
updateStatus(data: object) {
|
||||
return http.post<Result, any>(apiUrl.updateStatus, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.updateStatus, { data });
|
||||
}
|
||||
};
|
||||
|
@@ -25,20 +25,20 @@ export const api: any = {
|
||||
* @param data 表单内容
|
||||
*/
|
||||
add(data: object) {
|
||||
return http.post<Result, any>(apiUrl.add, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.add, { data });
|
||||
},
|
||||
/**
|
||||
* 修改
|
||||
* @param data 表单内容
|
||||
*/
|
||||
update(data: object) {
|
||||
return http.post<Result, any>(apiUrl.update, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.update, { data });
|
||||
},
|
||||
/**
|
||||
* 删除
|
||||
* @param data 表单内容
|
||||
*/
|
||||
del(data: object) {
|
||||
return http.post<Result, any>(apiUrl.del, { data });
|
||||
return http.post<Result<any>, any>(apiUrl.del, { data });
|
||||
}
|
||||
};
|
||||
|
@@ -1,3 +1,8 @@
|
||||
export enum YesOrNoEnum {
|
||||
NO = 0,
|
||||
YES = 1
|
||||
}
|
||||
|
||||
export enum StatusEnum {
|
||||
ENABLE = 1,
|
||||
DISABLE = 2
|
||||
@@ -7,3 +12,8 @@ export enum KeyFormatEnum {
|
||||
PKCS8 = 1,
|
||||
PKCS1 = 2
|
||||
}
|
||||
|
||||
export enum RegSource {
|
||||
SYS = 1,
|
||||
CUSTOM = 2
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
export interface Result {
|
||||
export interface Result<T> {
|
||||
success: boolean;
|
||||
data: object;
|
||||
data: T;
|
||||
msg: "";
|
||||
code: "";
|
||||
}
|
||||
|
@@ -24,3 +24,14 @@
|
||||
.html-weakness {
|
||||
filter: invert(80%);
|
||||
}
|
||||
|
||||
.grow {
|
||||
.el-card {
|
||||
--el-card-padding: 18px !important;
|
||||
border: 0 !important;
|
||||
border-radius: 0;
|
||||
}
|
||||
.main-content {
|
||||
margin: 0 !important;
|
||||
}
|
||||
}
|
||||
|
@@ -16,6 +16,9 @@ import { useUserStoreHook } from "@/store/modules/user";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
export const baseUrl = (url: string) => {
|
||||
if (!url) {
|
||||
throw new Error("url不能为空");
|
||||
}
|
||||
if (url.startsWith("/")) {
|
||||
url = url.substring(1);
|
||||
}
|
||||
|
@@ -56,6 +56,7 @@ import {
|
||||
labelWidth: '100px',
|
||||
labelPosition: 'right'
|
||||
}"
|
||||
:hasErrorTip="false"
|
||||
@confirm="handleSave"
|
||||
/>
|
||||
</el-card>
|
||||
|
@@ -282,7 +282,7 @@ export const handlePaginationChange = (_pageInfo: PageInfo): void => {
|
||||
};
|
||||
|
||||
// 查询
|
||||
const search = async () => {
|
||||
export const search = async () => {
|
||||
try {
|
||||
const { data } = await doSearch();
|
||||
tableData.value = data.list;
|
||||
|
@@ -25,8 +25,14 @@ import {
|
||||
} from "./showKeys";
|
||||
import {
|
||||
dlgKeysSetting,
|
||||
handleUpdateKeys,
|
||||
resetIsvKeys,
|
||||
resetPlatformKeys,
|
||||
restIsvKeysLoading,
|
||||
resetPlatformKeysLoading,
|
||||
settingKeysFormColumns,
|
||||
settingKeysFormData
|
||||
settingKeysFormData,
|
||||
settingKeysFormRules
|
||||
} from "@/views/isv/list/isvKeys";
|
||||
</script>
|
||||
<template>
|
||||
@@ -84,17 +90,9 @@ import {
|
||||
<PlusDialogForm
|
||||
v-model:visible="dlgKeysShow"
|
||||
v-model="showKeysFormData"
|
||||
:dialog="{ title: '秘钥' }"
|
||||
:dialog="{ title: '秘钥 - 标识☆分配给开发者' }"
|
||||
:form="{ group: showKeysFormColumns, labelPosition: 'right' }"
|
||||
>
|
||||
<template #plus-field-privateKeyIsv>
|
||||
<el-input
|
||||
v-model="showKeysFormData.privateKeyIsv"
|
||||
readonly
|
||||
placeholder=""
|
||||
/>
|
||||
<el-button style="margin-top: 20px">重置ISV秘钥</el-button>
|
||||
</template>
|
||||
<template #dialog-footer="{ handleCancel }">
|
||||
<el-button type="primary" @click="handleCancel">关闭</el-button>
|
||||
</template>
|
||||
@@ -103,19 +101,32 @@ import {
|
||||
<PlusDialogForm
|
||||
v-model:visible="dlgKeysSetting"
|
||||
v-model="settingKeysFormData"
|
||||
:dialog="{ title: '秘钥' }"
|
||||
:form="{ group: settingKeysFormColumns, labelPosition: 'right' }"
|
||||
:dialog="{ title: '秘钥 - 标识☆分配给开发者' }"
|
||||
:form="{
|
||||
group: settingKeysFormColumns,
|
||||
rules: settingKeysFormRules,
|
||||
labelPosition: 'right'
|
||||
}"
|
||||
:hasErrorTip="false"
|
||||
@confirm="handleUpdateKeys"
|
||||
>
|
||||
<template #plus-field-privateKeyIsv>
|
||||
<el-input
|
||||
v-model="showKeysFormData.privateKeyIsv"
|
||||
readonly
|
||||
placeholder=""
|
||||
/>
|
||||
<el-button style="margin-top: 20px">重置ISV秘钥</el-button>
|
||||
<template #plus-field-restIsvKeys>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="restIsvKeysLoading"
|
||||
@click="resetIsvKeys"
|
||||
>
|
||||
重置ISV秘钥
|
||||
</el-button>
|
||||
</template>
|
||||
<template #dialog-footer="{ handleCancel }">
|
||||
<el-button type="primary" @click="handleCancel">关闭</el-button>
|
||||
<template #plus-field-restPlatformKeys>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="resetPlatformKeysLoading"
|
||||
@click="resetPlatformKeys"
|
||||
>
|
||||
重置平台秘钥
|
||||
</el-button>
|
||||
</template>
|
||||
</PlusDialogForm>
|
||||
</el-card>
|
||||
|
@@ -1,21 +1,51 @@
|
||||
import { ref } from "vue";
|
||||
import type { PlusFormGroupRow } from "plus-pro-components";
|
||||
import { CreditCard } from "@element-plus/icons-vue";
|
||||
import { api } from "@/api/isvList";
|
||||
import { KeyFormatEnum } from "@/model/enums";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { search } from "./index";
|
||||
|
||||
// 弹窗显示
|
||||
export const dlgKeysSetting = ref(false);
|
||||
export const settingKeysFormData = ref<any>({
|
||||
isvId: 0,
|
||||
keyFormat: KeyFormatEnum.PKCS8,
|
||||
publicKeyIsv: "",
|
||||
privateKeyIsv: "",
|
||||
publicKeyPlatform: "",
|
||||
privateKeyPlatform: ""
|
||||
});
|
||||
export const settingKeysFormRules = {
|
||||
publicKeyIsv: [{ required: true, message: "不能为空" }],
|
||||
privateKeyIsv: [{ required: true, message: "不能为空" }],
|
||||
publicKeyPlatform: [{ required: true, message: "不能为空" }],
|
||||
privateKeyPlatform: [{ required: true, message: "不能为空" }]
|
||||
};
|
||||
// 表单内容
|
||||
export const settingKeysFormColumns: PlusFormGroupRow[] = [
|
||||
{
|
||||
title: "ISV公私钥 - 标识☆分配给开发者",
|
||||
icon: CreditCard,
|
||||
title: "基本信息",
|
||||
columns: [
|
||||
{
|
||||
label: "秘钥格式",
|
||||
prop: "keyFormat",
|
||||
labelWidth: 100,
|
||||
valueType: "radio",
|
||||
options: [
|
||||
{
|
||||
label: "PKCS8(Java适用)",
|
||||
value: KeyFormatEnum.PKCS8
|
||||
},
|
||||
{
|
||||
label: "PKCS1(非Java适用)",
|
||||
value: KeyFormatEnum.PKCS1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "ISV公私钥",
|
||||
columns: [
|
||||
{
|
||||
label: "ISV公钥",
|
||||
@@ -39,12 +69,18 @@ export const settingKeysFormColumns: PlusFormGroupRow[] = [
|
||||
placeholder: "",
|
||||
autosize: { minRows: 2, maxRows: 4 }
|
||||
}
|
||||
},
|
||||
{
|
||||
labelWidth: 100,
|
||||
prop: "restIsvKeys",
|
||||
renderLabel: () => {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "平台公私钥 - 标识☆分配给开发者",
|
||||
icon: CreditCard,
|
||||
title: "平台公私钥",
|
||||
columns: [
|
||||
{
|
||||
label: "☆平台公钥",
|
||||
@@ -67,6 +103,13 @@ export const settingKeysFormColumns: PlusFormGroupRow[] = [
|
||||
placeholder: "",
|
||||
autosize: { minRows: 2, maxRows: 4 }
|
||||
}
|
||||
},
|
||||
{
|
||||
labelWidth: 100,
|
||||
prop: "restPlatformKeys",
|
||||
renderLabel: () => {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -81,3 +124,36 @@ export const settingKeys = (row: any) => {
|
||||
dlgKeysSetting.value = true;
|
||||
});
|
||||
};
|
||||
|
||||
export const restIsvKeysLoading = ref(false);
|
||||
export const resetIsvKeys = () => {
|
||||
restIsvKeysLoading.value = true;
|
||||
api.createKeys(settingKeysFormData.value.keyFormat).then(resp => {
|
||||
restIsvKeysLoading.value = false;
|
||||
const data = resp.data;
|
||||
settingKeysFormData.value.publicKeyIsv = data.publicKey;
|
||||
settingKeysFormData.value.privateKeyIsv = data.privateKey;
|
||||
});
|
||||
};
|
||||
|
||||
export const resetPlatformKeysLoading = ref(false);
|
||||
export const resetPlatformKeys = () => {
|
||||
resetPlatformKeysLoading.value = true;
|
||||
api.createKeys(settingKeysFormData.value.keyFormat).then(resp => {
|
||||
resetPlatformKeysLoading.value = false;
|
||||
const data = resp.data;
|
||||
settingKeysFormData.value.publicKeyPlatform = data.publicKey;
|
||||
settingKeysFormData.value.privateKeyPlatform = data.privateKey;
|
||||
});
|
||||
};
|
||||
|
||||
export const handleUpdateKeys = () => {
|
||||
api.updateKeys(settingKeysFormData.value).then(() => {
|
||||
ElMessage({
|
||||
message: "保存成功",
|
||||
type: "success"
|
||||
});
|
||||
dlgKeysSetting.value = false;
|
||||
search();
|
||||
});
|
||||
};
|
||||
|
@@ -1,11 +1,12 @@
|
||||
import { ref } from "vue";
|
||||
import type { PlusFormGroupRow } from "plus-pro-components";
|
||||
import { CreditCard } from "@element-plus/icons-vue";
|
||||
import { api } from "@/api/isvList";
|
||||
import { KeyFormatEnum } from "@/model/enums";
|
||||
|
||||
// 弹窗显示
|
||||
export const dlgKeysShow = ref(false);
|
||||
export const showKeysFormData = ref<any>({
|
||||
keyFormat: KeyFormatEnum.PKCS8,
|
||||
publicKeyIsv: "",
|
||||
privateKeyIsv: "",
|
||||
publicKeyPlatform: "",
|
||||
@@ -14,8 +15,31 @@ export const showKeysFormData = ref<any>({
|
||||
// 表单内容
|
||||
export const showKeysFormColumns: PlusFormGroupRow[] = [
|
||||
{
|
||||
title: "ISV公私钥 - 标识☆分配给开发者",
|
||||
icon: CreditCard,
|
||||
title: "基本信息",
|
||||
columns: [
|
||||
{
|
||||
label: "秘钥格式",
|
||||
prop: "keyFormat",
|
||||
labelWidth: 100,
|
||||
valueType: "radio",
|
||||
options: [
|
||||
{
|
||||
label: "PKCS8(Java适用)",
|
||||
value: KeyFormatEnum.PKCS8
|
||||
},
|
||||
{
|
||||
label: "PKCS1(非Java适用)",
|
||||
value: KeyFormatEnum.PKCS1
|
||||
}
|
||||
],
|
||||
fieldProps: {
|
||||
disabled: true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "ISV公私钥",
|
||||
columns: [
|
||||
{
|
||||
label: "ISV公钥",
|
||||
@@ -44,8 +68,7 @@ export const showKeysFormColumns: PlusFormGroupRow[] = [
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "平台公私钥 - 标识☆分配给开发者",
|
||||
icon: CreditCard,
|
||||
title: "平台公私钥",
|
||||
columns: [
|
||||
{
|
||||
label: "☆平台公钥",
|
||||
|
@@ -1,13 +1,12 @@
|
||||
import { computed, ref } from "vue";
|
||||
import {
|
||||
type ButtonsCallBackParams,
|
||||
type FieldValues,
|
||||
type PageInfo,
|
||||
type PlusColumn,
|
||||
useTable
|
||||
} from "plus-pro-components";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { StatusEnum } from "@/model/enums";
|
||||
import { RegSource, StatusEnum, YesOrNoEnum } from "@/model/enums";
|
||||
import { api } from "@/api/serveApi";
|
||||
|
||||
const isAdd = ref(false);
|
||||
@@ -64,11 +63,17 @@ pageInfo.value.pageSize = 10;
|
||||
export const tableColumns: PlusColumn[] = [
|
||||
{
|
||||
label: "应用名称",
|
||||
prop: "application"
|
||||
prop: "application",
|
||||
tableColumnProps: {
|
||||
showOverflowTooltip: true
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "接口名称",
|
||||
prop: "apiName"
|
||||
prop: "apiName",
|
||||
tableColumnProps: {
|
||||
showOverflowTooltip: true
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "版本号",
|
||||
@@ -77,7 +82,17 @@ export const tableColumns: PlusColumn[] = [
|
||||
},
|
||||
{
|
||||
label: "接口描述",
|
||||
prop: "description"
|
||||
prop: "description",
|
||||
tableColumnProps: {
|
||||
showOverflowTooltip: true
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
prop: "remark",
|
||||
tableColumnProps: {
|
||||
showOverflowTooltip: true
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "需要授权",
|
||||
@@ -87,8 +102,7 @@ export const tableColumns: PlusColumn[] = [
|
||||
options: [
|
||||
{
|
||||
label: "否",
|
||||
value: 0,
|
||||
color: "red"
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
label: "是",
|
||||
@@ -105,8 +119,7 @@ export const tableColumns: PlusColumn[] = [
|
||||
options: [
|
||||
{
|
||||
label: "否",
|
||||
value: 0,
|
||||
color: "red"
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
label: "是",
|
||||
@@ -115,6 +128,24 @@ export const tableColumns: PlusColumn[] = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "注册来源",
|
||||
prop: "regSource",
|
||||
width: 100,
|
||||
valueType: "select",
|
||||
options: [
|
||||
{
|
||||
label: "系统",
|
||||
value: 1,
|
||||
color: "blue"
|
||||
},
|
||||
{
|
||||
label: "手动",
|
||||
value: 2,
|
||||
color: "green"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "状态",
|
||||
prop: "status",
|
||||
@@ -135,7 +166,13 @@ export const tableColumns: PlusColumn[] = [
|
||||
},
|
||||
{
|
||||
label: "添加时间",
|
||||
prop: "addTime"
|
||||
prop: "addTime",
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
label: "修改时间",
|
||||
prop: "updateTime",
|
||||
width: 160
|
||||
}
|
||||
];
|
||||
// 表格按钮定义
|
||||
@@ -195,40 +232,48 @@ export const dlgTitle = ref("");
|
||||
const editFormDataGen = () => {
|
||||
return {
|
||||
application: "",
|
||||
apiName: "",
|
||||
apiVersion: "",
|
||||
status: 1,
|
||||
isPermission: 0,
|
||||
description: "",
|
||||
regSource: 1,
|
||||
isNeedToken: 0
|
||||
};
|
||||
};
|
||||
export const editFormData = ref<FieldValues>(editFormDataGen());
|
||||
|
||||
export const editFormData = ref<any>(editFormDataGen());
|
||||
export const editFormRules = {
|
||||
application: [{ required: true, message: "请输入应用名称" }],
|
||||
apiName: [{ required: true, message: "请输入接口名称" }],
|
||||
apiVersion: [{ required: true, message: "请输入版本号" }],
|
||||
description: [{ required: true, message: "请输入接口描述" }]
|
||||
};
|
||||
export const isCustomRegSource = computed(() => {
|
||||
return editFormData.value.regSource === RegSource.CUSTOM;
|
||||
});
|
||||
|
||||
// 表单内容
|
||||
export const editFormColumns: PlusColumn[] = [
|
||||
{
|
||||
label: "应用名称",
|
||||
prop: "application",
|
||||
valueType: "copy"
|
||||
valueType: "text"
|
||||
},
|
||||
{
|
||||
label: "接口名称",
|
||||
prop: "apiName",
|
||||
valueType: "copy"
|
||||
valueType: "text"
|
||||
},
|
||||
{
|
||||
label: "版本号",
|
||||
prop: "apiVersion",
|
||||
valueType: "copy"
|
||||
valueType: "text"
|
||||
},
|
||||
{
|
||||
label: "接口描述",
|
||||
prop: "description",
|
||||
valueType: "copy"
|
||||
valueType: "text"
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
@@ -247,12 +292,12 @@ export const editFormColumns: PlusColumn[] = [
|
||||
options: [
|
||||
{
|
||||
label: "否",
|
||||
value: 0,
|
||||
value: YesOrNoEnum.NO,
|
||||
color: "red"
|
||||
},
|
||||
{
|
||||
label: "是",
|
||||
value: 1,
|
||||
value: YesOrNoEnum.YES,
|
||||
color: "green"
|
||||
}
|
||||
]
|
||||
@@ -264,12 +309,12 @@ export const editFormColumns: PlusColumn[] = [
|
||||
options: [
|
||||
{
|
||||
label: "否",
|
||||
value: 0,
|
||||
value: YesOrNoEnum.NO,
|
||||
color: "red"
|
||||
},
|
||||
{
|
||||
label: "是",
|
||||
value: 1,
|
||||
value: YesOrNoEnum.YES,
|
||||
color: "green"
|
||||
}
|
||||
]
|
||||
@@ -281,12 +326,12 @@ export const editFormColumns: PlusColumn[] = [
|
||||
options: [
|
||||
{
|
||||
label: "禁用",
|
||||
value: 0,
|
||||
value: StatusEnum.DISABLE,
|
||||
color: "red"
|
||||
},
|
||||
{
|
||||
label: "启用",
|
||||
value: 1,
|
||||
value: StatusEnum.ENABLE,
|
||||
color: "green"
|
||||
}
|
||||
]
|
||||
|
@@ -10,6 +10,7 @@ import {
|
||||
handlePaginationChange,
|
||||
handleSave,
|
||||
handleSearch,
|
||||
isCustomRegSource,
|
||||
pageInfo,
|
||||
searchFormColumns,
|
||||
searchFormData,
|
||||
@@ -40,6 +41,7 @@ import {
|
||||
pageSizeList: [10, 20, 50, 100],
|
||||
align: 'right'
|
||||
}"
|
||||
adaptive
|
||||
@paginationChange="handlePaginationChange"
|
||||
>
|
||||
<template #title>
|
||||
@@ -56,7 +58,49 @@ import {
|
||||
labelWidth: '100px',
|
||||
labelPosition: 'right'
|
||||
}"
|
||||
:hasErrorTip="false"
|
||||
@confirm="handleSave"
|
||||
/>
|
||||
>
|
||||
<template #plus-field-application>
|
||||
<el-input
|
||||
v-if="isCustomRegSource"
|
||||
v-model="editFormData.application"
|
||||
placeholder="请输入所属应用"
|
||||
/>
|
||||
<span v-else>
|
||||
{{ editFormData.application }}
|
||||
</span>
|
||||
</template>
|
||||
<template #plus-field-apiName>
|
||||
<el-input
|
||||
v-if="isCustomRegSource"
|
||||
v-model="editFormData.apiName"
|
||||
placeholder="请输入接口名称,如:goods.get"
|
||||
/>
|
||||
<span v-else>
|
||||
{{ editFormData.apiName }}
|
||||
</span>
|
||||
</template>
|
||||
<template #plus-field-apiVersion>
|
||||
<el-input
|
||||
v-if="isCustomRegSource"
|
||||
v-model="editFormData.apiVersion"
|
||||
placeholder="请输入接口版本,如:1.0"
|
||||
/>
|
||||
<span v-else>
|
||||
{{ editFormData.apiVersion }}
|
||||
</span>
|
||||
</template>
|
||||
<template #plus-field-description>
|
||||
<el-input
|
||||
v-if="isCustomRegSource"
|
||||
v-model="editFormData.description"
|
||||
placeholder="请输入接口描述"
|
||||
/>
|
||||
<span v-else>
|
||||
{{ editFormData.description }}
|
||||
</span>
|
||||
</template>
|
||||
</PlusDialogForm>
|
||||
</el-card>
|
||||
</template>
|
||||
|
Reference in New Issue
Block a user