desc.vue 5.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 v-if="$store.state.tenant.tenantId === '0'" :column="1" label-width="140" border>
  7. <el-descriptions-item label="所属租户" label-align="right">{{ tenantName }}</el-descriptions-item>
  8. </el-descriptions>
  9. <el-descriptions :column="3" label-width="140" border>
  10. <el-descriptions-item :label-class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" :class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" label="计划主题" :span="ismobile ? 3 : 1" label-align="right">{{ descData.name }}</el-descriptions-item>
  11. <el-descriptions-item :label-class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" :class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" label="计划编号" :span="ismobile ? 3 : 1" label-align="right">{{ descData.code }}</el-descriptions-item>
  12. <el-descriptions-item :label-class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" :class-name="$store.state.tenant.tenantId === '0' && 'no-border-top'" label="添加时间" :span="ismobile ? 3 : 1" label-align="right">{{ descData.createTime }}</el-descriptions-item>
  13. <el-descriptions-item label="计划状态" :span="ismobile ? 3 : 1" label-align="right">{{ XEUtils.get(productionDic.planStatus, descData.status, descData.status) }}</el-descriptions-item>
  14. <el-descriptions-item label="计划开工日期" :span="ismobile ? 3 : 1" label-align="right">{{ descData.beginDate }}</el-descriptions-item>
  15. <el-descriptions-item label="计划完工日期" :span="ismobile ? 3 : 1" label-align="right">{{ descData.endDate }}</el-descriptions-item>
  16. <el-descriptions-item label="计划类型" :span="ismobile ? 3 : 1" label-align="right">{{ XEUtils.get(outsourcingDic.type, descData.type, descData.type) }}</el-descriptions-item>
  17. </el-descriptions>
  18. <el-descriptions :column="1" label-width="140" border>
  19. <el-descriptions-item label-class-name="no-border-top" class-name="no-border-top" label="概要" label-align="right">{{ descData.remark }}</el-descriptions-item>
  20. <el-descriptions-item v-if="descData.saleOrderId" label="来源单据" label-align="right">{{ descData.saleOrder.code }}</el-descriptions-item>
  21. </el-descriptions>
  22. </el-collapse-item>
  23. <el-collapse-item v-if="descData.type == 'process'" title="委外工序" name="process">
  24. <sc-form-table v-model="descData.childrenList[descData.type]" v-bind="tableOptions[descData.type]" disabled></sc-form-table>
  25. </el-collapse-item>
  26. <el-collapse-item v-if="descData.type == 'whole'" title="产品信息" name="material">
  27. <sc-form-table v-model="descData.childrenList[descData.type]" v-bind="tableOptions[descData.type]" disabled></sc-form-table>
  28. </el-collapse-item>
  29. </el-collapse>
  30. </el-main>
  31. </el-dialog>
  32. </template>
  33. <script setup>
  34. import XEUtils from "xe-utils";
  35. import { productionDic, outsourcingDic } from "@/utils/basicDic";
  36. import { tableOptions } from "./main";
  37. const $emit = defineEmits(["closed"]);
  38. const visible = ref(false);
  39. import store from "@/store";
  40. const ismobile = computed(() => store.state.global.ismobile);
  41. const tenantName = computed(() => XEUtils.get(XEUtils.find(store.state.tenant.tenants, item => item.id == descData.value.tenantId), "name"));
  42. const activeNames = ref(["basic", "material", "process"]);
  43. const descData = ref({
  44. id: null,
  45. tenantId: store.state.tenant.tenantId,
  46. saleOrderId: null,
  47. saleOrder: null,
  48. name: null,
  49. code: null,
  50. type: "whole",
  51. beginDate: null,
  52. endDate: null,
  53. childrenList: {
  54. process: [],
  55. whole: []
  56. },
  57. remark: null,
  58. status: "pending",
  59. createTime: null
  60. });
  61. const setData = data => {
  62. visible.value = true;
  63. XEUtils.objectEach(descData.value, (_, key) => {
  64. if (key == "priority") XEUtils.set(descData.value, key, XEUtils.get(data, key) || "medium");
  65. else if (key == "childrenList") {
  66. data.type == "whole" && XEUtils.set(descData.value.childrenList, data.type, XEUtils.map(XEUtils.get(data, key), item => ({ ...item.material, number: item.number })));
  67. if (data.type == "process") {}
  68. } else XEUtils.set(descData.value, key, XEUtils.get(data, key));
  69. });
  70. }
  71. defineExpose({
  72. setData
  73. })
  74. </script>
  75. <style scoped>
  76. .el-main {padding-top: 0;}
  77. .el-collapse {border: none;}
  78. .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);}
  79. .el-collapse-item :deep(.el-collapse-item__header) {border-bottom-color: transparent;line-height: 55px;font-size: 16px;font-weight: bold;}
  80. .el-collapse-item :deep(.el-collapse-item__header.is-active) {border-bottom: 1px solid var(--el-border-color-lighter);}
  81. .el-collapse-item :deep(.el-collapse-item__wrap) {border: none;}
  82. .el-collapse-item :deep(.el-collapse-item__content) {padding: 20px 0;}
  83. .el-collapse-item :deep(.el-collapse-item__content) .el-descriptions__content {min-width: 120px;}
  84. </style>