detail.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <el-dialog v-model="visible" :title="`指标详情 - ${detail.name || '-'} (${detail.code || code})`" width="720px" :close-on-click-modal="false">
  3. <div v-if="visible">
  4. <el-descriptions :column="1" border class="mt16">
  5. <el-descriptions-item label="指标名称">{{ detail.name || "-" }}</el-descriptions-item>
  6. <el-descriptions-item label="指标描述">{{ detail.description || "-" }}</el-descriptions-item>
  7. <el-descriptions-item label="指标类型">
  8. <el-tag size="small">{{ detail.type || "-" }}</el-tag>
  9. </el-descriptions-item>
  10. <el-descriptions-item label="单位">{{ detail.unit || "-" }}</el-descriptions-item>
  11. <el-descriptions-item label="计算公式">
  12. <span class="mono">{{ detail.formula || "-" }}</span>
  13. </el-descriptions-item>
  14. <el-descriptions-item label="维度数">{{ (detail.dimensions && detail.dimensions.length) || detail.dimensionCount || 0 }} 个</el-descriptions-item>
  15. <el-descriptions-item label="状态">
  16. <el-tag :type="detail.status == '1' ? 'success' : 'info'">{{ detail.status == "1" ? "已发布" : "未发布" }}</el-tag>
  17. </el-descriptions-item>
  18. <el-descriptions-item label="指标描述">{{ detail.description || "-" }}</el-descriptions-item>
  19. <el-descriptions-item label="创建时间">{{ detail.createdAt || detail.createTime || "-" }}</el-descriptions-item>
  20. <el-descriptions-item label="创建人">{{ detail.createdBy || "-" }}</el-descriptions-item>
  21. </el-descriptions>
  22. </div>
  23. <template #footer>
  24. <el-button @click="visible = false">关闭</el-button>
  25. </template>
  26. </el-dialog>
  27. </template>
  28. <script lang="ts" setup>
  29. import { reactive, ref } from "vue";
  30. import api from "/@/api/datahub";
  31. const visible = ref(false);
  32. const code = ref("");
  33. const detail = reactive<any>({});
  34. function open(row: any) {
  35. code.value = row?.code || "";
  36. Object.keys(detail).forEach((k) => delete (detail as any)[k]);
  37. visible.value = true;
  38. if (!code.value) return;
  39. api.indicator.detail(code.value).then((res: any) => {
  40. const data = res?.data || res?.Info || res || {};
  41. Object.assign(detail, data);
  42. });
  43. }
  44. defineExpose({ open });
  45. </script>
  46. <style lang="scss" scoped>
  47. .sub-title {
  48. color: var(--el-text-color-secondary);
  49. }
  50. .mt16 {
  51. margin-top: 16px;
  52. }
  53. .mono {
  54. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  55. }
  56. </style>