Преглед на файлове

修复重复保存问题

xiaochan преди 9 месеца
родител
ревизия
a891bdf873

+ 31 - 1
src/components/cy/CyDialog/CyDialogContainer.vue

@@ -1,10 +1,40 @@
+<script setup lang="tsx">
+import { dialogKeyType } from "@/components/cy/CyDialog/index";
+import { useSlots } from "vue";
+import { ElButton } from "element-plus";
+
+const root = inject(dialogKeyType);
+const hasFooter = useSlots().footer;
+const emits = defineEmits(["cancel", "confirm"]);
+
+onMounted(() => {
+  root.showFooter = false;
+});
+</script>
+
 <template>
   <div class="layout_container">
     <div class="layout_main">
       <slot name="default" />
     </div>
     <div class="cy_dialog-container-footer">
-      <slot name="footer" />
+      <el-config-provider size="default">
+        <slot name="footer" v-if="hasFooter" />
+        <template v-else>
+          <el-button v-if="root.showCancel" @click="emits('cancel')">
+            {{ root.cancelText || "取消" }}
+          </el-button>
+
+          <el-button
+            v-if="root.showConfirm"
+            type="primary"
+            color="hsl(240 5.9% 10%)"
+            @click="emits('confirm')"
+          >
+            {{ root.confirmText || "确认" }}
+          </el-button>
+        </template>
+      </el-config-provider>
     </div>
   </div>
 </template>

+ 2 - 0
src/components/cy/CyDialog/index.ts

@@ -120,3 +120,5 @@ export function useDialog<R = any, C = Component>(
     }
   });
 }
+
+export const dialogKeyType: InjectionKey<DialogState> = Symbol("cyDialog");

+ 28 - 15
src/components/cy/CyDialog/index.vue

@@ -1,9 +1,9 @@
-<script setup lang="ts">
-import { DialogState, dialogStore } from "./index";
+<script setup lang="tsx">
+import { dialogKeyType, DialogState, dialogStore } from "./index";
 import { ElButton } from "element-plus";
 import XEUtils from "xe-utils";
 import sleep from "@/utils/sleep";
