Signed-off-by: chy <chy@163.com>

This commit is contained in:
chy
2026-02-02 23:17:44 +08:00
parent e10f2f058c
commit a49878384e
774 changed files with 249821 additions and 0 deletions

96
src/App.vue Normal file
View File

@@ -0,0 +1,96 @@
<script lang="ts" setup>
import { isDark } from '@/utils/is'
import { useAppStore } from '@/store/modules/app'
import { useDesign } from '@/hooks/web/useDesign'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
import routerSearch from '@/components/RouterSearch/index.vue'
defineOptions({ name: 'APP' })
const { getPrefixCls } = useDesign()
const prefixCls = getPrefixCls('app')
const appStore = useAppStore()
const currentSize = computed(() => appStore.getCurrentSize)
const greyMode = computed(() => appStore.getGreyMode)
const { wsCache } = useCache()
// 根据浏览器当前主题设置系统主题色
// const setDefaultTheme = () => {
// let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK)
// if (isDarkTheme === null) {
// isDarkTheme = isDark()
// }
// appStore.setIsDark(isDarkTheme)
// }
// setDefaultTheme()
const popperContainer = ref<Element | null>()
// 使用 ResizeObserver 监测尺寸变化
const resizeObserver = new ResizeObserver((entries) => {
entries.forEach((entry) => {
const popper = entry.target as HTMLElement
if (popper.offsetWidth > 0 && popper.offsetHeight > 0) {
const originalWidth = popper.offsetWidth
// 把节点的高度改为节点的宽度
popper.style.setProperty('height', `${originalWidth}px`, 'important')
// 停止观察(如果需要持续监测可保留)
resizeObserver.unobserve(popper)
}
})
})
onMounted(() => {
// body下el-popper-container里面的样式修改。这里功能不完善
if (appStore.getMobile) {
popperContainer.value = document.querySelector('[id^="el-popper-container"]')
}
})
watch(
() => popperContainer.value,
(value) => {
if (value) {
const poppers = value.querySelectorAll('.el-popper')
poppers.forEach((popper: HTMLElement) => {
resizeObserver.observe(popper)
})
}
}
)
</script>
<template>
<ConfigGlobal :size="currentSize">
<div class="h-100% w-100%" :class="greyMode ? `${prefixCls}-grey-mode` : ''">
<RouterView />
</div>
<routerSearch />
</ConfigGlobal>
</template>
<style lang="scss">
$prefix-cls: #{$namespace}-app;
.size {
width: 100%;
height: 100%;
}
html,
body {
@extend .size;
padding: 0 !important;
margin: 0;
overflow: hidden;
#app {
@extend .size;
}
}
.#{$prefix-cls}-grey-mode {
filter: grayscale(100%);
}
</style>

View File

@@ -0,0 +1,8 @@
import request from '@/config/axios'
export const getActivityList = async (params) => {
return await request.get({
url: '/bpm/activity/list',
params
})
}

View File

@@ -0,0 +1,21 @@
import request from '@/config/axios'
export const getProcessDefinitionBpmnXML = async (id: number) => {
return await request.get({
url: '/bpm/process-definition/get-bpmn-xml?id=' + id
})
}
export const getProcessDefinitionPage = async (params) => {
return await request.get({
url: '/bpm/process-definition/page',
params
})
}
export const getProcessDefinitionList = async (params) => {
return await request.get({
url: '/bpm/process-definition/list',
params
})
}

View File

@@ -0,0 +1,59 @@
import request from '@/config/axios'
export type ProcessDefinitionVO = {
id: string
version: number
deploymentTIme: string
suspensionState: number
}
export type ModelVO = {
id?: number
formName?: string
key: string
name: string
description: string
category?: string
formType: number
formId: string
formCustomCreatePath: string
formCustomViewPath: string
processDefinition?: ProcessDefinitionVO
status?: number
remark?: string
createTime?: string
bpmnXml?: string
}
export const getModelPage = async (params) => {
return await request.get({ url: '/bpm/model/page', params })
}
export const getModel = async (id: number) => {
return await request.get({ url: '/bpm/model/get?id=' + id })
}
export const updateModel = async (data: ModelVO) => {
return await request.put({ url: '/bpm/model/update', data: data })
}
// 任务状态修改
export const updateModelState = async (id: number, state: number) => {
const data = {
id: id,
state: state
}
return await request.put({ url: '/bpm/model/update-state', data: data })
}
export const createModel = async (data: ModelVO) => {
return await request.post({ url: '/bpm/model/create', data: data })
}
export const deleteModel = async (id: number) => {
return await request.delete({ url: '/bpm/model/delete?id=' + id })
}
export const deployModel = async (id: number) => {
return await request.post({ url: '/bpm/model/deploy?id=' + id })
}

View File

@@ -0,0 +1,70 @@
import request from '@/config/axios'
export type Task = {
id: string
name: string
}
export type ProcessInstanceVO = {
id: number
name: string
processDefinitionId: string
category: string
result: number
tasks: Task[]
fields: string[]
status: number
remark: string
businessKey: string
createTime: string
endTime: string
}
export type ProcessInstanceCCVO = {
type: number,
taskName: string,
taskKey: string,
processInstanceName: string,
processInstanceKey: string,
startUserId: string,
options:string [],
reason: string
}
export const getMyProcessInstancePage = async (params) => {
return await request.get({ url: '/bpm/process-instance/my-page', params })
}
export const createProcessInstance = async (data) => {
return await request.post({ url: '/bpm/process-instance/create', data: data })
}
export const cancelProcessInstance = async (id: number, reason: string) => {
const data = {
id: id,
reason: reason
}
return await request.delete({ url: '/bpm/process-instance/cancel', data: data })
}
export const getProcessInstance = async (id: number) => {
return await request.get({ url: '/bpm/process-instance/get?id=' + id })
}
/**
* 抄送
* @param data 抄送数据
* @returns 是否抄送成功
*/
export const createProcessInstanceCC = async (data) => {
return await request.post({ url: '/bpm/process-instance/cc/create', data: data })
}
/**
* 抄送列表
* @param params
* @returns
*/
export const getProcessInstanceCCPage = async (params) => {
return await request.get({ url: '/bpm/process-instance/cc/my-page', params })
}

81
src/api/bpm/task/index.ts Normal file
View File

@@ -0,0 +1,81 @@
import request from '@/config/axios'
export type TaskVO = {
id: number
}
export const getTodoTaskPage = async (params) => {
return await request.get({ url: '/bpm/task/todo-page', params })
}
export const getDoneTaskPage = async (params) => {
return await request.get({ url: '/bpm/task/done-page', params })
}
export const completeTask = async (data) => {
return await request.put({ url: '/bpm/task/complete', data })
}
export const approveTask = async (data) => {
return await request.put({ url: '/bpm/task/approve', data })
}
export const rejectTask = async (data) => {
return await request.put({ url: '/bpm/task/reject', data })
}
export const backTask = async (data) => {
return await request.put({ url: '/bpm/task/back', data })
}
export const updateTaskAssignee = async (data) => {
return await request.put({ url: '/bpm/task/update-assignee', data })
}
export const getTaskListByProcessInstanceId = async (processInstanceId) => {
return await request.get({
url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId
})
}
// 导出任务
export const exportTask = async (params) => {
return await request.download({ url: '/bpm/task/export', params })
}
// 获取所有可回退的节点
export const getReturnList = async (params) => {
return await request.get({ url: '/bpm/task/return-list', params })
}
// 回退
export const returnTask = async (data) => {
return await request.put({ url: '/bpm/task/return', data })
}
/**
* 委派
*/
export const delegateTask = async (data) => {
return await request.put({ url: '/bpm/task/delegate', data })
}
/**
* 加签
*/
export const taskAddSign = async (data) => {
return await request.put({ url: '/bpm/task/create-sign', data })
}
/**
* 获取减签任务列表
*/
export const getChildrenTaskList = async (id: string) => {
return await request.get({ url: '/bpm/task/children-list?taskId=' + id })
}
/**
* 减签
*/
export const taskSubSign = async (data) => {
return await request.delete({ url: '/bpm/task/delete-sign', data })
}

View File

@@ -0,0 +1,29 @@
import request from '@/config/axios'
export type TaskAssignVO = {
id: number
modelId: string
processDefinitionId: string
taskDefinitionKey: string
taskDefinitionName: string
options: string[]
type: number
}
export const getTaskAssignRuleList = async (params) => {
return await request.get({ url: '/bpm/task-assign-rule/list', params })
}
export const createTaskAssignRule = async (data: TaskAssignVO) => {
return await request.post({
url: '/bpm/task-assign-rule/create',
data: data
})
}
export const updateTaskAssignRule = async (data: TaskAssignVO) => {
return await request.put({
url: '/bpm/task-assign-rule/update',
data: data
})
}

View File

@@ -0,0 +1,47 @@
import request from '@/config/axios'
export type UserGroupVO = {
id: number
name: string
description: string
memberUserIds: number[]
status: number
remark: string
createTime: string
}
// 创建用户组
export const createUserGroup = async (data: UserGroupVO) => {
return await request.post({
url: '/bpm/user-group/create',
data: data
})
}
// 更新用户组
export const updateUserGroup = async (data: UserGroupVO) => {
return await request.put({
url: '/bpm/user-group/update',
data: data
})
}
// 删除用户组
export const deleteUserGroup = async (id: number) => {
return await request.delete({ url: '/bpm/user-group/delete?id=' + id })
}
// 获得用户组
export const getUserGroup = async (id: number) => {
return await request.get({ url: '/bpm/user-group/get?id=' + id })
}
// 获得用户组分页
export const getUserGroupPage = async (params) => {
return await request.get({ url: '/bpm/user-group/page', params })
}
// 获取用户组精简信息列表
export const getSimpleUserGroupList = async (): Promise<UserGroupVO[]> => {
return await request.get({ url: '/bpm/user-group/list-all-simple' })
}

View File

@@ -0,0 +1,31 @@
import request from '@/config/axios'
//获取字典表格选择器配置
export const getDicTableConfig = (tableId, dicConfigStr) => {
return request.post({
url: `/lideeyunji/dbform/get/dict-table-web-config/${tableId}`, data: {
lideeYunji_dictTableField: dicConfigStr
}
})
}
//获取字典表格选择器值回显文本
export const getDicTableText = (data) => {
return request.post({ url: `/lideeyunji/dbform/get/table-label`, data })
}
//获取用户选择器列表数据
export const getUserSelectList = (data) => {
return request.post({ url: `/lideeyunji/adapter/user/list`, data })
}
//获取用户选择器的部门列表
export const getUserSelectDeptList = (type) => {
return request.get({ url: `/lideeyunji/adapter/dept/list?type=${type}` })
}
//获取用户选择器的角色列表
export const getUserSelectRoleList = () => {
return request.get({ url: `/lideeyunji/adapter/role/list` })
}

View File

@@ -0,0 +1,63 @@
import request from '@/config/axios'
import { encryptAES } from '@/components/LowDesign/src/utils/aes'
//获取表单设计列表
export const getFormList = (params) => {
return request.post({ url: `/lideeyunji/desform/page`, params })
}
//获取模板表单列表
export const getTemplateFormList = () => {
return request.get({ url: `/lideeyunji/desform/get/template` })
}
//新增表单设计
export const saveFormData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.post({ url: '/lideeyunji/desform/save', data })
}
//修改表单设计
export const updateFormData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.put({ url: '/lideeyunji/desform/update', data })
}
//获取表单设计详情数据
export const getFormDetail = (params) => {
return request.get({ url: `/lideeyunji/desform/detail`, params })
}
//外部链接访问获取详情数据
export const getOpenFormDetail = (params) => {
return request.get({ url: `/lideeyunji/open/desform/get/detail`, params })
}
//删除表单设计数据
export const deleteFormData = (ids) => {
return request.delete({ url: `/lideeyunji/desform/delete`, data: ids })
}
//解除表单设计锁定
export const unlockForm = (id) => {
return request.post({ url: `/lideeyunji/desform/unlock/${id}` })
}
//获取表单设计分组数据
export const getGroupData = (params) => {
return request.get({ url: `/lideeyunji/group/desform/list`, params })
}
//新增表单设计分组
export const saveGroupData = (data) => {
return request.post({ url: `/lideeyunji/group/desform/save`, data })
}
//修改表单设计分组
export const updateGroupData = (data) => {
return request.put({ url: `/lideeyunji/group/desform/update`, data })
}
//删除表单设计分组
export const deleteGroupData = (ids) => {
return request.delete({ url: '/lideeyunji/group/desform/delete', data: ids })
}

View File

@@ -0,0 +1,37 @@
import request from '@/config/axios'
export const getActionApi = (url, option) => {
return request.get({ url, ...option })
}
export const postActionApi = (url, option) => {
return request.post({ url, ...option })
}
export const putActionApi = (url, option) => {
return request.put({ url, ...option })
}
export const deleteActionApi = (url, option) => {
return request.delete({ url, ...option })
}
export const downloadActionApi = (url, option) => {
return request.download({ url, ...option })
}
export const uploadActionApi = (url, option) => {
return request.upload({ url, ...option })
}
// 获取历史Js增强/SQL增强/表单设计版本列表 type: desform js sql
export const getHistoryList = (params) => {
return request.get({ url: `/lideeyunji/history/page`, params })
}
//获取历史Js增强/SQL增强/表单设计版本详情
export const getHistoryDetail = (params) => {
return request.get({ url: `/lideeyunji/history/getDetail`, params })
}

View File

@@ -0,0 +1,24 @@
import request from '@/config/axios'
export const getImportList = (params) => {
return request.post({ url: `/lideeyunji/i18n/page`, params })
}
//导出Excel表数据
export const exportExcelData = (data) => {
return request.download({ url: `/lideeyunji/i18n/export`, method: 'POST', data })
}
//导入的数据
export const uploadExcelData = (data) => {
return request.upload({ url: `/lideeyunji/i18n/import`, data })
}
//查询导入进度
export const getImportProgress = (batchCode) => {
return request.get({ url: `/lideeyunji/i18n/import/progress?batchCode=${batchCode}` })
}
//上传文件
export const uploadFile = (data) => {
return request.upload({ url: '/infra/file/lideeyunji/upload', data: data })
}

View File

