Browse Source

📀 重构前端框架进行适配后端框架

master
wangxiang 3 years ago
parent
commit
c89d7658ed
  1. 83
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/OauthClientDetailsController.java
  2. 10
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/OauthClientDetailsService.java
  3. 24
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/OauthClientDetailsServiceImpl.java
  4. 2
      kicc-ui/src/api/platform/system/controller/client.ts
  5. 2
      kicc-ui/src/api/platform/system/controller/config.ts
  6. 2
      kicc-ui/src/api/platform/system/controller/dict.ts
  7. 2
      kicc-ui/src/api/platform/system/controller/dictdata.ts
  8. 0
      kicc-ui/src/api/platform/system/entity/client.ts
  9. 0
      kicc-ui/src/api/platform/system/entity/config.ts
  10. 0
      kicc-ui/src/api/platform/system/entity/dict.ts
  11. 0
      kicc-ui/src/api/platform/system/entity/dictData.ts
  12. 33
      kicc-ui/src/api/platform/system/entity/logModel.ts
  13. 72
      kicc-ui/src/views/system/log/LogDrawer.vue
  14. 90
      kicc-ui/src/views/system/log/index.vue
  15. 137
      kicc-ui/src/views/system/log/log.data.ts

83
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/OauthClientDetailsController.java

@ -1,20 +1,21 @@
package com.cloud.kicc.system.controller; package com.cloud.kicc.system.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloud.kicc.system.api.entity.OauthClientDetails;
import com.cloud.kicc.system.service.OauthClientDetailsService;
import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.log.annotation.SysLog; import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.system.api.entity.OauthClientDetails;
import com.cloud.kicc.system.service.OauthClientDetailsService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.Arrays;
/** /**
*<p> *<p>
@ -32,62 +33,46 @@ public class OauthClientDetailsController {
private final OauthClientDetailsService oauthClientDetailsService; private final OauthClientDetailsService oauthClientDetailsService;
/** private LambdaQueryWrapper<OauthClientDetails> getQueryWrapper(OauthClientDetails oauthClientDetails) {
* 通过ID查询 return new LambdaQueryWrapper<OauthClientDetails>()
* @param clientId 客户端id .like(StrUtil.isNotBlank(oauthClientDetails.getClientId()), OauthClientDetails::getClientId, oauthClientDetails.getClientId())
* @return SysOauthClientDetails .between(StrUtil.isNotBlank(oauthClientDetails.getBeginTime()) && StrUtil.isNotBlank(oauthClientDetails.getEndTime()),
*/ OauthClientDetails::getCreateTime, oauthClientDetails.getBeginTime(), oauthClientDetails.getEndTime());
@GetMapping("/{clientId}")
public R<List<OauthClientDetails>> getByClientId(@PathVariable String clientId) {
return R.ok(oauthClientDetailsService
.list(Wrappers.<OauthClientDetails>lambdaQuery().eq(OauthClientDetails::getClientId, clientId)));
} }
/**
* 简单分页查询
* @param page 分页对象
* @param oauthClientDetails 系统终端
* @return
*/
@GetMapping("/list") @GetMapping("/list")
public R<IPage<OauthClientDetails>> getOauthClientDetailsPage(Page page, OauthClientDetails oauthClientDetails) { public R list(Page page, OauthClientDetails oauthClientDetails) {
return R.ok(oauthClientDetailsService.page(page, Wrappers.query(oauthClientDetails))); IPage<OauthClientDetails> list = oauthClientDetailsService.page(page, getQueryWrapper(oauthClientDetails));
return R.ok(list.getRecords(), list.getTotal());
} }
/** @GetMapping("/{id:\\w+}")
* 添加 public R getById(@PathVariable("id") String id) {
* @param oauthClientDetails 实体 return R.ok(oauthClientDetailsService.getById(id));
* @return success/false
*/
@SysLog("添加终端")
@PostMapping("/save")
@PreAuthorize("@pms.hasPermission('sys_client_add')")
public R<Boolean> add(@Valid @RequestBody OauthClientDetails oauthClientDetails) {
return R.ok(oauthClientDetailsService.save(oauthClientDetails));
} }
/** @SysLog("添加终端")
* 删除 @PostMapping("/save")
* @param id ID @PreAuthorize("@pms.hasPermission('client_add')")
* @return success/false public R save(@Valid @RequestBody OauthClientDetails oauthClientDetails) {
*/ oauthClientDetailsService.save(oauthClientDetails);
@SysLog("删除终端") return R.ok();
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_client_del')")
public R<Boolean> removeById(@PathVariable String id) {
return R.ok(oauthClientDetailsService.removeClientDetailsById(id));
} }
/**
* 编辑
* @param oauthClientDetails 实体
* @return success/false
*/
@SysLog("编辑终端") @SysLog("编辑终端")
@PutMapping("/update") @PutMapping("/update")
@PreAuthorize("@pms.hasPermission('sys_client_edit')") @PreAuthorize("@pms.hasPermission('client_edit')")
public R<Boolean> update(@Valid @RequestBody OauthClientDetails oauthClientDetails) { public R update(@Valid @RequestBody OauthClientDetails oauthClientDetails) {
return R.ok(oauthClientDetailsService.updateClientDetailsById(oauthClientDetails)); oauthClientDetailsService.updateClientDetailsById(oauthClientDetails);
return R.ok();
}
@SysLog("删除终端")
@DeleteMapping("/{ids}")
@PreAuthorize("@pms.hasPermission('client_del')")
public R<Boolean> removeById(@PathVariable String[] ids) {
oauthClientDetailsService.removeClientDetailsByIds(Arrays.asList(ids));
return R.ok();
} }
@SysLog("清除终端缓存") @SysLog("清除终端缓存")

