From dc9e629b31ce59d6cf484b81611cbb2f64da9897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Sat, 7 Feb 2026 11:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E8=AF=8A=E6=96=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/TransferPrescriptionCard.vue | 110 +++++++++++++++ .../TransferPrescriptionMessageCard.vue | 110 +++++++++++++++ .../system/transfer-question/api/index.ts | 43 ++++++ .../transfer-question/components/modal.vue | 61 ++++++++ .../system/transfer-question/config/form.ts | 64 +++++++++ .../system/transfer-question/config/search.ts | 45 ++++++ .../system/transfer-question/config/table.ts | 76 ++++++++++ .../views/system/transfer-question/index.vue | 132 ++++++++++++++++++ 8 files changed, 641 insertions(+) create mode 100644 apps/web-antd/src/views/system/transfer-question/api/index.ts create mode 100644 apps/web-antd/src/views/system/transfer-question/components/modal.vue create mode 100644 apps/web-antd/src/views/system/transfer-question/config/form.ts create mode 100644 apps/web-antd/src/views/system/transfer-question/config/search.ts create mode 100644 apps/web-antd/src/views/system/transfer-question/config/table.ts create mode 100644 apps/web-antd/src/views/system/transfer-question/index.vue diff --git a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionCard.vue b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionCard.vue index 978f78ed..a90612f6 100644 --- a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionCard.vue +++ b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionCard.vue @@ -297,6 +297,24 @@ const emit = defineEmits(['import-success']);
{{ transferInfo.transfer_reason }}
+ + +
+
+ + 咨询问题 +
+
+
+ {{ index + 1 }}. + {{ qa.question }} +
+
+ + {{ qa.answer }} +
+
+
@@ -478,4 +496,96 @@ const emit = defineEmits(['import-success']); background: #0f172a; border-color: #334155; } + +/* 咨询问题区域 */ +.questions-section { + margin-top: 16px; + padding: 16px; + background: #f8fafc; + border-radius: 12px; + border: 1px solid #e2e8f0; +} + +.section-title { + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + font-weight: 600; + color: #1e293b; + margin-bottom: 12px; +} + +.section-title i { + color: #0A84FF; + font-size: 16px; +} + +.question-item { + background: white; + padding: 12px 16px; + border-radius: 8px; + margin-bottom: 12px; + border: 1px solid #e2e8f0; +} + +.question-item:last-child { + margin-bottom: 0; +} + +.question-text { + font-size: 14px; + color: #334155; + line-height: 1.6; + margin-bottom: 8px; +} + +.question-number { + font-weight: 600; + color: #0A84FF; + margin-right: 4px; +} + +.answer-text { + display: flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 500; + padding: 6px 12px; + border-radius: 6px; + width: fit-content; +} + +.answer-yes { + background: #dcfce7; + color: #16a34a; +} + +.answer-yes i { + color: #16a34a; +} + +.answer-no { + background: #fee2e2; + color: #dc2626; +} + +.answer-no i { + color: #dc2626; +} + +.dark .questions-section { + background: #1e293b; + border-color: #334155; +} + +.dark .question-item { + background: #0f172a; + border-color: #334155; +} + +.dark .section-title { + color: #e2e8f0; +} diff --git a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue index a0d14fe6..ee413113 100644 --- a/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue +++ b/apps/web-antd/src/views/doctor/online-consultation/components/TransferPrescriptionMessageCard.vue @@ -273,6 +273,24 @@ const handleImportToPrescription = async () => {
转诊时间:
{{ transferInfo.transfer_time }}
+ + +
+
+ + 咨询问题 +
+
+
+ {{ index + 1 }}. + {{ qa.question }} +
+
+ + {{ qa.answer }} +
+
+
@@ -439,4 +457,96 @@ const handleImportToPrescription = async () => { .dark .transfer-prescription-message-card:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); } + +/* 咨询问题区域 */ +.questions-section { + margin-top: 16px; + padding: 12px; + background: #f8fafc; + border-radius: 8px; + border: 1px solid #e2e8f0; +} + +.section-title { + display: flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 600; + color: #1e293b; + margin-bottom: 10px; +} + +.section-title i { + color: #0A84FF; + font-size: 14px; +} + +.question-item { + background: white; + padding: 10px 12px; + border-radius: 6px; + margin-bottom: 8px; + border: 1px solid #e2e8f0; +} + +.question-item:last-child { + margin-bottom: 0; +} + +.question-text { + font-size: 13px; + color: #334155; + line-height: 1.5; + margin-bottom: 6px; +} + +.question-number { + font-weight: 600; + color: #0A84FF; + margin-right: 4px; +} + +.answer-text { + display: flex; + align-items: center; + gap: 4px; + font-size: 12px; + font-weight: 500; + padding: 4px 10px; + border-radius: 4px; + width: fit-content; +} + +.answer-yes { + background: #dcfce7; + color: #16a34a; +} + +.answer-yes i { + color: #16a34a; +} + +.answer-no { + background: #fee2e2; + color: #dc2626; +} + +.answer-no i { + color: #dc2626; +} + +.dark .questions-section { + background: #1e293b; + border-color: #334155; +} + +.dark .question-item { + background: #0f172a; + border-color: #334155; +} + +.dark .section-title { + color: #e2e8f0; +} diff --git a/apps/web-antd/src/views/system/transfer-question/api/index.ts b/apps/web-antd/src/views/system/transfer-question/api/index.ts new file mode 100644 index 00000000..4a67ebaa --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/api/index.ts @@ -0,0 +1,43 @@ +import { requestClient } from '#/api/request'; + +const prefix = 'transfer-question/'; + +/** + * 获取转诊问题列表 + * @param data + */ +export async function getTransferQuestionList(data: any) { + return requestClient.post(`${prefix}list`, data); +} + +/** + * 获取转诊问题详情 + * @param id + */ +export async function getTransferQuestionInfo(id: number) { + return requestClient.get(`${prefix}detail`, { params: { id } }); +} + +/** + * 新增转诊问题 + * @param data + */ +export async function createTransferQuestion(data: Record) { + return requestClient.post(`${prefix}add`, data); +} + +/** + * 更新转诊问题 + * @param data + */ +export async function updateTransferQuestion(data: Record) { + return requestClient.post(`${prefix}update`, data); +} + +/** + * 删除转诊问题 + * @param data + */ +export async function deleteTransferQuestion(data: Record) { + return requestClient.post(`${prefix}delete`, data); +} diff --git a/apps/web-antd/src/views/system/transfer-question/components/modal.vue b/apps/web-antd/src/views/system/transfer-question/components/modal.vue new file mode 100644 index 00000000..36537baa --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/components/modal.vue @@ -0,0 +1,61 @@ + + diff --git a/apps/web-antd/src/views/system/transfer-question/config/form.ts b/apps/web-antd/src/views/system/transfer-question/config/form.ts new file mode 100644 index 00000000..4e9221db --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/config/form.ts @@ -0,0 +1,64 @@ +import type { VbenFormProps } from '#/adapter/form'; + +export const modalFormProps: VbenFormProps = { + wrapperClass: 'grid-cols-12', // 24栅格, + commonConfig: { + formItemClass: 'col-span-12', + // 所有表单项 + componentProps: { + class: 'w-full', + }, + }, + layout: 'horizontal', + schema: [ + { + component: 'VbenInput', + fieldName: 'id', + label: 'ID', + dependencies: { + show: false, + triggerFields: ['id'], + }, + }, + { + component: 'VbenTextarea', + componentProps: { + placeholder: '请输入问题内容', + rows: 3, + }, + fieldName: 'question', + label: '问题内容', + rules: 'required', + }, + { + component: 'InputNumber', + componentProps: { + placeholder: '请输入排序(数字越小越靠前)', + min: 0, + }, + defaultValue: 0, + fieldName: 'sort', + label: '排序', + rules: 'required', + }, + { + component: 'RadioGroup', + componentProps: { + options: [ + { + label: '启用', + value: 1, + }, + { + label: '禁用', + value: 0, + }, + ], + }, + defaultValue: 1, + fieldName: 'status', + label: '状态', + rules: 'required', + }, + ], +}; diff --git a/apps/web-antd/src/views/system/transfer-question/config/search.ts b/apps/web-antd/src/views/system/transfer-question/config/search.ts new file mode 100644 index 00000000..30e938ab --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/config/search.ts @@ -0,0 +1,45 @@ +import type { VbenFormProps } from '#/adapter/form'; + +export const formOptions: VbenFormProps = { + // 默认展开 + collapsed: false, + schema: [ + { + component: 'VbenInput', + componentProps: { + placeholder: '输入问题内容', + }, + defaultValue: '', + fieldName: 'question', + label: '问题内容', + }, + { + component: 'VbenSelect', + componentProps: { + allowClear: true, + options: [ + { + label: '启用', + value: 1, + }, + { + label: '禁用', + value: 0, + }, + ], + placeholder: '请选择状态', + }, + fieldName: 'status', + label: '状态', + }, + ], + // 控制表单是否显示折叠按钮 + showCollapseButton: true, + submitButtonOptions: { + content: '查询', + }, + // 是否在字段值改变时提交表单 + submitOnChange: true, + // 按下回车时是否提交表单 + submitOnEnter: false, +}; diff --git a/apps/web-antd/src/views/system/transfer-question/config/table.ts b/apps/web-antd/src/views/system/transfer-question/config/table.ts new file mode 100644 index 00000000..1ba0e79b --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/config/table.ts @@ -0,0 +1,76 @@ +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { getTransferQuestionList } from '../api'; + +interface RowType { + id: number; + question: string; + sort: number; + status: number; + created_at: string; + updated_at: string; +} + +export const gridOptions: VxeGridProps = { + checkboxConfig: { + highlight: true, + labelField: '', + }, + columnConfig: { + useKey: true, + }, + rowConfig: { + useKey: true, + }, + columns: [ + { type: 'checkbox', width: 60 }, + { field: 'id', align: 'left', title: 'ID', width: 100 }, + { field: 'question', align: 'left', title: '问题内容', minWidth: 300 }, + { field: 'sort', title: '排序', width: 100 }, + { + field: 'status', + title: '状态', + width: 100, + slots: { default: 'status' }, + }, + { field: 'created_at', title: '创建时间', width: 180 }, + { field: 'updated_at', title: '更新时间', width: 180 }, + { + type: 'html', + align: 'right', + title: '操作', + slots: { default: 'action' }, + width: 200, + }, + ], + keepSource: true, + pagerConfig: {}, + proxyConfig: { + ajax: { + // 请求后端接口方法 + query: async ({ page }, formValues) => { + return await getTransferQuestionList({ + page: page.currentPage, + pageSize: page.pageSize, + ...formValues, + }); + }, + }, + }, + height: 'auto', + border: false, + toolbarConfig: { + // 是否显示搜索表单控制按钮 + // @ts-ignore 正式环境时有完整的类型声明 + search: true, + refresh: true, // 刷新 + print: false, // 打印 + export: false, // 导出 + // custom: true, // 自定义列 + zoom: true, // 最大化最小化 + slots: { + buttons: 'toolbar-buttons', + }, + }, + showOverflow: false, +}; diff --git a/apps/web-antd/src/views/system/transfer-question/index.vue b/apps/web-antd/src/views/system/transfer-question/index.vue new file mode 100644 index 00000000..b0716c77 --- /dev/null +++ b/apps/web-antd/src/views/system/transfer-question/index.vue @@ -0,0 +1,132 @@ + + +