@@ -0,0 +1,83 @@
import request from '@/config/axios'
import { encryptAES } from '@/components/LowDesign/src/utils/aes'
//获取多模块组合列表
export const getModuleList = (data) => {
const url = `/lideeyunji/tab/page?pageNo=${data.pageNo}&pageSize=${data.pageSize}`
delete data.pageNo
delete data.pageSize
return request.post({ url, data })
}
//新增多模块组合配置
export const saveModuleData = (data) => {
return request.post({ url: '/lideeyunji/tab/save', data })
}
//修改多模块组合配置
export const updateModuleData = (data) => {
return request.put({ url: '/lideeyunji/tab/update', data })
}
//删除多模块组合配置
export const deleteModuleData = (ids) => {
return request.delete({ url: '/lideeyunji/tab/delete', data: ids })
}
/**
* 获取多模块组合详情数据
* @param id
*/
export const getModuleDetail = (id) => {
return request.post({ url: `/lideeyunji/tab/detail?id=${id}` })
}
//获取多模块组合分组数据
export const getGroupData = (params) => {
return request.get({ url: `/lideeyunji/group/tab/list`, params })
}
//新增多模块组合分组
export const saveGroupData = (data) => {
return request.post({ url: `/lideeyunji/group/tab/save`, data })
}
//修改多模块组合分组
export const updateGroupData = (data) => {
return request.put({ url: `/lideeyunji/group/tab/update`, data })
}
//删除多模块组合分组
export const deleteGroupData = (ids) => {
return request.delete({ url: '/lideeyunji/group/tab/delete', data: ids })
}
//新增Js增强
export const saveJsData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.post({ url: '/lideeyunji/tab/js/save', data })
}
//修改Js增强
export const updateJsData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.put({ url: '/lideeyunji/tab/js/update', data })
}
//获取Js增强详情数据
export const getJsDetail = (params) => {
return request.get({ url: `/lideeyunji/tab/js/detail`, params })
}
//解除Js增强锁定
export const unlockJs = (moduleId, type) => {
return request.post({ url: `/lideeyunji/tab/js/unlock/${moduleId}?type=${type}` })
}
//获取显示配置
export const getModelViewData = (moduleId) => {
return request.get({ url: `/lideeyunji/tab/get/web-config?tabId=${moduleId}` })
}

View File

@@ -0,0 +1,92 @@
import request from '@/config/axios'
//获取报表列表
export const getDbList = (data) => {
let url = `/lideeyunji/report/page`
if (data.pageSize !== undefined) {
url = url + `?pageNo=${data.pageNo}&pageSize=${data.pageSize}`
delete data.pageNo
delete data.pageSize
}
return request.post({ url, data })
}
//新增报表配置
export const saveDbData = (data) => {
return request.post({ url: '/lideeyunji/report/save', data })
}
//修改报表配置
export const updateDbData = (data) => {
return request.put({ url: '/lideeyunji/report/update', data })
}
//删除报表配置
export const deleteDbData = (ids) => {
return request.delete({ url: '/lideeyunji/report/delete', data: ids })
}
//获取报表详情数据
export const getDbDetail = (id) => {
return request.post({ url: `/lideeyunji/report/detail?reportId=${id}`, data: ['all'] })
}
//获取报表分组数据
export const getGroupData = (params) => {
return request.get({ url: `/lideeyunji/group/report/list`, params })
}
//新增报表分组
export const saveGroupData = (data) => {
return request.post({ url: `/lideeyunji/group/report/save`, data })
}
//修改报表分组
export const updateGroupData = (data) => {
return request.put({ url: `/lideeyunji/group/report/update`, data })
}
//删除报表分组
export const deleteGroupData = (ids) => {
return request.delete({ url: '/lideeyunji/group/report/delete', data: ids })
}
//校验报表编码是否存在
export const verifyReportCode = (code) => {
return request.get({ url: '/lideeyunji/report/check/report-code?reportCode=' + code })
}
//复制报表
export const copyReportData = (reportCode, newReportCode) => {
return request.get({ url: `/lideeyunji/report/copy/${reportCode}?reportCode=${newReportCode}` })
}
//获取报表Web配置数据
export const getWebConfig = (reportCode) => {
return request.get({ url: '/lideeyunji/report/get/web-config?reportCode=' + reportCode })
}
//导出报表数据
export const exportExcelData = (reportCode, data?) => {
return request.download({ url: `/lideeyunji/excel/exportReport/${reportCode}`, method: 'POST', data })
}
//获取报表数据
export const getTableList = (reportCode, data?, isOpen?) => {
return request.post({ url: `/lideeyunji/${isOpen ? 'open/report' : 'report-data'}/list/${reportCode}`, data })
}
/**
* 批量获取报表数据
* reportCodes:报表编码 多个用逗号隔开 xxx,xxx
* data:报表对应的搜索值
* 格式 {
* 报表编码:{搜索配置}
* }
* */
export const batchGetTableList = (reportCodes: string, data?) => {
return request.post({ url: `/lideeyunji/report-data/batch/list/${reportCodes}`, data })
}

View File

@@ -0,0 +1,6 @@
import request from '@/config/axios'
//获取表单设计详情数据
export const clearCache = () => {
return request.get({ url: '/lideeyunji/dbform/clear-cache' })
}

View File

@@ -0,0 +1,57 @@
import request from '@/config/axios'
interface FieldData {
tenantId: string | number
dbformId: string
fieldCode: string
listIsView?: 'Y' | 'N'
formIsView?: 'Y' | 'N'
formIsEdit?: 'Y' | 'N'
enableState?: 'Y' | 'N'
}
//获取权限租户列表数据
export const getAllTenant = () => {
return request.get({ url: `/lideeyunji/adapter/tenant/list` })
}
//获取字段权限列表
export const getFieldAuth = (tenantId, dbFormId) => {
return request.post({ url: `/lideeyunji/dbform-role/list-field?tenantId=${tenantId}&dbFormId=${dbFormId}` })
}
//保存字段权限配置
export const saveFieldAuth = (data: FieldData) => {
return request.post({ url: `/lideeyunji/dbform-role/save-field`, data })
}
//获取按钮权限列表
export const getButtonAuth = (tenantId, dbFormId) => {
return request.post({ url: `/lideeyunji/dbform-role/list-button?tenantId=${tenantId}&dbFormId=${dbFormId}` })
}
//保存字段权限配置
export const saveButtonAuth = (data) => {
return request.post({ url: `/lideeyunji/dbform-role/save-button`, data })
}
//获取规则列表
export const getDataAuth = (tenantId, dbFormId) => {
return request.post({ url: `/lideeyunji/dbform-role/list-data?tenantId=${tenantId}&dbFormId=${dbFormId}` })
}
//保存数据规则配置
export const saveDataAuth = (data) => {
return request.post({ url: `/lideeyunji/dbform-role/save-data-tenant`, data })
}
//添加、修改数据规则数据
export const saveRuleData = (data) => {
return request.post({ url: `/lideeyunji/dbform-role/save-data-rule`, data })
}
//删除数据规则
export const deleteRuleData = (ruleId) => {
return request.delete({ url: `/lideeyunji/dbform-role/del-data-rule?ruleId=${ruleId}` })
}

View File

@@ -0,0 +1,27 @@
import request from '@/config/axios'
//获取自定义按钮列表
export const getBtnList = (params) => {
return request.get({ url: `/lideeyunji/enhance/button/${params.pageSize ? 'page' : 'list'}`, params })
}
//新增自定义按钮
export const saveBtnData = (data) => {
return request.post({ url: '/lideeyunji/enhance/button/save', data })
}
//修改自定义按钮
export const updateBtnData = (data) => {
return request.put({ url: '/lideeyunji/enhance/button/update', data })
}
//获取自定义按钮详情数据
export const getBtnDetail = (id) => {
return request.get({ url: `/lideeyunji/enhance/button/detail?id=${id}` })
}
//删除自定义按钮数据
export const deleteBtnData = (ids) => {
return request.delete({ url: `/lideeyunji/enhance/button/delete`, data: ids })
}

View File

@@ -0,0 +1,247 @@
import request from '@/config/axios'
import { encryptAES } from '@/components/LowDesign/src/utils/aes'
//获取表单开发列表
export const getDbList = (data) => {
const url = `/lideeyunji/dbform/page?pageNo=${data.pageNo}&pageSize=${data.pageSize}`
delete data.pageNo
delete data.pageSize
return request.post({ url, data })
}
//新增表单开发配置
export const saveDbData = (data) => {
return request.post({ url: '/lideeyunji/dbform/save', data })
}
//修改表单开发配置
export const updateDbData = (data) => {
return request.put({ url: '/lideeyunji/dbform/update', data })
}
//删除表单开发配置
export const deleteDbData = (ids) => {
return request.delete({ url: '/lideeyunji/dbform/delete', data: ids })
}
/**
* 获取表单开发详情数据
* @param id
* @param typeList Array[string] 查询类型 all dict export foreignkey web
*/
export const getDbDetail = (id, typeList) => {
return request.post({ url: `/lideeyunji/dbform/detail?dbFormId=${id}`, data: typeList })
}
//获取表单开发分组数据
export const getGroupData = (params) => {
return request.get({ url: `/lideeyunji/group/dbform/list`, params })
}
//新增表单开发分组
export const saveGroupData = (data) => {
return request.post({ url: `/lideeyunji/group/dbform/save`, data })
}
//修改表单开发分组
export const updateGroupData = (data) => {
return request.put({ url: `/lideeyunji/group/dbform/update`, data })
}
//删除表单开发分组
export const deleteGroupData = (ids) => {
return request.delete({ url: '/lideeyunji/group/dbform/delete', data: ids })
}
//校验表明是否存在
export const verifyDbName = (name) => {
return request.get({ url: '/lideeyunji/dbform/check/table?tableName=' + name })
}
//同步数据库
export const asyncDbData = (tableId, syncModel) => {
return request.post({ url: `/lideeyunji/dbform/sync-db/${tableId}?syncModel=${syncModel}` })
}
//复制表单开发
export const copyDbData = (tableId, tableName) => {
return request.get({ url: `/lideeyunji/dbform/copy/${tableId}?tableName=${tableName}` })
}
//获取表单开发配置JSON
export const getOptionJson = (tableId) => {
return request.get({ url: `/lideeyunji/dbform/copyJson/${tableId}` })
}
//导入表单开发配置JSON
export const importOptionJson = (data, tableName) => {
return request.post({ url: `/lideeyunji/dbform/importJson?tableName=${tableName}`, data })
}
//获取Web配置数据
export const getWebConfig = (tableId) => {
return request.get({ url: '/lideeyunji/dbform/get/web-config?dbformId=' + tableId })
}
/**
* 获取所有表名和表字段(字典配置用)
* @param systemFlag 'Y' 是否查询系统表
* @param dataSourcesCode 数据源
* @param onlyTableName 'Y' 是否只查表
*/
export const getAllDbDicData = (params = {}) => {
return request.get({ url: '/lideeyunji/dbform/get/all-table', params })
}
//获取表单懒加载控件回显结构数据
export const getLazyStructureData = (data) => {
return request.post({ url: `/lideeyunji/dbform/get/tree-parent`, data: { lideeYunji_treeParent: encryptAES(JSON.stringify(data)) } })
}
//视图表数据源SQL测试
export const viewDataOriginTest = (data) => {
return request.post({ url: `/lideeyunji/dbform/explain/datasource-sql`, data })
}
//视图表数据源SQL解析
export const viewDataOriginAnalysis = (data) => {
return request.post({ url: `/lideeyunji/dbform/explain/sqlfield`, data })
}
//获取未在表单开发的数据库表
export const getSqlFormDicData = () => {
return request.get({ url: `/lideeyunji/dbform/get/not-in-dbform-tables` })
}
//获取通过数据库表反向生成的配置数据
export const getSqlFormConfig = (tableName) => {
return request.get({ url: `/lideeyunji/dbform/get/tables-field?tableName=${tableName}` })
}
//通过AI生成表信息
export const getAiCreatedTable = (prompt) => {
return request.get({ url: `/lideeyunji/dbform/ai/create-table?prompt=${prompt}`, moerData: { timeout: 120000 } })
}
//上传文件/图片
export const upLoadData = (data) => {
return request.upload({ url: '/infra/file/lideeyunji/upload', data })
}
//获取表数据
export const getTableList = (tableId, data, isOpen?) => {
return request.post({ url: `/lideeyunji/${isOpen ? 'open' : 'dbform-data'}/list/${tableId}`, data })
}
//新增表数据
export const saveTableData = (tableId, data, isOpen?) => {
return request.post({ url: `/lideeyunji/${isOpen ? 'open' : 'dbform-data'}/save/${tableId}`, data })
}
//批量新增表数据
export const batchSaveTableData = (tableId, data: object[], isOpen?) => {
return request.post({ url: `/lideeyunji/${isOpen ? 'open' : 'dbform-data'}/save/batch/${tableId}`, data })
}
//修改表数据
export const updateTableData = (tableId, data) => {
return request.put({ url: `/lideeyunji/dbform-data/edit/${tableId}`, data })
}
//批量修改表数据
export const batchUpdateTableData = (tableId, data) => {
return request.put({ url: `/lideeyunji/dbform-data/edit/batch/${tableId}`, data })
}
//删除表数据
export const deleteTableData = (tableId, ids) => {
return request.delete({ url: `/lideeyunji/dbform-data/delete/${tableId}`, data: ids })
}
//获取表数据详情
export const getTableDetail = (tableId, id, isOpen) => {
return request.post({ url: `/lideeyunji/${isOpen ? 'open' : 'dbform-data'}/detail/${tableId}/${id}` })
}
//导出Excel表数据
export const exportExcelData = (tableId, data) => {
return request.download({ url: `/lideeyunji/excel/exportExcel/${tableId}`, method: 'POST', data })
}
//下载导入模板
export const downloadImportTemplate = (tableId) => {
return request.download({ url: `/lideeyunji/excel/exportExcelTemplate/${tableId}` })
}
//上传需要导入的数据
export const uploadViewExcelData = (tableId, data) => {
return request.upload({ url: `/lideeyunji/excel/viewExcel/${tableId}`, data: data })
}
//查询预览导入进度
export const getViewImportProgress = (tableId, batchCode) => {
return request.get({ url: `/lideeyunji/excel/viewProgress/${tableId}?batchCode=${batchCode}` })
}
//获取上传的导入数据
export const getUploadImportData = (tableId, params) => {
return request.post({ url: `/lideeyunji/excel/view/page/${tableId}`, params })
}
//修改上传的导入数据
export const updateUploadImportData = (tableId, data) => {
return request.post({ url: `/lideeyunji/excel/update/fileData/${tableId}`, data })
}
//删除上传的导入数据
export const deleteUploadImportData = (tableId, id) => {
return request.post({ url: `/lideeyunji/excel/del/fileData/${tableId}`, data: { id } })
}
//导入上传数据
export const importUploadData = (tableId, batchCode) => {
return request.post({ url: `/lideeyunji/excel/run/import/${tableId}?batchCode=${batchCode}` })
}
//获取历史导入记录
export const getHistoryImportData = (tableId, params) => {
return request.post({ url: `/lideeyunji/excel/file/list/${tableId}`, params })
}
//撤销导入
export const cancelImportData = (tableId, batchCode) => {
return request.post({ url: `/lideeyunji/excel/rollback/${tableId}?batchCode=${batchCode}` })
}
//获取导入进度
export const getImportProgress = (tableId, params) => {
return request.get({ url: `/lideeyunji/excel/importProgress/${tableId}`, params })
}
//设置导入状态
export const setImportState = (tableId, params) => {
return request.get({ url: `/lideeyunji/excel/importOpTask/${tableId}`, params })
}
//下载导入失败的excel
export const downloadImportError = (tableId, batchCode) => {
return request.download({ url: `/lideeyunji/excel/downloadErrorExcel/${tableId}?batchCode=${batchCode}` })
}
//校验值是否唯一
export const verifyDataOnly = (tableId, data) => {
return request.post({ url: `/lideeyunji/dbform-data/unique/${tableId}`, data })
}
//获取表数据统计信息
export const getTableDataSummary = (tableId, data) => {
return request.post({ url: `/lideeyunji/dbform-data/summary/${tableId}`, data })
}
//获取地区控件回显数据
export const getRegionEchoData = (data) => {
return request.post({ url: `/system/area/view-parent-list`, data })
}

