This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 83e61a1ca [Fix]: No event triggered when changing execmode (#2608)
83e61a1ca is described below

commit 83e61a1ca827a0e95895760cf84cdb32cef27de8
Author: WSZ <[email protected]>
AuthorDate: Wed Apr 12 23:06:50 2023 +0800

    [Fix]: No event triggered when changing execmode (#2608)
    
    * [Fix]: No event triggered when changing execmode
    
    * [Fix]: setInterval not cleaned
    
    * [Fix]: Change the role permission judgment method
    
    * [Improve]: login select team modal
---
 .../src/locales/lang/en/sys.ts                     |  1 +
 .../src/locales/lang/zh-CN/sys.ts                  |  1 +
 .../src/views/base/login/teamModal.vue             |  7 ++-
 .../src/views/base/login/useTeamModal.tsx          | 60 ----------------------
 .../flink/app/hooks/useCreateAndEditSchema.ts      | 47 ++++++++++++++++-
 .../src/views/flink/app/hooks/useCreateSchema.ts   | 41 +--------------
 .../views/flink/app/hooks/useEditFlinkSchema.ts    | 12 +----
 .../src/views/flink/app/hooks/useEditStreamPark.ts | 12 +----
 .../src/views/setting/FlinkCluster/index.vue       | 26 ++++++++--
 .../views/system/role/components/RoleDrawer.vue    |  9 ++--
 10 files changed, 86 insertions(+), 130 deletions(-)

diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/sys.ts 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/sys.ts
index e231cebca..f41e40c3e 100644
--- a/streampark-console/streampark-console-webapp/src/locales/lang/en/sys.ts
+++ b/streampark-console/streampark-console-webapp/src/locales/lang/en/sys.ts
@@ -124,6 +124,7 @@ export default {
     diffPwd: 'The two passwords are inconsistent',
     userName: 'Username',
     password: 'Password',
+    selectTeam: 'Please select a team',
     oldPassword: 'Old password',
     newPassword: 'New password',
     confirmPassword: 'Confirm password',
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/sys.ts 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/sys.ts
index f59735142..00f3fbefa 100644
--- a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/sys.ts
+++ b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/sys.ts
@@ -118,6 +118,7 @@ export default {
 
     userName: '账号',
     password: '密码',
+    selectTeam: '请选择一个团队',
     oldPassword: '当前密码',
     newPassword: '新密码',
     confirmPassword: '确认密码',
diff --git 
a/streampark-console/streampark-console-webapp/src/views/base/login/teamModal.vue
 
b/streampark-console/streampark-console-webapp/src/views/base/login/teamModal.vue
index abda47728..ec5408101 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/base/login/teamModal.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/base/login/teamModal.vue
@@ -21,6 +21,7 @@
   import { computed, ref } from 'vue';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { Icon } from '/@/components/Icon';
+  import { useI18n } from '/@/hooks/web/useI18n';
 
   const emit = defineEmits(['success', 'update:visible']);
   const props = defineProps({
@@ -36,18 +37,19 @@
   const loading = ref(false);
 
   const { createMessage } = useMessage();
+  const { t } = useI18n();
   const userStore = useUserStore();
 
   const formSchema = computed((): FormSchema[] => {
     return [
       {
-        label: 'Please select a team',
+        label: t('sys.login.selectTeam'),
         field: 'teamId',
         component: 'Select',
         componentProps: {
           options: userStore.getTeamList,
           // getPopupContainer: (triggerNode) => triggerNode.parentNode,
-          placeholder: 'Please select a team',
+          placeholder: t('sys.login.selectTeam'),
         },
         required: true,
       },
@@ -81,6 +83,7 @@
 <template>
   <Modal
     :visible="props.visible"
+    centered
     @cancel="emit('update:visible', false)"
     @ok="handleUserTeamSubmit"
   >
diff --git 
a/streampark-console/streampark-console-webapp/src/views/base/login/useTeamModal.tsx
 
b/streampark-console/streampark-console-webapp/src/views/base/login/useTeamModal.tsx
deleted file mode 100644
index 79f68e973..000000000
--- 
a/streampark-console/streampark-console-webapp/src/views/base/login/useTeamModal.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Select } from 'ant-design-vue';
-import { ref } from 'vue';
-import Icon from '/@/components/Icon';
-import { useMessage } from '/@/hooks/web/useMessage';
-import { useUserStore } from '/@/store/modules/user';
-export const useTeamModal = (handleTeamSelect: Fn) => {
-  const teamId = ref('');
-  const { createConfirm, createMessage } = useMessage();
-  const userStore = useUserStore();
-  async function createTeamModal() {
-    createConfirm({
-      iconType: 'warning',
-      title: () => {
-        return (
-          <div>
-            <Icon icon="ant-design:setting-outlined" />
-            <span>Select Team</span>
-          </div>
-        );
-      },
-      content: () => {
-        return (
-          <div>
-            <span>Team</span>
-            <Select
-              value={teamId}
-              onChange={(value: string) => (teamId.value = value)}
-              options={userStore.getTeamList}
-            ></Select>
-          </div>
-        );
-      },
-      onOk: async () => {
-        if (!teamId.value) {
-          createMessage.warning('please select a team');
-          return Promise.reject();
-        }
-        await handleTeamSelect(teamId.value);
-        return Promise.resolve();
-      },
-    });
-  }
-  return { createTeamModal };
-};
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
index aad20a46d..8d4b7dc1c 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
@@ -16,7 +16,7 @@
  */
 import { FormSchema } from '/@/components/Table';
 import { computed, ref, unref, h, Ref, onMounted, reactive } from 'vue';
-import { k8sRestExposedType, resolveOrder } from '../data';
+import { executionModes, k8sRestExposedType, resolveOrder } from '../data';
 import optionData from '../data/option';
 import {
   getAlertSvgIcon,
@@ -52,6 +52,7 @@ import { FlinkCluster } from 
'/@/api/flink/setting/types/flinkCluster.type';
 import { ClusterStateEnum, ExecModeEnum, JobTypeEnum } from 
'/@/enums/flinkEnum';
 import { isK8sExecMode } from '../utils';
 import { useI18n } from '/@/hooks/web/useI18n';
+import { fetchCheckHadoop } from '/@/api/flink/setting';
 const { t } = useI18n();
 export interface HistoryRecord {
   k8sNamespace: Array<string>;
@@ -536,7 +537,48 @@ export const useCreateAndEditSchema = (
       },
     ];
   });
-
+  const getExecutionModeSchema = computed((): FormSchema[] => {
+    return [
+      {
+        field: 'executionMode',
+        label: t('flink.app.executionMode'),
+        component: 'Select',
+        itemProps: {
+          autoLink: false, //Resolve multiple trigger validators with null 
value ·
+        },
+        componentProps: {
+          placeholder: t('flink.app.addAppTips.executionModePlaceholder'),
+          options: executionModes,
+        },
+        rules: [
+          {
+            required: true,
+            validator: async (_rule, value) => {
+              if (value === null || value === undefined || value === '') {
+                return 
Promise.reject(t('flink.app.addAppTips.executionModeIsRequiredMessage'));
+              } else {
+                if (
+                  [
+                    ExecModeEnum.YARN_PER_JOB,
+                    ExecModeEnum.YARN_SESSION,
+                    ExecModeEnum.YARN_APPLICATION,
+                  ].includes(value)
+                ) {
+                  const res = await fetchCheckHadoop();
+                  if (res) {
+                    return Promise.resolve();
+                  } else {
+                    return 
Promise.reject(t('flink.app.addAppTips.hadoopEnvInitMessage'));
+                  }
+                }
+                return Promise.resolve();
+              }
+            },
+          },
+        ],
+      },
+    ];
+  });
   onMounted(async () => {
     /* Get project data */
     fetchSelect({}).then((res) => {
@@ -587,6 +629,7 @@ export const useCreateAndEditSchema = (
     getFlinkClusterSchemas,
     getFlinkFormOtherSchemas,
     getFlinkTypeSchema,
+    getExecutionModeSchema,
     openConfDrawer,
   };
 };
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
index 91fc2e943..72b11762f 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
@@ -16,8 +16,6 @@
  */
 import { FormSchema } from '/@/components/Table';
 import { computed, h, Ref, ref, unref } from 'vue';
-import { executionModes } from '../data';
-import { fetchCheckHadoop } from '/@/api/flink/setting';
 import { AppTypeEnum, ConfigTypeEnum, ExecModeEnum } from '/@/enums/flinkEnum';
 
 import Icon, { SvgIcon } from '/@/components/Icon';
@@ -60,6 +58,7 @@ export const useCreateSchema = (dependencyRef: Ref) => {
     projectList,
     getFlinkSqlSchema,
     getFlinkClusterSchemas,
+    getExecutionModeSchema,
     getFlinkFormOtherSchemas,
     suggestions,
   } = useCreateAndEditSchema(dependencyRef);
@@ -108,43 +107,7 @@ export const useCreateSchema = (dependencyRef: Ref) => {
           { required: true, message: 
t('flink.app.addAppTips.developmentModeIsRequiredMessage') },
         ],
       },
-      {
-        field: 'executionMode',
-        label: t('flink.app.executionMode'),
-        component: 'Select',
-        componentProps: {
-          placeholder: t('flink.app.addAppTips.executionModePlaceholder'),
-          options: executionModes,
-        },
-        dynamicRules: () => {
-          return [
-            {
-              required: true,
-              validator: async (_rule, value) => {
-                if (value === null || value === undefined || value === '') {
-                  return 
Promise.reject(t('flink.app.addAppTips.executionModeIsRequiredMessage'));
-                } else {
-                  if (
-                    [
-                      ExecModeEnum.YARN_PER_JOB,
-                      ExecModeEnum.YARN_SESSION,
-                      ExecModeEnum.YARN_APPLICATION,
-                    ].includes(value)
-                  ) {
-                    const res = await fetchCheckHadoop();
-                    if (res) {
-                      return Promise.resolve();
-                    } else {
-                      return 
Promise.reject(t('flink.app.addAppTips.hadoopEnvInitMessage'));
-                    }
-                  }
-                  return Promise.resolve();
-                }
-              },
-            },
-          ];
-        },
-      },
+      ...getExecutionModeSchema.value,
       ...getFlinkClusterSchemas.value,
       ...getFlinkSqlSchema.value,
       {
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditFlinkSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditFlinkSchema.ts
index 38fbe688c..aef6f6f81 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditFlinkSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditFlinkSchema.ts
@@ -16,7 +16,6 @@
  */
 import { FormSchema } from '/@/components/Table';
 import { computed, h, Ref, ref, unref } from 'vue';
-import { executionModes } from '../data';
 
 import { useCreateAndEditSchema } from './useCreateAndEditSchema';
 import { getAlertSvgIcon } from './useFlinkRender';
@@ -35,21 +34,14 @@ export const useEditFlinkSchema = (jars: Ref) => {
     getFlinkClusterSchemas,
     getFlinkFormOtherSchemas,
     getFlinkTypeSchema,
+    getExecutionModeSchema,
     suggestions,
   } = useCreateAndEditSchema(null, { appId: route.query.appId as string, mode: 
'streampark' });
 
   const getEditFlinkFormSchema = computed((): FormSchema[] => {
     return [
       ...getFlinkTypeSchema.value,
-      {
-        field: 'executionMode',
-        label: 'Execution Mode',
-        component: 'Select',
-        componentProps: {
-          placeholder: 'Execution Mode',
-          options: executionModes,
-        },
-      },
+      ...getExecutionModeSchema.value,
       {
         field: 'resourceFrom',
         label: 'Resource From',
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
index 4820b2500..a4bb6c15f 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
@@ -16,7 +16,6 @@
  */
 import { FormSchema } from '/@/components/Table';
 import { computed, h, Ref, ref, unref } from 'vue';
-import { executionModes } from '../data';
 import { ExecModeEnum, JobTypeEnum, UseStrategyEnum } from 
'/@/enums/flinkEnum';
 import { useCreateAndEditSchema } from './useCreateAndEditSchema';
 import { renderSqlHistory } from './useFlinkRender';
@@ -46,6 +45,7 @@ export const useEditStreamParkSchema = (
     getFlinkClusterSchemas,
     getFlinkFormOtherSchemas,
     getFlinkTypeSchema,
+    getExecutionModeSchema,
     suggestions,
   } = useCreateAndEditSchema(dependencyRef, {
     appId: route.query.appId as string,
@@ -116,15 +116,7 @@ export const useEditStreamParkSchema = (
   const getEditStreamParkFormSchema = computed((): FormSchema[] => {
     return [
       ...getFlinkTypeSchema.value,
-      {
-        field: 'executionMode',
-        label: t('flink.app.executionMode'),
-        component: 'Select',
-        componentProps: {
-          placeholder: t('flink.app.executionMode'),
-          options: executionModes,
-        },
-      },
+      ...getExecutionModeSchema.value,
       ...getFlinkClusterSchemas.value,
       {
         field: 'flinkSqlHistory',
diff --git 
a/streampark-console/streampark-console-webapp/src/views/setting/FlinkCluster/index.vue
 
b/streampark-console/streampark-console-webapp/src/views/setting/FlinkCluster/index.vue
index 8c6947163..8cd7b8dfa 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/setting/FlinkCluster/index.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/setting/FlinkCluster/index.vue
@@ -16,6 +16,8 @@
 -->
 <script lang="ts">
   import { defineComponent } from 'vue';
+  import { useTimeoutFn } from '@vueuse/core';
+  import { onUnmounted } from 'vue';
 
   export default defineComponent({
     name: 'FlinkClusterSetting',
@@ -54,7 +56,7 @@
   const { t } = useI18n();
   const { Swal, createMessage } = useMessage();
   const clusters = ref<FlinkCluster[]>([]);
-
+  const loading = ref(false);
   function handleIsStart(item) {
     return item.clusterState === ClusterStateEnum.STARTED;
   }
@@ -103,13 +105,29 @@
   }
 
   async function getFlinkCluster() {
-    const clusterList = await fetchFlinkCluster();
-    clusters.value = clusterList;
+    try {
+      loading.value = true;
+      const clusterList = await fetchFlinkCluster();
+      clusters.value = clusterList;
+    } catch (error) {
+      console.error(error);
+    } finally {
+      loading.value = false;
+    }
   }
+  const { start, stop } = useTimeoutFn(() => {
+    // Prevent another request from being initiated while the previous request 
is pending
+    if (!loading.value) {
+      getFlinkCluster();
+    }
+    start();
+  }, 1000 * 3);
 
   onMounted(() => {
     getFlinkCluster();
-    setInterval(() => getFlinkCluster(), 1000 * 3);
+  });
+  onUnmounted(() => {
+    stop();
   });
 </script>
 <template>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/role/components/RoleDrawer.vue
 
b/streampark-console/streampark-console-webapp/src/views/system/role/components/RoleDrawer.vue
index 5f1efe67d..753b59b48 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/role/components/RoleDrawer.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/role/components/RoleDrawer.vue
@@ -55,13 +55,15 @@
   import { FormTypeEnum } from '/@/enums/formEnum';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useI18n } from '/@/hooks/web/useI18n';
-
+  const treeDataMap = new Map<string, string>();
   const handleTreeIcon = (treeData: TreeItem[]): TreeItem[] => {
     if (!treeData?.length) {
       return [];
     }
     treeData.forEach((v) => {
       v.icon = v.icon && !v.icon.includes('ant-design:') ? 
`ant-design:${v.icon}-outlined` : v.icon;
+      const mapKey = v.permission || v.path;
+      if (!treeDataMap.get(mapKey)) treeDataMap.set(mapKey, v.id);
       v.children && handleTreeIcon(v.children);
     });
     return treeData;
@@ -162,8 +164,9 @@
       async function handleSubmit() {
         try {
           const values = await validate();
-          // First, a simple judgment, does not contain app:view (home) this 
permission, the error is reported
-          if (selectedKeysAndHalfCheckedKeys.value.indexOf('100067') < 0) {
+          //  does not contain app:view (home) this permission, the error is 
reported
+          const appViewId = treeDataMap.get('app:view');
+          if (appViewId && 
selectedKeysAndHalfCheckedKeys.value.indexOf(appViewId) < 0) {
             createMessage.warning(t('system.role.form.noViewPermission'));
             return;
           }

Reply via email to