| | |
| | | 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> |
| | | ) |
| | |
| | | persistent={false} |
| | | popper-style={{ |
| | | marginTop: '-7px', |
| | | padding: '8px', |
| | | padding: '10px', |
| | | }} |
| | | trigger="click" |
| | | vSlots={{ |
| | | reference: BtnRender, |
| | | }} |
| | | > |
| | | {slots.default && slots.default()} |
| | | {slots.default?.()} |
| | | </el-popover> |
| | | ) |
| | | } |
| | |
| | | </span> |
| | | ) |
| | | } |
| | | return <BtnRender /> |
| | | return BtnRender() |
| | | } |
| | | }, |
| | | }) |