乡村文化数字化保护平台,大众版小程序。支持微信小程序、H5等多端。
src/components/)@imengyu/js-request-transform + @imengyu/imengyu-utilsnpm run dev:h5 # H5 开发
npm run dev:mp-weixin # 微信小程序开发
npm run build:mp-weixin # 构建微信小程序
npm run type-check # TypeScript 类型检查
src/
├── api/ # API 请求模块,按业务域分组
│ ├── auth/ # 登录/用户认证
│ ├── agent/ # AI 智能体
│ ├── inheritor/ # 内容模型(活动、产品等)
│ ├── inhert/ # 村落与传承人
│ ├── light/ # 点亮村落、乡源树
│ ├── map/ # 地图相关
│ ├── restful/ # RESTful 通用服务
│ ├── system/ # 系统配置
│ ├── BaseAppServerRequestModule.ts # 请求拦截器/错误处理基类
│ ├── RequestModules.ts # 服务端请求模块
│ └── CommonContent.ts # 通用内容基类
├── common/ # 通用功能
│ ├── components/ # 共享组件
│ ├── composeabe/ # 组合式函数 (useAppInit, useUserTools 等)
│ ├── config/ # 配置 (AppConfig, ApiConfig, Theme)
│ ├── style/ # 全局 SCSS
│ └── utils/ # 工具函数
├── components/ # NaEasy UI 组件库
├── pages/ # 页面
│ ├── home/ # 首页/村落相关
│ ├── article/ # 文章
│ ├── chat/ # AI 对话
│ ├── dig/ # 采集投稿
│ ├── editor/ # 编辑器
│ └── user/ # 用户/登录
├── store/ # Pinia 状态管理
│ ├── auth.ts # 认证状态
│ ├── village.ts # 村落数据
│ └── collect.ts # 采集状态
└── pages.json # 路由配置
所有 API 数据模型继承 DataModel,使用 setNameMapperCase('Camel', 'Snake') 自动转换字段命名:
export class ExampleItem extends DataModel<ExampleItem> {
constructor() {
super(ExampleItem, '示例');
this.setNameMapperCase('Camel', 'Snake');
this._convertTable = {
id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
// 需要类型转换的字段在此声明
};
}
id!: number;
name = '';
}
AppServerRequestModule,按业务域组织export default new XxxApi()this.post() / this.get(),第二个参数为中文标签(用于错误提示)parsePagedList() 辅助方法BaseAppServerRequestModule 自动注入:
token — 用户令牌user_id — 用户 IDmain_body_id — 主体 IDVillageListItem, UserApi)getVillageList, isLogged)TreeApi.ts),页面/组件 kebab-caseuse 前缀 (useAuthStore, useUserTools)API 数据模型字段使用 JSDoc 单行注释标注含义,尤其是枚举类型字段需注明可选值:
/** 状态: 0=完善中, 1=已归档 */
status = 0;
/** 列入少数民族特色村寨试点示范: 0=否, 1=是 */
isFeaturedVillage = 0;
<script setup lang="ts"> 组合式 API<style lang="scss" scoped>项目 API 文档托管在 ShowDoc:https://www.showdoc.com.cn/minnanCE/
添加新接口时应参考文档补充完整的数据模型字段和类型转换表。
优先使用 chrome-devtools MCP 来请求文档.