文档补充
This commit is contained in:
		
							parent
							
								
									e386994f04
								
							
						
					
					
						commit
						2dcf81c155
					
				
							
								
								
									
										135
									
								
								sub-government-affairs-service/doc/API定义规范.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								sub-government-affairs-service/doc/API定义规范.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,135 @@ | |||||||
|  | 
 | ||||||
|  | # 前端 API 定义规范(REST 风格) | ||||||
|  | 
 | ||||||
|  | > 版本:v1.0   | ||||||
|  | > 日期:2025-07-01   | ||||||
|  | > 风格:**RESTful**   | ||||||
|  | > 适用范围:Vue3 / React / 模块化 JS 项目   | ||||||
|  | > 目标:提升接口命名一致性,增强可维护性与可读性 | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🌐 RESTful 命名规范 | ||||||
|  | 
 | ||||||
|  | REST(Representational State Transfer)强调以资源为中心的接口设计,以下为规范核心: | ||||||
|  | 
 | ||||||
|  | ### ✅ 基本动词与 HTTP 方法对应 | ||||||
|  | 
 | ||||||
|  | | 动作         | HTTP 方法 | 路径示例                       | 命名示例(函数)         | | ||||||
|  | |--------------|------------|-------------------------------|---------------------------| | ||||||
|  | | 获取列表     | GET        | `/users`                      | `fetchUserList`           | | ||||||
|  | | 获取详情     | GET        | `/users/:id`                  | `getUserById`             | | ||||||
|  | | 创建         | POST       | `/users`                      | `createUser`              | | ||||||
|  | | 修改         | PUT/PATCH  | `/users/:id`                  | `updateUser`              | | ||||||
|  | | 删除         | DELETE     | `/users/:id`                  | `deleteUserById`          | | ||||||
|  | | 导出         | GET        | `/users/export`               | `exportUserExcel`         | | ||||||
|  | | 上传         | POST       | `/files/upload`               | `uploadFile`              | | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 📁 文件组织结构 | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | src/ | ||||||
|  | ├── apis/ | ||||||
|  | │   ├── landResourceManagement/    # 土地资源管理 | ||||||
|  | │   │   ├── plantingPlan/          # 种植规划 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── operationRecord/       # 作业记录 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── landIllegal/           # 土地违法处理 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── landManagement/        # 土地管理 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── landInspection/        # 土地巡查 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── gridManagement/        # 网格管理 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── gridMemberManagement/  # 网格员管理 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── basicInfoMaintenance/  # 基础信息维护 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── cropsManagement/       # 种植作物 | ||||||
|  | │   │   │   ├── index.js | ||||||
|  | │   │   ├── index.js               # 土地资源管理模块统一入口 | ||||||
|  | │   ├── productionEntityManagement/ # 生产经营主体管理 | ||||||
|  | │   │   ├── index.js | ||||||
|  | │   ├── inputManagement/           # 投入品管理 | ||||||
|  | │   │   ├── index.js | ||||||
|  | │   ├── productTraceability/       # 农产品溯源 | ||||||
|  | │   │   ├── index.js | ||||||
|  | │   ├── index.js                   # 项目统一入口文件 | ||||||
|  | ├── utils/ | ||||||
|  | │   ├── axios.js                   # 封装的请求工具 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🧱 函数命名规范 | ||||||
|  | 
 | ||||||
|  | 接口定义应以 **动词+资源名** 格式命名函数(驼峰式 camelCase): | ||||||
|  | 
 | ||||||
|  | ```js | ||||||
|  | // 用户模块 API 示例 | ||||||
|  | import request from '@/utils/request'; | ||||||
|  | 
 | ||||||
|  | export function fetchUserList(params) { | ||||||
|  |   return request('/api/users', { method: 'GET', params }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function getUserById(id) { | ||||||
|  |   return request(`/api/users/${id}`, { method: 'GET' }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function createUser(data) { | ||||||
|  |   return request('/api/users', { method: 'POST', data }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function updateUser(id, data) { | ||||||
|  |   return request(`/api/users/${id}`, { method: 'PUT', data }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function deleteUserById(id) { | ||||||
|  |   return request(`/api/users/${id}`, { method: 'DELETE' }); | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🧠 组件方法命名建议 | ||||||
|  | 
 | ||||||
|  | 组件内部方法(UI逻辑处理)请统一以 `handle` 前缀区分,避免与 API 冲突: | ||||||
|  | 
 | ||||||
|  | ```js | ||||||
|  | const handleAddUser = () => { ... }; | ||||||
|  | const handleEditUser = (row) => { ... }; | ||||||
|  | const handleDeleteUser = (id) => { ... }; | ||||||
|  | const handleExportExcel = () => { ... }; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🚫 命名反例 | ||||||
|  | 
 | ||||||
