|
@@ -5,12 +5,7 @@ import {
|
|
|
createAreaSchema,
|
|
createAreaSchema,
|
|
|
updateAreaSchema,
|
|
updateAreaSchema,
|
|
|
getAreaSchema,
|
|
getAreaSchema,
|
|
|
- listAreasSchema,
|
|
|
|
|
- deleteAreaSchema,
|
|
|
|
|
- toggleAreaStatusSchema,
|
|
|
|
|
- getAreasByLevelSchema,
|
|
|
|
|
- getChildAreasSchema,
|
|
|
|
|
- getAreaPathSchema
|
|
|
|
|
|
|
+ areaListResponseSchema
|
|
|
} from '@/server/modules/areas/area.schema';
|
|
} from '@/server/modules/areas/area.schema';
|
|
|
|
|
|
|
|
// 使用通用CRUD路由创建省市区管理API
|
|
// 使用通用CRUD路由创建省市区管理API
|
|
@@ -19,172 +14,8 @@ export default createCrudRoutes({
|
|
|
createSchema: createAreaSchema,
|
|
createSchema: createAreaSchema,
|
|
|
updateSchema: updateAreaSchema,
|
|
updateSchema: updateAreaSchema,
|
|
|
getSchema: getAreaSchema,
|
|
getSchema: getAreaSchema,
|
|
|
- listSchema: listAreasSchema,
|
|
|
|
|
- deleteSchema: deleteAreaSchema,
|
|
|
|
|
- toggleStatusSchema: toggleAreaStatusSchema,
|
|
|
|
|
|
|
+ listSchema: areaListResponseSchema,
|
|
|
searchFields: ['name', 'code'],
|
|
searchFields: ['name', 'code'],
|
|
|
- filterFields: ['level', 'parentId', 'isDisabled'],
|
|
|
|
|
- sortFields: ['name', 'level', 'code', 'createdAt'],
|
|
|
|
|
relations: ['parent', 'children'],
|
|
relations: ['parent', 'children'],
|
|
|
- middlewares: [authMiddleware]
|
|
|
|
|
-})
|
|
|
|
|
-// 获取省份列表
|
|
|
|
|
-.get('/provinces', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const provinces = await areaService.getProvinces();
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: provinces,
|
|
|
|
|
- message: '获取省份列表成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取省份列表失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取省份列表失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
-// 根据省份ID获取城市列表
|
|
|
|
|
-.get('/cities', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const { provinceId } = c.req.query();
|
|
|
|
|
- if (!provinceId) {
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '缺少省份ID参数'
|
|
|
|
|
- }, 400);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const cities = await areaService.getCitiesByProvinceId(Number(provinceId));
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: cities,
|
|
|
|
|
- message: '获取城市列表成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取城市列表失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取城市列表失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
-// 根据城市ID获取区县列表
|
|
|
|
|
-.get('/districts', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const { cityId } = c.req.query();
|
|
|
|
|
- if (!cityId) {
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '缺少城市ID参数'
|
|
|
|
|
- }, 400);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const districts = await areaService.getDistrictsByCityId(Number(cityId));
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: districts,
|
|
|
|
|
- message: '获取区县列表成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取区县列表失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取区县列表失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
-// 获取省市区完整路径
|
|
|
|
|
-.get('/:id/path', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const id = Number(c.req.param('id'));
|
|
|
|
|
- const validation = getAreaPathSchema.safeParse({ id });
|
|
|
|
|
- if (!validation.success) {
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '参数验证失败',
|
|
|
|
|
- errors: validation.error.errors
|
|
|
|
|
- }, 400);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const path = await areaService.getAreaPath(id);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: path,
|
|
|
|
|
- message: '获取省市区路径成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取省市区路径失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取省市区路径失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
-// 根据层级获取省市区列表
|
|
|
|
|
-.get('/level/:level', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const level = Number(c.req.param('level'));
|
|
|
|
|
- const validation = getAreasByLevelSchema.safeParse({ level });
|
|
|
|
|
- if (!validation.success) {
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '参数验证失败',
|
|
|
|
|
- errors: validation.error.errors
|
|
|
|
|
- }, 400);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const areas = await areaService.findByLevel(level);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: areas,
|
|
|
|
|
- message: '获取省市区列表成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取省市区列表失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取省市区列表失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
-// 根据父级ID获取子级省市区列表
|
|
|
|
|
-.get('/parent/:parentId', authMiddleware, async (c) => {
|
|
|
|
|
- try {
|
|
|
|
|
- const parentId = Number(c.req.param('parentId'));
|
|
|
|
|
- const validation = getChildAreasSchema.safeParse({ parentId });
|
|
|
|
|
- if (!validation.success) {
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '参数验证失败',
|
|
|
|
|
- errors: validation.error.errors
|
|
|
|
|
- }, 400);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- const areaService = c.get('areaService');
|
|
|
|
|
- const areas = await areaService.findByParentId(parentId);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: true,
|
|
|
|
|
- data: areas,
|
|
|
|
|
- message: '获取子级省市区列表成功'
|
|
|
|
|
- });
|
|
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取子级省市区列表失败:', error);
|
|
|
|
|
- return c.json({
|
|
|
|
|
- success: false,
|
|
|
|
|
- message: '获取子级省市区列表失败',
|
|
|
|
|
- error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
-});
|
|
|
|
|
|
|
+ middleware: [authMiddleware]
|
|
|
|
|
+})
|