View File

@@ -0,0 +1,28 @@
import request from '@/config/axios'
//获取Java增强列表
export const getJavaList = (params) => {
return request.get({ url: `/lideeyunji/enhance/java/${params.pageSize ? 'page' : 'list'}`, params })
}
//新增Java增强
export const saveJavaData = (data) => {
return request.post({ url: '/lideeyunji/enhance/java/save', data })
}
//修改Java增强
export const updateJavaData = (data) => {
return request.put({ url: '/lideeyunji/enhance/java/update', data })
}
//获取Java增强详情数据
export const getJavaDetail = (id) => {
return request.get({ url: `/lideeyunji/enhance/java/detail?id=${id}` })
}
//删除Java增强数据
export const deleteJavaData = (ids) => {
return request.delete({ url: '/lideeyunji/enhance/java/delete', data: ids })
}

View File

@@ -0,0 +1,24 @@
import request from '@/config/axios'
import { encryptAES } from '@/components/LowDesign/src/utils/aes'
//新增Js增强
export const saveJsData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.post({ url: '/lideeyunji/enhance/js/save', data })
}
//修改Js增强
export const updateJsData = (data) => {
data = encryptAES(JSON.stringify(data))
return request.put({ url: '/lideeyunji/enhance/js/update', data })
}
//获取Js增强详情数据
export const getJsDetail = (params) => {
return request.get({ url: `/lideeyunji/enhance/js/detail`, params })
}
//解除Js增强锁定
export const unlockJs = (dbformId, type) => {
return request.post({ url: `/lideeyunji/enhance/js/unlock/${dbformId}?type=${type}` })
}

View File

@@ -0,0 +1,27 @@
import request from '@/config/axios'
//获取SQL增强列表
export const getSqlList = (params) => {
return request.get({ url: `/lideeyunji/enhance/sql/${params.pageSize ? 'page' : 'list'}`, params })
}
//新增SQL增强
export const saveSqlData = (data) => {
return request.post({ url: '/lideeyunji/enhance/sql/save', data })
}
//修改SQL增强
export const updateSqlData = (data) => {
return request.put({ url: '/lideeyunji/enhance/sql/update', data })
}
//获取SQL增强详情数据
export const getSqlDetail = (id) => {
return request.get({ url: `/lideeyunji/enhance/sql/detail?id=${id}` })
}
//删除SQL增强数据
export const deleteSqlData = (ids) => {
return request.delete({ url: '/lideeyunji/enhance/sql/delete', data: ids })
}

View File

@@ -0,0 +1,48 @@
import request from '@/config/axios'
export interface ConfigVO {
id: number | undefined
category: string
name: string
key: string
value: string
type: number
visible: boolean
remark: string
createTime: Date
}
// 查询参数列表
export const getConfigPage = (params: PageParam) => {
return request.get({ url: '/infra/config/page', params })
}
// 查询参数详情
export const getConfig = (id: number) => {
return request.get({ url: '/infra/config/get?id=' + id })
}
// 根据参数键名查询参数值
export const getConfigKey = (configKey: string) => {
return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey })
}
// 新增参数
export const createConfig = (data: ConfigVO) => {
return request.post({ url: '/infra/config/create', data })
}
// 修改参数
export const updateConfig = (data: ConfigVO) => {
return request.put({ url: '/infra/config/update', data })
}
// 删除参数
export const deleteConfig = (id: number) => {
return request.delete({ url: '/infra/config/delete?id=' + id })
}
// 导出参数
export const exportConfig = (params) => {
return request.download({ url: '/infra/config/export', params })
}

View File

@@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface DataSourceConfigVO {
id: number | undefined
dbCode: string,
name: string
dbType: string,
driverClass: string,
url: string
username: string
password: string
createTime?: Date
}
// 新增数据源配置
export const createDataSourceConfig = (data: DataSourceConfigVO) => {
return request.post({ url: '/infra/data-source-config/create', data })
}
// 修改数据源配置
export const updateDataSourceConfig = (data: DataSourceConfigVO) => {
return request.put({ url: '/infra/data-source-config/update', data })
}
// 删除数据源配置
export const deleteDataSourceConfig = (id: number) => {
return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
}
// 查询数据源配置详情
export const getDataSourceConfig = (id: number) => {
return request.get({ url: '/infra/data-source-config/get?id=' + id })
}
// 查询数据源配置列表
export const getDataSourceConfigList = () => {
return request.get({ url: '/infra/data-source-config/list' })
}

View File

@@ -0,0 +1,16 @@
import request from '@/config/axios'
// 导出Html
export const exportHtml = () => {
return request.download({ url: '/infra/db-doc/export-html' })
}
// 导出Word
export const exportWord = () => {
return request.download({ url: '/infra/db-doc/export-word' })
}
// 导出Markdown
export const exportMarkdown = () => {
return request.download({ url: '/infra/db-doc/export-markdown' })
}

View File

@@ -0,0 +1,46 @@
import request from '@/config/axios'
export interface FilePageReqVO extends PageParam {
path?: string
type?: string
createTime?: Date[]
}
// 文件预签名地址 Response VO
export interface FilePresignedUrlRespVO {
// 文件配置编号
configId: number
// 文件上传 URL
uploadUrl: string
// 文件 URL
url: string
}
// 查询文件列表
export const getFilePage = (params: FilePageReqVO) => {
return request.get({ url: '/infra/file/page', params })
}
// 删除文件
export const deleteFile = (id: number) => {
return request.delete({ url: '/infra/file/delete?id=' + id })
}
// 获取文件预签名地址
export const getFilePresignedUrl = (path: string) => {
return request.get<FilePresignedUrlRespVO>({
url: '/infra/file/presigned-url',
params: { path }
})
}
// 创建文件
export const createFile = (data: any) => {
return request.post({ url: '/infra/file/create', data })
}
// 上传文件
export const updateFile = (data: any) => {
return request.upload({ url: '/infra/file/upload', data })
}

View File

@@ -0,0 +1,61 @@
import request from '@/config/axios'
export interface FileClientConfig {
basePath: string
host?: string
port?: number
username?: string
password?: string
mode?: string
endpoint?: string
bucket?: string
accessKey?: string
accessSecret?: string
domain: string
}
export interface FileConfigVO {
id: number
name: string
storage?: number
master: boolean
visible: boolean
config: FileClientConfig
remark: string
createTime: Date
}
// 查询文件配置列表
export const getFileConfigPage = (params: PageParam) => {
return request.get({ url: '/infra/file-config/page', params })
}
// 查询文件配置详情
export const getFileConfig = (id: number) => {
return request.get({ url: '/infra/file-config/get?id=' + id })
}
// 更新文件配置为主配置
export const updateFileConfigMaster = (id: number) => {
return request.put({ url: '/infra/file-config/update-master?id=' + id })
}
// 新增文件配置
export const createFileConfig = (data: FileConfigVO) => {
return request.post({ url: '/infra/file-config/create', data })
}
// 修改文件配置
export const updateFileConfig = (data: FileConfigVO) => {
return request.put({ url: '/infra/file-config/update', data })
}
// 删除文件配置
export const deleteFileConfig = (id: number) => {
return request.delete({ url: '/infra/file-config/delete?id=' + id })
}
// 测试文件配置
export const testFileConfig = (id: number) => {
return request.get({ url: '/infra/file-config/test?id=' + id })
}

View File

@@ -0,0 +1,63 @@
import request from '@/config/axios'
export interface JobVO {
id: number
name: string
status: number
handlerName: string
handlerParam: string
cronExpression: string
retryCount: number
retryInterval: number
monitorTimeout: number
createTime: Date
}
// 任务列表
export const getJobPage = (params: PageParam) => {
return request.get({ url: '/infra/job/page', params })
}
// 任务详情
export const getJob = (id: number) => {
return request.get({ url: '/infra/job/get?id=' + id })
}
// 新增任务
export const createJob = (data: JobVO) => {
return request.post({ url: '/infra/job/create', data })
}
// 修改定时任务调度
export const updateJob = (data: JobVO) => {
return request.put({ url: '/infra/job/update', data })
}
// 删除定时任务调度
export const deleteJob = (id: number) => {
return request.delete({ url: '/infra/job/delete?id=' + id })
}
// 导出定时任务调度
export const exportJob = (params) => {
return request.download({ url: '/infra/job/export-excel', params })
}
// 任务状态修改
export const updateJobStatus = (id: number, status: number) => {
const params = {
id,
status
}
return request.put({ url: '/infra/job/update-status', params })
}
// 定时任务立即执行一次
export const runJob = (id: number) => {
return request.put({ url: '/infra/job/trigger?id=' + id })
}
// 获得定时任务的下 n 次执行时间
export const getJobNextTimes = (id: number) => {
return request.get({ url: '/infra/job/get_next_times?id=' + id })
}

View File

@@ -0,0 +1,33 @@
import request from '@/config/axios'
export interface JobLogVO {
id: number
jobId: number
handlerName: string
handlerParam: string
cronExpression: string
executeIndex: string
beginTime: Date
endTime: Date
duration: string
status: number
createTime: string
}
// 任务日志列表
export const getJobLogPage = (params: PageParam) => {
return request.get({ url: '/infra/job-log/page', params })
}
// 任务日志详情
export const getJobLog = (id: number) => {
return request.get({ url: '/infra/job-log/get?id=' + id })
}
// 导出定时任务日志
export const exportJobLog = (params) => {
return request.download({
url: '/infra/job-log/export-excel',
params
})
}

View File

@@ -0,0 +1,8 @@
import request from '@/config/axios'
/**
* 获取redis 监控信息
*/
export const getCache = () => {
return request.get({ url: '/infra/redis/get-monitor-info' })
}

View File

@@ -0,0 +1,176 @@
export interface RedisMonitorInfoVO {
info: RedisInfoVO
dbSize: number
commandStats: RedisCommandStatsVO[]
}
export interface RedisInfoVO {
io_threaded_reads_processed: string
tracking_clients: string
uptime_in_seconds: string
cluster_connections: string
current_cow_size: string
maxmemory_human: string
aof_last_cow_size: string
master_replid2: string
mem_replication_backlog: string
aof_rewrite_scheduled: string
total_net_input_bytes: string
rss_overhead_ratio: string
hz: string
current_cow_size_age: string
redis_build_id: string
errorstat_BUSYGROUP: string
aof_last_bgrewrite_status: string
multiplexing_api: string
client_recent_max_output_buffer: string
allocator_resident: string
mem_fragmentation_bytes: string
aof_current_size: string
repl_backlog_first_byte_offset: string
tracking_total_prefixes: string
redis_mode: string
redis_git_dirty: string
aof_delayed_fsync: string
allocator_rss_bytes: string
repl_backlog_histlen: string
io_threads_active: string
rss_overhead_bytes: string
total_system_memory: string
loading: string
evicted_keys: string
maxclients: string
cluster_enabled: string
redis_version: string
repl_backlog_active: string
mem_aof_buffer: string
allocator_frag_bytes: string
io_threaded_writes_processed: string
instantaneous_ops_per_sec: string
used_memory_human: string
total_error_replies: string
role: string
maxmemory: string
used_memory_lua: string
rdb_current_bgsave_time_sec: string
used_memory_startup: string
used_cpu_sys_main_thread: string
lazyfree_pending_objects: string
aof_pending_bio_fsync: string
used_memory_dataset_perc: string
allocator_frag_ratio: string
arch_bits: string
used_cpu_user_main_thread: string
mem_clients_normal: string
expired_time_cap_reached_count: string
unexpected_error_replies: string
mem_fragmentation_ratio: string
aof_last_rewrite_time_sec: string
master_replid: string
aof_rewrite_in_progress: string
lru_clock: string
maxmemory_policy: string
run_id: string
latest_fork_usec: string
tracking_total_items: string
total_commands_processed: string
expired_keys: string
errorstat_ERR: string
used_memory: string
module_fork_in_progress: string
errorstat_WRONGPASS: string
aof_buffer_length: string
dump_payload_sanitizations: string
mem_clients_slaves: string
keyspace_misses: string
server_time_usec: string
executable: string
lazyfreed_objects: string
db0: string
used_memory_peak_human: string
keyspace_hits: string
rdb_last_cow_size: string
aof_pending_rewrite: string
used_memory_overhead: string
active_defrag_hits: string
tcp_port: string
uptime_in_days: string
used_memory_peak_perc: string
current_save_keys_processed: string
blocked_clients: string
total_reads_processed: string
expire_cycle_cpu_milliseconds: string
sync_partial_err: string
used_memory_scripts_human: string
aof_current_rewrite_time_sec: string
aof_enabled: string
process_supervised: string
master_repl_offset: string
used_memory_dataset: string
used_cpu_user: string
rdb_last_bgsave_status: string
tracking_total_keys: string
atomicvar_api: string
allocator_rss_ratio: string
client_recent_max_input_buffer: string
clients_in_timeout_table: string
aof_last_write_status: string
mem_allocator: string
used_memory_scripts: string
used_memory_peak: string
process_id: string
master_failover_state: string
errorstat_NOAUTH: string
used_cpu_sys: string
repl_backlog_size: string
connected_slaves: string
current_save_keys_total: string
gcc_version: string
total_system_memory_human: string
sync_full: string
connected_clients: string
module_fork_last_cow_size: string
total_writes_processed: string
allocator_active: string
total_net_output_bytes: string
pubsub_channels: string
current_fork_perc: string
active_defrag_key_hits: string
rdb_changes_since_last_save: string
instantaneous_input_kbps: string
used_memory_rss_human: string
configured_hz: string
expired_stale_perc: string
active_defrag_misses: string
used_cpu_sys_children: string
number_of_cached_scripts: string
sync_partial_ok: string
used_memory_lua_human: string
rdb_last_save_time: string
pubsub_patterns: string
slave_expires_tracked_keys: string
redis_git_sha1: string
used_memory_rss: string
rdb_last_bgsave_time_sec: string
os: string
mem_not_counted_for_evict: string
active_defrag_running: string
rejected_connections: string
aof_rewrite_buffer_length: string
total_forks: string
active_defrag_key_misses: string
allocator_allocated: string
aof_base_size: string
instantaneous_output_kbps: string
second_repl_offset: string
rdb_bgsave_in_progress: string
used_cpu_user_children: string
total_connections_received: string
migrate_cached_sockets: string
}
export interface RedisCommandStatsVO {
command: string
calls: number
usec: number
}

99
src/api/login/index.ts Normal file
View File

