init: 项目初始化提交
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				CI / Test (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Test (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Lint (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Lint (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Check (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Check (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
				
			
		
			
				
	
				Release Drafter / update_release_draft (push) Has been cancelled
				
			
		
			
				
	
				CI / CI OK (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Rerun on failure (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	CI / Test (ubuntu-latest) (push) Has been cancelled
				
			CI / Test (windows-latest) (push) Has been cancelled
				
			CI / Lint (ubuntu-latest) (push) Has been cancelled
				
			CI / Lint (windows-latest) (push) Has been cancelled
				
			CI / Check (ubuntu-latest) (push) Has been cancelled
				
			CI / Check (windows-latest) (push) Has been cancelled
				
			CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
				
			Release Drafter / update_release_draft (push) Has been cancelled
				
			CI / CI OK (push) Has been cancelled
				
			Deploy Website on push / Rerun on failure (push) Has been cancelled
				
			This commit is contained in:
		
							
								
								
									
										15
									
								
								apps/backend-mock/api/system/dept/.post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								apps/backend-mock/api/system/dept/.post.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { | ||||
|   sleep, | ||||
|   unAuthorizedResponse, | ||||
|   useResponseSuccess, | ||||
| } from '~/utils/response'; | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|   await sleep(600); | ||||
|   return useResponseSuccess(null); | ||||
| }); | ||||
							
								
								
									
										15
									
								
								apps/backend-mock/api/system/dept/[id].delete.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								apps/backend-mock/api/system/dept/[id].delete.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { | ||||
|   sleep, | ||||
|   unAuthorizedResponse, | ||||
|   useResponseSuccess, | ||||
| } from '~/utils/response'; | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|   await sleep(1000); | ||||
|   return useResponseSuccess(null); | ||||
| }); | ||||
							
								
								
									
										15
									
								
								apps/backend-mock/api/system/dept/[id].put.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								apps/backend-mock/api/system/dept/[id].put.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { | ||||
|   sleep, | ||||
|   unAuthorizedResponse, | ||||
|   useResponseSuccess, | ||||
| } from '~/utils/response'; | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|   await sleep(2000); | ||||
|   return useResponseSuccess(null); | ||||
| }); | ||||
							
								
								
									
										61
									
								
								apps/backend-mock/api/system/dept/list.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								apps/backend-mock/api/system/dept/list.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| import { faker } from '@faker-js/faker'; | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response'; | ||||
|  | ||||
| const formatterCN = new Intl.DateTimeFormat('zh-CN', { | ||||
|   timeZone: 'Asia/Shanghai', | ||||
|   year: 'numeric', | ||||
|   month: '2-digit', | ||||
|   day: '2-digit', | ||||
|   hour: '2-digit', | ||||
|   minute: '2-digit', | ||||
|   second: '2-digit', | ||||
| }); | ||||
|  | ||||
| function generateMockDataList(count: number) { | ||||
|   const dataList = []; | ||||
|  | ||||
|   for (let i = 0; i < count; i++) { | ||||
|     const dataItem: Record<string, any> = { | ||||
|       id: faker.string.uuid(), | ||||
|       pid: 0, | ||||
|       name: faker.commerce.department(), | ||||
|       status: faker.helpers.arrayElement([0, 1]), | ||||
|       createTime: formatterCN.format( | ||||
|         faker.date.between({ from: '2021-01-01', to: '2022-12-31' }), | ||||
|       ), | ||||
|       remark: faker.lorem.sentence(), | ||||
|     }; | ||||
|     if (faker.datatype.boolean()) { | ||||
|       dataItem.children = Array.from( | ||||
|         { length: faker.number.int({ min: 1, max: 5 }) }, | ||||
|         () => ({ | ||||
|           id: faker.string.uuid(), | ||||
|           pid: dataItem.id, | ||||
|           name: faker.commerce.department(), | ||||
|           status: faker.helpers.arrayElement([0, 1]), | ||||
|           createTime: formatterCN.format( | ||||
|             faker.date.between({ from: '2023-01-01', to: '2023-12-31' }), | ||||
|           ), | ||||
|           remark: faker.lorem.sentence(), | ||||
|         }), | ||||
|       ); | ||||
|     } | ||||
|     dataList.push(dataItem); | ||||
|   } | ||||
|  | ||||
|   return dataList; | ||||
| } | ||||
|  | ||||
| const mockData = generateMockDataList(10); | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|  | ||||
|   const listData = structuredClone(mockData); | ||||
|  | ||||
|   return useResponseSuccess(listData); | ||||
| }); | ||||
							
								
								
									
										12
									
								
								apps/backend-mock/api/system/menu/list.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								apps/backend-mock/api/system/menu/list.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { MOCK_MENU_LIST } from '~/utils/mock-data'; | ||||
| import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response'; | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|  | ||||
|   return useResponseSuccess(MOCK_MENU_LIST); | ||||
| }); | ||||
							
								
								
									
										28
									
								
								apps/backend-mock/api/system/menu/name-exists.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								apps/backend-mock/api/system/menu/name-exists.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { MOCK_MENU_LIST } from '~/utils/mock-data'; | ||||
