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