@@ -0,0 +1,99 @@
import request from '@/config/axios'
import { getRefreshToken } from '@/utils/auth'
import type { UserLoginVO } from './types'
export interface SmsCodeVO {
mobile: string
scene: number
}
export interface SmsLoginVO {
mobile: string
code: string
}
// 登录
export const login = (data: UserLoginVO) => {
return request.post({ url: '/system/auth/login', data })
}
// 刷新访问令牌
export const refreshToken = () => {
return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() })
}
/**
* 切换部门/角色
* @param loginDeptId 部门id
* @param loginRoleId 角色id
*/
export const switchLogin = (data) => {
return request.post({ url: '/system/auth/switch-login', data })
}
/**
* 切换租户
* @param tenantId 租户id
*/
export const switchTenant = (data) => {
return request.post({ url: '/system/auth/switch-tenant', data })
}
// 使用租户名,获得租户编号
export const getTenantIdByName = (name: string) => {
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
}
// 使用租户域名,获得租户信息
export const getTenantByWebsite = (website: string) => {
return request.get({ url: '/system/tenant/get-by-website?website=' + website })
}
// 登出
export const loginOut = () => {
return request.post({ url: '/system/auth/logout' })
}
// 获取用户权限信息
export const getInfo = () => {
return request.get({ url: '/system/auth/get-permission-info' })
}
//获取登录验证码
export const sendSmsCode = (data: SmsCodeVO) => {
return request.post({ url: '/system/auth/send-sms-code', data })
}
// 短信验证码登录
export const smsLogin = (data: SmsLoginVO) => {
return request.post({ url: '/system/auth/sms-login', data })
}
// 社交快捷登录,使用 code 授权码
export function socialLogin(type: string, code: string, state: string) {
return request.post({
url: '/system/auth/social-login',
data: {
type,
code,
state
}
})
}
// 社交授权的跳转
export const socialAuthRedirect = (type: number, redirectUri: string) => {
return request.get({
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
})
}
// 获取验证图片以及 token
export const getCode = (data) => {
return request.postOriginal({ url: 'system/captcha/get', data })
}
// 滑动或者点选验证
export const reqCheck = (data) => {
return request.postOriginal({ url: 'system/captcha/check', data })
}

View File

@@ -0,0 +1,41 @@
import request from '@/config/axios'
// 获得授权信息
export const getAuthorize = (clientId: string) => {
return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId })
}
// 发起授权
export const authorize = (
responseType: string,
clientId: string,
redirectUri: string,
state: string,
autoApprove: boolean,
checkedScopes: string[],
uncheckedScopes: string[]
) => {
// 构建 scopes
const scopes = {}
for (const scope of checkedScopes) {
scopes[scope] = true
}
for (const scope of uncheckedScopes) {
scopes[scope] = false
}
// 发起请求
return request.post({
url: '/system/oauth2/authorize',
headers: {
'Content-type': 'application/x-www-form-urlencoded'
},
params: {
response_type: responseType,
client_id: clientId,
redirect_uri: redirectUri,
state: state,
auto_approve: autoApprove,
scope: JSON.stringify(scopes)
}
})
}

31
src/api/login/types.ts Normal file
View File

@@ -0,0 +1,31 @@
export type UserLoginVO = {
username: string
password: string
captchaVerification: string
socialType?: string
socialCode?: string
socialState?: string
}
export type TokenType = {
id: number // 编号
accessToken: string // 访问令牌
refreshToken: string // 刷新令牌
userId: number // 用户编号
userType: number //用户类型
clientId: string //客户端编号
expiresTime: number //过期时间
}
export type UserVO = {
id: number
username: string
nickname: string
deptId: number
email: string
mobile: string
sex: number
avatar: string
loginIp: string
loginDate: string
}

View File

@@ -0,0 +1,19 @@
import request from '@/config/axios'
type LogType = 'info' | 'error'
// 获取请求日志列表
export const getLogPage = (logType: LogType, params) => {
return request.get({ url: `/lideeyunji/apilog/page`, params: { logType, ...params } })
}
// 获取日志详情
export const getLogDetail = (logType: LogType, id: string) => {
return request.get({ url: `/lideeyunji/apilog/detail?logType=${logType}&id=${id}`, })
}
// 清除日志记录
export const deleteLog = (logType: LogType, delDate: string) => {
return request.delete({ url: `/lideeyunji/apilog/delete?logType=${logType}&delDate=${delDate}`, })
}

View File

@@ -0,0 +1,11 @@
import request from '@/config/axios'
// 获得地区树
export const getAreaTree = async () => {
return await request.get({ url: '/system/area/tree' })
}
// 获得 IP 对应的地区名
export const getAreaByIp = async (ip: string) => {
return await request.get({ url: '/system/area/get-by-ip?ip=' + ip })
}

View File

@@ -0,0 +1,43 @@
import request from '@/config/axios'
export interface DeptVO {
id?: number
name: string
parentId: number
status: number
sort: number
leaderUserId: number
phone: string
email: string
createTime: Date
}
// 查询部门(精简)列表
export const getSimpleDeptList = async (): Promise<DeptVO[]> => {
return await request.get({ url: '/system/dept/simple-list' })
}
// 查询部门列表
export const getDeptPage = async (params: PageParam) => {
return await request.get({ url: '/system/dept/list', params })
}
// 查询部门详情
export const getDept = async (id: number) => {
return await request.get({ url: '/system/dept/get?id=' + id })
}
// 新增部门
export const createDept = async (data: DeptVO) => {
return await request.post({ url: '/system/dept/create', data: data })
}
// 修改部门
export const updateDept = async (params: DeptVO) => {
return await request.put({ url: '/system/dept/update', data: params })
}
// 删除部门
export const deleteDept = async (id: number) => {
return await request.delete({ url: '/system/dept/delete?id=' + id })
}

View File

@@ -0,0 +1,49 @@
import request from '@/config/axios'
export type DictDataVO = {
id: number | undefined
sort: number | undefined
label: string
value: string
dictType: string
status: number
colorType: string
cssClass: string
remark: string
createTime: Date
}
// 查询字典数据(精简)列表
export const getSimpleDictDataList = () => {
return request.get({ url: '/system/dict-data/simple-list' })
}
// 查询字典数据列表
export const getDictDataPage = (params: PageParam) => {
return request.get({ url: '/system/dict-data/page', params })
}
// 查询字典数据详情
export const getDictData = (id: number) => {
return request.get({ url: '/system/dict-data/get?id=' + id })
}
// 新增字典数据
export const createDictData = (data: DictDataVO) => {
return request.post({ url: '/system/dict-data/create', data })
}
// 修改字典数据
export const updateDictData = (data: DictDataVO) => {
return request.put({ url: '/system/dict-data/update', data })
}
// 删除字典数据
export const deleteDictData = (id: number) => {
return request.delete({ url: '/system/dict-data/delete?id=' + id })
}
// 导出字典类型数据
export const exportDictData = (params) => {
return request.download({ url: '/system/dict-data/export', params })
}

View File

@@ -0,0 +1,44 @@
import request from '@/config/axios'
export type DictTypeVO = {
id: number | undefined
name: string
type: string
status: number
remark: string
createTime: Date
}
// 查询字典(精简)列表
export const getSimpleDictTypeList = () => {
return request.get({ url: '/system/dict-type/list-all-simple' })
}
// 查询字典列表
export const getDictTypePage = (params: PageParam) => {
return request.get({ url: '/system/dict-type/page', params })
}
// 查询字典详情
export const getDictType = (id: number) => {
return request.get({ url: '/system/dict-type/get?id=' + id })
}
// 新增字典
export const createDictType = (data: DictTypeVO) => {
return request.post({ url: '/system/dict-type/create', data })
}
// 修改字典
export const updateDictType = (data: DictTypeVO) => {
return request.put({ url: '/system/dict-type/update', data })
}
// 删除字典
export const deleteDictType = (id: number) => {
return request.delete({ url: '/system/dict-type/delete?id=' + id })
}
// 导出字典类型
export const exportDictType = (params) => {
return request.download({ url: '/system/dict-type/export', params })
}

View File

@@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface DutyVO {
id?: number
name: string
sort: number
status: number
remark: string
createTime?: Date
}
// 查询职务列表
export const getDutyPage = async (params: PageParam) => {
return await request.get({ url: '/system/duty/page', params })
}
// 获取职务精简信息列表
export const getSimpleDutyList = async (): Promise<DutyVO[]> => {
return await request.get({ url: '/system/duty/simple-list' })
}
// 查询职务详情
export const getDuty = async (id: number) => {
return await request.get({ url: '/system/duty/get?id=' + id })
}
// 新增职务
export const createDuty = async (data: DutyVO) => {
return await request.post({ url: '/system/duty/create', data })
}
// 修改职务
export const updateDuty = async (data: DutyVO) => {
return await request.put({ url: '/system/duty/update', data })
}
// 删除职务
export const deleteDuty = async (id: number) => {
return await request.delete({ url: '/system/duty/delete?id=' + id })
}
// 导出职务
export const exportDuty = async (params) => {
return await request.download({ url: '/system/duty/export', params })
}

View File

@@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface ErrorCodeVO {
id: number | undefined
type: number
applicationName: string
code: number | undefined
message: string
memo: string
createTime: Date
}
// 查询错误码列表
export const getErrorCodePage = (params: PageParam) => {
return request.get({ url: '/system/error-code/page', params })
}
// 查询错误码详情
export const getErrorCode = (id: number) => {
return request.get({ url: '/system/error-code/get?id=' + id })
}
// 新增错误码
export const createErrorCode = (data: ErrorCodeVO) => {
return request.post({ url: '/system/error-code/create', data })
}
// 修改错误码
export const updateErrorCode = (data: ErrorCodeVO) => {
return request.put({ url: '/system/error-code/update', data })
}
// 删除错误码
export const deleteErrorCode = (id: number) => {
return request.delete({ url: '/system/error-code/delete?id=' + id })
}
// 导出错误码
export const excelErrorCode = (params) => {
return request.download({ url: '/system/error-code/export-excel', params })
}

View File

@@ -0,0 +1,25 @@
import request from '@/config/axios'
export interface LoginLogVO {
id: number
logType: number
traceId: number
userId: number
userType: number
username: string
result: number
status: number
userIp: string
userAgent: string
createTime: Date
}
// 查询登录日志列表
export const getLoginLogPage = (params: PageParam) => {
return request.get({ url: '/system/login-log/page', params })
}
// 导出登录日志
export const exportLoginLog = (params) => {
return request.download({ url: '/system/login-log/export', params })
}

View File

@@ -0,0 +1,41 @@
import request from '@/config/axios'
export interface MailAccountVO {
id: number
mail: string
username: string
password: string
host: string
port: number
sslEnable: boolean
}
// 查询邮箱账号列表
export const getMailAccountPage = async (params: PageParam) => {
return await request.get({ url: '/system/mail-account/page', params })
}
// 查询邮箱账号详情
export const getMailAccount = async (id: number) => {
return await request.get({ url: '/system/mail-account/get?id=' + id })
}
// 新增邮箱账号
export const createMailAccount = async (data: MailAccountVO) => {
return await request.post({ url: '/system/mail-account/create', data })
}
// 修改邮箱账号
export const updateMailAccount = async (data: MailAccountVO) => {
return await request.put({ url: '/system/mail-account/update', data })
}
// 删除邮箱账号
export const deleteMailAccount = async (id: number) => {
return await request.delete({ url: '/system/mail-account/delete?id=' + id })
}
// 获得邮箱账号精简列表
export const getSimpleMailAccountList = async () => {
return request.get({ url: '/system/mail-account/simple-list' })
}

View File

@@ -0,0 +1,30 @@
import request from '@/config/axios'
export interface MailLogVO {
id: number
userId: number
userType: number
toMail: string
accountId: number
fromMail: string
templateId: number
templateCode: string
templateNickname: string
templateTitle: string
templateContent: string
templateParams: string
sendStatus: number
sendTime: Date
sendMessageId: string
sendException: string
}
// 查询邮件日志列表
export const getMailLogPage = async (params: PageParam) => {
return await request.get({ url: '/system/mail-log/page', params })
}
// 查询邮件日志详情
export const getMailLog = async (id: number) => {
return await request.get({ url: '/system/mail-log/get?id=' + id })
}

View File

@@ -0,0 +1,50 @@
import request from '@/config/axios'
export interface MailTemplateVO {
id: number
name: string
code: string
accountId: number
nickname: string
title: string
content: string
params: string
status: number
remark: string
}
export interface MailSendReqVO {
mail: string
templateCode: string
templateParams: Map<String, Object>
}
// 查询邮件模版列表
export const getMailTemplatePage = async (params: PageParam) => {
return await request.get({ url: '/system/mail-template/page', params })
}
// 查询邮件模版详情
export const getMailTemplate = async (id: number) => {
return await request.get({ url: '/system/mail-template/get?id=' + id })
}
// 新增邮件模版
export const createMailTemplate = async (data: MailTemplateVO) => {
return await request.post({ url: '/system/mail-template/create', data })
}
// 修改邮件模版
export const updateMailTemplate = async (data: MailTemplateVO) => {
return await request.put({ url: '/system/mail-template/update', data })
}
// 删除邮件模版
export const deleteMailTemplate = async (id: number) => {
return await request.delete({ url: '/system/mail-template/delete?id=' + id })
}
// 发送邮件
export const sendMail = (data: MailSendReqVO) => {
return request.post({ url: '/system/mail-template/send-mail', data })
}

View File

@@ -0,0 +1,54 @@
import request from '@/config/axios'
export interface MenuVO {
id: number
name: string
permission: string
type: number
sort: number
parentId: number
path: string
icon: string
component: string
componentName?: string
status: number
visible: boolean
keepAlive: boolean
alwaysShow?: boolean
createTime: Date
}
// 查询菜单(精简)列表
export const getSimpleMenusList = () => {
return request.get({ url: '/system/menu/simple-list' })
}
// 查询菜单列表
export const getMenuList = (params) => {
return request.get({ url: '/system/menu/list', params })
}
// 获取菜单详情
export const getMenu = (id: number) => {
return request.get({ url: '/system/menu/get?id=' + id })
}
// 新增菜单
export const createMenu = (data: MenuVO) => {
return request.post({ url: '/system/menu/create', data })
}
//批量新增菜单
export const batchCreateMenu = (data: Array<MenuVO>) => {
return request.post({ url: '/system/menu/batch/create', data })
}
// 修改菜单
export const updateMenu = (data: MenuVO) => {
return request.put({ url: '/system/menu/update', data })
}
// 删除菜单
export const deleteMenu = (ids: number[], type?: number) => {
return request.delete({ url: '/system/menu/delete', params: { type }, data: ids })
}

View File

@@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface NoticeVO {
id: number | undefined
title: string
type: number
content: string
status: number
remark: string
creator: string
createTime: Date
}
// 查询公告列表
export const getNoticePage = (params: PageParam) => {
return request.get({ url: '/system/notice/page', params })
}
// 查询公告详情
export const getNotice = (id: number) => {
return request.get({ url: '/system/notice/get?id=' + id })
}
// 新增公告
export const createNotice = (data: NoticeVO) => {
return request.post({ url: '/system/notice/create', data })
}
// 修改公告
export const updateNotice = (data: NoticeVO) => {
return request.put({ url: '/system/notice/update', data })
}
// 删除公告
export const deleteNotice = (id: number) => {
return request.delete({ url: '/system/notice/delete?id=' + id })
}
// 推送公告
export const pushNotice = (id: number) => {
return request.post({ url: '/system/notice/push?id=' + id })
}

View File

