fanfan 2 yıl önce
ebeveyn
işleme
748ca2ff52

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
     "@ant-design/icons-vue": "^6.1.0",
     "@codemirror/commands": "^6.2.2",
     "@codemirror/lang-java": "^6.0.1",
+    "@codemirror/lang-javascript": "^6.1.4",
     "@codemirror/lang-json": "^6.0.1",
     "@codemirror/state": "^6.2.0",
     "@codemirror/view": "^6.9.2",

+ 21 - 0
pnpm-lock.yaml

@@ -4,6 +4,7 @@ specifiers:
   '@ant-design/icons-vue': ^6.1.0
   '@codemirror/commands': ^6.2.2
   '@codemirror/lang-java': ^6.0.1
+  '@codemirror/lang-javascript': ^6.1.4
   '@codemirror/lang-json': ^6.0.1
   '@codemirror/state': ^6.2.0
   '@codemirror/view': ^6.9.2
@@ -102,6 +103,7 @@ dependencies:
   '@ant-design/icons-vue': 6.1.0_vue@3.2.47
   '@codemirror/commands': 6.2.2
   '@codemirror/lang-java': 6.0.1
+  '@codemirror/lang-javascript': 6.1.4
   '@codemirror/lang-json': 6.0.1
   '@codemirror/state': 6.2.0
   '@codemirror/view': 6.9.2
@@ -1452,6 +1454,18 @@ packages:
       '@lezer/java': 1.0.3
     dev: false
 
+  /@codemirror/lang-javascript/6.1.4:
+    resolution: {integrity: sha512-OxLf7OfOZBTMRMi6BO/F72MNGmgOd9B0vetOLvHsDACFXayBzW8fm8aWnDM0yuy68wTK03MBf4HbjSBNRG5q7A==}
+    dependencies:
+      '@codemirror/autocomplete': 6.4.2_nhpyweho5i63az4d4hsuvsa7gy
+      '@codemirror/language': 6.6.0
+      '@codemirror/lint': 6.2.0
+      '@codemirror/state': 6.2.0
+      '@codemirror/view': 6.9.2
+      '@lezer/common': 1.0.2
+      '@lezer/javascript': 1.4.1
+    dev: false
+
   /@codemirror/lang-json/6.0.1:
     resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
     dependencies:
@@ -2008,6 +2022,13 @@ packages:
       '@lezer/lr': 1.3.3
     dev: false
 
+  /@lezer/javascript/1.4.1:
+    resolution: {integrity: sha512-Hqx36DJeYhKtdpc7wBYPR0XF56ZzIp0IkMO/zNNj80xcaFOV4Oj/P7TQc/8k2TxNhzl7tV5tXS8ZOCPbT4L3nA==}
+    dependencies:
+      '@lezer/highlight': 1.1.3
+      '@lezer/lr': 1.3.3
+    dev: false
+
   /@lezer/json/1.0.0:
     resolution: {integrity: sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw==}
     dependencies:

+ 3 - 0
src/components/CodeEditor/src/CodeEditor.vue

