浏览代码

报表查询中心

xiaochan 1 年之前
父节点
当前提交
63b0b18726

+ 11 - 4
src/views/data-base/page-editor-help-v2/components/page-editor-v2/CodeEditor.vue

@@ -85,18 +85,25 @@ let simulatedParametersEditor;
 
 const debuggingClick = () => {
   const func = new Function('pageJson', 'currentBind', 'apiFunc', 'val', 'userInfo', monacoEditor.getValue())
-  const param = JSON.parse(simulatedParametersEditor.getValue());
+  const param = JSON.parse(simulatedParametersEditor.getValue()) as { val: any };
   const p = XEUtils.clone(props.pageJson, true)
   const c = XEUtils.clone(props.currentBind, true);
   const u = XEUtils.clone(userInfoStore.value, true)
   const paramList = []
-  if (param.val) {
+  if (XEUtils.isString(param.val) || XEUtils.isBoolean(param.val)) {
+    paramList.push(param.val)
+  } else if (param.val) {
     for (const valKey in param.val) {
       paramList.push(param.val[valKey])
     }
   }
+
+  if (paramList.length === 0) {
+    paramList.push(0)
+  }
+  console.log(paramList)
   try {
-    func(p, c, reportQueryCenterApi, paramList.length > 0 ? paramList : param.val, u)
+    func(p, c, reportQueryCenterApi, paramList, u)
   } catch (e) {
     xcMessage.error('执行失败,请检查代码', e)
   }
@@ -123,7 +130,7 @@ onMounted(async () => {
   });
   simulatedParametersEditor = monaco.editor.create(simulatedParametersDiv.value, {
     value: `{
-  "val" : false
+  "val" : "11"
 }`,
     language: 'json',
     theme: 'vs-dark', // 官方自带三种主题vs, hc-black, or vs-dark

+ 8 - 4
src/views/data-base/page-editor-help-v2/components/page-editor-v2/PageFormBind.vue

@@ -1,9 +1,13 @@
 <script setup lang="ts">
-import {capitalizeFirstLetter, ComponentBind} from "@/views/data-base/page-editor-help-v2/page-help-v2";
+import {
+  capitalizeFirstLetter,
+  ComponentBind,
+  ElAndXc,
+  PageStore
+} from "@/views/data-base/page-editor-help-v2/page-help-v2";
 import {ref, h, nextTick, onMounted, reactive} from "vue";
 import {ElOption, ElSelect, ElSwitch, ElInput, ElInputNumber, ElDivider} from "element-plus";
 import {PageHeader, PageJsonObject} from "@/api/reports/report-query-center";
-import * as ElementPlus from "element-plus";
 import * as vue from "vue";
 import CodeEditor from "@/views/data-base/page-editor-help-v2/components/page-editor-v2/CodeEditor.vue";
 
@@ -14,7 +18,7 @@ const props = defineProps<{
   teleportDiv: any;
   data: PageJsonObject,
   compBind: any,
-  store: any
+  store: PageStore
 }>()
 
 const emits = defineEmits(['refresh', 'requiredChange'])
@@ -62,7 +66,7 @@ async function changeCurrentBind(item) {
 
 function renderHelp() {
   const func = new Function("pageJson", "currentBind", "el", "vue", renderRef.value)
-  return func(props.data, currentItem.value, ElementPlus, vue)
+  return func(props.data, currentItem.value, ElAndXc, vue)
 }
 
 function onFuncHelp() {

+ 8 - 25
src/views/data-base/page-editor-help-v2/components/page-editor-v2/PageHelpOtherConfigurations.vue

@@ -1,25 +1,14 @@
 <script setup lang="ts">
 import {copyStrFunc} from "@/utils/public";
-import {useVModel} from '@vueuse/core'
-import {PageHeader} from "@/api/reports/report-query-center";
-import XEUtils from "xe-utils";
-import {pageHelpV2Mitt} from "@/views/data-base/page-editor-help-v2/page-help-v2";
-import {saveTheFile} from "@/api/base-data/report-center";
+import {PageStore} from "@/views/data-base/page-editor-help-v2/page-help-v2";
 
 const props = defineProps<{
   teleportDiv: any,
-  submitUrl: string,
-  tableData: any[],
-  pageHeader: PageHeader[],
-  data: any
+  store: PageStore
 }>()
 
-const emits = defineEmits(["update:submitUrl"])
-
-const submitUrl = useVModel(props, 'submitUrl', emits)
-
 function generateTableColumns() {
-  const tempData = props.tableData
+  const tempData = props.store.tableBind.value.data
   if (tempData.length === 0) {
     return
   }
@@ -31,7 +20,6 @@ function generateTableColumns() {
       title: key,
       dataKey: key,
       width: 220,
-      minWidth: '40%'
     })
   }
   copyStrFunc(columns)
@@ -39,29 +27,24 @@ function generateTableColumns() {
 
 function generateQuery() {
   let str = "";
-  props.pageHeader.forEach((item, index) => {
-    str += `\t${item.key}${(index !== props.pageHeader.length - 1 ? "," : "")}\n`
+  const length = props.store.pageData.value.header.length
+  props.store.pageData.value.header.forEach((item, index) => {
+    str += `\t${item.key}${(index !== length - 1 ? "," : "")}\n`
   })
   str = `const {\n${str}} = body`
   copyStrFunc(str)
 }
 
 function saveData() {
-  const clone = XEUtils.clone(props.data, true)
-  clone.params = {}
-  const str = JSON.stringify(clone)
-  const data = pageHelpV2Mitt.emit('getCurrentPageData')
-  data.pageJson = str
-  saveTheFile(data)
+  props.store.handleSavaData()
 }
-
 </script>
 
 <template>
   <teleport :to="props.teleportDiv">
     <el-form>
       <el-form-item label="提交地址:">
-        <el-input type="textarea" v-model="submitUrl"/>
+        <el-input type="textarea" v-model="props.store.pageData.value.submitUrl"/>
       </el-form-item>
       <el-form-item label=" ">
         <el-button @click="generateQuery">生成查询</el-button>

+ 29 - 14
src/views/data-base/page-editor-help-v2/components/page-editor-v2/PageHelpV2.vue

@@ -1,7 +1,6 @@
 <script setup lang="ts">
-import {h, nextTick, ref, getCurrentInstance} from "vue";
+import {h, nextTick, ref, getCurrentInstance, onActivated, watch, onUnmounted} from "vue";
 import * as vue from 'vue'
-import * as ElementPlus from 'element-plus'
 import {PageHeader, PageJsonObject} from "@/api/reports/report-query-center";
 import {useCompRef} from "@/utils/useCompRef";
 import {ElButton, ElForm, ElOption} from "element-plus";
@@ -18,8 +17,9 @@ import PageHelpOtherConfigurations
 import {getWindowSize} from "@/utils/window-size";
 import {ExcelName, Export} from '@/utils/ExportExcel'
 import {userInfoStore} from "@/utils/store-public";
-import {capitalizeFirstLetter, usePageStore} from "@/views/data-base/page-editor-help-v2/page-help-v2";
+import {capitalizeFirstLetter, usePageStore , ElAndXc} from "@/views/data-base/page-editor-help-v2/page-help-v2";
 import {generateRandomString} from "@/utils/getUuid";
+import {shortcutTrigger, xcEvent} from "@/utils/xckeydown";
 
 interface Props {
   componentAttribute?: any
@@ -49,7 +49,7 @@ const store = usePageStore()
 //@ts-ignore
 pageHelp.store = store
 
-const {currentClickIndex, pageData, clearOnAndFunc} = store
+const {currentClickIndex, pageData, clearOnAndFunc, tableBind, handleSavaData} = store
 
 
 const formRef = useCompRef(ElForm)
@@ -100,7 +100,7 @@ const render = (item: PageHeader) => {
     }
   }
 
-  return h(ElementPlus[item.name], tempProps, () => child)
+  return h(ElAndXc[item.name], tempProps, () => child)
 }
 
 const isActive = (index) => {
@@ -171,10 +171,6 @@ function initTable() {
   }
 }
 
-const tableBind = ref({
-  data: [],
-  columns: []
-})
 const dialogTableData = ref({
   data: [],
   columns: []
@@ -290,7 +286,7 @@ function handelColumnFunc(data) {
     }
     for (let key in item.func) {
       const newFunc = new Function("row", "pageData", "apiFunc", "el", "vue", "openDialogAndSetData", item.func[key])
-      item[key] = (row) => newFunc(row, pageData.value, reportQueryCenterApi, ElementPlus, vue, openDialogAndSetData)
+      item[key] = (row) => newFunc(row, pageData.value, reportQueryCenterApi, ElAndXc, vue, openDialogAndSetData)
     }
   })
 }
@@ -352,6 +348,24 @@ function exportExcel(data: {
   }
 }
 
+let shortcutKeyRegistration = {
+  ctrl: {s: handleSavaData}
+}
+
+let keyWatch = null
+
+onUnmounted(() => {
+  keyWatch && keyWatch()
+})
+
+onActivated(() => {
+  if (props.addComponent) {
+    keyWatch = watch(() => xcEvent.value, () => {
+      shortcutTrigger(xcEvent.value, shortcutKeyRegistration)
+    })
+  }
+})
+
 defineExpose({
   setPageData,
   setTableData,
@@ -410,6 +424,8 @@ defineExpose({
       </div>
       <div class="cy-page_help_v2-main" v-loading="loading">
         <el-table-v2 v-bind="tableBind"
+                     :h-scrollbar-size="10"
+                     :v-scrollbar-size="10"
                      :height="height - headerHeight"
                      :width="width"/>
       </div>
@@ -420,6 +436,8 @@ defineExpose({
     <cy-auto-size>
       <template #default="{width}">
         <el-table-v2 v-bind="dialogTableData"
+                     :h-scrollbar-size="12"
+                     :v-scrollbar-size="12"
                      :height="getWindowSize.h - 500"
                      :width="width - 10"/>
       </template>
@@ -445,10 +463,7 @@ defineExpose({
                     v-if="props.addComponent"/>
 
   <PageHelpOtherConfigurations v-if="props.otherConfigurations"
-                               :data="pageData"
-                               :table-data="tableBind.data"
-                               :pageHeader="pageData.header"
-                               v-model:submitUrl="pageData.submitUrl"
+                               :store="store"
                                :teleport-div="props.otherConfigurations"/>
 
 </template>

+ 44 - 5
src/views/data-base/page-editor-help-v2/page-help-v2.ts

@@ -1,10 +1,16 @@
 import Mitt from "../../../utils/mitt";
 import {PageHeader, PageJsonObject, ReportForms} from "../../../api/reports/report-query-center";
-import {getCurrentInstance, ref} from 'vue'
+import {ref} from 'vue'
 import XEUtils from "xe-utils";
-import {userInfoStore} from "../../../utils/store-public";
-import {generateRandomString} from "../../../utils/getUuid";
-import {reportQueryCenterApi} from "../../../api/base-data/report-center";
+import {saveTheFile} from "../../../api/base-data/report-center";
+import * as ElementPlus from "element-plus";
+import XcComboGridV2 from "../../../components/xiao-chan/combo-grid/XcComboGridV2.vue";
+
+export const ElAndXc = {
+    ...ElementPlus,
+    XcComboGridV2: XcComboGridV2
+}
+
 
 export const createFile = () => {
     const data: PageJsonObject = {
@@ -61,6 +67,12 @@ export function usePageStore() {
         }
     })
 
+
+    const tableBind = ref({
+        data: [],
+        columns: []
+    })
+
     function clearOnAndFunc() {
         XEUtils.arrayEach(pageData.value.header, (item: PageHeader) => {
             if (item.on) {
@@ -77,9 +89,36 @@ export function usePageStore() {
         })
     }
 
+    function handleSavaData() {
+        const clone = XEUtils.clone(pageData.value, true)
+        clone.params = {}
+        clone.header.forEach(item => {
+            if (item.name === 'ElSelectV2') {
+                item.bind.options = []
+            }
+        })
+        const data = pageHelpV2Mitt.emit('getCurrentPageData')
+        data.pageJson = JSON.stringify(clone)
+        saveTheFile(data).then(r => {
+        })
+    }
+
+
+    const mutation = {}
+
     return {
         currentClickIndex,
         pageData,
-        clearOnAndFunc
+        clearOnAndFunc,
+        handleSavaData,
+        tableBind,
+        mutation
     }
 }
+
+class HelperStore {
+    Return = usePageStore()
+}
+
+type PageStore = HelperStore['Return']
+export type {PageStore}