@@ -0,0 +1,49 @@
import request from '@/config/axios'
import qs from 'qs'
export interface NotifyMessageVO {
id: number
userId: number
userType: number
templateId: number
templateCode: string
templateNickname: string
templateContent: string
templateType: number
templateParams: string
readStatus: boolean
readTime: Date
createTime: Date
}
// 查询站内信消息列表
export const getNotifyMessagePage = async (params: PageParam) => {
return await request.get({ url: '/system/notify-message/page', params })
}
// 获得我的站内信分页
export const getMyNotifyMessagePage = async (params: PageParam) => {
return await request.get({ url: '/system/notify-message/my-page', params })
}
// 批量标记已读
export const updateNotifyMessageRead = async (ids) => {
return await request.put({
url: '/system/notify-message/update-read?' + qs.stringify({ ids: ids }, { indices: false })
})
}
// 标记所有站内信为已读
export const updateAllNotifyMessageRead = async () => {
return await request.put({ url: '/system/notify-message/update-all-read' })
}
// 获取当前用户的最新站内信列表
export const getUnreadNotifyMessageList = async () => {
return await request.get({ url: '/system/notify-message/get-unread-list' })
}
// 获得当前用户的未读站内信数量
export const getUnreadNotifyMessageCount = async () => {
return await request.get({ url: '/system/notify-message/get-unread-count' })
}

View File

@@ -0,0 +1,50 @@
import request from '@/config/axios'
export interface NotifyTemplateVO {
id?: number
name: string
nickname: string
code: string
content: string
type?: number
params: string
status: number
remark: string
}
export interface NotifySendReqVO {
userIdList: number[]
userType: number | string
templateCode: string
templateParams: Map<String, Object>
}
// 查询站内信模板列表
export const getNotifyTemplatePage = async (params: PageParam) => {
return await request.get({ url: '/system/notify-template/page', params })
}
// 查询站内信模板详情
export const getNotifyTemplate = async (id: number) => {
return await request.get({ url: '/system/notify-template/get?id=' + id })
}
// 新增站内信模板
export const createNotifyTemplate = async (data: NotifyTemplateVO) => {
return await request.post({ url: '/system/notify-template/create', data })
}
// 修改站内信模板
export const updateNotifyTemplate = async (data: NotifyTemplateVO) => {
return await request.put({ url: '/system/notify-template/update', data })
}
// 删除站内信模板
export const deleteNotifyTemplate = async (id: number) => {
return await request.delete({ url: '/system/notify-template/delete?id=' + id })
}
// 发送站内信
export const sendNotify = (data: NotifySendReqVO) => {
return request.post({ url: '/system/notify-template/send-notify', data })
}

View File

@@ -0,0 +1,47 @@
import request from '@/config/axios'
export interface OAuth2ClientVO {
id: number
clientId: string
secret: string
name: string
logo: string
description: string
status: number
accessTokenValiditySeconds: number
refreshTokenValiditySeconds: number
redirectUris: string[]
autoApprove: boolean
authorizedGrantTypes: string[]
scopes: string[]
authorities: string[]
resourceIds: string[]
additionalInformation: string
isAdditionalInformationJson: boolean
createTime: Date
}
// 查询 OAuth2 客户端的列表
export const getOAuth2ClientPage = (params: PageParam) => {
return request.get({ url: '/system/oauth2-client/page', params })
}
// 查询 OAuth2 客户端的详情
export const getOAuth2Client = (id: number) => {
return request.get({ url: '/system/oauth2-client/get?id=' + id })
}
// 新增 OAuth2 客户端
export const createOAuth2Client = (data: OAuth2ClientVO) => {
return request.post({ url: '/system/oauth2-client/create', data })
}
// 修改 OAuth2 客户端
export const updateOAuth2Client = (data: OAuth2ClientVO) => {
return request.put({ url: '/system/oauth2-client/update', data })
}
// 删除 OAuth2
export const deleteOAuth2Client = (id: number) => {
return request.delete({ url: '/system/oauth2-client/delete?id=' + id })
}

View File

@@ -0,0 +1,22 @@
import request from '@/config/axios'
export interface OAuth2TokenVO {
id: number
accessToken: string
refreshToken: string
userId: number
userType: number
clientId: string
createTime: Date
expiresTime: Date
}
// 查询 token列表
export const getAccessTokenPage = (params: PageParam) => {
return request.get({ url: '/system/oauth2-token/page', params })
}
// 删除 token
export const deleteAccessToken = (accessToken: string) => {
return request.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken })
}

View File

@@ -0,0 +1,59 @@
import request from '@/config/axios'
export type OperateLogVO = {
id: number
userNickname: string
traceId: string
userId: number
module: string
name: string
type: number
content: string
exts: Map<String, Object>
requestMethod: string
requestUrl: string
userIp: string
userAgent: string
javaMethod: string
javaMethodArgs: string
startTime: Date
duration: number
resultCode: number
resultMsg: string
resultData: string
}
export type OperateLogV2VO = {
id: number
userNickname: string
traceId: string
userType: number
userId: number
userName: string
type: string
subType: string
bizId: number
action: string
extra: string
requestMethod: string
requestUrl: string
userIp: string
userAgent: string
creator: string
creatorName: string
createTime: Date
// 数据扩展,渲染时使用
title: string // 操作标题(如果为空则取 name 值)
colSize: number // 变更记录行数
contentStrList: string[]
tagsContentList: string[]
}
// 查询操作日志列表
export const getOperateLogPage = (params: PageParam) => {
return request.get({ url: '/system/operate-log/page', params })
}
// 导出操作日志
export const exportOperateLog = (params) => {
return request.download({ url: '/system/operate-log/export', params })
}

View File

@@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface PermissionAssignUserRoleReqVO {
userId: number
roleIds: number[]
}
export interface PermissionAssignRoleMenuReqVO {
roleId: number
menuIds: number[]
}
export interface PermissionAssignRoleDataScopeReqVO {
roleId: number
dataScope: number
dataScopeDeptIds: number[]
}
// 查询角色拥有的菜单权限
export const getRoleMenuList = async (roleId: number) => {
return await request.get({ url: '/system/permission/list-role-menus?roleId=' + roleId })
}
// 赋予角色菜单权限
export const assignRoleMenu = async (data: PermissionAssignRoleMenuReqVO) => {
return await request.post({ url: '/system/permission/assign-role-menu', data })
}
// 赋予角色数据权限
export const assignRoleDataScope = async (data: PermissionAssignRoleDataScopeReqVO) => {
return await request.post({ url: '/system/permission/assign-role-data-scope', data })
}
// 查询用户拥有的角色数组
export const getUserRoleList = async (userId: number) => {
return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId })
}
// 赋予用户角色
export const assignUserRole = async (data: PermissionAssignUserRoleReqVO) => {
return await request.post({ url: '/system/permission/assign-user-role', data })
}

View File

@@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface PositionVO {
id?: number
name: string
sort: number
status: number
remark: string
createTime?: Date
}
// 查询职位列表
export const getPositionPage = async (params: PageParam) => {
return await request.get({ url: '/system/position/page', params })
}
// 获取职位精简信息列表
export const getSimplePositionList = async (): Promise<PositionVO[]> => {
return await request.get({ url: '/system/position/simple-list' })
}
// 查询职位详情
export const getPosition = async (id: number) => {
return await request.get({ url: '/system/position/get?id=' + id })
}
// 新增职位
export const createPosition = async (data: PositionVO) => {
return await request.post({ url: '/system/position/create', data })
}
// 修改职位
export const updatePosition = async (data: PositionVO) => {
return await request.put({ url: '/system/position/update', data })
}
// 删除职位
export const deletePosition = async (id: number) => {
return await request.delete({ url: '/system/position/delete?id=' + id })
}
// 导出职位
export const exportPosition = async (params) => {
return await request.download({ url: '/system/position/export', params })
}

View File

@@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface PostVO {
id?: number
name: string
sort: number
status: number
remark: string
createTime?: Date
}
// 查询岗位列表
export const getPostPage = async (params: PageParam) => {
return await request.get({ url: '/system/post/page', params })
}
// 获取岗位精简信息列表
export const getSimplePostList = async (): Promise<PostVO[]> => {
return await request.get({ url: '/system/post/simple-list' })
}
// 查询岗位详情
export const getPost = async (id: number) => {
return await request.get({ url: '/system/post/get?id=' + id })
}
// 新增岗位
export const createPost = async (data: PostVO) => {
return await request.post({ url: '/system/post/create', data })
}
// 修改岗位
export const updatePost = async (data: PostVO) => {
return await request.put({ url: '/system/post/update', data })
}
// 删除岗位
export const deletePost = async (id: number) => {
return await request.delete({ url: '/system/post/delete?id=' + id })
}
// 导出岗位
export const exportPost = async (params) => {
return await request.download({ url: '/system/post/export', params })
}

View File

@@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface RankVO {
id?: number
name: string
sort: number
status: number
remark: string
createTime?: Date
}
// 查询职级列表
export const getRankPage = async (params: PageParam) => {
return await request.get({ url: '/system/rank/page', params })
}
// 获取职级精简信息列表
export const getSimpleRankList = async (): Promise<RankVO[]> => {
return await request.get({ url: '/system/rank/simple-list' })
}
// 查询职级详情
export const getRank = async (id: number) => {
return await request.get({ url: '/system/rank/get?id=' + id })
}
// 新增职级
export const createRank = async (data: RankVO) => {
return await request.post({ url: '/system/rank/create', data })
}
// 修改职级
export const updateRank = async (data: RankVO) => {
return await request.put({ url: '/system/rank/update', data })
}
// 删除职级
export const deleteRank = async (id: number) => {
return await request.delete({ url: '/system/rank/delete?id=' + id })
}
// 导出职级
export const exportRank = async (params) => {
return await request.download({ url: '/system/rank/export', params })
}

View File

@@ -0,0 +1,61 @@
import request from '@/config/axios'
export interface RoleVO {
id: number
name: string
code: string
sort: number
status: number
type: number
dataScope: number
dataScopeDeptIds: number[]
createTime: Date
}
export interface UpdateStatusReqVO {
id: number
status: number
}
// 查询角色列表
export const getRolePage = async (params: PageParam) => {
return await request.get({ url: '/system/role/page', params })
}
// 查询角色(精简)列表
export const getSimpleRoleList = async (): Promise<RoleVO[]> => {
return await request.get({ url: '/system/role/simple-list' })
}
// 查询角色详情
export const getRole = async (id: number) => {
return await request.get({ url: '/system/role/get?id=' + id })
}
// 新增角色
export const createRole = async (data: RoleVO) => {
return await request.post({ url: '/system/role/create', data })
}
// 修改角色
export const updateRole = async (data: RoleVO) => {
return await request.put({ url: '/system/role/update', data })
}
// 修改角色状态
export const updateRoleStatus = async (data: UpdateStatusReqVO) => {
return await request.put({ url: '/system/role/update-status', data })
}
// 删除角色
export const deleteRole = async (id: number) => {
return await request.delete({ url: '/system/role/delete?id=' + id })
}
// 导出角色
export const exportRole = (params) => {
return request.download({
url: '/system/role/export-excel',
params
})
}

View File

@@ -0,0 +1,58 @@
import request from '@/config/axios'
import qs from 'qs'
export interface SensitiveWordVO {
id: number
name: string
status: number
description: string
tags: string[]
createTime: Date
}
export interface SensitiveWordTestReqVO {
text: string
tag: string[]
}
// 查询敏感词列表
export const getSensitiveWordPage = (params: PageParam) => {
return request.get({ url: '/system/sensitive-word/page', params })
}
// 查询敏感词详情
export const getSensitiveWord = (id: number) => {
return request.get({ url: '/system/sensitive-word/get?id=' + id })
}
// 新增敏感词
export const createSensitiveWord = (data: SensitiveWordVO) => {
return request.post({ url: '/system/sensitive-word/create', data })
}
// 修改敏感词
export const updateSensitiveWord = (data: SensitiveWordVO) => {
return request.put({ url: '/system/sensitive-word/update', data })
}
// 删除敏感词
export const deleteSensitiveWord = (id: number) => {
return request.delete({ url: '/system/sensitive-word/delete?id=' + id })
}
// 导出敏感词
export const exportSensitiveWord = (params) => {
return request.download({ url: '/system/sensitive-word/export-excel', params })
}
// 获取所有敏感词的标签数组
export const getSensitiveWordTagList = () => {
return request.get({ url: '/system/sensitive-word/get-tags' })
}
// 获得文本所包含的不合法的敏感词数组
export const validateText = (query: SensitiveWordTestReqVO) => {
return request.get({
url: '/system/sensitive-word/validate-text?' + qs.stringify(query, { arrayFormat: 'repeat' })
})
}

View File

@@ -0,0 +1,43 @@
import request from '@/config/axios'
export interface SmsChannelVO {
id: number
code: string
status: number
signature: string
remark: string
apiKey: string
apiSecret: string
callbackUrl: string
createTime: Date
}
// 查询短信渠道列表
export const getSmsChannelPage = (params: PageParam) => {
return request.get({ url: '/system/sms-channel/page', params })
}
// 获得短信渠道精简列表
export function getSimpleSmsChannelList() {
return request.get({ url: '/system/sms-channel/simple-list' })
}
// 查询短信渠道详情
export const getSmsChannel = (id: number) => {
return request.get({ url: '/system/sms-channel/get?id=' + id })
}
// 新增短信渠道
export const createSmsChannel = (data: SmsChannelVO) => {
return request.post({ url: '/system/sms-channel/create', data })
}
// 修改短信渠道
export const updateSmsChannel = (data: SmsChannelVO) => {
return request.put({ url: '/system/sms-channel/update', data })
}
// 删除短信渠道
export const deleteSmsChannel = (id: number) => {
return request.delete({ url: '/system/sms-channel/delete?id=' + id })
}

View File

@@ -0,0 +1,37 @@
import request from '@/config/axios'
export interface SmsLogVO {
id: number | null
channelId: number | null
channelCode: string
templateId: number | null
templateCode: string
templateType: number | null
templateContent: string
templateParams: Map<string, object> | null
apiTemplateId: string
mobile: string
userId: number | null
userType: number | null
sendStatus: number | null
sendTime: Date | null
apiSendCode: string
apiSendMsg: string
apiRequestId: string
apiSerialNo: string
receiveStatus: number | null
receiveTime: Date | null
apiReceiveCode: string
apiReceiveMsg: string
createTime: Date | null
}
// 查询短信日志列表
export const getSmsLogPage = (params: PageParam) => {
return request.get({ url: '/system/sms-log/page', params })
}
// 导出短信日志
export const exportSmsLog = (params) => {
return request.download({ url: '/system/sms-log/export-excel', params })
}

View File

@@ -0,0 +1,60 @@
import request from '@/config/axios'
export interface SmsTemplateVO {
id?: number
type?: number
status: number
code: string
name: string
content: string
remark: string
apiTemplateId: string
channelId?: number
channelCode?: string
params?: string[]
createTime?: Date
}
export interface SendSmsReqVO {
mobile: string
templateCode: string
templateParams: Map<String, Object>
}
// 查询短信模板列表
export const getSmsTemplatePage = (params: PageParam) => {
return request.get({ url: '/system/sms-template/page', params })
}
// 查询短信模板详情
export const getSmsTemplate = (id: number) => {
return request.get({ url: '/system/sms-template/get?id=' + id })
}
// 新增短信模板
export const createSmsTemplate = (data: SmsTemplateVO) => {
return request.post({ url: '/system/sms-template/create', data })
}
// 修改短信模板
export const updateSmsTemplate = (data: SmsTemplateVO) => {
return request.put({ url: '/system/sms-template/update', data })
}
// 删除短信模板
export const deleteSmsTemplate = (id: number) => {
return request.delete({ url: '/system/sms-template/delete?id=' + id })
}
// 导出短信模板
export const exportSmsTemplate = (params) => {
return request.download({
url: '/system/sms-template/export-excel',
params
})
}
// 发送短信
export const sendSms = (data: SendSmsReqVO) => {
return request.post({ url: '/system/sms-template/send-sms', data })
}