@@ -32,6 +32,9 @@
 
   const getValue = computed(() => {
     const { value, mode, autoFormat } = props;
+    if (value == '[object Object]') {
+      return;
+    }
     if (!autoFormat || mode !== MODE.JSON) {
       return value as string;
     }

+ 5 - 7
src/components/CodeEditor/src/codemirror/CodeMirror.vue

@@ -3,15 +3,14 @@
 </template>
 
 <script lang="ts" setup>
-  import { ref, onMounted, onUnmounted, watchEffect, watch, unref, nextTick } from 'vue';
+  import { ref, onMounted, onUnmounted, watchEffect, watch, nextTick } from 'vue';
   import { useDebounceFn } from '@vueuse/core';
-  import { useAppStore } from '/@/store/modules/app';
   import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
 
   import { basicSetup, EditorView } from 'codemirror';
   import { EditorState, Compartment } from '@codemirror/state';
-  import { json } from '@codemirror/lang-json';
   import { java } from '@codemirror/lang-java';
+  import { javascript } from '@codemirror/lang-javascript';
 
   const props = defineProps({
     mode: {
@@ -29,17 +28,16 @@
   let timer;
 
   const debounceRefresh = useDebounceFn(refresh, 100);
-  // const appStore = useAppStore();
 
   watch(
     () => props.value,
     async value => {
       await nextTick();
       const oldValue = editor?.state.doc.toString();
-      if (value !== oldValue) {
+      if (value !== oldValue && value != '[object Object]') {
         // editor?.setValue(value ? value : '');
         editor.dispatch({
-          changes: { from: 0, insert: props.value },
+          changes: { from: 0, insert: value },
         });
       }
     },
@@ -78,7 +76,7 @@
       doc: '',
       extensions: [
         basicSetup,
-        language.of(props.mode == 'javascript' ? json() : java()),
+        language.of(props.mode == 'javascript' ? javascript() : java()),
         tabSize.of(EditorState.tabSize.of(4)),
         EditorView.updateListener.of(v => {
           if (v.docChanged) {

+ 1 - 0
src/components/CodeEditor/src/typing.ts

@@ -2,4 +2,5 @@ export enum MODE {
   JSON = 'application/json',
   HTML = 'htmlmixed',
   JS = 'javascript',
+  JAVA = 'java',
 }

+ 5 - 0
src/components/registerGlobComp.ts

@@ -1,8 +1,13 @@
 import type { App } from 'vue';
 import { Button } from './Button';
 import Antd from 'ant-design-vue';
+import useWebSocketFn from '/@/hooks/web/useWebsocket';
 // import VXETable from './VxeTable/index';
+
 export function registerGlobComp(app: App) {
   app.use(Antd).use(Button);
   // app.use(VXETable);
+
+  // 设置全局 websocket
+  app.provide('useWebSocketFn', useWebSocketFn());
 }

+ 1 - 0
src/logics/initAppConfig.ts

@@ -56,6 +56,7 @@ export function initAppConfigStore() {
     headerBgColor && updateHeaderBgColor(headerBgColor);
     bgColor && updateSidebarBgColor(bgColor);
   }
+
   // init store
   setTimeout(() => {
     clearObsoleteStorage();

+ 0 - 2
src/main.ts

@@ -47,8 +47,6 @@ async function bootstrap() {
   // https://next.router.vuejs.org/api/#isready
   // await router.isReady();
 
-  app.provide('useWebSocketFn', useWebSocketFn());
-
   app.mount('#app');
 }
 

+ 2 - 5
src/views/sys/sysGen/PreviewModal.vue

@@ -49,14 +49,11 @@
       if (nameData.length == 3) {
         mode = nameData[1];
       }
-      if (mode == 'js') {
+      if (mode == 'js' || mode == 'ts' || mode == 'vue') {
         mode = 'javascript';
       }
-      if (mode == 'ts') {
-        mode = 'text/typescript';
-      }
       if (mode == 'java') {
-        mode = 'text/x-java';
+        mode = 'java';
       }
       codeTypeData.value.push({
         key,

+ 13 - 1
src/views/sys/sysPrint/index.vue

@@ -251,7 +251,19 @@
   const exportJsonTid = () => {
     const json = hiprintTemplate.getJsonTid();
     console.log(json);
-    alert('导出成功! 请查看控制台输出');
+    const html = hiprintTemplate.getHtml(printData);
+    const createDiv = document.createElement('div');
+    createDiv.setAttribute('class', 'hidden-print-div hidden');
+    document.body.appendChild(createDiv);
+    setTimeout(() => {
+      const container = document.querySelector('.hidden-print-div');
+      container.innerHTML = '';
+      container.innerHTML = html[0].innerHTML;
+      const len = document.querySelectorAll('.hidden-print-div .hiprint-printPaper').length;
+      console.log('🚀 ~ file: index.vue:115 ~ exportJson ~ len:', len);
+      console.info(`共有${len}页`);
+      alert(`导出成功! 请查看控制台输出共有${len}页`);
+    }, 10);
   };
 </script>
 

+ 1 - 0
vite.config.ts

@@ -120,6 +120,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
         '@ant-design/icons-vue',
         '@vue/runtime-core',
         '@vue/shared',
+        '@codemirror/lang-javascript',
         '@codemirror/lang-java',
         '@codemirror/lang-json',
         'codemirror',