|  | | 错误命名         | 问题说明                              | 推荐命名                 | | ||||||
|  | |------------------|----------------------------------------|--------------------------| | ||||||
|  | | `listUser`       | 动词语义模糊                          | `fetchUserList`          | | ||||||
|  | | `editUserById`   | 与 REST 风格不符                      | `updateUser`             | | ||||||
|  | | `addOrEditUser`  | 接口职责不清晰                        | `createUser` 或 `updateUser` | | ||||||
|  | | `removeUser`     | 与 HTTP 方法不一致                    | `deleteUserById`         | | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🧾 附录:接口语义对照表 | ||||||
|  | 
 | ||||||
|  | | 类型        | HTTP 方法 | REST URI 示例             | 函数命名示例            | | ||||||
|  | |-------------|------------|---------------------------|--------------------------| | ||||||
|  | | 查询列表    | GET        | `/entities`               | `fetchEntityList`        | | ||||||
|  | | 查询详情    | GET        | `/entities/:id`           | `getEntityById`          | | ||||||
|  | | 新增        | POST       | `/entities`               | `createEntity`           | | ||||||
|  | | 修改        | PUT        | `/entities/:id`           | `updateEntity`           | | ||||||
|  | | 删除        | DELETE     | `/entities/:id`           | `deleteEntityById`       | | ||||||
|  | | 导出        | GET        | `/entities/export`        | `exportEntityExcel`      | | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
							
								
								
									
										257
									
								
								sub-government-affairs-service/doc/组件文档.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								sub-government-affairs-service/doc/组件文档.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,257 @@ | |||||||
|  | # 文件上传组件 (FileUploader) | ||||||
|  | 
 | ||||||
|  | ## 组件说明 | ||||||
|  | 
 | ||||||
|  | 文件上传组件用于实现文件的上传、预览和管理功能。支持图片上传、多文件上传、文件预览等功能。 | ||||||
|  | 
 | ||||||
|  | ## 基本用法 | ||||||
|  | 
 | ||||||
|  | ```vue | ||||||
|  | <template> | ||||||
|  |   <file-uploader  | ||||||
|  |     v-model="fileList"  | ||||||
|  |     :limit="5" | ||||||
|  |     accept="image/*" | ||||||
|  |   /> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { ref } from 'vue'; | ||||||
|  | const fileList = ref([]); | ||||||
|  | </script> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Props | ||||||
|  | 
 | ||||||
|  | | 参数名        | 类型                | 默认值                                               | 说明              | | ||||||
|  | | ---------- | ----------------- | ------------------------------------------------- | --------------- | | ||||||
|  | | modelValue | `Array \| String` | `[]`                                              | 绑定值,图片路径数组或单个路径 | | ||||||
|  | | ossUrl     | `String`          | `'http://gov-cloud.oss-cn-chengdu.aliyuncs.com/'` | 回显时拼接图片完整路径使用   | | ||||||
|  | | limit      | `Number`          | `5`                                               | 最多上传几张图片        | | ||||||
|  | | accept     | `String`          | `'image/*'`                                       | 允许上传的文件类型       | | ||||||
|  | | readonly   | `Boolean`         | `false`                                           | 是否只读模式,不可上传删除   | | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## 事件 | ||||||
|  | | 事件名 | 参数 | 说明 | | ||||||
|  | |-------|------|------| | ||||||
|  | | update:modelValue | 新的文件列表值(数组或字符串) | 当文件列表发生变化时触发 | | ||||||
|  | 
 | ||||||
|  | ## 插槽 | ||||||
|  | 该组件没有提供插槽。 | ||||||
|  | 
 | ||||||
|  | ### 数据适配处理 | ||||||
|  | 
 | ||||||
|  | - `selectedFiles`:用于统一处理单文件和多文件场景,读时返回数组,写时根据 `limit` 决定是否回传为字符串或数组。 | ||||||
|  | - `fileList`:用于 `el-upload` 的回显列表,拼接完整 URL。 | ||||||
|  | - `previewList`:用于图片预览的 URL 列表。 | ||||||
|  | 
 | ||||||
|  | ## 样式 | ||||||
|  | 
 | ||||||
|  | 组件使用了Element Plus的el-upload和el-image-viewer组件,并添加了自定义样式以适应不同的布局需求。 | ||||||
|  | 
 | ||||||
|  | ## 依赖项 | ||||||
|  | 
 | ||||||
|  | - `element-plus` | ||||||
|  | - `@element-plus/icons-vue` 中的 `Plus` | ||||||
|  | - 自定义 API:`CommonUpload` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # UrlSelect 远程下拉选择组件 | ||||||
|  | 
 | ||||||
|  | 该组件基于 `el-select` 和自定义 axios 请求封装,支持从指定接口拉取选项列表,并支持 label/value 字段自定义。 | ||||||
|  | 
 | ||||||
|  | ## 功能特性 | ||||||
|  | 
 | ||||||
|  | - 下拉选项从远程接口加载(通过 `url` 和 `params` 指定) | ||||||
|  | - 支持自定义 label/value 字段名(`labelKey` / `valueKey`) | ||||||
|  | - 支持插槽透传(可扩展 options 或添加分组) | ||||||
|  | - 内部使用双向绑定模型 `internalValue` 实现响应式 | ||||||
|  | - 默认使用 `res.data.records` 作为解析逻辑,可自定义 `responseParser` | ||||||
|  | 
 | ||||||
|  | ## 使用示例 | ||||||
|  | 
 | ||||||
|  | ```vue | ||||||
|  | <UrlSelect | ||||||
|  |   v-model="form.industry" | ||||||
|  |   url="/api/base/industries" | ||||||
|  |   :params="{ enabled: true }" | ||||||
|  |   label-key="name" | ||||||
|  |   value-key="id" | ||||||
|  |   placeholder="请选择行业" | ||||||
|  | /> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Props 参数 | ||||||
|  | 
 | ||||||