| import { unAuthorizedResponse } from '~/utils/response'; | ||||
|  | ||||
| const namesMap: Record<string, any> = {}; | ||||
|  | ||||
| function getNames(menus: any[]) { | ||||
|   menus.forEach((menu) => { | ||||
|     namesMap[menu.name] = String(menu.id); | ||||
|     if (menu.children) { | ||||
|       getNames(menu.children); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| getNames(MOCK_MENU_LIST); | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|   const { id, name } = getQuery(event); | ||||
|  | ||||
|   return (name as string) in namesMap && | ||||
|     (!id || namesMap[name as string] !== String(id)) | ||||
|     ? useResponseSuccess(true) | ||||
|     : useResponseSuccess(false); | ||||
| }); | ||||
							
								
								
									
										28
									
								
								apps/backend-mock/api/system/menu/path-exists.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								apps/backend-mock/api/system/menu/path-exists.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { MOCK_MENU_LIST } from '~/utils/mock-data'; | ||||
| import { unAuthorizedResponse } from '~/utils/response'; | ||||
|  | ||||
| const pathMap: Record<string, any> = { '/': 0 }; | ||||
|  | ||||
| function getPaths(menus: any[]) { | ||||
|   menus.forEach((menu) => { | ||||
|     pathMap[menu.path] = String(menu.id); | ||||
|     if (menu.children) { | ||||
|       getPaths(menu.children); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| getPaths(MOCK_MENU_LIST); | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|   const { id, path } = getQuery(event); | ||||
|  | ||||
|   return (path as string) in pathMap && | ||||
|     (!id || pathMap[path as string] !== String(id)) | ||||
|     ? useResponseSuccess(true) | ||||
|     : useResponseSuccess(false); | ||||
| }); | ||||
							
								
								
									
										83
									
								
								apps/backend-mock/api/system/role/list.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								apps/backend-mock/api/system/role/list.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| import { faker } from '@faker-js/faker'; | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { getMenuIds, MOCK_MENU_LIST } from '~/utils/mock-data'; | ||||
| import { unAuthorizedResponse, usePageResponseSuccess } from '~/utils/response'; | ||||
|  | ||||
| const formatterCN = new Intl.DateTimeFormat('zh-CN', { | ||||
|   timeZone: 'Asia/Shanghai', | ||||
|   year: 'numeric', | ||||
|   month: '2-digit', | ||||
|   day: '2-digit', | ||||
|   hour: '2-digit', | ||||
|   minute: '2-digit', | ||||
|   second: '2-digit', | ||||
| }); | ||||
|  | ||||
| const menuIds = getMenuIds(MOCK_MENU_LIST); | ||||
|  | ||||
| function generateMockDataList(count: number) { | ||||
|   const dataList = []; | ||||
|  | ||||
|   for (let i = 0; i < count; i++) { | ||||
|     const dataItem: Record<string, any> = { | ||||
|       id: faker.string.uuid(), | ||||
|       name: faker.commerce.product(), | ||||
|       status: faker.helpers.arrayElement([0, 1]), | ||||
|       createTime: formatterCN.format( | ||||
|         faker.date.between({ from: '2022-01-01', to: '2025-01-01' }), | ||||
|       ), | ||||
|       permissions: faker.helpers.arrayElements(menuIds), | ||||
|       remark: faker.lorem.sentence(), | ||||
|     }; | ||||
|  | ||||
|     dataList.push(dataItem); | ||||
|   } | ||||
|  | ||||
|   return dataList; | ||||
| } | ||||
|  | ||||
| const mockData = generateMockDataList(100); | ||||
|  | ||||
| export default eventHandler(async (event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|  | ||||
|   const { | ||||
|     page = 1, | ||||
|     pageSize = 20, | ||||
|     name, | ||||
|     id, | ||||
|     remark, | ||||
|     startTime, | ||||
|     endTime, | ||||
|     status, | ||||
|   } = getQuery(event); | ||||
|   let listData = structuredClone(mockData); | ||||
|   if (name) { | ||||
|     listData = listData.filter((item) => | ||||
|       item.name.toLowerCase().includes(String(name).toLowerCase()), | ||||
|     ); | ||||
|   } | ||||
|   if (id) { | ||||
|     listData = listData.filter((item) => | ||||
|       item.id.toLowerCase().includes(String(id).toLowerCase()), | ||||
|     ); | ||||
|   } | ||||
|   if (remark) { | ||||
|     listData = listData.filter((item) => | ||||
|       item.remark?.toLowerCase()?.includes(String(remark).toLowerCase()), | ||||
|     ); | ||||
|   } | ||||
|   if (startTime) { | ||||
|     listData = listData.filter((item) => item.createTime >= startTime); | ||||
|   } | ||||
|   if (endTime) { | ||||
|     listData = listData.filter((item) => item.createTime <= endTime); | ||||
|   } | ||||
|   if (['0', '1'].includes(status as string)) { | ||||
|     listData = listData.filter((item) => item.status === Number(status)); | ||||
|   } | ||||
|   return usePageResponseSuccess(page as string, pageSize as string, listData); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user