|
|
@@ -3,6 +3,7 @@ import ReportSchemeEdit from '@/components/Repo
|
|
|
import ReportSchemePreview from '@/components/ReportSchemePreview.vue';
|
|
|
import type { ReportSchemeItemModel, ReportSchemeModel } from '@/model';
|
|
|
import { deleteSchemeMethod } from '@/request/api/report.api';
|
|
|
+import { withResolvers } from '@/tools/promise';
|
|
|
|
|
|
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';
|
|
|
|
|
|
@@ -24,7 +25,7 @@ const props = withDefaults(defineProps<{
|
|
|
hideTitle: false,
|
|
|
});
|
|
|
const emits = defineEmits<{
|
|
|
- refresh: [];
|
|
|
+ refresh: [ id?: string ];
|
|
|
}>();
|
|
|
|
|
|
const { send: deleteScheme } = useRequest(
|
|
|
@@ -39,6 +40,7 @@ const { send: deleteScheme } = useRequest(
|
|
|
|
|
|
|
|
|
function deleteSchemeItemHandle(item: ReportSchemeItemModel, index?: number) {
|
|
|
+ const { promise, resolve } = withResolvers();
|
|
|
Modal.confirm({
|
|
|
icon: h(ExclamationCircleOutlined),
|
|
|
title: `是否删除调理方案?`,
|
|
|
@@ -46,8 +48,9 @@ function deleteSchemeItemHandle(item: ReportSchemeItemModel, index?: number) {
|
|
|
okType: 'danger',
|
|
|
okText: '删除',
|
|
|
zIndex: 9999,
|
|
|
- onOk: () => deleteScheme(item),
|
|
|
+ onOk: () => deleteScheme(item).then(resolve),
|
|
|
});
|
|
|
+ return promise;
|
|
|
}
|
|
|
|
|
|
const openMode = ref<'edit' | 'preview'>();
|
|
|
@@ -84,7 +87,7 @@ function openSchemeHandle(mode: 'edit' | 'preview', item?: ReportSchemeItemModel
|
|
|
'onUpdate:value'(model) {
|
|
|
openModel.value = model;
|
|
|
openMode.value = 'preview';
|
|
|
- emits('refresh');
|
|
|
+ emits('refresh', model.id);
|
|
|
},
|
|
|
onDestroy,
|
|
|
});
|
|
|
@@ -103,7 +106,7 @@ function openSchemeHandle(mode: 'edit' | 'preview', item?: ReportSchemeItemModel
|
|
|
Button,
|
|
|
{
|
|
|
size: 'small', type: 'dashed', danger: true,
|
|
|
- onClick: () => deleteSchemeItemHandle(item, index),
|
|
|
+ onClick: () => deleteSchemeItemHandle(item!, index).then(() => onDestroy()),
|
|
|
},
|
|
|
() => '删除',
|
|
|
),
|
|
|
@@ -123,11 +126,18 @@ function openSchemeHandle(mode: 'edit' | 'preview', item?: ReportSchemeItemModel
|
|
|
},
|
|
|
() => '查看',
|
|
|
),
|
|
|
- ]);
|
|
|
+ ]) as any;
|
|
|
},
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+const showDescriptions = (panel: ReportSchemeItemModel) => {
|
|
|
+ return panel.descriptions?.length || (
|
|
|
+ panel.type !== 'other' &&
|
|
|
+ panel.content?.length
|
|
|
+ );
|
|
|
+};
|
|
|
</script>
|
|
|
<template>
|
|
|
<div class="card report-card">
|
|
|
@@ -146,25 +156,41 @@ function openSchemeHandle(mode: 'edit' | 'preview', item?: ReportSchemeItemModel
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="card__content flex-auto">
|
|
|
- <a-card class="card background descriptions-card" size="small" v-for="(panel, index) in props.dataset.children">
|
|
|
- <template #title>
|
|
|
- <div @click="openSchemeHandle('preview', panel,index)">
|
|
|
- <span class="header">{{ panel.category }}</span>
|
|
|
- <span class="header" v-if="panel.name">{{ panel.name }}</span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template #extra v-if="editable">
|
|
|
- <a-space>
|
|
|
- <a-button size="small" @click.stop="openSchemeHandle('edit',panel, index)">编辑</a-button>
|
|
|
- <a-button size="small" danger @click.stop="deleteSchemeItemHandle(panel, index)">删除</a-button>
|
|
|
- </a-space>
|
|
|
- </template>
|
|
|
- <a-descriptions :column="1" bordered size="small" v-if="panel.descriptions?.length">
|
|
|
- <a-descriptions-item v-for="row in panel.descriptions" :key="row.name" :label="row.name ">
|
|
|
- {{ row.description }}
|
|
|
- </a-descriptions-item>
|
|
|
- </a-descriptions>
|
|
|
- </a-card>
|
|
|
+ <template v-for="(panel, index) in props.dataset.children" :key="panel.id">
|
|
|
+ <div :id="'scrollable_scheme_' + panel.id" style="position: relative;top:-48px;"></div>
|
|
|
+ <a-card class="card background descriptions-card" size="small">
|
|
|
+ <template #title>
|
|
|
+ <div @click="openSchemeHandle('preview', panel,index)">
|
|
|
+ <span class="header">{{ panel.category }}</span>
|
|
|
+ <span class="header" v-if="panel.name">{{ panel.name }}</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #extra v-if="editable">
|
|
|
+ <a-space>
|
|
|
+ <a-button size="small" @click.stop="openSchemeHandle('edit',panel, index)">编辑</a-button>
|
|
|
+ <a-button size="small" danger @click.stop="deleteSchemeItemHandle(panel, index)">删除</a-button>
|
|
|
+ </a-space>
|
|
|
+ </template>
|
|
|
+ <a-descriptions :column="1" bordered size="small" v-if="showDescriptions(panel)">
|
|
|
+ <a-descriptions-item v-if="panel.type === 'acupoint'" label="穴位">
|
|
|
+ <template v-for="(item,index) in panel.content" :key="index">
|
|
|
+ <a-tag>{{ item.name }}</a-tag>
|
|
|
+ </template>
|
|
|
+ </a-descriptions-item>
|
|
|
+ <a-descriptions-item v-if="panel.type === 'medicine'" label="组成">
|
|
|
+ <template v-for="(item,index) in panel.content" :key="index">
|
|
|
+ <a-tag>{{ item.name }} {{ item.doase }}{{ item.unit }}</a-tag>
|
|
|
+ </template>
|
|
|
+ </a-descriptions-item>
|
|
|
+ <a-descriptions-item v-for="row in panel.descriptions" :key="row.name" :label="row.name ">
|
|
|
+ {{ row.description }}
|
|
|
+ </a-descriptions-item>
|
|
|
+ </a-descriptions>
|
|
|
+ </a-card>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <div class="cart__footer flex-none sticky bottom-0">
|
|
|
+ <slot name="footer"></slot>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|