Ben Lin
2024-10-22 78999ce1626d2a786f3a705281eeba79c2f1d6dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<!--
 * @Description: 低代码详情呈现页面
 * @Author: Ben Lin
 * @version: 
 * @Date: 2024-05-30 13:28:20
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-07-22 01:55:07
-->
<template>
  <PageWrapper :title="pageTitle" :content="contentStr" contentBackground @back="goBack">
    <template #footer>
      <a-tabs default-active-key="detail" v-model:activeKey="currentKey" @tabClick="tabClkcallback">
        <a-tab-pane key="detailfirst" :tab="firstTabName" />
        <a-tab-pane key="detailsecond" :tab="secondTabName" />
      </a-tabs>
    </template>
    <div>
      <div v-if="currentKey == 'detailfirst'">
        <Suspense>
          <detail :entityName="entityName" />
        </Suspense>
      </div>
      <div v-if="currentKey == 'detailsecond'">
        <Suspense></Suspense>
      </div>
    </div>
  </PageWrapper>
</template>
 
<script lang="ts" setup>
  import { ref, provide, Ref } from 'vue';
  import { useRoute } from 'vue-router';
  import { PageWrapper } from '/@/components/Page';
  import { useTabs } from '/@/hooks/web/useTabs';
  import { Tabs } from 'ant-design-vue';
  import { useGo } from '/@/hooks/web/usePage';
  import { OpenCustModal, custOnChange } from '../data';
  import detail from './detail.vue';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { useGlobSetting } from '/@/hooks/setting';
 
  const { t } = useI18n();
 
  const { createMessage } = useMessage();
  const route = useRoute();
  // const objParams = ref(JSON.parse(decodeURI(route.params?.id as string)));
  const routeParams = ref(JSON.parse(decodeURI(route.params?.id as string)));
  // 从sessionStorage中读取参数并转换回对象
  const savedParams = sessionStorage.getItem(`${routeParams.value.sName}_params`);
  const objParams = savedParams ? ref(JSON.parse(decodeURI(savedParams))) : ref({});
  const ATabs = ref(Tabs);
  const ATabPane = ref(Tabs.TabPane);
  var ITEM_CODE = ref('');
  const go = useGo();
  const pageTitle = ref(objParams.value.pageTitle);
  const contentStr = ref(objParams.value.contentStr);
  const firstTabName = ref(objParams.value.firstTabName);
  const secondTabName = ref(objParams.value.secondTabName);
  const entityName = ref(routeParams.value.Name);
  const detailName = ref(objParams.value.detailName);
  const globSetting = useGlobSetting();
  const crudColSlots = ref<any>(objParams.value.colSlots);
  const keyFieldValues = ref<any>(null);
  provide<Ref<any>>('objParams', objParams.value);
  provide<Ref<any>>('keyFieldValues', keyFieldValues);
 
  var currentKey = ref('detailfirst');
  const { setTitle } = useTabs();
 
  // 设置Tab的标题(不会影响页面标题)
  setTitle(`详情:${detailName.value}`);
 
  // 页面左侧点击返回链接时的操作
  function goBack() {
    /* 动态import实体名.ts的自定义方法 */
    try {
      import(`../entityts/${entityName.value}.ts`)
        .then((m) => {
          const [{ GetHomeUrl }] = m.default();
          // 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
          go(GetHomeUrl({colSlots:crudColSlots.value}));
        })
        .catch(() => {});
    } catch (e) {}
  }
  const tabClkcallback = (val: string) => {
    if (val == 'detailfirst') {
      ITEM_CODE.value = '';
    }
  };
 
  /**
   * @description: Select 自定义onChange方法
   * @param {*} obj
   * @return {*}
   */
  function onChangeConfig(obj: any) {
    if (obj.component == 'Select') {
      var options = obj.componentProps.options;
      var onChange = obj.componentProps.onChange;
      obj.componentProps = ({ schema, tableAction, formActionType, formModel }) => {
        return {
          options: options,
          onChange: (e) => custOnChange(e, onChange, objParams.value.ID),
        };
      };
    }
  }
</script>