Browse Source

电子病历中的缺陷数为 0 的就不显示

xiaochan 2 years ago
parent
commit
3187f291ec

+ 18 - 12
src/components/query-components/XcPageTable.vue

@@ -1,34 +1,40 @@
 <script setup lang="ts">
-import {defineProps, computed} from 'vue'
+import {defineProps, computed, defineEmits, onMounted} from 'vue'
 import {componentType} from "./page-help-type";
 import {useVModels} from "@vueuse/core";
 import {ElPagination} from "element-plus";
 
 const props = defineProps<{
-  testJson: componentType,
+  pageJson: componentType,
 }>()
 
-const emits = defineEmits(['update:testJson'])
+const emits = defineEmits(['update:pageJson'])
 const vModels = useVModels(props, emits)
 
-const dataTemp = computed(() => {
-  let {currentPage, pageSize} = vModels.testJson.value.pageConfig
-  return vModels.testJson.value.tableConfig.data.slice(
-      (currentPage - 1) * pageSize, currentPage * pageSize
-  );
-})
+const onCurrentChange = async (val) => {
+  await vModels.pageJson.value.submitClickFunc();
+  vModels.pageJson.value.pageConfig.currentPage = val;
+}
 
+const onSizeChange = async (val) => {
+  await vModels.pageJson.value.submitClickFunc();
+  vModels.pageJson.value.pageConfig.pageSize = val;
+}
 
 </script>
 
 <template>
-  <el-table v-bind="vModels.testJson.value.tableConfig" :data="dataTemp">
-    <el-table-column v-for="item in vModels.testJson.value.tableConfig.columns"
+  <el-table v-bind="vModels.pageJson.value.tableConfig"
+            :data="vModels.pageJson.value.tableConfig.data">
+    <el-table-column v-for="item in vModels.pageJson.value.tableConfig.columns"
                      v-bind="item">
       <Component :is="item.render(item)" v-if="item.render"/>
     </el-table-column>
   </el-table>
-  <el-pagination v-bind="vModels.testJson.value.pageConfig"/>
+  <el-pagination v-bind="vModels.pageJson.value.pageConfig"
+                 @current-change="onCurrentChange"
+                 @size-change="onSizeChange"
+  />
 </template>
 
 <style scoped lang="scss">

+ 105 - 22
src/components/query-components/XcQuery.vue

@@ -8,17 +8,17 @@
          @click="itemClick(value,key)"
          :class="formItemClass(key)">
       <div v-if="props.currentIndex === key" class="tool">
-        <div class="tool_item" @click="upClick(key)">
+        <div class="tool_item" @click.stop="upClick(key)">
           <el-icon>
             <ArrowLeft/>
           </el-icon>
         </div>
-        <div class="tool_item" @click="downClick(key)">
+        <div class="tool_item" @click.stop="downClick(key)">
           <el-icon>
             <ArrowRight/>
           </el-icon>
         </div>
-        <div class="tool_item" @click="delClick(key)">
+        <div class="tool_item" @click.stop="delClick(key)">
           <el-icon>
             <DeleteFilled/>
           </el-icon>
@@ -51,13 +51,15 @@
 <script setup lang="ts">
 import * as el from "element-plus";
 import {FormInstance, FormRules} from "element-plus";
-import {nextTick, onMounted, ref, watch} from 'vue'
+import {onMounted, ref, watch} from 'vue'
 import XEUtils from 'xe-utils'
 import {componentType, headerType} from "./page-help-type";
 import {useVModel} from "@vueuse/core";
 import {getFormatDatetime, currentAndAFewDaysAgo, getDateRangeFormatDate} from '../../utils/date'
 import moment from 'moment'
 import axios from "axios";