|  | | 参数名         | 类型                        | 默认值                      | 说明                           | | ||||||
|  | | -------------- | --------------------------- | --------------------------- | ------------------------------ | | ||||||
|  | | modelValue     | `String \| Number \| Array` | `null`                      | 绑定的值                       | | ||||||
|  | | url            | `String`                    | `null`                      | 请求数据的接口地址             | | ||||||
|  | | params         | `Object`                    | `{}`                        | 请求时的参数                   | | ||||||
|  | | labelKey       | `String`                    | `'label'`                   | 数据项中作为 label 显示的字段  | | ||||||
|  | | valueKey       | `String`                    | `'value'`                   | 数据项中作为 value 的字段      | | ||||||
|  | | responseParser | `Function`                  | `(res) => res.data.records` | 处理响应数据的函数,需返回数组 | | ||||||
|  | 
 | ||||||
|  | ## 事件说明 | ||||||
|  | 
 | ||||||
|  | 组件继承并透传了 `el-select` 的常用事件: | ||||||
|  | 
 | ||||||
|  | | 事件名              | 说明                         | | ||||||
|  | | ------------------- | ---------------------------- | | ||||||
|  | | `update:modelValue` | v-model 绑定更新             | | ||||||
|  | | `change`            | 选项变化时触发               | | ||||||
|  | | `blur`              | 失焦时触发                   | | ||||||
|  | | `focus`             | 聚焦时触发                   | | ||||||
|  | | `clear`             | 点击清空按钮时触发           | | ||||||
|  | | `visible-change`    | 下拉框显示/隐藏变化时触发    | | ||||||
|  | | `remove-tag`        | 多选时移除 tag 触发          | | ||||||
|  | | `scroll`            | 滚动触发(需设置高度才有效) | | ||||||
|  | 
 | ||||||
|  | ## 核心逻辑说明 | ||||||
|  | 
 | ||||||
|  | ### 1. 内部绑定值 | ||||||
|  | 
 | ||||||
