detailDialog.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <el-dialog v-model="visible" title="营养诊断详情" width="880px" :close-on-click-modal="false" :destroy-on-close="true" top="20px">
  3. <el-form label-width="120px" class="detail-form">
  4. <el-form-item label="营养宣教标题:">
  5. <el-input :model-value="detail.educationTitle" readonly />
  6. </el-form-item>
  7. <el-form-item label="内容描述:">
  8. <el-input :model-value="detail.description" type="textarea" :rows="3" readonly />
  9. </el-form-item>
  10. <el-form-item label="正文:">
  11. <el-input :model-value="detail.content" type="textarea" :rows="6" readonly />
  12. </el-form-item>
  13. </el-form>
  14. <template #footer>
  15. <el-button @click="visible = false">关闭</el-button>
  16. </template>
  17. </el-dialog>
  18. </template>
  19. <script setup lang="ts">
  20. import { ref, defineProps, watch, defineExpose } from 'vue';
  21. const emit = defineEmits(['update:modelValue']);
  22. const props = defineProps({
  23. modelValue: Boolean,
  24. detail: {
  25. type: Object,
  26. default: () => ({})
  27. }
  28. });
  29. const visible = ref(props.modelValue);
  30. watch(
  31. () => props.modelValue,
  32. (v) => {
  33. visible.value = v;
  34. }
  35. );
  36. watch(visible, (v) => {
  37. if (!v) emit('update:modelValue', false);
  38. });
  39. defineExpose({ visible });
  40. </script>
  41. <script lang="ts">
  42. export default {};
  43. </script>
  44. <style scoped>
  45. .detail-form {
  46. padding: 10px 20px 0 20px;
  47. }
  48. .el-form-item {
  49. margin-bottom: 24px;
  50. }
  51. .el-input[readonly] .el-input__inner {
  52. background: #f5f7fa;
  53. color: #333;
  54. }
  55. </style>