12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <template>
- <z-paging ref="paging" v-model="list" @query="handleQuery" @on-refresh="handleRefresh">
- <template #top>
- <mx-nav-bar title="职业库"/>
- <view class="px-20 py-10 bg-white">
- <mx-search v-model="name" placeholder="输入职业名称" @search="handleSearch" @clear="handleSearch"/>
- </view>
- <uv-line/>
- </template>
- <view v-for="(levelOne) in list" :class="levelOne.children ? 'mt-20 bg-white' : ''">
- <view v-if="levelOne.children">
- <view class="py-20 pl-30 text-lg font-bold">{{ levelOne.name }}</view>
- <view v-for="item in levelOne.children">
- <uv-cell :value="`${item.children.length}个职业`" @click="handleExpand(item)">
- <template #title>
- <view class="fx-row items-center">
- <uv-icon labelColor="black" :labelSize="12" name="arrow-right"
- :class="item.expand ? 'active expand' : 'expand'">
- </uv-icon>
- <text>{{ item.name }}</text>
- </view>
- </template>
- </uv-cell>
- <uv-transition :show="item.expand">
- <view class="bg-slate-100">
- <uv-cell v-for="last in item.children" class="text-main pl-40" :border="false" isLink
- :title="last.name" @click="goDetail(last)">
- </uv-cell>
- </view>
- </uv-transition>
- </view>
- </view>
- <uv-cell v-else class="text-main bg-white" :border="false" isLink
- :title="levelOne.name" @click="goDetail(levelOne)">
- </uv-cell>
- </view>
- </z-paging>
- </template>
- <script setup>
- import {ref} from 'vue';
- import {useCacheStore} from "@/hooks/useCacheStore";
- import {useTransfer} from "@/hooks/useTransfer";
- import {getAllVocation} from "@/api/webApi/collegemajor";
- const paging = ref(null)
- const list = ref([])
- const name = ref('')
- const {dispatchCache, removeCache} = useCacheStore()
- const {transferTo} = useTransfer()
- const handleSearch = () => paging.value.reload()
- const handleExpand = (item) => item.expand = !item.expand
- const handleRefresh = () => {
- removeCache(getAllVocation)
- }
- const handleQuery = () => {
- let payload = undefined
- if (name.value) payload = {name: name.value}
- dispatchCache(getAllVocation, payload)
- .then(res => {
- res.data.forEach(v => {
- if (v.children) {
- // 默认收起
- v.children.forEach(c => c.expand = false)
- }
- })
- paging.value.completeByNoMore(res.data, true)
- })
- .catch(e => paging.value.complete(false))
- }
- const goDetail = (item) => {
- transferTo('/pages/vocation-library/detail/detail', ['code'], item)
- }
- </script>
- <style scoped lang="scss">
- .expand {
- margin-right: 5px;
- }
- .active {
- transform: rotate(90deg);
- transition: transform 200ms;
- }
- </style>
|