diff --git a/src/api/base/login.ts b/src/api/base/login.ts new file mode 100644 index 00000000..4591e71f --- /dev/null +++ b/src/api/base/login.ts @@ -0,0 +1,49 @@ +import { defHttp } from '@/utils/http/axios' +import { TentantNameVO } from './model/loginModel' +import { getRefreshToken } from '@/utils/auth' + +enum Api { + Login = '/system/auth/login', + RefreshToken = '/system/auth/refresh-token?refreshToken=', + GetTenantIdByName = '/system/tenant/get-id-by-name?name=', + LoginOut = '/system/auth/logout', + GetUserInfo = '/system/auth/get-permission-info', + GetAsyncRoutes = '/system/auth/list-menus', + GetCaptcha = '/system/captcha/get', + CheckCaptcha = '/system/captcha/check' +} + +// 刷新访问令牌 +export const refreshToken = () => { + return defHttp.post({ url: Api.RefreshToken + getRefreshToken() }) +} + +// 使用租户名,获得租户编号 +export const getTenantIdByName = (name: string) => { + return defHttp.get({ url: Api.GetTenantIdByName + name }) +} + +// 登出 +export const loginOut = () => { + return defHttp.delete({ url: Api.LoginOut }) +} + +// 获取用户权限信息 +export const getUserInfo = () => { + return defHttp.get({ url: Api.GetUserInfo }) +} + +// 路由 +export const getAsyncRoutes = () => { + return defHttp.get({ url: Api.GetAsyncRoutes }) +} + +// 获取验证图片 以及token +export const getCaptcha = (data) => { + return defHttp.post({ url: Api.GetCaptcha, data }, { isReturnNativeResponse: true }) +} + +// 滑动或者点选验证 +export const checkCaptcha = (data) => { + return defHttp.post({ url: Api.CheckCaptcha, data }, { isReturnNativeResponse: true }) +} diff --git a/src/api/sys/menu.ts b/src/api/base/menu.ts similarity index 86% rename from src/api/sys/menu.ts rename to src/api/base/menu.ts index af25b3a1..f941cf0d 100644 --- a/src/api/sys/menu.ts +++ b/src/api/base/menu.ts @@ -2,7 +2,7 @@ import { defHttp } from '@/utils/http/axios' import { getMenuListResultModel } from './model/menuModel' enum Api { - GetMenuList = '/getMenuList' + GetMenuList = '/system/auth/list-menus' } /** diff --git a/src/api/base/model/loginModel.ts b/src/api/base/model/loginModel.ts new file mode 100644 index 00000000..fae7a29e --- /dev/null +++ b/src/api/base/model/loginModel.ts @@ -0,0 +1,9 @@ +export type UserLoginVO = { + username: string + password: string + captchaVerification: string +} + +export type TentantNameVO = { + id: number +} diff --git a/src/api/sys/model/menuModel.ts b/src/api/base/model/menuModel.ts similarity index 100% rename from src/api/sys/model/menuModel.ts rename to src/api/base/model/menuModel.ts diff --git a/src/api/sys/model/uploadModel.ts b/src/api/base/model/uploadModel.ts similarity index 100% rename from src/api/sys/model/uploadModel.ts rename to src/api/base/model/uploadModel.ts diff --git a/src/api/sys/model/userModel.ts b/src/api/base/model/userModel.ts similarity index 59% rename from src/api/sys/model/userModel.ts rename to src/api/base/model/userModel.ts index 3e3dc97b..b3b4b65b 100644 --- a/src/api/sys/model/userModel.ts +++ b/src/api/base/model/userModel.ts @@ -4,11 +4,7 @@ export interface LoginParams { username: string password: string -} - -export interface RoleInfo { - roleName: string - value: string + captchaVerification: string } /** @@ -16,23 +12,23 @@ export interface RoleInfo { */ export interface LoginResultModel { userId: string | number - token: string - role: RoleInfo + accessToken: string + refreshToken: string + expiresTime: number } /** * @description: Get user information return value */ export interface GetUserInfoModel { - roles: RoleInfo[] + roles: string[] + permissions: string[] // 用户id - userId: string | number - // 用户名 - username: string - // 真实名字 - realName: string - // 头像 - avatar: string - // 介绍 - desc?: string + user: userModel +} + +export interface userModel { + id: string | number + avatar: string + nickname: string } diff --git a/src/api/base/profile.ts b/src/api/base/profile.ts new file mode 100644 index 00000000..f45feb3a --- /dev/null +++ b/src/api/base/profile.ts @@ -0,0 +1,124 @@ +import { defHttp } from '@/utils/http/axios' +import { UploadFileParams } from '@/types/axios' + +export interface ProfileDept { + id: number + name: string +} +export interface ProfileRole { + id: number + name: string +} +export interface ProfilePost { + id: number + name: string +} +export interface SocialUser { + id: number + type: number + openid: string + token: string + rawTokenInfo: string + nickname: string + avatar: string + rawUserInfo: string + code: string + state: string +} +export interface ProfileVO { + id: number + username: string + nickname: string + dept: ProfileDept + roles: ProfileRole[] + posts: ProfilePost[] + socialUsers: SocialUser[] + 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 +} + +enum Api { + getUserProfileApi = '/system/user/profile/get', + putUserProfileApi = '/system/user/profile/update', + uploadAvatarApi = '/system/user/profile/update-avatar', + updateUserPwdApi = '/system/user/profile/update-password', + socialBindApi = '/system/social-user/bind', + socialUnbindApi = '/system/social-user/unbind' +} + +/** + * @description: getUserProfileApi + */ +export function getUserProfileApi() { + return defHttp.get({ url: Api.getUserProfileApi }) +} + +/** + * @description: updateUserProfileApi + */ +export function updateUserProfileApi(data: UserProfileUpdateReqVO) { + return defHttp.put({ url: Api.putUserProfileApi, data }) +} + +// 用户密码重置 +export const updateUserPwdApi = (oldPassword: string, newPassword: string) => { + return defHttp.put({ + url: Api.updateUserPwdApi, + data: { + oldPassword: oldPassword, + newPassword: newPassword + } + }) +} + +// 用户头像上传 +export const uploadAvatarApi = (data) => { + const params: UploadFileParams = { + file: data + } + return defHttp.uploadFile({ url: Api.uploadAvatarApi }, params) +} + +// 社交绑定,使用 code 授权码 +export const socialBind = (type, code, state) => { + return defHttp.post({ + url: Api.socialBindApi, + data: { + type, + code, + state + } + }) +} + +// 取消社交绑定 +export const socialUnbind = (type, openid) => { + return defHttp.delete({ + url: Api.socialUnbindApi, + data: { + type, + openid + } + }) +} + +// 社交授权的跳转 +export const socialAuthRedirect = (type, redirectUri) => { + return defHttp.get({ + url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri + }) +} diff --git a/src/api/sys/upload.ts b/src/api/base/upload.ts similarity index 100% rename from src/api/sys/upload.ts rename to src/api/base/upload.ts diff --git a/src/api/sys/user.ts b/src/api/base/user.ts similarity index 72% rename from src/api/sys/user.ts rename to src/api/base/user.ts index d1f43d1c..55a7f42e 100644 --- a/src/api/sys/user.ts +++ b/src/api/base/user.ts @@ -4,9 +4,9 @@ import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userMod import { ErrorMessageMode } from '@/types/axios' enum Api { - Login = '/login', - Logout = '/logout', - GetUserInfo = '/getUserInfo', + Login = '/system/auth/login', + Logout = '/system/auth/logout', + GetUserInfo = '/system/auth/get-permission-info', GetPermCode = '/getPermCode', TestRetry = '/testRetry' } @@ -14,7 +14,7 @@ enum Api { /** * @description: user login api */ -export const loginApi = (params: LoginParams, mode: ErrorMessageMode = 'modal') => { +export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') { return defHttp.post( { url: Api.Login, @@ -29,19 +29,19 @@ export const loginApi = (params: LoginParams, mode: ErrorMessageMode = 'modal') /** * @description: getUserInfo */ -export const getUserInfo = () => { +export function getUserInfo() { return defHttp.get({ url: Api.GetUserInfo }, { errorMessageMode: 'none' }) } -export const getPermCode = () => { +export function getPermCode() { return defHttp.get({ url: Api.GetPermCode }) } -export const doLogout = () => { +export function doLogout() { return defHttp.get({ url: Api.Logout }) } -export const testRetry = () => { +export function testRetry() { return defHttp.get( { url: Api.TestRetry }, { diff --git a/src/api/bpm/form/index.ts b/src/api/bpm/form/index.ts new file mode 100644 index 00000000..9f954883 --- /dev/null +++ b/src/api/bpm/form/index.ts @@ -0,0 +1,32 @@ +import { defHttp } from '@/utils/http/axios' +import { FormVO } from './types' + +// 创建工作流的表单定义 +export const createFormApi = (data: FormVO) => { + return defHttp.post({ url: '/bpm/form/create', data: data }) +} + +// 更新工作流的表单定义 +export const updateFormApi = (data: FormVO) => { + return defHttp.put({ url: '/bpm/form/update', data: data }) +} + +// 删除工作流的表单定义 +export const deleteFormApi = (id: number) => { + return defHttp.delete({ url: '/bpm/form/delete?id=' + id }) +} + +// 获得工作流的表单定义 +export const getFormApi = (id: number) => { + return defHttp.get({ url: '/bpm/form/get?id=' + id }) +} + +// 获得工作流的表单定义分页 +export const getFormPageApi = (params) => { + return defHttp.get({ url: '/bpm/form/page', params }) +} + +// 获得动态表单的精简列表 +export const getSimpleFormsApi = async () => { + return await defHttp.get({ url: '/bpm/form/list-all-simple' }) +} diff --git a/src/api/bpm/form/types.ts b/src/api/bpm/form/types.ts new file mode 100644 index 00000000..2bc8b691 --- /dev/null +++ b/src/api/bpm/form/types.ts @@ -0,0 +1,9 @@ +export type FormVO = { + id: number + name: string + conf: string + fields: string[] + status: number + remark: string + createTime: string +} diff --git a/src/api/bpm/leave/index.ts b/src/api/bpm/leave/index.ts new file mode 100644 index 00000000..c963e43c --- /dev/null +++ b/src/api/bpm/leave/index.ts @@ -0,0 +1,17 @@ +import { defHttp } from '@/utils/http/axios' +import { LeaveVO } from './types' + +// 创建请假申请 +export const createLeaveApi = (data: LeaveVO) => { + return defHttp.post({ url: '/bpm/oa/leave/create', data: data }) +} + +// 获得请假申请 +export const getLeaveApi = (id: number) => { + return defHttp.get({ url: '/bpm/oa/leave/get?id=' + id }) +} + +// 获得请假申请分页 +export const getLeavePageApi = (params) => { + return defHttp.get({ url: '/bpm/oa/leave/page', params }) +} diff --git a/src/api/bpm/leave/types.ts b/src/api/bpm/leave/types.ts new file mode 100644 index 00000000..60b4bf83 --- /dev/null +++ b/src/api/bpm/leave/types.ts @@ -0,0 +1,10 @@ +export type LeaveVO = { + id: number + result: number + type: number + reason: string + processInstanceId: string + startTime: string + endTime: string + createTime: string +} diff --git a/src/api/bpm/model/index.ts b/src/api/bpm/model/index.ts new file mode 100644 index 00000000..14d48deb --- /dev/null +++ b/src/api/bpm/model/index.ts @@ -0,0 +1,35 @@ +import { defHttp } from '@/utils/http/axios' +import { ModelVO } from './types' + +export const getModelPageApi = (params) => { + return defHttp.get({ url: '/bpm/model/page', params }) +} + +export const getModelApi = (id: number) => { + return defHttp.get({ url: '/bpm/model/get?id=' + id }) +} + +export const updateModelApi = (data: ModelVO) => { + return defHttp.put({ url: '/bpm/model/update', data: data }) +} + +// 任务状态修改 +export const updateModelStateApi = (id: number, state: number) => { + const data = { + id: id, + state: state + } + return defHttp.put({ url: '/bpm/model/update-state', data: data }) +} + +export const createModelApi = (data: ModelVO) => { + return defHttp.post({ url: '/bpm/model/create', data: data }) +} + +export const deleteModelApi = (id: number) => { + return defHttp.delete({ url: '/bpm/model/delete?id=' + id }) +} + +export const deployModelApi = (id: number) => { + return defHttp.post({ url: '/bpm/model/deploy?id=' + id }) +} diff --git a/src/api/bpm/model/types.ts b/src/api/bpm/model/types.ts new file mode 100644 index 00000000..36f4aab1 --- /dev/null +++ b/src/api/bpm/model/types.ts @@ -0,0 +1,23 @@ +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: number + formCustomCreatePath: string + formCustomViewPath: string + processDefinition: ProcessDefinitionVO + status: number + remark: string + createTime: string +} diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts new file mode 100644 index 00000000..3b077ff9 --- /dev/null +++ b/src/api/bpm/processInstance/index.ts @@ -0,0 +1,22 @@ +import { defHttp } from '@/utils/http/axios' +import { ProcessInstanceVO } from './types' + +export const getMyProcessInstancePageApi = (params) => { + return defHttp.get({ url: '/bpm/process-instance/my-page', params }) +} + +export const createProcessInstanceApi = (data: ProcessInstanceVO) => { + return defHttp.post({ url: '/bpm/process-instance/create', data: data }) +} + +export const cancelProcessInstanceApi = (id: number, reason: string) => { + const data = { + id: id, + reason: reason + } + return defHttp.delete({ url: '/bpm/process-instance/cancel', data: data }) +} + +export const getProcessInstanceApi = (id: number) => { + return defHttp.get({ url: '/bpm/process-instance/get?id=' + id }) +} diff --git a/src/api/bpm/processInstance/types.ts b/src/api/bpm/processInstance/types.ts new file mode 100644 index 00000000..3ab50638 --- /dev/null +++ b/src/api/bpm/processInstance/types.ts @@ -0,0 +1,18 @@ +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 +} diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts new file mode 100644 index 00000000..da847cad --- /dev/null +++ b/src/api/bpm/task/index.ts @@ -0,0 +1,34 @@ +import { defHttp } from '@/utils/http/axios' + +export const getTodoTaskPage = (params) => { + return defHttp.get({ url: '/bpm/task/todo-page', params }) +} + +export const getDoneTaskPage = (params) => { + return defHttp.get({ url: '/bpm/task/done-page', params }) +} + +export const completeTask = (data) => { + return defHttp.put({ url: '/bpm/task/complete', data }) +} + +export const approveTask = (data) => { + return defHttp.put({ url: '/bpm/task/approve', data }) +} + +export const rejectTask = (data) => { + return defHttp.put({ url: '/bpm/task/reject', data }) +} +export const backTask = (data) => { + return defHttp.put({ url: '/bpm/task/back', data }) +} + +export const updateTaskAssignee = (data) => { + return defHttp.put({ url: '/bpm/task/update-assignee', data }) +} + +export const getTaskListByProcessInstanceId = (processInstanceId) => { + return defHttp.get({ + url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId + }) +} diff --git a/src/api/bpm/task/types.ts b/src/api/bpm/task/types.ts new file mode 100644 index 00000000..8f772252 --- /dev/null +++ b/src/api/bpm/task/types.ts @@ -0,0 +1,39 @@ +export type FormVO = { + id: number + name: string + conf: string + fields: string[] + status: number + remark: string + createTime: string +} + +export type TaskProcessVO = { + id: string + name: string + startUserId: number + startUserNickname: string + processDefinitionId: string +} + +export type TaskTodoVO = { + id: string + name: string + claimTime: string + createTime: string + suspensionState: number + processInstance: TaskProcessVO +} + +export type TaskDoneVO = { + id: string + name: string + claimTime: string + createTime: string + endTime: string + durationInMillis: number + suspensionState: number + result: number + reason: string + processInstance: TaskProcessVO +} diff --git a/src/api/bpm/taskAssignRule/index.ts b/src/api/bpm/taskAssignRule/index.ts new file mode 100644 index 00000000..c160531f --- /dev/null +++ b/src/api/bpm/taskAssignRule/index.ts @@ -0,0 +1,20 @@ +import { defHttp } from '@/utils/http/axios' +import { TaskAssignVO } from './types' + +export const getTaskAssignRuleList = (params) => { + return defHttp.get({ url: '/bpm/task-assign-rule/list', params }) +} + +export const createTaskAssignRule = (data: TaskAssignVO) => { + return defHttp.post({ + url: '/bpm/task-assign-rule/create', + data: data + }) +} + +export const updateTaskAssignRule = (data: TaskAssignVO) => { + return defHttp.put({ + url: '/bpm/task-assign-rule/update', + data: data + }) +} diff --git a/src/api/bpm/taskAssignRule/types.ts b/src/api/bpm/taskAssignRule/types.ts new file mode 100644 index 00000000..e9340e7e --- /dev/null +++ b/src/api/bpm/taskAssignRule/types.ts @@ -0,0 +1,9 @@ +export type TaskAssignVO = { + id: number + modelId: string + processDefinitionId: string + taskDefinitionKey: string + taskDefinitionName: string + options: string[] + type: number +} diff --git a/src/api/bpm/userGroup/index.ts b/src/api/bpm/userGroup/index.ts new file mode 100644 index 00000000..1e696071 --- /dev/null +++ b/src/api/bpm/userGroup/index.ts @@ -0,0 +1,38 @@ +import { defHttp } from '@/utils/http/axios' +import { UserGroupVO } from './types' + +// 创建用户组 +export const createUserGroupApi = (data: UserGroupVO) => { + return defHttp.post({ + url: '/bpm/user-group/create', + data: data + }) +} + +// 更新用户组 +export const updateUserGroupApi = (data: UserGroupVO) => { + return defHttp.put({ + url: '/bpm/user-group/update', + data: data + }) +} + +// 删除用户组 +export const deleteUserGroupApi = (id: number) => { + return defHttp.delete({ url: '/bpm/user-group/delete?id=' + id }) +} + +// 获得用户组 +export const getUserGroupApi = (id: number) => { + return defHttp.get({ url: '/bpm/user-group/get?id=' + id }) +} + +// 获得用户组分页 +export const getUserGroupPageApi = (params) => { + return defHttp.get({ url: '/bpm/user-group/page', params }) +} + +// 获取用户组精简信息列表 +export const listSimpleUserGroupsApi = () => { + return defHttp.get({ url: '/bpm/user-group/list-all-simple' }) +} diff --git a/src/api/bpm/userGroup/types.ts b/src/api/bpm/userGroup/types.ts new file mode 100644 index 00000000..d0d67ad4 --- /dev/null +++ b/src/api/bpm/userGroup/types.ts @@ -0,0 +1,9 @@ +export type UserGroupVO = { + id: number + name: string + description: string + memberUserIds: number[] + status: number + remark: string + createTime: string +} diff --git a/src/api/demo/account.ts b/src/api/demo/account.ts deleted file mode 100644 index f37e034e..00000000 --- a/src/api/demo/account.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { defHttp } from '@/utils/http/axios' -import { GetAccountInfoModel } from './model/accountModel' - -enum Api { - ACCOUNT_INFO = '/account/getAccountInfo', - SESSION_TIMEOUT = '/user/sessionTimeout', - TOKEN_EXPIRED = '/user/tokenExpired' -} - -// Get personal center-basic settings - -export const accountInfoApi = () => { - return defHttp.get({ url: Api.ACCOUNT_INFO }) -} - -export const sessionTimeoutApi = () => { - return defHttp.post({ url: Api.SESSION_TIMEOUT }) -} - -export const tokenExpiredApi = () => { - return defHttp.post({ url: Api.TOKEN_EXPIRED }) -} diff --git a/src/api/demo/cascader.ts b/src/api/demo/cascader.ts deleted file mode 100644 index 328a17e3..00000000 --- a/src/api/demo/cascader.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defHttp } from '@/utils/http/axios' -import { AreaModel, AreaParams } from '@/api/demo/model/areaModel' - -enum Api { - AREA_RECORD = '/cascader/getAreaRecord' -} - -export const areaRecord = (data: AreaParams) => { - return defHttp.post({ url: Api.AREA_RECORD, data }) -} diff --git a/src/api/demo/error.ts b/src/api/demo/error.ts deleted file mode 100644 index fed41f24..00000000 --- a/src/api/demo/error.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defHttp } from '@/utils/http/axios' - -enum Api { - // The address does not exist - Error = '/error' -} - -/** - * @description: Trigger ajax error - */ - -export const fireErrorApi = () => { - return defHttp.get({ url: Api.Error }) -} diff --git a/src/api/demo/model/accountModel.ts b/src/api/demo/model/accountModel.ts deleted file mode 100644 index 06c48888..00000000 --- a/src/api/demo/model/accountModel.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface GetAccountInfoModel { - email: string - name: string - introduction: string - phone: string - address: string -} diff --git a/src/api/demo/model/areaModel.ts b/src/api/demo/model/areaModel.ts deleted file mode 100644 index ac40079b..00000000 --- a/src/api/demo/model/areaModel.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface AreaModel { - id: string - code: string - parentCode: string - name: string - levelType: number - [key: string]: string | number -} - -export interface AreaParams { - parentCode: string -} diff --git a/src/api/demo/model/optionsModel.ts b/src/api/demo/model/optionsModel.ts deleted file mode 100644 index 5eb42b69..00000000 --- a/src/api/demo/model/optionsModel.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BasicFetchResult } from '@/api/model/baseModel' - -export interface DemoOptionsItem { - label: string - value: string -} - -export interface selectParams { - id: number | string -} - -/** - * @description: Request list return value - */ -export type DemoOptionsGetResultModel = BasicFetchResult diff --git a/src/api/demo/model/systemModel.ts b/src/api/demo/model/systemModel.ts deleted file mode 100644 index b88b878d..00000000 --- a/src/api/demo/model/systemModel.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { BasicPageParams, BasicFetchResult } from '@/api/model/baseModel' - -export type AccountParams = BasicPageParams & { - account?: string - nickname?: string -} - -export type RoleParams = { - roleName?: string - status?: string -} - -export type RolePageParams = BasicPageParams & RoleParams - -export type DeptParams = { - deptName?: string - status?: string -} - -export type MenuParams = { - menuName?: string - status?: string -} - -export interface AccountListItem { - id: string - account: string - email: string - nickname: string - role: number - createTime: string - remark: string - status: number -} - -export interface DeptListItem { - id: string - orderNo: string - createTime: string - remark: string - status: number -} - -export interface MenuListItem { - id: string - orderNo: string - createTime: string - status: number - icon: string - component: string - permission: string -} - -export interface RoleListItem { - id: string - roleName: string - roleValue: string - status: number - orderNo: string - createTime: string -} - -/** - * @description: Request list return value - */ -export type AccountListGetResultModel = BasicFetchResult - -export type DeptListGetResultModel = BasicFetchResult - -export type MenuListGetResultModel = BasicFetchResult - -export type RolePageListGetResultModel = BasicFetchResult - -export type RoleListGetResultModel = RoleListItem[] diff --git a/src/api/demo/model/tableModel.ts b/src/api/demo/model/tableModel.ts deleted file mode 100644 index 1aa255ca..00000000 --- a/src/api/demo/model/tableModel.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BasicPageParams, BasicFetchResult } from '@/api/model/baseModel' -/** - * @description: Request list interface parameters - */ -export type DemoParams = BasicPageParams - -export interface DemoListItem { - id: string - beginTime: string - endTime: string - address: string - name: string - no: number - status: number -} - -/** - * @description: Request list return value - */ -export type DemoListGetResultModel = BasicFetchResult diff --git a/src/api/demo/select.ts b/src/api/demo/select.ts deleted file mode 100644 index 4acd4e4f..00000000 --- a/src/api/demo/select.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defHttp } from '@/utils/http/axios' -import { DemoOptionsItem, selectParams } from './model/optionsModel' -enum Api { - OPTIONS_LIST = '/select/getDemoOptions' -} - -/** - * @description: Get sample options value - */ -export const optionsListApi = (params?: selectParams) => { - return defHttp.get({ url: Api.OPTIONS_LIST, params }) -} diff --git a/src/api/demo/system.ts b/src/api/demo/system.ts deleted file mode 100644 index 3902ff86..00000000 --- a/src/api/demo/system.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - AccountParams, - DeptListItem, - MenuParams, - RoleParams, - RolePageParams, - MenuListGetResultModel, - DeptListGetResultModel, - AccountListGetResultModel, - RolePageListGetResultModel, - RoleListGetResultModel -} from './model/systemModel' -import { defHttp } from '@/utils/http/axios' - -enum Api { - AccountList = '/system/getAccountList', - IsAccountExist = '/system/accountExist', - DeptList = '/system/getDeptList', - setRoleStatus = '/system/setRoleStatus', - MenuList = '/system/getMenuList', - RolePageList = '/system/getRoleListByPage', - GetAllRoleList = '/system/getAllRoleList' -} - -export const getAccountList = (params: AccountParams) => { - return defHttp.get({ url: Api.AccountList, params }) -} - -export const getDeptList = (params?: DeptListItem) => { - return defHttp.get({ url: Api.DeptList, params }) -} - -export const getMenuList = (params?: MenuParams) => { - return defHttp.get({ url: Api.MenuList, params }) -} - -export const getRoleListByPage = (params?: RolePageParams) => { - return defHttp.get({ url: Api.RolePageList, params }) -} - -export const getAllRoleList = (params?: RoleParams) => { - return defHttp.get({ url: Api.GetAllRoleList, params }) -} - -export const setRoleStatus = (id: number, status: string) => { - return defHttp.post({ url: Api.setRoleStatus, params: { id, status } }) -} - -export const isAccountExist = (account: string) => { - return defHttp.post({ url: Api.IsAccountExist, params: { account } }, { errorMessageMode: 'none' }) -} diff --git a/src/api/demo/table.ts b/src/api/demo/table.ts deleted file mode 100644 index 9affd4d7..00000000 --- a/src/api/demo/table.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { defHttp } from '@/utils/http/axios' -import { DemoParams, DemoListGetResultModel } from './model/tableModel' - -enum Api { - DEMO_LIST = '/table/getDemoList' -} - -/** - * @description: Get sample list value - */ - -export const demoListApi = (params: DemoParams) => { - return defHttp.get({ - url: Api.DEMO_LIST, - params, - headers: { - // @ts-ignore - ignoreCancelToken: true - } - }) -} diff --git a/src/api/demo/tree.ts b/src/api/demo/tree.ts deleted file mode 100644 index c8219103..00000000 --- a/src/api/demo/tree.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defHttp } from '@/utils/http/axios' - -enum Api { - TREE_OPTIONS_LIST = '/tree/getDemoOptions' -} - -/** - * @description: Get sample options value - */ -export const treeOptionsListApi = (params?: Recordable) => { - return defHttp.get({ url: Api.TREE_OPTIONS_LIST, params }) -} diff --git a/src/api/infra/apiAccessLog/index.ts b/src/api/infra/apiAccessLog/index.ts new file mode 100644 index 00000000..15aa4ee1 --- /dev/null +++ b/src/api/infra/apiAccessLog/index.ts @@ -0,0 +1,50 @@ +import { defHttp } from '@/utils/http/axios' + +export interface ApiAccessLogVO { + id: number + traceId: string + userId: number + userType: number + applicationName: string + requestMethod: string + requestParams: string + requestUrl: string + userIp: string + userAgent: string + beginTime: Date + endTIme: Date + duration: number + resultCode: number + resultMsg: string + createTime: Date +} + +export interface ApiAccessLogPageReqVO extends PageParam { + userId?: number + userType?: number + applicationName?: string + requestUrl?: string + beginTime?: Date[] + duration?: number + resultCode?: number +} + +export interface ApiAccessLogExportReqVO { + userId?: number + userType?: number + applicationName?: string + requestUrl?: string + beginTime?: Date[] + duration?: number + resultCode?: number +} + +// 查询列表API 访问日志 +export const getApiAccessLogPageApi = (params: ApiAccessLogPageReqVO) => { + return defHttp.get({ url: '/infra/api-access-log/page', params }) +} + +// 导出API 访问日志 +export const exportApiAccessLogApi = (params: ApiAccessLogExportReqVO) => { + return defHttp.download({ url: '/infra/api-access-log/export-excel', params }) +} diff --git a/src/api/infra/apiErrorLog/index.ts b/src/api/infra/apiErrorLog/index.ts new file mode 100644 index 00000000..09ec82e4 --- /dev/null +++ b/src/api/infra/apiErrorLog/index.ts @@ -0,0 +1,66 @@ +import { defHttp } from '@/utils/http/axios' + +export interface ApiErrorLogVO { + id: number + traceId: string + userId: number + userType: number + applicationName: string + requestMethod: string + requestParams: string + requestUrl: string + userIp: string + userAgent: string + exceptionTime: Date + exceptionName: string + exceptionMessage: string + exceptionRootCauseMessage: string + exceptionStackTrace: string + exceptionClassName: string + exceptionFileName: string + exceptionMethodName: string + exceptionLineNumber: number + processUserId: number + processStatus: number + processTime: Date + resultCode: number + createTime: Date +} + +export interface ApiErrorLogPageReqVO extends PageParam { + userId?: number + userType?: number + applicationName?: string + requestUrl?: string + exceptionTime?: Date[] + processStatus: number +} + +export interface ApiErrorLogExportReqVO { + userId?: number + userType?: number + applicationName?: string + requestUrl?: string + exceptionTime?: Date[] + processStatus: number +} + +// 查询列表API 访问日志 +export const getApiErrorLogPageApi = (params: ApiErrorLogPageReqVO) => { + return defHttp.get({ url: '/infra/api-error-log/page', params }) +} + +// 更新 API 错误日志的处理状态 +export const updateApiErrorLogPageApi = (id: number, processStatus: number) => { + return defHttp.put({ + url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus + }) +} + +// 导出API 访问日志 +export const exportApiErrorLogApi = (params: ApiErrorLogExportReqVO) => { + return defHttp.download({ + url: '/infra/api-error-log/export-excel', + params + }) +} diff --git a/src/api/infra/codegen/index.ts b/src/api/infra/codegen/index.ts new file mode 100644 index 00000000..7f87e567 --- /dev/null +++ b/src/api/infra/codegen/index.ts @@ -0,0 +1,57 @@ +import { defHttp } from '@/utils/http/axios' +import type { CodegenUpdateReqVO, CodegenCreateListReqVO } from './types' + +// 查询列表代码生成表定义 +export const getCodegenTablePageApi = (params) => { + return defHttp.get({ url: '/infra/codegen/table/page', params }) +} + +// 查询详情代码生成表定义 +export const getCodegenTableApi = (id: number) => { + return defHttp.get({ url: '/infra/codegen/detail?tableId=' + id }) +} + +// 新增代码生成表定义 +export const createCodegenTableApi = (data: CodegenCreateListReqVO) => { + return defHttp.post({ url: '/infra/codegen/create', data }) +} + +// 修改代码生成表定义 +export const updateCodegenTableApi = (data: CodegenUpdateReqVO) => { + return defHttp.put({ url: '/infra/codegen/update', data }) +} + +// 基于数据库的表结构,同步数据库的表和字段定义 +export const syncCodegenFromDBApi = (id: number) => { + return defHttp.put({ url: '/infra/codegen/sync-from-db?tableId=' + id }) +} + +// 基于 SQL 建表语句,同步数据库的表和字段定义 +export const syncCodegenFromSQLApi = (id: number, sql: string) => { + return defHttp.put({ url: '/infra/codegen/sync-from-sql?tableId=' + id + '&sql=' + sql }) +} + +// 预览生成代码 +export const previewCodegenApi = (id: number) => { + return defHttp.get({ url: '/infra/codegen/preview?tableId=' + id }) +} + +// 下载生成代码 +export const downloadCodegenApi = (id: number) => { + return defHttp.download({ url: '/infra/codegen/download?tableId=' + id }) +} + +// 获得表定义 +export const getSchemaTableListApi = (params) => { + return defHttp.get({ url: '/infra/codegen/db/table/list', params }) +} + +// 基于数据库的表结构,创建代码生成器的表定义 +export const createCodegenListApi = (data) => { + return defHttp.post({ url: '/infra/codegen/create-list', data }) +} + +// 删除代码生成表定义 +export const deleteCodegenTableApi = (id: number) => { + return defHttp.delete({ url: '/infra/codegen/delete?tableId=' + id }) +} diff --git a/src/api/infra/codegen/types.ts b/src/api/infra/codegen/types.ts new file mode 100644 index 00000000..be6a66ed --- /dev/null +++ b/src/api/infra/codegen/types.ts @@ -0,0 +1,61 @@ +export type CodegenTableVO = { + id: number + tableId: number + isParentMenuIdValid: boolean + dataSourceConfigId: number + scene: number + tableName: string + tableComment: string + remark: string + moduleName: string + businessName: string + className: string + classComment: string + author: string + createTime: Date + updateTime: Date + templateType: number + parentMenuId: number +} + +export type CodegenColumnVO = { + id: number + tableId: number + columnName: string + dataType: string + columnComment: string + nullable: number + primaryKey: number + autoIncrement: string + ordinalPosition: number + javaType: string + javaField: string + dictType: string + example: string + createOperation: number + updateOperation: number + listOperation: number + listOperationCondition: string + listOperationResult: number + htmlType: string +} +export type DatabaseTableVO = { + name: string + comment: string +} +export type CodegenDetailVO = { + table: CodegenTableVO + columns: CodegenColumnVO[] +} +export type CodegenPreviewVO = { + filePath: string + code: string +} +export type CodegenUpdateReqVO = { + table: CodegenTableVO + columns: CodegenColumnVO[] +} +export type CodegenCreateListReqVO = { + dataSourceConfigId: number + tableNames: string[] +} diff --git a/src/api/infra/config/index.ts b/src/api/infra/config/index.ts new file mode 100644 index 00000000..b6bff665 --- /dev/null +++ b/src/api/infra/config/index.ts @@ -0,0 +1,62 @@ +import { defHttp } from '@/utils/http/axios' + +export interface ConfigVO { + id: number + category: string + name: string + key: string + value: string + type: number + visible: boolean + remark: string + createTime: Date +} + +export interface ConfigPageReqVO extends PageParam { + name?: string + key?: string + type?: number + createTime?: Date[] +} + +export interface ConfigExportReqVO { + name?: string + key?: string + type?: number + createTime?: Date[] +} + +// 查询参数列表 +export const getConfigPageApi = (params: ConfigPageReqVO) => { + return defHttp.get({ url: '/infra/config/page', params }) +} + +// 查询参数详情 +export const getConfigApi = (id: number) => { + return defHttp.get({ url: '/infra/config/get?id=' + id }) +} + +// 根据参数键名查询参数值 +export const getConfigKeyApi = (configKey: string) => { + return defHttp.get({ url: '/infra/config/get-value-by-key?key=' + configKey }) +} + +// 新增参数 +export const createConfigApi = (data: ConfigVO) => { + return defHttp.post({ url: '/infra/config/create', data }) +} + +// 修改参数 +export const updateConfigApi = (data: ConfigVO) => { + return defHttp.put({ url: '/infra/config/update', data }) +} + +// 删除参数 +export const deleteConfigApi = (id: number) => { + return defHttp.delete({ url: '/infra/config/delete?id=' + id }) +} + +// 导出参数 +export const exportConfigApi = (params: ConfigExportReqVO) => { + return defHttp.download({ url: '/infra/config/export', params }) +} diff --git a/src/api/infra/dataSourceConfig/index.ts b/src/api/infra/dataSourceConfig/index.ts new file mode 100644 index 00000000..ded27c38 --- /dev/null +++ b/src/api/infra/dataSourceConfig/index.ts @@ -0,0 +1,35 @@ +import { defHttp } from '@/utils/http/axios' + +export interface DataSourceConfigVO { + id: number + name: string + url: string + username: string + password: string + createTime: Date +} + +// 查询数据源配置列表 +export const getDataSourceConfigListApi = () => { + return defHttp.get({ url: '/infra/data-source-config/list' }) +} + +// 查询数据源配置详情 +export const getDataSourceConfigApi = (id: number) => { + return defHttp.get({ url: '/infra/data-source-config/get?id=' + id }) +} + +// 新增数据源配置 +export const createDataSourceConfigApi = (data: DataSourceConfigVO) => { + return defHttp.post({ url: '/infra/data-source-config/create', data }) +} + +// 修改数据源配置 +export const updateDataSourceConfigApi = (data: DataSourceConfigVO) => { + return defHttp.put({ url: '/infra/data-source-config/update', data }) +} + +// 删除数据源配置 +export const deleteDataSourceConfigApi = (id: number) => { + return defHttp.delete({ url: '/infra/data-source-config/delete?id=' + id }) +} diff --git a/src/api/infra/dbDoc/index.ts b/src/api/infra/dbDoc/index.ts new file mode 100644 index 00000000..b8ebb7c1 --- /dev/null +++ b/src/api/infra/dbDoc/index.ts @@ -0,0 +1,16 @@ +import { defHttp } from '@/utils/http/axios' + +// 导出Html +export const exportHtmlApi = () => { + return defHttp.download({ url: '/infra/db-doc/export-html' }) +} + +// 导出Word +export const exportWordApi = () => { + return defHttp.download({ url: '/infra/db-doc/export-word' }) +} + +// 导出Markdown +export const exportMarkdownApi = () => { + return defHttp.download({ url: '/infra/db-doc/export-markdown' }) +} diff --git a/src/api/infra/fileConfig/index.ts b/src/api/infra/fileConfig/index.ts new file mode 100644 index 00000000..b59318bd --- /dev/null +++ b/src/api/infra/fileConfig/index.ts @@ -0,0 +1,66 @@ +import { defHttp } from '@/utils/http/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 interface FileConfigPageReqVO extends PageParam { + name?: string + storage?: number + createTime?: Date[] +} + +// 查询文件配置列表 +export const getFileConfigPageApi = (params: FileConfigPageReqVO) => { + return defHttp.get({ url: '/infra/file-config/page', params }) +} + +// 查询文件配置详情 +export const getFileConfigApi = (id: number) => { + return defHttp.get({ url: '/infra/file-config/get?id=' + id }) +} + +// 更新文件配置为主配置 +export const updateFileConfigMasterApi = (id: number) => { + return defHttp.put({ url: '/infra/file-config/update-master?id=' + id }) +} + +// 新增文件配置 +export const createFileConfigApi = (data: FileConfigVO) => { + return defHttp.post({ url: '/infra/file-config/create', data }) +} + +// 修改文件配置 +export const updateFileConfigApi = (data: FileConfigVO) => { + return defHttp.put({ url: '/infra/file-config/update', data }) +} + +// 删除文件配置 +export const deleteFileConfigApi = (id: number) => { + return defHttp.delete({ url: '/infra/file-config/delete?id=' + id }) +} + +// 测试文件配置 +export const testFileConfigApi = (id: number) => { + return defHttp.get({ url: '/infra/file-config/test?id=' + id }) +} diff --git a/src/api/infra/fileList/index.ts b/src/api/infra/fileList/index.ts new file mode 100644 index 00000000..be76524c --- /dev/null +++ b/src/api/infra/fileList/index.ts @@ -0,0 +1,28 @@ +import { defHttp } from '@/utils/http/axios' + +export interface FileVO { + id: number + configId: number + path: string + name: string + url: string + size: string + type: string + createTime: Date +} + +export interface FilePageReqVO extends PageParam { + path?: string + type?: string + createTime?: Date[] +} + +// 查询文件列表 +export const getFilePageApi = (params: FilePageReqVO) => { + return defHttp.get({ url: '/infra/file/page', params }) +} + +// 删除文件 +export const deleteFileApi = (id: number) => { + return defHttp.delete({ url: '/infra/file/delete?id=' + id }) +} diff --git a/src/api/infra/job/index.ts b/src/api/infra/job/index.ts new file mode 100644 index 00000000..1a458dc7 --- /dev/null +++ b/src/api/infra/job/index.ts @@ -0,0 +1,75 @@ +import { defHttp } from '@/utils/http/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 interface JobPageReqVO extends PageParam { + name?: string + status?: number + handlerName?: string +} + +export interface JobExportReqVO { + name?: string + status?: number + handlerName?: string +} + +// 任务列表 +export const getJobPageApi = (params: JobPageReqVO) => { + return defHttp.get({ url: '/infra/job/page', params }) +} + +// 任务详情 +export const getJobApi = (id: number) => { + return defHttp.get({ url: '/infra/job/get?id=' + id }) +} + +// 新增任务 +export const createJobApi = (data: JobVO) => { + return defHttp.post({ url: '/infra/job/create', data }) +} + +// 修改定时任务调度 +export const updateJobApi = (data: JobVO) => { + return defHttp.put({ url: '/infra/job/update', data }) +} + +// 删除定时任务调度 +export const deleteJobApi = (id: number) => { + return defHttp.delete({ url: '/infra/job/delete?id=' + id }) +} + +// 导出定时任务调度 +export const exportJobApi = (params: JobExportReqVO) => { + return defHttp.download({ url: '/infra/job/export-excel', params }) +} + +// 任务状态修改 +export const updateJobStatusApi = (id: number, status: number) => { + const params = { + id, + status + } + return defHttp.put({ url: '/infra/job/update-status', params }) +} + +// 定时任务立即执行一次 +export const runJobApi = (id: number) => { + return defHttp.put({ url: '/infra/job/trigger?id=' + id }) +} + +// 获得定时任务的下 n 次执行时间 +export const getJobNextTimesApi = (id: number) => { + return defHttp.get({ url: '/infra/job/get_next_times?id=' + id }) +} diff --git a/src/api/infra/jobLog/index.ts b/src/api/infra/jobLog/index.ts new file mode 100644 index 00000000..1f5e3add --- /dev/null +++ b/src/api/infra/jobLog/index.ts @@ -0,0 +1,49 @@ +import { defHttp } from '@/utils/http/axios' + +export interface JobLogVO { + id: number + jobId: number + handlerName: string + handlerParam: string + cronExpression: string + executeIndex: string + beginTime: string + endTime: string + duration: string + status: number + createTime: string +} + +export interface JobLogPageReqVO extends PageParam { + jobId?: number + handlerName?: string + beginTime?: string + endTime?: string + status?: number +} + +export interface JobLogExportReqVO { + jobId?: number + handlerName?: string + beginTime?: string + endTime?: string + status?: number +} + +// 任务日志列表 +export const getJobLogPageApi = (params: JobLogPageReqVO) => { + return defHttp.get({ url: '/infra/job-log/page', params }) +} + +// 任务日志详情 +export const getJobLogApi = (id: number) => { + return defHttp.get({ url: '/infra/job-log/get?id=' + id }) +} + +// 导出定时任务日志 +export const exportJobLogApi = (params: JobLogExportReqVO) => { + return defHttp.download({ + url: '/infra/job-log/export-excel', + params + }) +} diff --git a/src/api/infra/redis/index.ts b/src/api/infra/redis/index.ts new file mode 100644 index 00000000..d6035949 --- /dev/null +++ b/src/api/infra/redis/index.ts @@ -0,0 +1,41 @@ +import { defHttp } from '@/utils/http/axios' + +/** + * 获取redis 监控信息 + */ +export const getCacheApi = () => { + return defHttp.get({ url: '/infra/redis/get-monitor-info' }) +} +// 获取模块 +export const getKeyDefineListApi = () => { + return defHttp.get({ url: '/infra/redis/get-key-define-list' }) +} +/** + * 获取redis key列表 + */ +export const getKeyListApi = (keyTemplate: string) => { + return defHttp.get({ + url: '/infra/redis/get-key-list', + params: { + keyTemplate + } + }) +} +// 获取缓存内容 +export const getKeyValueApi = (key: string) => { + return defHttp.get({ url: '/infra/redis/get-key-value?key=' + key }) +} + +// 根据键名删除缓存 +export const deleteKeyApi = (key: string) => { + return defHttp.delete({ url: '/infra/redis/delete-key?key=' + key }) +} + +export const deleteKeysApi = (keyTemplate: string) => { + return defHttp.delete({ + url: '/infra/redis/delete-keys?', + params: { + keyTemplate + } + }) +} diff --git a/src/api/infra/redis/types.ts b/src/api/infra/redis/types.ts new file mode 100644 index 00000000..2342e543 --- /dev/null +++ b/src/api/infra/redis/types.ts @@ -0,0 +1,185 @@ +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 +} + +export interface RedisKeyInfo { + keyTemplate: string + keyType: string + valueType: string + timeoutType: number + timeout: number + memo: string +} diff --git a/src/api/pay/app/index.ts b/src/api/pay/app/index.ts new file mode 100644 index 00000000..f1205737 --- /dev/null +++ b/src/api/pay/app/index.ts @@ -0,0 +1,78 @@ +import { defHttp } from '@/utils/http/axios' + +export interface AppVO { + id: number + name: string + status: number + remark: string + payNotifyUrl: string + refundNotifyUrl: string + merchantId: number + merchantName: string + createTime: Date +} + +export interface AppPageReqVO extends PageParam { + name?: string + status?: number + remark?: string + payNotifyUrl?: string + refundNotifyUrl?: string + merchantName?: string + createTime?: Date[] +} + +export interface AppExportReqVO { + name?: string + status?: number + remark?: string + payNotifyUrl?: string + refundNotifyUrl?: string + merchantName?: string + createTime?: Date[] +} + +export interface AppUpdateStatusReqVO { + id: number + status: number +} + +// 查询列表支付应用 +export const getAppPageApi = (params: AppPageReqVO) => { + return defHttp.get({ url: '/pay/app/page', params }) +} + +// 查询详情支付应用 +export const getAppApi = (id: number) => { + return defHttp.get({ url: '/pay/app/get?id=' + id }) +} + +// 新增支付应用 +export const createAppApi = (data: AppVO) => { + return defHttp.post({ url: '/pay/app/create', data }) +} + +// 修改支付应用 +export const updateAppApi = (data: AppVO) => { + return defHttp.put({ url: '/pay/app/update', data }) +} + +// 支付应用信息状态修改 +export const changeAppStatusApi = (data: AppUpdateStatusReqVO) => { + return defHttp.put({ url: '/pay/app/update-status', data: data }) +} + +// 删除支付应用 +export const deleteAppApi = (id: number) => { + return defHttp.delete({ url: '/pay/app/delete?id=' + id }) +} + +// 导出支付应用 +export const exportAppApi = (params: AppExportReqVO) => { + return defHttp.download({ url: '/pay/app/export-excel', params }) +} + +// 根据商ID称搜索应用列表 +export const getAppListByMerchantIdApi = (merchantId: number) => { + return defHttp.get({ url: '/pay/app/list-merchant-id', params: { merchantId: merchantId } }) +} diff --git a/src/api/pay/channel/index.ts b/src/api/pay/channel/index.ts new file mode 100644 index 00000000..311590a6 --- /dev/null +++ b/src/api/pay/channel/index.ts @@ -0,0 +1,70 @@ +import { defHttp } from '@/utils/http/axios' + +export interface ChannelVO { + id: number + code: string + config: string + status: number + remark: string + feeRate: number + merchantId: number + appId: number + createTime: Date +} + +export interface ChannelPageReqVO extends PageParam { + code?: string + status?: number + remark?: string + feeRate?: number + merchantId?: number + appId?: number + config?: string + createTime?: Date[] +} + +export interface ChannelExportReqVO { + code?: string + status?: number + remark?: string + feeRate?: number + merchantId?: number + appId?: number + config?: string + createTime?: Date[] +} + +// 查询列表支付渠道 +export const getChannelPageApi = (params: ChannelPageReqVO) => { + return defHttp.get({ url: '/pay/channel/page', params }) +} + +// 查询详情支付渠道 +export const getChannelApi = (merchantId: number, appId: string, code: string) => { + const params = { + merchantId: merchantId, + appId: appId, + code: code + } + return defHttp.get({ url: '/pay/channel/get-channel', params: params }) +} + +// 新增支付渠道 +export const createChannelApi = (data: ChannelVO) => { + return defHttp.post({ url: '/pay/channel/create', data }) +} + +// 修改支付渠道 +export const updateChannelApi = (data: ChannelVO) => { + return defHttp.put({ url: '/pay/channel/update', data }) +} + +// 删除支付渠道 +export const deleteChannelApi = (id: number) => { + return defHttp.delete({ url: '/pay/channel/delete?id=' + id }) +} + +// 导出支付渠道 +export const exportChannelApi = (params: ChannelExportReqVO) => { + return defHttp.download({ url: '/pay/channel/export-excel', params }) +} diff --git a/src/api/pay/merchant/index.ts b/src/api/pay/merchant/index.ts new file mode 100644 index 00000000..75bb1d82 --- /dev/null +++ b/src/api/pay/merchant/index.ts @@ -0,0 +1,77 @@ +import { defHttp } from '@/utils/http/axios' + +export interface MerchantVO { + id: number + no: string + name: string + shortName: string + status: number + remark: string + createTime: Date +} + +export interface MerchantPageReqVO extends PageParam { + no?: string + name?: string + shortName?: string + status?: number + remark?: string + createTime?: Date[] +} + +export interface MerchantExportReqVO { + no?: string + name?: string + shortName?: string + status?: number + remark?: string + createTime?: Date[] +} + +// 查询列表支付商户 +export const getMerchantPageApi = (params: MerchantPageReqVO) => { + return defHttp.get({ url: '/pay/merchant/page', params }) +} + +// 查询详情支付商户 +export const getMerchantApi = (id: number) => { + return defHttp.get({ url: '/pay/merchant/get?id=' + id }) +} + +// 根据商户名称搜索商户列表 +export const getMerchantListByNameApi = (name: string) => { + return defHttp.get({ + url: '/pay/merchant/list-by-name?id=', + params: { + name: name + } + }) +} + +// 新增支付商户 +export const createMerchantApi = (data: MerchantVO) => { + return defHttp.post({ url: '/pay/merchant/create', data }) +} + +// 修改支付商户 +export const updateMerchantApi = (data: MerchantVO) => { + return defHttp.put({ url: '/pay/merchant/update', data }) +} + +// 删除支付商户 +export const deleteMerchantApi = (id: number) => { + return defHttp.delete({ url: '/pay/merchant/delete?id=' + id }) +} + +// 导出支付商户 +export const exportMerchantApi = (params: MerchantExportReqVO) => { + return defHttp.download({ url: '/pay/merchant/export-excel', params }) +} +// 支付商户状态修改 +export const changeMerchantStatusApi = (id: number, status: number) => { + const data = { + id, + status + } + return defHttp.put({ url: '/pay/merchant/update-status', data: data }) +} diff --git a/src/api/pay/order/index.ts b/src/api/pay/order/index.ts new file mode 100644 index 00000000..fd6b10e6 --- /dev/null +++ b/src/api/pay/order/index.ts @@ -0,0 +1,109 @@ +import { defHttp } from '@/utils/http/axios' + +export interface OrderVO { + id: number + merchantId: number + appId: number + channelId: number + channelCode: string + merchantOrderId: string + subject: string + body: string + notifyUrl: string + notifyStatus: number + amount: number + channelFeeRate: number + channelFeeAmount: number + status: number + userIp: string + expireTime: Date + successTime: Date + notifyTime: Date + successExtensionId: number + refundStatus: number + refundTimes: number + refundAmount: number + channelUserId: string + channelOrderNo: string + createTime: Date +} + +export interface OrderPageReqVO extends PageParam { + merchantId?: number + appId?: number + channelId?: number + channelCode?: string + merchantOrderId?: string + subject?: string + body?: string + notifyUrl?: string + notifyStatus?: number + amount?: number + channelFeeRate?: number + channelFeeAmount?: number + status?: number + expireTime?: Date[] + successTime?: Date[] + notifyTime?: Date[] + successExtensionId?: number + refundStatus?: number + refundTimes?: number + channelUserId?: string + channelOrderNo?: string + createTime?: Date[] +} + +export interface OrderExportReqVO { + merchantId?: number + appId?: number + channelId?: number + channelCode?: string + merchantOrderId?: string + subject?: string + body?: string + notifyUrl?: string + notifyStatus?: number + amount?: number + channelFeeRate?: number + channelFeeAmount?: number + status?: number + expireTime?: Date[] + successTime?: Date[] + notifyTime?: Date[] + successExtensionId?: number + refundStatus?: number + refundTimes?: number + channelUserId?: string + channelOrderNo?: string + createTime?: Date[] +} + +// 查询列表支付订单 +export const getOrderPageApi = async (params: OrderPageReqVO) => { + return defHttp.get({ url: '/pay/order/page', params }) +} + +// 查询详情支付订单 +export const getOrderApi = async (id: number) => { + return defHttp.get({ url: '/pay/order/get?id=' + id }) +} + +// 新增支付订单 +export const createOrderApi = async (data: OrderVO) => { + return defHttp.post({ url: '/pay/order/create', data }) +} + +// 修改支付订单 +export const updateOrderApi = async (data: OrderVO) => { + return defHttp.put({ url: '/pay/order/update', data }) +} + +// 删除支付订单 +export const deleteOrderApi = async (id: number) => { + return defHttp.delete({ url: '/pay/order/delete?id=' + id }) +} + +// 导出支付订单 +export const exportOrderApi = async (params: OrderExportReqVO) => { + return defHttp.download({ url: '/pay/order/export-excel', params }) +} diff --git a/src/api/pay/refund/index.ts b/src/api/pay/refund/index.ts new file mode 100644 index 00000000..b092b5ba --- /dev/null +++ b/src/api/pay/refund/index.ts @@ -0,0 +1,116 @@ +import { defHttp } from '@/utils/http/axios' + +export interface RefundVO { + id: number + merchantId: number + appId: number + channelId: number + channelCode: string + orderId: string + tradeNo: string + merchantOrderId: string + merchantRefundNo: string + notifyUrl: string + notifyStatus: number + status: number + type: number + payAmount: number + refundAmount: number + reason: string + userIp: string + channelOrderNo: string + channelRefundNo: string + channelErrorCode: string + channelErrorMsg: string + channelExtras: string + expireTime: Date + successTime: Date + notifyTime: Date + createTime: Date +} + +export interface RefundPageReqVO extends PageParam { + merchantId?: number + appId?: number + channelId?: number + channelCode?: string + orderId?: string + tradeNo?: string + merchantOrderId?: string + merchantRefundNo?: string + notifyUrl?: string + notifyStatus?: number + status?: number + type?: number + payAmount?: number + refundAmount?: number + reason?: string + userIp?: string + channelOrderNo?: string + channelRefundNo?: string + channelErrorCode?: string + channelErrorMsg?: string + channelExtras?: string + expireTime?: Date[] + successTime?: Date[] + notifyTime?: Date[] + createTime?: Date[] +} + +export interface PayRefundExportReqVO { + merchantId?: number + appId?: number + channelId?: number + channelCode?: string + orderId?: string + tradeNo?: string + merchantOrderId?: string + merchantRefundNo?: string + notifyUrl?: string + notifyStatus?: number + status?: number + type?: number + payAmount?: number + refundAmount?: number + reason?: string + userIp?: string + channelOrderNo?: string + channelRefundNo?: string + channelErrorCode?: string + channelErrorMsg?: string + channelExtras?: string + expireTime?: Date[] + successTime?: Date[] + notifyTime?: Date[] + createTime?: Date[] +} + +// 查询列表退款订单 +export const getRefundPageApi = (params: RefundPageReqVO) => { + return defHttp.get({ url: '/pay/refund/page', params }) +} + +// 查询详情退款订单 +export const getRefundApi = (id: number) => { + return defHttp.get({ url: '/pay/refund/get?id=' + id }) +} + +// 新增退款订单 +export const createRefundApi = (data: RefundVO) => { + return defHttp.post({ url: '/pay/refund/create', data }) +} + +// 修改退款订单 +export const updateRefundApi = (data: RefundVO) => { + return defHttp.put({ url: '/pay/refund/update', data }) +} + +// 删除退款订单 +export const deleteRefundApi = (id: number) => { + return defHttp.delete({ url: '/pay/refund/delete?id=' + id }) +} + +// 导出退款订单 +export const exportRefundApi = (params: PayRefundExportReqVO) => { + return defHttp.download({ url: '/pay/refund/export-excel', params }) +} diff --git a/src/api/system/dept/index.ts b/src/api/system/dept/index.ts new file mode 100644 index 00000000..31ef5d45 --- /dev/null +++ b/src/api/system/dept/index.ts @@ -0,0 +1,48 @@ +import { defHttp } from '@/utils/http/axios' + +export interface DeptVO { + id?: number + name: string + parentId: number + status: number + sort: number + leaderUserId: number + phone: string + email: string + createTime: Date +} + +export interface DeptPageReqVO { + name?: string + status?: number +} + +// 查询部门(精简)列表 +export const listSimpleDeptApi = async () => { + return defHttp.get({ url: '/system/dept/list-all-simple' }) +} + +// 查询部门列表 +export const getDeptPageApi = async (params: DeptPageReqVO) => { + return defHttp.get({ url: '/system/dept/list', params }) +} + +// 查询部门详情 +export const getDeptApi = async (id: number) => { + return defHttp.get({ url: '/system/dept/get?id=' + id }) +} + +// 新增部门 +export const createDeptApi = async (data: DeptVO) => { + return defHttp.post({ url: '/system/dept/create', data: data }) +} + +// 修改部门 +export const updateDeptApi = async (params: DeptVO) => { + return defHttp.put({ url: '/system/dept/update', data: params }) +} + +// 删除部门 +export const deleteDeptApi = async (id: number) => { + return defHttp.delete({ url: '/system/dept/delete?id=' + id }) +} diff --git a/src/api/system/dict/dict.data.ts b/src/api/system/dict/dict.data.ts new file mode 100644 index 00000000..66c6de4c --- /dev/null +++ b/src/api/system/dict/dict.data.ts @@ -0,0 +1,36 @@ +import { defHttp } from '@/utils/http/axios' +import type { DictDataVO, DictDataPageReqVO, DictDataExportReqVO } from './types' + +// 查询字典数据(精简)列表 +export const listSimpleDictDataApi = () => { + return defHttp.get({ url: '/system/dict-data/list-all-simple' }) +} + +// 查询字典数据列表 +export const getDictDataPageApi = (params: DictDataPageReqVO) => { + return defHttp.get({ url: '/system/dict-data/page', params }) +} + +// 查询字典数据详情 +export const getDictDataApi = (id: number) => { + return defHttp.get({ url: '/system/dict-data/get?id=' + id }) +} + +// 新增字典数据 +export const createDictDataApi = (data: DictDataVO) => { + return defHttp.post({ url: '/system/dict-data/create', data }) +} + +// 修改字典数据 +export const updateDictDataApi = (data: DictDataVO) => { + return defHttp.put({ url: '/system/dict-data/update', data }) +} + +// 删除字典数据 +export const deleteDictDataApi = (id: number) => { + return defHttp.delete({ url: '/system/dict-data/delete?id=' + id }) +} +// 导出字典类型数据 +export const exportDictDataApi = (params: DictDataExportReqVO) => { + return defHttp.get({ url: '/system/dict-data/export', params }) +} diff --git a/src/api/system/dict/dict.type.ts b/src/api/system/dict/dict.type.ts new file mode 100644 index 00000000..a7cc3ea1 --- /dev/null +++ b/src/api/system/dict/dict.type.ts @@ -0,0 +1,36 @@ +import { defHttp } from '@/utils/http/axios' +import type { DictTypeVO, DictTypePageReqVO, DictTypeExportReqVO } from './types' + +// 查询字典(精简)列表 +export const listSimpleDictTypeApi = () => { + return defHttp.get({ url: '/system/dict-type/list-all-simple' }) +} + +// 查询字典列表 +export const getDictTypePageApi = (params: DictTypePageReqVO) => { + return defHttp.get({ url: '/system/dict-type/page', params }) +} + +// 查询字典详情 +export const getDictTypeApi = (id: number) => { + return defHttp.get({ url: '/system/dict-type/get?id=' + id }) +} + +// 新增字典 +export const createDictTypeApi = (data: DictTypeVO) => { + return defHttp.post({ url: '/system/dict-type/create', data }) +} + +// 修改字典 +export const updateDictTypeApi = (data: DictTypeVO) => { + return defHttp.put({ url: '/system/dict-type/update', data }) +} + +// 删除字典 +export const deleteDictTypeApi = (id: number) => { + return defHttp.delete({ url: '/system/dict-type/delete?id=' + id }) +} +// 导出字典类型 +export const exportDictTypeApi = (params: DictTypeExportReqVO) => { + return defHttp.get({ url: '/system/dict-type/export', params }) +} diff --git a/src/api/system/dict/types.ts b/src/api/system/dict/types.ts new file mode 100644 index 00000000..b630dccb --- /dev/null +++ b/src/api/system/dict/types.ts @@ -0,0 +1,46 @@ +export type DictTypeVO = { + id: number + name: string + type: string + status: number + remark: string + createTime: Date +} + +export type DictTypePageReqVO = { + name: string + type: string + status: number + createTime: Date[] +} + +export type DictTypeExportReqVO = { + name: string + type: string + status: number + createTime: Date[] +} + +export type DictDataVO = { + id: number + sort: number + label: string + value: string + dictType: string + status: number + colorType: string + cssClass: string + remark: string + createTime: Date +} +export type DictDataPageReqVO = { + label: string + dictType: string + status: number +} + +export type DictDataExportReqVO = { + label: string + dictType: string + status: number +} diff --git a/src/api/system/errorCode/index.ts b/src/api/system/errorCode/index.ts new file mode 100644 index 00000000..77ea435f --- /dev/null +++ b/src/api/system/errorCode/index.ts @@ -0,0 +1,48 @@ +import { defHttp } from '@/utils/http/axios' + +export interface ErrorCodeVO { + id: number + type: number + applicationName: string + code: number + message: string + memo: string + createTime: Date +} + +export interface ErrorCodePageReqVO extends PageParam { + type?: number + applicationName?: string + code?: number + message?: string + createTime?: Date[] +} + +// 查询错误码列表 +export const getErrorCodePageApi = (params: ErrorCodePageReqVO) => { + return defHttp.get({ url: '/system/error-code/page', params }) +} + +// 查询错误码详情 +export const getErrorCodeApi = (id: number) => { + return defHttp.get({ url: '/system/error-code/get?id=' + id }) +} + +// 新增错误码 +export const createErrorCodeApi = (data: ErrorCodeVO) => { + return defHttp.post({ url: '/system/error-code/create', data }) +} + +// 修改错误码 +export const updateErrorCodeApi = (data: ErrorCodeVO) => { + return defHttp.put({ url: '/system/error-code/update', data }) +} + +// 删除错误码 +export const deleteErrorCodeApi = (id: number) => { + return defHttp.delete({ url: '/system/error-code/delete?id=' + id }) +} +// 导出错误码 +export const excelErrorCodeApi = (params: ErrorCodePageReqVO) => { + return defHttp.download({ url: '/system/error-code/export-excel', params }) +} diff --git a/src/api/system/loginLog/index.ts b/src/api/system/loginLog/index.ts new file mode 100644 index 00000000..817c1f97 --- /dev/null +++ b/src/api/system/loginLog/index.ts @@ -0,0 +1,30 @@ +import { defHttp } from '@/utils/http/axios' + +export interface LoginLogVO { + id: number + logType: number + traceId: number + userId: number + userType: number + username: string + status: number + userIp: string + userAgent: string + createTime: Date +} + +export interface LoginLogReqVO extends PageParam { + userIp?: string + username?: string + status?: boolean + createTime?: Date[] +} + +// 查询登录日志列表 +export const getLoginLogPageApi = (params: LoginLogReqVO) => { + return defHttp.get({ url: '/system/login-log/page', params }) +} +// 导出登录日志 +export const exportLoginLogApi = (params: LoginLogReqVO) => { + return defHttp.download({ url: '/system/login-log/export', params }) +} diff --git a/src/api/system/menu/index.ts b/src/api/system/menu/index.ts new file mode 100644 index 00000000..07f5aa5c --- /dev/null +++ b/src/api/system/menu/index.ts @@ -0,0 +1,52 @@ +import { defHttp } from '@/utils/http/axios' + +export interface MenuVO { + id: number + name: string + permission: string + type: number + sort: number + parentId: number + path: string + icon: string + component: string + status: number + visible: boolean + keepAlive: boolean + createTime: Date +} + +export interface MenuPageReqVO { + name?: string + status?: number +} + +// 查询菜单(精简)列表 +export const listSimpleMenusApi = () => { + return defHttp.get({ url: '/system/menu/list-all-simple' }) +} + +// 查询菜单列表 +export const getMenuListApi = (params: MenuPageReqVO) => { + return defHttp.get({ url: '/system/menu/list', params }) +} + +// 获取菜单详情 +export const getMenuApi = (id: number) => { + return defHttp.get({ url: '/system/menu/get?id=' + id }) +} + +// 新增菜单 +export const createMenuApi = (data: MenuVO) => { + return defHttp.post({ url: '/system/menu/create', data }) +} + +// 修改菜单 +export const updateMenuApi = (data: MenuVO) => { + return defHttp.put({ url: '/system/menu/update', data }) +} + +// 删除菜单 +export const deleteMenuApi = (id: number) => { + return defHttp.delete({ url: '/system/menu/delete?id=' + id }) +} diff --git a/src/api/system/notice/index.ts b/src/api/system/notice/index.ts new file mode 100644 index 00000000..e08d8d6b --- /dev/null +++ b/src/api/system/notice/index.ts @@ -0,0 +1,42 @@ +import { defHttp } from '@/utils/http/axios' + +export interface NoticeVO { + id: number + title: string + type: number + content: string + status: number + remark: string + creator: string + createTime: Date +} + +export interface NoticePageReqVO extends PageParam { + title?: string + status?: number +} + +// 查询公告列表 +export const getNoticePageApi = (params: NoticePageReqVO) => { + return defHttp.get({ url: '/system/notice/page', params }) +} + +// 查询公告详情 +export const getNoticeApi = (id: number) => { + return defHttp.get({ url: '/system/notice/get?id=' + id }) +} + +// 新增公告 +export const createNoticeApi = (data: NoticeVO) => { + return defHttp.post({ url: '/system/notice/create', data }) +} + +// 修改公告 +export const updateNoticeApi = (data: NoticeVO) => { + return defHttp.put({ url: '/system/notice/update', data }) +} + +// 删除公告 +export const deleteNoticeApi = (id: number) => { + return defHttp.delete({ url: '/system/notice/delete?id=' + id }) +} diff --git a/src/api/system/oauth2/client.ts b/src/api/system/oauth2/client.ts new file mode 100644 index 00000000..b9c383bd --- /dev/null +++ b/src/api/system/oauth2/client.ts @@ -0,0 +1,51 @@ +import { defHttp } from '@/utils/http/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 +} + +export interface OAuth2ClientPageReqVO extends PageParam { + name?: string + status?: number +} +// 查询 OAuth2列表 +export const getOAuth2ClientPageApi = (params: OAuth2ClientPageReqVO) => { + return defHttp.get({ url: '/system/oauth2-client/page', params }) +} + +// 查询 OAuth2详情 +export const getOAuth2ClientApi = (id: number) => { + return defHttp.get({ url: '/system/oauth2-client/get?id=' + id }) +} + +// 新增 OAuth2 +export const createOAuth2ClientApi = (data: OAuth2ClientVO) => { + return defHttp.post({ url: '/system/oauth2-client/create', data }) +} + +// 修改 OAuth2 +export const updateOAuth2ClientApi = (data: OAuth2ClientVO) => { + return defHttp.put({ url: '/system/oauth2-client/update', data }) +} + +// 删除 OAuth2 +export const deleteOAuth2ClientApi = (id: number) => { + return defHttp.delete({ url: '/system/oauth2-client/delete?id=' + id }) +} diff --git a/src/api/system/oauth2/token.ts b/src/api/system/oauth2/token.ts new file mode 100644 index 00000000..8ac89b0b --- /dev/null +++ b/src/api/system/oauth2/token.ts @@ -0,0 +1,28 @@ +import { defHttp } from '@/utils/http/axios' + +export interface OAuth2TokenVO { + id: number + accessToken: string + refreshToken: string + userId: number + userType: number + clientId: string + createTime: Date + expiresTime: Date +} + +export interface OAuth2TokenPageReqVO extends PageParam { + userId?: number + userType?: number + clientId?: string +} + +// 查询 token列表 +export const getAccessTokenPageApi = (params: OAuth2TokenPageReqVO) => { + return defHttp.get({ url: '/system/oauth2-token/page', params }) +} + +// 删除 token +export const deleteAccessTokenApi = (accessToken: number) => { + return defHttp.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken }) +} diff --git a/src/api/system/operatelog/index.ts b/src/api/system/operatelog/index.ts new file mode 100644 index 00000000..56ea09e1 --- /dev/null +++ b/src/api/system/operatelog/index.ts @@ -0,0 +1,41 @@ +import { defHttp } from '@/utils/http/axios' + +export type OperateLogVO = { + id: number + userNickname: string + traceId: string + userId: number + module: string + name: string + type: number + content: string + exts: Map + defHttpMethod: string + defHttpUrl: string + userIp: string + userAgent: string + javaMethod: string + javaMethodArgs: string + startTime: Date + duration: number + resultCode: number + resultMsg: string + resultData: string +} + +export interface OperateLogPageReqVO extends PageParam { + module?: string + userNickname?: string + type?: number + success?: boolean + startTime?: Date[] +} + +// 查询操作日志列表 +export const getOperateLogPageApi = (params: OperateLogPageReqVO) => { + return defHttp.get({ url: '/system/operate-log/page', params }) +} +// 导出操作日志 +export const exportOperateLogApi = (params: OperateLogPageReqVO) => { + return defHttp.download({ url: '/system/operate-log/export', params }) +} diff --git a/src/api/system/permission/index.ts b/src/api/system/permission/index.ts new file mode 100644 index 00000000..b9428945 --- /dev/null +++ b/src/api/system/permission/index.ts @@ -0,0 +1,42 @@ +import { defHttp } from '@/utils/http/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 listRoleMenusApi = (roleId: number) => { + return defHttp.get({ url: '/system/permission/list-role-resources?roleId=' + roleId }) +} + +// 赋予角色菜单权限 +export const assignRoleMenuApi = (data: PermissionAssignRoleMenuReqVO) => { + return defHttp.post({ url: '/system/permission/assign-role-menu', data }) +} + +// 赋予角色数据权限 +export const assignRoleDataScopeApi = (data: PermissionAssignRoleDataScopeReqVO) => { + return defHttp.post({ url: '/system/permission/assign-role-data-scope', data }) +} + +// 查询用户拥有的角色数组 +export const listUserRolesApi = (userId: number) => { + return defHttp.get({ url: '/system/permission/list-user-roles?userId=' + userId }) +} + +// 赋予用户角色 +export const aassignUserRoleApi = (data: PermissionAssignUserRoleReqVO) => { + return defHttp.post({ url: '/system/permission/assign-user-role', data }) +} diff --git a/src/api/system/post/index.ts b/src/api/system/post/index.ts new file mode 100644 index 00000000..b541f458 --- /dev/null +++ b/src/api/system/post/index.ts @@ -0,0 +1,58 @@ +import { defHttp } from '@/utils/http/axios' + +export interface PostVO { + id?: number + name: string + code: string + sort: number + status: number + remark: string + createTime?: Date +} + +export interface PostPageReqVO extends PageParam { + code?: string + name?: string + status?: number +} + +export interface PostExportReqVO { + code?: string + name?: string + status?: number +} + +// 查询岗位列表 +export const getPostPageApi = (params: PostPageReqVO) => { + return defHttp.get>({ url: '/system/post/page', params }) +} + +// 获取岗位精简信息列表 +export const listSimplePostsApi = () => { + return defHttp.get({ url: '/system/post/list-all-simple' }) +} + +// 查询岗位详情 +export const getPostApi = (id: number) => { + return defHttp.get({ url: '/system/post/get?id=' + id }) +} + +// 新增岗位 +export const createPostApi = (data: PostVO) => { + return defHttp.post({ url: '/system/post/create', data }) +} + +// 修改岗位 +export const updatePostApi = (data: PostVO) => { + return defHttp.put({ url: '/system/post/update', data }) +} + +// 删除岗位 +export const deletePostApi = (id: number) => { + return defHttp.delete({ url: '/system/post/delete?id=' + id }) +} + +// 导出岗位 +export const exportPostApi = (params: PostExportReqVO) => { + return defHttp.download({ url: '/system/post/export', params }) +} diff --git a/src/api/system/role/index.ts b/src/api/system/role/index.ts new file mode 100644 index 00000000..8d8682b7 --- /dev/null +++ b/src/api/system/role/index.ts @@ -0,0 +1,58 @@ +import { defHttp } from '@/utils/http/axios' + +export interface RoleVO { + id: number + name: string + code: string + sort: number + status: number + type: number + createTime: Date +} + +export interface RolePageReqVO extends PageParam { + name?: string + code?: string + status?: number + createTime?: Date[] +} + +export interface UpdateStatusReqVO { + id: number + status: number +} + +// 查询角色列表 +export const getRolePageApi = (params: RolePageReqVO) => { + return defHttp.get({ url: '/system/role/page', params }) +} + +// 查询角色(精简)列表 +export const listSimpleRolesApi = () => { + return defHttp.get({ url: '/system/role/list-all-simple' }) +} + +// 查询角色详情 +export const getRoleApi = (id: number) => { + return defHttp.get({ url: '/system/role/get?id=' + id }) +} + +// 新增角色 +export const createRoleApi = (data: RoleVO) => { + return defHttp.post({ url: '/system/role/create', data }) +} + +// 修改角色 +export const updateRoleApi = (data: RoleVO) => { + return defHttp.put({ url: '/system/role/update', data }) +} + +// 修改角色状态 +export const updateRoleStatusApi = (data: UpdateStatusReqVO) => { + return defHttp.put({ url: '/system/role/update-status', data }) +} + +// 删除角色 +export const deleteRoleApi = (id: number) => { + return defHttp.delete({ url: '/system/role/delete?id=' + id }) +} diff --git a/src/api/system/sensitiveWord/index.ts b/src/api/system/sensitiveWord/index.ts new file mode 100644 index 00000000..c0df5473 --- /dev/null +++ b/src/api/system/sensitiveWord/index.ts @@ -0,0 +1,64 @@ +import { defHttp } from '@/utils/http/axios' + +export interface SensitiveWordVO { + id: number + name: string + status: number + description: string + tags: string[] + createTime: Date +} + +export interface SensitiveWordPageReqVO extends PageParam { + name?: string + tag?: string + status?: number + createTime?: Date[] +} + +export interface SensitiveWordExportReqVO { + name?: string + tag?: string + status?: number + createTime?: Date[] +} + +// 查询敏感词列表 +export const getSensitiveWordPageApi = (params: SensitiveWordPageReqVO) => { + return defHttp.get({ url: '/system/sensitive-word/page', params }) +} + +// 查询敏感词详情 +export const getSensitiveWordApi = (id: number) => { + return defHttp.get({ url: '/system/sensitive-word/get?id=' + id }) +} + +// 新增敏感词 +export const createSensitiveWordApi = (data: SensitiveWordVO) => { + return defHttp.post({ url: '/system/sensitive-word/create', data }) +} + +// 修改敏感词 +export const updateSensitiveWordApi = (data: SensitiveWordVO) => { + return defHttp.put({ url: '/system/sensitive-word/update', data }) +} + +// 删除敏感词 +export const deleteSensitiveWordApi = (id: number) => { + return defHttp.delete({ url: '/system/sensitive-word/delete?id=' + id }) +} + +// 导出敏感词 +export const exportSensitiveWordApi = (params: SensitiveWordExportReqVO) => { + return defHttp.download({ url: '/system/sensitive-word/export-excel', params }) +} + +// 获取所有敏感词的标签数组 +export const getSensitiveWordTagsApi = () => { + return defHttp.get({ url: '/system/sensitive-word/get-tags' }) +} + +// 获得文本所包含的不合法的敏感词数组 +export const validateTextApi = (id: number) => { + return defHttp.get({ url: '/system/sensitive-word/validate-text?' + id }) +} diff --git a/src/api/system/sms/smsChannel/index.ts b/src/api/system/sms/smsChannel/index.ts new file mode 100644 index 00000000..886740a3 --- /dev/null +++ b/src/api/system/sms/smsChannel/index.ts @@ -0,0 +1,50 @@ +import { defHttp } from '@/utils/http/axios' + +export interface SmsChannelVO { + id: number + code: string + status: number + signature: string + remark: string + apiKey: string + apiSecret: string + callbackUrl: string + createTime: Date +} + +export interface SmsChannelPageReqVO extends PageParam { + signature?: string + code?: string + status?: number + createTime?: Date[] +} + +// 查询短信渠道列表 +export const getSmsChannelPageApi = (params: SmsChannelPageReqVO) => { + return defHttp.get({ url: '/system/sms-channel/page', params }) +} + +// 获得短信渠道精简列表 +export function getSimpleSmsChannels() { + return defHttp.get({ url: '/system/sms-channel/list-all-simple' }) +} + +// 查询短信渠道详情 +export const getSmsChannelApi = (id: number) => { + return defHttp.get({ url: '/system/sms-channel/get?id=' + id }) +} + +// 新增短信渠道 +export const createSmsChannelApi = (data: SmsChannelVO) => { + return defHttp.post({ url: '/system/sms-channel/create', data }) +} + +// 修改短信渠道 +export const updateSmsChannelApi = (data: SmsChannelVO) => { + return defHttp.put({ url: '/system/sms-channel/update', data }) +} + +// 删除短信渠道 +export const deleteSmsChannelApi = (id: number) => { + return defHttp.delete({ url: '/system/sms-channel/delete?id=' + id }) +} diff --git a/src/api/system/sms/smsLog/index.ts b/src/api/system/sms/smsLog/index.ts new file mode 100644 index 00000000..d3a55690 --- /dev/null +++ b/src/api/system/sms/smsLog/index.ts @@ -0,0 +1,57 @@ +import { defHttp } from '@/utils/http/axios' + +export interface SmsLogVO { + id: number + channelId: number + channelCode: string + templateId: number + templateCode: string + templateType: number + templateContent: string + templateParams: Map + mobile: string + userId: number + userType: number + sendStatus: number + sendTime: Date + sendCode: number + sendMsg: string + apiSendCode: string + apiSendMsg: string + apidefHttpId: string + apiSerialNo: string + receiveStatus: number + receiveTime: Date + apiReceiveCode: string + apiReceiveMsg: string + createTime: Date +} + +export interface SmsLogPageReqVO extends PageParam { + channelId?: number + templateId?: number + mobile?: string + sendStatus?: number + sendTime?: Date[] + receiveStatus?: number + receiveTime?: Date[] +} +export interface SmsLogExportReqVO { + channelId?: number + templateId?: number + mobile?: string + sendStatus?: number + sendTime?: Date[] + receiveStatus?: number + receiveTime?: Date[] +} + +// 查询短信日志列表 +export const getSmsLogPageApi = (params: SmsLogPageReqVO) => { + return defHttp.get({ url: '/system/sms-log/page', params }) +} + +// 导出短信日志 +export const exportSmsLogApi = (params: SmsLogExportReqVO) => { + return defHttp.download({ url: '/system/sms-log/export', params }) +} diff --git a/src/api/system/sms/smsTemplate/index.ts b/src/api/system/sms/smsTemplate/index.ts new file mode 100644 index 00000000..ce551ecf --- /dev/null +++ b/src/api/system/sms/smsTemplate/index.ts @@ -0,0 +1,80 @@ +import { defHttp } from '@/utils/http/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 +} + +export interface SmsTemplatePageReqVO { + type?: number + status?: number + code?: string + content?: string + apiTemplateId?: string + channelId?: number + createTime?: Date[] +} + +export interface SmsTemplateExportReqVO { + type?: number + status?: number + code?: string + content?: string + apiTemplateId?: string + channelId?: number + createTime?: Date[] +} + +// 查询短信模板列表 +export const getSmsTemplatePageApi = (params: SmsTemplatePageReqVO) => { + return defHttp.get({ url: '/system/sms-template/page', params }) +} + +// 查询短信模板详情 +export const getSmsTemplateApi = (id: number) => { + return defHttp.get({ url: '/system/sms-template/get?id=' + id }) +} + +// 新增短信模板 +export const createSmsTemplateApi = (data: SmsTemplateVO) => { + return defHttp.post({ url: '/system/sms-template/create', data }) +} + +// 修改短信模板 +export const updateSmsTemplateApi = (data: SmsTemplateVO) => { + return defHttp.put({ url: '/system/sms-template/update', data }) +} + +// 删除短信模板 +export const deleteSmsTemplateApi = (id: number) => { + return defHttp.delete({ url: '/system/sms-template/delete?id=' + id }) +} + +// 发送短信 +export const sendSmsApi = (data: SendSmsReqVO) => { + return defHttp.post({ url: '/system/sms-template/send-sms', data }) +} + +// 导出短信模板 +export const exportPostApi = (params: SmsTemplateExportReqVO) => { + return defHttp.download({ + url: '/system/sms-template/export-excel', + params + }) +} diff --git a/src/api/system/tenant/index.ts b/src/api/system/tenant/index.ts new file mode 100644 index 00000000..c20245bc --- /dev/null +++ b/src/api/system/tenant/index.ts @@ -0,0 +1,62 @@ +import { defHttp } from '@/utils/http/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 getTenantPageApi = (params: TenantPageReqVO) => { + return defHttp.get({ url: '/system/tenant/page', params }) +} + +// 查询租户详情 +export const getTenantApi = (id: number) => { + return defHttp.get({ url: '/system/tenant/get?id=' + id }) +} + +// 新增租户 +export const createTenantApi = (data: TenantVO) => { + return defHttp.post({ url: '/system/tenant/create', data }) +} + +// 修改租户 +export const updateTenantApi = (data: TenantVO) => { + return defHttp.put({ url: '/system/tenant/update', data }) +} + +// 删除租户 +export const deleteTenantApi = (id: number) => { + return defHttp.delete({ url: '/system/tenant/delete?id=' + id }) +} + +// 导出租户 +export const exportTenantApi = (params: TenantExportReqVO) => { + return defHttp.download({ url: '/system/tenant/export-excel', params }) +} diff --git a/src/api/system/tenantPackage/index.ts b/src/api/system/tenantPackage/index.ts new file mode 100644 index 00000000..823d2990 --- /dev/null +++ b/src/api/system/tenantPackage/index.ts @@ -0,0 +1,49 @@ +import { defHttp } from '@/utils/http/axios' + +export interface TenantPackageVO { + id: number + name: string + status: number + remark: string + creator: string + updater: string + updateTime: string + menuIds: number[] + createTime: Date +} + +export interface TenantPackagePageReqVO extends PageParam { + name?: string + status?: number + remark?: string + createTime?: Date[] +} + +// 查询租户套餐列表 +export const getTenantPackageTypePageApi = (params: TenantPackagePageReqVO) => { + return defHttp.get({ url: '/system/tenant-package/page', params }) +} + +// 获得租户 +export const getTenantPackageApi = (id: number) => { + return defHttp.get({ url: '/system/tenant-package/get?id=' + id }) +} + +// 新增租户套餐 +export const createTenantPackageTypeApi = (data: TenantPackageVO) => { + return defHttp.post({ url: '/system/tenant-package/create', data }) +} + +// 修改租户套餐 +export const updateTenantPackageTypeApi = (data: TenantPackageVO) => { + return defHttp.put({ url: '/system/tenant-package/update', data }) +} + +// 删除租户套餐 +export const deleteTenantPackageTypeApi = (id: number) => { + return defHttp.delete({ url: '/system/tenant-package/delete?id=' + id }) +} +// 获取租户套餐精简信息列表 +export const getTenantPackageList = () => { + return defHttp.get({ url: '/system/tenant-package/get-simple-list' }) +} diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts new file mode 100644 index 00000000..8d457eca --- /dev/null +++ b/src/api/system/user/index.ts @@ -0,0 +1,91 @@ +import { defHttp } from '@/utils/http/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 interface UserPageReqVO extends PageParam { + deptId?: number + username?: string + mobile?: string + status?: number + createTime?: Date[] +} + +export interface UserExportReqVO { + code?: string + name?: string + status?: number + createTime?: Date[] +} + +// 查询用户管理列表 +export const getUserPageApi = (params: UserPageReqVO) => { + return defHttp.get({ url: '/system/user/page', params }) +} + +// 查询用户详情 +export const getUserApi = (id: number) => { + return defHttp.get({ url: '/system/user/get?id=' + id }) +} + +// 新增用户 +export const createUserApi = (data: UserVO) => { + return defHttp.post({ url: '/system/user/create', data }) +} + +// 修改用户 +export const updateUserApi = (data: UserVO) => { + return defHttp.put({ url: '/system/user/update', data }) +} + +// 删除用户 +export const deleteUserApi = (id: number) => { + return defHttp.delete({ url: '/system/user/delete?id=' + id }) +} + +// 导出用户 +export const exportUserApi = (params: UserExportReqVO) => { + return defHttp.download({ url: '/system/user/export', params }) +} + +// 下载用户导入模板 +export const importUserTemplateApi = () => { + return defHttp.download({ url: '/system/user/get-import-template' }) +} + +// 用户密码重置 +export const resetUserPwdApi = (id: number, password: string) => { + const data = { + id, + password + } + return defHttp.put({ url: '/system/user/update-password', data: data }) +} + +// 用户状态修改 +export const updateUserStatusApi = (id: number, status: number) => { + const data = { + id, + status + } + return defHttp.put({ url: '/system/user/update-status', data: data }) +} + +// 获取用户精简信息列表 +export const getListSimpleUsersApi = () => { + return defHttp.get({ url: '/system/user/list-all-simple' }) +} diff --git a/src/enums/cacheEnum.ts b/src/enums/cacheEnum.ts index 5c8d8045..6304f3de 100644 --- a/src/enums/cacheEnum.ts +++ b/src/enums/cacheEnum.ts @@ -1,5 +1,9 @@ // token key -export const TOKEN_KEY = 'TOKEN__' +export const ACCESS_TOKEN_KEY = 'ACCESS_TOKEN__' + +export const REFRESH_TOKEN_KEY = 'REFRESH_TOKEN__' + +export const TENANT_ID_KEY = 'TENANT_ID__' export const LOCALE_KEY = 'LOCALE__' @@ -12,6 +16,9 @@ export const ROLES_KEY = 'ROLES__KEY__' // project config key export const PROJ_CFG_KEY = 'PROJ__CFG__KEY__' +// dict info key +export const DICT_KEY = 'DICT__KEY__' + // lock info export const LOCK_INFO_KEY = 'LOCK__INFO__KEY__' diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts index 2905f0f4..859f650c 100644 --- a/src/enums/httpEnum.ts +++ b/src/enums/httpEnum.ts @@ -4,7 +4,9 @@ export enum ResultEnum { SUCCESS = 0, ERROR = -1, - TIMEOUT = 401, + TIMEOUT = 400, + UNAUTHORIZED = 401, + INTERNAL_SERVER_ERROR = 500, TYPE = 'success' } diff --git a/src/enums/roleEnum.ts b/src/enums/roleEnum.ts index a2c60e0c..3a52049f 100644 --- a/src/enums/roleEnum.ts +++ b/src/enums/roleEnum.ts @@ -1,6 +1,6 @@ export enum RoleEnum { // super admin - SUPER = 'super', + SUPER = 'super-admin', // tester TEST = 'test' diff --git a/src/locales/lang/en/action.ts b/src/locales/lang/en/action.ts new file mode 100644 index 00000000..4307a74a --- /dev/null +++ b/src/locales/lang/en/action.ts @@ -0,0 +1,6 @@ +export default { + create: 'Create', + edit: 'Edit', + delete: 'Delete', + detail: 'Detail' +} diff --git a/src/locales/lang/en/common.ts b/src/locales/lang/en/common.ts index 1e6bf895..12c04a29 100644 --- a/src/locales/lang/en/common.ts +++ b/src/locales/lang/en/common.ts @@ -1,14 +1,19 @@ export default { + index: 'Index', + action: 'Action', okText: 'OK', closeText: 'Close', cancelText: 'Cancel', loadingText: 'Loading...', saveText: 'Save', delText: 'Delete', + delSuccessText: 'Delete success', + exportSuccessText: 'Export success', resetText: 'Reset', searchText: 'Search', queryText: 'Search', + allOptionText: 'All', inputText: 'Please enter', chooseText: 'Please choose', diff --git a/src/locales/lang/en/component.ts b/src/locales/lang/en/component.ts index d66bd077..32206d81 100644 --- a/src/locales/lang/en/component.ts +++ b/src/locales/lang/en/component.ts @@ -119,11 +119,11 @@ export default { uploadWait: 'Please wait for the file upload to finish', reUploadFailed: 'Re-upload failed files' }, - verify: { - error: 'verification failed!', - time: 'The verification is successful and it takes {time} seconds!', - redoTip: 'Click the picture to refresh', - dragText: 'Hold down the slider and drag', - successText: 'Verified' + captcha: { + verification: 'Please complete security verification', + slide: 'Swipe right to complete verification', + point: 'Please click', + success: 'Verification succeeded', + fail: 'verification failed' } } diff --git a/src/locales/lang/en/layout.ts b/src/locales/lang/en/layout.ts index 7e44f323..272b6a20 100644 --- a/src/locales/lang/en/layout.ts +++ b/src/locales/lang/en/layout.ts @@ -2,8 +2,9 @@ export default { footer: { onlinePreview: 'Preview', onlineDocument: 'Document' }, header: { // user dropdown + accountCenter: 'Personal Center', dropdownItemDoc: 'Document', - dropdownItemLoginOut: 'Log Out', + dropdownItemLoginOut: 'Login Out', tooltipErrorLog: 'Error log', tooltipLock: 'Lock screen', diff --git a/src/locales/lang/en/profile.ts b/src/locales/lang/en/profile.ts new file mode 100644 index 00000000..877e8094 --- /dev/null +++ b/src/locales/lang/en/profile.ts @@ -0,0 +1,38 @@ +export default { + user: { + title: 'Personal Information', + username: 'User Name', + nickname: 'Nick Name', + mobile: 'Phone Number', + email: 'User Mail', + dept: 'Department', + posts: 'Position', + roles: 'Own Role', + sex: 'Sex', + man: 'Man', + woman: 'Woman', + createTime: 'Created Date' + }, + info: { + title: 'Basic Information', + basicInfo: 'Basic Information', + resetPwd: 'Reset Password', + userSocial: 'Social Information' + }, + rules: { + nickname: 'Please Enter User Nickname', + mail: 'Please Input The Email Address', + truemail: 'Please Input The Correct Email Address', + phone: 'Please Enter The Phone Number', + truephone: 'Please Enter The Correct Phone Number' + }, + password: { + oldPassword: 'Old PassWord', + newPassword: 'New Password', + confirmPassword: 'Confirm Password', + oldPwdMsg: 'Please Enter Old Password', + newPwdMsg: 'Please Enter New Password', + cfPwdMsg: 'Please Enter Confirm Password', + diffPwd: 'The Passwords Entered Twice No Match' + } +} diff --git a/src/locales/lang/en/routes/basic.ts b/src/locales/lang/en/routes/basic.ts index 4ddee59d..0855f9e5 100644 --- a/src/locales/lang/en/routes/basic.ts +++ b/src/locales/lang/en/routes/basic.ts @@ -1,4 +1,5 @@ export default { login: 'Login', - errorLogList: 'Error Log' + errorLogList: 'Error Log', + profile: 'User Center' } diff --git a/src/locales/lang/en/routes/demo.ts b/src/locales/lang/en/routes/demo.ts deleted file mode 100644 index 1bfa97cb..00000000 --- a/src/locales/lang/en/routes/demo.ts +++ /dev/null @@ -1,200 +0,0 @@ -export default { - charts: { - baiduMap: 'Baidu map', - aMap: 'A map', - googleMap: 'Google map', - charts: 'Chart', - map: 'Map', - line: 'Line', - pie: 'Pie' - }, - comp: { - comp: 'Component', - basic: 'Basic', - transition: 'Animation', - countTo: 'Count To', - - scroll: 'Scroll', - scrollBasic: 'Basic', - scrollAction: 'Scroll Function', - virtualScroll: 'Virtual Scroll', - - tree: 'Tree', - - treeBasic: 'Basic', - editTree: 'Searchable/toolbar', - actionTree: 'Function operation', - - modal: 'Modal', - drawer: 'Drawer', - desc: 'Desc', - - lazy: 'Lazy', - lazyBasic: 'Basic', - lazyTransition: 'Animation', - - verify: 'Verify', - verifyDrag: 'Drag ', - verifyRotate: 'Picture Restore', - - qrcode: 'QR code', - strength: 'Password strength', - upload: 'Upload', - - loading: 'Loading', - - cropperImage: 'Cropper Image', - cardList: 'Card List' - }, - editor: { - editor: 'Editor', - jsonEditor: 'Json editor', - markdown: 'Markdown editor', - - tinymce: 'Rich text', - tinymceBasic: 'Basic', - tinymceForm: 'embedded form' - }, - excel: { - excel: 'Excel', - customExport: 'Select export format', - jsonExport: 'JSON data export', - arrayExport: 'Array data export', - importExcel: 'Import' - }, - feat: { - feat: 'Page Function', - icon: 'Icon', - tabs: 'Tabs', - tabDetail: 'Tab Detail', - sessionTimeout: 'Session Timeout', - print: 'Print', - contextMenu: 'Context Menu', - download: 'Download', - imgPreview: 'Picture Preview', - copy: 'Clipboard', - msg: 'Message prompt', - watermark: 'Watermark', - ripple: 'Ripple', - fullScreen: 'Full Screen', - errorLog: 'Error Log', - tab: 'Tab with parameters', - tab1: 'Tab with parameter 1', - tab2: 'Tab with parameter 2', - menu: 'Menu with parameters', - menu1: 'Menu with parameters 1', - menu2: 'Menu with parameters 2', - - ws: 'Websocket test', - - breadcrumb: 'Breadcrumbs', - breadcrumbFlat: 'Flat Mode', - breadcrumbFlatDetail: 'Flat mode details', - requestDemo: 'Retry request demo', - - breadcrumbChildren: 'Level mode', - breadcrumbChildrenDetail: 'Level mode detail' - }, - flow: { - name: 'Graphics editor', - flowChart: 'FlowChart' - }, - form: { - form: 'Form', - basic: 'Basic', - useForm: 'useForm', - refForm: 'RefForm', - advancedForm: 'Shrinkable', - ruleForm: 'Form validation', - dynamicForm: 'Dynamic', - customerForm: 'Custom', - appendForm: 'Append', - tabsForm: 'TabsForm' - }, - iframe: { - frame: 'External', - antv: 'antVue doc (embedded)', - doc: 'Project doc (embedded)', - docExternal: 'Project doc (external)' - }, - level: { level: 'MultiMenu' }, - page: { - page: 'Page', - - form: 'Form', - formBasic: 'Basic Form', - formStep: 'Step Form', - formHigh: 'Advanced Form', - - desc: 'Details', - descBasic: 'Basic Details', - descHigh: 'Advanced Details', - - result: 'Result', - resultSuccess: 'Success', - resultFail: 'Failed', - - account: 'Personal', - accountCenter: 'Personal Center', - accountSetting: 'Personal Settings', - - exception: 'Exception', - netWorkError: 'Network Error', - notData: 'No data', - - list: 'List page', - listCard: 'Card list', - basic: 'Basic list', - listBasic: 'Basic list', - listSearch: 'Search list' - }, - permission: { - permission: 'Permission', - - front: 'front-end', - frontPage: 'Page', - frontBtn: 'Button', - frontTestA: 'Test page A', - frontTestB: 'Test page B', - - back: 'background', - backPage: 'Page', - backBtn: 'Button' - }, - setup: { - page: 'Intro page' - }, - system: { - moduleName: 'System management', - - account: 'Account management', - account_detail: 'Account detail', - password: 'Change password', - - dept: 'Department management', - - menu: 'Menu management', - role: 'Role management' - }, - table: { - table: 'Table', - - basic: 'Basic', - treeTable: 'Tree', - fetchTable: 'Remote loading', - fixedColumn: 'Fixed column', - customerCell: 'Custom column', - formTable: 'Open search', - useTable: 'UseTable', - refTable: 'RefTable', - multipleHeader: 'MultiLevel header', - mergeHeader: 'Merge cells', - expandTable: 'Expandable table', - fixedHeight: 'Fixed height', - footerTable: 'Footer', - editCellTable: 'Editable cell', - editRowTable: 'Editable row', - authColumn: 'Auth column', - resizeParentHeightTable: 'resizeParentHeightTable' - } -} diff --git a/src/locales/lang/en/sys.ts b/src/locales/lang/en/sys.ts index c6835049..d3739c72 100644 --- a/src/locales/lang/en/sys.ts +++ b/src/locales/lang/en/sys.ts @@ -1,7 +1,7 @@ export default { api: { - operationSuccess: 'Operation Success', operationFailed: 'Operation failed', + operationSuccess: 'Operation success', errorTip: 'Error Tip', successTip: 'Success Tip', errorMessage: 'The operation failed, the system is abnormal!', @@ -94,6 +94,7 @@ export default { policyPlaceholder: 'Register after checking', diffPwd: 'The two passwords are inconsistent', + tenantName: 'TenantName', userName: 'Username', password: 'Password', confirmPassword: 'Confirm Password', diff --git a/src/locales/lang/zh-CN/action.ts b/src/locales/lang/zh-CN/action.ts new file mode 100644 index 00000000..a895f4c1 --- /dev/null +++ b/src/locales/lang/zh-CN/action.ts @@ -0,0 +1,6 @@ +export default { + create: '新增', + edit: '修改', + delete: '删除', + detail: '详情' +} diff --git a/src/locales/lang/zh-CN/common.ts b/src/locales/lang/zh-CN/common.ts index 17e36b2f..f85de400 100644 --- a/src/locales/lang/zh-CN/common.ts +++ b/src/locales/lang/zh-CN/common.ts @@ -1,14 +1,19 @@ export default { + index: '序号', + action: '操作', okText: '确认', closeText: '关闭', cancelText: '取消', loadingText: '加载中...', saveText: '保存', delText: '删除', + delSuccessText: '删除成功', + exportSuccessText: '导出成功', resetText: '重置', searchText: '搜索', queryText: '查询', + allOptionText: '全部', inputText: '请输入', chooseText: '请选择', diff --git a/src/locales/lang/zh-CN/component.ts b/src/locales/lang/zh-CN/component.ts index c58b4f60..11fc2fef 100644 --- a/src/locales/lang/zh-CN/component.ts +++ b/src/locales/lang/zh-CN/component.ts @@ -122,13 +122,11 @@ export default { uploadWait: '请等待文件上传结束后操作', reUploadFailed: '重新上传失败文件' }, - verify: { - error: '验证失败!', - time: '验证校验成功,耗时{time}秒!', - - redoTip: '点击图片可刷新', - - dragText: '请按住滑块拖动', - successText: '验证通过' + captcha: { + verification: '请完成安全验证', + slide: '向右滑动完成验证', + point: '请依次点击', + success: '验证成功', + fail: '验证失败' } } diff --git a/src/locales/lang/zh-CN/layout.ts b/src/locales/lang/zh-CN/layout.ts index fa7770ad..2fc7d62a 100644 --- a/src/locales/lang/zh-CN/layout.ts +++ b/src/locales/lang/zh-CN/layout.ts @@ -2,6 +2,7 @@ export default { footer: { onlinePreview: '在线预览', onlineDocument: '在线文档' }, header: { // user dropdown + accountCenter: '个人中心', dropdownItemDoc: '文档', dropdownItemLoginOut: '退出系统', diff --git a/src/locales/lang/zh-CN/profile.ts b/src/locales/lang/zh-CN/profile.ts new file mode 100644 index 00000000..9973d027 --- /dev/null +++ b/src/locales/lang/zh-CN/profile.ts @@ -0,0 +1,39 @@ +export default { + user: { + title: '个人信息', + username: '用户名称', + nickname: '用户昵称', + mobile: '手机号码', + email: '用户邮箱', + dept: '所属部门', + posts: '所属岗位', + roles: '所属角色', + sex: '性别', + man: '男', + woman: '女', + createTime: '创建日期' + }, + info: { + title: '基本信息', + basicInfo: '基本资料', + resetPwd: '修改密码', + userSocial: '社交信息' + }, + rules: { + nickname: '请输入用户昵称', + mail: '请输入邮箱地址', + truemail: '请输入正确的邮箱地址', + phone: '请输入正确的手机号码', + truephone: '请输入正确的手机号码' + }, + password: { + oldPassword: '旧密码', + newPassword: '新密码', + confirmPassword: '确认密码', + oldPwdMsg: '请输入旧密码', + newPwdMsg: '请输入新密码', + cfPwdMsg: '请输入确认密码', + pwdRules: '长度在 6 到 20 个字符', + diffPwd: '两次输入密码不一致' + } +} diff --git a/src/locales/lang/zh-CN/routes/basic.ts b/src/locales/lang/zh-CN/routes/basic.ts index fe7a18dc..5e1e509a 100644 --- a/src/locales/lang/zh-CN/routes/basic.ts +++ b/src/locales/lang/zh-CN/routes/basic.ts @@ -1,4 +1,5 @@ export default { login: '登录', - errorLogList: '错误日志列表' + errorLogList: '错误日志列表', + profile: '个人中心' } diff --git a/src/locales/lang/zh-CN/routes/demo.ts b/src/locales/lang/zh-CN/routes/demo.ts deleted file mode 100644 index 45fe2161..00000000 --- a/src/locales/lang/zh-CN/routes/demo.ts +++ /dev/null @@ -1,191 +0,0 @@ -export default { - charts: { - baiduMap: '百度地图', - aMap: '高德地图', - googleMap: '谷歌地图', - charts: '图表', - map: '地图', - line: '折线图', - pie: '饼图' - }, - comp: { - comp: '组件', - basic: '基础组件', - transition: '动画组件', - countTo: '数字动画', - - scroll: '滚动组件', - scrollBasic: '基础滚动', - scrollAction: '滚动函数', - virtualScroll: '虚拟滚动', - - tree: 'Tree', - treeBasic: '基础树', - editTree: '可搜索/工具栏', - actionTree: '函数操作示例', - - modal: '弹窗扩展', - drawer: '抽屉扩展', - desc: '详情组件', - - lazy: '懒加载组件', - lazyBasic: '基础示例', - lazyTransition: '动画效果', - - verify: '验证组件', - verifyDrag: '拖拽校验', - verifyRotate: '图片还原', - - qrcode: '二维码组件', - strength: '密码强度组件', - upload: '上传组件', - - loading: 'Loading', - - cropperImage: '图片裁剪', - cardList: '卡片列表' - }, - editor: { - editor: '编辑器', - jsonEditor: 'Json编辑器', - markdown: 'markdown编辑器', - - tinymce: '富文本', - tinymceBasic: '基础使用', - tinymceForm: '嵌入form' - }, - excel: { - excel: 'Excel', - customExport: '选择导出格式', - jsonExport: 'JSON数据导出', - arrayExport: 'Array数据导出', - importExcel: '导入' - }, - feat: { - feat: '功能', - icon: '图标', - sessionTimeout: '登录过期', - tabs: '标签页操作', - tabDetail: '标签详情页', - print: '打印', - contextMenu: '右键菜单', - download: '文件下载', - imgPreview: '图片预览', - copy: '剪切板', - msg: '消息提示', - watermark: '水印', - ripple: '水波纹', - fullScreen: '全屏', - errorLog: '错误日志', - tab: 'Tab带参', - tab1: 'Tab带参1', - tab2: 'Tab带参2', - menu: 'Menu带参', - menu1: 'Menu带参1', - menu2: 'Menu带参2', - ws: 'websocket测试', - breadcrumb: '面包屑导航', - breadcrumbFlat: '平级模式', - requestDemo: '测试请求重试', - breadcrumbFlatDetail: '平级详情', - breadcrumbChildren: '层级模式', - breadcrumbChildrenDetail: '层级详情' - }, - flow: { - name: '图形编辑器', - flowChart: '流程图' - }, - form: { - form: 'Form', - basic: '基础表单', - useForm: 'useForm', - refForm: 'RefForm', - advancedForm: '可收缩表单', - ruleForm: '表单验证', - dynamicForm: '动态表单', - customerForm: '自定义组件', - appendForm: '表单增删示例', - tabsForm: '标签页+多级field' - }, - iframe: { - frame: '外部页面', - antv: 'antVue文档(内嵌)', - doc: '项目文档(内嵌)', - docExternal: '项目文档(外链)' - }, - level: { level: '多级菜单' }, - page: { - page: '页面', - - form: '表单页', - formBasic: '基础表单', - formStep: '分步表单', - formHigh: '高级表单', - - desc: '详情页', - descBasic: '基础详情页', - descHigh: '高级详情页', - - result: '结果页', - resultSuccess: '成功页', - resultFail: '失败页', - - account: '个人页', - accountCenter: '个人中心', - accountSetting: '个人设置', - - exception: '异常页', - netWorkError: '网络错误', - notData: '无数据', - - list: '列表页', - listCard: '卡片列表', - listBasic: '标准列表', - listSearch: '搜索列表' - }, - permission: { - permission: '权限管理', - - front: '基于前端权限', - frontPage: '页面权限', - frontBtn: '按钮权限', - frontTestA: '权限测试页A', - frontTestB: '权限测试页B', - - back: '基于后台权限', - backPage: '页面权限', - backBtn: '按钮权限' - }, - setup: { - page: '引导页' - }, - system: { - moduleName: '系统管理', - account: '账号管理', - account_detail: '账号详情', - password: '修改密码', - dept: '部门管理', - menu: '菜单管理', - role: '角色管理' - }, - table: { - table: 'Table', - basic: '基础表格', - treeTable: '树形表格', - fetchTable: '远程加载示例', - fixedColumn: '固定列', - customerCell: '自定义列', - formTable: '开启搜索区域', - useTable: 'UseTable', - refTable: 'RefTable', - multipleHeader: '多级表头', - mergeHeader: '合并单元格', - expandTable: '可展开表格', - fixedHeight: '定高/头部自定义', - footerTable: '表尾行合计', - editCellTable: '可编辑单元格', - editRowTable: '可编辑行', - authColumn: '权限列', - resizeParentHeightTable: '继承父元素高度' - } -} diff --git a/src/locales/lang/zh-CN/sys.ts b/src/locales/lang/zh-CN/sys.ts index a544de6d..111a321a 100644 --- a/src/locales/lang/zh-CN/sys.ts +++ b/src/locales/lang/zh-CN/sys.ts @@ -1,7 +1,7 @@ export default { api: { - operationSuccess: '操作成功', operationFailed: '操作失败', + operationSuccess: '操作成功', errorTip: '错误提示', successTip: '成功提示', errorMessage: '操作失败,系统异常!', @@ -90,6 +90,7 @@ export default { policyPlaceholder: '勾选后才能注册', diffPwd: '两次输入密码不一致', + tenantName: '租户', userName: '账号', password: '密码', confirmPassword: '确认密码', diff --git a/src/router/constant.ts b/src/router/constant.ts index 75d1eda5..dcc3e908 100644 --- a/src/router/constant.ts +++ b/src/router/constant.ts @@ -4,7 +4,7 @@ export const PARENT_LAYOUT_NAME = 'ParentLayout' export const PAGE_NOT_FOUND_NAME = 'PageNotFound' -export const EXCEPTION_COMPONENT = () => import('@/views/sys/exception/Exception.vue') +export const EXCEPTION_COMPONENT = () => import('@/views/base/exception/Exception.vue') /** * @description: default layout diff --git a/src/router/helper/routeHelper.ts b/src/router/helper/routeHelper.ts index b42b75a0..05cbb3b0 100644 --- a/src/router/helper/routeHelper.ts +++ b/src/router/helper/routeHelper.ts @@ -7,7 +7,7 @@ import { warn } from '@/utils/log' import { createRouter, createWebHashHistory } from 'vue-router' export type LayoutMapKey = 'LAYOUT' -const IFRAME = () => import('@/views/sys/iframe/FrameBlank.vue') +const IFRAME = () => import('@/views/base/iframe/FrameBlank.vue') const LayoutMap = new Map Promise>() @@ -36,6 +36,10 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) { } else if (name) { item.component = getParentLayout() } + const meta = item.meta || {} + meta.title = item.name + meta.icon = item.icon + item.meta = meta children && asyncImportRoute(children) }) } @@ -69,18 +73,29 @@ function dynamicImport(dynamicViewsModules: Record Promise(routeList: AppRouteModule[]): T[] { routeList.forEach((route) => { + if (route.children && route.parentId == 0) { + route.component = 'LAYOUT' + } else if (!route.children) { + route.component = route.component as string + } const component = route.component as string if (component) { if (component.toUpperCase() === 'LAYOUT') { - route.component = LayoutMap.get(component.toUpperCase()) + route.component = LayoutMap.get('LAYOUT'.toUpperCase()) + const meta = route.meta || {} + meta.title = route.name + meta.icon = route.icon + route.meta = meta } else { + //处理顶级非目录路由 + const meta = route.meta || {} + meta.title = route.name + meta.icon = route.icon + meta.single = true route.children = [cloneDeep(route)] route.component = LAYOUT route.name = `${route.name}Parent` route.path = '' - const meta = route.meta || {} - meta.single = true - meta.affix = false route.meta = meta } } else { diff --git a/src/router/menus/index.ts b/src/router/menus/index.ts index 11e73787..9fedd184 100644 --- a/src/router/menus/index.ts +++ b/src/router/menus/index.ts @@ -10,7 +10,7 @@ import { router } from '@/router' import { PermissionModeEnum } from '@/enums/appEnum' import { pathToRegexp } from 'path-to-regexp' -const modules = import.meta.globEager('./modules/**/*.ts') +const modules = import.meta.glob('./modules/**/*.ts', { eager: true }) const menuModules: MenuModule[] = [] diff --git a/src/router/routes/basic.ts b/src/router/routes/basic.ts index 9c351586..3a9614c0 100644 --- a/src/router/routes/basic.ts +++ b/src/router/routes/basic.ts @@ -1,5 +1,4 @@ import type { AppRouteRecordRaw } from '@/router/types' -import { t } from '@/hooks/web/useI18n' import { REDIRECT_NAME, LAYOUT, EXCEPTION_COMPONENT, PAGE_NOT_FOUND_NAME } from '@/router/constant' // 404 on a page @@ -39,7 +38,7 @@ export const REDIRECT_ROUTE: AppRouteRecordRaw = { { path: '/redirect/:path(.*)', name: REDIRECT_NAME, - component: () => import('@/views/sys/redirect/index.vue'), + component: () => import('@/views/base/redirect/index.vue'), meta: { title: REDIRECT_NAME, hideBreadcrumb: true @@ -47,27 +46,3 @@ export const REDIRECT_ROUTE: AppRouteRecordRaw = { } ] } - -export const ERROR_LOG_ROUTE: AppRouteRecordRaw = { - path: '/error-log', - name: 'ErrorLog', - component: LAYOUT, - redirect: '/error-log/list', - meta: { - title: 'ErrorLog', - hideBreadcrumb: true, - hideChildrenInMenu: true - }, - children: [ - { - path: 'list', - name: 'ErrorLogList', - component: () => import('@/views/sys/error-log/index.vue'), - meta: { - title: t('routes.basic.errorLogList'), - hideBreadcrumb: true, - currentActiveMenu: '/error-log' - } - } - ] -} diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 894cbbed..85e31850 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -2,12 +2,12 @@ import type { AppRouteRecordRaw, AppRouteModule } from '@/router/types' import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '@/router/routes/basic' -import { mainOutRoutes } from './mainOut' import { PageEnum } from '@/enums/pageEnum' import { t } from '@/hooks/web/useI18n' +import { LAYOUT } from '@/router/constant' -// import.meta.globEager() 直接引入所有的模块 Vite 独有的功能 -const modules = import.meta.globEager('./modules/**/*.ts') +// import.meta.glob() 直接引入所有的模块 Vite 独有的功能 +const modules = import.meta.glob('./modules/**/*.ts', { eager: true }) const routeModuleList: AppRouteModule[] = [] // 加入到路由集合中 @@ -32,12 +32,36 @@ export const RootRoute: AppRouteRecordRaw = { export const LoginRoute: AppRouteRecordRaw = { path: '/login', name: 'Login', - component: () => import('@/views/sys/login/Login.vue'), + component: () => import('@/views/base/login/Login.vue'), meta: { title: t('routes.basic.login') } } +export const ProfileRoute: AppRouteRecordRaw = { + path: '/profile', + component: LAYOUT, + name: 'Profile', + meta: { + title: t('routes.basic.profile'), + hidden: true + }, + children: [ + { + path: 'index', + component: () => import('@/views/base/profile/index.vue'), + name: 'UserProfile', + meta: { + canTo: true, + hidden: true, + noTagsView: false, + icon: 'ep:user', + title: t('routes.basic.profile') + } + } + ] +} + // Basic routing without permission // 未经许可的基本路由 -export const basicRoutes = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE] +export const basicRoutes = [LoginRoute, RootRoute, ProfileRoute, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE] diff --git a/src/router/routes/mainOut.ts b/src/router/routes/mainOut.ts deleted file mode 100644 index 4991b1b2..00000000 --- a/src/router/routes/mainOut.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** -The routing of this file will not show the layout. -It is an independent new page. -the contents of the file still need to log in to access - */ -import type { AppRouteModule } from '@/router/types' - -// test -// http:ip:port/main-out -export const mainOutRoutes: AppRouteModule[] = [ - { - path: '/main-out', - name: 'MainOut', - component: () => import('@/views/demo/main-out/index.vue'), - meta: { - title: 'MainOut', - ignoreAuth: true - } - } -] - -export const mainOutRouteNames = mainOutRoutes.map((item) => item.name) diff --git a/src/router/routes/modules/about.ts b/src/router/routes/modules/about.ts index c9a1015a..efc1721f 100644 --- a/src/router/routes/modules/about.ts +++ b/src/router/routes/modules/about.ts @@ -18,7 +18,7 @@ const about: AppRouteModule = { { path: 'index', name: 'AboutPage', - component: () => import('@/views/sys/about/index.vue'), + component: () => import('@/views/base/about/index.vue'), meta: { title: t('routes.dashboard.about'), icon: 'simple-icons:about-dot-me', diff --git a/src/router/routes/modules/dashboard.ts b/src/router/routes/modules/dashboard.ts index aeaccf9a..070e2eaa 100644 --- a/src/router/routes/modules/dashboard.ts +++ b/src/router/routes/modules/dashboard.ts @@ -7,6 +7,7 @@ const dashboard: AppRouteModule = { path: '/dashboard', name: 'Dashboard', component: LAYOUT, + parentId: 0, redirect: '/dashboard/analysis', meta: { orderNo: 10, diff --git a/src/router/routes/modules/demo/charts.ts b/src/router/routes/modules/demo/charts.ts deleted file mode 100644 index 576571e0..00000000 --- a/src/router/routes/modules/demo/charts.ts +++ /dev/null @@ -1,80 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const charts: AppRouteModule = { - path: '/charts', - name: 'Charts', - component: LAYOUT, - redirect: '/charts/echarts/map', - meta: { - orderNo: 500, - icon: 'ion:bar-chart-outline', - title: t('routes.demo.charts.charts') - }, - children: [ - { - path: 'baiduMap', - name: 'BaiduMap', - meta: { - title: t('routes.demo.charts.baiduMap') - }, - component: () => import('@/views/demo/charts/map/Baidu.vue') - }, - { - path: 'aMap', - name: 'AMap', - meta: { - title: t('routes.demo.charts.aMap') - }, - component: () => import('@/views/demo/charts/map/Gaode.vue') - }, - { - path: 'googleMap', - name: 'GoogleMap', - meta: { - title: t('routes.demo.charts.googleMap') - }, - component: () => import('@/views/demo/charts/map/Google.vue') - }, - - { - path: 'echarts', - name: 'Echarts', - component: getParentLayout('Echarts'), - meta: { - title: 'Echarts' - }, - redirect: '/charts/echarts/map', - children: [ - { - path: 'map', - name: 'Map', - component: () => import('@/views/demo/charts/Map.vue'), - meta: { - title: t('routes.demo.charts.map') - } - }, - { - path: 'line', - name: 'Line', - component: () => import('@/views/demo/charts/Line.vue'), - meta: { - title: t('routes.demo.charts.line') - } - }, - { - path: 'pie', - name: 'Pie', - component: () => import('@/views/demo/charts/Pie.vue'), - meta: { - title: t('routes.demo.charts.pie') - } - } - ] - } - ] -} - -export default charts diff --git a/src/router/routes/modules/demo/comp.ts b/src/router/routes/modules/demo/comp.ts deleted file mode 100644 index 160478f1..00000000 --- a/src/router/routes/modules/demo/comp.ts +++ /dev/null @@ -1,555 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const comp: AppRouteModule = { - path: '/comp', - name: 'Comp', - component: LAYOUT, - redirect: '/comp/basic', - meta: { - orderNo: 30, - icon: 'ion:layers-outline', - title: t('routes.demo.comp.comp') - }, - - children: [ - { - path: 'basic', - name: 'BasicDemo', - component: () => import('@/views/demo/comp/button/index.vue'), - meta: { - title: t('routes.demo.comp.basic') - } - }, - - { - path: 'form', - name: 'FormDemo', - redirect: '/comp/form/basic', - component: getParentLayout('FormDemo'), - meta: { - // icon: 'mdi:form-select', - title: t('routes.demo.form.form') - }, - children: [ - { - path: 'basic', - name: 'FormBasicDemo', - component: () => import('@/views/demo/form/index.vue'), - meta: { - title: t('routes.demo.form.basic') - } - }, - { - path: 'useForm', - name: 'UseFormDemo', - component: () => import('@/views/demo/form/UseForm.vue'), - meta: { - title: t('routes.demo.form.useForm') - } - }, - { - path: 'refForm', - name: 'RefFormDemo', - component: () => import('@/views/demo/form/RefForm.vue'), - meta: { - title: t('routes.demo.form.refForm') - } - }, - { - path: 'advancedForm', - name: 'AdvancedFormDemo', - component: () => import('@/views/demo/form/AdvancedForm.vue'), - meta: { - title: t('routes.demo.form.advancedForm') - } - }, - { - path: 'ruleForm', - name: 'RuleFormDemo', - component: () => import('@/views/demo/form/RuleForm.vue'), - meta: { - title: t('routes.demo.form.ruleForm') - } - }, - { - path: 'dynamicForm', - name: 'DynamicFormDemo', - component: () => import('@/views/demo/form/DynamicForm.vue'), - meta: { - title: t('routes.demo.form.dynamicForm') - } - }, - { - path: 'customerForm', - name: 'CustomerFormDemo', - component: () => import('@/views/demo/form/CustomerForm.vue'), - meta: { - title: t('routes.demo.form.customerForm') - } - }, - { - path: 'appendForm', - name: 'appendFormDemo', - component: () => import('@/views/demo/form/AppendForm.vue'), - meta: { - title: t('routes.demo.form.appendForm') - } - }, - { - path: 'tabsForm', - name: 'tabsFormDemo', - component: () => import('@/views/demo/form/TabsForm.vue'), - meta: { - title: t('routes.demo.form.tabsForm') - } - } - ] - }, - { - path: 'table', - name: 'TableDemo', - redirect: '/comp/table/basic', - component: getParentLayout('TableDemo'), - meta: { - // icon: 'carbon:table-split', - title: t('routes.demo.table.table') - }, - - children: [ - { - path: 'basic', - name: 'TableBasicDemo', - component: () => import('@/views/demo/table/Basic.vue'), - meta: { - title: t('routes.demo.table.basic') - } - }, - { - path: 'treeTable', - name: 'TreeTableDemo', - component: () => import('@/views/demo/table/TreeTable.vue'), - meta: { - title: t('routes.demo.table.treeTable') - } - }, - { - path: 'fetchTable', - name: 'FetchTableDemo', - component: () => import('@/views/demo/table/FetchTable.vue'), - meta: { - title: t('routes.demo.table.fetchTable') - } - }, - { - path: 'fixedColumn', - name: 'FixedColumnDemo', - component: () => import('@/views/demo/table/FixedColumn.vue'), - meta: { - title: t('routes.demo.table.fixedColumn') - } - }, - { - path: 'customerCell', - name: 'CustomerCellDemo', - component: () => import('@/views/demo/table/CustomerCell.vue'), - meta: { - title: t('routes.demo.table.customerCell') - } - }, - { - path: 'formTable', - name: 'FormTableDemo', - component: () => import('@/views/demo/table/FormTable.vue'), - meta: { - title: t('routes.demo.table.formTable') - } - }, - { - path: 'useTable', - name: 'UseTableDemo', - component: () => import('@/views/demo/table/UseTable.vue'), - meta: { - title: t('routes.demo.table.useTable') - } - }, - { - path: 'refTable', - name: 'RefTableDemo', - component: () => import('@/views/demo/table/RefTable.vue'), - meta: { - title: t('routes.demo.table.refTable') - } - }, - { - path: 'multipleHeader', - name: 'MultipleHeaderDemo', - component: () => import('@/views/demo/table/MultipleHeader.vue'), - meta: { - title: t('routes.demo.table.multipleHeader') - } - }, - { - path: 'mergeHeader', - name: 'MergeHeaderDemo', - component: () => import('@/views/demo/table/MergeHeader.vue'), - meta: { - title: t('routes.demo.table.mergeHeader') - } - }, - { - path: 'expandTable', - name: 'ExpandTableDemo', - component: () => import('@/views/demo/table/ExpandTable.vue'), - meta: { - title: t('routes.demo.table.expandTable') - } - }, - { - path: 'fixedHeight', - name: 'FixedHeightDemo', - component: () => import('@/views/demo/table/FixedHeight.vue'), - meta: { - title: t('routes.demo.table.fixedHeight') - } - }, - { - path: 'footerTable', - name: 'FooterTableDemo', - component: () => import('@/views/demo/table/FooterTable.vue'), - meta: { - title: t('routes.demo.table.footerTable') - } - }, - { - path: 'editCellTable', - name: 'EditCellTableDemo', - component: () => import('@/views/demo/table/EditCellTable.vue'), - meta: { - title: t('routes.demo.table.editCellTable') - } - }, - { - path: 'editRowTable', - name: 'EditRowTableDemo', - component: () => import('@/views/demo/table/EditRowTable.vue'), - meta: { - title: t('routes.demo.table.editRowTable') - } - }, - { - path: 'authColumn', - name: 'AuthColumnDemo', - component: () => import('@/views/demo/table/AuthColumn.vue'), - meta: { - title: t('routes.demo.table.authColumn') - } - }, - { - path: 'resizeParentHeightTable', - name: 'ResizeParentHeightTable', - component: () => import('@/views/demo/table/ResizeParentHeightTable.vue'), - meta: { - title: t('routes.demo.table.resizeParentHeightTable') - } - } - ] - }, - { - path: 'transition', - name: 'transitionDemo', - component: () => import('@/views/demo/comp/transition/index.vue'), - meta: { - title: t('routes.demo.comp.transition') - } - }, - { - path: 'cropper', - name: 'CropperDemo', - component: () => import('@/views/demo/comp/cropper/index.vue'), - meta: { - title: t('routes.demo.comp.cropperImage') - } - }, - { - path: 'countTo', - name: 'CountTo', - component: () => import('@/views/demo/comp/count-to/index.vue'), - meta: { - title: t('routes.demo.comp.countTo') - } - }, - { - path: 'tree', - name: 'TreeDemo', - redirect: '/comp/tree/basic', - component: getParentLayout('TreeDemo'), - meta: { - // icon: 'clarity:tree-view-line', - title: t('routes.demo.comp.tree') - }, - children: [ - { - path: 'basic', - name: 'BasicTreeDemo', - component: () => import('@/views/demo/tree/index.vue'), - meta: { - title: t('routes.demo.comp.treeBasic') - } - }, - { - path: 'editTree', - name: 'EditTreeDemo', - component: () => import('@/views/demo/tree/EditTree.vue'), - meta: { - title: t('routes.demo.comp.editTree') - } - }, - { - path: 'actionTree', - name: 'ActionTreeDemo', - component: () => import('@/views/demo/tree/ActionTree.vue'), - meta: { - title: t('routes.demo.comp.actionTree') - } - } - ] - }, - { - path: 'editor', - name: 'EditorDemo', - redirect: '/comp/editor/markdown', - component: getParentLayout('EditorDemo'), - meta: { - // icon: 'carbon:table-split', - title: t('routes.demo.editor.editor') - }, - children: [ - { - path: 'json', - component: () => import('@/views/demo/editor/json/index.vue'), - name: 'JsonEditorDemo', - meta: { - title: t('routes.demo.editor.jsonEditor') - } - }, - { - path: 'markdown', - component: getParentLayout('MarkdownDemo'), - name: 'MarkdownDemo', - meta: { - title: t('routes.demo.editor.markdown') - }, - redirect: '/comp/editor/markdown/index', - children: [ - { - path: 'index', - name: 'MarkDownBasicDemo', - component: () => import('@/views/demo/editor/markdown/index.vue'), - meta: { - title: t('routes.demo.editor.tinymceBasic') - } - }, - { - path: 'editor', - name: 'MarkDownFormDemo', - component: () => import('@/views/demo/editor/markdown/Editor.vue'), - meta: { - title: t('routes.demo.editor.tinymceForm') - } - } - ] - }, - - { - path: 'tinymce', - component: getParentLayout('TinymceDemo'), - name: 'TinymceDemo', - meta: { - title: t('routes.demo.editor.tinymce') - }, - redirect: '/comp/editor/tinymce/index', - children: [ - { - path: 'index', - name: 'TinymceBasicDemo', - component: () => import('@/views/demo/editor/tinymce/index.vue'), - meta: { - title: t('routes.demo.editor.tinymceBasic') - } - }, - { - path: 'editor', - name: 'TinymceFormDemo', - component: () => import('@/views/demo/editor/tinymce/Editor.vue'), - meta: { - title: t('routes.demo.editor.tinymceForm') - } - } - ] - } - ] - }, - { - path: 'scroll', - name: 'ScrollDemo', - redirect: '/comp/scroll/basic', - component: getParentLayout('ScrollDemo'), - meta: { - title: t('routes.demo.comp.scroll') - }, - children: [ - { - path: 'basic', - name: 'BasicScrollDemo', - component: () => import('@/views/demo/comp/scroll/index.vue'), - meta: { - title: t('routes.demo.comp.scrollBasic') - } - }, - { - path: 'action', - name: 'ActionScrollDemo', - component: () => import('@/views/demo/comp/scroll/Action.vue'), - meta: { - title: t('routes.demo.comp.scrollAction') - } - }, - { - path: 'virtualScroll', - name: 'VirtualScrollDemo', - component: () => import('@/views/demo/comp/scroll/VirtualScroll.vue'), - meta: { - title: t('routes.demo.comp.virtualScroll') - } - } - ] - }, - - { - path: 'modal', - name: 'ModalDemo', - component: () => import('@/views/demo/comp/modal/index.vue'), - meta: { - title: t('routes.demo.comp.modal') - } - }, - { - path: 'drawer', - name: 'DrawerDemo', - component: () => import('@/views/demo/comp/drawer/index.vue'), - meta: { - title: t('routes.demo.comp.drawer') - } - }, - { - path: 'desc', - name: 'DescDemo', - component: () => import('@/views/demo/comp/desc/index.vue'), - meta: { - title: t('routes.demo.comp.desc') - } - }, - - { - path: 'lazy', - name: 'LazyDemo', - component: getParentLayout('LazyDemo'), - redirect: '/comp/lazy/basic', - meta: { - title: t('routes.demo.comp.lazy') - }, - children: [ - { - path: 'basic', - name: 'BasicLazyDemo', - component: () => import('@/views/demo/comp/lazy/index.vue'), - meta: { - title: t('routes.demo.comp.lazyBasic') - } - }, - { - path: 'transition', - name: 'BasicTransitionDemo', - component: () => import('@/views/demo/comp/lazy/Transition.vue'), - meta: { - title: t('routes.demo.comp.lazyTransition') - } - } - ] - }, - { - path: 'verify', - name: 'VerifyDemo', - component: getParentLayout('VerifyDemo'), - redirect: '/comp/verify/drag', - meta: { - title: t('routes.demo.comp.verify') - }, - children: [ - { - path: 'drag', - name: 'VerifyDragDemo', - component: () => import('@/views/demo/comp/verify/index.vue'), - meta: { - title: t('routes.demo.comp.verifyDrag') - } - }, - { - path: 'rotate', - name: 'VerifyRotateDemo', - component: () => import('@/views/demo/comp/verify/Rotate.vue'), - meta: { - title: t('routes.demo.comp.verifyRotate') - } - } - ] - }, - // - - { - path: 'qrcode', - name: 'QrCodeDemo', - component: () => import('@/views/demo/comp/qrcode/index.vue'), - meta: { - title: t('routes.demo.comp.qrcode') - } - }, - { - path: 'strength-meter', - name: 'StrengthMeterDemo', - component: () => import('@/views/demo/comp/strength-meter/index.vue'), - meta: { - title: t('routes.demo.comp.strength') - } - }, - { - path: 'upload', - name: 'UploadDemo', - component: () => import('@/views/demo/comp/upload/index.vue'), - meta: { - title: t('routes.demo.comp.upload') - } - }, - { - path: 'loading', - name: 'LoadingDemo', - component: () => import('@/views/demo/comp/loading/index.vue'), - meta: { - title: t('routes.demo.comp.loading') - } - }, - { - path: 'cardList', - name: 'CardListDemo', - component: () => import('@/views/demo/comp/card-list/index.vue'), - meta: { - title: t('routes.demo.comp.cardList') - } - } - ] -} - -export default comp diff --git a/src/router/routes/modules/demo/feat.ts b/src/router/routes/modules/demo/feat.ts deleted file mode 100644 index f6dd8ffd..00000000 --- a/src/router/routes/modules/demo/feat.ts +++ /dev/null @@ -1,315 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const feat: AppRouteModule = { - path: '/feat', - name: 'FeatDemo', - component: LAYOUT, - redirect: '/feat/icon', - meta: { - orderNo: 19, - icon: 'ion:git-compare-outline', - title: t('routes.demo.feat.feat') - }, - - children: [ - { - path: 'icon', - name: 'IconDemo', - component: () => import('@/views/demo/feat/icon/index.vue'), - meta: { - title: t('routes.demo.feat.icon') - } - }, - { - path: 'ws', - name: 'WebSocket', - component: () => import('@/views/demo/feat/ws/index.vue'), - meta: { - title: t('routes.demo.feat.ws') - } - }, - { - path: 'request', - name: 'RequestDemo', - component: () => import('@/views/demo/feat/request-demo/index.vue'), - meta: { - title: t('routes.demo.feat.requestDemo') - } - }, - { - path: 'session-timeout', - name: 'SessionTimeout', - component: () => import('@/views/demo/feat/session-timeout/index.vue'), - meta: { - title: t('routes.demo.feat.sessionTimeout') - } - }, - { - path: 'print', - name: 'Print', - component: () => import('@/views/demo/feat/print/index.vue'), - meta: { - title: t('routes.demo.feat.print') - } - }, - { - path: 'tabs', - name: 'TabsDemo', - component: () => import('@/views/demo/feat/tabs/index.vue'), - meta: { - title: t('routes.demo.feat.tabs'), - hideChildrenInMenu: true - }, - children: [ - { - path: 'detail/:id', - name: 'TabDetail', - component: () => import('@/views/demo/feat/tabs/TabDetail.vue'), - meta: { - currentActiveMenu: '/feat/tabs', - title: t('routes.demo.feat.tabDetail'), - hideMenu: true, - dynamicLevel: 3, - realPath: '/feat/tabs/detail' - } - } - ] - }, - { - path: 'breadcrumb', - name: 'BreadcrumbDemo', - redirect: '/feat/breadcrumb/flat', - component: getParentLayout('BreadcrumbDemo'), - meta: { - title: t('routes.demo.feat.breadcrumb') - }, - - children: [ - { - path: 'flat', - name: 'BreadcrumbFlatDemo', - component: () => import('@/views/demo/feat/breadcrumb/FlatList.vue'), - meta: { - title: t('routes.demo.feat.breadcrumbFlat') - } - }, - { - path: 'flatDetail', - name: 'BreadcrumbFlatDetailDemo', - component: () => import('@/views/demo/feat/breadcrumb/FlatListDetail.vue'), - meta: { - title: t('routes.demo.feat.breadcrumbFlatDetail'), - hideMenu: true, - hideTab: true, - currentActiveMenu: '/feat/breadcrumb/flat' - } - }, - { - path: 'children', - name: 'BreadcrumbChildrenDemo', - component: () => import('@/views/demo/feat/breadcrumb/ChildrenList.vue'), - meta: { - title: t('routes.demo.feat.breadcrumbChildren') - }, - children: [ - { - path: 'childrenDetail', - name: 'BreadcrumbChildrenDetailDemo', - component: () => import('@/views/demo/feat/breadcrumb/ChildrenListDetail.vue'), - meta: { - currentActiveMenu: '/feat/breadcrumb/children', - title: t('routes.demo.feat.breadcrumbChildrenDetail') - //hideTab: true, - // hideMenu: true, - } - } - ] - } - ] - }, - - { - path: 'context-menu', - name: 'ContextMenuDemo', - component: () => import('@/views/demo/feat/context-menu/index.vue'), - meta: { - title: t('routes.demo.feat.contextMenu') - } - }, - { - path: 'download', - name: 'DownLoadDemo', - component: () => import('@/views/demo/feat/download/index.vue'), - meta: { - title: t('routes.demo.feat.download') - } - }, - { - path: 'img-preview', - name: 'ImgPreview', - component: () => import('@/views/demo/feat/img-preview/index.vue'), - meta: { - title: t('routes.demo.feat.imgPreview') - } - }, - { - path: 'copy', - name: 'CopyDemo', - component: () => import('@/views/demo/feat/copy/index.vue'), - meta: { - title: t('routes.demo.feat.copy') - } - }, - { - path: 'msg', - name: 'MsgDemo', - component: () => import('@/views/demo/feat/msg/index.vue'), - meta: { - title: t('routes.demo.feat.msg') - } - }, - { - path: 'watermark', - name: 'WatermarkDemo', - component: () => import('@/views/demo/feat/watermark/index.vue'), - meta: { - title: t('routes.demo.feat.watermark') - } - }, - { - path: 'ripple', - name: 'RippleDemo', - component: () => import('@/views/demo/feat/ripple/index.vue'), - meta: { - title: t('routes.demo.feat.ripple') - } - }, - { - path: 'full-screen', - name: 'FullScreenDemo', - component: () => import('@/views/demo/feat/full-screen/index.vue'), - meta: { - title: t('routes.demo.feat.fullScreen') - } - }, - { - path: '/error-log', - name: 'ErrorLog', - component: () => import('@/views/sys/error-log/index.vue'), - meta: { - title: t('routes.demo.feat.errorLog') - } - }, - { - path: 'excel', - name: 'Excel', - redirect: '/feat/excel/customExport', - component: getParentLayout('Excel'), - meta: { - // icon: 'mdi:microsoft-excel', - title: t('routes.demo.excel.excel') - }, - - children: [ - { - path: 'customExport', - name: 'CustomExport', - component: () => import('@/views/demo/excel/CustomExport.vue'), - meta: { - title: t('routes.demo.excel.customExport') - } - }, - { - path: 'jsonExport', - name: 'JsonExport', - component: () => import('@/views/demo/excel/JsonExport.vue'), - meta: { - title: t('routes.demo.excel.jsonExport') - } - }, - { - path: 'arrayExport', - name: 'ArrayExport', - component: () => import('@/views/demo/excel/ArrayExport.vue'), - meta: { - title: t('routes.demo.excel.arrayExport') - } - }, - { - path: 'importExcel', - name: 'ImportExcel', - component: () => import('@/views/demo/excel/ImportExcel.vue'), - meta: { - title: t('routes.demo.excel.importExcel') - } - } - ] - }, - { - path: 'testTab/:id', - name: 'TestTab', - component: () => import('@/views/demo/feat/tab-params/index.vue'), - meta: { - title: t('routes.demo.feat.tab'), - carryParam: true, - hidePathForChildren: true - }, - children: [ - { - path: 'testTab/id1', - name: 'TestTab1', - component: () => import('@/views/demo/feat/tab-params/index.vue'), - meta: { - title: t('routes.demo.feat.tab1'), - carryParam: true, - ignoreRoute: true - } - }, - { - path: 'testTab/id2', - name: 'TestTab2', - component: () => import('@/views/demo/feat/tab-params/index.vue'), - meta: { - title: t('routes.demo.feat.tab2'), - carryParam: true, - ignoreRoute: true - } - } - ] - }, - { - path: 'testParam/:id', - name: 'TestParam', - component: getParentLayout('TestParam'), - meta: { - title: t('routes.demo.feat.menu'), - ignoreKeepAlive: true - }, - children: [ - { - path: 'sub1', - name: 'TestParam_1', - component: () => import('@/views/demo/feat/menu-params/index.vue'), - meta: { - title: t('routes.demo.feat.menu1'), - ignoreKeepAlive: true - } - }, - { - path: 'sub2', - name: 'TestParam_2', - component: () => import('@/views/demo/feat/menu-params/index.vue'), - meta: { - title: t('routes.demo.feat.menu2'), - ignoreKeepAlive: true - } - } - ] - } - ] -} - -export default feat diff --git a/src/router/routes/modules/demo/flow.ts b/src/router/routes/modules/demo/flow.ts deleted file mode 100644 index 6b901222..00000000 --- a/src/router/routes/modules/demo/flow.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const charts: AppRouteModule = { - path: '/flow', - name: 'FlowDemo', - component: LAYOUT, - redirect: '/flow/flowChart', - meta: { - orderNo: 5000, - icon: 'tabler:chart-dots', - title: t('routes.demo.flow.name') - }, - children: [ - { - path: 'flowChart', - name: 'flowChartDemo', - component: () => import('@/views/demo/comp/flow-chart/index.vue'), - meta: { - title: t('routes.demo.flow.flowChart') - } - } - ] -} - -export default charts diff --git a/src/router/routes/modules/demo/iframe.ts b/src/router/routes/modules/demo/iframe.ts deleted file mode 100644 index 9504b28f..00000000 --- a/src/router/routes/modules/demo/iframe.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { LAYOUT } from '@/router/constant' -const IFrame = () => import('@/views/sys/iframe/FrameBlank.vue') -import { t } from '@/hooks/web/useI18n' - -const iframe: AppRouteModule = { - path: '/frame', - name: 'Frame', - component: LAYOUT, - redirect: '/frame/doc', - meta: { - orderNo: 1000, - icon: 'ion:tv-outline', - title: t('routes.demo.iframe.frame') - }, - - children: [ - { - path: 'doc', - name: 'Doc', - component: IFrame, - meta: { - frameSrc: 'https://doc.vvbin.cn/', - title: t('routes.demo.iframe.doc') - } - }, - { - path: 'antv', - name: 'Antv', - component: IFrame, - meta: { - frameSrc: 'https://www.antdv.com/docs/vue/introduce-cn/', - title: t('routes.demo.iframe.antv') - } - }, - { - path: 'https://doc.vvbin.cn/', - name: 'DocExternal', - component: IFrame, - meta: { - title: t('routes.demo.iframe.docExternal') - } - } - ] -} - -export default iframe diff --git a/src/router/routes/modules/demo/level.ts b/src/router/routes/modules/demo/level.ts deleted file mode 100644 index db0d71f0..00000000 --- a/src/router/routes/modules/demo/level.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const permission: AppRouteModule = { - path: '/level', - name: 'Level', - component: LAYOUT, - redirect: '/level/menu1/menu1-1/menu1-1-1', - meta: { - orderNo: 2000, - icon: 'ion:menu-outline', - title: t('routes.demo.level.level') - }, - - children: [ - { - path: 'menu1', - name: 'Menu1Demo', - component: getParentLayout('Menu1Demo'), - meta: { - title: 'Menu1' - }, - redirect: '/level/menu1/menu1-1/menu1-1-1', - children: [ - { - path: 'menu1-1', - name: 'Menu11Demo', - component: getParentLayout('Menu11Demo'), - meta: { - title: 'Menu1-1' - }, - redirect: '/level/menu1/menu1-1/menu1-1-1', - children: [ - { - path: 'menu1-1-1', - name: 'Menu111Demo', - component: () => import('@/views/demo/level/Menu111.vue'), - meta: { - title: 'Menu111' - } - } - ] - }, - { - path: 'menu1-2', - name: 'Menu12Demo', - component: () => import('@/views/demo/level/Menu12.vue'), - meta: { - title: 'Menu1-2' - } - } - ] - }, - { - path: 'menu2', - name: 'Menu2Demo', - component: () => import('@/views/demo/level/Menu2.vue'), - meta: { - title: 'Menu2' - // ignoreKeepAlive: true, - } - } - ] -} - -export default permission diff --git a/src/router/routes/modules/demo/page.ts b/src/router/routes/modules/demo/page.ts deleted file mode 100644 index fb6063c0..00000000 --- a/src/router/routes/modules/demo/page.ts +++ /dev/null @@ -1,255 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { ExceptionEnum } from '@/enums/exceptionEnum' -import { t } from '@/hooks/web/useI18n' - -const ExceptionPage = () => import('@/views/sys/exception/Exception.vue') - -const page: AppRouteModule = { - path: '/page-demo', - name: 'PageDemo', - component: LAYOUT, - redirect: '/page-demo/form/basic', - meta: { - orderNo: 20, - icon: 'ion:aperture-outline', - title: t('routes.demo.page.page') - }, - children: [ - // =============================form start============================= - { - path: 'form', - name: 'FormPage', - redirect: '/page-demo/form/basic', - component: getParentLayout('FormPage'), - meta: { - title: t('routes.demo.page.form') - }, - children: [ - { - path: 'basic', - name: 'FormBasicPage', - component: () => import('@/views/demo/page/form/basic/index.vue'), - meta: { - title: t('routes.demo.page.formBasic') - } - }, - { - path: 'step', - name: 'FormStepPage', - component: () => import('@/views/demo/page/form/step/index.vue'), - meta: { - title: t('routes.demo.page.formStep') - } - }, - { - path: 'high', - name: 'FormHightPage', - component: () => import('@/views/demo/page/form/high/index.vue'), - meta: { - title: t('routes.demo.page.formHigh') - } - } - ] - }, - // =============================form end============================= - // =============================desc start============================= - { - path: 'desc', - name: 'DescPage', - component: getParentLayout('DescPage'), - redirect: '/page-demo/desc/basic', - meta: { - title: t('routes.demo.page.desc') - }, - children: [ - { - path: 'basic', - name: 'DescBasicPage', - component: () => import('@/views/demo/page/desc/basic/index.vue'), - meta: { - title: t('routes.demo.page.descBasic') - } - }, - { - path: 'high', - name: 'DescHighPage', - component: () => import('@/views/demo/page/desc/high/index.vue'), - meta: { - title: t('routes.demo.page.descHigh') - } - } - ] - }, - // =============================desc end============================= - - // =============================result start============================= - { - path: 'result', - name: 'ResultPage', - redirect: '/page-demo/result/success', - component: getParentLayout('ResultPage'), - - meta: { - title: t('routes.demo.page.result') - }, - children: [ - { - path: 'success', - name: 'ResultSuccessPage', - component: () => import('@/views/demo/page/result/success/index.vue'), - meta: { - title: t('routes.demo.page.resultSuccess') - } - }, - { - path: 'fail', - name: 'ResultFailPage', - component: () => import('@/views/demo/page/result/fail/index.vue'), - meta: { - title: t('routes.demo.page.resultFail') - } - } - ] - }, - // =============================result end============================= - - // =============================account start============================= - { - path: 'account', - name: 'AccountPage', - component: getParentLayout('AccountPage'), - redirect: '/page-demo/account/setting', - meta: { - title: t('routes.demo.page.account') - }, - children: [ - { - path: 'center', - name: 'AccountCenterPage', - component: () => import('@/views/demo/page/account/center/index.vue'), - meta: { - title: t('routes.demo.page.accountCenter') - } - }, - { - path: 'setting', - name: 'AccountSettingPage', - component: () => import('@/views/demo/page/account/setting/index.vue'), - meta: { - title: t('routes.demo.page.accountSetting') - } - } - ] - }, - // =============================account end============================= - // =============================exception start============================= - { - path: 'exception', - name: 'ExceptionPage', - component: getParentLayout('ExceptionPage'), - redirect: '/page-demo/exception/404', - meta: { - title: t('routes.demo.page.exception') - }, - children: [ - { - path: '403', - name: 'PageNotAccess', - component: ExceptionPage, - props: { - status: ExceptionEnum.PAGE_NOT_ACCESS - }, - meta: { - title: '403' - } - }, - { - path: '404', - name: 'PageNotFound', - component: ExceptionPage, - props: { - status: ExceptionEnum.PAGE_NOT_FOUND - }, - meta: { - title: '404' - } - }, - { - path: '500', - name: 'ServiceError', - component: ExceptionPage, - props: { - status: ExceptionEnum.ERROR - }, - meta: { - title: '500' - } - }, - { - path: 'net-work-error', - name: 'NetWorkError', - component: ExceptionPage, - props: { - status: ExceptionEnum.NET_WORK_ERROR - }, - meta: { - title: t('routes.demo.page.netWorkError') - } - }, - { - path: 'not-data', - name: 'NotData', - component: ExceptionPage, - props: { - status: ExceptionEnum.PAGE_NOT_DATA - }, - meta: { - title: t('routes.demo.page.notData') - } - } - ] - }, - // =============================exception end============================= - // =============================list start============================= - { - path: 'list', - name: 'ListPage', - component: getParentLayout('ListPage'), - redirect: '/page-demo/list/card', - meta: { - title: t('routes.demo.page.list') - }, - children: [ - { - path: 'basic', - name: 'ListBasicPage', - component: () => import('@/views/demo/page/list/basic/index.vue'), - meta: { - title: t('routes.demo.page.listBasic') - } - }, - { - path: 'card', - name: 'ListCardPage', - component: () => import('@/views/demo/page/list/card/index.vue'), - meta: { - title: t('routes.demo.page.listCard') - } - }, - { - path: 'search', - name: 'ListSearchPage', - component: () => import('@/views/demo/page/list/search/index.vue'), - meta: { - title: t('routes.demo.page.listSearch') - } - } - ] - } - // =============================list end============================= - ] -} - -export default page diff --git a/src/router/routes/modules/demo/permission.ts b/src/router/routes/modules/demo/permission.ts deleted file mode 100644 index cb667564..00000000 --- a/src/router/routes/modules/demo/permission.ts +++ /dev/null @@ -1,92 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { getParentLayout, LAYOUT } from '@/router/constant' -import { RoleEnum } from '@/enums/roleEnum' -import { t } from '@/hooks/web/useI18n' - -const permission: AppRouteModule = { - path: '/permission', - name: 'Permission', - component: LAYOUT, - redirect: '/permission/front/page', - meta: { - orderNo: 15, - icon: 'ion:key-outline', - title: t('routes.demo.permission.permission') - }, - - children: [ - { - path: 'front', - name: 'PermissionFrontDemo', - component: getParentLayout('PermissionFrontDemo'), - meta: { - title: t('routes.demo.permission.front') - }, - children: [ - { - path: 'page', - name: 'FrontPageAuth', - component: () => import('@/views/demo/permission/front/index.vue'), - meta: { - title: t('routes.demo.permission.frontPage') - } - }, - { - path: 'btn', - name: 'FrontBtnAuth', - component: () => import('@/views/demo/permission/front/Btn.vue'), - meta: { - title: t('routes.demo.permission.frontBtn') - } - }, - { - path: 'auth-pageA', - name: 'FrontAuthPageA', - component: () => import('@/views/demo/permission/front/AuthPageA.vue'), - meta: { - title: t('routes.demo.permission.frontTestA'), - roles: [RoleEnum.SUPER] - } - }, - { - path: 'auth-pageB', - name: 'FrontAuthPageB', - component: () => import('@/views/demo/permission/front/AuthPageB.vue'), - meta: { - title: t('routes.demo.permission.frontTestB'), - roles: [RoleEnum.TEST] - } - } - ] - }, - { - path: 'back', - name: 'PermissionBackDemo', - component: getParentLayout('PermissionBackDemo'), - meta: { - title: t('routes.demo.permission.back') - }, - children: [ - { - path: 'page', - name: 'BackAuthPage', - component: () => import('@/views/demo/permission/back/index.vue'), - meta: { - title: t('routes.demo.permission.backPage') - } - }, - { - path: 'btn', - name: 'BackAuthBtn', - component: () => import('@/views/demo/permission/back/Btn.vue'), - meta: { - title: t('routes.demo.permission.backBtn') - } - } - ] - } - ] -} - -export default permission diff --git a/src/router/routes/modules/demo/setup.ts b/src/router/routes/modules/demo/setup.ts deleted file mode 100644 index 480353ba..00000000 --- a/src/router/routes/modules/demo/setup.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const setup: AppRouteModule = { - path: '/setup', - name: 'SetupDemo', - component: LAYOUT, - redirect: '/setup/index', - meta: { - orderNo: 90000, - hideChildrenInMenu: true, - icon: 'whh:paintroll', - title: t('routes.demo.setup.page') - }, - children: [ - { - path: 'index', - name: 'SetupDemoPage', - component: () => import('@/views/demo/setup/index.vue'), - meta: { - title: t('routes.demo.setup.page'), - icon: 'whh:paintroll', - hideMenu: true - } - } - ] -} - -export default setup diff --git a/src/router/routes/modules/demo/system.ts b/src/router/routes/modules/demo/system.ts deleted file mode 100644 index e06a8a95..00000000 --- a/src/router/routes/modules/demo/system.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { AppRouteModule } from '@/router/types' - -import { LAYOUT } from '@/router/constant' -import { t } from '@/hooks/web/useI18n' - -const system: AppRouteModule = { - path: '/system', - name: 'System', - component: LAYOUT, - redirect: '/system/account', - meta: { - orderNo: 2000, - icon: 'ion:settings-outline', - title: t('routes.demo.system.moduleName') - }, - children: [ - { - path: 'account', - name: 'AccountManagement', - meta: { - title: t('routes.demo.system.account'), - ignoreKeepAlive: false - }, - component: () => import('@/views/demo/system/account/index.vue') - }, - { - path: 'account_detail/:id', - name: 'AccountDetail', - meta: { - hideMenu: true, - title: t('routes.demo.system.account_detail'), - ignoreKeepAlive: true, - showMenu: false, - currentActiveMenu: '/system/account' - }, - component: () => import('@/views/demo/system/account/AccountDetail.vue') - }, - { - path: 'role', - name: 'RoleManagement', - meta: { - title: t('routes.demo.system.role'), - ignoreKeepAlive: true - }, - component: () => import('@/views/demo/system/role/index.vue') - }, - - { - path: 'menu', - name: 'MenuManagement', - meta: { - title: t('routes.demo.system.menu'), - ignoreKeepAlive: true - }, - component: () => import('@/views/demo/system/menu/index.vue') - }, - { - path: 'dept', - name: 'DeptManagement', - meta: { - title: t('routes.demo.system.dept'), - ignoreKeepAlive: true - }, - component: () => import('@/views/demo/system/dept/index.vue') - }, - { - path: 'changePassword', - name: 'ChangePassword', - meta: { - title: t('routes.demo.system.password'), - ignoreKeepAlive: true - }, - component: () => import('@/views/demo/system/password/index.vue') - } - ] -} - -export default system diff --git a/src/router/types.ts b/src/router/types.ts index 76713ad7..d8eadf23 100644 --- a/src/router/types.ts +++ b/src/router/types.ts @@ -6,7 +6,11 @@ export type Component = ReturnType | (() => Pro // @ts-ignore export interface AppRouteRecordRaw extends Omit { + keepAlive?: boolean + visible?: boolean + icon?: string name: string + parentId?: number meta: RouteMeta component?: Component | string components?: Component @@ -16,33 +20,37 @@ export interface AppRouteRecordRaw extends Omit { } export interface MenuTag { + // 类型 type?: 'primary' | 'error' | 'warn' | 'success' + // 内容 content?: string + // 为true则显示小圆点 dot?: boolean } export interface Menu { + // 菜单名 name: string - + // 菜单图标,如果没有,则会尝试使用route.meta.icon icon?: string - + // 菜单路径 path: string // path contains param, auto assignment. paramPath?: string - + // 是否禁用 disabled?: boolean - + // 子菜单 children?: Menu[] - + // 菜单排序 orderNo?: number roles?: RoleEnum[] meta?: Partial - + // 菜单标签设置 tag?: MenuTag - + // 是否隐藏菜单 hideMenu?: boolean } diff --git a/src/settings/componentSetting.ts b/src/settings/componentSetting.ts index 12018330..f2f8b93f 100644 --- a/src/settings/componentSetting.ts +++ b/src/settings/componentSetting.ts @@ -1,51 +1,51 @@ -// Used to configure the general configuration of some components without modifying the components +// 用于配置某些组件的常规配置,而无需修改组件 import type { SorterResult } from '../components/Table' export default { - // basic-table setting + // 表格配置 table: { - // Form interface request general configuration - // support xxx.xxx.xxx + // 表格接口请求通用配置,可在组件prop覆盖 + // 支持 xxx.xxx.xxx格式 fetchSetting: { - // The field name of the current page passed to the background + // 传给后台的当前页字段 pageField: 'page', - // The number field name of each page displayed in the background + // 传给后台的每页显示多少条的字段 sizeField: 'pageSize', - // Field name of the form data returned by the interface + // 接口返回表格数据的字段 listField: 'items', - // Total number of tables returned by the interface field name + // 接口返回表格总数的字段 totalField: 'total' }, - // Number of pages that can be selected + // 可选的分页选项 pageSizeOptions: ['10', '50', '80', '100'], - // Default display quantity on one page + // 默认每页显示多少条 defaultPageSize: 10, - // Default Size + // 默认排序方法 defaultSize: 'middle', - // Custom general sort function + // 自定义通用排序功能 defaultSortFn: (sortInfo: SorterResult) => { const { field, order } = sortInfo if (field && order) { return { - // The sort field passed to the backend you + // 排序字段 field, - // Sorting method passed to the background asc/desc + // 排序方式 asc/desc order } } else { return {} } }, - // Custom general filter function + // 自定义过滤方法 defaultFilterFn: (data: Partial>) => { return data } }, - // scrollbar setting + // 滚动组件配置 scrollbar: { - // Whether to use native scroll bar - // After opening, the menu, modal, drawer will change the pop-up scroll bar to native + // 是否使用原生滚动样式 + // 开启后,菜单,弹窗,抽屉会使用原生滚动条组件 native: false } } diff --git a/src/settings/designSetting.ts b/src/settings/designSetting.ts index 97597432..77e019d1 100644 --- a/src/settings/designSetting.ts +++ b/src/settings/designSetting.ts @@ -4,7 +4,7 @@ export const prefixCls = 'vben' export const darkMode = ThemeEnum.LIGHT -// app theme preset color +// app主题色预设 export const APP_PRESET_COLOR_LIST: string[] = [ '#0960bd', '#0084f4', @@ -17,7 +17,7 @@ export const APP_PRESET_COLOR_LIST: string[] = [ '#ff9800' ] -// header preset color +// 顶部背景色预设 export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ '#ffffff', '#151515', @@ -32,7 +32,7 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ '#383f45' ] -// sider preset color +// 左侧菜单背景色预设 export const SIDE_BAR_BG_COLOR_LIST: string[] = [ '#001529', '#212121', diff --git a/src/settings/encryptionSetting.ts b/src/settings/encryptionSetting.ts index 17459dc3..cf751fcf 100644 --- a/src/settings/encryptionSetting.ts +++ b/src/settings/encryptionSetting.ts @@ -1,13 +1,13 @@ import { isDevMode } from '@/utils/env' -// System default cache time, in seconds +// 缓存默认过期时间 export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7 -// aes encryption key +// 开启缓存加密后,加密密钥。采用aes加密 export const cacheCipher = { key: '_11111000001111@', iv: '@11111000001111_' } -// Whether the system cache is encrypted using aes +// 是否加密缓存,默认生产环境加密 export const enableStorageEncryption = !isDevMode() diff --git a/src/settings/localeSetting.ts b/src/settings/localeSetting.ts index 78b9d433..237213ec 100644 --- a/src/settings/localeSetting.ts +++ b/src/settings/localeSetting.ts @@ -7,16 +7,17 @@ export const LOCALE: { [key: string]: LocaleType } = { } export const localeSetting: LocaleSetting = { + // 是否显示语言选择器 showPicker: true, - // Locale + // 当前语言 locale: LOCALE.ZH_CN, - // Default locale + // 默认语言 fallback: LOCALE.ZH_CN, - // available Locales + // 允许的语言 availableLocales: [LOCALE.ZH_CN, LOCALE.EN_US] } -// locale list +// 语言列表 export const localeList: DropMenu[] = [ { text: '简体中文', diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index 7fe8d288..5f583d8e 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -12,170 +12,153 @@ import { import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting' import { primaryColor } from '../../build/config/themeConfig' -// ! You need to clear the browser cache after the change +// ! 改动后需要清空浏览器缓存 const setting: ProjectConfig = { - // Whether to show the configuration button + // 是否显示SettingButton showSettingButton: true, - // Whether to show the theme switch button + // 是否显示主题切换按钮 showDarkModeToggle: true, - // `Settings` button position + // 设置按钮位置 可选项 + // SettingButtonPositionEnum.AUTO: 自动选择 + // SettingButtonPositionEnum.HEADER: 位于头部 + // SettingButtonPositionEnum.FIXED: 固定在右侧 settingButtonPosition: SettingButtonPositionEnum.AUTO, - // Permission mode - permissionMode: PermissionModeEnum.ROUTE_MAPPING, - - // Permission-related cache is stored in sessionStorage or localStorage + // 权限模式,默认前端角色权限模式 + // ROUTE_MAPPING: 前端模式(菜单由路由生成,默认) + // ROLE:前端模式(菜单路由分开) + // BACK: 后端模式 + permissionMode: PermissionModeEnum.BACK, + // 权限缓存存放位置。默认存放于localStorage permissionCacheType: CacheTypeEnum.LOCAL, - - // Session timeout processing + // 会话超时处理方案 + // SessionTimeoutProcessingEnum.ROUTE_JUMP: 路由跳转到登录页 + // SessionTimeoutProcessingEnum.PAGE_COVERAGE: 生成登录弹窗,覆盖当前页面 sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP, - - // color + // 项目主题色 themeColor: primaryColor, - - // Website gray mode, open for possible mourning dates + // 网站灰色模式,用于可能悼念的日期开启 grayMode: false, - - // Color Weakness Mode + // 色弱模式 colorWeak: false, - - // Whether to cancel the menu, the top, the multi-tab page display, for possible embedded in other systems + // 是否取消菜单,顶部,多标签页显示, 用于可能内嵌在别的系统内 fullContent: false, - - // content mode + // 主题内容宽度 contentMode: ContentEnum.FULL, - - // Whether to display the logo + // 是否显示logo showLogo: true, - - // Whether to show footer - showFooter: false, - - // Header configuration + // 是否显示底部信息 copyright + showFooter: true, + // 头部配置 headerSetting: { - // header bg color + // 背景色 bgColor: HEADER_PRESET_BG_COLOR_LIST[0], - // Fixed at the top + // 固定头部 fixed: true, - // Whether to show top + // 是否显示顶部 show: true, - // theme + // 主题 theme: ThemeEnum.LIGHT, - // Whether to enable the lock screen function + // 开启锁屏功能 useLockPage: true, - // Whether to show the full screen button + // 显示全屏按钮 showFullScreen: true, - // Whether to show the document button + // 显示文档按钮 showDoc: true, - // Whether to show the notification button + // 显示消息中心按钮 showNotice: true, - // Whether to display the menu search + // 显示菜单搜索按钮 showSearch: true }, - - // Menu configuration + // 菜单配置 menuSetting: { - // sidebar menu bg color + // 背景色 bgColor: SIDE_BAR_BG_COLOR_LIST[0], - // Whether to fix the left menu + // 是否固定住菜单 fixed: true, - // Menu collapse + // 菜单折叠 collapsed: false, - // When sider hide because of the responsive layout + // 当响应式布局时隐藏 siderHidden: false, - // Whether to display the menu name when folding the menu + // 折叠菜单时候是否显示菜单名 collapsedShowTitle: false, - // Whether it can be dragged - // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu - canDrag: false, - // Whether to show no dom + // 是否可拖拽 + canDrag: true, + // 是否显示 show: true, - // Whether to show dom + // 是否显示dom hidden: false, - // Menu width + // 菜单宽度 menuWidth: 210, - // Menu mode + // 菜单模式 mode: MenuModeEnum.INLINE, - // Menu type + // 菜单类型 type: MenuTypeEnum.SIDEBAR, - // Menu theme + // 菜单主题 theme: ThemeEnum.DARK, - // Split menu + // 分割菜单 split: false, - // Top menu layout + // 顶部菜单布局 topMenuAlign: 'center', - // Fold trigger position + // 折叠触发器的位置 trigger: TriggerEnum.HEADER, - // Turn on accordion mode, only show a menu + // 手风琴模式,只展示一个菜单 accordion: true, - // Switch page to close menu + // 在路由切换的时候关闭左侧混合菜单展开菜单 closeMixSidebarOnChange: false, - // Module opening method ‘click’ |'hover' + // 左侧混合菜单模块切换触发方式 mixSideTrigger: MixSidebarTriggerEnum.CLICK, - // Fixed expanded menu + // 是否固定左侧混合菜单 mixSideFixed: false }, - - // Multi-label + // 多标签 multiTabsSetting: { + // 刷新后是否保留已经打开的标签页 cache: false, - // Turn on + // 开启 show: true, - // Is it possible to drag and drop sorting tabs - canDrag: true, - // Turn on quick actions + // 开启快速操作 showQuick: true, - // Whether to show the refresh button + // 是否可以拖拽 + canDrag: true, + // 是否显示刷新那妞 showRedo: true, - // Whether to show the collapse button + // 是否显示折叠按钮 showFold: true }, - // Transition Setting + // 动画配置 transitionSetting: { - // Whether to open the page switching animation - // The disabled state will also disable pageLoading + // 是否开启切换动画 enable: true, - - // Route basic switching animation + // 动画名 basicTransition: RouterTransitionEnum.FADE_SIDE, - - // Whether to open page switching loading - // Only open when enable=true + // 是否打开页面切换loading openPageLoading: true, - - // Whether to open the top progress bar + //是否打开页面切换顶部进度条 openNProgress: false }, - // Whether to enable KeepAlive cache is best to close during development, otherwise the cache needs to be cleared every time + // 是否开启KeepAlive缓存 开发时候最好关闭,不然每次都需要清除缓存 openKeepAlive: true, - - // Automatic screen lock time, 0 does not lock the screen. Unit minute default 0 + // 自动锁屏时间,为0不锁屏。 单位分钟 默认1个小时 lockTime: 0, - - // Whether to show breadcrumbs + // 显示面包屑 showBreadCrumb: true, - - // Whether to show the breadcrumb icon + // 显示面包屑图标 showBreadCrumbIcon: false, - - // Use error-handler-plugin + // 是否使用全局错误捕获 useErrorHandle: false, - - // Whether to open back to top + // 是否开启回到顶部 useOpenBackTop: true, - - // Is it possible to embed iframe pages + // 是否可以嵌入iframe页面 canEmbedIFramePage: true, - - // Whether to delete unclosed messages and notify when switching the interface + // 切换界面的时候是否删除未关闭的message及notify closeMessageOnSwitch: true, - - // Whether to cancel the http request that has been sent but not responded when switching the interface. - // If it is enabled, I want to overwrite a single interface. Can be set in a separate interface + // 切换界面的时候是否取消已经发送但是未响应的http请求。 + // 如果开启,想对单独接口覆盖。可以在单独接口设置 removeAllHttpPending: false } diff --git a/src/settings/siteSetting.ts b/src/settings/siteSetting.ts index 870bf0d4..be7811d7 100644 --- a/src/settings/siteSetting.ts +++ b/src/settings/siteSetting.ts @@ -1,5 +1,8 @@ +// github repo url export const GITHUB_URL = 'https://gitee.com/xingyu4j/vue-vben-admin' +// vue-vben-admin-next-doc export const DOC_URL = 'http://vben.x-surge.com/' +// site url export const SITE_URL = 'http://vben.x-surge.com/' diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts new file mode 100644 index 00000000..c84d1c2c --- /dev/null +++ b/src/store/modules/dict.ts @@ -0,0 +1,66 @@ +import type { DictState } from '@/types/store' + +import { defineStore } from 'pinia' +import { store } from '@/store' + +import { DICT_KEY } from '@/enums/cacheEnum' +import { createLocalStorage } from '@/utils/cache' +import { listSimpleDictDataApi } from '@/api/system/dict/dict.data' +import { DictDataVO } from '@/api/system/dict/types' + +const ls = createLocalStorage() + +export const useDictStore = defineStore({ + id: 'app-dict', + state: (): DictState => ({ + dictMap: new Map(), + isSetDict: false + }), + getters: { + getDictMap(): Recordable { + const dictMap = ls.get(DICT_KEY) + if (dictMap) { + this.dictMap = dictMap + } + return this.dictMap + }, + getIsSetDict(): boolean { + return this.isSetDict + } + }, + actions: { + async setDictMap() { + const dictMap = ls.get(DICT_KEY) + if (dictMap) { + this.dictMap = dictMap + this.isSetDict = true + } else { + const res = await listSimpleDictDataApi() + // 设置数据 + const dictDataMap = new Map() + res.forEach((dictData: DictDataVO) => { + // 获得 dictType 层级 + const enumValueObj = dictDataMap[dictData.dictType] + if (!enumValueObj) { + dictDataMap[dictData.dictType] = [] + } + // 处理 dictValue 层级 + dictDataMap[dictData.dictType].push({ + value: dictData.value, + label: dictData.label, + colorType: dictData.colorType, + cssClass: dictData.cssClass + }) + }) + this.dictMap = dictDataMap + this.isSetDict = true + ls.set(DICT_KEY, dictDataMap, 60) // 60 秒 过期 + } + } + } +}) + +// Need to be used outside the setup +export function useDictStoreWithOut() { + return useDictStore(store) +} diff --git a/src/store/modules/lock.ts b/src/store/modules/lock.ts index 06f00dd5..0cb01996 100644 --- a/src/store/modules/lock.ts +++ b/src/store/modules/lock.ts @@ -36,13 +36,15 @@ export const useLockStore = defineStore('app-lock', { return true } const tryLogin = async () => { + // TODO 滑块验证码 try { - const username = userStore.getUserInfo?.username + const username = userStore.getUserInfo?.user.nickname const res = await userStore.login({ username, password: password!, goHome: false, - mode: 'none' + mode: 'none', + captchaVerification: '' }) if (res) { this.resetLockInfo() diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts index edb4b127..7b1134e0 100644 --- a/src/store/modules/multipleTab.ts +++ b/src/store/modules/multipleTab.ts @@ -13,7 +13,6 @@ import { getRawRoute } from '@/utils' import { MULTIPLE_TABS_KEY } from '@/enums/cacheEnum' import projectSetting from '@/settings/projectSetting' -import { useUserStore } from '@/store/modules/user' export interface MultipleTabState { cacheTabList: Set @@ -197,8 +196,7 @@ export const useMultipleTabStore = defineStore('app-multiple-tab', { if (index === 0) { // There is only one tab, then jump to the homepage, otherwise jump to the right tab if (this.tabList.length === 1) { - const userStore = useUserStore() - toTarget = userStore.getUserInfo.homePath || PageEnum.BASE_HOME + toTarget = PageEnum.BASE_HOME } else { // Jump to the right tab const page = this.tabList[index + 1] diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index e1dd4854..b91996ce 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -1,28 +1,23 @@ import type { AppRouteRecordRaw, Menu } from '@/router/types' +import { toRaw } from 'vue' import { defineStore } from 'pinia' import { store } from '@/store' -import { useI18n } from '@/hooks/web/useI18n' + import { useUserStore } from './user' import { useAppStoreWithOut } from './app' -import { toRaw } from 'vue' -import { transformObjToRoute, flatMultiLevelRoutes } from '@/router/helper/routeHelper' -import { transformRouteToMenu } from '@/router/helper/menuHelper' - -import projectSetting from '@/settings/projectSetting' - -import { PermissionModeEnum } from '@/enums/appEnum' - import { asyncRoutes } from '@/router/routes' -import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic' - -import { filter } from '@/utils/helper/treeHelper' - -import { getMenuList } from '@/api/sys/menu' -import { getPermCode } from '@/api/sys/user' - +import dashboard from '@/router/routes/modules/dashboard' +import { PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic' +import { transformRouteToMenu } from '@/router/helper/menuHelper' +import { transformObjToRoute, flatMultiLevelRoutes } from '@/router/helper/routeHelper' +import { useI18n } from '@/hooks/web/useI18n' import { useMessage } from '@/hooks/web/useMessage' +import { filter } from '@/utils/helper/treeHelper' +import projectSetting from '@/settings/projectSetting' +import { getMenuList } from '@/api/base/menu' import { PageEnum } from '@/enums/pageEnum' +import { PermissionModeEnum } from '@/enums/appEnum' interface PermissionState { // Permission code list @@ -102,8 +97,7 @@ export const usePermissionStore = defineStore('app-permission', { this.backMenuList = [] this.lastBuildMenuTime = 0 }, - async changePermissionCode() { - const codeList = await getPermCode() + async changePermissionCode(codeList: string[]) { this.setPermCodeList(codeList) }, @@ -140,7 +134,7 @@ export const usePermissionStore = defineStore('app-permission', { * */ const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { if (!routes || routes.length === 0) return - let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME + let homePath: string = PageEnum.BASE_HOME function patcher(routes: AppRouteRecordRaw[], parentPath = '') { if (parentPath) parentPath = parentPath + '/' @@ -220,7 +214,6 @@ export const usePermissionStore = defineStore('app-permission', { // 这个功能可能只需要执行一次,实际项目可以自己放在合适的时间 let routeList: AppRouteRecordRaw[] = [] try { - await this.changePermissionCode() routeList = (await getMenuList()) as AppRouteRecordRaw[] } catch (error) { console.error(error) @@ -232,20 +225,18 @@ export const usePermissionStore = defineStore('app-permission', { // Background routing to menu structure // 后台路由到菜单结构 - const backMenuList = transformRouteToMenu(routeList) + const backMenuList = transformRouteToMenu([dashboard, ...routeList]) this.setBackMenuList(backMenuList) // remove meta.ignoreRoute item // 删除 meta.ignoreRoute 项 routeList = filter(routeList, routeRemoveIgnoreFilter) routeList = routeList.filter(routeRemoveIgnoreFilter) - routeList = flatMultiLevelRoutes(routeList) - routes = [PAGE_NOT_FOUND_ROUTE, ...routeList] + routes = [PAGE_NOT_FOUND_ROUTE, dashboard, ...routeList] break } - routes.push(ERROR_LOG_ROUTE) patchHomeAffix(routes) return routes } diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 25f74b8d..ee500ca9 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -1,25 +1,27 @@ -import type { UserInfo } from '@/types/store' import type { ErrorMessageMode } from '@/types/axios' + +import { h } from 'vue' import { defineStore } from 'pinia' import { store } from '@/store' +import { router } from '@/router' import { RoleEnum } from '@/enums/roleEnum' import { PageEnum } from '@/enums/pageEnum' -import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum' -import { getAuthCache, setAuthCache } from '@/utils/auth' -import { GetUserInfoModel, LoginParams } from '@/api/sys/model/userModel' -import { doLogout, getUserInfo, loginApi } from '@/api/sys/user' -import { useI18n } from '@/hooks/web/useI18n' -import { useMessage } from '@/hooks/web/useMessage' -import { router } from '@/router' -import { usePermissionStore } from '@/store/modules/permission' +import { ROLES_KEY, ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum' import { RouteRecordRaw } from 'vue-router' import { PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic' +import { usePermissionStore } from '@/store/modules/permission' +import { useI18n } from '@/hooks/web/useI18n' +import { useMessage } from '@/hooks/web/useMessage' +import { getAuthCache, setAuthCache } from '@/utils/auth' +import { doLogout, getUserInfo, loginApi } from '@/api/base/user' +import { GetUserInfoModel, LoginParams } from '@/api/base/model/userModel' + import { isArray } from '@/utils/is' -import { h } from 'vue' interface UserState { - userInfo: Nullable - token?: string + userInfo: Nullable + accessToken?: string + refreshToken?: string roleList: RoleEnum[] sessionTimeout?: boolean lastUpdateTime: number @@ -30,7 +32,8 @@ export const useUserStore = defineStore('app-user', { // user info userInfo: null, // token - token: undefined, + accessToken: undefined, + refreshToken: undefined, // roleList roleList: [], // Whether the login expired @@ -39,11 +42,14 @@ export const useUserStore = defineStore('app-user', { lastUpdateTime: 0 }), getters: { - getUserInfo(): UserInfo { - return this.userInfo || getAuthCache(USER_INFO_KEY) || {} + getUserInfo(): GetUserInfoModel { + return this.userInfo || getAuthCache(USER_INFO_KEY) || {} }, - getToken(): string { - return this.token || getAuthCache(TOKEN_KEY) + getAccessToken(): string { + return this.accessToken || getAuthCache(ACCESS_TOKEN_KEY) + }, + getRefreshToken(): string { + return this.refreshToken || getAuthCache(REFRESH_TOKEN_KEY) }, getRoleList(): RoleEnum[] { return this.roleList.length > 0 ? this.roleList : getAuthCache(ROLES_KEY) @@ -56,15 +62,19 @@ export const useUserStore = defineStore('app-user', { } }, actions: { - setToken(info: string | undefined) { - this.token = info ? info : '' // for null or undefined value - setAuthCache(TOKEN_KEY, info) + setAccessToken(info: string | undefined) { + this.accessToken = info ? info : '' // for null or undefined value + setAuthCache(ACCESS_TOKEN_KEY, info) + }, + setRefreshToken(info: string | undefined) { + this.refreshToken = info ? info : '' // for null or undefined value + setAuthCache(REFRESH_TOKEN_KEY, info) }, setRoleList(roleList: RoleEnum[]) { this.roleList = roleList setAuthCache(ROLES_KEY, roleList) }, - setUserInfo(info: UserInfo | null) { + setUserInfo(info: GetUserInfoModel | null) { this.userInfo = info this.lastUpdateTime = new Date().getTime() setAuthCache(USER_INFO_KEY, info) @@ -74,7 +84,7 @@ export const useUserStore = defineStore('app-user', { }, resetState() { this.userInfo = null - this.token = '' + this.accessToken = '' this.roleList = [] this.sessionTimeout = false }, @@ -90,17 +100,18 @@ export const useUserStore = defineStore('app-user', { try { const { goHome = true, mode, ...loginParams } = params const data = await loginApi(loginParams, mode) - const { token } = data + const { accessToken, refreshToken } = data // save token - this.setToken(token) + this.setAccessToken(accessToken) + this.setRefreshToken(refreshToken) return this.afterLoginAction(goHome) } catch (error) { return Promise.reject(error) } }, async afterLoginAction(goHome?: boolean): Promise { - if (!this.getToken) return null + if (!this.getAccessToken) return null // get user info const userInfo = await this.getUserInfoAction() @@ -117,16 +128,16 @@ export const useUserStore = defineStore('app-user', { router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw) permissionStore.setDynamicAddedRoute(true) } - goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME)) + goHome && (await router.replace(PageEnum.BASE_HOME)) } return userInfo }, - async getUserInfoAction(): Promise { - if (!this.getToken) return null + async getUserInfoAction(): Promise { + if (!this.getAccessToken) return null const userInfo = await getUserInfo() const { roles = [] } = userInfo if (isArray(roles)) { - const roleList = roles.map((item) => item.value) as RoleEnum[] + const roleList = roles.map((item) => item) as RoleEnum[] this.setRoleList(roleList) } else { userInfo.roles = [] @@ -139,14 +150,14 @@ export const useUserStore = defineStore('app-user', { * @description: logout */ async logout(goLogin = false) { - if (this.getToken) { + if (this.getAccessToken) { try { await doLogout() } catch { console.log('注销Token失败') } } - this.setToken(undefined) + this.setAccessToken(undefined) this.setSessionTimeout(false) this.setUserInfo(null) goLogin && router.push(PageEnum.BASE_LOGIN) diff --git a/src/utils/auth/index.ts b/src/utils/auth/index.ts index e67f9f33..35e9fda2 100644 --- a/src/utils/auth/index.ts +++ b/src/utils/auth/index.ts @@ -1,13 +1,33 @@ import { Persistent, BasicKeys } from '@/utils/cache/persistent' import { CacheTypeEnum } from '@/enums/cacheEnum' import projectSetting from '@/settings/projectSetting' -import { TOKEN_KEY } from '@/enums/cacheEnum' +import { ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, TENANT_ID_KEY } from '@/enums/cacheEnum' const { permissionCacheType } = projectSetting const isLocal = permissionCacheType === CacheTypeEnum.LOCAL -export function getToken() { - return getAuthCache(TOKEN_KEY) +export function getAccessToken() { + return getAuthCache(ACCESS_TOKEN_KEY) +} + +export function setAccessToken(value) { + return setAuthCache(ACCESS_TOKEN_KEY, value) +} + +export function getRefreshToken() { + return getAuthCache(REFRESH_TOKEN_KEY) +} + +export function setRefreshToken(value) { + return setAuthCache(REFRESH_TOKEN_KEY, value) +} + +export function getTenantId() { + return getAuthCache(TENANT_ID_KEY) +} + +export function setTenantId(value) { + return setAuthCache(TENANT_ID_KEY, value) } export function getAuthCache(key: BasicKeys) { diff --git a/src/utils/cache/persistent.ts b/src/utils/cache/persistent.ts index 90ccba31..aa033cdb 100644 --- a/src/utils/cache/persistent.ts +++ b/src/utils/cache/persistent.ts @@ -5,7 +5,9 @@ import type { RouteLocationNormalized } from 'vue-router' import { createLocalStorage, createSessionStorage } from '@/utils/cache' import { Memory } from './memory' import { - TOKEN_KEY, + ACCESS_TOKEN_KEY, + REFRESH_TOKEN_KEY, + TENANT_ID_KEY, USER_INFO_KEY, ROLES_KEY, LOCK_INFO_KEY, @@ -19,7 +21,9 @@ import { toRaw } from 'vue' import { pick, omit } from 'lodash-es' interface BasicStore { - [TOKEN_KEY]: string | number | null | undefined + [ACCESS_TOKEN_KEY]: string | number | null | undefined + [REFRESH_TOKEN_KEY]: string | number | null | undefined + [TENANT_ID_KEY]: number | null | undefined [USER_INFO_KEY]: UserInfo [ROLES_KEY]: string[] [LOCK_INFO_KEY]: LockInfo @@ -101,11 +105,11 @@ window.addEventListener('beforeunload', function () { // LOCK_INFO_KEY 在锁屏和解锁时写入,此处也不应修改 ls.set(APP_LOCAL_CACHE_KEY, { ...omit(localMemory.getCache, LOCK_INFO_KEY), - ...pick(ls.get(APP_LOCAL_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]) + ...pick(ls.get(APP_LOCAL_CACHE_KEY), [ACCESS_TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]) }) ss.set(APP_SESSION_CACHE_KEY, { ...omit(sessionMemory.getCache, LOCK_INFO_KEY), - ...pick(ss.get(APP_SESSION_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]) + ...pick(ss.get(APP_SESSION_CACHE_KEY), [ACCESS_TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]) }) }) diff --git a/src/views/demo/charts/Line.vue b/src/views/demo/charts/Line.vue deleted file mode 100644 index 6415f46b..00000000 --- a/src/views/demo/charts/Line.vue +++ /dev/null @@ -1,107 +0,0 @@ - - diff --git a/src/views/demo/charts/Map.vue b/src/views/demo/charts/Map.vue deleted file mode 100644 index 0cbece8a..00000000 --- a/src/views/demo/charts/Map.vue +++ /dev/null @@ -1,65 +0,0 @@ - - diff --git a/src/views/demo/charts/Pie.vue b/src/views/demo/charts/Pie.vue deleted file mode 100644 index 02e3bcef..00000000 --- a/src/views/demo/charts/Pie.vue +++ /dev/null @@ -1,125 +0,0 @@ - - diff --git a/src/views/demo/charts/SaleRadar.vue b/src/views/demo/charts/SaleRadar.vue deleted file mode 100644 index 264fc614..00000000 --- a/src/views/demo/charts/SaleRadar.vue +++ /dev/null @@ -1,90 +0,0 @@ - - diff --git a/src/views/demo/charts/china.json b/src/views/demo/charts/china.json deleted file mode 100644 index 96d37e57..00000000 --- a/src/views/demo/charts/china.json +++ /dev/null @@ -1,839 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "id": "710000", - "properties": { - "id": "710000", - "cp": [121.509062, 24.044332], - "name": "台湾", - "childNum": 6 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@°Ü¯Û"], - ["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"], - ["@@\\p|WoYG¿¥I†j@¢"], - ["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"], - ["@@ÆEE—„kWqë @œ"], - ["@@fced"], - ["@@„¯ɜÄèaì¯ØǓIġĽ"], - ["@@çûĖ롖hòř "] - ], - "encodeOffsets": [ - [[122886, 24033]], - [[123335, 22980]], - [[122375, 24193]], - [[122518, 24117]], - [[124427, 22618]], - [[124862, 26043]], - [[126259, 26318]], - [[127671, 26683]] - ] - } - }, - { - "type": "Feature", - "id": "130000", - "properties": { - "id": "130000", - "cp": [114.502461, 38.045474], - "name": "河北", - "childNum": 3 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e"], - ["@@U`Ts¿m‚"], - [ - "@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧĖ¸fŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgʊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|Ç°…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃĶš¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\tŽa\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@cĢ¬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®VŠ¹d^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qᵧš™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚" - ] - ], - "encodeOffsets": [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]] - } - }, - { - "type": "Feature", - "id": "140000", - "properties": { - "id": "140000", - "cp": [111.849248, 36.857014], - "name": "山西", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz" - ], - "encodeOffsets": [[116874, 41716]] - } - }, - { - "type": "Feature", - "id": "150000", - "properties": { - "id": "150000", - "cp": [111.670801, 41.818311], - "name": "内蒙古", - "childNum": 2 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - "@@¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–Rë¥_ŽsgÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉv¦wĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ȈÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µsKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢƒĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTЪŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFĒœƌXƲąo½Ę‘\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ġu¦öČ^â£Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ" - ] - ], - "encodeOffsets": [[[129102, 52189]]] - } - }, - { - "type": "Feature", - "id": "210000", - "properties": { - "id": "210000", - "cp": [123.429096, 41.796767], - "name": "辽宁", - "childNum": 16 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@L–Ž@@s™a"], - ["@@MnNm"], - ["@@d‚c"], - ["@@eÀ‚C@b‚“‰"], - ["@@f‡…Xwkbr–Ä`qg"], - ["@@^jtW‘Q"], - ["@@~ Y]c"], - ["@@G`ĔN^_¿Z‚ÃM"], - ["@@iX¶B‹Y"], - ["@@„YƒZ"], - ["@@L_{Epf"], - ["@@^WqCT\\"], - ["@@\\[“‹§t|”¤_"], - ["@@m`n_"], - ["@@Ïxnj{q_×^Giip"], - [ - "@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA" - ] - ], - "encodeOffsets": [ - [[123686, 41445]], - [[126019, 40435]], - [[124393, 40128]], - [[126117, 39963]], - [[125322, 40140]], - [[126686, 40700]], - [[126041, 40374]], - [[125584, 40168]], - [[125453, 40165]], - [[125362, 40214]], - [[125280, 40291]], - [[125774, 39997]], - [[125976, 40496]], - [[125822, 39993]], - [[125509, 40217]], - [[122731, 40949]] - ] - } - }, - { - "type": "Feature", - "id": "220000", - "properties": { "id": "220000", "cp": [125.3245, 43.886841], "name": "吉林", "childNum": 1 }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG" - ], - "encodeOffsets": [[130196, 42528]] - } - }, - { - "type": "Feature", - "id": "230000", - "properties": { - "id": "230000", - "cp": [128.642464, 46.756967], - "name": "黑龙江", - "childNum": 2 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - "@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tŽ¸ĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]" - ] - ], - "encodeOffsets": [[[134456, 44547]]] - } - }, - { - "type": "Feature", - "id": "320000", - "properties": { - "id": "320000", - "cp": [119.767413, 33.041544], - "name": "江苏", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@cþÅPiŠ`ZŸRu¥É\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ" - ], - "encodeOffsets": [[121740, 32276]] - } - }, - { - "type": "Feature", - "id": "330000", - "properties": { - "id": "330000", - "cp": [120.153576, 29.287459], - "name": "浙江", - "childNum": 45 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@E^dQ]K"], - ["@@jX^j‡"], - ["@@sfŠbU‡"], - ["@@qP\\xz[ck"], - ["@@‘Rƒ¢‚FX}°[s_"], - ["@@Cbœ\\—}"], - ["@@e|v\\la{u"], - ["@@v~u}"], - ["@@QxÂF¯}"], - ["@@¹nŒvÞs¯o"], - ["@@rSkUEj"], - ["@@bi­ZŒP"], - ["@@p[}INf"], - ["@@À¿€"], - ["@@¹dnbŒ…"], - ["@@rSŸBnR"], - ["@@g~h}"], - ["@@FlEk"], - ["@@OdPc"], - ["@@v[u\\"], - ["@@FjâL~wyoo~›sµL–\\"], - ["@@¬e¹aNˆ"], - ["@@\\nÔ¡q]L³ë\\ÿ®ŒQ֎"], - ["@@ÊA­©[¬"], - ["@@KxŒv­"], - ["@@@hlIk]"], - ["@@pW{o||j"], - ["@@Md|_mC"], - ["@@¢…X£ÏylD¼XˆtH"], - ["@@hlÜ[LykAvyfw^Ež›¤"], - ["@@fp¤Mus“R"], - ["@@®_ma~•LÁ¬šZ"], - ["@@iM„xZ"], - ["@@ZcYd"], - ["@@Z~dOSo|A¿qZv"], - ["@@@`”EN¡v"], - ["@@|–TY{"], - ["@@@n@m"], - ["@@XWkCT\\"], - ["@@ºwšZRkĕWO¢"], - ["@@™X®±Grƪ\\ÔáXq{‹"], - ["@@ůTG°ĄLHm°UC‹"], - [ - "@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВjē¢·ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈڜĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst" - ], - ["@@o\\V’zRZ}y"], - ["@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™"] - ], - "encodeOffsets": [ - [[125592, 31553]], - [[125785, 31436]], - [[125729, 31431]], - [[125513, 31380]], - [[125223, 30438]], - [[125115, 30114]], - [[124815, 29155]], - [[124419, 28746]], - [[124095, 28635]], - [[124005, 28609]], - [[125000, 30713]], - [[125111, 30698]], - [[125078, 30682]], - [[125150, 30684]], - [[124014, 28103]], - [[125008, 31331]], - [[125411, 31468]], - [[125329, 31479]], - [[125626, 30916]], - [[125417, 30956]], - [[125254, 30976]], - [[125199, 30997]], - [[125095, 31058]], - [[125083, 30915]], - [[124885, 31015]], - [[125218, 30798]], - [[124867, 30838]], - [[124755, 30788]], - [[124802, 30809]], - [[125267, 30657]], - [[125218, 30578]], - [[125200, 30562]], - [[124968, 30474]], - [[125167, 30396]], - [[124955, 29879]], - [[124714, 29781]], - [[124762, 29462]], - [[124325, 28754]], - [[123990, 28459]], - [[125366, 31477]], - [[125115, 30363]], - [[125369, 31139]], - [[122495, 31878]], - [[125329, 30690]], - [[125192, 30787]] - ] - } - }, - { - "type": "Feature", - "id": "340000", - "properties": { "id": "340000", "cp": [117.283042, 31.26119], "name": "安徽", "childNum": 3 }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@^iuLX^"], - ["@@‚e©Ehl"], - [ - "@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜƶĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆߎF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴĖ¶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´" - ] - ], - "encodeOffsets": [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]] - } - }, - { - "type": "Feature", - "id": "350000", - "properties": { - "id": "350000", - "cp": [118.306239, 26.075302], - "name": "福建", - "childNum": 18 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@“zht´‡]"], - ["@@aj^~ĆG—©O"], - ["@@ed¨„C}}i"], - ["@@@vˆPGsQ"], - ["@@‰sBz‚ddW]Q"], - ["@@SŽ¨Q“{"], - ["@@NŽVucW"], - ["@@qptBAq"], - ["@@‰’¸[mu"], - ["@@Q\\pD]_"], - ["@@jSwUadpF"], - ["@@eXª~ƒ•"], - ["@@AjvFso"], - ["@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy€°"], - ["@@IjJi"], - ["@@wJI€ˆxš«¼AoNe{M­"], - ["@@K‰±¡Óˆ”ČäeZ"], - [ - "@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\_" - ] - ], - "encodeOffsets": [ - [[123250, 27563]], - [[122541, 27268]], - [[123020, 27189]], - [[122916, 27125]], - [[122887, 26845]], - [[122808, 26762]], - [[122568, 25912]], - [[122778, 26197]], - [[122515, 26757]], - [[122816, 26587]], - [[123388, 27005]], - [[122450, 26243]], - [[122578, 25962]], - [[121255, 25103]], - [[120987, 24903]], - [[122339, 25802]], - [[121042, 25093]], - [[122439, 26024]] - ] - } - }, - { - "type": "Feature", - "id": "360000", - "properties": { - "id": "360000", - "cp": [115.592151, 27.676493], - "name": "江西", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@ĢĨƐgļˆ¼ÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗā¼‹mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\˜„L‚‘²" - ], - "encodeOffsets": [[116689, 26234]] - } - }, - { - "type": "Feature", - "id": "370000", - "properties": { - "id": "370000", - "cp": [118.000923, 36.275807], - "name": "山东", - "childNum": 13 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@Xjd]{K"], - ["@@itbFHy"], - ["@@HlGk"], - ["@@T‚ŒGŸy"], - ["@@K¬˜•‹U"], - ["@@WdXc"], - ["@@PtOs"], - ["@@•LnXhc"], - ["@@ppVƒu]Or"], - ["@@cdzAUa"], - ["@@udRhnCI‡"], - ["@@ˆoIƒpR„"], - [ - "@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞƄLĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌĒœbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐĖ¹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸Y’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuŁŒg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ" - ] - ], - "encodeOffsets": [ - [[123806, 39303]], - [[123821, 39266]], - [[123742, 39256]], - [[123702, 39203]], - [[123649, 39066]], - [[123847, 38933]], - [[123580, 38839]], - [[123894, 37288]], - [[123043, 36624]], - [[123344, 38676]], - [[123522, 38857]], - [[123628, 38858]], - [[118260, 36742]] - ] - } - }, - { - "type": "Feature", - "id": "410000", - "properties": { - "id": "410000", - "cp": [113.665412, 33.757975], - "name": "河南", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼Pk–„|m" - ], - "encodeOffsets": [[118256, 37017]] - } - }, - { - "type": "Feature", - "id": "420000", - "properties": { - "id": "420000", - "cp": [113.298572, 30.684355], - "name": "湖北", - "childNum": 3 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@AB‚"], - ["@@lskt"], - [ - "@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙ抚ŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYŠ§HK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆĢ¶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤" - ] - ], - "encodeOffsets": [[[113712, 34000]], [[115612, 30507]], [[113649, 34054]]] - } - }, - { - "type": "Feature", - "id": "430000", - "properties": { "id": "430000", "cp": [111.782279, 28.09409], "name": "湖南", "childNum": 3 }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@—n„FTs"], - ["@@ßÅÆችÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–Ģ¾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M"], - [ - "@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJĪ²SÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUŠ¾Å‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPĪ±œ£EXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\Ĕ[N¥ˀmĎă’J\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎŪƒƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ" - ] - ], - "encodeOffsets": [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]] - } - }, - { - "type": "Feature", - "id": "440000", - "properties": { - "id": "440000", - "cp": [113.280637, 23.125178], - "name": "广东", - "childNum": 24 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@QdˆAua"], - ["@@ƒlxDLo"], - ["@@sbhNLo"], - ["@@Ă āŸ"], - ["@@WltO[["], - ["@@Krœ]S"], - ["@@e„„I]y"], - ["@@I|„Mym"], - ["@@ƒÛ³LSŒž¼Y"], - ["@@nvºB–ëui©`¾"], - ["@@zdšÛ›Jw®"], - ["@@†°…¯"], - ["@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o"], - ["@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh"], - ["@@‹¶Ý’Ì‚vmĞh­ı‡Q"], - ["@@HœŠdSjĒ¢D}war…“u«ZqadYM"], - ["@@elŒ\\LqqU"], - ["@@~rMo\\"], - ["@@f„^ƒC"], - ["@@øPªoj÷ÍÝħXČx”°Q¨ıXNv"], - ["@@gÇƳˆŽˆ”oˆŠˆ[~tly"], - ["@@E–ÆC¿‘"], - ["@@OŽP"], - [ - "@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéʌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i" - ] - ], - "encodeOffsets": [ - [[117381, 22988]], - [[116552, 22934]], - [[116790, 22617]], - [[116973, 22545]], - [[116444, 22536]], - [[116931, 22515]], - [[116496, 22490]], - [[116453, 22449]], - [[113301, 21439]], - [[118726, 21604]], - [[118709, 21486]], - [[113210, 20816]], - [[115482, 22082]], - [[113171, 21585]], - [[113199, 21590]], - [[115232, 22102]], - [[115739, 22373]], - [[115134, 22184]], - [[113056, 21175]], - [[119573, 21271]], - [[119957, 24020]], - [[115859, 22356]], - [[116561, 22649]], - [[116285, 22746]] - ] - } - }, - { - "type": "Feature", - "id": "450000", - "properties": { "id": "450000", "cp": [108.320004, 22.82402], "name": "广西", "childNum": 2 }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@H– TQ§•A"], - [ - "@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloŽ¤™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆƌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FĻ¼Ĺ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•Eģ‰•E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢J" - ] - ], - "encodeOffsets": [[[111707, 21520]], [[107619, 25527]]] - } - }, - { - "type": "Feature", - "id": "460000", - "properties": { "id": "460000", "cp": [109.83119, 19.031971], "name": "海南", "childNum": 1 }, - "geometry": { - "type": "Polygon", - "coordinates": ["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ "], - "encodeOffsets": [[112750, 20508]] - } - }, - { - "type": "Feature", - "id": "510000", - "properties": { - "id": "510000", - "cp": [104.065735, 30.659462], - "name": "四川", - "childNum": 2 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@LqKr"], - [ - "@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZŽ°Iä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`ĀŠz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû^›" - ] - ], - "encodeOffsets": [[[108815, 30935]], [[110617, 31811]]] - } - }, - { - "type": "Feature", - "id": "520000", - "properties": { - "id": "520000", - "cp": [106.713478, 26.578343], - "name": "贵州", - "childNum": 3 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@†G\\†lY£‘in"], - ["@@q‚|ˆ‚mc¯tχVSÎ"], - [ - "@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒhŽ¶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KŠ³ŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}Ž±žGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝƀ‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½" - ] - ], - "encodeOffsets": [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]] - } - }, - { - "type": "Feature", - "id": "530000", - "properties": { - "id": "530000", - "cp": [101.512251, 24.740609], - "name": "云南", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèƶStǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyŽ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSį¯‘³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\Ī¼Ä£UsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`" - ], - "encodeOffsets": [[104636, 22969]] - } - }, - { - "type": "Feature", - "id": "540000", - "properties": { "id": "540000", "cp": [89.132212, 30.860361], "name": "西藏", "childNum": 1 }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@hžľxŽŖ‰xƒÒVŽ†ºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|Ł˜¦AvŽ¦w`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdŠ‰ªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVŠµ‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£àč²‹ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæńhnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„Ē°¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûĀŠìÖT¬¸^}Ìsòd´_Ž‡KgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxŠ¶F”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©" - ], - "encodeOffsets": [[90849, 37210]] - } - }, - { - "type": "Feature", - "id": "610000", - "properties": { - "id": "610000", - "cp": [108.948024, 34.263161], - "name": "陕西", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OĻ¹S|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cĎ°Â[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~Š¦UbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj" - ], - "encodeOffsets": [[110234, 38774]] - } - }, - { - "type": "Feature", - "id": "620000", - "properties": { - "id": "620000", - "cp": [103.823557, 36.058039], - "name": "甘肃", - "childNum": 2 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@VuUv"], - [ - "@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBŠ°aZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aŠ¹cčecÇN•ĊãÁ\\č¯—dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]Aģ±¯‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮŽ°Ɲ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK" - ] - ], - "encodeOffsets": [[[108619, 36299]], [[108589, 36341]]] - } - }, - { - "type": "Feature", - "id": "630000", - "properties": { "id": "630000", "cp": [96.778916, 35.623178], "name": "青海", "childNum": 2 }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@InJm"], - [ - "@@CƒÆ½OŃĦsΰ~Ē³¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNĪŒĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kĀŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoį£ŸÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Óļ©•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSòėš£˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbŠ¸•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňbĚ°ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌĪ¶ƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg" - ] - ], - "encodeOffsets": [[[105308, 37219]], [[95370, 40081]]] - } - }, - { - "type": "Feature", - "id": "640000", - "properties": { "id": "640000", "cp": [106.278179, 37.26637], "name": "宁夏", "childNum": 2 }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - "@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßRĶŒX¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀĖ¾iİbjÕ" - ], - ["@@mfwěwMrŢªv@G‰"] - ], - "encodeOffsets": [[[109366, 40242]], [[108600, 36303]]] - } - }, - { - "type": "Feature", - "id": "650000", - "properties": { "id": "650000", "cp": [85.617733, 40.792818], "name": "新疆", "childNum": 1 }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@QØĔ²X¨”~ǘBºjʐßØvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZĶƒèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYwē¨ƒ{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~ź¯šf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’Ūƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FŽ‡Rěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ" - ], - "encodeOffsets": [[88824, 50096]] - } - }, - { - "type": "Feature", - "id": "110000", - "properties": { - "id": "110000", - "cp": [116.405285, 39.904989], - "name": "北京", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`Š¹­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwŚ¨Ud®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¥A¨Ï‘Ѩj¯ŠX\\¯œMK‘pA³[H…īu}}" - ], - "encodeOffsets": [[120023, 41045]] - } - }, - { - "type": "Feature", - "id": "120000", - "properties": { - "id": "120000", - "cp": [117.190182, 39.125596], - "name": "天津", - "childNum": 1 - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - "@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~" - ], - "encodeOffsets": [[120237, 41215]] - } - }, - { - "type": "Feature", - "id": "310000", - "properties": { - "id": "310000", - "cp": [121.472644, 31.231706], - "name": "上海", - "childNum": 6 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@ɧư¬EpƸÁxc‡"], - ["@@©„ªƒ"], - ["@@”MA‹‘š"], - ["@@Qp݁E§ÉC¾"], - ["@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó"], - ["@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį"] - ], - "encodeOffsets": [[[124702, 32062]], [[124547, 32200]], [[124808, 31991]], [[124726, 32110]], [[124903, 32376]], [[124438, 32149]]] - } - }, - { - "type": "Feature", - "id": "500000", - "properties": { - "id": "500000", - "cp": [107.304962, 29.533155], - "name": "重庆", - "childNum": 2 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - "@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\ÂoVnŽÓØ͙²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBŠ¦zG¸rHe‚„N\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN" - ], - ["@@ifjN@s"] - ], - "encodeOffsets": [[[109628, 30765]], [[111725, 31320]]] - } - }, - { - "type": "Feature", - "id": "810000", - "properties": { - "id": "810000", - "cp": [114.173355, 22.320048], - "name": "香港", - "childNum": 5 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - ["@@AlBk"], - ["@@mŽn"], - ["@@EpFo"], - ["@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKŽ°ä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc"], - ["@@rMUw‡AS®€e"] - ], - "encodeOffsets": [[[117111, 23002]], [[117072, 22876]], [[117045, 22887]], [[116975, 23082]], [[116882, 22747]]] - } - }, - { - "type": "Feature", - "id": "820000", - "properties": { "id": "820000", "cp": [113.54909, 22.198951], "name": "澳门", "childNum": 1 }, - "geometry": { - "type": "Polygon", - "coordinates": ["@@kÊd°å§s"], - "encodeOffsets": [[116279, 22639]] - } - } - ], - "UTF8Encoding": true -} diff --git a/src/views/demo/charts/data.ts b/src/views/demo/charts/data.ts deleted file mode 100644 index d7d2411c..00000000 --- a/src/views/demo/charts/data.ts +++ /dev/null @@ -1,189 +0,0 @@ -export const mapData: any = [ - { - name: '北京', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '天津', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '上海', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '重庆', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '河北', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '河南', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '云南', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '辽宁', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '黑龙江', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '湖南', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '安徽', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '山东', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '新疆', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '江苏', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '浙江', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '江西', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '湖北', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '广西', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '甘肃', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '山西', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '内蒙古', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '陕西', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '吉林', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '福建', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '贵州', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '广东', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '青海', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '西藏', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '四川', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '宁夏', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '海南', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '台湾', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '香港', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - }, - { - name: '澳门', - value: Math.round(Math.random() * 1000), - tipData: [Math.round(Math.random() * 1000), Math.round(Math.random() * 1000)] - } -] - -export const getLineData = (() => { - const category: any[] = [] - let dottedBase = +new Date() - const lineData: any[] = [] - const barData: any[] = [] - - for (let i = 0; i < 20; i++) { - const date = new Date((dottedBase += 1000 * 3600 * 24)) - category.push([date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-')) - const b = Math.random() * 200 - const d = Math.random() * 200 - barData.push(b) - lineData.push(d + b) - } - return { barData, category, lineData } -})() diff --git a/src/views/demo/charts/map/Baidu.vue b/src/views/demo/charts/map/Baidu.vue deleted file mode 100644 index 14505806..00000000 --- a/src/views/demo/charts/map/Baidu.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/src/views/demo/charts/map/Gaode.vue b/src/views/demo/charts/map/Gaode.vue deleted file mode 100644 index 20753bab..00000000 --- a/src/views/demo/charts/map/Gaode.vue +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/src/views/demo/charts/map/Google.vue b/src/views/demo/charts/map/Google.vue deleted file mode 100644 index 7f3136fd..00000000 --- a/src/views/demo/charts/map/Google.vue +++ /dev/null @@ -1,40 +0,0 @@ - - diff --git a/src/views/demo/comp/button/index.vue b/src/views/demo/comp/button/index.vue deleted file mode 100644 index 6faa5cb1..00000000 --- a/src/views/demo/comp/button/index.vue +++ /dev/null @@ -1,106 +0,0 @@ - - diff --git a/src/views/demo/comp/card-list/index.vue b/src/views/demo/comp/card-list/index.vue deleted file mode 100644 index 82b52b33..00000000 --- a/src/views/demo/comp/card-list/index.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/src/views/demo/comp/count-to/index.vue b/src/views/demo/comp/count-to/index.vue deleted file mode 100644 index 7668c087..00000000 --- a/src/views/demo/comp/count-to/index.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/src/views/demo/comp/cropper/index.vue b/src/views/demo/comp/cropper/index.vue deleted file mode 100644 index 07a40a87..00000000 --- a/src/views/demo/comp/cropper/index.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - diff --git a/src/views/demo/comp/desc/index.vue b/src/views/demo/comp/desc/index.vue deleted file mode 100644 index 5134c049..00000000 --- a/src/views/demo/comp/desc/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/Drawer1.vue b/src/views/demo/comp/drawer/Drawer1.vue deleted file mode 100644 index 02070601..00000000 --- a/src/views/demo/comp/drawer/Drawer1.vue +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/Drawer2.vue b/src/views/demo/comp/drawer/Drawer2.vue deleted file mode 100644 index f104e20b..00000000 --- a/src/views/demo/comp/drawer/Drawer2.vue +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/Drawer3.vue b/src/views/demo/comp/drawer/Drawer3.vue deleted file mode 100644 index a4d5420a..00000000 --- a/src/views/demo/comp/drawer/Drawer3.vue +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/Drawer4.vue b/src/views/demo/comp/drawer/Drawer4.vue deleted file mode 100644 index 0dda5630..00000000 --- a/src/views/demo/comp/drawer/Drawer4.vue +++ /dev/null @@ -1,46 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/Drawer5.vue b/src/views/demo/comp/drawer/Drawer5.vue deleted file mode 100644 index 506eea2f..00000000 --- a/src/views/demo/comp/drawer/Drawer5.vue +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/src/views/demo/comp/drawer/index.vue b/src/views/demo/comp/drawer/index.vue deleted file mode 100644 index 83192479..00000000 --- a/src/views/demo/comp/drawer/index.vue +++ /dev/null @@ -1,50 +0,0 @@ - - diff --git a/src/views/demo/comp/flow-chart/dataTurbo.json b/src/views/demo/comp/flow-chart/dataTurbo.json deleted file mode 100644 index f6432c4e..00000000 --- a/src/views/demo/comp/flow-chart/dataTurbo.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "flowElementList": [ - { - "incoming": [], - "outgoing": ["Flow_33inf2k"], - "dockers": [], - "type": 2, - "properties": { - "a": "efrwe", - "b": "wewe", - "name": "开始", - "x": 280, - "y": 200, - "text": { - "x": 280, - "y": 200, - "value": "开始" - }, - "logicFlowType": "bpmn:startEvent" - }, - "key": "Event_1d42u4p" - }, - { - "incoming": ["Flow_379e0o9"], - "outgoing": [], - "dockers": [], - "type": 3, - "properties": { - "a": "efrwe", - "b": "wewe", - "name": "结束", - "x": 920, - "y": 200, - "text": { - "x": 920, - "y": 200, - "value": "结束" - }, - "logicFlowType": "bpmn:endEvent" - }, - "key": "Event_08p8i6q" - }, - { - "incoming": ["Flow_0pfouf0"], - "outgoing": ["Flow_3918lhh"], - "dockers": [], - "type": 6, - "properties": { - "a": "efrwe", - "b": "wewe", - "name": "网关", - "x": 580, - "y": 200, - "text": { - "x": 580, - "y": 200, - "value": "网关" - }, - "logicFlowType": "bpmn:exclusiveGateway" - }, - "key": "Gateway_1fngqgj" - }, - { - "incoming": ["Flow_33inf2k"], - "outgoing": ["Flow_0pfouf0"], - "dockers": [], - "type": 4, - "properties": { - "a": "efrwe", - "b": "wewe", - "name": "用户", - "x": 420, - "y": 200, - "text": { - "x": 420, - "y": 200, - "value": "用户" - }, - "logicFlowType": "bpmn:userTask" - }, - "key": "Activity_2mgtaia" - }, - { - "incoming": ["Flow_3918lhh"], - "outgoing": ["Flow_379e0o9"], - "dockers": [], - "type": 5, - "properties": { - "a": "efrwe", - "b": "wewe", - "name": "服务", - "x": 760, - "y": 200, - "text": { - "x": 760, - "y": 200, - "value": "服务" - }, - "logicFlowType": "bpmn:serviceTask" - }, - "key": "Activity_1sp8qc8" - }, - { - "incoming": ["Event_1d42u4p"], - "outgoing": ["Activity_2mgtaia"], - "type": 1, - "dockers": [], - "properties": { - "name": "边", - "text": { - "x": 331, - "y": 200, - "value": "边" - }, - "startPoint": { - "x": 298, - "y": 200 - }, - "endPoint": { - "x": 370, - "y": 200 - }, - "pointsList": [ - { - "x": 298, - "y": 200 - }, - { - "x": 370, - "y": 200 - } - ], - "logicFlowType": "bpmn:sequenceFlow" - }, - "key": "Flow_33inf2k" - }, - { - "incoming": ["Activity_2mgtaia"], - "outgoing": ["Gateway_1fngqgj"], - "type": 1, - "dockers": [], - "properties": { - "name": "边2", - "text": { - "x": 507, - "y": 200, - "value": "边2" - }, - "startPoint": { - "x": 470, - "y": 200 - }, - "endPoint": { - "x": 555, - "y": 200 - }, - "pointsList": [ - { - "x": 470, - "y": 200 - }, - { - "x": 555, - "y": 200 - } - ], - "logicFlowType": "bpmn:sequenceFlow" - }, - "key": "Flow_0pfouf0" - }, - { - "incoming": ["Gateway_1fngqgj"], - "outgoing": ["Activity_1sp8qc8"], - "type": 1, - "dockers": [], - "properties": { - "name": "边3", - "text": { - "x": 664, - "y": 200, - "value": "边3" - }, - "startPoint": { - "x": 605, - "y": 200 - }, - "endPoint": { - "x": 710, - "y": 200 - }, - "pointsList": [ - { - "x": 605, - "y": 200 - }, - { - "x": 710, - "y": 200 - } - ], - "logicFlowType": "bpmn:sequenceFlow" - }, - "key": "Flow_3918lhh" - }, - { - "incoming": ["Activity_1sp8qc8"], - "outgoing": ["Event_08p8i6q"], - "type": 1, - "dockers": [], - "properties": { - "name": "边4", - "text": { - "x": 871, - "y": 200, - "value": "边4" - }, - "startPoint": { - "x": 810, - "y": 200 - }, - "endPoint": { - "x": 902, - "y": 200 - }, - "pointsList": [ - { - "x": 810, - "y": 200 - }, - { - "x": 902, - "y": 200 - } - ], - "logicFlowType": "bpmn:sequenceFlow" - }, - "key": "Flow_379e0o9" - } - ] -} diff --git a/src/views/demo/comp/flow-chart/index.vue b/src/views/demo/comp/flow-chart/index.vue deleted file mode 100644 index 88313567..00000000 --- a/src/views/demo/comp/flow-chart/index.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/src/views/demo/comp/lazy/TargetContent.vue b/src/views/demo/comp/lazy/TargetContent.vue deleted file mode 100644 index a71605b5..00000000 --- a/src/views/demo/comp/lazy/TargetContent.vue +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/src/views/demo/comp/lazy/Transition.vue b/src/views/demo/comp/lazy/Transition.vue deleted file mode 100644 index 46d4161b..00000000 --- a/src/views/demo/comp/lazy/Transition.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/src/views/demo/comp/lazy/index.vue b/src/views/demo/comp/lazy/index.vue deleted file mode 100644 index 4933b5c4..00000000 --- a/src/views/demo/comp/lazy/index.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/src/views/demo/comp/loading/index.vue b/src/views/demo/comp/loading/index.vue deleted file mode 100644 index aaa464db..00000000 --- a/src/views/demo/comp/loading/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - diff --git a/src/views/demo/comp/modal/Modal1.vue b/src/views/demo/comp/modal/Modal1.vue deleted file mode 100644 index 0a5bc826..00000000 --- a/src/views/demo/comp/modal/Modal1.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/src/views/demo/comp/modal/Modal2.vue b/src/views/demo/comp/modal/Modal2.vue deleted file mode 100644 index 37253772..00000000 --- a/src/views/demo/comp/modal/Modal2.vue +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/views/demo/comp/modal/Modal3.vue b/src/views/demo/comp/modal/Modal3.vue deleted file mode 100644 index bbe975c8..00000000 --- a/src/views/demo/comp/modal/Modal3.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/src/views/demo/comp/modal/Modal4.vue b/src/views/demo/comp/modal/Modal4.vue deleted file mode 100644 index 5d8f27f8..00000000 --- a/src/views/demo/comp/modal/Modal4.vue +++ /dev/null @@ -1,73 +0,0 @@ - - diff --git a/src/views/demo/comp/modal/index.vue b/src/views/demo/comp/modal/index.vue deleted file mode 100644 index 66835dd0..00000000 --- a/src/views/demo/comp/modal/index.vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/src/views/demo/comp/qrcode/index.vue b/src/views/demo/comp/qrcode/index.vue deleted file mode 100644 index f30a1bba..00000000 --- a/src/views/demo/comp/qrcode/index.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/src/views/demo/comp/scroll/Action.vue b/src/views/demo/comp/scroll/Action.vue deleted file mode 100644 index bf7894ea..00000000 --- a/src/views/demo/comp/scroll/Action.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/src/views/demo/comp/scroll/VirtualScroll.vue b/src/views/demo/comp/scroll/VirtualScroll.vue deleted file mode 100644 index 37427d1e..00000000 --- a/src/views/demo/comp/scroll/VirtualScroll.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/src/views/demo/comp/scroll/index.vue b/src/views/demo/comp/scroll/index.vue deleted file mode 100644 index 3dae1ddc..00000000 --- a/src/views/demo/comp/scroll/index.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/src/views/demo/comp/strength-meter/index.vue b/src/views/demo/comp/strength-meter/index.vue deleted file mode 100644 index 28f2946e..00000000 --- a/src/views/demo/comp/strength-meter/index.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - diff --git a/src/views/demo/comp/transition/index.vue b/src/views/demo/comp/transition/index.vue deleted file mode 100644 index 0614ea4c..00000000 --- a/src/views/demo/comp/transition/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - diff --git a/src/views/demo/comp/upload/index.vue b/src/views/demo/comp/upload/index.vue deleted file mode 100644 index 1f3dfe17..00000000 --- a/src/views/demo/comp/upload/index.vue +++ /dev/null @@ -1,44 +0,0 @@ - - diff --git a/src/views/demo/comp/verify/Rotate.vue b/src/views/demo/comp/verify/Rotate.vue deleted file mode 100644 index 5fbe6baa..00000000 --- a/src/views/demo/comp/verify/Rotate.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/src/views/demo/comp/verify/index.vue b/src/views/demo/comp/verify/index.vue deleted file mode 100644 index 548fb80e..00000000 --- a/src/views/demo/comp/verify/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - diff --git a/src/views/demo/editor/json/index.vue b/src/views/demo/editor/json/index.vue deleted file mode 100644 index 6f0165c7..00000000 --- a/src/views/demo/editor/json/index.vue +++ /dev/null @@ -1,88 +0,0 @@ - - diff --git a/src/views/demo/editor/markdown/Editor.vue b/src/views/demo/editor/markdown/Editor.vue deleted file mode 100644 index ca8e4102..00000000 --- a/src/views/demo/editor/markdown/Editor.vue +++ /dev/null @@ -1,50 +0,0 @@ - - diff --git a/src/views/demo/editor/markdown/index.vue b/src/views/demo/editor/markdown/index.vue deleted file mode 100644 index 2f0c2e2f..00000000 --- a/src/views/demo/editor/markdown/index.vue +++ /dev/null @@ -1,79 +0,0 @@ - - diff --git a/src/views/demo/editor/tinymce/Editor.vue b/src/views/demo/editor/tinymce/Editor.vue deleted file mode 100644 index 530583ed..00000000 --- a/src/views/demo/editor/tinymce/Editor.vue +++ /dev/null @@ -1,51 +0,0 @@ - - diff --git a/src/views/demo/editor/tinymce/index.vue b/src/views/demo/editor/tinymce/index.vue deleted file mode 100644 index 07cdbd3c..00000000 --- a/src/views/demo/editor/tinymce/index.vue +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/src/views/demo/excel/ArrayExport.vue b/src/views/demo/excel/ArrayExport.vue deleted file mode 100644 index 8bbbcc8c..00000000 --- a/src/views/demo/excel/ArrayExport.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/src/views/demo/excel/CustomExport.vue b/src/views/demo/excel/CustomExport.vue deleted file mode 100644 index 5d6aeea1..00000000 --- a/src/views/demo/excel/CustomExport.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/src/views/demo/excel/ImportExcel.vue b/src/views/demo/excel/ImportExcel.vue deleted file mode 100644 index a004fcce..00000000 --- a/src/views/demo/excel/ImportExcel.vue +++ /dev/null @@ -1,46 +0,0 @@ - - diff --git a/src/views/demo/excel/JsonExport.vue b/src/views/demo/excel/JsonExport.vue deleted file mode 100644 index e9199fae..00000000 --- a/src/views/demo/excel/JsonExport.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/src/views/demo/excel/data.ts b/src/views/demo/excel/data.ts deleted file mode 100644 index 9d4c3e94..00000000 --- a/src/views/demo/excel/data.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { BasicColumn } from '@/components/Table' - -export const columns: BasicColumn[] = [ - { - title: 'ID', - dataIndex: 'id', - width: 80 - }, - { - title: '姓名', - dataIndex: 'name', - width: 120 - }, - { - title: '年龄', - dataIndex: 'age', - width: 80 - }, - { - title: '编号', - dataIndex: 'no', - width: 80 - }, - { - title: '地址', - dataIndex: 'address' - }, - { - title: '开始时间', - dataIndex: 'beginTime' - }, - { - title: '结束时间', - dataIndex: 'endTime' - } -] - -export const data: any[] = (() => { - const arr: any[] = [] - for (let index = 0; index < 40; index++) { - arr.push({ - id: `${index}`, - name: `${index} John Brown`, - age: `${index + 10}`, - no: `${index}98678`, - address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park', - beginTime: new Date().toLocaleString(), - endTime: new Date().toLocaleString() - }) - } - return arr -})() - -// ["ID", "姓名", "年龄", "编号", "地址", "开始时间", "结束时间"] -export const arrHeader = columns.map((column) => column.title) -// [["ID", "姓名", "年龄", "编号", "地址", "开始时间", "结束时间"],["0", "0 John Brown", "10", "098678"]] -export const arrData = data.map((item) => { - return Object.keys(item).map((key) => item[key]) -}) diff --git a/src/views/demo/feat/breadcrumb/ChildrenList.vue b/src/views/demo/feat/breadcrumb/ChildrenList.vue deleted file mode 100644 index aeb497a1..00000000 --- a/src/views/demo/feat/breadcrumb/ChildrenList.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue b/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue deleted file mode 100644 index 351cf1ed..00000000 --- a/src/views/demo/feat/breadcrumb/ChildrenListDetail.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/src/views/demo/feat/breadcrumb/FlatList.vue b/src/views/demo/feat/breadcrumb/FlatList.vue deleted file mode 100644 index d5c226e9..00000000 --- a/src/views/demo/feat/breadcrumb/FlatList.vue +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/src/views/demo/feat/breadcrumb/FlatListDetail.vue b/src/views/demo/feat/breadcrumb/FlatListDetail.vue deleted file mode 100644 index 0be7d273..00000000 --- a/src/views/demo/feat/breadcrumb/FlatListDetail.vue +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/src/views/demo/feat/context-menu/index.vue b/src/views/demo/feat/context-menu/index.vue deleted file mode 100644 index 71b85286..00000000 --- a/src/views/demo/feat/context-menu/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - diff --git a/src/views/demo/feat/copy/index.vue b/src/views/demo/feat/copy/index.vue deleted file mode 100644 index 8f2b99e2..00000000 --- a/src/views/demo/feat/copy/index.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/src/views/demo/feat/download/imgBase64.ts b/src/views/demo/feat/download/imgBase64.ts deleted file mode 100644 index 2af85464..00000000 --- a/src/views/demo/feat/download/imgBase64.ts +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line max-len -export default `data:image/png;base64,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` diff --git a/src/views/demo/feat/download/index.vue b/src/views/demo/feat/download/index.vue deleted file mode 100644 index 58880ee3..00000000 --- a/src/views/demo/feat/download/index.vue +++ /dev/null @@ -1,47 +0,0 @@ - - diff --git a/src/views/demo/feat/full-screen/index.vue b/src/views/demo/feat/full-screen/index.vue deleted file mode 100644 index d14b1333..00000000 --- a/src/views/demo/feat/full-screen/index.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/src/views/demo/feat/icon/index.vue b/src/views/demo/feat/icon/index.vue deleted file mode 100644 index 9c42c535..00000000 --- a/src/views/demo/feat/icon/index.vue +++ /dev/null @@ -1,74 +0,0 @@ - - diff --git a/src/views/demo/feat/img-preview/index.vue b/src/views/demo/feat/img-preview/index.vue deleted file mode 100644 index aacebb02..00000000 --- a/src/views/demo/feat/img-preview/index.vue +++ /dev/null @@ -1,24 +0,0 @@ - - diff --git a/src/views/demo/feat/menu-params/index.vue b/src/views/demo/feat/menu-params/index.vue deleted file mode 100644 index ebd70e78..00000000 --- a/src/views/demo/feat/menu-params/index.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/src/views/demo/feat/msg/index.vue b/src/views/demo/feat/msg/index.vue deleted file mode 100644 index 52c672cf..00000000 --- a/src/views/demo/feat/msg/index.vue +++ /dev/null @@ -1,67 +0,0 @@ - - diff --git a/src/views/demo/feat/print/index.vue b/src/views/demo/feat/print/index.vue deleted file mode 100644 index a991dc39..00000000 --- a/src/views/demo/feat/print/index.vue +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/src/views/demo/feat/request-demo/index.vue b/src/views/demo/feat/request-demo/index.vue deleted file mode 100644 index 9f7bfda2..00000000 --- a/src/views/demo/feat/request-demo/index.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/src/views/demo/feat/ripple/index.vue b/src/views/demo/feat/ripple/index.vue deleted file mode 100644 index 153acdfd..00000000 --- a/src/views/demo/feat/ripple/index.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - diff --git a/src/views/demo/feat/session-timeout/index.vue b/src/views/demo/feat/session-timeout/index.vue deleted file mode 100644 index 96a0d6c2..00000000 --- a/src/views/demo/feat/session-timeout/index.vue +++ /dev/null @@ -1,43 +0,0 @@ - - diff --git a/src/views/demo/feat/tab-params/index.vue b/src/views/demo/feat/tab-params/index.vue deleted file mode 100644 index d5f92eac..00000000 --- a/src/views/demo/feat/tab-params/index.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/src/views/demo/feat/tabs/TabDetail.vue b/src/views/demo/feat/tabs/TabDetail.vue deleted file mode 100644 index 2218babc..00000000 --- a/src/views/demo/feat/tabs/TabDetail.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/src/views/demo/feat/tabs/index.vue b/src/views/demo/feat/tabs/index.vue deleted file mode 100644 index 5175dcb6..00000000 --- a/src/views/demo/feat/tabs/index.vue +++ /dev/null @@ -1,49 +0,0 @@ - - diff --git a/src/views/demo/feat/watermark/index.vue b/src/views/demo/feat/watermark/index.vue deleted file mode 100644 index be2d3297..00000000 --- a/src/views/demo/feat/watermark/index.vue +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/src/views/demo/feat/ws/index.vue b/src/views/demo/feat/ws/index.vue deleted file mode 100644 index 02ab811a..00000000 --- a/src/views/demo/feat/ws/index.vue +++ /dev/null @@ -1,101 +0,0 @@ - - diff --git a/src/views/demo/form/AdvancedForm.vue b/src/views/demo/form/AdvancedForm.vue deleted file mode 100644 index c218204c..00000000 --- a/src/views/demo/form/AdvancedForm.vue +++ /dev/null @@ -1,180 +0,0 @@ - - diff --git a/src/views/demo/form/AppendForm.vue b/src/views/demo/form/AppendForm.vue deleted file mode 100644 index 0367b9ed..00000000 --- a/src/views/demo/form/AppendForm.vue +++ /dev/null @@ -1,122 +0,0 @@ - - diff --git a/src/views/demo/form/CustomerForm.vue b/src/views/demo/form/CustomerForm.vue deleted file mode 100644 index a97b452f..00000000 --- a/src/views/demo/form/CustomerForm.vue +++ /dev/null @@ -1,75 +0,0 @@ - - diff --git a/src/views/demo/form/DynamicForm.vue b/src/views/demo/form/DynamicForm.vue deleted file mode 100644 index e4eab082..00000000 --- a/src/views/demo/form/DynamicForm.vue +++ /dev/null @@ -1,228 +0,0 @@ - - diff --git a/src/views/demo/form/RefForm.vue b/src/views/demo/form/RefForm.vue deleted file mode 100644 index 915e05a7..00000000 --- a/src/views/demo/form/RefForm.vue +++ /dev/null @@ -1,165 +0,0 @@ - - diff --git a/src/views/demo/form/RuleForm.vue b/src/views/demo/form/RuleForm.vue deleted file mode 100644 index b66c0e71..00000000 --- a/src/views/demo/form/RuleForm.vue +++ /dev/null @@ -1,241 +0,0 @@ - - diff --git a/src/views/demo/form/TabsForm.vue b/src/views/demo/form/TabsForm.vue deleted file mode 100644 index 3cdae5cb..00000000 --- a/src/views/demo/form/TabsForm.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/src/views/demo/form/UseForm.vue b/src/views/demo/form/UseForm.vue deleted file mode 100644 index 8c37c834..00000000 --- a/src/views/demo/form/UseForm.vue +++ /dev/null @@ -1,466 +0,0 @@ - - - diff --git a/src/views/demo/form/index.vue b/src/views/demo/form/index.vue deleted file mode 100644 index 5f04bce1..00000000 --- a/src/views/demo/form/index.vue +++ /dev/null @@ -1,684 +0,0 @@ - - diff --git a/src/views/demo/level/Menu111.vue b/src/views/demo/level/Menu111.vue deleted file mode 100644 index 9fcd5c0c..00000000 --- a/src/views/demo/level/Menu111.vue +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/views/demo/level/Menu12.vue b/src/views/demo/level/Menu12.vue deleted file mode 100644 index 4d53543f..00000000 --- a/src/views/demo/level/Menu12.vue +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/views/demo/level/Menu2.vue b/src/views/demo/level/Menu2.vue deleted file mode 100644 index 34f72c87..00000000 --- a/src/views/demo/level/Menu2.vue +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/src/views/demo/main-out/index.vue b/src/views/demo/main-out/index.vue deleted file mode 100644 index 2406632f..00000000 --- a/src/views/demo/main-out/index.vue +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/src/views/demo/page/account/center/Application.vue b/src/views/demo/page/account/center/Application.vue deleted file mode 100644 index 49134c89..00000000 --- a/src/views/demo/page/account/center/Application.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - diff --git a/src/views/demo/page/account/center/Article.vue b/src/views/demo/page/account/center/Article.vue deleted file mode 100644 index d2bbdde9..00000000 --- a/src/views/demo/page/account/center/Article.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/src/views/demo/page/account/center/Project.vue b/src/views/demo/page/account/center/Project.vue deleted file mode 100644 index a55916aa..00000000 --- a/src/views/demo/page/account/center/Project.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/src/views/demo/page/account/center/data.tsx b/src/views/demo/page/account/center/data.tsx deleted file mode 100644 index 9e4b34e8..00000000 --- a/src/views/demo/page/account/center/data.tsx +++ /dev/null @@ -1,124 +0,0 @@ -export interface ListItem { - title: string - icon: string - color?: string -} - -export interface TabItem { - key: string - name: string - component: string -} - -export const tags: string[] = ['很有想法的', '专注设计', '川妹子', '大长腿', '海纳百川', '前端开发', 'vue3'] - -export const teams: ListItem[] = [ - { - icon: 'ri:alipay-fill', - title: '科学搬砖组', - color: '#ff4000' - }, - { - icon: 'emojione-monotone:letter-a', - title: '中二少年团', - color: '#7c51b8' - }, - { - icon: 'ri:alipay-fill', - title: '高逼格设计', - color: '#00adf7' - }, - { - icon: 'jam:codepen-circle', - title: '程序员日常', - color: '#00adf7' - }, - { - icon: 'fa:behance-square', - title: '科学搬砖组', - color: '#7c51b8' - }, - { - icon: 'jam:codepen-circle', - title: '程序员日常', - color: '#ff4000' - } -] - -export const details: ListItem[] = [ - { - icon: 'ic:outline-contacts', - title: '交互专家' - }, - { - icon: 'grommet-icons:cluster', - title: '某某某事业群' - }, - { - icon: 'bx:bx-home-circle', - title: '福建省厦门市' - } -] - -export const achieveList: TabItem[] = [ - { - key: '1', - name: '文章', - component: 'Article' - }, - { - key: '2', - name: '应用', - component: 'Application' - }, - { - key: '3', - name: '项目', - component: 'Project' - } -] - -export const actions: any[] = [ - { icon: 'clarity:star-line', text: '156', color: '#018ffb' }, - { icon: 'bx:bxs-like', text: '156', color: '#459ae8' }, - { icon: 'bx:bxs-message-dots', text: '2', color: '#42d27d' } -] - -export const articleList = (() => { - const result: any[] = [] - for (let i = 0; i < 4; i++) { - result.push({ - title: 'Vben Admin', - description: ['Vben', '设计语言', 'Typescript'], - content: '基于Vue Next, TypeScript, Ant Design实现的一套完整的企业级后台管理系统。', - time: '2020-11-14 11:20' - }) - } - return result -})() - -export const applicationList = (() => { - const result: any[] = [] - for (let i = 0; i < 8; i++) { - result.push({ - title: 'Vben Admin', - icon: 'emojione-monotone:letter-a', - color: '#1890ff', - active: '100', - new: '1,799', - download: 'bx:bx-download' - }) - } - return result -})() - -export const projectList = (() => { - const result: any[] = [] - for (let i = 0; i < 8; i++) { - result.push({ - title: 'Vben Admin', - content: '基于Vue Next, TypeScript, Ant Design实现的一套完整的企业级后台管理系统。' - }) - } - return result -})() diff --git a/src/views/demo/page/account/center/index.vue b/src/views/demo/page/account/center/index.vue deleted file mode 100644 index ecef77d3..00000000 --- a/src/views/demo/page/account/center/index.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - diff --git a/src/views/demo/page/account/setting/AccountBind.vue b/src/views/demo/page/account/setting/AccountBind.vue deleted file mode 100644 index 7e6917e9..00000000 --- a/src/views/demo/page/account/setting/AccountBind.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/src/views/demo/page/account/setting/BaseSetting.vue b/src/views/demo/page/account/setting/BaseSetting.vue deleted file mode 100644 index 83fa66cb..00000000 --- a/src/views/demo/page/account/setting/BaseSetting.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - diff --git a/src/views/demo/page/account/setting/MsgNotify.vue b/src/views/demo/page/account/setting/MsgNotify.vue deleted file mode 100644 index 91576233..00000000 --- a/src/views/demo/page/account/setting/MsgNotify.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/src/views/demo/page/account/setting/SecureSetting.vue b/src/views/demo/page/account/setting/SecureSetting.vue deleted file mode 100644 index 1b5246e9..00000000 --- a/src/views/demo/page/account/setting/SecureSetting.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/src/views/demo/page/account/setting/data.ts b/src/views/demo/page/account/setting/data.ts deleted file mode 100644 index effcf51a..00000000 --- a/src/views/demo/page/account/setting/data.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { FormSchema } from '@/components/Form' - -export interface ListItem { - key: string - title: string - description: string - extra?: string - avatar?: string - color?: string -} - -// tab的list -export const settingList = [ - { - key: '1', - name: '基本设置', - component: 'BaseSetting' - }, - { - key: '2', - name: '安全设置', - component: 'SecureSetting' - }, - { - key: '3', - name: '账号绑定', - component: 'AccountBind' - }, - { - key: '4', - name: '新消息通知', - component: 'MsgNotify' - } -] - -// 基础设置 form -export const baseSetschemas: FormSchema[] = [ - { - field: 'email', - component: 'Input', - label: '邮箱', - colProps: { span: 18 } - }, - { - field: 'name', - component: 'Input', - label: '昵称', - colProps: { span: 18 } - }, - { - field: 'introduction', - component: 'InputTextArea', - label: '个人简介', - colProps: { span: 18 } - }, - { - field: 'phone', - component: 'Input', - label: '联系电话', - colProps: { span: 18 } - }, - { - field: 'address', - component: 'Input', - label: '所在地区', - colProps: { span: 18 } - } -] - -// 安全设置 list -export const secureSettingList: ListItem[] = [ - { - key: '1', - title: '账户密码', - description: '当前密码强度::强', - extra: '修改' - }, - { - key: '2', - title: '密保手机', - description: '已绑定手机::138****8293', - extra: '修改' - }, - { - key: '3', - title: '密保问题', - description: '未设置密保问题,密保问题可有效保护账户安全', - extra: '修改' - }, - { - key: '4', - title: '备用邮箱', - description: '已绑定邮箱::ant***sign.com', - extra: '修改' - }, - { - key: '5', - title: 'MFA 设备', - description: '未绑定 MFA 设备,绑定后,可以进行二次确认', - extra: '修改' - } -] - -// 账号绑定 list -export const accountBindList: ListItem[] = [ - { - key: '1', - title: '绑定淘宝', - description: '当前未绑定淘宝账号', - extra: '绑定', - avatar: 'ri:taobao-fill', - color: '#ff4000' - }, - { - key: '2', - title: '绑定支付宝', - description: '当前未绑定支付宝账号', - extra: '绑定', - avatar: 'fa-brands:alipay', - color: '#2eabff' - }, - { - key: '3', - title: '绑定钉钉', - description: '当前未绑定钉钉账号', - extra: '绑定', - avatar: 'ri:dingding-fill', - color: '#2eabff' - } -] - -// 新消息通知 list -export const msgNotifyList: ListItem[] = [ - { - key: '1', - title: '账户密码', - description: '其他用户的消息将以站内信的形式通知' - }, - { - key: '2', - title: '系统消息', - description: '系统消息将以站内信的形式通知' - }, - { - key: '3', - title: '待办任务', - description: '待办任务将以站内信的形式通知' - } -] diff --git a/src/views/demo/page/account/setting/index.vue b/src/views/demo/page/account/setting/index.vue deleted file mode 100644 index 29bb0f8f..00000000 --- a/src/views/demo/page/account/setting/index.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - diff --git a/src/views/demo/page/desc/basic/data.tsx b/src/views/demo/page/desc/basic/data.tsx deleted file mode 100644 index 5d997a24..00000000 --- a/src/views/demo/page/desc/basic/data.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import { DescItem } from '@/components/Description' -import { BasicColumn } from '@/components/Table/src/types/table' -import { Button } from '@/components/Button' - -import { Badge } from 'ant-design-vue' - -export const refundData = { - a1: '1000000000', - a2: '已取货', - a3: '1234123421', - a4: '3214321432' -} - -export const personData = { - b1: '付小小', - b2: '18100000000', - b3: '菜鸟仓储', - b4: '浙江省杭州市西湖区万塘路18号', - b5: '无' -} -export const refundSchema: DescItem[] = [ - { - field: 'a1', - label: '取货单号' - }, - { - field: 'a2', - label: '状态' - }, - { - field: 'a3', - label: '销售单号' - }, - { - field: 'a4', - label: '子订单' - } -] -export const personSchema: DescItem[] = [ - { - field: 'b1', - label: '用户姓名' - }, - { - field: 'b2', - label: '联系电话' - }, - { - field: 'b3', - label: '常用快递' - }, - { - field: 'b4', - label: '取货地址' - }, - { - field: 'b5', - label: '备注' - } -] - -export const refundTableSchema: BasicColumn[] = [ - { - title: '商品编号', - width: 150, - dataIndex: 't1', - customRender: ({ record }) => { - return ( - - ) - } - }, - { - title: '商品名称', - width: 150, - dataIndex: 't2' - }, - { - title: '商品条码', - width: 150, - dataIndex: 't3' - }, - { - title: '单价 ', - width: 150, - dataIndex: 't4' - }, - { - title: '数量(件) ', - width: 150, - dataIndex: 't5' - }, - { - title: '金额', - width: 150, - dataIndex: 't6' - } -] -export const refundTimeTableSchema: BasicColumn[] = [ - { - title: '时间', - width: 150, - dataIndex: 't1' - }, - { - title: '当前进度', - width: 150, - dataIndex: 't2' - }, - { - title: '状态', - width: 150, - dataIndex: 't3', - customRender: ({ record }) => { - return - } - }, - { - title: '操作员ID ', - width: 150, - dataIndex: 't4' - }, - { - title: '耗时', - width: 150, - dataIndex: 't5' - } -] - -export const refundTableData: any[] = [ - { - t1: 1234561, - t2: '矿泉水 550ml', - t3: '12421432143214321', - t4: '2.00', - t5: 1, - t6: 2.0 - }, - { - t1: 1234562, - t2: '矿泉水 550ml', - t3: '12421432143214321', - t4: '2.00', - t5: 2, - t6: 2.0 - }, - { - t1: 1234562, - t2: '矿泉水 550ml', - t3: '12421432143214321', - t4: '2.00', - t5: 2, - t6: 2.0 - }, - { - t1: 1234562, - t2: '矿泉水 550ml', - t3: '12421432143214321', - t4: '2.00', - t5: 2, - t6: 2.0 - } -] - -export const refundTimeTableData: any[] = [ - { - t1: '2017-10-01 14:10', - t2: '联系客户', - t3: '进行中', - t4: '取货员 ID1234', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '取货员出发', - t3: '成功', - t4: '取货员 ID1234', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '取货员接单', - t3: '成功', - t4: '系统', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '申请审批通过', - t3: '成功', - t4: '用户', - t5: '1h' - } -] diff --git a/src/views/demo/page/desc/basic/index.vue b/src/views/demo/page/desc/basic/index.vue deleted file mode 100644 index b40f2408..00000000 --- a/src/views/demo/page/desc/basic/index.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - diff --git a/src/views/demo/page/desc/high/data.tsx b/src/views/demo/page/desc/high/data.tsx deleted file mode 100644 index 458726db..00000000 --- a/src/views/demo/page/desc/high/data.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { BasicColumn } from '@/components/Table/src/types/table' - -import { Badge } from 'ant-design-vue' - -export const refundTimeTableSchema: BasicColumn[] = [ - { - title: '时间', - width: 150, - dataIndex: 't1' - }, - { - title: '当前进度', - width: 150, - dataIndex: 't2' - }, - { - title: '状态', - width: 150, - dataIndex: 't3', - customRender: ({ record }) => { - return - } - }, - { - title: '操作员ID ', - width: 150, - dataIndex: 't4' - }, - { - title: '耗时', - width: 150, - dataIndex: 't5' - } -] - -export const refundTimeTableData: any[] = [ - { - t1: '2017-10-01 14:10', - t2: '联系客户', - t3: '进行中', - t4: '取货员 ID1234', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '取货员出发', - t3: '成功', - t4: '取货员 ID1234', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '取货员接单', - t3: '成功', - t4: '系统', - t5: '5mins' - }, - { - t1: '2017-10-01 14:10', - t2: '申请审批通过', - t3: '成功', - t4: '用户', - t5: '1h' - } -] diff --git a/src/views/demo/page/desc/high/index.vue b/src/views/demo/page/desc/high/index.vue deleted file mode 100644 index 50f767e8..00000000 --- a/src/views/demo/page/desc/high/index.vue +++ /dev/null @@ -1,109 +0,0 @@ - - diff --git a/src/views/demo/page/form/basic/data.ts b/src/views/demo/page/form/basic/data.ts deleted file mode 100644 index 022dafd5..00000000 --- a/src/views/demo/page/form/basic/data.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { FormSchema } from '@/components/Form' -const colProps = { - span: 8 -} - -export const schemas: FormSchema[] = [ - { - field: 'title', - component: 'Input', - label: '标题', - colProps, - componentProps: { - placeholder: '给目标起个名字' - }, - required: true - }, - { - field: 'time', - component: 'RangePicker', - label: '起止日期', - colProps, - required: true - }, - { - field: 'client', - component: 'Input', - colProps, - label: '客户', - helpMessage: '目标的服务对象', - subLabel: '( 选填 )', - componentProps: { - placeholder: '请描述你服务的客户,内部客户直接 @姓名/工号' - } - }, - { - field: 'weights', - component: 'InputNumber', - label: '权重', - colProps, - subLabel: '( 选填 )', - componentProps: { - formatter: (value: string) => (value ? `${value}%` : ''), - parser: (value: string) => value.replace('%', ''), - placeholder: '请输入' - } - }, - { - field: 'target', - component: 'InputTextArea', - label: '目标描述', - colProps, - componentProps: { - placeholder: '请输入你的阶段性工作目标', - rows: 4 - }, - required: true - }, - { - field: 'metrics', - component: 'InputTextArea', - label: '衡量标准', - colProps, - componentProps: { - placeholder: '请输入衡量标准', - rows: 4 - }, - required: true - }, - - { - field: 'inviteer', - component: 'Input', - label: '邀评人', - colProps: { - span: 8 - }, - subLabel: '( 选填 )', - componentProps: { - placeholder: '请直接 @姓名/工号,最多可邀请 5 人' - } - }, - { - field: 'disclosure', - component: 'RadioGroup', - label: '目标公开', - colProps: { - span: 16 - }, - itemProps: { - extra: '客户、邀评人默认被分享' - }, - componentProps: { - options: [ - { - label: '公开', - value: '1' - }, - { - label: '部分公开', - value: '2' - }, - { - label: '不公开', - value: '3' - } - ] - } - }, - { - field: 'disclosure', - component: 'Select', - label: ' ', - colProps: { - span: 8 - }, - show: ({ model }) => { - return model.disclosure === '2' - }, - componentProps: { - placeholder: '公开给', - mode: 'multiple', - options: [ - { - label: '同事1', - value: '1' - }, - { - label: '同事2', - value: '2' - }, - { - label: '同事3', - value: '3' - } - ] - } - } -] diff --git a/src/views/demo/page/form/basic/index.vue b/src/views/demo/page/form/basic/index.vue deleted file mode 100644 index 2089a92c..00000000 --- a/src/views/demo/page/form/basic/index.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/src/views/demo/page/form/high/PersonTable.vue b/src/views/demo/page/form/high/PersonTable.vue deleted file mode 100644 index f16f3929..00000000 --- a/src/views/demo/page/form/high/PersonTable.vue +++ /dev/null @@ -1,125 +0,0 @@ - - diff --git a/src/views/demo/page/form/high/data.ts b/src/views/demo/page/form/high/data.ts deleted file mode 100644 index 9153874d..00000000 --- a/src/views/demo/page/form/high/data.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { FormSchema } from '@/components/Form' - -const basicOptions: LabelValueOptions = [ - { - label: '付晓晓', - value: '1' - }, - { - label: '周毛毛', - value: '2' - } -] - -const storeTypeOptions: LabelValueOptions = [ - { - label: '私密', - value: '1' - }, - { - label: '公开', - value: '2' - } -] - -export const schemas: FormSchema[] = [ - { - field: 'f1', - component: 'Input', - label: '仓库名', - required: true - }, - { - field: 'f2', - component: 'Input', - label: '仓库域名', - required: true, - componentProps: { - addonBefore: 'http://', - addonAfter: 'com' - }, - colProps: { - offset: 2 - } - }, - { - field: 'f3', - component: 'Select', - label: '仓库管理员', - componentProps: { - options: basicOptions - }, - required: true, - colProps: { - offset: 2 - } - }, - { - field: 'f4', - component: 'Select', - label: '审批人', - componentProps: { - options: basicOptions - }, - required: true - }, - { - field: 'f5', - component: 'RangePicker', - label: '生效日期', - required: true, - colProps: { - offset: 2 - } - }, - { - field: 'f6', - component: 'Select', - label: '仓库类型', - componentProps: { - options: storeTypeOptions - }, - required: true, - colProps: { - offset: 2 - } - } -] -export const taskSchemas: FormSchema[] = [ - { - field: 't1', - component: 'Input', - label: '任务名', - required: true - }, - { - field: 't2', - component: 'Input', - label: '任务描述', - required: true, - colProps: { - offset: 2 - } - }, - { - field: 't3', - component: 'Select', - label: '执行人', - componentProps: { - options: basicOptions - }, - required: true, - colProps: { - offset: 2 - } - }, - { - field: 't4', - component: 'Select', - label: '责任人', - componentProps: { - options: basicOptions - }, - required: true - }, - { - field: 't5', - component: 'TimePicker', - label: '生效日期', - required: true, - componentProps: { - style: { width: '100%' } - }, - colProps: { - offset: 2 - } - }, - { - field: 't6', - component: 'Select', - label: '任务类型', - componentProps: { - options: storeTypeOptions - }, - required: true, - colProps: { - offset: 2 - } - } -] diff --git a/src/views/demo/page/form/high/index.vue b/src/views/demo/page/form/high/index.vue deleted file mode 100644 index 06c758b1..00000000 --- a/src/views/demo/page/form/high/index.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/src/views/demo/page/form/step/Step1.vue b/src/views/demo/page/form/step/Step1.vue deleted file mode 100644 index 3546bde0..00000000 --- a/src/views/demo/page/form/step/Step1.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/src/views/demo/page/form/step/Step2.vue b/src/views/demo/page/form/step/Step2.vue deleted file mode 100644 index e2574f0b..00000000 --- a/src/views/demo/page/form/step/Step2.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - diff --git a/src/views/demo/page/form/step/Step3.vue b/src/views/demo/page/form/step/Step3.vue deleted file mode 100644 index a64307fc..00000000 --- a/src/views/demo/page/form/step/Step3.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/src/views/demo/page/form/step/data.tsx b/src/views/demo/page/form/step/data.tsx deleted file mode 100644 index 99ce8c48..00000000 --- a/src/views/demo/page/form/step/data.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { FormSchema } from '@/components/Form' - -export const step1Schemas: FormSchema[] = [ - { - field: 'account', - component: 'Select', - label: '付款账户', - required: true, - defaultValue: '1', - componentProps: { - options: [ - { - label: 'anncwb@126.com', - value: '1' - } - ] - }, - colProps: { - span: 24 - } - }, - { - field: 'fac', - component: 'InputGroup', - label: '收款账户', - required: true, - defaultValue: 'test@example.com', - slot: 'fac', - colProps: { - span: 24 - } - }, - { - field: 'pay', - component: 'Input', - label: '', - defaultValue: 'zfb', - show: false - }, - { - field: 'payeeName', - component: 'Input', - label: '收款人姓名', - defaultValue: 'Vben', - required: true, - colProps: { - span: 24 - } - }, - { - field: 'money', - component: 'Input', - label: '转账金额', - defaultValue: '500', - required: true, - renderComponentContent: () => { - return { - prefix: () => '¥' - } - }, - colProps: { - span: 24 - } - } -] - -export const step2Schemas: FormSchema[] = [ - { - field: 'pwd', - component: 'InputPassword', - label: '支付密码', - required: true, - defaultValue: '123456', - colProps: { - span: 24 - } - } -] diff --git a/src/views/demo/page/form/step/index.vue b/src/views/demo/page/form/step/index.vue deleted file mode 100644 index 424f2c94..00000000 --- a/src/views/demo/page/form/step/index.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - diff --git a/src/views/demo/page/list/basic/data.tsx b/src/views/demo/page/list/basic/data.tsx deleted file mode 100644 index 989bb978..00000000 --- a/src/views/demo/page/list/basic/data.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export const cardList = (() => { - const result: any[] = [] - for (let i = 0; i < 6; i++) { - result.push({ - id: i, - title: 'Vben Admin', - description: '基于Vue Next, TypeScript, Ant Design Vue实现的一套完整的企业级后台管理系统', - datetime: '2020-11-26 17:39', - extra: '编辑', - icon: 'logos:vue', - color: '#1890ff', - author: 'Vben', - percent: 20 * (i + 1) - }) - } - return result -})() diff --git a/src/views/demo/page/list/basic/index.vue b/src/views/demo/page/list/basic/index.vue deleted file mode 100644 index c460eab5..00000000 --- a/src/views/demo/page/list/basic/index.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - diff --git a/src/views/demo/page/list/card/data.tsx b/src/views/demo/page/list/card/data.tsx deleted file mode 100644 index 13df288d..00000000 --- a/src/views/demo/page/list/card/data.tsx +++ /dev/null @@ -1,14 +0,0 @@ -export const cardList = (() => { - const result: any[] = [] - for (let i = 0; i < 12; i++) { - result.push({ - title: 'Vben Admin', - icon: 'logos:vue', - color: '#1890ff', - active: '100', - new: '1,799', - download: 'bx:bx-download' - }) - } - return result -})() diff --git a/src/views/demo/page/list/card/index.vue b/src/views/demo/page/list/card/index.vue deleted file mode 100644 index 86b6772a..00000000 --- a/src/views/demo/page/list/card/index.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/src/views/demo/page/list/search/data.tsx b/src/views/demo/page/list/search/data.tsx deleted file mode 100644 index d2f8e416..00000000 --- a/src/views/demo/page/list/search/data.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { FormSchema } from '@/components/Form' - -export const searchList = (() => { - const result: any[] = [] - for (let i = 0; i < 6; i++) { - result.push({ - id: i, - title: 'Vben Admin', - description: ['Vben', '设计语言', 'Typescript'], - content: '基于Vue Next, TypeScript, Ant Design实现的一套完整的企业级后台管理系统。', - time: '2020-11-14 11:20' - }) - } - return result -})() - -export const actions: any[] = [ - { icon: 'clarity:star-line', text: '156', color: '#018ffb' }, - { icon: 'bx:bxs-like', text: '156', color: '#459ae8' }, - { icon: 'bx:bxs-message-dots', text: '2', color: '#42d27d' } -] - -export const schemas: FormSchema[] = [ - { - field: 'field1', - component: 'InputSearch', - label: '项目名', - colProps: { - span: 8 - }, - componentProps: { - onChange: (e: any) => { - console.log(e) - } - } - } -] diff --git a/src/views/demo/page/list/search/index.vue b/src/views/demo/page/list/search/index.vue deleted file mode 100644 index b354de81..00000000 --- a/src/views/demo/page/list/search/index.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - diff --git a/src/views/demo/page/result/fail/index.vue b/src/views/demo/page/result/fail/index.vue deleted file mode 100644 index 41f338f1..00000000 --- a/src/views/demo/page/result/fail/index.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/src/views/demo/page/result/success/index.vue b/src/views/demo/page/result/success/index.vue deleted file mode 100644 index 2eadc301..00000000 --- a/src/views/demo/page/result/success/index.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/src/views/demo/permission/CurrentPermissionMode.vue b/src/views/demo/permission/CurrentPermissionMode.vue deleted file mode 100644 index 4fd5d5f1..00000000 --- a/src/views/demo/permission/CurrentPermissionMode.vue +++ /dev/null @@ -1,20 +0,0 @@ - - diff --git a/src/views/demo/permission/back/Btn.vue b/src/views/demo/permission/back/Btn.vue deleted file mode 100644 index aa4035af..00000000 --- a/src/views/demo/permission/back/Btn.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/src/views/demo/permission/back/index.vue b/src/views/demo/permission/back/index.vue deleted file mode 100644 index e732f137..00000000 --- a/src/views/demo/permission/back/index.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/src/views/demo/permission/front/AuthPageA.vue b/src/views/demo/permission/front/AuthPageA.vue deleted file mode 100644 index 8f4da517..00000000 --- a/src/views/demo/permission/front/AuthPageA.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/views/demo/permission/front/AuthPageB.vue b/src/views/demo/permission/front/AuthPageB.vue deleted file mode 100644 index 817bc71c..00000000 --- a/src/views/demo/permission/front/AuthPageB.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/views/demo/permission/front/Btn.vue b/src/views/demo/permission/front/Btn.vue deleted file mode 100644 index 3965eb0c..00000000 --- a/src/views/demo/permission/front/Btn.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/src/views/demo/permission/front/index.vue b/src/views/demo/permission/front/index.vue deleted file mode 100644 index 0a2ba400..00000000 --- a/src/views/demo/permission/front/index.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/src/views/demo/setup/index.vue b/src/views/demo/setup/index.vue deleted file mode 100644 index 376078b1..00000000 --- a/src/views/demo/setup/index.vue +++ /dev/null @@ -1,36 +0,0 @@ - - diff --git a/src/views/demo/system/account/AccountDetail.vue b/src/views/demo/system/account/AccountDetail.vue deleted file mode 100644 index 1e0c6955..00000000 --- a/src/views/demo/system/account/AccountDetail.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - - - diff --git a/src/views/demo/system/account/AccountModal.vue b/src/views/demo/system/account/AccountModal.vue deleted file mode 100644 index dcb2b7ac..00000000 --- a/src/views/demo/system/account/AccountModal.vue +++ /dev/null @@ -1,66 +0,0 @@ - - diff --git a/src/views/demo/system/account/DeptTree.vue b/src/views/demo/system/account/DeptTree.vue deleted file mode 100644 index be59cb23..00000000 --- a/src/views/demo/system/account/DeptTree.vue +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/src/views/demo/system/account/account.data.ts b/src/views/demo/system/account/account.data.ts deleted file mode 100644 index 40019624..00000000 --- a/src/views/demo/system/account/account.data.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { getAllRoleList, isAccountExist } from '@/api/demo/system' -import { BasicColumn } from '@/components/Table' -import { FormSchema } from '@/components/Table' - -export const columns: BasicColumn[] = [ - { - title: '用户名', - dataIndex: 'account', - width: 120 - }, - { - title: '昵称', - dataIndex: 'nickname', - width: 120 - }, - { - title: '邮箱', - dataIndex: 'email', - width: 120 - }, - { - title: '创建时间', - dataIndex: 'createTime', - width: 180 - }, - { - title: '角色', - dataIndex: 'role', - width: 200 - }, - { - title: '备注', - dataIndex: 'remark' - } -] - -export const searchFormSchema: FormSchema[] = [ - { - field: 'account', - label: '用户名', - component: 'Input', - colProps: { span: 8 } - }, - { - field: 'nickname', - label: '昵称', - component: 'Input', - colProps: { span: 8 } - } -] - -export const accountFormSchema: FormSchema[] = [ - { - field: 'account', - label: '用户名', - component: 'Input', - helpMessage: ['本字段演示异步验证', '不能输入带有admin的用户名'], - rules: [ - { - required: true, - message: '请输入用户名' - }, - { - validator(_, value) { - return new Promise((resolve, reject) => { - isAccountExist(value) - .then(() => resolve()) - .catch((err) => { - reject(err.message || '验证失败') - }) - }) - } - } - ] - }, - { - field: 'pwd', - label: '密码', - component: 'InputPassword', - required: true, - ifShow: false - }, - { - label: '角色', - field: 'role', - component: 'ApiSelect', - componentProps: { - api: getAllRoleList, - labelField: 'roleName', - valueField: 'roleValue' - }, - required: true - }, - { - field: 'dept', - label: '所属部门', - component: 'TreeSelect', - componentProps: { - fieldNames: { - label: 'deptName', - key: 'id', - value: 'id' - }, - getPopupContainer: () => document.body - }, - required: true - }, - { - field: 'nickname', - label: '昵称', - component: 'Input', - required: true - }, - - { - label: '邮箱', - field: 'email', - component: 'Input', - required: true - }, - - { - label: '备注', - field: 'remark', - component: 'InputTextArea' - } -] diff --git a/src/views/demo/system/account/index.vue b/src/views/demo/system/account/index.vue deleted file mode 100644 index 0e1b4296..00000000 --- a/src/views/demo/system/account/index.vue +++ /dev/null @@ -1,119 +0,0 @@ - - diff --git a/src/views/demo/system/dept/DeptModal.vue b/src/views/demo/system/dept/DeptModal.vue deleted file mode 100644 index 8ecb394a..00000000 --- a/src/views/demo/system/dept/DeptModal.vue +++ /dev/null @@ -1,54 +0,0 @@ - - diff --git a/src/views/demo/system/dept/dept.data.ts b/src/views/demo/system/dept/dept.data.ts deleted file mode 100644 index 53f4e9d6..00000000 --- a/src/views/demo/system/dept/dept.data.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { BasicColumn } from '@/components/Table' -import { FormSchema } from '@/components/Table' -import { h } from 'vue' -import { Tag } from 'ant-design-vue' - -export const columns: BasicColumn[] = [ - { - title: '部门名称', - dataIndex: 'deptName', - width: 160, - align: 'left' - }, - { - title: '排序', - dataIndex: 'orderNo', - width: 50 - }, - { - title: '状态', - dataIndex: 'status', - width: 80, - customRender: ({ record }) => { - const status = record.status - const enable = ~~status === 0 - const color = enable ? 'green' : 'red' - const text = enable ? '启用' : '停用' - return h(Tag, { color: color }, () => text) - } - }, - { - title: '创建时间', - dataIndex: 'createTime', - width: 180 - }, - { - title: '备注', - dataIndex: 'remark' - } -] - -export const searchFormSchema: FormSchema[] = [ - { - field: 'deptName', - label: '部门名称', - component: 'Input', - colProps: { span: 8 } - }, - { - field: 'status', - label: '状态', - component: 'Select', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '停用', value: '1' } - ] - }, - colProps: { span: 8 } - } -] - -export const formSchema: FormSchema[] = [ - { - field: 'deptName', - label: '部门名称', - component: 'Input', - required: true - }, - { - field: 'parentDept', - label: '上级部门', - component: 'TreeSelect', - - componentProps: { - fieldNames: { - label: 'deptName', - key: 'id', - value: 'id' - }, - getPopupContainer: () => document.body - }, - required: true - }, - { - field: 'orderNo', - label: '排序', - component: 'InputNumber', - required: true - }, - { - field: 'status', - label: '状态', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '停用', value: '1' } - ] - }, - required: true - }, - { - label: '备注', - field: 'remark', - component: 'InputTextArea' - } -] diff --git a/src/views/demo/system/dept/index.vue b/src/views/demo/system/dept/index.vue deleted file mode 100644 index f193ecf4..00000000 --- a/src/views/demo/system/dept/index.vue +++ /dev/null @@ -1,86 +0,0 @@ - - diff --git a/src/views/demo/system/menu/MenuDrawer.vue b/src/views/demo/system/menu/MenuDrawer.vue deleted file mode 100644 index f53d6e02..00000000 --- a/src/views/demo/system/menu/MenuDrawer.vue +++ /dev/null @@ -1,55 +0,0 @@ - - diff --git a/src/views/demo/system/menu/index.vue b/src/views/demo/system/menu/index.vue deleted file mode 100644 index 49a09e56..00000000 --- a/src/views/demo/system/menu/index.vue +++ /dev/null @@ -1,94 +0,0 @@ - - diff --git a/src/views/demo/system/menu/menu.data.ts b/src/views/demo/system/menu/menu.data.ts deleted file mode 100644 index 562a5088..00000000 --- a/src/views/demo/system/menu/menu.data.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { BasicColumn } from '@/components/Table' -import { FormSchema } from '@/components/Table' -import { h } from 'vue' -import { Tag } from 'ant-design-vue' -import { Icon } from '@/components/Icon' - -export const columns: BasicColumn[] = [ - { - title: '菜单名称', - dataIndex: 'menuName', - width: 200, - align: 'left' - }, - { - title: '图标', - dataIndex: 'icon', - width: 50, - customRender: ({ record }) => { - return h(Icon, { icon: record.icon }) - } - }, - { - title: '权限标识', - dataIndex: 'permission', - width: 180 - }, - { - title: '组件', - dataIndex: 'component' - }, - { - title: '排序', - dataIndex: 'orderNo', - width: 50 - }, - { - title: '状态', - dataIndex: 'status', - width: 80, - customRender: ({ record }) => { - const status = record.status - const enable = ~~status === 0 - const color = enable ? 'green' : 'red' - const text = enable ? '启用' : '停用' - return h(Tag, { color: color }, () => text) - } - }, - { - title: '创建时间', - dataIndex: 'createTime', - width: 180 - } -] - -const isDir = (type: string) => type === '0' -const isMenu = (type: string) => type === '1' -const isButton = (type: string) => type === '2' - -export const searchFormSchema: FormSchema[] = [ - { - field: 'menuName', - label: '菜单名称', - component: 'Input', - colProps: { span: 8 } - }, - { - field: 'status', - label: '状态', - component: 'Select', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '停用', value: '1' } - ] - }, - colProps: { span: 8 } - } -] - -export const formSchema: FormSchema[] = [ - { - field: 'type', - label: '菜单类型', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '目录', value: '0' }, - { label: '菜单', value: '1' }, - { label: '按钮', value: '2' } - ] - }, - colProps: { lg: 24, md: 24 } - }, - { - field: 'menuName', - label: '菜单名称', - component: 'Input', - required: true - }, - - { - field: 'parentMenu', - label: '上级菜单', - component: 'TreeSelect', - componentProps: { - fieldNames: { - label: 'menuName', - key: 'id', - value: 'id' - }, - getPopupContainer: () => document.body - } - }, - - { - field: 'orderNo', - label: '排序', - component: 'InputNumber', - required: true - }, - { - field: 'icon', - label: '图标', - component: 'IconPicker', - required: true, - ifShow: ({ values }) => !isButton(values.type) - }, - - { - field: 'routePath', - label: '路由地址', - component: 'Input', - required: true, - ifShow: ({ values }) => !isButton(values.type) - }, - { - field: 'component', - label: '组件路径', - component: 'Input', - ifShow: ({ values }) => isMenu(values.type) - }, - { - field: 'permission', - label: '权限标识', - component: 'Input', - ifShow: ({ values }) => !isDir(values.type) - }, - { - field: 'status', - label: '状态', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '禁用', value: '1' } - ] - } - }, - { - field: 'isExt', - label: '是否外链', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '否', value: '0' }, - { label: '是', value: '1' } - ] - }, - ifShow: ({ values }) => !isButton(values.type) - }, - - { - field: 'keepalive', - label: '是否缓存', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '否', value: '0' }, - { label: '是', value: '1' } - ] - }, - ifShow: ({ values }) => isMenu(values.type) - }, - - { - field: 'show', - label: '是否显示', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '是', value: '0' }, - { label: '否', value: '1' } - ] - }, - ifShow: ({ values }) => !isButton(values.type) - } -] diff --git a/src/views/demo/system/password/index.vue b/src/views/demo/system/password/index.vue deleted file mode 100644 index 6f97bbb0..00000000 --- a/src/views/demo/system/password/index.vue +++ /dev/null @@ -1,36 +0,0 @@ - - diff --git a/src/views/demo/system/password/pwd.data.ts b/src/views/demo/system/password/pwd.data.ts deleted file mode 100644 index 16f7e27b..00000000 --- a/src/views/demo/system/password/pwd.data.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { FormSchema } from '@/components/Form' - -export const formSchema: FormSchema[] = [ - { - field: 'passwordOld', - label: '当前密码', - component: 'InputPassword', - required: true - }, - { - field: 'passwordNew', - label: '新密码', - component: 'StrengthMeter', - componentProps: { - placeholder: '新密码' - }, - rules: [ - { - required: true, - message: '请输入新密码' - } - ] - }, - { - field: 'confirmPassword', - label: '确认密码', - component: 'InputPassword', - - dynamicRules: ({ values }) => { - return [ - { - required: true, - validator: (_, value) => { - if (!value) { - return Promise.reject('密码不能为空') - } - if (value !== values.passwordNew) { - return Promise.reject('两次输入的密码不一致!') - } - return Promise.resolve() - } - } - ] - } - } -] diff --git a/src/views/demo/system/role/RoleDrawer.vue b/src/views/demo/system/role/RoleDrawer.vue deleted file mode 100644 index aade53e0..00000000 --- a/src/views/demo/system/role/RoleDrawer.vue +++ /dev/null @@ -1,67 +0,0 @@ - - diff --git a/src/views/demo/system/role/index.vue b/src/views/demo/system/role/index.vue deleted file mode 100644 index 9c5a4c43..00000000 --- a/src/views/demo/system/role/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - diff --git a/src/views/demo/system/role/role.data.ts b/src/views/demo/system/role/role.data.ts deleted file mode 100644 index ee014d9b..00000000 --- a/src/views/demo/system/role/role.data.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { BasicColumn } from '@/components/Table' -import { FormSchema } from '@/components/Table' -import { h } from 'vue' -import { Switch } from 'ant-design-vue' -import { setRoleStatus } from '@/api/demo/system' -import { useMessage } from '@/hooks/web/useMessage' - -export const columns: BasicColumn[] = [ - { - title: '角色名称', - dataIndex: 'roleName', - width: 200 - }, - { - title: '角色值', - dataIndex: 'roleValue', - width: 180 - }, - { - title: '排序', - dataIndex: 'orderNo', - width: 50 - }, - { - title: '状态', - dataIndex: 'status', - width: 120, - customRender: ({ record }) => { - if (!Reflect.has(record, 'pendingStatus')) { - record.pendingStatus = false - } - return h(Switch, { - checked: record.status === '1', - checkedChildren: '已启用', - unCheckedChildren: '已禁用', - loading: record.pendingStatus, - onChange(checked: boolean) { - record.pendingStatus = true - const newStatus = checked ? '1' : '0' - const { createMessage } = useMessage() - setRoleStatus(record.id, newStatus) - .then(() => { - record.status = newStatus - createMessage.success(`已成功修改角色状态`) - }) - .catch(() => { - createMessage.error('修改角色状态失败') - }) - .finally(() => { - record.pendingStatus = false - }) - } - }) - } - }, - { - title: '创建时间', - dataIndex: 'createTime', - width: 180 - }, - { - title: '备注', - dataIndex: 'remark' - } -] - -export const searchFormSchema: FormSchema[] = [ - { - field: 'roleNme', - label: '角色名称', - component: 'Input', - colProps: { span: 8 } - }, - { - field: 'status', - label: '状态', - component: 'Select', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '停用', value: '1' } - ] - }, - colProps: { span: 8 } - } -] - -export const formSchema: FormSchema[] = [ - { - field: 'roleName', - label: '角色名称', - required: true, - component: 'Input' - }, - { - field: 'roleValue', - label: '角色值', - required: true, - component: 'Input' - }, - { - field: 'status', - label: '状态', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '停用', value: '1' } - ] - } - }, - { - label: '备注', - field: 'remark', - component: 'InputTextArea' - }, - { - label: ' ', - field: 'menu', - slot: 'menu', - component: 'Input' - } -] diff --git a/src/views/demo/table/AuthColumn.vue b/src/views/demo/table/AuthColumn.vue deleted file mode 100644 index 3cf72ebf..00000000 --- a/src/views/demo/table/AuthColumn.vue +++ /dev/null @@ -1,142 +0,0 @@ - - diff --git a/src/views/demo/table/Basic.vue b/src/views/demo/table/Basic.vue deleted file mode 100644 index eae6cae7..00000000 --- a/src/views/demo/table/Basic.vue +++ /dev/null @@ -1,63 +0,0 @@ - - diff --git a/src/views/demo/table/CustomerCell.vue b/src/views/demo/table/CustomerCell.vue deleted file mode 100644 index ba3c62eb..00000000 --- a/src/views/demo/table/CustomerCell.vue +++ /dev/null @@ -1,98 +0,0 @@ - - diff --git a/src/views/demo/table/EditCellTable.vue b/src/views/demo/table/EditCellTable.vue deleted file mode 100644 index 39a7851b..00000000 --- a/src/views/demo/table/EditCellTable.vue +++ /dev/null @@ -1,258 +0,0 @@ - - diff --git a/src/views/demo/table/EditRowTable.vue b/src/views/demo/table/EditRowTable.vue deleted file mode 100644 index b1b80266..00000000 --- a/src/views/demo/table/EditRowTable.vue +++ /dev/null @@ -1,301 +0,0 @@ - - diff --git a/src/views/demo/table/ExpandTable.vue b/src/views/demo/table/ExpandTable.vue deleted file mode 100644 index cd888002..00000000 --- a/src/views/demo/table/ExpandTable.vue +++ /dev/null @@ -1,65 +0,0 @@ - - diff --git a/src/views/demo/table/FetchTable.vue b/src/views/demo/table/FetchTable.vue deleted file mode 100644 index b35f3870..00000000 --- a/src/views/demo/table/FetchTable.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/src/views/demo/table/FixedColumn.vue b/src/views/demo/table/FixedColumn.vue deleted file mode 100644 index cef5cb2a..00000000 --- a/src/views/demo/table/FixedColumn.vue +++ /dev/null @@ -1,84 +0,0 @@ - - diff --git a/src/views/demo/table/FixedHeight.vue b/src/views/demo/table/FixedHeight.vue deleted file mode 100644 index 7b9bddaf..00000000 --- a/src/views/demo/table/FixedHeight.vue +++ /dev/null @@ -1,37 +0,0 @@ - - diff --git a/src/views/demo/table/FooterTable.vue b/src/views/demo/table/FooterTable.vue deleted file mode 100644 index 59829f55..00000000 --- a/src/views/demo/table/FooterTable.vue +++ /dev/null @@ -1,40 +0,0 @@ - - diff --git a/src/views/demo/table/FormTable.vue b/src/views/demo/table/FormTable.vue deleted file mode 100644 index 53fc42f4..00000000 --- a/src/views/demo/table/FormTable.vue +++ /dev/null @@ -1,71 +0,0 @@ - - diff --git a/src/views/demo/table/MergeHeader.vue b/src/views/demo/table/MergeHeader.vue deleted file mode 100644 index 92177141..00000000 --- a/src/views/demo/table/MergeHeader.vue +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/src/views/demo/table/MultipleHeader.vue b/src/views/demo/table/MultipleHeader.vue deleted file mode 100644 index 3ea3e907..00000000 --- a/src/views/demo/table/MultipleHeader.vue +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/src/views/demo/table/RefTable.vue b/src/views/demo/table/RefTable.vue deleted file mode 100644 index 5ed84d9f..00000000 --- a/src/views/demo/table/RefTable.vue +++ /dev/null @@ -1,104 +0,0 @@ - - diff --git a/src/views/demo/table/ResizeParentHeightTable.vue b/src/views/demo/table/ResizeParentHeightTable.vue deleted file mode 100644 index e249edea..00000000 --- a/src/views/demo/table/ResizeParentHeightTable.vue +++ /dev/null @@ -1,67 +0,0 @@ - - diff --git a/src/views/demo/table/TreeTable.vue b/src/views/demo/table/TreeTable.vue deleted file mode 100644 index a7587b0f..00000000 --- a/src/views/demo/table/TreeTable.vue +++ /dev/null @@ -1,34 +0,0 @@ - - diff --git a/src/views/demo/table/UseTable.vue b/src/views/demo/table/UseTable.vue deleted file mode 100644 index 539eada3..00000000 --- a/src/views/demo/table/UseTable.vue +++ /dev/null @@ -1,124 +0,0 @@ - - diff --git a/src/views/demo/table/tableData.tsx b/src/views/demo/table/tableData.tsx deleted file mode 100644 index 04d02db6..00000000 --- a/src/views/demo/table/tableData.tsx +++ /dev/null @@ -1,292 +0,0 @@ -import { FormProps, FormSchema } from '@/components/Table' -import { BasicColumn } from '@/components/Table/src/types/table' - -export function getBasicColumns(): BasicColumn[] { - return [ - { - title: 'ID', - dataIndex: 'id', - fixed: 'left', - width: 200 - }, - { - title: '姓名', - dataIndex: 'name', - width: 150, - filters: [ - { text: 'Male', value: 'male' }, - { text: 'Female', value: 'female' } - ] - }, - { - title: '地址', - dataIndex: 'address' - }, - { - title: '编号', - dataIndex: 'no', - width: 150, - sorter: true, - defaultHidden: true - }, - { - title: '开始时间', - width: 150, - sorter: true, - dataIndex: 'beginTime' - }, - { - title: '结束时间', - width: 150, - sorter: true, - dataIndex: 'endTime' - } - ] -} - -export function getBasicShortColumns(): BasicColumn[] { - return [ - { - title: 'ID', - width: 150, - dataIndex: 'id', - sorter: true, - sortOrder: 'ascend' - }, - { - title: '姓名', - dataIndex: 'name', - width: 120 - }, - { - title: '地址', - dataIndex: 'address' - }, - { - title: '编号', - dataIndex: 'no', - width: 80 - } - ] -} - -export function getMultipleHeaderColumns(): BasicColumn[] { - return [ - { - title: 'ID', - dataIndex: 'id', - width: 200 - }, - { - title: '姓名', - dataIndex: 'name', - width: 120 - }, - { - title: '地址', - dataIndex: 'address', - sorter: true, - children: [ - { - title: '编号', - dataIndex: 'no', - width: 120, - filters: [ - { text: 'Male', value: 'male', children: [] }, - { text: 'Female', value: 'female', children: [] } - ] - }, - - { - title: '开始时间', - dataIndex: 'beginTime', - width: 120 - }, - { - title: '结束时间', - dataIndex: 'endTime', - width: 120 - } - ] - } - ] -} - -export function getCustomHeaderColumns(): BasicColumn[] { - return [ - { - title: 'ID', - dataIndex: 'id', - helpMessage: 'headerHelpMessage方式1', - width: 200 - }, - { - // title: '姓名', - dataIndex: 'name', - width: 120 - // slots: { title: 'customTitle' }, - }, - { - // title: '地址', - dataIndex: 'address', - width: 120, - // slots: { title: 'customAddress' }, - sorter: true - }, - - { - title: '编号', - dataIndex: 'no', - width: 120, - filters: [ - { text: 'Male', value: 'male', children: [] }, - { text: 'Female', value: 'female', children: [] } - ] - }, - { - title: '开始时间', - dataIndex: 'beginTime', - width: 120 - }, - { - title: '结束时间', - dataIndex: 'endTime', - width: 120 - } - ] -} - -const cellContent = (_, index) => ({ - colSpan: index === 9 ? 0 : 1 -}) - -export function getMergeHeaderColumns(): BasicColumn[] { - return [ - { - title: 'ID', - dataIndex: 'id', - width: 300, - customCell: (_, index) => ({ - colSpan: index === 9 ? 6 : 1 - }) - }, - { - title: '姓名', - dataIndex: 'name', - width: 300, - customCell: cellContent - }, - { - title: '地址', - dataIndex: 'address', - colSpan: 2, - width: 120, - sorter: true, - customCell: (_, index) => ({ - rowSpan: index === 2 ? 2 : 1, - colSpan: index === 3 || index === 9 ? 0 : 1 - }) - }, - { - title: '编号', - dataIndex: 'no', - colSpan: 0, - filters: [ - { text: 'Male', value: 'male', children: [] }, - { text: 'Female', value: 'female', children: [] } - ], - customCell: cellContent - }, - { - title: '开始时间', - dataIndex: 'beginTime', - width: 200, - customCell: cellContent - }, - { - title: '结束时间', - dataIndex: 'endTime', - width: 200, - customCell: cellContent - } - ] -} -export const getAdvanceSchema = (itemNumber = 6): FormSchema[] => { - const arr: any = [] - for (let index = 0; index < itemNumber; index++) { - arr.push({ - field: `field${index}`, - label: `字段${index}`, - component: 'Input', - colProps: { - xl: 12, - xxl: 8 - } - }) - } - return arr -} -export function getFormConfig(): Partial { - return { - labelWidth: 100, - schemas: [ - ...getAdvanceSchema(5), - { - field: `field11`, - label: `Slot示例`, - component: 'Select', - slot: 'custom', - colProps: { - xl: 12, - xxl: 8 - } - } - ] - } -} -export function getBasicData() { - return (() => { - const arr: any = [] - for (let index = 0; index < 40; index++) { - arr.push({ - id: `${index}`, - name: 'John Brown', - age: `1${index}`, - no: `${index + 10}`, - address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park', - beginTime: new Date().toLocaleString(), - endTime: new Date().toLocaleString() - }) - } - return arr - })() -} - -export function getTreeTableData() { - return (() => { - const arr: any = [] - for (let index = 0; index < 40; index++) { - arr.push({ - id: `${index}`, - name: 'John Brown', - age: `1${index}`, - no: `${index + 10}`, - address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park', - beginTime: new Date().toLocaleString(), - endTime: new Date().toLocaleString(), - children: [ - { - id: `l2-${index}`, - name: 'John Brown', - age: `1${index}`, - no: `${index + 10}`, - address: 'New York No. 1 Lake ParkNew York No. 1 Lake Park', - beginTime: new Date().toLocaleString(), - endTime: new Date().toLocaleString() - } - ] - }) - } - return arr - })() -} diff --git a/src/views/demo/tree/ActionTree.vue b/src/views/demo/tree/ActionTree.vue deleted file mode 100644 index 73bf3e2c..00000000 --- a/src/views/demo/tree/ActionTree.vue +++ /dev/null @@ -1,116 +0,0 @@ - - diff --git a/src/views/demo/tree/EditTree.vue b/src/views/demo/tree/EditTree.vue deleted file mode 100644 index 34ba5c27..00000000 --- a/src/views/demo/tree/EditTree.vue +++ /dev/null @@ -1,107 +0,0 @@ - - diff --git a/src/views/demo/tree/data.ts b/src/views/demo/tree/data.ts deleted file mode 100644 index 03f0f403..00000000 --- a/src/views/demo/tree/data.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { TreeItem } from '@/components/Tree' - -export const treeData: TreeItem[] = [ - { - title: 'parent ', - key: '0-0', - children: [ - { title: 'leaf', key: '0-0-0' }, - { - title: 'leaf', - key: '0-0-1', - children: [ - { title: 'leaf', key: '0-0-0-0', children: [{ title: 'leaf', key: '0-0-0-0-1' }] }, - { title: 'leaf', key: '0-0-0-1' } - ] - } - ] - }, - { - title: 'parent 2', - key: '1-1', - children: [ - { title: 'leaf', key: '1-1-0' }, - { title: 'leaf', key: '1-1-1' } - ] - }, - { - title: 'parent 3', - key: '2-2', - children: [ - { title: 'leaf', key: '2-2-0' }, - { title: 'leaf', key: '2-2-1' } - ] - } -] - -export const treeData2: any[] = [ - { - name: 'parent ', - id: '0-0', - - children: [ - { name: 'leaf', id: '0-0-0' }, - { - name: 'leaf', - id: '0-0-1', - - children: [ - { - name: 'leaf', - - id: '0-0-0-0', - children: [{ name: 'leaf', id: '0-0-0-0-1' }] - }, - { name: 'leaf', id: '0-0-0-1' } - ] - } - ] - }, - { - name: 'parent 2', - id: '1-1', - - children: [ - { name: 'leaf', id: '1-1-0' }, - { name: 'leaf', id: '1-1-1' } - ] - }, - { - name: 'parent 3', - id: '2-2', - - children: [ - { name: 'leaf', id: '2-2-0' }, - { name: 'leaf', id: '2-2-1' } - ] - } -] - -export const treeData3: any[] = [ - { - name: 'parent ', - key: '0-0', - children: [ - { name: 'leaf', key: '0-0-0' }, - { - name: 'leaf', - key: '0-0-1', - children: [ - { - name: 'leaf', - key: '0-0-0-0', - children: [{ name: 'leaf', key: '0-0-0-0-1' }] - }, - { name: 'leaf', key: '0-0-0-1' } - ] - } - ] - }, - { - name: 'parent 2', - key: '1-1', - - children: [ - { name: 'leaf', key: '1-1-0' }, - { name: 'leaf', key: '1-1-1' } - ] - }, - { - name: 'parent 3', - key: '2-2', - - children: [ - { name: 'leaf', key: '2-2-0' }, - { name: 'leaf', key: '2-2-1' } - ] - } -] diff --git a/src/views/demo/tree/index.vue b/src/views/demo/tree/index.vue deleted file mode 100644 index c8eaf67a..00000000 --- a/src/views/demo/tree/index.vue +++ /dev/null @@ -1,111 +0,0 @@ - -