|  | ```JavaScript | ||||||
|  | const internalValue = ref(props.modelValue); | ||||||
|  | watch(() => props.modelValue, (newVal) => internalValue.value = newVal); | ||||||
|  | watch(internalValue, (newVal) => emit('update:modelValue', newVal)); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### 2. 拉取远程选项 | ||||||
|  | 
 | ||||||
|  | ```JavaScript | ||||||
|  | async function fetchOptions() { | ||||||
|  |   if (!props.url) return; | ||||||
|  |   const res = await request.get(props.url, { params: props.params }); | ||||||
|  |   const records = props.responseParser(res); | ||||||
|  |   options.value = Array.isArray(records) ? records : []; | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 组件挂载时会立即请求一次远程数据。 | ||||||
|  | 
 | ||||||
|  | ### 3. 插槽支持 | ||||||
|  | 
 | ||||||
|  | 支持透传所有 `$slots`,并提供默认的 `option` 渲染逻辑。也可通过 `option-group` 插槽实现复杂渲染。 | ||||||
|  | 
 | ||||||
|  | ## 依赖项 | ||||||
|  | 
 | ||||||
|  | - `element-plus` 的 `el-select`、`el-option` | ||||||
|  | - 项目中的 `request` 请求封装(例如基于 axios) | ||||||
|  | 
 | ||||||
|  | ## 可拓展点 | ||||||
|  | 
 | ||||||
|  | - 支持分页加载远程选项(下拉滚动触发) | ||||||
|  | - 支持懒加载(点击展开时再加载) | ||||||
|  | - 支持 loading/loading-text 状态 | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # AreaSelect.vue 组件文档 | ||||||
|  | 
 | ||||||
|  | ## 组件简介 | ||||||
|  | 
 | ||||||
|  | `AreaSelect` 是一个基于 Element Plus 的级联选择组件,封装了行政区域选择功能。支持省/市/县三级联动,数据源通过接口自动获取。 | ||||||
|  | 
 | ||||||
|  | ## 使用方式 | ||||||
|  | 
 | ||||||
|  | ### 1. 引入组件 | ||||||
|  | 
 | ||||||
|  | ```vue | ||||||
|  | <AreaSelect v-model="areaCodeList" /> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### 2. 配置示例 | ||||||
|  | 
 | ||||||
|  | ```vue | ||||||
|  | <AreaSelect | ||||||
|  |   v-model="selectedArea" | ||||||
|  |   :label="'所属区域:'" | ||||||
|  |   :placeholder="'请选择区域'" | ||||||
|  |   :emit-path="true" | ||||||
|  |   :width="600" | ||||||
|  | /> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | ## Props 参数说明 | ||||||
|  | 
 | ||||||
|  | | 参数名        | 类型              | 默认值           | 说明                                                         | | ||||||
|  | | ------------- | ----------------- | ---------------- | ------------------------------------------------------------ | | ||||||
|  | | `modelValue`  | `Array | String`  | `[]`             | 双向绑定的值。如果 `emitPath` 为 `true`,则为数组,否则为字符串。 | | ||||||
|  | | `label`       | `String`          | `所属行政区域:` | 左侧 label 标签内容。                                        | | ||||||
|  | | `placeholder` | `String`          | `请选择行政区域` | 选择框中的占位符提示文字。                                   | | ||||||
|  | | `width`       | `Number | String` | `500`            | 整体组件宽度(单位:px)。                                   | | ||||||
|  | | `emitPath`    | `Boolean`         | `true`           | 是否返回完整路径的值数组。为 `false` 时只返回最后一级节点的值。 | | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | ## Events 说明 | ||||||
|  | 
 | ||||||
|  | | 事件名              | 说明                      | | ||||||
|  | | ------------------- | ------------------------- | | ||||||
|  | | `update:modelValue` | 用于 `v-model` 双向绑定。 | | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | ## 返回值说明 | ||||||
|  | 
 | ||||||
|  | - 当 `emitPath = true` 时,返回一个数组,例如: | ||||||
|  | 
 | ||||||
|  |   ```json | ||||||
|  |   ['530000', '530100', '530102'] | ||||||
|  |   ``` | ||||||
|  | 
 | ||||||
|  | - 当 `emitPath = false` 时,只返回最后一级,例如: | ||||||
|  | 
 | ||||||
|  |   ```json | ||||||
|  |   '530102' | ||||||
|  |   ``` | ||||||
|  | 
 | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | ## 接口说明 | ||||||
|  | 
 | ||||||
|  | 该组件内部自动发起请求: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | GET /system/area/region?areaCode=530000 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 接口返回行政区域数据,格式如下: | ||||||
|  | 
 | ||||||
|  | ```json | ||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "areaName": "云南省", | ||||||
|  |     "areaCode": "530000", | ||||||
|  |     "areaChildVOS": [ | ||||||
|  |       { | ||||||
|  |         "areaName": "昆明市", | ||||||
|  |         "areaCode": "530100", | ||||||
|  |         "areaChildVOS": [...] | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | ] | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | ## 注意事项 | ||||||
|  | 
 | ||||||
|  | - 外部不应主动更新 `modelValue`,避免造成循环依赖。 | ||||||
|  | - 默认展示为“云南省”下的行政区域。 | ||||||
|  | - 默认字段映射为: | ||||||
|  |   - `label`: `areaName` | ||||||
|  |   - `value`: `areaCode` | ||||||
|  |   - `children`: `areaChildVOS` | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user