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