<template> 
 | 
  <div class="common-card-wrapper"> 
 | 
    <div class="common-card-content"> 
 | 
      <div class="common-card-title-wrapper"> 
 | 
        <div class="common-card-title">{{ title }}</div> 
 | 
        <slot name="title-right"></slot> 
 | 
      </div> 
 | 
      <slot></slot> 
 | 
    </div> 
 | 
    <div class="common-card-footer"> 
 | 
      <slot name="footer"> 
 | 
        <Avatar 
 | 
          @click.stop="goUserHomePage" 
 | 
          class="common-card-footer-avatar" 
 | 
          :size="24" 
 | 
          :src="src ? setOSSLink(src) : ''" 
 | 
        /> 
 | 
        <div class="common-card-footer-name-wrapper"> 
 | 
          <div class="common-card-footer-name">{{ name }}</div> 
 | 
          <template v-if="jobTitle"> 
 | 
            <div class="common-card-footer-dot"></div> 
 | 
            <div class="common-card-footer-jobTitle">{{ jobTitle }}</div> 
 | 
          </template> 
 | 
          <div class="common-card-footer-time">{{ dayjs(time).format('MM-DD HH:mm') }}</div> 
 | 
        </div> 
 | 
      </slot> 
 | 
    </div> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import { commonCardProps } from './cardProps'; 
 | 
import { Avatar } from '@12333/components'; 
 | 
import { setOSSLink } from '@12333/utils'; 
 | 
import dayjs from 'dayjs'; 
 | 
import Taro from '@tarojs/taro'; 
 | 
  
 | 
defineOptions({ 
 | 
  name: 'CommonCard', 
 | 
}); 
 | 
  
 | 
const props = defineProps(commonCardProps); 
 | 
  
 | 
function goUserHomePage() { 
 | 
  if (props.userId) { 
 | 
    Taro.navigateTo({ 
 | 
      url: `${RouterPath.userHomePage}?userId=${props.userId}`, 
 | 
    }); 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss"> 
 | 
@import '@/styles/common.scss'; 
 | 
  
 | 
.common-card-wrapper { 
 | 
  background: #ffffff; 
 | 
  border-radius: 8px; 
 | 
  padding: 0 28px; 
 | 
  margin-bottom: 24px; 
 | 
  
 | 
  &:last-child { 
 | 
    margin-bottom: 0; 
 | 
  } 
 | 
  
 | 
  .common-card-content { 
 | 
    padding: 24px 0; 
 | 
    border-bottom: 1px solid #f6f6f6; 
 | 
  
 | 
    .common-card-title-wrapper { 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      margin-bottom: 24px; 
 | 
  
 | 
      .common-card-title { 
 | 
        flex: 1; 
 | 
        min-width: 0; 
 | 
        font-weight: 600; 
 | 
        font-size: 32px; 
 | 
        color: boleGetCssVar('text-color', 'primary'); 
 | 
        line-height: 44px; 
 | 
        @include ellipsis; 
 | 
      } 
 | 
  
 | 
      .nut-button { 
 | 
        height: 44rpx; 
 | 
        font-size: 24rpx; 
 | 
        padding: 0 30rpx; 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .common-card-footer { 
 | 
    padding: 14px 0; 
 | 
    display: flex; 
 | 
    align-items: center; 
 | 
  
 | 
    .common-card-footer-avatar { 
 | 
      margin-right: 16px; 
 | 
    } 
 | 
  
 | 
    .common-card-footer-name-wrapper { 
 | 
      color: boleGetCssVar('text-color', 'primary'); 
 | 
      line-height: 34px; 
 | 
      font-size: 0; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      flex: 1; 
 | 
      min-width: 0; 
 | 
    } 
 | 
  
 | 
    .common-card-footer-name { 
 | 
      font-weight: 400; 
 | 
      font-size: 24px; 
 | 
      vertical-align: middle; 
 | 
      @include ellipsis; 
 | 
    } 
 | 
  
 | 
    .common-card-footer-dot { 
 | 
      width: 4px; 
 | 
      height: 4px; 
 | 
      background: boleGetCssVar('text-color', 'primary'); 
 | 
      vertical-align: middle; 
 | 
      border-radius: 50%; 
 | 
      margin: 0 8px; 
 | 
      flex-shrink: 0; 
 | 
    } 
 | 
  
 | 
    .common-card-footer-jobTitle { 
 | 
      font-weight: 400; 
 | 
      font-size: 24px; 
 | 
      vertical-align: middle; 
 | 
      flex-shrink: 0; 
 | 
    } 
 | 
  
 | 
    .common-card-footer-time { 
 | 
      font-weight: 400; 
 | 
      font-size: 24px; 
 | 
      vertical-align: middle; 
 | 
      color: boleGetCssVar('text-color', 'secondary'); 
 | 
      margin-left: 16px; 
 | 
      flex-shrink: 0; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |