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