10
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/OauthClientDetailsService.java

@ -3,6 +3,8 @@ package com.cloud.kicc.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.kicc.system.api.entity.OauthClientDetails; import com.cloud.kicc.system.api.entity.OauthClientDetails;
import java.util.List;
/** /**
*<p> *<p>
* 授权客户端管理 * 授权客户端管理
@ -15,15 +17,15 @@ public interface OauthClientDetailsService extends IService<OauthClientDetails>
/** /**
* 通过ID删除客户端 * 通过ID删除客户端
* @param id * @param ids
* @return * @return Boolean
*/ */
Boolean removeClientDetailsById(String id); Boolean removeClientDetailsByIds(List<String> ids);
/** /**
* 修改客户端信息 * 修改客户端信息
* @param oauthClientDetails * @param oauthClientDetails
* @return * @return Boolean
*/ */
Boolean updateClientDetailsById(OauthClientDetails oauthClientDetails); Boolean updateClientDetailsById(OauthClientDetails oauthClientDetails);

24
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/OauthClientDetailsServiceImpl.java

@ -1,13 +1,15 @@
package com.cloud.kicc.system.service.impl; package com.cloud.kicc.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.common.core.constant.CacheConstants;
import com.cloud.kicc.system.api.entity.OauthClientDetails; import com.cloud.kicc.system.api.entity.OauthClientDetails;
import com.cloud.kicc.system.mapper.OauthClientDetailsMapper; import com.cloud.kicc.system.mapper.OauthClientDetailsMapper;
import com.cloud.kicc.system.service.OauthClientDetailsService; import com.cloud.kicc.system.service.OauthClientDetailsService;
import com.cloud.kicc.common.core.constant.CacheConstants;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
*<p> *<p>
* 授权客户端管理 * 授权客户端管理
@ -19,35 +21,21 @@ import org.springframework.stereotype.Service;
@Service @Service
public class OauthClientDetailsServiceImpl extends ServiceImpl<OauthClientDetailsMapper, OauthClientDetails> implements OauthClientDetailsService { public class OauthClientDetailsServiceImpl extends ServiceImpl<OauthClientDetailsMapper, OauthClientDetails> implements OauthClientDetailsService {
/**
* 通过ID删除客户端
* @param id
* @return
*/
@Override @Override
@CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, key = "#id") @CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, key = "#ids")
public Boolean removeClientDetailsById(String id) { public Boolean removeClientDetailsByIds(List<String> ids) {
return this.removeById(id); return this.removeByIds(ids);
} }
/**
* 根据客户端信息
* @param clientDetails
* @return
*/
@Override @Override
@CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, key = "#clientDetails.clientId") @CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, key = "#clientDetails.clientId")
public Boolean updateClientDetailsById(OauthClientDetails clientDetails) { public Boolean updateClientDetailsById(OauthClientDetails clientDetails) {
return this.updateById(clientDetails); return this.updateById(clientDetails);
} }
/**
* 清除客户端缓存
*/
@Override @Override
@CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, allEntries = true) @CacheEvict(value = CacheConstants.OAUTH_CLIENT_DETAILS, allEntries = true)
public void clearClientCache() { public void clearClientCache() {
} }
} }

