| @ -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> | |||||