ShowValueOrNull.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <span
  3. :class="'vc-show-value'+(block? ' d-block' : '')+(clickable?' link':'')"
  4. @click="onClick"
  5. >
  6. {{ prefix }}
  7. <template v-if="(value && value!='') || value === 0">
  8. <span v-if="typeof value === 'number'">{{ numericalPrecision > 0 ? (value as number).toFixed(numericalPrecision) : value }}</span>
  9. <span v-else-if="typeof value === 'boolean'">{{ value ? '是' : '否' }}</span>
  10. <span v-else-if="typeof value === 'object'">{{ JSON.stringify(value) }}</span>
  11. <span v-else>{{ value }}</span>
  12. </template>
  13. <span v-else class="text-secondary"><i>{{ nullText }}</i></span>
  14. </span>
  15. </template>
  16. <script lang="ts">
  17. import { defineComponent } from "vue";
  18. export default defineComponent({
  19. name: "ShowValueOrNull",
  20. data() {
  21. return {
  22. result: ''
  23. }
  24. },
  25. emits: [ 'click' ],
  26. props: {
  27. block: {
  28. default: false,
  29. type: Boolean
  30. },
  31. clickable: {
  32. default: false,
  33. type: Boolean
  34. },
  35. prefix: {
  36. default: '',
  37. type: String
  38. },
  39. numericalPrecision: {
  40. default: 0,
  41. type: Number
  42. },
  43. nullText: {
  44. default: '暂无',
  45. type: String
  46. },
  47. record: {
  48. default: null,
  49. },
  50. value: {
  51. default: null,
  52. },
  53. },
  54. methods: {
  55. onClick() {
  56. if (this.clickable)
  57. this.$emit('click', this.record);
  58. },
  59. },
  60. });
  61. </script>
  62. <style lang="scss">
  63. .vc-show-value {
  64. &.link {
  65. color: #008cff;
  66. cursor: pointer;
  67. }
  68. }
  69. </style>