2
kicc-ui/src/api/platform/system/controller/client.ts

@ -1,4 +1,4 @@
import { ClientParams, ClientListGetResultModel, ClientListItem } from '../entity/clientModel'; import { ClientParams, ClientListGetResultModel, ClientListItem } from '../entity/client';
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
enum Api { enum Api {

2
kicc-ui/src/api/platform/system/controller/config.ts

@ -1,4 +1,4 @@
import { ConfigParams, Config, ConfigResult } from '../entity/configModel' import { ConfigParams, Config, ConfigResult } from '../entity/config'
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import {isDef} from "/@/utils/is"; import {isDef} from "/@/utils/is";

2
kicc-ui/src/api/platform/system/controller/dict.ts

@ -1,4 +1,4 @@
import { DictParams, DictResult, Dict } from '../entity/dictModel'; import { DictParams, DictResult, Dict } from '../entity/dict';
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import {isDef} from "/@/utils/is"; import {isDef} from "/@/utils/is";

2
kicc-ui/src/api/platform/system/controller/dictdata.ts

@ -1,4 +1,4 @@
import {DictDataParams, DictDataResult, DictData} from '../entity/dictDataModel'; import {DictDataParams, DictDataResult, DictData} from '../entity/dictData';
import {defHttp} from '/@/utils/http/axios'; import {defHttp} from '/@/utils/http/axios';
import {isDef} from "/@/utils/is"; import {isDef} from "/@/utils/is";

0
kicc-ui/src/api/platform/system/entity/clientModel.ts → kicc-ui/src/api/platform/system/entity/client.ts

0
kicc-ui/src/api/platform/system/entity/configModel.ts → kicc-ui/src/api/platform/system/entity/config.ts

0
kicc-ui/src/api/platform/system/entity/dictModel.ts → kicc-ui/src/api/platform/system/entity/dict.ts

0
kicc-ui/src/api/platform/system/entity/dictDataModel.ts → kicc-ui/src/api/platform/system/entity/dictData.ts

33
kicc-ui/src/api/platform/system/entity/logModel.ts

@ -1,33 +0,0 @@
/**
* @program: kicc-ui
* @description:
*
* @author: entfrm开发团队-
* @create: 2022/4/8
*/
import { Page, R } from '/@/api/model';
// 定义查询参数
export type LogParams = Page & {
title?: string;
traceId?: string;
};
// 定义日志对象
export interface LogListItem {
type: string;
traceId: string;
title: string;
operation: string;
method: string;
url: string;
params: string;
ip: string;
executeTime: string;
location: string;
createTime: string;
exception: string;
}
// 根据日志对象生成响应模型
export type LogListGetResultModel = R<LogListItem>;

72
kicc-ui/src/views/system/log/LogDrawer.vue

@ -1,72 +0,0 @@
<template>
<BasicDrawer
v-bind="$attrs"
@register="registerDrawer"
showFooter
:title="getTitle"
width="500px"
@ok="handleSubmit"
>
<BasicForm @register="registerForm">
<template #menu="{ model, field }">
<BasicTree
v-model:value="model[field]"
:treeData="treeData"
:replaceFields="{ title: 'menuName', key: 'id' }"
checkable
toolbar
title="菜单分配"
/>
</template>
</BasicForm>
</BasicDrawer>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from './log.data';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { BasicTree, TreeItem } from '/@/components/Tree';
//import { getMenuList } from '/@/api/system/role';
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
const treeData = ref<TreeItem[]>([]);
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 90,
schemas: formSchema,
showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
resetFields();
setDrawerProps({ confirmLoading: false });
// setFieldsValuetreeDataTreekey not exist
if (unref(treeData).length === 0) {
//treeData.value = (await getMenuList()) as any as TreeItem[];
}
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
setFieldsValue({
...data.record,
});
}
});
const getTitle = computed(() => (!unref(isUpdate) ? '新增日志' : '编辑日志'));
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
// TODO custom api
console.log(values);
closeDrawer();
emit('success');
} finally {
setDrawerProps({ confirmLoading: false });
}
}
</script>

