ChangeValue.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <script lang="ts" setup>
  2. import { defineProps, ref, computed } from 'vue';
  3. import XEUtils from 'xe-utils';
  4. const props = defineProps<{
  5. field: string;
  6. value: string;
  7. }>();
  8. const badgeMap = {
  9. 0: '',
  10. 1: 'LD',
  11. 2: '7DD',
  12. 3: 'DOTD/TD'
  13. };
  14. const loadJsonString = (val: string) => XEUtils.toStringJSON(val);
  15. const isArray = computed(() => XEUtils.includes(['bullet_point', 'variants'], props.field));
  16. const formatedVal = computed(() => {
  17. if (props.field === 'discount') {
  18. return `${props.value}%`;
  19. } else if (props.field === 'coupon' || props.field === 'price') {
  20. return `$${props.value}`;
  21. } else if (props.field === 'badge') {
  22. return badgeMap[props.value];
  23. }
  24. return props.value;
  25. });
  26. </script>
  27. <template>
  28. <div>
  29. <template v-if="props.field==='imgs'">
  30. <span v-for="(img, index) in loadJsonString(props.value)" :key="index">
  31. <el-tooltip placement="bottom-start" effect="light">
  32. <el-image
  33. style="width: 40px; margin-right: 5px;"
  34. fit="fill"
  35. :src="`https://m.media-amazon.com/images/I/${img}.jpg`"
  36. />
  37. <template #content>
  38. <el-image
  39. style="width: 250px"
  40. :src="`https://m.media-amazon.com/images/I/${img}.jpg`"
  41. />
  42. </template>
  43. </el-tooltip>
  44. </span>
  45. </template>
  46. <template v-else-if="isArray">
  47. <ul class="in-table-ul">
  48. <li v-for="(val, index) in loadJsonString(props.value)" :key="index">
  49. <span>{{ val }}</span>
  50. </li>
  51. </ul>
  52. </template>
  53. <span v-else>{{ formatedVal }}</span>
  54. </div>
  55. </template>
  56. <style scoped>
  57. .in-table-ul {
  58. padding-left: 20px;
  59. }
  60. </style>