From 9bec4dcae002f36aa23231da11cb03a156b40110 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周三, 30 4月 2025 16:24:16 +0800
Subject: [PATCH] 222

---
 PipeLineLems/web/src/components/TableFilter/TableFilter.tsx |  102 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 61 insertions(+), 41 deletions(-)

diff --git a/PipeLineLems/web/src/components/TableFilter/TableFilter.tsx b/PipeLineLems/web/src/components/TableFilter/TableFilter.tsx
index 588edec..d168169 100644
--- a/PipeLineLems/web/src/components/TableFilter/TableFilter.tsx
+++ b/PipeLineLems/web/src/components/TableFilter/TableFilter.tsx
@@ -6,23 +6,25 @@
   watch,
   onUnmounted,
   Component,
+  inject,
 } from 'vue'
 import styles from './TableFilter.module.scss'
 import { CaretBottom } from '@element-plus/icons-vue'
 import IconButton from '@/components/IconButton/IconButton'
-
-import ElInput from 'element-plus/es/components/input/index'
-import ElSelect from 'element-plus/es/components/select/index'
+import ElInput from '../Input/Input'
 import Select from '@/components/Select/Select'
 import Option from '@/components/Select/Option'
+import SearchSelect from '@/components/SearchSelect/SearchSelect'
 import Icon from '../Icon/Icon'
 import { FormPropsType, FormItemPropType, PropsType } from '../DyForm/DyForm.d'
 import isNil from 'lodash/isNil'
 import { useVModel } from '@vueuse/core'
+import { Language, scope, _t as t } from '@/libs/Language/Language'
 
 const formItemElementMap: Record<string, any> = {
   input: ElInput,
   select: Select,
+  filterSelect: SearchSelect,
 }
 
 const Type: Record<string, string> = {
@@ -70,6 +72,13 @@
       type: Array,
       default: () => [],
     },
+    LanguageScopeKey: {
+      type: String,
+    },
+    customWidgetMap: {
+      type: Object,
+      default: () => ({}),
+    },
   },
   emits: ['update:modelValue', 'data', 'change'],
   setup(props, { attrs, slots, emit }) {
@@ -79,6 +88,12 @@
     const defaultData = ref({})
     const data = ref({})
     const optionMap = ref<Record<string, any>>({})
+    const LanguageScopeKey = inject('LanguageScopeKey', '')
+    const _t = computed(() => {
+      return props.LanguageScopeKey
+        ? scope(props.LanguageScopeKey || LanguageScopeKey)
+        : t
+    })
     const form = computed({
       get() {
         return props.modelValue
@@ -87,27 +102,28 @@
         emit('update:modelValue', v)
       },
     })
-
+    Object.assign(formItemElementMap, props.customWidgetMap)
     const formData = props.modelValue ? form : data
     let flag = false
     /**
      * 娣诲姞绛涢�夋潯浠�
      */
-    const onAddFilter = (evt?: Event) => {
-      if (!flag) {
-        evt?.stopPropagation()
+    const onAddFilter = (isInit?: boolean) => {
+      if (isInit) {
+        columnsFilter.value = []
+      }
+      // let length = columnsFilter.value.length
+      // for (let index = 0; index < props.columns.length; index++) {
+      //   const element: any = props.columns[index]
+      //   if (element.el && !columnsFilter.value.includes(element)) {
+      //     columnsFilter.value.push(element)
+      //     break
+      //   }
+      // }
+      columnsFilter.value = props.columns
 
-        let length = columnsFilter.value.length
-        for (let index = 0; index < props.columns.length; index++) {
-          const element: any = props.columns[index]
-          if (element.el && !columnsFilter.value.includes(element)) {
-            columnsFilter.value.push(element)
-            break
-          }
-        }
-        if (length === columnsFilter.value.length - 1) {
-          isDisabled.value = true
-        }
+      if (props.columns.length === columnsFilter.value.length) {
+        isDisabled.value = true
       }
     }
 
@@ -180,11 +196,11 @@
     watch(
       () => props.columns,
       (val) => {
-        if (props.columns.length) {
-          onAddFilter()
-          initDisabled()
-          flag = true
-        }
+        // if (props.columns.length) {
+        onAddFilter(true)
+        initDisabled()
+        flag = true
+        // }
       },
       {
         immediate: true,
@@ -193,11 +209,11 @@
     )
 
     onMounted(() => {
-      if (props.columns.length) {
-        onAddFilter()
-        initDisabled()
-        flag = true
-      }
+      // if (props.columns.length) {
+      onAddFilter(true)
+      initDisabled()
+      flag = true
+      // }
       defaultData.value = { ...props.modelValue }
       document.addEventListener('click', onListener)
     })
@@ -241,9 +257,9 @@
     }
 
     const onClickBtn = (evt: Event) => {
-      evt.stopPropagation()
-      flag = false
-      onAddFilter()
+      // evt.stopPropagation()
+      // flag = false
+      // onAddFilter()
     }
 
     /**
@@ -260,9 +276,10 @@
             label: string
             description: string
             value: string | number
+            name: string
           }) => (
             <Option
-              label={el.description || el.label}
+              label={el.description || el.label || el.name}
               value={el.value}
             ></Option>
           )
@@ -273,21 +290,23 @@
 
     return () => {
       const icon = isDisabled.value ? 'icon_add2' : 'add-p'
+
       return (
         <div onClick={onChildClick}>
           <el-popover
             visible={visible.value}
             placement="bottom-start"
-            width={212}
+            width={330}
             show-arrow={false}
             popper-class={styles.popover}
             persistent={false}
             popper-style={{
               marginTop: '-7px',
-              padding: '8px',
+              padding: '10px',
+              paddingBottom: '8px',
             }}
             trigger="click"
-            vSlots={{
+            v-slots={{
               reference: () => (
                 <span class={{ [styles.textColor]: hasFormData.value }}>
                   {slots.default?.()}
@@ -306,15 +325,16 @@
                 const Widget = formItemElementMap[column.el] || null
                 return Widget ? (
                   <div class={styles.filter}>
-                    <span>{column.title}: </span>
+                    <span class={styles.span}>{_t.value(column.title)}: </span>
                     <Widget
                       v-model={formData.value[column.prop]}
-                      style="width: 119px"
-                      size="small"
-                      placeholder={`${column.placeholder}`}
+                      style="width: 160px;margin-left: 16px"
+                      // size="small"
+                      placeholder={_t.value(`${column.placeholder}`)}
                       onChange={onSearchTable}
                       clearable
                       teleported={false}
+                      {...column}
                     >
                       <Column item={column} />
                     </Widget>
@@ -322,13 +342,13 @@
                 ) : null
               })}
             </div>
-            <IconButton
+            {/* <IconButton
               onClick={onClickBtn}
               icon={icon}
               disabled={isDisabled.value}
             >
               {props.text}
-            </IconButton>
+            </IconButton> */}
           </el-popover>
         </div>
       )

--
Gitblit v1.9.3