desc.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <el-dialog v-model="visible" title="销售订单详情" fullscreen :close-on-click-modal="false" @closed="$emit('closed')">
  3. <el-main>
  4. <el-collapse v-model="activeNames">
  5. <el-collapse-item title="基本信息" name="basic">
  6. <el-descriptions :column="3" label-width="140" border>
  7. <el-descriptions-item v-if="$store.state.tenant.tenantId === '0'" label="所属租户" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ tenantName }}</el-descriptions-item>
  8. <el-descriptions-item label="单据编号" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.code }}</el-descriptions-item>
  9. <el-descriptions-item label="合同编号" :span="ismobile ? 3 : 1" label-align="right">{{ descData.contractNo }}</el-descriptions-item>
  10. <el-descriptions-item label="单据日期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.orderDate }}</el-descriptions-item>
  11. <el-descriptions-item label="单据状态" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ XEUtils.get(salesDic.orderStatus, descData.status, descData.status) }}</el-descriptions-item>
  12. <el-descriptions-item label="客户" :span="ismobile ? 3 : 1" label-align="right">{{ descData.customerName }}</el-descriptions-item>
  13. <el-descriptions-item label="添加时间" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.createTime }}</el-descriptions-item>
  14. <el-descriptions-item label="预计交期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.planReceiveDate }}</el-descriptions-item>
  15. <el-descriptions-item label="实际交期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.deliveryDate }}</el-descriptions-item>
  16. <el-descriptions-item label="业务员" :span="ismobile ? 3 : 1" label-align="right">{{ descData.managerName }}</el-descriptions-item>
  17. <el-descriptions-item label="收货日期" :span="ismobile ? 3 : 1" label-align="right" min-width="120">{{ descData.actualReceiveDate }}</el-descriptions-item>
  18. </el-descriptions>
  19. <el-descriptions :column="1" label-width="140" border>
  20. <el-descriptions-item label-class-name="no-border-top" class-name="no-border-top" label="客户收货地址" label-align="right">{{ descData.deliveryAddress }}</el-descriptions-item>
  21. <el-descriptions-item label="概要" label-align="right">{{ descData.remark }}</el-descriptions-item>
  22. <el-descriptions-item label="附件" label-align="right">
  23. <sc-upload-file v-model="descData.fileList" hideAdd disabled></sc-upload-file>
  24. </el-descriptions-item>
  25. </el-descriptions>
  26. </el-collapse-item>
  27. <el-collapse-item title="产品信息" name="material">
  28. <sc-form-table v-model="descData.childrenList" v-bind="tableOptions" disabled></sc-form-table>
  29. </el-collapse-item>
  30. <el-collapse-item title="金额信息" name="amount">
  31. <el-descriptions :column="2" label-width="140" border>
  32. <el-descriptions-item label="整单折扣额" label-align="right" min-width="120">{{ descData.freePrice }}</el-descriptions-item>
  33. <el-descriptions-item label="成交金额" label-align="right" min-width="120">{{ descData.actualPrice }}</el-descriptions-item>
  34. </el-descriptions>
  35. </el-collapse-item>
  36. </el-collapse>
  37. </el-main>
  38. </el-dialog>
  39. </template>
  40. <script setup>
  41. import XEUtils from "xe-utils";
  42. import { salesDic } from "@/utils/basicDic";
  43. import { tableOptions } from "./main";
  44. import scUploadFile from "@/components/scUpload/file";
  45. const $emit = defineEmits(["closed"]);
  46. const visible = ref(false);
  47. import store from "@/store";
  48. const ismobile = computed(() => store.state.global.ismobile);
  49. const tenantName = computed(() => XEUtils.get(XEUtils.find(store.state.tenant.tenants, item => item.id == descData.value.tenantId), "name"));
  50. const activeNames = ref(["basic", "material", "amount"]);
  51. const descData = ref({
  52. id: null,
  53. tenantId: store.state.tenant.tenantId,
  54. code: null,
  55. orderDate: null,
  56. customerName: null,
  57. contractNo: null,
  58. planReceiveDate: null,
  59. actualReceiveDate: null,
  60. deliveryDate: null,
  61. managerName: null,
  62. deliveryAddress: null,
  63. childrenList: [],
  64. freePrice: null,
  65. actualPrice: null,
  66. remark: null,
  67. fileList: [],
  68. status: "pending",
  69. createTime: null
  70. });
  71. const setData = data => {
  72. visible.value = true;
  73. XEUtils.objectEach(descData.value, (_, key) => {
  74. if (key == "fileList") XEUtils.set(descData.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item, name: item.fileName })));
  75. else if (key == "childrenList") XEUtils.set(descData.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item.material, quantity: item.materialQuantity, price: item.materialPrice })));
  76. else XEUtils.set(descData.value, key, XEUtils.get(data, key));
  77. });
  78. }
  79. defineExpose({
  80. setData
  81. })
  82. </script>
  83. <style scoped>
  84. .el-main {padding-top: 0;}
  85. .el-collapse {border: none;}
  86. .el-collapse-item {margin-top: 15px;padding: 0 24px;background-color: var(--el-fill-color-blank);border: 1px solid var(--el-border-color-light);border-radius: 4px;color: var(--el-text-color-primary);box-shadow: var(--el-box-shadow-light);transition: var(--el-transition-duration);}
  87. .el-collapse-item :deep(.el-collapse-item__header) {border-bottom-color: transparent;line-height: 55px;font-size: 16px;font-weight: bold;}
  88. .el-collapse-item :deep(.el-collapse-item__header.is-active) {border-bottom: 1px solid var(--el-border-color-lighter);}
  89. .el-collapse-item :deep(.el-collapse-item__wrap) {border: none;}
  90. .el-collapse-item :deep(.el-collapse-item__content) {padding: 20px 0;}
  91. </style>