| @ -1,255 +0,0 @@ | |||
| <template> | |||
| <view class="page"> | |||
| <navbar title="工种选择组件示例" leftClick @leftClick="$utils.navigateBack" /> | |||
| <view class="content"> | |||
| <view class="demo-section"> | |||
| <view class="section-title">单选模式</view> | |||
| <view class="demo-item"> | |||
| <uv-cell | |||
| title="选择工种(单选)" | |||
| rightIconStyle="fontSize: 30rpx;" | |||
| :value="singleResult.fullJobType || '请选择工种'" | |||
| @click="openSinglePicker" | |||
| isLink | |||
| ></uv-cell> | |||
| <view v-if="singleResult.selectedId" class="result-info"> | |||
| <text>选中ID: {{ singleResult.selectedId }}</text> | |||
| <text>选中工种: {{ singleResult.selectedJobType?.name }}</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="demo-section"> | |||
| <view class="section-title">多选模式</view> | |||
| <view class="demo-item"> | |||
| <uv-cell | |||
| title="选择工种(多选)" | |||
| rightIconStyle="fontSize: 30rpx;" | |||
| :value="multipleResult.fullJobType || '请选择工种'" | |||
| @click="openMultiplePicker" | |||
| isLink | |||
| ></uv-cell> | |||
| <view v-if="multipleResult.selectedIds && multipleResult.selectedIds.length > 0" class="result-info"> | |||
| <text>选中ID数组: {{ multipleResult.selectedIds.join(',') }}</text> | |||
| <text>选中数量: {{ multipleResult.selectedIds.length }}</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="demo-section"> | |||
| <view class="section-title">只选择到二级工种</view> | |||
| <view class="demo-item"> | |||
| <uv-cell | |||
| title="选择工种(二级)" | |||
| rightIconStyle="fontSize: 30rpx;" | |||
| :value="subTypeResult.fullJobType || '请选择工种'" | |||
| @click="openSubTypePicker" | |||
| isLink | |||
| ></uv-cell> | |||
| <view v-if="subTypeResult.selectedId" class="result-info"> | |||
| <text>选中ID: {{ subTypeResult.selectedId }}</text> | |||
| <text>选中工种: {{ subTypeResult.selectedJobType?.name }}</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="demo-section"> | |||
| <view class="section-title">带"选择整个工种"选项</view> | |||
| <view class="demo-item"> | |||
| <uv-cell | |||
| title="选择工种(整个工种)" | |||
| rightIconStyle="fontSize: 30rpx;" | |||
| :value="wholeTypeResult.fullJobType || '请选择工种'" | |||
| @click="openWholeTypePicker" | |||
| isLink | |||
| ></uv-cell> | |||
| <view v-if="wholeTypeResult.selectedId" class="result-info"> | |||
| <text>选中ID: {{ wholeTypeResult.selectedId }}</text> | |||
| <text>选中工种: {{ wholeTypeResult.selectedJobType?.name }}</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="demo-section"> | |||
| <view class="section-title">使用说明</view> | |||
| <view class="usage-info"> | |||
| <text class="usage-title">组件属性:</text> | |||
| <text>• multiple: 是否支持多选</text> | |||
| <text>• onlySubType: 是否只选择到二级工种</text> | |||
| <text>• showSelectWholeType: 是否显示"选择整个工种"选项</text> | |||
| <text class="usage-title">返回数据:</text> | |||
| <text>• selectedId: 单选时的工种ID</text> | |||
| <text>• selectedIds: 多选时的工种ID数组</text> | |||
| <text>• fullJobType: 完整的工种名称文本</text> | |||
| <text>• selectedJobType: 选中的工种对象</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <!-- 工种选择组件 --> | |||
| <JobTypePicker | |||
| ref="singlePicker" | |||
| @confirm="onSingleConfirm" | |||
| /> | |||
| <JobTypePicker | |||
| ref="multiplePicker" | |||
| :multiple="true" | |||
| @confirm="onMultipleConfirm" | |||
| /> | |||
| <JobTypePicker | |||
| ref="subTypePicker" | |||
| :onlySubType="true" | |||
| @confirm="onSubTypeConfirm" | |||
| /> | |||
| <JobTypePicker | |||
| ref="wholeTypePicker" | |||
| :showSelectWholeType="true" | |||
| @confirm="onWholeTypeConfirm" | |||
| /> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import JobTypePicker from '@/components/JobTypePicker.vue' | |||
| export default { | |||
| components: { | |||
| JobTypePicker | |||
| }, | |||
| data() { | |||
| return { | |||
| singleResult: {}, // 单选结果 | |||
| multipleResult: {}, // 多选结果 | |||
| subTypeResult: {}, // 二级工种结果 | |||
| wholeTypeResult: {} // 整个工种结果 | |||
| } | |||
| }, | |||
| onLoad() { | |||
| // 确保工种数据已加载 | |||
| this.$store.commit('getJobTypeList') | |||
| }, | |||
| methods: { | |||
| // 打开单选工种选择器 | |||
| openSinglePicker() { | |||
| this.$refs.singlePicker.open() | |||
| }, | |||
| // 打开多选工种选择器 | |||
| openMultiplePicker() { | |||
| this.$refs.multiplePicker.open() | |||
| }, | |||
| // 打开二级工种选择器 | |||
| openSubTypePicker() { | |||
| this.$refs.subTypePicker.open() | |||
| }, | |||
| // 打开整个工种选择器 | |||
| openWholeTypePicker() { | |||
| this.$refs.wholeTypePicker.open() | |||
| }, | |||
| // 单选确认回调 | |||
| onSingleConfirm(result) { | |||
| console.log('单选结果:', result) | |||
| this.singleResult = result | |||
| }, | |||
| // 多选确认回调 | |||
| onMultipleConfirm(result) { | |||
| console.log('多选结果:', result) | |||
| this.multipleResult = result | |||
| }, | |||
| // 二级工种确认回调 | |||
| onSubTypeConfirm(result) { | |||
| console.log('二级工种结果:', result) | |||
| this.subTypeResult = result | |||
| }, | |||
| // 整个工种确认回调 | |||
| onWholeTypeConfirm(result) { | |||
| console.log('整个工种结果:', result) | |||
| this.wholeTypeResult = result | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .page { | |||
| background: #f5f5f5; | |||
| min-height: 100vh; | |||
| } | |||
| .content { | |||
| padding: 20rpx; | |||
| } | |||
| .demo-section { | |||
| margin-bottom: 40rpx; | |||
| background: #fff; | |||
| border-radius: 20rpx; | |||
| overflow: hidden; | |||
| .section-title { | |||
| padding: 30rpx 30rpx 20rpx; | |||
| font-size: 32rpx; | |||
| font-weight: bold; | |||
| color: #333; | |||
| border-bottom: 1px solid #f0f0f0; | |||
| } | |||
| .demo-item { | |||
| padding: 0; | |||
| .result-info { | |||
| padding: 20rpx 30rpx; | |||
| background: #f8f9fa; | |||
| border-top: 1px solid #f0f0f0; | |||
| text { | |||
| display: block; | |||
| font-size: 26rpx; | |||
| color: #666; | |||
| margin-bottom: 10rpx; | |||
| &:last-child { | |||
| margin-bottom: 0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .usage-info { | |||
| padding: 30rpx; | |||
| text { | |||
| display: block; | |||
| font-size: 26rpx; | |||
| color: #666; | |||
| line-height: 1.6; | |||
| margin-bottom: 10rpx; | |||
| &.usage-title { | |||
| font-weight: bold; | |||
| color: #333; | |||
| margin-top: 20rpx; | |||
| margin-bottom: 15rpx; | |||
| &:first-child { | |||
| margin-top: 0; | |||
| } | |||
| } | |||
| &:last-child { | |||
| margin-bottom: 0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||