View File

@@ -0,0 +1,37 @@
import request from '@/config/axios'
export interface SocialClientVO {
id: number
name: string
socialType: number
userType: number
clientId: string
clientSecret: string
agentId: string
status: number
}
// 查询社交客户端列表
export const getSocialClientPage = async (params) => {
return await request.get({ url: `/system/social-client/page`, params })
}
// 查询社交客户端详情
export const getSocialClient = async (id: number) => {
return await request.get({ url: `/system/social-client/get?id=` + id })
}
// 新增社交客户端
export const createSocialClient = async (data: SocialClientVO) => {
return await request.post({ url: `/system/social-client/create`, data })
}
// 修改社交客户端
export const updateSocialClient = async (data: SocialClientVO) => {
return await request.put({ url: `/system/social-client/update`, data })
}
// 删除社交客户端
export const deleteSocialClient = async (id: number) => {
return await request.delete({ url: `/system/social-client/delete?id=` + id })
}

View File

@@ -0,0 +1,24 @@
import request from '@/config/axios'
export interface SocialUserVO {
id: number
type: number
openid: string
token: string
rawTokenInfo: string
nickname: string
avatar: string
rawUserInfo: string
code: string
state: string
}
// 查询社交用户列表
export const getSocialUserPage = async (params) => {
return await request.get({ url: `/system/social-user/page`, params })
}
// 查询社交用户详情
export const getSocialUser = async (id: number) => {
return await request.get({ url: `/system/social-user/get?id=` + id })
}

View File

@@ -0,0 +1,67 @@
import request from '@/config/axios'
export interface TenantVO {
id: number
name: string
contactName: string
contactMobile: string
status: number
domain: string
packageId: number
username: string
password: string
expireTime: Date
accountCount: number
createTime: Date
}
export interface TenantPageReqVO extends PageParam {
name?: string
contactName?: string
contactMobile?: string
status?: number
createTime?: Date[]
}
export interface TenantExportReqVO {
name?: string
contactName?: string
contactMobile?: string
status?: number
createTime?: Date[]
}
// 查询租户列表
export const getTenantPage = (params: TenantPageReqVO) => {
return request.get({ url: '/system/tenant/page', params })
}
// 查询所有租户
export const getTenantAll = () => {
return request.get({ url: '/system/tenant/all' })
}
// 查询租户详情
export const getTenant = (id: number) => {
return request.get({ url: '/system/tenant/get?id=' + id })
}
// 新增租户
export const createTenant = (data: TenantVO) => {
return request.post({ url: '/system/tenant/create', data })
}
// 修改租户
export const updateTenant = (data: TenantVO) => {
return request.put({ url: '/system/tenant/update', data })
}
// 删除租户
export const deleteTenant = (id: number) => {
return request.delete({ url: '/system/tenant/delete?id=' + id })
}
// 导出租户
export const exportTenant = (params: TenantExportReqVO) => {
return request.download({ url: '/system/tenant/export-excel', params })
}

View File

@@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface TenantPackageVO {
id: number
name: string
status: number
remark: string
creator: string
updater: string
updateTime: string
menuIds: number[]
createTime: Date
}
// 查询租户套餐列表
export const getTenantPackagePage = (params: PageParam) => {
return request.get({ url: '/system/tenant-package/page', params })
}
// 获得租户
export const getTenantPackage = (id: number) => {
return request.get({ url: '/system/tenant-package/get?id=' + id })
}
// 新增租户套餐
export const createTenantPackage = (data: TenantPackageVO) => {
return request.post({ url: '/system/tenant-package/create', data })
}
// 修改租户套餐
export const updateTenantPackage = (data: TenantPackageVO) => {
return request.put({ url: '/system/tenant-package/update', data })
}
// 删除租户套餐
export const deleteTenantPackage = (id: number) => {
return request.delete({ url: '/system/tenant-package/delete?id=' + id })
}
// 获取租户套餐精简信息列表
export const getTenantPackageList = () => {
return request.get({ url: '/system/tenant-package/simple-list' })
}

View File

@@ -0,0 +1,81 @@
import request from '@/config/axios'
export interface UserVO {
id: number
username: string
nickname: string
deptId: number
postIds: string[]
email: string
mobile: string
sex: number
avatar: string
loginIp: string
status: number
remark: string
loginDate: Date
createTime: Date
}
// 查询用户管理列表
export const getUserPage = (params: PageParam) => {
return request.get({ url: '/system/user/page', params })
}
// 查询所有用户列表
export const getAllUser = () => {
return request.get({ url: '/system/user/all' })
}
// 查询用户详情
export const getUser = (id: number) => {
return request.get({ url: '/system/user/get?id=' + id })
}
// 新增用户
export const createUser = (data: UserVO) => {
return request.post({ url: '/system/user/create', data })
}
// 修改用户
export const updateUser = (data: UserVO) => {
return request.put({ url: '/system/user/update', data })
}
// 删除用户
export const deleteUser = (id: number) => {
return request.delete({ url: '/system/user/delete?id=' + id })
}
// 导出用户
export const exportUser = (params) => {
return request.download({ url: '/system/user/export', params })
}
// 下载用户导入模板
export const importUserTemplate = () => {
return request.download({ url: '/system/user/get-import-template' })
}
// 用户密码重置
export const resetUserPwd = (id: number, password: string) => {
const data = {
id,
password
}
return request.put({ url: '/system/user/update-password', data: data })
}
// 用户状态修改
export const updateUserStatus = (id: number, status: number) => {
const data = {
id,
status
}
return request.put({ url: '/system/user/update-status', data: data })
}
// 获取用户精简信息列表
export const getSimpleUserList = (): Promise<UserVO[]> => {
return request.get({ url: '/system/user/simple-list' })
}

View File

@@ -0,0 +1,84 @@
import request from '@/config/axios'
interface DicVo {
name: string
id: number
}
export interface ProfileVO {
id: number
username: string
nickname: string
rankInfoList: DicVo[]
deptInfoList: {
deptId: number
deptName: string
dutyInfoList: DicVo[]
positionInfoList: DicVo[]
postInfoList: DicVo[]
roleInfoList: DicVo[]
dutyStr?: string
positionStr?: string
postStr?: string
roleStr?: string
}[]
dept: {
id: number
name: string
}
roles: {
id: number
name: string
}[]
posts: {
id: number
name: string
}[]
socialUsers: {
type: number
openid: string
}[]
email: string
mobile: string
sex: number
avatar: string
status: number
remark: string
loginIp: string
loginDate: Date
createTime: Date
}
export interface UserProfileUpdateReqVO {
nickname: string
email: string
mobile: string
sex: number
}
// 查询用户个人信息
export const getUserProfile = () => {
return request.get({ url: '/system/user/profile/get' })
}
// 修改用户个人信息
export const updateUserProfile = (data: UserProfileUpdateReqVO) => {
return request.put({ url: '/system/user/profile/update', data })
}
// 用户密码重置
export const updateUserPassword = (oldPassword: string, newPassword: string) => {
return request.put({
url: '/system/user/profile/update-password',
data: {
oldPassword: oldPassword,
newPassword: newPassword
}
})
}
// 用户头像上传
export const uploadAvatar = (data) => {
// return request.upload({ url: '/system/user/profile/update-avatar', data: data })
return request.upload({ url: '/infra/file/lideeyunji/upload', data: data })
}

View File

@@ -0,0 +1,31 @@
import request from '@/config/axios'
// 社交绑定,使用 code 授权码
export const socialBind = (type, code, state) => {
return request.post({
url: '/system/social-user/bind',
data: {
type,
code,
state
}
})
}
// 取消社交绑定
export const socialUnbind = (type, openid) => {
return request.delete({
url: '/system/social-user/unbind',
data: {
type,
openid
}
})
}
// 社交授权的跳转
export const socialAuthRedirect = (type, redirectUri) => {
return request.get({
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
})
}

BIN
src/assets/imgs/avatar.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/assets/imgs/avatar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

1
src/assets/imgs/khgl.svg Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1557389231291" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2952" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M512 464c88 0 160-72 160-160s-72-160-160-160-160 72-160 160 72 160 160 160z m-19.2 153.6c-8-6.4-12.8-14.4-12.8-25.6 0-17.6 14.4-32 32-32s32 14.4 32 32c0 11.2-4.8 19.2-12.8 25.6l43.2 152c3.2 11.2 0 22.4-8 30.4l-43.2 43.2c-6.4 6.4-16 6.4-22.4 0L457.6 800c-8-8-11.2-19.2-8-30.4l43.2-152zM372.8 480C321.6 438.4 288 376 288 304c0-123.2 100.8-224 224-224s224 100.8 224 224c0 70.4-33.6 134.4-84.8 176C811.2 526.4 928 673.6 928 848c0 52.8-43.2 96-96 96H192c-52.8 0-96-43.2-96-96 0-174.4 116.8-321.6 276.8-368zM832 880c17.6 0 32-14.4 32-32 0-176-144-320-320-320h-64c-176 0-320 144-320 320 0 17.6 14.4 32 32 32h640z" p-id="2953" fill="#999999"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
src/assets/imgs/loginBj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
src/assets/imgs/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
src/assets/imgs/profile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

1
src/assets/imgs/tb1.svg Normal file
View File

@@ -0,0 +1 @@
<svg t="1602931197583" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="55414" width="48" height="48"><path d="M503 839.1H219.6c-42.3 0-76.6-34.3-76.6-76.6V197.1c0-43.1 34.9-78 78-78h591.7c46.7 0 78.1 32.7 78.1 81.5v30.2c0 17.5-14.2 31.7-31.6 31.7-17.5 0-31.7-14.2-31.7-31.7v-30.3c0-18.1-6.8-18.1-14.7-18.1H221c-7.9 0-14.6 6.7-14.6 14.7v565.3c0 7.3 6 13.3 13.3 13.3h282.7c17.3 0 31.8 13.5 32.3 30.8 0.4 17.9-13.9 32.6-31.7 32.6z" fill="#ffffff" p-id="55415"></path><path d="M861.3 659.1H507.2c-17.5 0-31.7-14.2-31.7-31.7s14.2-31.7 31.7-31.7h354.1c17.5 0 31.7 14.2 31.7 31.7-0.1 17.5-14.2 31.7-31.7 31.7zM596.1 344.3H320.2c-17.5 0-31.7-14.2-31.7-31.7s14.2-31.7 31.7-31.7h275.9c17.5 0 31.7 14.2 31.7 31.7s-14.2 31.7-31.7 31.7zM440.8 486H320.2c-17.5 0-31.7-14.2-31.7-31.7s14.2-31.7 31.7-31.7h120.6c17.5 0 31.7 14.2 31.7 31.7 0 17.6-14.2 31.7-31.7 31.7z" fill="#ffffff" p-id="55416"></path><path d="M684.2 836.1c-17.5 0-31.7-14.2-31.7-31.7v-354c0-17.5 14.2-31.7 31.7-31.7s31.7 14.2 31.7 31.7v354c0 17.5-14.2 31.7-31.7 31.7z" fill="#ffffff" p-id="55417"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
src/assets/imgs/tb2.svg Normal file
View File

@@ -0,0 +1 @@
<svg t="1602931261927" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="55893" width="48" height="48"><path d="M538.79 358.36c0-19.28-15.61-34.9-34.88-34.93H252.67c-18.79 0.67-33.68 16.1-33.68 34.9 0 18.81 14.89 34.24 33.68 34.91h251.24c19.26 0 34.88-15.62 34.88-34.88zM252.67 574.67h61.68c16.94 0.28 31.76-11.38 35.47-27.92 1.85-9.09 0-18.55-5.15-26.27a34.844 34.844 0 0 0-22.27-14.86c-2.28-0.48-4.6-0.72-6.93-0.71h-61.5c-16.93-0.26-31.72 11.39-35.42 27.91-1.87 9.07-0.05 18.5 5.06 26.22a34.777 34.777 0 0 0 22.15 14.92c2.27 0.47 4.59 0.71 6.91 0.71z m0 174.49h111.66c18.79-0.67 33.68-16.1 33.68-34.9 0-18.8-14.89-34.23-33.68-34.9H252.67a34.939 34.939 0 0 0-31.29 17.08 34.915 34.915 0 0 0 0 35.64 34.94 34.94 0 0 0 31.29 17.08z m467.55-265.21c-131.06 0-237.3 106.24-237.3 237.3s106.24 237.3 237.3 237.3c131.05 0 237.3-106.24 237.3-237.3 0.01-62.94-24.99-123.3-69.49-167.81a237.31 237.31 0 0 0-167.81-69.49z m0 404.79c-92.5 0-167.49-74.99-167.49-167.49 0-92.5 74.99-167.49 167.49-167.49 92.5 0 167.49 74.99 167.49 167.49 0 44.42-17.64 87.02-49.06 118.43a167.506 167.506 0 0 1-118.43 49.06z m0 0" p-id="55894" fill="#ffffff"></path><path d="M463.08 888.74H154.91c-5.55 0-10.88-2.21-14.81-6.14a20.953 20.953 0 0 1-6.14-14.81V155.94c0-5.55 2.21-10.87 6.14-14.8 3.93-3.92 9.26-6.12 14.81-6.11h360.75a20.92 20.92 0 0 1 14.83 6.12l155.7 155.7c3.92 3.92 6.12 9.24 6.12 14.79v103.84c9.23-0.83 18.54-1.27 27.92-1.29 14.01 0.01 28.01 0.97 41.89 2.91V311.64a90.23 90.23 0 0 0-26.58-64.14L579.84 92.03a90.254 90.254 0 0 0-64.14-26.8H154.95c-50.1 0-90.71 40.61-90.71 90.71v711.85c0 24.06 9.56 47.13 26.57 64.14a90.73 90.73 0 0 0 64.15 26.57h370.71a309.2 309.2 0 0 1-62.59-69.76z m0 0" p-id="55895" fill="#ffffff"></path><path d="M837.06 669.32l-17.54-17.54c-4.82-4.69-12.72-4.69-17.41 0L697 756.76l-58.78-58.78-0.13-0.13c-2.41-2.28-5.36-3.48-8.7-3.48-3.35 0-6.43 1.34-8.7 3.62l-17.41 17.54c-4.69 4.82-4.69 12.72 0 17.41l65.75 65.75c0.54 0.67 0.94 1.34 1.61 2.01l17.41 17.67h0.13c2.41 2.28 5.36 3.48 8.7 3.48 3.21 0 6.43-1.34 8.7-3.61l131.49-131.49 0.13-0.13c2.28-2.41 3.48-5.36 3.48-8.7-0.01-3.24-1.35-6.32-3.62-8.6z m0 0" p-id="55896" fill="#ffffff"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

1
src/assets/imgs/tb3.svg Normal file
View File

