ProductDetail.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. import { DICT_TYPE } from '@/utils/dict'
  36. import * as ProductCategoryApi from '@/api/crm/productCategory'
  37. import * as ProductApi from '@/api/crm/product'
  38. import { formatDate } from '@/utils/formatTime'
  39. import { fenToYuan } from '@/utils'
  40. import { getSimpleUserList, UserVO } from '@/api/system/user'
  41. defineOptions({ name: 'CrmProductDetail' })
  42. const { t } = useI18n() // 国际化
  43. const dialogVisible = ref(false) // 弹窗的是否展示
  44. const detailLoading = ref(false) // 表单的加载中
  45. const detailData = ref() // 详情数据
  46. /** 打开弹窗 */
  47. const open = async (data: ProductApi.ProductVO) => {
  48. dialogVisible.value = true
  49. // 设置数据
  50. detailLoading.value = true
  51. try {
  52. detailData.value = data
  53. } finally {
  54. detailLoading.value = false
  55. }
  56. }
  57. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  58. const productCategoryList = ref([]) // 产品分类树
  59. const userList = ref<UserVO[]>([]) // 系统用户
  60. onMounted(async () => {
  61. productCategoryList.value = await ProductCategoryApi.getProductCategoryList({})
  62. userList.value = await getSimpleUserList()
  63. })
  64. </script>