From 8c0663abf8cf8beff24ef2c642e9e2e42b7fcf56 Mon Sep 17 00:00:00 2001
From: xiangcongshuai <xiangcongshuai@supervision.ltd>
Date: Tue, 18 Jun 2024 17:59:06 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=86=E8=BE=A8=E7=8E=87=E8=87=AA?=
 =?UTF-8?q?=E9=80=82=E5=BA=94=EF=BC=8C=E6=B5=8B=E8=AF=95=E9=97=AE=E9=A2=98?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/assets/svg/consultation/check_small.svg   |  13 +
 src/assets/svg/consultation/error.svg         |  10 +
 src/router/modules/caseManagement.ts          |   2 +-
 .../ClinicalConsultation/AddQuestion.vue      | 313 ++++++++++++++++++
 .../ClinicalConsultation/index.vue            | 208 ++++++++++++
 .../compontents/ClinicalDiagnosis/index.vue   | 178 ++++++++++
 .../compontents/DiagnosticBasis/index.vue     | 117 +++++++
 .../edit/compontents/DisposalPlan/index.vue   | 176 ++++++++++
 .../ElectronicCase/SelectPeople.vue           | 215 ++++++++++++
 .../edit/compontents/ElectronicCase/index.vue | 212 +++++++++++-
 src/views/caseManagement/list/edit/index.vue  |  12 +-
 11 files changed, 1450 insertions(+), 6 deletions(-)
 create mode 100644 src/assets/svg/consultation/check_small.svg
 create mode 100644 src/assets/svg/consultation/error.svg
 create mode 100644 src/views/caseManagement/list/edit/compontents/ClinicalConsultation/AddQuestion.vue
 create mode 100644 src/views/caseManagement/list/edit/compontents/ClinicalConsultation/index.vue
 create mode 100644 src/views/caseManagement/list/edit/compontents/ClinicalDiagnosis/index.vue
 create mode 100644 src/views/caseManagement/list/edit/compontents/DiagnosticBasis/index.vue
 create mode 100644 src/views/caseManagement/list/edit/compontents/DisposalPlan/index.vue
 create mode 100644 src/views/caseManagement/list/edit/compontents/ElectronicCase/SelectPeople.vue