90
kicc-ui/src/views/system/log/index.vue

@ -1,90 +0,0 @@
<template>
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleDeleteAll">清空日志</a-button>
</template>
<template #action="{ record }">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
color: 'error',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</BasicTable>
<LogDrawer @register="registerDrawer" @success="handleSuccess" />
</PageWrapper>
</template>
<script lang="ts" setup>
//
import { PageWrapper } from '/@/components/Page';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
//
import { columns, searchFormSchema } from './log.data';
// API
import { getLogListByPage, logEmpty } from '/@/api/platform/system/controller/log';
import { useDrawer } from '/@/components/Drawer';
import LogDrawer from './LogDrawer.vue';
import { useMessage } from '/@/hooks/web/useMessage';
const { createConfirm } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({
title: '日志列表',
api: getLogListByPage,
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
useSearchForm: true,
showTableSetting: true,
bordered: true,
showIndexColumn: false,
actionColumn: {
width: 80,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
fixed: undefined,
},
});
function handleEdit(record: Recordable) {
openDrawer(true, {
record,
isUpdate: true,
});
}
function handleDelete(record: Recordable) {
console.log(record);
}
function handleDeleteAll() {
createConfirm({
iconType: 'warning',
content: '确定要清空所有日志数据吗?',
onOk: async () => {
await logEmpty();
reload();
},
});
}
function handleSuccess() {
reload();
}
</script>

137
kicc-ui/src/views/system/log/log.data.ts

@ -1,137 +0,0 @@
import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { h } from 'vue';
import { Tag } from 'ant-design-vue';
export const columns: BasicColumn[] = [
{
title: 'TraceId',
dataIndex: 'traceId',
width: 100,
},
{
title: '操作',
dataIndex: 'title',
width: 100,
},
{
title: '路径',
dataIndex: 'url',
width: 130,
},
{
title: '方法',
dataIndex: 'method',
width: 60,
customRender: ({ record }) => {
return h(Tag, { color: 'blue' }, () => record.method);
},
},
{
title: '耗时(ms)',
dataIndex: 'executeTime',
width: 80,
customRender: ({ record }) => {
const time = record.executeTime;
const color = time > 1000 ? 'red' : 'green';
return h(Tag, { color: color }, () => time);
},
},
{
title: 'IP地址',
dataIndex: 'ip',
width: 100,
},
{
title: '地区',
dataIndex: 'location',
width: 100,
},
{
title: '类型',
dataIndex: 'type',
width: 120,
customRender: ({ record }) => {
const type = record.type;
const enable = ~~type === 1;
const color = enable ? 'green' : 'red';
const text = enable ? '日志' : '异常';
return h(Tag, { color: color }, () => text);
},
},
{
title: '创建时间',
dataIndex: 'createTime',
width: 180,
},
];
export const searchFormSchema: FormSchema[] = [
{
field: 'keyword',
label: '关键字',
component: 'Input',
componentProps: {
placeholder: '请输入TraceId/名称',
},
colProps: { span: 8 },
},
{
field: 'startDate',
label: '起始时间',
component: 'DatePicker',
colProps: { span: 8 },
},
{
field: 'endDate',
label: '截止时间',
component: 'DatePicker',
colProps: { span: 8 },
},
];
export const formSchema: FormSchema[] = [
{
field: 'type',
label: '日志类型',
required: true,
component: 'Select',
componentProps: {
options: [
{ label: '日志', value: '1' },
{ label: '异常', value: '2' },
],
},
dynamicDisabled: true,
},
{
field: 'title',
label: '日志标题',
component: 'Input',
},
{
field: 'method',
label: '执行方法',
component: 'Input',
},
{
field: 'url',
label: '请求路径',
component: 'Input',
},
{
field: 'params',
label: '请求参数',
component: 'InputTextArea',
},
{
label: '操作内容',
field: 'operation',
component: 'InputTextArea',
},
{
field: 'exception',
label: '异常信息',
component: 'InputTextArea',
}
];
Loading…
Cancel
Save