|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div>InnerPage</div> | 
|---|
|  |  |  | <ContentView :paddingH="false" class="expect-position-view"> | 
|---|
|  |  |  | <PositionSelectView v-model="positionList" /> | 
|---|
|  |  |  | </ContentView> | 
|---|
|  |  |  | <PageFooter> | 
|---|
|  |  |  | <div class="expect-position-page-footer"> | 
|---|
|  |  |  | <div class="expect-position-select-wrapper" v-if="checkdList.length > 0"> | 
|---|
|  |  |  | <div class="expect-position-select-item" v-for="(item, index) in checkdList" :key="index"> | 
|---|
|  |  |  | <div class="expect-position-select-item-text">{{ item.label }}</div> | 
|---|
|  |  |  | <div class="expect-position-select-item-icon-wrapper"> | 
|---|
|  |  |  | <Close | 
|---|
|  |  |  | :size="8" | 
|---|
|  |  |  | class="expect-position-select-item-icon" | 
|---|
|  |  |  | @click="handleDelete(item.value)" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <PageFooterBtn type="primary" @click="handleConfirm">保存</PageFooterBtn> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </PageFooter> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { PositionSelectView } from '@12333/components'; | 
|---|
|  |  |  | import { CategoryCode } from '@12333/constants'; | 
|---|
|  |  |  | import { useDictionaryDataSelect } from '@12333/hooks'; | 
|---|
|  |  |  | import { Close } from '@nutui/icons-vue-taro'; | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { size } from 'lodash'; | 
|---|
|  |  |  | import { useEvent, useEventChannel } from 'senin-mini/hooks'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const eventChannel = useEventChannel(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | useEvent('updatePosition', function (data: { content: string[] }) { | 
|---|
|  |  |  | if (data.content.length) { | 
|---|
|  |  |  | positionList.value = [...data.content]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const positionList = ref([]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { dictionaryDataList: position } = useDictionaryDataSelect({ | 
|---|
|  |  |  | categoryCode: CategoryCode.Position, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const checkdList = computed(() => { | 
|---|
|  |  |  | if (!positionList.value.length) return []; | 
|---|
|  |  |  | return position.value.filter((x) => positionList.value.includes(x.value)); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleDelete(id: string) { | 
|---|
|  |  |  | positionList.value = positionList.value.filter((x) => x !== id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleConfirm() { | 
|---|
|  |  |  | eventChannel.emit('addPosition', { | 
|---|
|  |  |  | content: positionList.value, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | Taro.navigateBack({ delta: 1 }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expectPosition-page-wrapper { | 
|---|
|  |  |  | .expect-position-view { | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | min-height: 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .nut-category { | 
|---|
|  |  |  | height: 100%; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-page-footer { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | padding: 0 boleGetCssVar('size', 'body-padding-h'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .page-footer-btn { | 
|---|
|  |  |  | margin: 0; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-select-wrapper { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | flex-wrap: wrap; | 
|---|
|  |  |  | margin-bottom: 40px; | 
|---|
|  |  |  | column-gap: 16px; | 
|---|
|  |  |  | row-gap: 24px; | 
|---|
|  |  |  | padding-top: 24px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-select-item { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | padding: 0 28px; | 
|---|
|  |  |  | height: 64px; | 
|---|
|  |  |  | border-radius: 32px; | 
|---|
|  |  |  | background-color: #f6faff; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-select-item-text { | 
|---|
|  |  |  | font-weight: 400; | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | color: #536077; | 
|---|
|  |  |  | line-height: 24px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-select-item-icon-wrapper { | 
|---|
|  |  |  | padding: 8px; | 
|---|
|  |  |  | padding-right: 0; | 
|---|
|  |  |  | padding-left: 30px; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .expect-position-select-item-icon { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'secondary'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|