diff --git a/src/assets/svg/consultation/check_small.svg b/src/assets/svg/consultation/check_small.svg
new file mode 100644
index 0000000..d6476d7
--- /dev/null
+++ b/src/assets/svg/consultation/check_small.svg
@@ -0,0 +1,13 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="tishi" clip-path="url(#clip0_2113_4143)">
+<path id="Vector" d="M7 0C3.1 0 0 3.1 0 7C0 10.9 3.1 14 7 14C10.9 14 14 10.9 14 7C14 3.1 10.9 0 7 0Z" fill="#00975E"/>
+<g id="&#229;&#175;&#185;&#229;&#143;&#183; 2">
+<path id="Vector_2" d="M4.14564 6.15296C3.8463 5.85206 3.36038 5.85226 3.06059 6.15282L3.06046 6.15296C2.76162 6.45335 2.76162 6.9404 3.06046 7.24079L3.06052 7.24085L5.52864 9.71898L5.52886 9.71919L9.95367 4.40062L9.84739 4.29477L9.84736 4.29481C9.8473 4.29486 9.84725 4.29492 9.8472 4.29497L6.07117 8.08619L4.14564 6.15296ZM4.14564 6.15296L4.03942 6.25863L4.14557 6.1529L4.14564 6.15296Z" fill="white" stroke="white" stroke-width="0.3"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_2113_4143">
+<rect width="14" height="14" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/svg/consultation/error.svg b/src/assets/svg/consultation/error.svg
new file mode 100644
index 0000000..ba84567
--- /dev/null
+++ b/src/assets/svg/consultation/error.svg
@@ -0,0 +1,10 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="tishi" clip-path="url(#clip0_2113_4249)">
+<path id="Vector" d="M7 0C3.1 0 0 3.1 0 7C0 10.9 3.1 14 7 14C10.9 14 14 10.9 14 7C14 3.1 10.9 0 7 0ZM7.8 11.2C7.8 11.7 7.5 12 7 12C6.5 12 6.2 11.7 6.2 11.2V6.6C6.2 6.1 6.5 5.8 7 5.8C7.5 5.8 7.8 6.1 7.8 6.6V11.2ZM8.2 3.6C8.2 4.3 7.6 4.8 7 4.8C6.4 4.8 5.8 4.3 5.8 3.6C5.8 2.9 6.3 2.3 7 2.3C7.7 2.3 8.2 2.9 8.2 3.6Z" fill="#FF3429"/>
+</g>
+<defs>
+<clipPath id="clip0_2113_4249">
+<rect width="14" height="14" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/router/modules/caseManagement.ts b/src/router/modules/caseManagement.ts
index b432624..11d828d 100644
--- a/src/router/modules/caseManagement.ts
+++ b/src/router/modules/caseManagement.ts
@@ -95,7 +95,7 @@ export default {
         {
           path: "/caseManagement/edit",
           name: "caseManagementEdit",
-          component: () => import("@/views/caseManagement/list/edit.vue"),
+          component: () => import("@/views/caseManagement/list/edit/index.vue"),
           meta: {
             title: "编辑病历",
             showLink: false,
diff --git a/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/AddQuestion.vue b/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/AddQuestion.vue
new file mode 100644
index 0000000..46807be
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/AddQuestion.vue
@@ -0,0 +1,313 @@
+<script setup lang="ts">
+import { nextTick, reactive, ref } from "vue";
+import { FormInstance } from "element-plus";
+import { message } from "@/utils/message";
+// import { useRoute } from "vue-router";
+import successIcon from "@/assets/svg/consultation/check_small.svg?component";
+import errorIcon from "@/assets/svg/consultation/error.svg?component";
+defineOptions({
+  name: "AddQuestion"
+});
+const isEditFlag = ref(false);
+const id = ref("");
+const dialogVisible = ref(false);
+const tableList = ref([]);
+const formData = reactive({
+  patientGender: "",
+  directoryDesc: "",
+  patientSelfDesc: "",
+  defaultAnswer: "",
+  dicIdPath: ""
+});
+const dictList = ref([]);
+const isValidate = ref("1");
+const ruleFormRef = ref<FormInstance>();
+const rules = {
+  patientGender: [{ required: true, message: "请选择", trigger: "change" }],
+  directoryDesc: [{ required: true, message: "请输入", trigger: "change" }]
+};
+const props = {
+  value: "id",
+  label: "nameZh",
+  children: "childDictTreeList",
+  expandTrigger: "hover" as const
+};
+const columns: TableColumnList = [
+  {
+    label: "相似问题",
+    prop: "itemName"
+  },
+
+  {
+    label: "操作",
+    fixed: "right",
+    width: 100,
+    slot: "operation"
+  }
+];
+defineExpose({
+  async open(item) {
+    dialogVisible.value = true;
+    await nextTick();
+    if (item) {
+      for (const key in item) {
+        // eslint-disable-next-line no-prototype-builtins
+        if (formData.hasOwnProperty(key)) {
+          formData[key] = item[key];
+        }
+      }
+      isEditFlag.value = true;
+      id.value = item.id;
+    }
+  }
+});
+const handleChange = item => {
+  formData.dictId = item[item.length - 1];
+};
+const resetForm = () => {
+  ruleFormRef.value.resetFields();
+};
+const closeDialog = () => {
+  dialogVisible.value = false;
+  isEditFlag.value = false;
+  resetForm();
+};
+const emit = defineEmits(["update"]);
+const reset = () => {
+  ruleFormRef.value.resetFields();
+};
+const handleDelete = item => {};
+const save = (formEl: FormInstance | undefined) => {
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      // formData.result = refWangEditor.value.valueHtml;
+      // const params = {
+      //   ...formData,
+      //   result: refWangEditor.value.valueHtml,
+      //   diseaseId: route.query.id
+      // };
+      if (isEditFlag.value) {
+        // const res: any = await updateSupportInspect({
+        //   ...params,
+        //   id: id.value
+        // });
+        if (res.code === 200) {
+          message("修改成功", { type: "success" });
+          id.value = "";
+        }
+      } else {
+        // const res: any = await addSupportInspect(params);
+        // if (res.code === 200) {
+        //   message("新增成功", { type: "success" });
+        // }
+      }
+      dialogVisible.value = false;
+      emit("update");
+    } else {
+      return fields;
+    }
+  });
+};
+</script>
+
+<template>
+  <div>
+    <el-drawer
+      :size="650"
+      append-to-body
+      v-model="dialogVisible"
+      :show-close="false"
+      :with-header="false"
+      :before-close="closeDialog"
+      custom-class="AddQuestion"
+    >
+      <div class="AddQuestion">
+        <div class="header-title">
+          <div class="tip" />
+          <span>添加问题</span>
+        </div>
+        <div class="line" />
+        <el-form
+          ref="ruleFormRef"
+          :model="formData"
+          :rules="rules"
+          label-width="120px"
+        >
+          <el-form-item label="问诊问题" prop="directoryDesc">
+            <el-input
+              size="large"
+              style="width: 380px"
+              v-model="formData.patientSelfDesc"
+            />
+            <div class="add_btn">评估</div>
+          </el-form-item>
+          <el-form-item label="相似度阈值(%)" prop="directoryDesc">
+            <span>{{ `0.7%(系统返回阈值结界)` }}</span>
+          </el-form-item>
+          <div class="result">
+            <div v-if="isValidate === '2'" class="result_error">
+              <errorIcon />
+              <span
+                >相似度高,已存在相似问诊问题,不支持添加,若要添加可联系运营人员</span
+              >
+            </div>
+            <div v-if="isValidate === '1'" class="result_success">
+              <successIcon />
+              <span>相似度低,支持添加该问题</span>
+            </div>
+          </div>
+          <el-form-item label="">
+            <pure-table
+              ref="tableRef"
+              align-whole="center"
+              style="height: 460px"
+              showOverflowTooltip
+              class="mt-4"
+              border
+              :data="tableList"
+              :columns="columns"
+              :header-cell-style="{
+                background: 'var(--el-table-row-hover-bg-color)',
+                color: 'var(--el-text-color-primary)'
+              }"
+            >
+              <template #operation="{ row }">
+                <el-button link type="danger" @click="handleDelete(row)">
+                  删除
+                </el-button>
+              </template>
+            </pure-table>
+          </el-form-item>
+          <el-form-item label="问诊类目 " prop="dicIdPath">
+            <el-cascader
+              :disabled="isEditFlag"
+              style="width: 100%"
+              size="large"
+              v-model="formData.dicIdPath"
+              :options="dictList"
+              :props="props"
+              @change="handleChange"
+            />
+          </el-form-item>
+          <el-form-item label="回复 " prop="defaultAnswer">
+            <el-input
+              size="large"
+              v-model="formData.defaultAnswer"
+              placeholder="请输入"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <div class="footer_btn">
+          <div class="reset" @click="reset()">重置</div>
+          <div class="main" @click="save(ruleFormRef)">确定</div>
+        </div>
+      </template>
+    </el-drawer>
+  </div>
+</template>
+<style lang="scss" scoped>
+.AddQuestion {
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+
+  .header-title {
+    display: flex;
+    align-items: center;
+    // border-left: 6px solid #4287ff;
+
+    font-size: 20px;
+    font-weight: bold;
+    color: #2b3f54;
+
+    .tip {
+      width: 6px;
+      height: 20px;
+      margin-right: 10px;
+      line-height: 20px;
+      background: #4287ff;
+    }
+  }
+  .add_btn {
+    width: 76px;
+    height: 32px;
+    background: #ffffff;
+    border-radius: 6px 6px 6px 6px;
+    border: 1px solid #4287ff;
+    line-height: 32px;
+    text-align: center;
+    font-size: 14px;
+    color: #4287ff;
+    margin-left: 16px;
+    cursor: pointer;
+  }
+  .result {
+    display: flex;
+    padding-left: 120px;
+    .result_error {
+      display: flex;
+      align-items: center;
+      span {
+        font-size: 12px;
+        color: #ff3429;
+        margin-left: 8px;
+      }
+    }
+    .result_success {
+      display: flex;
+      align-items: center;
+      span {
+        font-size: 12px;
+        color: #00975e;
+        margin-left: 8px;
+      }
+    }
+  }
+  .line {
+    position: relative;
+    left: -20px;
+    width: 630px;
+    height: 1px;
+    margin: 24px 0;
+    background: rgb(91 139 255 / 30%);
+  }
+
+  .footer_btn {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    margin-top: 16px;
+
+    .reset {
+      width: 188px;
+      height: 48px;
+      margin-right: 24px;
+      font-size: 16px;
+      font-weight: 400;
+      line-height: 48px;
+      color: #4287ff;
+      text-align: center;
+      cursor: pointer;
+      background: #fff;
+      border: 1px solid #4287ff;
+      border-radius: 6px;
+    }
+
+    .main {
+      width: 188px;
+      height: 48px;
+      font-size: 16px;
+      line-height: 48px;
+      color: #fff;
+      text-align: center;
+      cursor: pointer;
+      background: #4287ff;
+      border: 1px solid #4287ff;
+      border-radius: 6px;
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/index.vue b/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/index.vue
new file mode 100644
index 0000000..0008969
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/ClinicalConsultation/index.vue
@@ -0,0 +1,208 @@
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import ProblemBase from "@/views/caseManagement/diseaseType/compontents/problemBase.vue";
+import AddQuestion from "./AddQuestion.vue";
+import { message } from "@/utils/message";
+const seachForm = reactive({
+  type: "",
+  name: "",
+  patientSelfDesc: "",
+  patientAge: "",
+  diseaseId: ""
+});
+const typeList = ref([]);
+const problemBaseRef = ref();
+const AddQuestionRef = ref();
+const dataList = ref([{}]);
+
+const pagination = reactive<any>({
+  total: 0,
+  pageSize: 10,
+  currentPage: 1,
+  background: true
+});
+const columns: TableColumnList = [
+  {
+    label: "序号",
+    type: "index",
+    width: 80
+  },
+  {
+    label: "问题",
+    prop: "itemName"
+  },
+  {
+    label: "回复",
+    prop: "itemName"
+  },
+  {
+    label: "问题类目",
+    prop: "itemName"
+  },
+  {
+    label: "诊断依据",
+    prop: "itemName"
+  },
+  {
+    label: "操作",
+    fixed: "right",
+    width: 200,
+    slot: "operation"
+  }
+];
+const getData = () => {};
+const search = () => {
+  pagination.currentPage = 1;
+  pagination.pageSize = 10;
+  getData();
+};
+const selectQuestion = () => {
+  problemBaseRef.value.open();
+};
+const add = () => {
+  AddQuestionRef.value.open();
+};
+const edit = item => {};
+const handleDelete = item => {};
+const reset = () => {
+  seachForm.name = "";
+  seachForm.type = "";
+  search();
+};
+const selectOk = async (data: any) => {
+  let flag = true;
+  data.forEach(e => {
+    for (const item of dataList.value) {
+      if (item.libraryQuestionId === e.libraryQuestionId) {
+        message("不能选择重复数据", { type: "error" });
+        flag = false;
+        return;
+      }
+    }
+    if (flag) {
+      dataList.value.push({
+        defaultAnswer: e.defaultAnswer,
+        dictNamePath: e.nameZhPath,
+        medicalRecAnswer: e.defaultAnswer,
+        libraryQuestionId: e.libraryQuestionId,
+        questionList: e.question,
+        answerResourceId: e.answerResourceId
+      });
+    }
+  });
+};
+</script>
+<template>
+  <div class="ClinicalConsultation">
+    <div class="header">
+      <div class="header_left">
+        <span>临床问诊</span>
+      </div>
+      <div class="header_right">
+        <el-button
+          size="large"
+          class="btn"
+          @click="selectQuestion"
+          type="primary"
+          >选择问题</el-button
+        >
+        <el-button size="large" class="btn" @click="add" type="primary"
+          >添加问题</el-button
+        >
+      </div>
+    </div>
+    <el-form
+      style="padding-right: 40px"
+      ref="ruleFormRef"
+      :model="seachForm"
+      label-width="80px"
+    >
+      <el-row>
+        <el-form-item label="类目" prop="patientGender">
+          <el-select
+            size="large"
+            filterable
+            style="width: 100%"
+            v-model="seachForm.type"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="问题">
+          <el-input size="large" v-model="seachForm.name" />
+        </el-form-item>
+        <el-button class="ml-8" size="large" @click="search" type="primary"
+          >搜索</el-button
+        >
+        <el-button size="large" @click="reset">重置</el-button>
+      </el-row>
+    </el-form>
+    <div style="padding: 0 40px">
+      <pure-table
+        ref="tableRef"
+        v-if="dataList.length > 0"
+        align-whole="center"
+        style="height: calc(100vh - 485px)"
+        showOverflowTooltip
+        class="mt-4"
+        :data="dataList"
+        :columns="columns"
+        :header-cell-style="{
+          background: 'var(--el-table-row-hover-bg-color)',
+          color: 'var(--el-text-color-primary)'
+        }"
+      >
+        <template #basisConfirm="{ row }">
+          <el-checkbox
+            :true-label="1"
+            :false-label="0"
+            v-model="row.basisConfirmFlag"
+            size="large"
+          />
+        </template>
+        <template #operation="{ row }">
+          <el-button link type="primary" @click="edit(row)"> 编辑 </el-button>
+          <el-button link type="danger" @click="handleDelete(row)">
+            删除
+          </el-button>
+        </template>
+      </pure-table>
+    </div>
+    <ProblemBase @select="selectOk" ref="problemBaseRef" />
+    <AddQuestion ref="AddQuestionRef" />
+  </div>
+</template>
+<style lang="scss" scoped>
+.ClinicalConsultation {
+  flex: 1;
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+  .header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 88px;
+    padding: 0 40px;
+    margin-bottom: 24px;
+    border-bottom: 1px solid #d9d9d9;
+
+    .header_left {
+      font-size: 20px;
+      color: #333;
+
+      span {
+        padding-left: 8px;
+        border-left: 6px solid #4287ff;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/ClinicalDiagnosis/index.vue b/src/views/caseManagement/list/edit/compontents/ClinicalDiagnosis/index.vue
new file mode 100644
index 0000000..940053e
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/ClinicalDiagnosis/index.vue
@@ -0,0 +1,178 @@
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import { message } from "@/utils/message";
+const seachForm = reactive({
+  type: "",
+  name: "",
+  patientSelfDesc: "",
+  patientAge: "",
+  diseaseId: ""
+});
+const typeList = ref([]);
+const dataList = ref([{}]);
+const pagination = reactive<any>({
+  total: 0,
+  pageSize: 10,
+  currentPage: 1,
+  background: true
+});
+const columns: TableColumnList = [
+  {
+    label: "检查项目",
+    prop: "toolName"
+  },
+  {
+    label: "检查部位",
+    prop: "locationName"
+  },
+  {
+    label: "初步诊断依据",
+    slot: "slot0"
+  },
+  {
+    label: "证实诊断依据",
+    slot: "slot1"
+  },
+  {
+    label: "鉴别依据",
+    slot: "slot2"
+  },
+  {
+    label: "全面依据",
+    slot: "slot3"
+  },
+  {
+    label: "是否必查",
+    prop: "requireCheckFlag",
+    slot: "requireCheckFlag"
+  }
+];
+const getData = () => {};
+const search = () => {
+  pagination.currentPage = 1;
+  pagination.pageSize = 10;
+  getData();
+};
+
+const add = () => {};
+const edit = item => {};
+const handleDelete = item => {};
+const reset = () => {
+  seachForm.name = "";
+  seachForm.type = "";
+  search();
+};
+</script>
+<template>
+  <div class="ClinicalDiagnosis">
+    <div class="header">
+      <div class="header_left">
+        <span>临床诊断-体格检查辅助检查项目</span>
+      </div>
+      <div class="header_right">
+        <el-button size="large" class="btn" @click="add" type="primary"
+          >保存</el-button
+        >
+      </div>
+    </div>
+    <el-form
+      style="padding-right: 40px"
+      ref="ruleFormRef"
+      :model="seachForm"
+      label-width="80px"
+    >
+      <el-row>
+        <el-form-item label="类目" prop="patientGender">
+          <el-select
+            size="large"
+            filterable
+            style="width: 100%"
+            v-model="seachForm.type"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="问题">
+          <el-input size="large" v-model="seachForm.name" />
+        </el-form-item>
+        <el-button class="ml-8" size="large" @click="search" type="primary"
+          >搜索</el-button
+        >
+        <el-button size="large" @click="reset">重置</el-button>
+      </el-row>
+    </el-form>
+    <div style="padding: 0 40px">
+      <pure-table
+        ref="tableRef"
+        v-if="dataList.length > 0"
+        align-whole="center"
+        style="height: calc(100vh - 485px)"
+        showOverflowTooltip
+        class="mt-4"
+        :data="dataList"
+        :columns="columns"
+        :header-cell-style="{
+          background: 'var(--el-table-row-hover-bg-color)',
+          color: 'var(--el-text-color-primary)'
+        }"
+      >
+        <template #basisConfirm="{ row }">
+          <el-checkbox
+            :true-label="1"
+            :false-label="0"
+            v-model="row.basisConfirmFlag"
+            size="large"
+          />
+        </template>
+        <template #basisIdentification="{ row }">
+          <el-checkbox
+            :true-label="1"
+            :false-label="0"
+            v-model="row.basisIdentificationFlag"
+            size="large"
+          />
+        </template>
+        <template #operation="{ row }">
+          <el-button link type="primary" @click="edit(row)"> 编辑 </el-button>
+          <el-button link type="danger" @click="handleDelete(row)">
+            删除
+          </el-button>
+        </template>
+      </pure-table>
+    </div>
+  </div>
+</template>
+<style lang="scss" scoped>
+.ClinicalDiagnosis {
+  flex: 1;
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+  .header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 88px;
+    padding: 0 40px;
+    margin-bottom: 24px;
+    border-bottom: 1px solid #d9d9d9;
+
+    .header_left {
+      font-size: 20px;
+      color: #333;
+
+      span {
+        padding-left: 8px;
+        border-left: 6px solid #4287ff;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/DiagnosticBasis/index.vue b/src/views/caseManagement/list/edit/compontents/DiagnosticBasis/index.vue
new file mode 100644
index 0000000..09290ef
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/DiagnosticBasis/index.vue
@@ -0,0 +1,117 @@
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import { message } from "@/utils/message";
+const seachForm = reactive({
+  primarilyDiagnosisCriteria: "",
+  confirmDiagnosisCriteria: "",
+  patientSelfDesc: "",
+  differentialDiagnosisCriteria: "",
+  fullCheck: ""
+});
+const add = () => {};
+
+const reset = () => {};
+</script>
+<template>
+  <div class="DiagnosticBasis">
+    <div class="header">
+      <div class="header_left">
+        <span>诊断依据</span>
+      </div>
+      <div class="header_right">
+        <el-button size="large" class="btn" @click="add" type="primary"
+          >保存</el-button
+        >
+      </div>
+    </div>
+    <el-form class="mt-4 mr-10" :model="seachForm" label-width="180px">
+      <el-row>
+        <el-col :span="24">
+          <el-form-item
+            label="初步诊断依据:"
+            prop="primarilyDiagnosisCriteria"
+          >
+            <el-input
+              :rows="4"
+              style="width: 100%"
+              type="textarea"
+              :maxLength="500"
+              placeholder="请输入描述"
+              v-model="seachForm.primarilyDiagnosisCriteria"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="证实诊断依据:" prop="confirmDiagnosisCriteria">
+            <el-input
+              :rows="4"
+              style="width: 100%"
+              type="textarea"
+              :maxLength="500"
+              placeholder="请输入描述"
+              v-model="seachForm.confirmDiagnosisCriteria"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="鉴别依据:" prop="differentialDiagnosisCriteria">
+            <el-input
+              :rows="4"
+              style="width: 100%"
+              type="textarea"
+              :maxLength="500"
+              placeholder="请输入描述"
+              v-model="seachForm.differentialDiagnosisCriteria"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="处置诊断说明" prop="fullCheck">
+            <el-input
+              :rows="4"
+              style="width: 100%"
+              type="textarea"
+              :maxLength="500"
+              placeholder="请输入描述"
+              v-model="seachForm.fullCheck"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+<style lang="scss" scoped>
+.DiagnosticBasis {
+  flex: 1;
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+  .header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 88px;
+    padding: 0 40px;
+    margin-bottom: 24px;
+    border-bottom: 1px solid #d9d9d9;
+
+    .header_left {
+      font-size: 20px;
+      color: #333;
+
+      span {
+        padding-left: 8px;
+        border-left: 6px solid #4287ff;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/DisposalPlan/index.vue b/src/views/caseManagement/list/edit/compontents/DisposalPlan/index.vue
new file mode 100644
index 0000000..f090a73
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/DisposalPlan/index.vue
@@ -0,0 +1,176 @@
+<script setup lang="ts">
+import { reactive, ref } from "vue";
+import { message } from "@/utils/message";
+const seachForm = reactive({
+  type: "",
+  name: "",
+  patientSelfDesc: "",
+  patientAge: "",
+  diseaseId: ""
+});
+const typeList = ref([]);
+const dataList = ref([{}]);
+const pagination = reactive<any>({
+  total: 0,
+  pageSize: 10,
+  currentPage: 1,
+  background: true
+});
+const columns = [
+  {
+    label: "检查项目",
+    prop: "toolName"
+  },
+  {
+    label: "检查部位",
+    prop: "locationName"
+  },
+  {
+    label: "初步诊断依据",
+    slot: "slot0"
+  },
+  {
+    label: "证实诊断依据",
+    slot: "slot1"
+  },
+  {
+    label: "鉴别依据",
+    slot: "slot2"
+  },
+  {
+    label: "全面依据",
+    slot: "slot3"
+  },
+  {
+    label: "是否必查",
+    prop: "requireCheckFlag",
+    slot: "requireCheckFlag"
+  }
+];
+const getData = () => {};
+const search = () => {
+  pagination.currentPage = 1;
+  pagination.pageSize = 10;
+  getData();
+};
+
+const add = () => {};
+const handleDelete = item => {};
+const reset = () => {
+  seachForm.name = "";
+  seachForm.type = "";
+  search();
+};
+</script>
+<template>
+  <div class="DisposalPlan">
+    <div class="header">
+      <div class="header_left">
+        <span>处置计划</span>
+      </div>
+      <div class="header_right">
+        <el-button size="large" class="btn" @click="add" type="primary"
+          >保存</el-button
+        >
+      </div>
+    </div>
+    <el-form
+      style="padding-right: 40px"
+      ref="ruleFormRef"
+      :model="seachForm"
+      label-width="80px"
+    >
+      <el-row>
+        <el-form-item label="类目" prop="patientGender">
+          <el-select
+            size="large"
+            filterable
+            style="width: 100%"
+            v-model="seachForm.type"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="问题">
+          <el-input size="large" v-model="seachForm.name" />
+        </el-form-item>
+        <el-button class="ml-8" size="large" @click="search" type="primary"
+          >搜索</el-button
+        >
+        <el-button size="large" @click="reset">重置</el-button>
+      </el-row>
+    </el-form>
+    <div style="padding: 0 40px">
+      <pure-table
+        ref="tableRef"
+        v-if="dataList.length > 0"
+        align-whole="center"
+        style="height: calc(100vh - 485px)"
+        showOverflowTooltip
+        class="mt-4"
+        :data="dataList"
+        :columns="columns"
+        :header-cell-style="{
+          background: 'var(--el-table-row-hover-bg-color)',
+          color: 'var(--el-text-color-primary)'
+        }"
+      >
+        <template #basisConfirm="{ row }">
+          <el-checkbox
+            :true-label="1"
+            :false-label="0"
+            v-model="row.basisConfirmFlag"
+            size="large"
+          />
+        </template>
+        <template #basisIdentification="{ row }">
+          <el-checkbox
+            :true-label="1"
+            :false-label="0"
+            v-model="row.basisIdentificationFlag"
+            size="large"
+          />
+        </template>
+        <template #operation="{ row }">
+          <el-button link type="danger" @click="handleDelete(row)">
+            删除
+          </el-button>
+        </template>
+      </pure-table>
+    </div>
+  </div>
+</template>
+<style lang="scss" scoped>
+.DisposalPlan {
+  flex: 1;
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+  .header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 88px;
+    padding: 0 40px;
+    margin-bottom: 24px;
+    border-bottom: 1px solid #d9d9d9;
+
+    .header_left {
+      font-size: 20px;
+      color: #333;
+
+      span {
+        padding-left: 8px;
+        border-left: 6px solid #4287ff;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/ElectronicCase/SelectPeople.vue b/src/views/caseManagement/list/edit/compontents/ElectronicCase/SelectPeople.vue
new file mode 100644
index 0000000..5f7c921
--- /dev/null
+++ b/src/views/caseManagement/list/edit/compontents/ElectronicCase/SelectPeople.vue
@@ -0,0 +1,215 @@
+<script setup lang="ts">
+import { nextTick, ref } from "vue";
+
+defineOptions({
+  name: "AddCase"
+});
+const isEditFlag = ref(false);
+const dataList = ref([
+  {
+    url: "",
+    key: 1,
+    name: "虚拟人名称"
+  },
+  {
+    url: "",
+    key: 2,
+    name: "虚拟人名称"
+  },
+  {
+    url: "",
+    key: 3,
+    name: "虚拟人名称"
+  }
+]);
+const selectKey = ref(1);
+const id = ref("");
+const dialogVisible = ref(false);
+
+defineExpose({
+  async open(item) {
+    dialogVisible.value = true;
+  }
+});
+
+const closeDialog = () => {
+  dialogVisible.value = false;
+  isEditFlag.value = false;
+};
+const emit = defineEmits(["update"]);
+const reset = () => {};
+
+const save = () => {};
+</script>
+
+<template>
+  <div>
+    <el-drawer
+      :size="650"
+      append-to-body
+      v-model="dialogVisible"
+      :show-close="false"
+      :with-header="false"
+      :before-close="closeDialog"
+      custom-class="SelectPeople"
+    >
+      <div class="SelectPeople">
+        <div class="header-title">
+          <div class="tip" />
+          <span>选择虚拟人形象</span>
+        </div>
+        <div class="line" />
+        <div class="img_list">
+          <div
+            class="img_list_item"
+            v-for="(item, index) in dataList"
+            :key="index"
+          >
+            <img :src="item.url" alt="" />
+            <div class="img_list_desc">{{ item.name }}</div>
+            <div class="no_select" v-if="selectKey !== item.key" />
+            <div class="selected" v-if="selectKey === item.key">
+              <span class="in_select" />
+            </div>
+          </div>
+        </div>
+      </div>
+      <template #footer>
+        <div class="footer_btn">
+          <div class="reset" @click="reset()">重置</div>
+          <div class="main" @click="save()">确定</div>
+        </div>
+      </template>
+    </el-drawer>
+  </div>
+</template>
+<style lang="scss" scoped>
+.SelectPeople {
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
+
+  .header-title {
+    display: flex;
+    align-items: center;
+    // border-left: 6px solid #4287ff;
+
+    font-size: 20px;
+    font-weight: bold;
+    color: #2b3f54;
+
+    .tip {
+      width: 6px;
+      height: 20px;
+      margin-right: 10px;
+      line-height: 20px;
+      background: #4287ff;
+    }
+  }
+
+  .line {
+    position: relative;
+    left: -20px;
+    width: 650px;
+    height: 1px;
+    margin: 24px 0;
+    background: rgb(91 139 255 / 30%);
+  }
+  .img_list {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    .img_list_item {
+      width: 190px;
+      position: relative;
+      box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.08);
+      // margin-right: 16px;
+      border-radius: 12px;
+      cursor: pointer;
+      img {
+        width: 100%;
+        height: 190px;
+      }
+      .img_list_item:last-child {
+        margin-right: 0px;
+      }
+      .img_list_desc {
+        width: 100%;
+        height: 40px;
+        background: #ffffff;
+        border-radius: 0px 0px 12px 12px;
+        font-size: 16px;
+        color: #333333;
+        line-height: 40px;
+        padding-left: 16px;
+        border-radius: 0 0 12px 12px;
+      }
+      .no_select {
+        width: 30px;
+        height: 30px;
+        background: #ffffff;
+        border-radius: 28px 28px 28px 28px;
+        border: 1px solid #d9d9d9;
+        position: absolute;
+        top: 12px;
+        right: 12px;
+      }
+      .selected {
+        width: 30px;
+        height: 30px;
+        background: #ffffff;
+        border-radius: 28px 28px 28px 28px;
+        border: 1px solid #4287ff;
+        position: absolute;
+        top: 12px;
+        right: 12px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        .in_select {
+          width: 16px;
+          height: 16px;
+          background: #4287ff;
+          border-radius: 12px;
+        }
+      }
+    }
+  }
+
+  .footer_btn {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    margin-top: 16px;
+
+    .reset {
+      width: 188px;
+      height: 48px;
+      margin-right: 24px;
+      font-size: 16px;
+      font-weight: 400;
+      line-height: 48px;
+      color: #4287ff;
+      text-align: center;
+      cursor: pointer;
+      background: #fff;
+      border: 1px solid #4287ff;
+      border-radius: 6px;
+    }
+
+    .main {
+      width: 188px;
+      height: 48px;
+      font-size: 16px;
+      line-height: 48px;
+      color: #fff;
+      text-align: center;
+      cursor: pointer;
+      background: #4287ff;
+      border: 1px solid #4287ff;
+      border-radius: 6px;
+    }
+  }
+}
+</style>
diff --git a/src/views/caseManagement/list/edit/compontents/ElectronicCase/index.vue b/src/views/caseManagement/list/edit/compontents/ElectronicCase/index.vue
index 544383c..223dd56 100644
--- a/src/views/caseManagement/list/edit/compontents/ElectronicCase/index.vue
+++ b/src/views/caseManagement/list/edit/compontents/ElectronicCase/index.vue
@@ -1,8 +1,9 @@
 <script setup lang="ts">
 import { reactive, ref } from "vue";
 import AddCase from "./AddCase.vue";
-
+import SelectPeople from "./SelectPeople.vue";
 const AddCaseRef = ref();
+const SelectPeopleRef = ref();
 const formData = reactive({
   patientGender: "",
   directoryDesc: "",
@@ -18,6 +19,9 @@ const rules = {
 const add = () => {
   AddCaseRef.value.open();
 };
+const openPeopleDialog = () => {
+  SelectPeopleRef.value.open();
+};
 </script>
 <template>
   <div class="ElectronicCase">
@@ -32,10 +36,11 @@ const add = () => {
       </div>
     </div>
     <el-form
+      style="padding-right: 40px"
       ref="ruleFormRef"
       :model="formData"
       :rules="rules"
-      label-width="80px"
+      label-width="100px"
     >
       <el-row>
         <el-col :span="8">
@@ -45,7 +50,9 @@ const add = () => {
         </el-col>
         <el-col :span="8">
           <el-form-item label="虚拟人" prop="patientGender">
-            <el-button type="primary" link> 请选择数字人 </el-button>
+            <el-button @click="openPeopleDialog" type="primary" link>
+              请选择数字人
+            </el-button>
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -98,14 +105,204 @@ const add = () => {
           </el-form-item>
         </el-col>
       </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="婚姻状态" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="籍贯" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="职业" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="出生地" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="电话" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="邮编" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="现住地" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="长期居住地" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="民族" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="初步诊断" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="主诉" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">
+        主诉多于一项时,应按发生的时间次序排列,持续时间上一般从长到短排列。
+      </div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="现病史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">
+        可记录起病情况,主要症状、特点及演变情况,诊治情况,发病后的一般情况。
+      </div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="过敏史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">可记录药物或食物过敏史,默认“没有过敏反应”</div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="个人史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">可记录药物或食物过敏史,默认“没有过敏反应”</div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="家族史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">可记录家族遗传病情况,默认“没有家族遗传病”</div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="既往史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">可记录历史慢性疾病和长期服药情况</div>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="手术史" prop="directoryDesc">
+            <el-input
+              size="large"
+              placeholder="请输入"
+              v-model="formData.directoryDesc"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="desc">可记录历史手术情况</div>
     </el-form>
     <AddCase ref="AddCaseRef" />
+    <SelectPeople ref="SelectPeopleRef" />
   </div>
 </template>
 <style lang="scss" scoped>
 .ElectronicCase {
   flex: 1;
-
+  :deep(.el-form-item__label) {
+    font-weight: 400;
+    color: #333;
+  }
   .header {
     display: flex;
     align-items: center;
@@ -125,5 +322,12 @@ const add = () => {
       }
     }
   }
+  .desc {
+    font-weight: 400;
+    font-size: 12px;
+    color: #a0a0a0;
+    padding-left: 100px;
+    margin-bottom: 24px;
+  }
 }
 </style>
diff --git a/src/views/caseManagement/list/edit/index.vue b/src/views/caseManagement/list/edit/index.vue
index bf44147..4941beb 100644
--- a/src/views/caseManagement/list/edit/index.vue
+++ b/src/views/caseManagement/list/edit/index.vue
@@ -1,5 +1,8 @@
 <script setup lang="ts">
 import ElectronicCase from "./compontents/ElectronicCase/index.vue";
+import ClinicalConsultation from "./compontents/ClinicalConsultation/index.vue";
+import ClinicalDiagnosis from "./compontents/ClinicalDiagnosis/index.vue";
+import DiagnosticBasis from "./compontents/DiagnosticBasis/index.vue";
 import { ref } from "vue";
 const activedIndex = ref(0);
 const navList = ref([
@@ -19,6 +22,9 @@ const navList = ref([
     name: "处置计划"
   }
 ]);
+const changeType = val => {
+  activedIndex.value = val;
+};
 </script>
 
 <template>
@@ -29,19 +35,23 @@ const navList = ref([
         :class="[activedIndex === index ? 'actived' : '']"
         v-for="(item, index) in navList"
         :key="index"
+        @click="changeType(index)"
       >
         <div class="line" />
         <span>{{ item.name }}</span>
       </div>
     </div>
     <ElectronicCase v-if="activedIndex === 0" />
+    <ClinicalConsultation v-if="activedIndex === 1" />
+    <ClinicalDiagnosis v-if="activedIndex === 2" />
+    <DiagnosticBasis v-if="activedIndex === 3" />
   </div>
 </template>
 <style lang="scss" scoped>
 .editCase {
   display: flex;
   flex-direction: row !important;
-  width: 100%;
+
   padding: 0;
 
   .editCase_nav {