mirror of
https://gitee.com/wot-design-uni/wot-design-uni.git
synced 2025-12-06 09:08:51 +08:00
239 lines
7.6 KiB
Vue
239 lines
7.6 KiB
Vue
<template>
|
|
<page-wraper>
|
|
<view>
|
|
<wd-cell-group border>
|
|
<wd-col-picker :label="$t('xuan-ze-di-zhi')" v-model="value1" :columns="areaData1" :column-change="columnChange1" @confirm="handleValue" />
|
|
<wd-col-picker :label="$t('chu-shi-xuan-xiang')" v-model="value2" :columns="areaData2" :column-change="columnChange" auto-complete />
|
|
<wd-col-picker :label="$t('jinYong')" disabled v-model="value3" :columns="areaData3" :column-change="columnChange1" />
|
|
<wd-col-picker :label="$t('zhi-du')" readonly v-model="value3" :columns="areaData3" :column-change="columnChange1" />
|
|
<wd-col-picker :label="$t('jin-yong-xuan-xiang')" v-model="value4" :columns="areaData4" :column-change="columnChange1" />
|
|
<wd-col-picker :label="$t('xuan-xiang-ti-shi-xin-xi')" v-model="value5" :columns="areaData5" :column-change="columnChange1" />
|
|
<wd-col-picker
|
|
:label="$t('zhan-shi-ge-shi-hua')"
|
|
v-model="value6"
|
|
:columns="areaData3"
|
|
:column-change="columnChange1"
|
|
:display-format="displayFormat"
|
|
/>
|
|
<wd-col-picker :label="$t('biaoTi-0')" v-model="value7" :title="$t('xuan-ze-di-zhi')" :columns="areaData1" :column-change="columnChange1" />
|
|
<wd-col-picker label="before-confirm" v-model="value8" :columns="areaData1" :column-change="columnChange1" :before-confirm="beforeConfirm" />
|
|
<wd-col-picker :label="$t('cuo-wu')" error v-model="value9" :columns="areaData1" :column-change="columnChange1" />
|
|
<wd-col-picker :label="$t('bi-tian')" required v-model="value10" :columns="areaData1" :column-change="columnChange1" />
|
|
</wd-cell-group>
|
|
</view>
|
|
<demo-block
|
|
:title="
|
|
$t(
|
|
'yi-ban-columnchange-shi-ge-yi-bu-huo-qu-shu-ju-de-cao-zuo-chu-fa-columnchange-zu-jian-hui-you-mo-ren-loading-shu-ju-xiang-ying-hou-guan-bi-loading'
|
|
)
|
|
"
|
|
transparent
|
|
>
|
|
<wd-col-picker :label="$t('xuan-ze-di-zhi')" v-model="value11" :columns="areaData1" :column-change="columnChange2" />
|
|
</demo-block>
|
|
<demo-block :title="$t('label-bu-chuan')" transparent>
|
|
<wd-col-picker v-model="value12" :columns="areaData1" :column-change="columnChange1" />
|
|
</demo-block>
|
|
<demo-block :title="$t('da-xiao')" transparent>
|
|
<wd-col-picker :label="$t('xuan-ze-di-zhi')" v-model="value13" size="large" :columns="areaData1" :column-change="columnChange1" />
|
|
</demo-block>
|
|
<demo-block :title="$t('zhi-kao-you-zhan-shi')" transparent>
|
|
<wd-col-picker :label="$t('xuan-ze-di-zhi')" align-right v-model="value14" :columns="areaData1" :column-change="columnChange1" />
|
|
</demo-block>
|
|
|
|
<demo-block :title="$t('zi-ding-yi-xuan-ze-qi')" transparent>
|
|
<view style="margin-left: 15px">
|
|
<view style="margin-bottom: 10px"></view>
|
|
<view style="margin-bottom: 10px">{{ $t('dang-qian-xuan-zhong-xiang-displayvalue') }} {{ displayValue }}</view>
|
|
|
|
<wd-col-picker
|
|
v-model="value15"
|
|
use-default-slot
|
|
:columns="areaData1"
|
|
:column-change="columnChange1"
|
|
style="display: inline-block"
|
|
@confirm="handleConfirm"
|
|
>
|
|
<wd-button>{{ $t('xuan-ze-di-zhi') }}</wd-button>
|
|
</wd-col-picker>
|
|
</view>
|
|
</demo-block>
|
|
<wd-toast />
|
|
</page-wraper>
|
|
</template>
|
|
<script lang="ts" setup>
|
|
import { onMounted, ref } from 'vue'
|
|
import { useToast } from '@/uni_modules/wot-design-uni'
|
|
import type { ColPickerColumnChange } from '@/uni_modules/wot-design-uni/components/wd-col-picker/types'
|
|
import { useColPickerData } from '@/hooks/useColPickerData'
|
|
import { useI18n } from 'vue-i18n'
|
|
const { t } = useI18n()
|
|
const { colPickerData, findChildrenByCode } = useColPickerData()
|
|
const toast = useToast()
|
|
|
|
onMounted(async () => {
|
|
toast.loading(t('shu-ju-jia-zai-zhong'))
|
|
await sleep()
|
|
toast.close()
|
|
value2.value = ['150000', '150100', '150121']
|
|
})
|
|
|
|
const value1 = ref<any[]>([])
|
|
const value2 = ref<string[]>([])
|
|
const value3 = ref<any[]>(['130000', '130200', '130204'])
|
|
const value4 = ref<any[]>([])
|
|
const value5 = ref<any[]>([])
|
|
const value6 = ref<any[]>(['130000', '130200', '130204'])
|
|
const value7 = ref<any[]>([])
|
|
const value8 = ref<any[]>([])
|
|
const value9 = ref<any[]>([])
|
|
const value10 = ref<any[]>([])
|
|
const value11 = ref<any[]>([])
|
|
const value12 = ref<any[]>([])
|
|
const value13 = ref<any[]>([])
|
|
const value14 = ref<any[]>([])
|
|
const value15 = ref<any[]>([])
|
|
const displayValue = ref<string>('')
|
|
const areaData1 = ref<any[]>([
|
|
colPickerData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
})
|
|
])
|
|
|
|
const areaData2 = ref<any[]>([])
|
|
const areaData3 = ref<any[]>([
|
|
colPickerData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
}),
|
|
findChildrenByCode(colPickerData, '130000')!.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
}),
|
|
findChildrenByCode(colPickerData, '130200')!.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
})
|
|
])
|
|
const areaData4 = ref<any[]>([
|
|
colPickerData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text,
|
|
disabled: item.value === '140000'
|
|
}
|
|
})
|
|
])
|
|
const areaData5 = ref<any[]>([
|
|
colPickerData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text,
|
|
disabled: item.value === '140000',
|
|
tip:
|
|
item.value === '140000'
|
|
? t('gai-di-qu-wu-huo-zan-shi-wu-fa-xuan-ze')
|
|
: item.value === '150000'
|
|
? t('gai-di-qu-pei-song-shi-jian-ke-neng-jiao-chang')
|
|
: ''
|
|
}
|
|
})
|
|
])
|
|
|
|
const columnChange1: ColPickerColumnChange = ({ selectedItem, resolve, finish }) => {
|
|
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
|
|
if (areaData && areaData.length) {
|
|
resolve(
|
|
areaData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
})
|
|
)
|
|
} else {
|
|
finish()
|
|
}
|
|
}
|
|
|
|
const columnChange: ColPickerColumnChange = async ({ selectedItem, resolve, finish }) => {
|
|
await sleep(0.3)
|
|
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
|
|
if (areaData && areaData.length) {
|
|
resolve(
|
|
areaData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
})
|
|
)
|
|
} else {
|
|
finish()
|
|
}
|
|
}
|
|
|
|
const columnChange2: ColPickerColumnChange = ({ selectedItem, resolve, finish }) => {
|
|
setTimeout(() => {
|
|
if (Math.random() > 0.7) {
|
|
finish(false)
|
|
toast.error(t('shu-ju-qing-qiu-shi-bai-qing-zhong-shi'))
|
|
return
|
|
}
|
|
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
|
|
if (areaData && areaData.length) {
|
|
resolve(
|
|
areaData.map((item) => {
|
|
return {
|
|
value: item.value,
|
|
label: item.text
|
|
}
|
|
})
|
|
)
|
|
} else {
|
|
finish()
|
|
}
|
|
}, 300)
|
|
}
|
|
const displayFormat = (selectedItems: Record<string, any>[]) => {
|
|
return selectedItems[selectedItems.length - 2].label + '-' + selectedItems[selectedItems.length - 1].label
|
|
}
|
|
const beforeConfirm = (value: (string | number)[], selectedItems: Record<string, any>[], resolve: (isPass: boolean) => void) => {
|
|
if (parseInt(String(value[2])) > 120000) {
|
|
toast.error(t('gai-di-qu-ku-cun-bu-zu'))
|
|
resolve(false)
|
|
} else {
|
|
resolve(true)
|
|
}
|
|
}
|
|
|
|
function sleep(second: number = 1) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(true)
|
|
}, 1000 * second)
|
|
})
|
|
}
|
|
|
|
function handleConfirm({ selectedItems }: any) {
|
|
displayValue.value = selectedItems
|
|
.map((item: any) => {
|
|
return item.label
|
|
})
|
|
.join('')
|
|
}
|
|
function handleValue({ value }: any) {
|
|
console.log(value)
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped></style>
|