@@ -0,0 +1 @@
<svg t="1602931310304" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="56802" width="48" height="48"><path d="M120.759083 892.5321V127.647783c0-4.252196 3.447422-7.713952 7.699618-7.713952h643.527285c4.252196 0 7.713952 3.461756 7.713952 7.713952V436.239653h55.82018V127.647783c0-35.024045-28.495752-63.534132-63.534132-63.534132H128.458701c-35.024045 0-63.519798 28.510087-63.519798 63.534132v764.884317c0 35.024045 28.495752 63.534132 63.519798 63.534133h360.269409v-55.820181H128.458701c-4.252196 0-7.699618-3.461756-7.699618-7.713952z" fill="#ffffff" p-id="56803"></path><path d="M287.660582 552.786472c-15.41357 0-27.91009 12.48321-27.91009 27.91009s12.49652 27.91009 27.91009 27.91009h111.449918c15.41357 0 27.91009-12.48321 27.91009-27.91009s-12.49652-27.91009-27.91009-27.91009h-111.449918zM636.53722 429.699074c0-15.42688-12.49652-27.91009-27.91009-27.91009H287.660582c-15.41357 0-27.91009 12.48321-27.91009 27.91009s12.49652 27.91009 27.91009 27.91009h320.966548c15.41357 0 27.91009-12.48321 27.91009-27.91009zM608.62713 256.295903H287.660582c-15.41357 0-27.91009 12.48321-27.91009 27.91009s12.49652 27.91009 27.91009 27.91009h320.966548c15.41357 0 27.91009-12.48321 27.91009-27.91009s-12.49652-27.91009-27.91009-27.91009zM820.392212 718.748044h-55.643048v-90.271873c0-15.42688-12.49652-27.91009-27.91009-27.91009s-27.91009 12.48321-27.91009 27.91009v118.181963c0 15.42688 12.49652 27.91009 27.91009 27.91009H820.393236c15.41357 0 27.91009-12.48321 27.91009-27.91009-0.001024-15.42688-12.497544-27.91009-27.911114-27.91009z" fill="#ffffff" p-id="56804"></path><path d="M738.670805 515.125922c-121.258739 0-219.559921 98.300158-219.559921 219.559921 0 121.259763 98.300158 219.560945 219.559921 219.560945 121.259763 0 219.560945-98.300158 219.560945-219.560945 0-121.259763-98.301182-219.559921-219.560945-219.559921z m0 383.299662c-90.286208 0-163.739741-73.453533-163.739741-163.740765 0-90.286208 73.453533-163.739741 163.739741-163.739741 90.286208 0 163.739741 73.453533 163.739741 163.739741 0.001024 90.287232-73.452509 163.740765-163.739741 163.740765z" fill="#ffffff" p-id="56805"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

1
src/assets/imgs/tb4.svg Normal file
View File

@@ -0,0 +1 @@
<svg t="1602931345669" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="57834" width="48" height="48"><path d="M832 128h-128v-32a32 32 0 0 0-64 0V128H384v-32a30.08 30.08 0 0 0-32-32 30.08 30.08 0 0 0-32 32V128H192a60.16 60.16 0 0 0-64 64v640a60.16 60.16 0 0 0 64 64h640a60.16 60.16 0 0 0 64-64V192a64 64 0 0 0-64-64z m0 704H192V320h640z" p-id="57835" fill="#ffffff"></path><path d="M480 448m32 0l0 0q32 0 32 32l0 192q0 32-32 32l0 0q-32 0-32-32l0-192q0-32 32-32Z" p-id="57836" fill="#ffffff"></path><path d="M384 544m32 0l192 0q32 0 32 32l0 0q0 32-32 32l-192 0q-32 0-32-32l0 0q0-32 32-32Z" p-id="57837" fill="#ffffff"></path></svg>

After

Width:  |  Height:  |  Size: 673 B

1
src/assets/imgs/tb5.svg Normal file
View File

@@ -0,0 +1 @@
<svg t="1602931425660" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="58477" width="48" height="48"><path d="M933.8 483.93L805.32 605.85c-19.66 18.35-28.84 44.57-23.59 70.79l32.77 174.35c7.87 43.26-20.97 83.9-62.92 91.76-3.93 1.31-9.17 1.31-13.11 1.31-13.11 0-26.22-3.93-38.02-10.49l-150.76-83.9c-23.6-13.11-52.44-13.11-76.04 0l-150.76 83.9c-11.8 6.56-24.91 10.49-38.02 10.49-17.04 0-32.77-5.24-45.88-15.73-24.91-17.04-36.71-48.51-31.46-78.66l32.77-174.35c5.24-26.22-3.93-53.75-23.6-70.79L88.25 482.62c-31.46-30.15-32.77-79.97-2.62-111.43 11.8-13.11 28.84-20.97 47.19-23.59l173.04-22.29c27.53-2.62 49.82-19.66 61.62-44.57l73.41-156c18.35-39.33 64.23-56.37 103.56-38.01 17.04 7.86 30.15 20.98 38.02 38.01l73.41 158.62c10.49 24.91 34.08 41.95 61.61 44.57l173.04 22.28c43.26 5.24 73.41 44.57 68.17 87.84-3.93 17.04-11.8 32.77-24.9 45.88z m-41.95-61.62c-1.31-5.24-5.24-9.18-10.49-9.18l-173.04-22.28c-49.82-5.24-91.77-36.71-111.43-82.59l-73.41-156c-2.62-6.56-10.49-9.18-17.04-6.56-2.62 1.31-5.24 3.94-6.56 6.56l-73.41 158.62c-20.97 44.57-62.92 76.03-112.74 82.59L142 413.14c-6.56 1.31-11.8 7.87-11.8 14.42 0 2.62 1.31 5.24 3.93 7.86L262.6 557.34c35.39 32.77 51.13 82.59 41.95 131.09l-32.77 174.35c-1.31 5.24 1.31 10.49 5.24 13.11 2.62 1.31 5.24 2.62 7.86 2.62s3.94-1.31 6.56-2.62l149.45-82.59c43.26-24.91 97.01-24.91 140.27 0l150.76 83.9c2.62 1.31 3.93 1.31 6.56 2.62 2.62 0 5.24-1.31 7.86-2.62 3.94-2.62 6.56-7.87 5.24-13.11L718.8 689.74c-9.18-48.51 6.55-97.01 41.95-131.09l128.47-121.92c3.93-3.93 5.25-9.17 2.63-14.42z m0 0" fill="#ffffff" p-id="58478"></path><path d="M518.23 674.01c-13.11 13.11-34.09 13.11-45.88 0L370.1 571.76c-11.8-13.11-11.8-34.08 1.31-45.88 13.11-11.8 31.46-11.8 44.57 0l78.66 78.66 153.38-153.38c13.11-11.8 34.09-11.8 45.88 1.31 11.8 13.11 11.8 31.46 0 44.57L518.23 674.01z m0 0" fill="#ffffff" p-id="58479"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/imgs/wechat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

1
src/assets/svgs/403.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

1
src/assets/svgs/404.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

1
src/assets/svgs/500.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="13.5px" height="9.5px" viewBox="0 0 13.5 9.5" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
<g id="Group-31" transform="matrix(-1 0 0 -1 12.75 8.75)">
<path d="M-3.55271e-15 7.54675L3.50663 3.93842L6.20223 6.42893L11.4931 0.5" id="Path-4" fill="none" fill-rule="evenodd" stroke="#FA5087" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
<path d="M11.4931 0.5L8.49307 0.5" id="Line-7" fill="none" fill-rule="evenodd" stroke="#FA5087" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
<path d="M11.4931 0.5L11.4931 3.5" id="Line-7" fill="none" fill-rule="evenodd" stroke="#FA5087" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 812 B

333
src/assets/svgs/external/external_bg.svg vendored Normal file
View File

