提交 23acbedb 作者: 方治民

feat: pont 接口生成适配 json 传参方式

上级 cb22edda
......@@ -135,7 +135,7 @@
"lint-staged": "12.3.7",
"npm-run-all": "^4.1.5",
"picocolors": "^1.0.0",
"pont-engine": "^1.3.3",
"pont-engine": "^1.4.0",
"postcss": "^8.4.16",
"postcss-html": "^1.5.0",
"postcss-less": "^6.0.0",
......
......@@ -67,7 +67,7 @@ specifiers:
path-to-regexp: ^6.2.1
picocolors: ^1.0.0
pinia: ^2.0.21
pont-engine: ^1.3.3
pont-engine: ^1.4.0
postcss: ^8.4.16
postcss-html: ^1.5.0
postcss-less: ^6.0.0
......@@ -198,7 +198,7 @@ devDependencies:
lint-staged: 12.3.7
npm-run-all: 4.1.5
picocolors: 1.0.0
pont-engine: 1.3.3
pont-engine: 1.4.0
postcss: 8.4.16
postcss-html: 1.5.0
postcss-less: 6.0.0_postcss@8.4.16
......@@ -5436,7 +5436,7 @@ packages:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
uglify-js: 3.17.0
uglify-js: 3.17.3
dev: true
/hard-rejection/2.1.0:
......@@ -7142,8 +7142,8 @@ packages:
engines: {node: '>=10.13.0'}
dev: false
/pont-engine/1.3.3:
resolution: {integrity: sha512-JvN32pu25vrc/cw8/hkgNXNIJS+sxTZ9+7ZXZnvpsLdujmlTD7V67ka1Ak37BeylKTNb1sWdRrg4bSQXDqaB3Q==}
/pont-engine/1.4.0:
resolution: {integrity: sha512-PwitNXZpTXcsGn04wEYIy6pLArVVOkMNBVztSVTgX1ixlE0p76IA7CvGKlKxGRU3Fl6CBFvkI7RCGSvbfSb89g==}
hasBin: true
dependencies:
chalk: 2.4.2
......@@ -8661,8 +8661,8 @@ packages:
resolution: {integrity: sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==}
dev: true
/uglify-js/3.17.0:
resolution: {integrity: sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==}
/uglify-js/3.17.3:
resolution: {integrity: sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==}
engines: {node: '>=0.8.0'}
hasBin: true
requiresBuild: true
......
......@@ -2,8 +2,8 @@
"originType": "SwaggerV2",
"originUrl": "http://127.0.0.1:8081/api/v2/api-docs",
"templateType": "fetch",
"templatePath": "./pont.template",
"transformPath": "./pont.transform",
"templatePath": "./pont-template",
"transformPath": "./pont-transform",
"outDir": "./src/api/services",
"surrounding": "typeScript",
"mocks": {
......
......@@ -12,19 +12,44 @@ export class FileStructures extends Pont.FileStructures {
}
export default class BasicGenerator extends CodeGenerator {
checkJsonParam(inter: Interface, paramsCode: string): boolean {
const prettier = require('prettier')
const requestParams = inter.getRequestParams(this.surrounding)
const code = prettier.format(paramsCode, { parser: 'typescript' })
return code.includes('{}') && requestParams.includes('body')
}
// 认为没有返回值的接口表示下载(通常是)
isDownload(inter: Interface): boolean {
return inter.responseType === 'any'
}
// 认为包含 form 参数的接口表示带有上传功能
isUpload(inter: Interface): boolean {
return inter.getRequestParams(this.surrounding).includes('form')
}
getParams(inter: Interface, paramsCode: string) {
let requestParams = inter.getRequestParams(this.surrounding)
let bodyTypeDef = ''
const prettier = require('prettier')
if (prettier.format(paramsCode, { parser: 'typescript' }).includes('{}')) {
if (!requestParams.includes('form')) {
requestParams = requestParams.replace('params', 'params?')
}
if (requestParams.includes('body')) {
requestParams = requestParams.replace('params?: Params, ', '')
bodyTypeDef = requestParams.replace(/^.*body: (.*),.*$/gi, '$1')
}
}
return `${requestParams.replace(
'options?: any',
`config?: http.RequestConfig<Params${requestParams.includes('form') ? ' | FormData' : ''}>`,
`config?: http.RequestConfig<${
bodyTypeDef ? bodyTypeDef : `Params${requestParams.includes('form') ? ' | FormData' : ''}`
}>`,
)}, options?: http.RequestOptions`
}
......@@ -64,7 +89,12 @@ export default class BasicGenerator extends CodeGenerator {
const paramsCode = inter.getParamsCode('Params', this.surrounding)
const requestParams = this.getParams(inter, paramsCode)
const undef = inter.response.getInitialValue() === 'undefined'
const isBody = this.checkJsonParam(inter, paramsCode)
// TODO
// 扩展 hooks mode
// 采用 vue-request 或 @tanstack/vue-query
// export function useRequest()
return `
/**
* @desc ${inter.description}
......@@ -73,7 +103,7 @@ export default class BasicGenerator extends CodeGenerator {
${undef ? '' : `import * as defs from '../../baseClass';`}
import { defHttp } from '/@/utils/http/axios'
export ${paramsCode}
${isBody ? '' : `export ${paramsCode}`}
${undef ? '' : `export const init = ${inter.response.getInitialValue(true)};`}
......@@ -84,11 +114,13 @@ export default class BasicGenerator extends CodeGenerator {
${
method === 'GET'
? 'params'
: `data: ${requestParams.includes('form') ? 'form || params' : 'params'}`
: `data: ${requestParams.includes('form') ? 'form || params' : isBody ? 'body' : 'params'}`
},
${
requestParams.includes('form')
? `headers: { 'Content-Type': 'multipart/form-data;charset=UTF-8' },`
: isBody
? `headers: { 'Content-Type': 'application/json' },`
: ''
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -31,6 +31,20 @@ declare namespace defs {
redirect?: string
}
export class PageParam {
/** 当前页数 */
pageNo?: number
/** 分页条数 */
pageSize?: number
/** 排序字段 */
sortField?: string
/** 排序方向(ASC|DESC) */
sortOrder?: 'ASC' | 'DESC'
}
export class PageVo<T0 = any> {
/** 数据 */
data?: Array<T0>
......@@ -123,6 +137,14 @@ declare namespace defs {
uid?: string
}
export class UserExtensionVo {
/** 年龄 */
age?: number
/** 性别 */
gender?: number
}
export class UserInfo {
/** 头像 */
avatar?: string
......@@ -133,6 +155,9 @@ declare namespace defs {
/** 用户主页 */
homePath?: string
/** 手机号 */
mobile?: string
/** 真实姓名 */
realName?: string
......@@ -265,6 +290,24 @@ namespace API {
options?: http.RequestOptions,
): Promise<Response>
}
/**
* 检查登录状态
* /api/auth/valid
*/
export namespace valid {
export class Params {}
export type Response = boolean
export const init: Response
export function request(
params?: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
}
/**
......@@ -272,7 +315,7 @@ namespace API {
*/
export namespace example {
/**
* hello
* Hello World
* /api/example/
*/
export namespace hello {
......@@ -290,7 +333,7 @@ namespace API {
}
/**
* download
* 文件下载
* /api/example/download
*/
export namespace download {
......@@ -308,7 +351,7 @@ namespace API {
}
/**
* fail
* 测试失败
* /api/example/fail
*/
export namespace fail {
......@@ -326,7 +369,43 @@ namespace API {
}
/**
* page
* 查询用户属性
* /api/example/findUserExtensionInfo
*/
export namespace findUserExtensionInfo {
export class Params {}
export type Response = defs.UserExtensionVo
export const init: Response
export function request(
params?: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
/**
* JSON 传参
* /api/example/json
*/
export namespace json {
export class Params {}
export type Response = defs.PageVo<string>
export const init: Response
export function request(
body: defs.PageParam,
config?: http.RequestConfig<defs.PageParam>,
options?: http.RequestOptions,
): Promise<Response>
}
/**
* 分页条件查询
* /api/example/page
*/
export namespace page {
......@@ -351,30 +430,35 @@ namespace API {
options?: http.RequestOptions,
): Promise<Response>
}
}
/**
* 文件管理
*/
export namespace file {
/**
* 测试 MyBatis Plus 查询
* /api/example/test
* 文件下载
* /api/common/file/download
*/
export namespace test {
export class Params {}
export namespace download {
export class Params {
/** bucket */
bucket: string
/** object */
object: string
}
export type Response = string
export type Response = any
export const init: Response
export function request(
params?: Params,
params: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
}
/**
* 文件管理
*/
export namespace file {
/**
* 文件上传
* /api/common/file/upload
......@@ -393,6 +477,27 @@ namespace API {
options?: http.RequestOptions,
): Promise<Response>
}
/**
* Base64 图片上传
* /api/common/file/uploadBase64Image
*/
export namespace uploadBase64Image {
export class Params {
/** Base64 图片信息 */
base64Image: string
}
export type Response = string
export const init: Response
export function request(
params: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
}
/**
......@@ -401,7 +506,7 @@ namespace API {
export namespace permission {
/**
* 新增
* /api/manage/permission/add
* /api/sys/permission/add
*/
export namespace add {
export class Params {
......@@ -444,7 +549,7 @@ namespace API {
/**
* 删除
* /api/manage/permission/deleted
* /api/sys/permission/deleted
*/
export namespace deleted {
export class Params {
......@@ -465,7 +570,7 @@ namespace API {
/**
* 查询
* /api/manage/permission/find
* /api/sys/permission/find
*/
export namespace find {
export class Params {
......@@ -486,7 +591,7 @@ namespace API {
/**
* 修改
* /api/manage/permission/modify
* /api/sys/permission/modify
*/
export namespace modify {
export class Params {
......@@ -531,7 +636,7 @@ namespace API {
/**
* 分页查询
* /api/manage/permission/page
* /api/sys/permission/page
*/
export namespace page {
export class Params {
......@@ -558,12 +663,12 @@ namespace API {
/**
* 树结构查询
* /api/manage/permission/tree
* /api/sys/permission/tree
*/
export namespace tree {
export class Params {
/** pid */
pid: string
pid?: string
}
export type Response = Array<defs.PermissionVo>
......@@ -584,7 +689,7 @@ namespace API {
export namespace role {
/**
* 新增
* /api/manage/role/add
* /api/sys/role/add
*/
export namespace add {
export class Params {
......@@ -607,7 +712,7 @@ namespace API {
/**
* 分配权限
* /api/manage/role/assign
* /api/sys/role/assign
*/
export namespace assign {
export class Params {
......@@ -630,12 +735,12 @@ namespace API {
/**
* 删除
* /api/manage/role/deleted
* /api/sys/role/deleted
*/
export namespace deleted {
export class Params {
/** id */
id: string
/** ids 多个以逗号分割 */
ids: string
}
export type Response = string
......@@ -651,7 +756,7 @@ namespace API {
/**
* 查询
* /api/manage/role/find
* /api/sys/role/find
*/
export namespace find {
export class Params {
......@@ -672,7 +777,7 @@ namespace API {
/**
* 修改
* /api/manage/role/modify
* /api/sys/role/modify
*/
export namespace modify {
export class Params {
......@@ -697,7 +802,7 @@ namespace API {
/**
* 分页查询
* /api/manage/role/page
* /api/sys/role/page
*/
export namespace page {
export class Params {
......@@ -724,7 +829,7 @@ namespace API {
/**
* 选项查询
* /api/manage/role/selector
* /api/sys/role/selector
*/
export namespace selector {
export class Params {}
......@@ -746,49 +851,68 @@ namespace API {
*/
export namespace user {
/**
* 获取用户菜单
* /api/user/getMenuList
* 分配角色
* /api/sys/user/assign
*/
export namespace getMenuList {
export class Params {}
export namespace assign {
export class Params {
/** id */
id: string
/** ids 多个以逗号分割 */
ids: string
}
export type Response = Array<defs.MenuVo>
export type Response = string
export const init: Response
export function request(
params?: Params,
params: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
/**
* 获取用户权限
* /api/user/getPermCode
* 分页查询
* /api/sys/user/page
*/
export namespace getPermCode {
export class Params {}
export namespace page {
export class Params {
/** 当前页数 */
pageNo: number
/** 分页条数 */
pageSize: number
/** 排序字段 */
sortField?: string
/** 排序方向(ASC|DESC) */
sortOrder?: 'ASC' | 'DESC'
}
export type Response = Array<string>
export type Response = defs.PageVo<defs.UserVo>
export const init: Response
export function request(
params?: Params,
params: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
}
/**
* 用户信息
*/
export namespace userView {
/**
* 获取登录用户信息
* /api/user/getUserInfo
* 获取用户菜单
* /api/user/getMenuList
*/
export namespace getUserInfo {
export namespace getMenuList {
export class Params {}
export type Response = defs.UserInfo
export type Response = Array<defs.MenuVo>
export const init: Response
......@@ -800,50 +924,36 @@ namespace API {
}
/**
* 分配角色
* /api/user/manage/assign
* 获取用户权限
* /api/user/getPermCode
*/
export namespace assign {
export class Params {
/** id */
id: string
/** ids 多个以逗号分割 */
ids: string
}
export namespace getPermCode {
export class Params {}
export type Response = string
export type Response = Array<string>
export const init: Response
export function request(
params: Params,
params?: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
}
/**
* 分页查询
* /api/user/manage/page
* 获取登录用户信息
* /api/user/getUserInfo
*/
export namespace page {
export class Params {
/** 当前页数 */
pageNo: number
/** 分页条数 */
pageSize: number
/** 排序字段 */
sortField?: string
/** 排序方向(ASC|DESC) */
sortOrder?: 'ASC' | 'DESC'
}
export namespace getUserInfo {
export class Params {}
export type Response = defs.PageVo<defs.UserVo>
export type Response = defs.UserInfo
export const init: Response
export function request(
params: Params,
params?: Params,
config?: http.RequestConfig<Params>,
options?: http.RequestOptions,
): Promise<Response>
......
......@@ -26,6 +26,20 @@ export class MenuVo {
redirect = ''
}
export class PageParam {
/** 当前页数 */
pageNo = undefined
/** 分页条数 */
pageSize = undefined
/** 排序字段 */
sortField = ''
/** 排序方向(ASC|DESC) */
sortOrder = 'ASC'
}
export class PageVo {
/** 数据 */
data = []
......@@ -118,6 +132,14 @@ export class RoleVo {
uid = ''
}
export class UserExtensionVo {
/** 年龄 */
age = undefined
/** 性别 */
gender = undefined
}
export class UserInfo {
/** 头像 */
avatar = ''
......@@ -128,6 +150,9 @@ export class UserInfo {
/** 用户主页 */
homePath = ''
/** 手机号 */
mobile = ''
/** 真实姓名 */
realName = ''
......
......@@ -4,5 +4,6 @@
import * as login from './login'
import * as logout from './logout'
import * as register from './register'
import * as valid from './valid'
export { login, logout, register }
export { login, logout, register, valid }
/**
* @desc 测试 MyBatis Plus 查询
* @desc 检查登录状态
*/
import * as defs from '../../baseClass'
......@@ -12,7 +12,7 @@ export const init = new defs.Result()
export function request(params?: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/example/test',
url: '/auth/valid',
method: 'GET',
params,
......
/**
* @desc download
* @desc 文件下载
*/
import { defHttp } from '/@/utils/http/axios'
......
/**
* @desc fail
* @desc 测试失败
*/
import * as defs from '../../baseClass'
......
/**
* @desc 查询用户属性
*/
import * as defs from '../../baseClass'
import { defHttp } from '/@/utils/http/axios'
export class Params {}
export const init = new defs.Result()
export function request(params?: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/example/findUserExtensionInfo',
method: 'GET',
params,
...config,
},
options,
)
}
/**
* @desc hello
* @desc Hello World
*/
import * as defs from '../../baseClass'
......
......@@ -4,7 +4,8 @@
import * as hello from './hello'
import * as download from './download'
import * as fail from './fail'
import * as findUserExtensionInfo from './findUserExtensionInfo'
import * as json from './json'
import * as page from './page'
import * as test from './test'
export { hello, download, fail, page, test }
export { hello, download, fail, findUserExtensionInfo, json, page }
/**
* @desc JSON 传参
*/
import * as defs from '../../baseClass'
import { defHttp } from '/@/utils/http/axios'
export const init = new defs.Result()
export function request(
body: defs.PageParam,
config?: http.RequestConfig<defs.PageParam>,
options?: http.RequestOptions,
) {
return defHttp.request(
{
url: '/example/json',
method: 'POST',
data: body,
headers: { 'Content-Type': 'application/json' },
...config,
},
options,
)
}
/**
* @desc page
* @desc 分页条件查询
*/
import * as defs from '../../baseClass'
......
/**
* @desc 文件下载
*/
import { defHttp } from '/@/utils/http/axios'
export class Params {
/** bucket */
bucket: string
/** object */
object: string
}
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/common/file/download',
method: 'GET',
params,
...config,
},
options,
)
}
/**
* @description 文件管理
*/
import * as download from './download'
import * as upload from './upload'
import * as uploadBase64Image from './uploadBase64Image'
export { upload }
export { download, upload, uploadBase64Image }
/**
* @desc Base64 图片上传
*/
import * as defs from '../../baseClass'
import { defHttp } from '/@/utils/http/axios'
export class Params {
/** Base64 图片信息 */
base64Image: string
}
export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/common/file/uploadBase64Image',
method: 'POST',
data: params,
...config,
},
options,
)
}
......@@ -4,6 +4,7 @@ import * as file from './file'
import * as permission from './permission'
import * as role from './role'
import * as user from './user'
import * as userView from './userView'
export const API = {
auth,
......@@ -12,4 +13,5 @@ export const API = {
permission,
role,
user,
userView,
}
......@@ -37,7 +37,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/add',
url: '/sys/permission/add',
method: 'POST',
data: params,
......
......@@ -15,7 +15,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/deleted',
url: '/sys/permission/deleted',
method: 'POST',
data: params,
......
......@@ -15,7 +15,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/find',
url: '/sys/permission/find',
method: 'GET',
params,
......
......@@ -39,7 +39,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/modify',
url: '/sys/permission/modify',
method: 'POST',
data: params,
......
......@@ -21,7 +21,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/page',
url: '/sys/permission/page',
method: 'GET',
params,
......
......@@ -7,7 +7,7 @@ import { defHttp } from '/@/utils/http/axios'
export class Params {
/** pid */
pid: string
pid?: string
}
export const init = new defs.Result()
......@@ -15,7 +15,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/permission/tree',
url: '/sys/permission/tree',
method: 'GET',
params,
......
......@@ -17,7 +17,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/add',
url: '/sys/role/add',
method: 'POST',
data: params,
......
......@@ -17,7 +17,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/assign',
url: '/sys/role/assign',
method: 'POST',
data: params,
......
......@@ -6,8 +6,8 @@ import * as defs from '../../baseClass'
import { defHttp } from '/@/utils/http/axios'
export class Params {
/** id */
id: string
/** ids 多个以逗号分割 */
ids: string
}
export const init = new defs.Result()
......@@ -15,7 +15,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/deleted',
url: '/sys/role/deleted',
method: 'POST',
data: params,
......
......@@ -15,7 +15,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/find',
url: '/sys/role/find',
method: 'GET',
params,
......
......@@ -19,7 +19,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/modify',
url: '/sys/role/modify',
method: 'POST',
data: params,
......
......@@ -21,7 +21,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/page',
url: '/sys/role/page',
method: 'GET',
params,
......
......@@ -12,7 +12,7 @@ export const init = new defs.Result()
export function request(params?: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/manage/role/selector',
url: '/sys/role/selector',
method: 'GET',
params,
......
......@@ -17,7 +17,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/user/manage/assign',
url: '/sys/user/assign',
method: 'POST',
data: params,
......
/**
* @description 用户管理
*/
import * as getMenuList from './getMenuList'
import * as getPermCode from './getPermCode'
import * as getUserInfo from './getUserInfo'
import * as assign from './assign'
import * as page from './page'
export { getMenuList, getPermCode, getUserInfo, assign, page }
export { assign, page }
......@@ -21,7 +21,7 @@ export const init = new defs.Result()
export function request(params: Params, config?: http.RequestConfig<Params>, options?: http.RequestOptions) {
return defHttp.request(
{
url: '/user/manage/page',
url: '/sys/user/page',
method: 'GET',
params,
......
/**
* @description 用户信息
*/
import * as getMenuList from './getMenuList'
import * as getPermCode from './getPermCode'
import * as getUserInfo from './getUserInfo'
export { getMenuList, getPermCode, getUserInfo }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论