From 7cf58a4d2fff6b9cba9029d4d43ba9744dbef864 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 18 七月 2024 15:49:03 +0800
Subject: [PATCH] 工单更新

---
 src/components/Table/src/components/TableAction.vue |  200 ++++++++++++++++++++++++-------------------------
 1 files changed, 98 insertions(+), 102 deletions(-)

diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue
index 73bf691..71b64b9 100644
--- a/src/components/Table/src/components/TableAction.vue
+++ b/src/components/Table/src/components/TableAction.vue
@@ -2,12 +2,12 @@
   <div :class="[prefixCls, getAlign]" @click="onCellClick">
     <template v-for="(action, index) in getActions" :key="`${index}-${action.label}`">
       <Tooltip v-if="action.tooltip" v-bind="getTooltip(action.tooltip)">
-        <PopConfirmButton v-bind="action">
+        <PopConfirmButton v-bind="omit(action, 'icon')">
           <Icon :icon="action.icon" :class="{ 'mr-1': !!action.label }" v-if="action.icon" />
           <template v-if="action.label">{{ action.label }}</template>
         </PopConfirmButton>
       </Tooltip>
-      <PopConfirmButton v-else v-bind="action">
+      <PopConfirmButton v-else v-bind="omit(action, 'icon')">
         <Icon :icon="action.icon" :class="{ 'mr-1': !!action.label }" v-if="action.icon" />
         <template v-if="action.label">{{ action.label }}</template>
       </PopConfirmButton>
@@ -30,122 +30,118 @@
     </Dropdown>
   </div>
 </template>
-<script lang="ts">
-  import { defineComponent, PropType, computed, toRaw, unref } from 'vue';
+<script lang="ts" setup>
+  import { PropType, computed, toRaw, unref } from 'vue';
   import { MoreOutlined } from '@ant-design/icons-vue';
   import { Divider, Tooltip, TooltipProps } from 'ant-design-vue';
   import Icon from '@/components/Icon/Icon.vue';
-  import { ActionItem, TableActionType } from '/@/components/Table';
-  import { PopConfirmButton } from '/@/components/Button';
-  import { Dropdown } from '/@/components/Dropdown';
-  import { useDesign } from '/@/hooks/web/useDesign';
+  import { ActionItem, TableActionType } from '@/components/Table';
+  import { PopConfirmButton } from '@/components/Button';
+  import { Dropdown } from '@/components/Dropdown';
+  import { useDesign } from '@/hooks/web/useDesign';
   import { useTableContext } from '../hooks/useTableContext';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { isBoolean, isFunction, isString } from '/@/utils/is';
-  import { propTypes } from '/@/utils/propTypes';
+  import { usePermission } from '@/hooks/web/usePermission';
+  import { isBoolean, isFunction, isString } from '@/utils/is';
+  import { propTypes } from '@/utils/propTypes';
   import { ACTION_COLUMN_FLAG } from '../const';
+  import { omit } from 'lodash-es';
 