-import { nextTick } from "vue";
+import { nextTick, renderSlot } from "vue";
 
 function next(item: DialogState, data: any) {
   if (item.closeValue === "confirm") {
@@ -52,29 +52,42 @@ async function closed(item: DialogState, index: number) {
 function setRef(el, item) {
   item.componentRef = el;
 }
+
+const ConfigProvider = defineComponent({
+  props: {
+    item: Object,
+  },
+  setup(props, { slots }) {
+    provide(dialogKeyType, props.item);
+    return () => renderSlot(slots, "default");
+  },
+});
 </script>
 
 <template>
   <el-dialog
     v-for="(item, index) in dialogStore"
     :key="`Cy-dialog_${item.dialogKey}`"
+    :style="{ '--el-dialog-border-radius': '14px' }"
     v-model="item.visible"
     draggable
     v-bind="item.dialogProps"
     @closed="closed(item, index)"
   >
-    <component
-      :is="item.component"
-      :ref="el => setRef(el, item)"
-      v-bind="item.params"
-      @cyDialogCancel="
-        (value: any, isEmits = true) => handleCancel(item, isEmits, value)
-      "
-      @cyDialogConfirm="
-        (value: any, isEmits = true) => handleConfirm(item, isEmits, value)
-      "
-      :cyDialog="item"
-    />
+    <ConfigProvider :item="item">
+      <component
+        :is="item.component"
+        :ref="el => setRef(el, item)"
+        v-bind="item.params"
+        @cyDialogCancel="
+          (value: any, isEmits = true) => handleCancel(item, isEmits, value)
+        "
+        @cyDialogConfirm="
+          (value: any, isEmits = true) => handleConfirm(item, isEmits, value)
+        "
+        :cyDialog="item"
+      />
+    </ConfigProvider>
     <template #footer v-if="item.showFooter">
       <el-button
         size="default"

+ 25 - 23
src/utils/mitt.ts

@@ -1,32 +1,34 @@
 class EventBus<T extends Record<string, (...args: any[]) => any>> {
-    emits: Map<keyof T, T[keyof T]> = new Map<keyof T, T[keyof T]>();
+  emits: Map<keyof T, T[keyof T]> = new Map<keyof T, T[keyof T]>();
 
-    on<K extends keyof T>(name: K, callback: T[K]): void {
-        this.emits.set(name, callback);
-    }
+  on<K extends keyof T>(name: K, callback: T[K]): void {
+    this.emits.set(name, callback);
+  }
 
-    off<K extends keyof T>(name: K): void {
-        this.emits.delete(name);
-    }
+  off<K extends keyof T>(name: K): void {
+    this.emits.delete(name);
+  }
 
-    exists<K extends keyof T>(name: K): boolean {
-        return this.emits.has(name);
-    }
+  exists<K extends keyof T>(name: K): boolean {
+    return this.emits.has(name);
+  }
 
-    emit<K extends keyof T>(name: K, ...args: Parameters<T[K]>): ReturnType<T[K]> | null {
-        if (this.emits.has(name)) {
-            const cb = this.emits.get(name);
-            let result = null;
-            try {
-                result = cb!(...args);
-            } catch {
-            }
-            return result;
-        }
-        return null;
+  emit<K extends keyof T>(
+    name: K,
+    ...args: Parameters<T[K]>
+  ): ReturnType<T[K]> | null {
+    if (this.emits.has(name)) {
+      const cb = this.emits.get(name);
+      let result = null;
+      try {
+        result = cb!(...args);
+      } catch (e) {
+        console.error(e);
+      }
+      return result;
     }
+    return null;
+  }
 }
 
 export default EventBus;
-
-

+ 3 - 14
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue

@@ -316,11 +316,6 @@ const currentEditorUser = ref<{
   code: string;
 }>({ code: "", deptName: "", name: "" });
 
-const foldBothSides = ref({
-  isLeft: true,
-  isRight: true,
-});
-
 let emrCodeEnum = {
   // 病程记录
   courseRecord: "shoucibingchengjilu",
@@ -766,8 +761,6 @@ const clickSaveData = async () => {
       document.properties.createTime = newDate;
     }
 
-    console.log(data);
-
     insertEmrData(data)
       .then(res => {
         replaceDataElement(res);
@@ -788,7 +781,9 @@ async function saveSuccessFunc() {
   await emrSidebarRef.value!.queryData();
   // 如果是第一次创建就需要跳转
   if (XEUtils.isEmpty(emrStore.store.emrPatientData)) {
-    emrMitt.emit("loadByDocumentId", getId());
+    const id = getId();
+    emptyEditor();
+    emrMitt.emit("loadByDocumentId", id);
   }
   xcMessage.success("保存成功");
 }
@@ -1707,11 +1702,6 @@ onBeforeRouteLeave(async (to, from, next) => {
   next();
 });
 
-const closeBothSides = () => {
-  foldBothSides.value.isLeft = false;
-  foldBothSides.value.isRight = false;
-};
-
 const closeWebSocket = () => {
   emrSocketRef.value!.clearDocument();
   emrSocketRef.value!.clearSocket();
@@ -1897,7 +1887,6 @@ function selectFill() {
 }
 
 defineExpose({
-  closeBothSides,
   closeWebSocket,
   changeClear,
 });

+ 1 - 13
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrSidebar.tsx

@@ -270,21 +270,9 @@ const EmrSidebar = defineComponent({
       });
     };
 
-    function find(list: any[], id: string) {
-      for (let i = 0; i < list.length; i++) {
-        const item = list[i];
-        if (item?.emrDocumentId === id) {
-          return item;
-        }
-        if (item.children) {
-          return find(item.children, id);
-        }
-      }
-    }
-
     function loadByDocumentId(id: string) {
       const findData = XEUtils.findTree(returnData.value.patientTree, item => {
-        return item?.emrDocumentId === id;
+        return item.emrDocumentId === id;
       });
       if (findData.item) {
         saveEmr(findData.item);