ProductDetail.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <Dialog v-model="dialogVisible" :max-height="500" :scroll="true" title="产品详情">
  3. <el-descriptions :column="1" border>
  4. <el-descriptions-item label="产品名称">
  5. {{ detailData.name }}
  6. </el-descriptions-item>
  7. <el-descriptions-item label="创建时间">
  8. {{ formatDate(detailData.createTime) }}
  9. </el-descriptions-item>
  10. <el-descriptions-item label="状态">
  11. <dict-tag :type="DICT_TYPE.CRM_PRODUCT_STATUS" :value="detailData.status" />
  12. </el-descriptions-item>
  13. <el-descriptions-item label="产品分类">
  14. {{ productCategoryList?.find((c) => c.id === detailData.categoryId)?.name }}
  15. </el-descriptions-item>
  16. <el-descriptions-item label="产品编码">
  17. {{ detailData.no }}
  18. </el-descriptions-item>
  19. <el-descriptions-item label="产品描述">
  20. {{ detailData.description }}
  21. </el-descriptions-item>
  22. <el-descriptions-item label="负责人">
  23. {{ detailData.ownerUserId }}
  24. </el-descriptions-item>
  25. <el-descriptions-item label="单位">
  26. <dict-tag :type="DICT_TYPE.PRODUCT_UNIT" :value="detailData.unit" />
  27. </el-descriptions-item>
  28. <el-descriptions-item label="价格">
  29. {{ fenToYuan(detailData.price) }}元
  30. </el-descriptions-item>
  31. </el-descriptions>
  32. </Dialog>
  33. </template>
  34. <script setup lang="ts">
  35. // TODO 芋艿:统一改成,独立 tab
  36. import { DICT_TYPE } from '@/utils/dict'
  37. import * as ProductCategoryApi from '@/api/crm/product/productCategory'
  38. import * as ProductApi from '@/api/crm/product'
  39. import { formatDate } from '@/utils/formatTime'
  40. import { fenToYuan } from '@/utils'
  41. import { getSimpleUserList, UserVO } from '@/api/system/user'
  42. defineOptions({ name: 'CrmProductDetail' })
  43. const { t } = useI18n() // 国际化
  44. const dialogVisible = ref(false) // 弹窗的是否展示
  45. const detailLoading = ref(false) // 表单的加载中
  46. const detailData = ref() // 详情数据
  47. /** 打开弹窗 */
  48. const open = async (data: ProductApi.ProductVO) => {
  49. dialogVisible.value = true
  50. // 设置数据
  51. detailLoading.value = true
  52. try {
  53. detailData.value = data
  54. } finally {
  55. detailLoading.value = false
  56. }
  57. }
  58. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  59. const productCategoryList = ref([]) // 产品分类树
  60. const userList = ref<UserVO[]>([]) // 系统用户
  61. onMounted(async () => {
  62. productCategoryList.value = await ProductCategoryApi.getProductCategoryList({})
  63. userList.value = await getSimpleUserList()
  64. })
  65. </script>