7021f2fd创建于 2025年5月14日历史提交
<template>
  <view class="onlineTableCell">
    <!--图片-->
    <template v-if="column?.type === 'image'">
      <template v-if="record[column.key]">
        <wd-img
          width="30"
          height="30"
          :src="getFirstImg(record[column.key])"
          @click="handleClickImg"
        ></wd-img>
        <ImgPreview
          v-if="imgPreview.show"
          :urls="imgPreview.urls"
          @close="() => (imgPreview.show = false)"
        ></ImgPreview>
      </template>
      <template v-else>
        <text>无图片</text>
      </template>
    </template>
    <!--下载-->
    <template v-else-if="column?.type === 'file'">
      <template v-if="record[column.key]">
        <wd-button @click="handleDownload(record[column.key])">下载</wd-button>
      </template>
      <template v-else>
        <text>无文件</text>
      </template>
    </template>
    <template v-else-if="['markdown', 'umeditor'].includes(column?.type)">
        <rich-text :nodes="record[column.key]"></rich-text>
    </template>
    <template v-else-if="column?.type === 'pca'">
      <text class="ellipsis-2">{{ getPcaText(record[column.key])}}</text>
    </template>
    <template v-else-if="['datetime', 'date'].includes(column?.type)">
      <text class="ellipsis-2">{{ getFormatDate(record[column.key], column) }}</text>
    </template>
    <template v-else>
      <text class="ellipsis-2">{{ renderVal(record, column)}}</text>
    </template>
  </view>
</template>

<script setup lang="ts">
import { getFormatDate, filterMultiDictText } from '@/common/uitls'
import { isString } from '@/utils/is'
import { getFileAccessHttpUrl } from '@/common/uitls'
import { getAreaTextByCode } from '@/common/areaData/Area'
defineOptions({
  name: 'OnlineSubTableCell',
  options: {
    styleIsolation: 'shared',
  },
})
const props = defineProps({
  columnsInfo: {
    type: Object,
    default: () => {},
  },
  column: {
    type: Object,
    default: () => {},
  },
  record: {
    type: Object,
    default: () => {},
  },
})
console.log("根据配置动态加载表单record ",props.record );
const imgPreview = ref({
  show: false,
  urls: [],
})
// 下载
const handleDownload = (text) => {
  uni.downloadFile({
    url: text,
    success: (res) => {
      if (res.statusCode === 200) {
        console.log('下载成功')
        console.log(res);
      }
    },
  })
}
// 省市区
const getPcaText = (code) => {
  if (!code) {
    return ''
  }
  return getAreaTextByCode(code)
}
// 列表只显示第一张图
const getFirstImg = (text) => {
  if (isString(text)) {
    var imgs = text.split(',')
    return getFileAccessHttpUrl(imgs[0])
  } else {
    return ''
  }
}
// 点击图时
const handleClickImg = () => {
  imgPreview.value.show = true
}
// 渲染值
const renderVal = (record, column) => {
  const { type , key } = column
  let text = record[key]
  if (['date', 'Date'].includes(type)) {
    if (!text) {
      return ''
    }
    if (text.length > 10) {
      return text.substring(0, 10)
    }
    return text
  } else if (['popup_dict'].includes(type)) {
    const dict = record[key + '_dictText']
    if (dict != undefined) {
      return record[key + '_dictText']
    }
    return text
  }
  //字典值翻譯
  if(props.columnsInfo?.dictOptions && props.columnsInfo?.dictOptions[key]){
    return filterMultiDictText(props.columnsInfo.dictOptions[key], text + '')
  }
  return text
}
// 初始化
const init = () => {
  const field = props.column.dataIndex
  if (props.column?.customRender === 'imgSlot') {
    const text = props.record[field]
    if (isString(text)) {
      imgPreview.value.urls = text.split(',').map((item) => getFileAccessHttpUrl(item))
    } else {
      return ''
    }
  }
}
init()
</script>

<style lang="scss" scoped>
:deep(.wd-button) {
  --wot-button-medium-height: 30px;
  --wot-button-medium-fs: 12px;
  --wot-button-medium-padding: 8px;
  &.is-medium.is-round {
    min-width: 80px;
  }
}
</style>