@@ -0,0 +1,333 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgba(241, 242, 243, 0); display: block; z-index: 1; position: relative; shape-rendering: auto;" width="1440" height="762" preserveAspectRatio="xMidYMid" viewBox="0 0 1440 762">
<g transform=""><path id="path0" d="M 1328.262725233854 514.3221957937322
c 0 20.017816231864945 -4.89797631205206 5.7497982793654625 -10.647774591417523 5.7497982793654625
S 1306.967176051019 534.3400120255972 1306.967176051019 514.3221957937322
s 4.89797631205206 -5.7497982793654625 10.647774591417523 -5.7497982793654625
S 1328.262725233854 494.3043795618673 1328.262725233854 514.3221957937322
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.636207709795123" fill="#409EFF">
<animateMotion begin="-5.402655890077561s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path0"></mpath>
</animateMotion>
</circle><path id="path1" d="M 1126.1462662015124 334.60024152726794
c 0 30.58252974993728 -7.482959406899546 8.78434365157773 -16.267303058477275 8.78434365157773
S 1093.611660084558 365.18277127720523 1093.611660084558 334.60024152726794
s 7.482959406899546 -8.78434365157773 16.267303058477275 -8.78434365157773
S 1126.1462662015124 304.01771177733065 1126.1462662015124 334.60024152726794
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.8866954919899435" fill="#73A0FA">
<animateMotion begin="-0.7469029840989255s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path1"></mpath>
</animateMotion>
</circle><path id="path2" d="M 1161.7504435660335 640.6428888832513
c 0 31.719898409595036 -7.761251738517934 9.111034649564532 -16.872286388082465 9.111034649564532
S 1128.0058707898684 672.3627872928464 1128.0058707898684 640.6428888832513
s 7.761251738517934 -9.111034649564532 16.872286388082465 -9.111034649564532
S 1161.7504435660335 608.9229904736562 1161.7504435660335 640.6428888832513
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.620989905120926" fill="#409EFF">
<animateMotion begin="-0.1511828641728111s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path2"></mpath>
</animateMotion>
</circle><path id="path3" d="M 741.9260757987616 120.55457487293772
c 0 22.360654120299248 -5.471223880498751 6.422741077107231 -11.893964957605982 6.422741077107231
S 718.1381458835498 142.91522899323698 718.1381458835498 120.55457487293772
s 5.471223880498751 -6.422741077107231 11.893964957605982 -6.422741077107231
S 741.9260757987616 98.19392075263848 741.9260757987616 120.55457487293772
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.644208965350321" fill="#7585A2">
<animateMotion begin="-7.82610169106669s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path3"></mpath>
</animateMotion>
</circle><path id="path4" d="M 831.5629886202872 388.48756509181925
c 0 37.036017955096774 -9.062004393268358 10.638005157315032 -19.700009550583392 10.638005157315032
S 792.1629695191203 425.52358304691603 792.1629695191203 388.48756509181925
s 9.062004393268358 -10.638005157315032 19.700009550583392 -10.638005157315032
S 831.5629886202872 351.45154713672247 831.5629886202872 388.48756509181925
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.245518484932514" fill="#7585A2">
<animateMotion begin="-2.5196369079325094s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path4"></mpath>
</animateMotion>
</circle><path id="path5" d="M 212.88893404527536 420.47807924073214
c 0 36.54095420882101 -8.940871774498756 10.495805996150716 -19.436677770649474 10.495805996150716
S 174.0155785039764 457.01903344955315 174.0155785039764 420.47807924073214
s 8.940871774498756 -10.495805996150716 19.436677770649474 -10.495805996150716
S 212.88893404527536 383.93712503191114 212.88893404527536 420.47807924073214
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.849223811801136" fill="#f47e60">
<animateMotion begin="-6.684622598095676s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path5"></mpath>
</animateMotion>
</circle><path id="path6" d="M 1324.9457560414432 238.47197515867774
c 0 30.80275218576268 -7.536843619920655 8.84759903208077 -16.384442652001425 8.84759903208077
S 1292.1768707374406 269.2747273444404 1292.1768707374406 238.47197515867774
s 7.536843619920655 -8.84759903208077 16.384442652001425 -8.84759903208077
S 1324.9457560414432 207.66922297291507 1324.9457560414432 238.47197515867774
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.343761268348013" fill="#409EFF">
<animateMotion begin="-2.7335074334729264s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path6"></mpath>
</animateMotion>
</circle><path id="path7" d="M 684.9617171054817 510.78873702528506
c 0 25.338697068736554 -6.199893963627028 7.278136392083904 -13.478030355710933 7.278136392083904
S 658.0056563940598 536.1274340940216 658.0056563940598 510.78873702528506
s 6.199893963627028 -7.278136392083904 13.478030355710933 -7.278136392083904
S 684.9617171054817 485.4500399565485 684.9617171054817 510.78873702528506
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.289313753392392" fill="#f47e60">
<animateMotion begin="-7.543609599938508s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path7"></mpath>
</animateMotion>
</circle><path id="path8" d="M 242.9059981525392 78.17885685832343
c 0 23.178973635392506 -5.6714509958939106 6.657790299527634 -12.329241295421545 6.657790299527634
S 218.2475155616961 101.35783049371594 218.2475155616961 78.17885685832343
s 5.6714509958939106 -6.657790299527634 12.329241295421545 -6.657790299527634
S 242.9059981525392 54.99988322293092 242.9059981525392 78.17885685832343
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.596220485664493" fill="#f47e60">
<animateMotion begin="-4.340748007737184s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path8"></mpath>
</animateMotion>
</circle><path id="path9" d="M 348.3092125752333 541.3878064308448
c 0 22.224503222827753 -5.437910363032322 6.3836339044292485 -11.82154426746157 6.3836339044292485
S 324.6661240403102 563.6123096536725 324.6661240403102 541.3878064308448
s 5.437910363032322 -6.3836339044292485 11.82154426746157 -6.3836339044292485
S 348.3092125752333 519.163303208017 348.3092125752333 541.3878064308448
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.238035639347363" fill="#7585A2">
<animateMotion begin="-8.467966102200643s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path9"></mpath>
</animateMotion>
</circle><path id="path10" d="M 121.0397728376659 134.18105370502505
c 0 20.069120684009604 -4.91052952906618 5.764534664555951 -10.67506419362213 5.764534664555951
S 99.68964445042162 154.25017438903467 99.68964445042162 134.18105370502505
s 4.91052952906618 -5.764534664555951 10.67506419362213 -5.764534664555951
S 121.0397728376659 114.11193302101545 121.0397728376659 134.18105370502505
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.983493658697949" fill="#FEC03D">
<animateMotion begin="-2.9429563736891633s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path10"></mpath>
</animateMotion>
</circle><path id="path11" d="M 756.7860327276691 650.6485600880425
c 0 34.39061233935505 -8.414724295799639 9.87815460811262 -18.29287890391226 9.87815460811262
S 720.2002749198444 685.0391724273975 720.2002749198444 650.6485600880425
s 8.414724295799639 -9.87815460811262 18.29287890391226 -9.87815460811262
S 756.7860327276691 616.2579477486875 756.7860327276691 650.6485600880425
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.540837914078185" fill="#f47e60">
<animateMotion begin="-7.088397398976333s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path11"></mpath>
</animateMotion>
</circle><path id="path12" d="M 365.57927615149157 277.7571015725914
c 0 23.94448418286143 -5.858756768146946 6.877670988694241 -12.736427756841186 6.877670988694241
S 340.1064206378092 301.7015857554528 340.1064206378092 277.7571015725914
s 5.858756768146946 -6.877670988694241 12.736427756841186 -6.877670988694241
S 365.57927615149157 253.81261738972998 365.57927615149157 277.7571015725914
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.407931781878242" fill="#409EFF">
<animateMotion begin="-2.682043751732108s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path12"></mpath>
</animateMotion>
</circle><path id="path13" d="M 972.7911220358908 121.76273221677724
c 0 26.551922715265047 -6.496747047352085 7.626616099065493 -14.123363146417578 7.626616099065493
S 944.5443957430557 148.3146549320423 944.5443957430557 121.76273221677724
s 6.496747047352085 -7.626616099065493 14.123363146417578 -7.626616099065493
S 972.7911220358908 95.21080950151219 972.7911220358908 121.76273221677724
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.027870690186804" fill="#7585A2">
<animateMotion begin="-2.649503058039237s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path13"></mpath>
</animateMotion>
</circle><path id="path14" d="M 1430.8501439583986 504.85980259202046
c 0 27.37597929983105 -6.698377913788448 7.863313203142962 -14.56169111693141 7.863313203142962
S 1401.726761724536 532.2357818918515 1401.726761724536 504.85980259202046
s 6.698377913788448 -7.863313203142962 14.56169111693141 -7.863313203142962
S 1430.8501439583986 477.4838232921894 1430.8501439583986 504.85980259202046
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.199444995509243" fill="#73A0FA">
<animateMotion begin="-2.6460857467576675s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path14"></mpath>
</animateMotion>
</circle><path id="path15" d="M 311.7319321508727 748.2881185026815
c 0 36.73015631275312 -8.987165906311931 10.550151281322703 -19.537317187634635 10.550151281322703
S 272.6572977756034 785.0182748154347 272.6572977756034 748.2881185026815
s 8.987165906311931 -10.550151281322703 19.537317187634635 -10.550151281322703
S 311.7319321508727 711.5579621899284 311.7319321508727 748.2881185026815
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.833135551165933" fill="#73A0FA">
<animateMotion begin="-3.477025199384847s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path15"></mpath>
</animateMotion>
</circle><path id="path16" d="M 27.931230557396546 398.8170778136326
c 0 36.484581709751005 -8.927078503449712 10.479613895354012 -19.406692398803724 10.479613895354012
S -10.882154240210903 435.3016595233836 -10.882154240210903 398.8170778136326
s 8.927078503449712 -10.479613895354012 19.406692398803724 -10.479613895354012
S 27.931230557396546 362.33249610388157 27.931230557396546 398.8170778136326
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.751673502370236" fill="#f47e60">
<animateMotion begin="-4.651151174062854s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path16"></mpath>
</animateMotion>
</circle><path id="path17" d="M 272.28166902595126 667.968121944589
c 0 27.205157170761243 -6.656581009867112 7.814247272452698 -14.47082828231981 7.814247272452698
S 243.34001246131163 695.1732791153503 243.34001246131163 667.968121944589
s 6.656581009867112 -7.814247272452698 14.47082828231981 -7.814247272452698
S 272.28166902595126 640.7629647738278 272.28166902595126 667.968121944589
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.3606188966557" fill="#FEC03D">
<animateMotion begin="-7.04658471291239s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path17"></mpath>
</animateMotion>
</circle><path id="path18" d="M 68.52816055717062 509.72412109826104
c 0 29.887169878152417 -7.31281816167559 8.584612624575694 -15.897430786251284 8.584612624575694
S 36.73329898466806 539.6112909764134 36.73329898466806 509.72412109826104
s 7.31281816167559 -8.584612624575694 15.897430786251284 -8.584612624575694
S 68.52816055717062 479.83695122010863 68.52816055717062 509.72412109826104
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.766600847571331" fill="#409EFF">
<animateMotion begin="-2.943182568910145s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path18"></mpath>
</animateMotion>
</circle><path id="path19" d="M 498.4867256914234 698.0428393714164
c 0 30.16800088761881 -7.381532132076942 8.66527685069902 -16.04680898277596 8.66527685069902
S 466.3931077258714 728.2108402590353 466.3931077258714 698.0428393714164
s 7.381532132076942 -8.66527685069902 16.04680898277596 -8.66527685069902
S 498.4867256914234 667.8748384837976 498.4867256914234 698.0428393714164
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.890716067451898" fill="#f47e60">
<animateMotion begin="-6.922790379009164s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path19"></mpath>
</animateMotion>
</circle><path id="path20" d="M 237.31670847162988 570.9916865103482
c 0 37.44732484185728 -9.162643312369333 10.756146497129219 -19.918789809498552 10.756146497129219
S 197.47912885263278 608.4390113522055 197.47912885263278 570.9916865103482
s 9.162643312369333 -10.756146497129219 19.918789809498552 -10.756146497129219
S 237.31670847162988 533.544361668491 237.31670847162988 570.9916865103482
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="5.209445859656978" fill="#7585A2">
<animateMotion begin="-2.7842860998444956s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path20"></mpath>
</animateMotion>
</circle><path id="path21" d="M 844.5838314420802 300.2789933084955
c 0 34.33444958544051 -8.400982345373741 9.862022753264826 -18.263005098638565 9.862022753264826
S 808.057821244803 334.613442893936 808.057821244803 300.2789933084955
s 8.400982345373741 -9.862022753264826 18.263005098638565 -9.862022753264826
S 844.5838314420802 265.944543723055 844.5838314420802 300.2789933084955
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.131681051998438" fill="#409EFF">
<animateMotion begin="-7.648757144503393s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path21"></mpath>
</animateMotion>
</circle><path id="path22" d="M 421.60153544835583 277.80813669372634
c 0 28.261187796624853 -6.914971482152889 8.117575218179478 -15.032546700332368 8.117575218179478
S 391.5364420476911 306.06932449035116 391.5364420476911 277.80813669372634
s 6.914971482152889 -8.117575218179478 15.032546700332368 -8.117575218179478
S 421.60153544835583 249.5469488971015 421.60153544835583 277.80813669372634
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="6.2646621562845475" fill="#f47e60">
<animateMotion begin="-2.810604110269037s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path22"></mpath>
</animateMotion>
</circle><path id="path23" d="M 964.8180299061758 251.70205930626756
c 0 20.201912557872895 -4.94302115777741 5.802677011303916 -10.745698169081326 5.802677011303916
S 943.326633568013 271.90397186414043 943.326633568013 251.70205930626756
s 4.94302115777741 -5.802677011303916 10.745698169081326 -5.802677011303916
S 964.8180299061758 231.50014674839466 964.8180299061758 251.70205930626756
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.739792304581866" fill="#f47e60">
<animateMotion begin="-1.283147684069228s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path23"></mpath>
</animateMotion>
</circle><path id="path24" d="M 450.56452845180536 467.20670088348527
c 0 32.652475993971414 -7.9894356155461965 9.378902679119449 -17.368338294665648 9.378902679119449
S 415.82785186247406 499.85917687745666 415.82785186247406 467.20670088348527
s 7.9894356155461965 -9.378902679119449 17.368338294665648 -9.378902679119449
S 450.56452845180536 434.5542248895139 450.56452845180536 467.20670088348527
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.206016322416145" fill="#409EFF">
<animateMotion begin="-7.04290071253574s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path24"></mpath>
</animateMotion>
</circle><path id="path25" d="M 470.9609539413972 631.8555550663143
c 0 28.374834580757934 -6.942778674015238 8.150218443409194 -15.092997117424432 8.150218443409194
S 440.7749597065483 660.2303896470722 440.7749597065483 631.8555550663143
s 6.942778674015238 -8.150218443409194 15.092997117424432 -8.150218443409194
S 470.9609539413972 603.4807204855564 470.9609539413972 631.8555550663143
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.877171471279329" fill="#7585A2">
<animateMotion begin="-8.585901919755338s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path25"></mpath>
</animateMotion>
</circle><path id="path26" d="M 652.7362252048207 288.7979351349304
c 0 35.42106100309088 -8.666855351820105 10.174134543440996 -18.840989895261103 10.174134543440996
S 615.0542454142984 324.2189961380213 615.0542454142984 288.7979351349304
s 8.666855351820105 -10.174134543440996 18.840989895261103 -10.174134543440996
S 652.7362252048207 253.37687413183954 652.7362252048207 288.7979351349304
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.352056724470119" fill="#f47e60">
<animateMotion begin="-3.198081211934429s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path26"></mpath>
</animateMotion>
</circle><path id="path27" d="M 688.3012291378494 41.23417469454655
c 0 28.909045473514027 -7.0734898499023675 8.303661997711476 -15.377151847613844 8.303661997711476
S 657.5469254426217 70.14322016806058 657.5469254426217 41.23417469454655
s 7.0734898499023675 -8.303661997711476 15.377151847613844 -8.303661997711476
S 688.3012291378494 12.325129221032526 688.3012291378494 41.23417469454655
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="7.293346109382834" fill="#7585A2">
<animateMotion begin="-3.635270207745576s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path27"></mpath>
</animateMotion>
</circle><path id="path28" d="M 1061.2362270938456 195.39666378859346
c 0 19.39566461418629 -4.74574772474771 5.571095155138616 -10.316842879886325 5.571095155138616
S 1040.602541334073 214.79232840277976 1040.602541334073 195.39666378859346
s 4.74574772474771 -5.571095155138616 10.316842879886325 -5.571095155138616
S 1061.2362270938456 176.00099917440716 1061.2362270938456 195.39666378859346
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="5.040205474760767" fill="#f47e60">
<animateMotion begin="-7.665407360938512s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path28"></mpath>
</animateMotion>
</circle><path id="path29" d="M 824.7580606207787 636.1887703563605
c 0 32.85378799118968 -8.03869280635492 9.436726337894909 -17.475419144249827 9.436726337894909
S 789.807222332279 669.0425583475501 789.807222332279 636.1887703563605
s 8.03869280635492 -9.436726337894909 17.475419144249827 -9.436726337894909
S 824.7580606207787 603.3349823651708 824.7580606207787 636.1887703563605
z" fill="none" stroke="none"></path>
<circle cx="0" cy="0" r="4.76580996967193" fill="#f47e60">
<animateMotion begin="-8.946715083233848s" dur="10s" repeatCount="indefinite">
<mpath xlink:href="#path29"></mpath>
</animateMotion>
</circle></g>
<style type="text/css">.lded > .content, .lded > .content > .inner { height: 100%; }
.lded > .content > .inner > .viewer { width: 100%; height: 100%; max-width: 100%; overflow: hidden }
.lded > .content > .inner > .panel {
position: absolute;
bottom: 50px;
left: 0;
right: 0;
opacity: 0.3;
}
.lded > .content > .inner > .panel:hover { opacity: 1; }
.lded > .content > .inner > .ctrl {
position: absolute;
bottom: 13px;
left: 0;
right: 0;
margin: auto;
}
.lded > .content > .inner > .ctrl:hover {
z-index: 10;
}
#editor > .inner > .title {
position: absolute;
bottom: 195px;
left: 0;
right: 0;
z-index: 11;
}
#editor > .inner > .title > a:first-child {
margin-left: 0!important;
#editor .lded .viewer { border-radius: 0 }</style></svg>

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="116" height="20" role="img" aria-label="LideeYunji: 1.0.0"><title>LideeYunji: 1.0.0</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="116" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="77" height="20" fill="#555"/><rect x="77" width="39" height="20" fill="#e05d44"/><rect width="116" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="395" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="670">lideefrm</text><text x="395" y="140" transform="scale(.1)" fill="#fff" textLength="670">lideefrm</text><text aria-hidden="true" x="955" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="290">1.0.0</text><text x="955" y="140" transform="scale(.1)" fill="#fff" textLength="290">1.0.0</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="20" role="img" aria-label="Spring Boot: 2.7.18"><title>Spring Boot: 2.7.18</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="120" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="75" height="20" fill="#555"/><rect x="75" width="45" height="20" fill="#dfb317"/><rect width="120" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="385" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="650">Spring Boot</text><text x="385" y="140" transform="scale(.1)" fill="#fff" textLength="650">Spring Boot</text><text aria-hidden="true" x="965" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="350">2.7.18</text><text x="965" y="140" transform="scale(.1)" fill="#fff" textLength="350">2.7.18</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="58" height="20" role="img" aria-label="Vue: 3.2"><title>Vue: 3.2</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="58" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="31" height="20" fill="#555"/><rect x="31" width="27" height="20" fill="#007ec6"/><rect width="58" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="165" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="210">Vue</text><text x="165" y="140" transform="scale(.1)" fill="#fff" textLength="210">Vue</text><text aria-hidden="true" x="435" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="170">3.2</text><text x="435" y="140" transform="scale(.1)" fill="#fff" textLength="170">3.2</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="76" height="20" role="img" aria-label="可商用: 免费"><title>可商用: 免费</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="76" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="43" height="20" fill="#555"/><rect x="43" width="33" height="20" fill="purple"/><rect width="76" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="225" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="330">可商用</text><text x="225" y="140" transform="scale(.1)" fill="#fff" textLength="330">可商用</text><text aria-hidden="true" x="585" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">免费</text><text x="585" y="140" transform="scale(.1)" fill="#fff" textLength="230">免费</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="20" role="img" aria-label="license: Apache 2.0"><title>license: Apache 2.0</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="120" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="47" height="20" fill="#555"/><rect x="47" width="73" height="20" fill="#97ca00"/><rect width="120" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="245" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">license</text><text x="245" y="140" transform="scale(.1)" fill="#fff" textLength="370">license</text><text aria-hidden="true" x="825" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="630">Apache 2.0</text><text x="825" y="140" transform="scale(.1)" fill="#fff" textLength="630">Apache 2.0</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1627279997305" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11904" width="40" height="40"><path d="M938.7008 669.525333L938.7008 249.412267c0-90.555733-73.5232-164.078933-164.1472-164.078933L249.378133 85.333333c-90.555733 0-164.078933 73.48906699-164.078933 164.078933l0 525.2096c0 90.555733 73.454933 164.078933 164.07893301 164.078933l525.20959999 0c80.725333 0 147.8656-58.368 161.553067-135.099733-43.52-18.8416-232.106667-100.283733-330.376533-147.182933-74.786133 90.589867-153.088 144.930133-271.121067 144.930133s-196.81279999-72.704-187.357867-161.655467c6.2464-58.402133 46.2848-153.9072 220.296533-137.5232 91.682133 8.6016 133.666133 25.736533 208.418133 50.414933 19.3536-35.4304 35.4304-74.513067 47.616-116.0192L292.0448 436.565333l0-32.8704 164.0448 0 0-58.9824L256 344.712533l1e-8-36.181333 200.12373299 0L456.123733 223.3344c0 0 1.809067-13.312 16.520533-13.31200001l82.056533 1e-8 0 98.474667 213.333333 0 0 36.181333-213.333333 1e-8 0 58.98239999 174.045867 0c-16.00853301 65.1264-40.277333 124.962133-70.690133 177.220267C708.608 599.176533 938.7008 669.525333 938.7008 669.525333L938.7008 669.525333 938.7008 669.525333 938.7008 669.525333zM321.57013299 744.994133c-124.7232 0-144.452267-78.7456-137.83039999-111.65013299 6.5536-32.733867 42.666667-75.502933 112.0256-75.50293301 79.6672 0 151.04 20.445867 236.714667 62.088533C472.302933 698.333867 398.370133 744.994133 321.57013299 744.994133L321.57013299 744.994133 321.57013299 744.994133zM321.57013299 744.994133" fill="#1296db" p-id="11905"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files have changed in this diff Show More