# JobTypePicker 工种选择组件 基于 AddressPicker 组件设计的工种选择组件,支持单选、多选和多级树形结构。 ## 功能特性 - ✅ **单选模式**:选择单个工种 - ✅ **多选模式**:支持选择多个工种 - ✅ **多级树形结构**:支持一级、二级、三级工种选择 - ✅ **灵活配置**:可配置只选择到二级工种 - ✅ **整个工种选择**:支持选择整个工种类别 - ✅ **数据缓存**:自动缓存已加载的工种数据 - ✅ **响应式设计**:适配不同屏幕尺寸 ## 组件属性 | 属性名 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | multiple | Boolean | false | 是否支持多选 | | onlySubType | Boolean | false | 是否只选择到二级工种,不选择三级 | | showSelectWholeType | Boolean | false | 是否显示"选择整个工种"选项 | ## 事件 | 事件名 | 说明 | 回调参数 | |--------|------|----------| | confirm | 确认选择时触发 | result: 选择结果对象 | ## 返回数据结构 ```javascript { // 选中的工种层级 parentType: Object, // 一级工种对象 subType: Object, // 二级工种对象 detailType: Object, // 三级工种对象 // 多选时的数组 subTypes: Array, // 多选二级工种数组 detailTypes: Array, // 多选三级工种数组 // 最终选中的工种 selectedJobType: Object, // 最终选中的工种对象 // 用于后端的数据 selectedId: String, // 单选时的工种ID selectedIds: Array, // 多选时的工种ID数组 // 显示文本 fullJobType: String // 完整的工种名称文本 } ``` ## 基本用法 ### 1. 单选模式 ```vue ``` ### 2. 多选模式 ```vue ``` ### 3. 只选择到二级工种 ```vue ``` ### 4. 带"选择整个工种"选项 ```vue ``` ## 数据源配置 组件依赖 Vuex store 中的工种数据,需要确保以下配置: ### 1. store.js 配置 ```javascript // state 中添加 state: { jobTypeList: [], // 一级工种列表 jobTypeTreeMap: {} // 多级工种映射 } // mutations 中添加 mutations: { setChildJobTypeList(state, { pid, list }) { state.jobTypeTreeMap[pid] = list } } // actions 中添加 actions: { async getChildJobTypeList({ state, commit }, pid) { if(state.jobTypeTreeMap[pid]) { return Promise.resolve(state.jobTypeTreeMap[pid]) } return new Promise((resolve, reject) => { api('commonQueryJobTypeList', { pageNo: 1, pageSize: 99999, pid: pid }, res => { if(res.code == 200) { commit('setChildJobTypeList', { pid, list: res.result.records }) resolve(res.result.records) } else { reject(res) } }) }) } } ``` ### 2. API 接口 确保 `commonQueryJobTypeList` 接口支持 `pid` 参数来获取子级工种: ```javascript // api.js commonQueryJobTypeList: { url: '/api/common/queryJobTypeList', method: 'GET' } ``` ## 样式自定义 组件使用了 SCSS 变量,可以通过修改 uni-app 的主题变量来自定义样式: ```scss // uni.scss $uni-color: #007aff; // 主题色 ``` ## 注意事项 1. **数据格式**:工种数据需要包含 `id`、`name` 字段 2. **层级关系**:通过 `pid` 字段建立父子关系 3. **缓存机制**:已加载的工种数据会自动缓存,避免重复请求 4. **错误处理**:当获取子级工种失败时,会自动确认当前选择 5. **性能优化**:使用了 scroll-view 组件,支持大量数据的流畅滚动 ## 示例页面 可以参考 `pages/demo/JobTypePickerDemo.vue` 文件查看完整的使用示例。 ## 依赖组件 - uv-popup:弹窗组件 - uv-icon:图标组件 - uv-cell:单元格组件(示例中使用) ## 兼容性 - ✅ H5 - ✅ 小程序 - ✅ App ## 更新日志 ### v1.0.0 - 初始版本 - 支持单选、多选、多级树形结构 - 支持数据缓存和错误处理