+import {pageHelpMitt} from "../../components/query-components/page-help";
+import {xcMessage} from "../../utils/xiaochan-element-plus";
 
 const props = defineProps<{
   testJson: componentType,
@@ -68,7 +70,6 @@ const emits = defineEmits([
   'submit',
   'itemClick',
   'update:currentIndex',
-  'delClick'
 ])
 
 const formRef = ref<FormInstance | null>(null)
@@ -82,6 +83,10 @@ let tempQuerySql = ''
 const testJson = useVModel(props, 'testJson', emits)
 const propsCurrentIndex = useVModel(props, 'currentIndex', emits)
 
+/**
+ * @deprecated
+ * @param str 字符串
+ */
 function replaceTheContent(str) {
   if (!str) return
   let one = str[0]
@@ -123,6 +128,10 @@ function replaceTheContent(str) {
   }
 }
 
+/**
+ * @deprecated
+ * @param str 字符串
+ */
 function countIfTags(str) {
   let regex = /<if>([\s\S]*?)<\/if>/g;
   let match = null
@@ -134,30 +143,103 @@ function countIfTags(str) {
   } while (match)
 }
 
-const submit = async () => {
-  await formRef.value.validate()
+/**
+ * 把动态函数 function 前面的 注解删除
+ * @param str 返回新的数据
+ */
+function deleteFunction(str: string) {
+  // 获取 str 中第一个 function 的下标
+  let index = str.indexOf('function')
+  if (index === -1) {
+    return str;
+  }
+  // 获取 str 中 index 后面的字符串
+  return str.substring(index)
+}
 
+function 提取查询数据() {
   let queryData = {}
-
   testJson.value.header.forEach((item) => {
     if (isDateRange(item)) {
-      let {startTime, endTime} = getDateRangeFormatDate(testJson.value.queryParam[item.key])
-      queryData[item.dataRange.startAlias] = startTime
-      queryData[item.dataRange.endAlias] = endTime
+      if (testJson.value.queryParam[item.key]) {
+        let {startTime, endTime} = getDateRangeFormatDate(testJson.value.queryParam[item.key])
+        queryData[item.dataRange.startAlias] = startTime
+        queryData[item.dataRange.endAlias] = endTime
+      }
+    } else {
+      if (XEUtils.isArray(testJson.value.queryParam[item.key]) && item.bind.multiple) {
+        let tempVal = ''
+        let valueLen = testJson.value.queryParam[item.key].length
+        // 如果是一个数组的话我就转化成为 xxx,xxx,xxx 这样的字符串
+        testJson.value.queryParam[item.key].forEach((valueItem, key) => {
+          if (item.keyType === 'string') {
+            tempVal += `'${valueItem}'`
+          } else {
+            tempVal += `${valueItem}`
+          }
+          if (key !== valueLen - 1) {
+            tempVal += ','
+          }
+        })
+        if (item.multipleAlias) {
+          queryData[item.multipleAlias] = tempVal
+        } else {
+          queryData[item.key] = tempVal
+        }
+      } else {
+        queryData[item.key] = testJson.value.queryParam[item.key]
+      }
     }
-    queryData[item.key] = testJson.value.queryParam[item.key]
   })
+  queryData['pageNo'] = testJson.value.pageConfig.currentPage
+  return queryData
+}
 
-  let func = new Function('', 'return ' + testJson.value.submitEvent)
-  func()(queryData, testJson.value, axios)
-  emits('submit', testJson.value.queryParam)
+const submit = async () => {
+  await formRef.value.validate()
+
+  let queryData;
+  queryData = 提取查询数据();
+
+  let axiosConfig = {
+    method: testJson.value.submitQuery.method,
+    url: testJson.value.submitQuery.url,
+  }
+
+  if (axiosConfig.method === 'get') {
+    axiosConfig['params'] = queryData
+  } else {
+    axiosConfig['data'] = queryData
+  }
+  let res = null
+  try {
+    res = await axios(axiosConfig)
+  } catch (e) {
+    console.error(e)
+    xcMessage.error(e)
+    throw  new Error(e)
+  }
+  if (res === null) {
+    throw  new Error('res 为空')
+  }
+  if (eval('res.data.' + testJson.value.submitQuery.returnCodeSuccess)) {
+    testJson.value.tableConfig.data = eval('res.data.' + testJson.value.submitQuery.returnsDataPath)
+    testJson.value.pageConfig.total = eval('res.data.' + testJson.value.submitQuery.totalPath)
+  } else {
+    let errorMsg = eval('res.data.' + testJson.value.submitQuery.errorText)
+    xcMessage.error(errorMsg)
+    throw  new Error(errorMsg)
+  }
+
+  // 动态执行函数,现在暂时不需要
+  // let func = new Function('queryData', 'config', 'axios', 'return ' + deleteFunction(testJson.value.submitEvent))
+  // func()(queryData, testJson.value, axios)
 }
 
 const isDateRange = (item: headerType) => {
   return item.name === 'ElDatePicker' && item.bind.type && item.bind.type === 'daterange'
 }
 
-
 const dataReset = () => {
   headerFor(async (item, key) => {
     if (isDateRange(item)) {
@@ -227,10 +309,9 @@ const downClick = (key) => {
 }
 
 const delClick = async (key) => {
-  await emits('delClick')
-  await nextTick()
-  testJson.value.header.splice(key, 1)
-  propsCurrentIndex.value = -1
+  await pageHelpMitt.emit('setShow', false);
+  testJson.value.header.splice(key, 1);
+  propsCurrentIndex.value = -1;
 }
 
 const initAttribute = () => {
@@ -245,10 +326,10 @@ const initAttribute = () => {
       for (const key in item.bind) {
         if (key.startsWith("_")) {
           let tempKey = key.substring(1);
-          item.bind[tempKey] = async (val) => {
+          item.bind[tempKey] = XEUtils.debounce((val) => {
             let func = new Function('value', 'data', '...val', "return " + item.bind[key])
             func()(item, data, val)
-          }
+          }, 500)
         }
       }
     }
@@ -266,6 +347,7 @@ onMounted(() => {
   dataReset()
   intiRules()
   initAttribute()
+  testJson.value.submitClickFunc = submit
   console.log(el)
 })
 
@@ -288,6 +370,7 @@ onMounted(() => {
   display: flex;
 
   div {
+    margin: 0 1px;
     padding: 0 5px;
     border: 1px solid #0000fa;
     display: flex;

+ 19 - 10
src/components/query-components/page-help-type.ts

@@ -1,12 +1,13 @@
 import {Arrayable} from "element-plus/es/utils";
 import {FormItemRule} from "element-plus/es/tokens/form";
-import {VxeGridListeners, VxeGridProps} from "vxe-table";
+import {Style} from "util";
 
 export interface codeName {
     value: string | number
     label: string
 }
 
+
 export interface networkRequests {
     method: string,
     url: string,
@@ -19,14 +20,13 @@ export interface networkRequests {
     returnsVolumeResolutionDetail?: string
 }
 
+
 export interface headerType {
     key: string,
     // el 组件的名称
     name: string
     bind?: any | {
-        style: {
-            width?: string
-        }
+        style: CSSStyleDeclaration
     },
     // 在 el 的组件中文本值
     text?: string
@@ -44,6 +44,8 @@ export interface headerType {
     networkRequests?: networkRequests
     // 初始化就执行的代码
     init?: string
+    // 多选别名
+    multipleAlias?: string
     // 日期附加信息
     dataRange?: {
         startAlias: string,
@@ -60,16 +62,25 @@ interface formConfig {
     labelSuffix?: string,
 }
 
-interface RowVO {
-    [key: string]: any
-}
-
 export interface componentType {
     header: headerType[]
     queryParam: any,
     formConfig: formConfig,
     // 点击提交时候触发的值
     submitEvent?: string,
+    submitClickFunc?: Function
+    submitQuery: {
+        url: string,
+        method: 'post' | 'get',
+        // 返回体解析
+        returnsDataPath: string;
+        requestInterfaced: '创智中台' | '工作集成平台' | '其他',
+        // 返回成功的信息
+        returnCodeSuccess: string,
+        // 错误提示的消息
+        errorText: string,
+        totalPath: string
+    };
     tableConfig: {
         height?: number,
         data?: any[],
@@ -92,12 +103,10 @@ export interface componentType {
         total: number,
         layout: string
         pageSizes: number[]
-        onSizeChange: Function,
         pagerCount: 5
     }
 }
 
-
 export interface bindType {
     label: string,
     selectData?: any[],

+ 12 - 3
src/components/query-components/page-help.ts

@@ -1,5 +1,5 @@
-import {componentType, elComponentType, headerType} from "./page-help-type";
-import axios from "axios";
+import {elComponentType, headerType} from "./page-help-type";
+import Mitt from "../../utils/mitt";
 
 export const collapseData: {
     title: string,
@@ -64,11 +64,12 @@ export const collapseData: {
                 required: false,
                 bind: {
                     style: {
-                        width: null
+                        width: '220px'
                     },
                     loading: false,
                     options: [],
                     remote: true,
+                    multiple: false,
                     filterable: true,
                     _remoteMethod: async function (currentValue, data, ...val) {
                         let {pageJson, axios} = data
@@ -273,3 +274,11 @@ export function generateRandomString(length): string {
     }
     return result;
 }
+
+export const pageHelpMitt = new Mitt()
+
+export const interFaced = {
+    创智中台: 'data.rows',
+    工作集成平台: 'data.data',
+    其他: ''
+}

+ 3 - 4
src/views/emr-manage/EmrSuggestion.vue

@@ -42,11 +42,10 @@
                          :value="item.code"/>
             </el-select>
             <span v-else>
-                            {{ getScoringCriteriaName(row.scoringCriteria) }}
-                        </span>
+            {{ getScoringCriteriaName(row.scoringCriteria) }}
+            </span>
           </template>
         </el-table-column>
-
         <el-table-column>
           <template #header>
             <el-button text type="primary" @click="newClick">新增</el-button>
@@ -63,7 +62,7 @@
   </page-layer>
 </template>
 
-<script setup name='EmrSuggestion'>
+<script setup>
 import {addTo, deleteById, getLinkQuality, getLinkSelect, revise} from "@/api/emr/emr-suggestion";
 import PageLayer from "@/layout/PageLayer.vue";
 import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";

+ 1 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/Home.vue

@@ -22,6 +22,7 @@
     </el-main>
   </el-container>
 
+  <!-- 电子病历质控 -->
   <emr-control-rule/>
 
 </template>

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrAudit.vue

@@ -88,7 +88,7 @@
       <template #default="{row}" v-if="permissions()">
         <el-input-number style="width: 40px"
                          v-model="row.numberOfDefects"
-                         :min="1"
+                         :min="0"
                          :controls="false"/>
       </template>
     </el-table-column>

+ 8 - 2
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/YiZhuLuRu.vue

@@ -5,7 +5,6 @@
                           @batchDeleteOrdersClick="batchDeleteOrdersClick"
                           :click-on-the-order-template="clickOnTheOrderTemplate"
                           :confirm-orders-click="confirmOrdersClick"/>
-
       <yz-editor :patient-info="huanZheXinXi"
                  ref="yzEditorRef"
                  :open-group-order-template="openGroupOrderTemplate"/>
@@ -59,7 +58,14 @@ import {
   clickOnThePatient,
   drugManual,
   associateOrders,
-  youWuXuanZheHuanZhe, yzData, errorMsg, yzMitt, geiYaoFangShiData, yaoPinPingLvData, confirmLoading, setYzOrderGroup
+  youWuXuanZheHuanZhe,
+  yzData,
+  errorMsg,
+  yzMitt,
+  geiYaoFangShiData,
+  yaoPinPingLvData,
+  confirmLoading,
+  setYzOrderGroup
 } from '../public-js/zhu-yuan-yi-sheng'
 import store from '@/store'
 import {stringIsBlank, stringNotBlank} from '@/utils/blank-utils'

+ 33 - 23
src/views/utilities/page-editor-help/JsEditDialog.vue

@@ -7,23 +7,23 @@ import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'
 import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
 import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
 import * as monaco from 'monaco-editor';
-import sleep from "@/utils/sleep";
-
+import sleep from "../../../utils/sleep";
+import {componentType} from "../../../components/query-components/page-help-type";
 
 const props = defineProps<{
-  jsData: string,
-  modelValue: boolean
+  submitEvent: string,
+  modelValue: boolean,
+  pageJson: componentType
 }>()
 
 const dialog = ref(true)
-const emits = defineEmits(['update:modelValue', 'update:jsData'])
+const emits = defineEmits(['update:modelValue', 'update:submitEvent'])
 
-const dataVal = useVModel(props, 'jsData', emits)
+const submitEventVal = useVModel(props, 'submitEvent', emits)
 const modValue = useVModel(props, 'modelValue', emits)
 
 const jsEdit = ref(null)
 
-
 // 提示
 self.MonacoEnvironment = {
   getWorker(_: string, label: string) {
@@ -43,11 +43,32 @@ self.MonacoEnvironment = {
   },
 }
 
+let queryType, configType;
+const setQueryType = () => {
+  let tempStr = `let queryData =  ${JSON.stringify(props.pageJson.queryParam)} `
+  queryType = monaco.languages.typescript.javascriptDefaults.addExtraLib(tempStr, 'queryData');
+}
+
+const setConfigType = () => {
+  configType = monaco
+      .languages
+      .typescript
+      .javascriptDefaults
+      .addExtraLib(`let config = ${JSON.stringify(props.pageJson)}`);
+}
+
+const closed = () => {
+  // 销毁类型下一个人要用
+  queryType.dispose()
+  configType.dispose()
+  modValue.value = false
+}
+
 onMounted(async () => {
   await nextTick()
   const monacoEditor = monaco.editor.create(jsEdit.value, {
     // 初始化的dom节点
-    value: dataVal.value, // 初始化值
+    value: submitEventVal.value, // 初始化值
     language: 'javascript', // 语言支持自行查阅demo
     automaticLayout: true, // 自适应布局
     theme: 'vs-dark', // 官方自带三种主题vs, hc-black, or vs-dark
@@ -62,33 +83,22 @@ onMounted(async () => {
     scrollBeyondLastLine: false, // 取消代码后面一大段空白
     overviewRulerBorder: true,
   });
-
-  // extra libraries
-  monaco.languages.typescript.javascriptDefaults.addExtraLib([
-    'declare class SomeEventType {',
-    '    /**',
-    '     * Heres the doco for someProperty',
-    '     */',
-    '    someProperty: string',
-    '}',
-  ].join('\n'), 'filename/facts.d.ts');
-
   monacoEditor.onDidChangeModelContent((val) => {
-    dataVal.value = monacoEditor.getValue();
+    submitEventVal.value = monacoEditor.getValue();
   })
-
   await nextTick()
   await sleep(200)
 
   monacoEditor.focus()
-
+  setQueryType()
+  setConfigType()
 })
 
 
 </script>
 
 <template>
-  <el-dialog v-model="dialog" title="代码编辑" draggable @closed="modValue=false">
+  <el-dialog v-model="dialog" title="代码编辑" draggable @closed="closed">
     <div ref="jsEdit" style="width: 100%; height: 400px"></div>
   </el-dialog>
 </template>

+ 58 - 33
src/views/utilities/page-editor-help/PageEditorHelp.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import {onMounted, ref} from 'vue'
+import {nextTick, onMounted, ref} from 'vue'
 import {collapseData, generateRandomString} from "../../../components/query-components/page-help.ts";
 import XcQuery from "../../../components/query-components/XcQuery.vue";
 import {componentType, headerType} from "../../../components/query-components/page-help-type";
@@ -7,6 +7,8 @@ import PageEditotInfo from "./PageEditorInfo.vue";
 import {clone} from "xe-utils";
 import PageForm from "../../../views/utilities/page-editor-help/PageForm.vue";
 import XcTable from "../../../components/query-components/XcPageTable.vue";
+import * as monaco from 'monaco-editor';
+import {isDev} from "../../../utils/public";
 
 const activeNames = ref(['1', '2', '3'])
 const infoRef = ref()
@@ -29,13 +31,16 @@ const pageJson = ref<componentType>({
   formConfig: {
     inline: true
   },
-  submitEvent: `
-  /**
-  * @param {SomeEventType} queryData"
-  */
-  function func(queryData,config,axios){
-
-}`,
+  submitEvent: '/**\n@param {queryData} queryData\n@param {config} config\n@param {axios} axios \n*/\nfunction func(queryData,config,axios){\n console.log(123) \n}',
+  submitQuery: {
+    method: 'get',
+    url: '/bdp/dataservice/api/3d5218ea28d64937ad990f4f8937eb10',
+    returnCodeSuccess: 'result.code === 0',
+    returnsDataPath: 'rows',
+    requestInterfaced: '创智中台',
+    errorText: 'result.message',
+    totalPath: 'pageInfo.recordCounts'
+  },
   tableConfig: {
     height: 200,
     columns: [],
@@ -51,12 +56,6 @@ const pageJson = ref<componentType>({
     pagerCount: 5,
     layout: "total,sizes, prev, pager, next, jumper",
     total: 0,
-    onSizeChange: (val) => {
-      pageJson.value.pageConfig.pageSize = val
-    },
-    onCurrentChange: (val) => {
-      pageJson.value.pageConfig.currentPage = val
-    },
   }
 })
 
@@ -67,27 +66,54 @@ const itemClick = (data: headerType, index) => {
   theCurrentComponent.value = index
 }
 
-onMounted(() => {
-  // addEl(collapseData[0].children[0])
-  // addEl(collapseData[0].children[1])
-  // addEl(collapseData[1].children[0])
-  addEl(collapseData[1].children[1])
-  addEl(collapseData[2].children[0])
-
-  pageJson.value.pageConfig.total = 200
+/**
+ * 设置 axios 的基本类型
+ */
+const setTsType = () => {
+  monaco.languages.typescript.javascriptDefaults.addExtraLib(`
+    interface axios {
+    /**
+     * 网络请求
+     * @param config
+     * @returns Promise
+     */
+    (config?: {
+        /**
+         * 地址
+         */
+        url: string,
+        /**
+         * 参数 只限 get使用
+         */
+        params?: any,
+        /**
+         * 参数 只限 post使用
+         */
+        data?: any,
+        /**
+         * 请求
+         */
+        method?: 'get' | 'post'
+    }): Promise<any>
+}
+  `)
+}
 
-  for (let i = 0; i < pageJson.value.pageConfig.total; i++) {
-    pageJson.value.tableConfig.data.push({code: i, name: '测试' + i})
+onMounted(() => {
+  setTsType()
+  if (isDev) {
+    // addEl(collapseData[1].children[1])
+    addEl(collapseData[2].children[0])
+    pageJson.value.tableConfig.columns = [
+      {type: 'index', label: '排序'},
+      {prop: 'inpatient_no', label: '住院号'},
+      {prop: 'admiss_times', label: '住院次数'},
+      {prop: 'dept_code', label: '科室'}
+    ]
   }
-  pageJson.value.tableConfig.columns = [
-    {type: 'index', label: '排序'},
-    {prop: 'code', label: '编码'},
-    {prop: 'name', label: '名称'}
-  ]
-
-  pageJson.value.tableConfig.rowKey = 'code'
 })
 
+
 </script>
 
 <template>
@@ -115,10 +141,9 @@ onMounted(() => {
           <div style="display: flex; overflow-y: auto" :style="{height: height -50 +'px'}">
             <div style="flex: 1; box-sizing: border-box">
               <xc-query v-model:testJson="pageJson"
-                        @delClick="infoRef.setShow(false)"
                         v-model:current-index="theCurrentComponent"
                         @item-click="itemClick"/>
-              <xc-table :test-json="pageJson"/>
+              <xc-table :page-json="pageJson"/>
             </div>
             <div class="right_box">
               <el-tabs v-model="tabs">

+ 157 - 156
src/views/utilities/page-editor-help/PageEditorInfo.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
-import {defineExpose, ref, h} from 'vue'
-import {elComponent} from "../../../components/query-components/page-help";
+import {defineExpose, ref, h, nextTick, onMounted} from 'vue'
+import {elComponent, interFaced, pageHelpMitt} from "../../../components/query-components/page-help";
 import {useVModel} from "@vueuse/core";
 import {bindType, componentType, CompType, headerType} from "../../../components/query-components/page-help-type";
 import XEUtils from "xe-utils";
@@ -27,10 +27,6 @@ const editComp = (data: headerType) => {
   show.value = true
 }
 
-const setShow = (val) => {
-  show.value = val
-}
-
 const selectRender = (data: bindType, key) => {
   let optionList = [];
   data.selectData?.forEach(item => {
@@ -134,20 +130,9 @@ const test = (value, el) => {
   }
 }
 
-const interFaced = {
-  创智中台: () => {
-    return 'data.rows'
-  },
-  工作集成平台: () => {
-    return 'data.data'
-  },
-  其他: () => {
-    return ''
-  }
-}
 
 const changeInterFaced = (val) => {
-  dataVal.value.networkRequests.returnsVolumeResolutionDetail = interFaced[val]()
+  dataVal.value.networkRequests.returnsVolumeResolutionDetail = interFaced[val]
 }
 
 const dateDefaultValue = [
@@ -156,16 +141,22 @@ const dateDefaultValue = [
   {code: '3', name: '本月'},
 ]
 
+onMounted(() => {
+  pageHelpMitt.on('setShow', async (val) => {
+    show.value = val
+    await nextTick()
+    return 'change'
+  })
+})
+
 
 defineExpose({
   editComp,
-  setShow
 })
 
 </script>
 
 <template>
-
   <el-dialog v-model="interfaceDisplay.dialog" title="接口测试">
     <div>
       <JsonViewer :value="interfaceDisplay.data"
@@ -173,163 +164,173 @@ defineExpose({
                   :expandDepth="3"/>
     </div>
   </el-dialog>
+  <template v-if="show">
+    <el-form label-width="80px">
+      <el-divider content-position="center">
+        基本设置
+      </el-divider>
 
-  <el-form label-width="80px" v-if="show">
-
-    <el-divider content-position="center">
-      基本设置
-    </el-divider>
-
-    <el-form-item label="唯一名称 ">
-      <el-input v-model="dataVal.key"/>
-    </el-form-item>
-
-    <el-form-item label="前缀">
-      <el-input v-model="dataVal['label']"/>
-    </el-form-item>
+      <el-form-item label="唯一名称 ">
+        <el-input v-model.trim="dataVal.key"/>
+      </el-form-item>
 
-    <el-form-item label="默认值"
-                  v-if="!isSelect() && !isSelectV2() && !isDateRange()">
-      <el-input
-          v-model="dataVal.defaultValue"
-          v-if="XEUtils.isString(dataVal.defaultValue)"
-      />
-      <el-input-number v-model="dataVal.defaultValue"
-                       v-if="XEUtils.isNumber(dataVal.defaultValue)"/>
+      <el-form-item label="数据类型">
+        <el-select v-model="data.keyType">
+          <el-option label="字符" value="string"/>
+          <el-option label="数字" value="number"/>
+        </el-select>
+      </el-form-item>
 
-    </el-form-item>
+      <el-form-item label="前缀">
+        <el-input v-model="dataVal['label']"/>
+      </el-form-item>
 
-    <el-form-item label="必填">
-      <el-switch v-model="dataVal.required"/>
-    </el-form-item>
+      <el-form-item label="默认值"
+                    v-if="!isSelect() && !isSelectV2() && !isDateRange()">
+        <el-input
+            v-model.trim="dataVal.defaultValue"
+            v-if="XEUtils.isString(dataVal.defaultValue)"
+        />
+        <el-input-number v-model="dataVal.defaultValue"
+                         v-if="XEUtils.isNumber(dataVal.defaultValue)"/>
 
-    <el-form-item label="宽度:">
-      <el-input v-model="dataVal.bind.style.width"/>
-    </el-form-item>
+      </el-form-item>
 
+      <el-form-item label="必填">
+        <el-switch v-model="dataVal.required"/>
+      </el-form-item>
 
-    <template v-if="comp.bind">
-      <el-divider content-position="center">
-        内置信息
-      </el-divider>
+      <el-form-item label="宽度:">
+        <el-input v-model="dataVal.bind.style.width"/>
+      </el-form-item>
 
-      <template v-for="(item,key) in comp.bind">
-        <el-form-item :label="item.label + ':'">
-          <component :is="bindRendering(item,key)" @change=" (value) =>{test(value,item )}"/>
-        </el-form-item>
-      </template>
 
-      <template v-if="isSelect()">
+      <template v-if="comp.bind">
         <el-divider content-position="center">
           内置信息
         </el-divider>
-        <div style="max-height: 200px; overflow-y: auto">
-          <template v-if="dataVal.bind.multiple">
-            <el-checkbox-group v-model="dataVal.defaultValue">
-              <template v-for="selectItem in dataVal.selectData">
-                <el-checkbox :label="selectItem.value">
-                  <el-input v-model="selectItem.value" style="width: 100px"/>
-                  <el-input v-model="selectItem.label" style="width: 100px"/>
-                  <el-button icon="Minus" type="danger" style="margin-left: 5px" circle/>
-                </el-checkbox>
-              </template>
-            </el-checkbox-group>
-          </template>
-          <template v-else>
-            <el-radio-group v-model="dataVal.defaultValue">
-              <template v-for="selectItem in dataVal.selectData">
-                <el-radio :label="selectItem.value">
-                  <el-input v-model="selectItem.value" style="width: 100px"/>
-                  <el-input v-model="selectItem.label" style="width: 100px"/>
-                  <el-button icon="Minus" type="danger" style="margin-left: 5px" circle/>
-                </el-radio>
-              </template>
-            </el-radio-group>
-          </template>
-
-          <div style="  margin-top:5px">
-            <el-button text type="primary" @click="addSelectData">新增</el-button>
-            <el-button text type="primary" @click="clearSelectData">清空默认</el-button>
-          </div>
-        </div>
-
-      </template>
-
-      <template v-if="comp.networkRequests">
-        <el-divider content-position="center">
-          远程请求
-        </el-divider>
-
-        <el-form-item label="请求方式">
-          <el-select v-model="dataVal.networkRequests.method">
-            <el-option label="get" value="get"/>
-            <el-option label="post" value="post"/>
-          </el-select>
-        </el-form-item>
 
-        <el-form-item label="请求接口">
-          <el-select v-model="dataVal.networkRequests.requestInterfaced"
-                     @change="changeInterFaced">
-            <el-option label="创智中台" value="创智中台"/>
-            <el-option label="工作集成平台" value="工作集成平台"/>
-            <el-option label="其他" value="其他"/>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="返回体">
-          <el-input type="textarea"
-                    :autosize="{ minRows: 4, maxRows: 10 }"
-                    v-model="dataVal.networkRequests.returnsVolumeResolutionDetail"/>
-        </el-form-item>
+        <template v-for="(item,key) in comp.bind">
+          <el-form-item :label="item.label + ':'">
+            <component :is="bindRendering(item,key)" @change=" (value) =>{test(value,item )}"/>
+          </el-form-item>
+        </template>
 
-        <el-form-item label="请求地址">
-          <el-input type="textarea"
-                    :autosize="{ minRows: 4, maxRows: 10 }"
-                    v-model="dataVal.networkRequests.url"/>
+        <el-form-item v-if="dataVal.bind.multiple" label="多选别名">
+          <el-input v-model.trim="dataVal.multipleAlias"/>
         </el-form-item>
 
-
-        <el-form-item label="请求参数">
-          <template v-for="item in dataVal.networkRequests.params">
-            <el-input v-model="item.queryName" style="width: 100px"/>
-            <el-input v-model="item.queryValue" style="width: 100px"/>
-          </template>
-
-          <div style="  margin-top:5px">
-            <el-button text type="primary" @click="addNetParams">新增</el-button>
+        <template v-if="isSelect()">
+          <el-divider content-position="center">
+            下拉框默认值
+          </el-divider>
+          <div style="max-height: 200px; overflow-y: auto">
+            <template v-if="dataVal.bind.multiple">
+              <el-checkbox-group v-model="dataVal.defaultValue">
+                <template v-for="selectItem in dataVal.selectData">
+                  <el-checkbox :label="selectItem.value">
+                    <el-input v-model="selectItem.value" style="width: 100px"/>
+                    <el-input v-model="selectItem.label" style="width: 100px"/>
+                    <el-button icon="Minus" type="danger" style="margin-left: 5px" circle/>
+                  </el-checkbox>
+                </template>
+              </el-checkbox-group>
+            </template>
+            <template v-else>
+              <el-radio-group v-model="dataVal.defaultValue">
+                <template v-for="selectItem in dataVal.selectData">
+                  <el-radio :label="selectItem.value">
+                    <el-input v-model="selectItem.value" style="width: 100px"/>
+                    <el-input v-model="selectItem.label" style="width: 100px"/>
+                    <el-button icon="Minus" type="danger" style="margin-left: 5px" circle/>
+                  </el-radio>
+                </template>
+              </el-radio-group>
+            </template>
+
+            <div style="  margin-top:5px">
+              <el-button text type="primary" @click="addSelectData">新增</el-button>
+              <el-button text type="primary" @click="clearSelectData">清空默认</el-button>
+            </div>
           </div>
-        </el-form-item>
-
-      </template>
 
-      <template v-if="isDateRange()">
-        <el-divider content-position="center">
-          其他
-        </el-divider>
-
-        <el-form-item label="默认值">
-          <el-select v-model="dataVal.dataRange.defaultValue" :clearable="true">
-            <xc-el-option :data="dateDefaultValue"/>
-          </el-select>
-        </el-form-item>
+        </template>
+
+        <template v-if="comp.networkRequests">
+          <el-divider content-position="center">
+            远程请求
+          </el-divider>
+
+          <el-form-item label="请求方式">
+            <el-select v-model="dataVal.networkRequests.method">
+              <el-option label="get" value="get"/>
+              <el-option label="post" value="post"/>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="请求接口">
+            <el-select v-model="dataVal.networkRequests.requestInterfaced"
+                       @change="changeInterFaced">
+              <el-option label="创智中台" value="创智中台"/>
+              <el-option label="工作集成平台" value="工作集成平台"/>
+              <el-option label="其他" value="其他"/>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="返回体">
+            <el-input type="textarea"
+                      :autosize="{ minRows: 4, maxRows: 10 }"
+                      v-model.trim="dataVal.networkRequests.returnsVolumeResolutionDetail"/>
+          </el-form-item>
+
+          <el-form-item label="请求地址">
+            <el-input type="textarea"
+                      :autosize="{ minRows: 4, maxRows: 10 }"
+                      v-model.trim="dataVal.networkRequests.url"/>
+          </el-form-item>
+
+          <el-form-item label="请求参数">
+            <template v-for="item in dataVal.networkRequests.params">
+              <el-input v-model="item.queryName" style="width: 100px"/>
+              <el-input v-model="item.queryValue" style="width: 100px"/>
+            </template>
+
+            <div style="  margin-top:5px">
+              <el-button text type="primary" @click="addNetParams">新增</el-button>
+            </div>
+          </el-form-item>
+
+        </template>
+
+        <template v-if="isDateRange()">
+          <el-divider content-position="center">
+            其他
+          </el-divider>
+
+          <el-form-item label="默认值">
+            <el-select v-model="dataVal.dataRange.defaultValue" :clearable="true">
+              <xc-el-option :data="dateDefaultValue"/>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="开始别名">
+            <el-input v-model="dataVal.dataRange.startAlias"/>
+          </el-form-item>
+
+          <el-form-item label="结束别名">
+            <el-input v-model="dataVal.dataRange.endAlias"/>
+          </el-form-item>
+
+          <el-form-item label="几天前" v-if="dataVal.dataRange.defaultValue === '2'">
+            <el-input-number v-model="dataVal.dataRange.minusDays"/>
+          </el-form-item>
+
+        </template>
 
-        <el-form-item label="开始别名">
-          <el-input v-model="dataVal.dataRange.startAlias"/>
-        </el-form-item>
-
-        <el-form-item label="结束别名">
-          <el-input v-model="dataVal.dataRange.endAlias"/>
-        </el-form-item>
-
-        <el-form-item label="几天前" v-if="dataVal.dataRange.defaultValue === '2'">
-          <el-input-number v-model="dataVal.dataRange.minusDays"/>
-        </el-form-item>
 
       </template>
-
-
-    </template>
-  </el-form>
+    </el-form>
+  </template>
 </template>
 
 <style scoped lang="scss">

+ 41 - 4
src/views/utilities/page-editor-help/PageForm.vue

@@ -2,22 +2,27 @@
 import {defineProps, ref} from 'vue'
 import {componentType} from "../../../components/query-components/page-help-type";
 import JsEditDialog from "./JsEditDialog.vue";
+import {ElInput, ElOption, ElSelect} from "element-plus";
+import {interFaced} from "../../../components/query-components/page-help";
 
-const props = defineProps<{
+const {pageJson} = defineProps<{
   pageJson: componentType
 }>()
 
-const collapse = ref(['1'])
+const collapse = ref(['1', '2'])
 
 const dialogConfig = ref({
   dialog: false
 })
 
-
 const submit = () => {
   dialogConfig.value.dialog = true
 }
 
+const changeInterFaced = (val) => {
+  pageJson.submitQuery.returnsVolumeResolutionDetail = interFaced[val]
+}
+
 </script>
 
 <template>
@@ -28,11 +33,43 @@ const submit = () => {
           <el-button type="info" icon="Edit" round plain @click="submit">编写代码</el-button>
         </el-form-item>
       </el-collapse-item>
+
+      <el-collapse-item title="提交请求" name="2">
+
+        <el-form-item label="请求方式">
+          <el-select v-model="pageJson.submitQuery.method">
+            <el-option label="get" value="get"/>
+            <el-option label="post" value="post"/>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="请求地址">
+          <el-input type="textarea"
+                    :autosize="{ minRows: 4, maxRows: 10 }"
+                    v-model.trim="pageJson.submitQuery.url"/>
+        </el-form-item>
+
+        <el-form-item label="路径解析">
+          <el-input v-model.trim="pageJson.submitQuery.returnsDataPath"/>
+        </el-form-item>
+
+        <el-form-item label="请求接口">
+          <el-select v-model="pageJson.submitQuery.requestInterfaced"
+                     @change="changeInterFaced">
+            <el-option label="创智中台" value="创智中台"/>
+            <el-option label="工作集成平台" value="工作集成平台"/>
+            <el-option label="其他" value="其他"/>
+          </el-select>
+        </el-form-item>
+
+      </el-collapse-item>
+
     </el-collapse>
   </el-form>
 
   <js-edit-dialog v-if="dialogConfig.dialog"
-                  v-model:js-data="props.pageJson.submitEvent"
+                  :page-json="pageJson"
+                  v-model:submit-event="pageJson.submitEvent"
                   v-model="dialogConfig.dialog"/>
 
 </template>