222
schangxiang@126.com
2025-04-30 9bec4dcae002f36aa23231da11cb03a156b40110
PipeLineLems/web/src/components/IconButton/IconButton.tsx
@@ -16,20 +16,37 @@
  emits: ['click'],
  setup(props: IconButtonProps, { attrs, slots, emit }: SetupContext) {
    const imgName = computed(() => props.icon)
    const imgUrl = () =>
      new URL(`../../assets/images/${imgName.value}.png`, import.meta.url).href
    const VITE_STATIC_URL = process.env.VITE_STATIC_URL || ''
    let status = attrs.status === undefined ? true : attrs.status
    let isAdd = attrs.status === 'add'
    const imgUrl = () => {
      let baseDir = 'images'
      let name = imgName.value
      if (imgName.value) {
        if (imgName.value.includes('files/')) {
          baseDir = 'files'
          name = imgName.value.split('/')[1]
        }
      }
      return `${VITE_STATIC_URL}/resources/assets/${baseDir}/${name}.png`
    }
    const BtnRender = () => {
      return (
        <el-button
          {...attrs}
          type={props.type}
          text
          class={styles.btn}
          class={{
            [styles.btn]: true,
            [styles.status]: attrs.disabled ? false : status,
          }}
          onClick={(evt: Event) => emit('click', evt)}
        >
          {imgName.value ? <img src={imgUrl()} class={styles.img} /> : null}
          <span style={props.type === 'primary' ? { color: '#5a84ff' } : {}}>
            {slots.default && slots.default()}
            {slots.default?.()}
          </span>
        </el-button>
      )
@@ -44,14 +61,14 @@
          persistent={false}
          popper-style={{
            marginTop: '-7px',
            padding: '8px',
            padding: '10px',
          }}
          trigger="click"
          vSlots={{
            reference: BtnRender,
          }}
        >
          {slots.default && slots.default()}
          {slots.default?.()}
        </el-popover>
      )
    }
@@ -63,7 +80,7 @@
          </span>
        )
      }
      return <BtnRender />
      return BtnRender()
    }
  },
})