-  export default defineComponent({
-    name: 'TableAction',
-    components: { Icon, PopConfirmButton, Divider, Dropdown, MoreOutlined, Tooltip },
-    props: {
-      actions: {
-        type: Array as PropType<ActionItem[]>,
-        default: null,
-      },
-      dropDownActions: {
-        type: Array as PropType<ActionItem[]>,
-        default: null,
-      },
-      divider: propTypes.bool.def(true),
-      outside: propTypes.bool,
-      stopButtonPropagation: propTypes.bool.def(false),
+  defineOptions({ name: 'TableAction' });
+
+  const props = defineProps({
+    actions: {
+      type: Array as PropType<ActionItem[]>,
+      default: null,
     },
-    setup(props) {
-      const { prefixCls } = useDesign('basic-table-action');
-      let table: Partial<TableActionType> = {};
-      if (!props.outside) {
-        table = useTableContext();
-      }
+    dropDownActions: {
+      type: Array as PropType<ActionItem[]>,
+      default: null,
+    },
+    divider: propTypes.bool.def(true),
+    outside: propTypes.bool,
+    stopButtonPropagation: propTypes.bool.def(false),
+  });
 
-      const { hasPermission } = usePermission();
-      function isIfShow(action: ActionItem): boolean {
-        const ifShow = action.ifShow;
+  const { prefixCls } = useDesign('basic-table-action');
+  let table: Partial<TableActionType> = {};
+  if (!props.outside) {
+    table = useTableContext();
+  }
 
-        let isIfShow = true;
+  const { hasPermission } = usePermission();
+  function isIfShow(action: ActionItem): boolean {
+    const ifShow = action.ifShow;
 
-        if (isBoolean(ifShow)) {
-          isIfShow = ifShow;
-        }
-        if (isFunction(ifShow)) {
-          isIfShow = ifShow(action);
-        }
-        return isIfShow;
-      }
+    let isIfShow = true;
 
-      const getActions = computed(() => {
-        return (toRaw(props.actions) || [])
-          .filter((action) => {
-            return hasPermission(action.auth) && isIfShow(action);
-          })
-          .map((action) => {
-            const { popConfirm } = action;
-            return {
-              getPopupContainer: () => unref((table as any)?.wrapRef) ?? document.body,
-              type: 'link',
-              size: 'small',
-              ...action,
-              ...(popConfirm || {}),
-              onConfirm: popConfirm?.confirm,
-              onCancel: popConfirm?.cancel,
-              enable: !!popConfirm,
-            };
-          });
-      });
+    if (isBoolean(ifShow)) {
+      isIfShow = ifShow;
+    }
+    if (isFunction(ifShow)) {
+      isIfShow = ifShow(action);
+    }
+    return isIfShow;
+  }
 
-      const getDropdownList = computed((): any[] => {
-        const list = (toRaw(props.dropDownActions) || []).filter((action) => {
-          return hasPermission(action.auth) && isIfShow(action);
-        });
-        return list.map((action, index) => {
-          const { label, popConfirm } = action;
-          return {
-            ...action,
-            ...popConfirm,
-            onConfirm: popConfirm?.confirm,
-            onCancel: popConfirm?.cancel,
-            text: label,
-            divider: index < list.length - 1 ? props.divider : false,
-          };
-        });
-      });
-
-      const getAlign = computed(() => {
-        const columns = (table as TableActionType)?.getColumns?.() || [];
-        const actionColumn = columns.find((item) => item.flag === ACTION_COLUMN_FLAG);
-        return actionColumn?.align ?? 'left';
-      });
-
-      function getTooltip(data: string | TooltipProps): TooltipProps {
+  const getActions = computed(() => {
+    return (toRaw(props.actions) || [])
+      .filter((action) => {
+        return hasPermission(action.auth) && isIfShow(action);
+      })
+      .map((action) => {
+        const { popConfirm } = action;
         return {
           getPopupContainer: () => unref((table as any)?.wrapRef) ?? document.body,
-          placement: 'bottom',
-          ...(isString(data) ? { title: data } : data),
+          type: 'link',
+          size: 'small',
+          ...action,
+          ...(popConfirm || {}),
+          onConfirm: popConfirm?.confirm,
+          onCancel: popConfirm?.cancel,
+          enable: !!popConfirm,
         };
-      }
-
-      function onCellClick(e: MouseEvent) {
-        if (!props.stopButtonPropagation) return;
-        const path = e.composedPath() as HTMLElement[];
-        const isInButton = path.find((ele) => {
-          return ele.tagName?.toUpperCase() === 'BUTTON';
-        });
-        isInButton && e.stopPropagation();
-      }
-
-      return { prefixCls, getActions, getDropdownList, getAlign, onCellClick, getTooltip };
-    },
+      });
   });
+
+  const getDropdownList = computed((): any[] => {
+    const list = (toRaw(props.dropDownActions) || []).filter((action) => {
+      return hasPermission(action.auth) && isIfShow(action);
+    });
+    return list.map((action, index) => {
+      const { label, popConfirm } = action;
+      return {
+        ...action,
+        ...popConfirm,
+        onConfirm: popConfirm?.confirm,
+        onCancel: popConfirm?.cancel,
+        text: label,
+        divider: index < list.length - 1 ? props.divider : false,
+      };
+    });
+  });
+
+  const getAlign = computed(() => {
+    const columns = (table as TableActionType)?.getColumns?.() || [];
+    const actionColumn = columns.find((item) => item.flag === ACTION_COLUMN_FLAG);
+    return actionColumn?.align ?? 'left';
+  });
+
+  function getTooltip(data: string | TooltipProps): TooltipProps {
+    return {
+      getPopupContainer: () => unref((table as any)?.wrapRef) ?? document.body,
+      placement: 'bottom',
+      ...(isString(data) ? { title: data } : data),
+    };
+  }
+
+  function onCellClick(e: MouseEvent) {
+    if (!props.stopButtonPropagation) return;
+    const path = e.composedPath() as HTMLElement[];
+    const isInButton = path.find((ele) => {
+      return ele.tagName?.toUpperCase() === 'BUTTON';
+    });
+    isInButton && e.stopPropagation();
+  }
 </script>
 <style lang="less">
   @prefix-cls: ~'@{namespace}-basic-table-action';

--
Gitblit v1.9.3