index.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { use } from '../utils';
  2. import Icon, { IconEvents } from '../icon';
  3. import { emit, inherit } from '../utils/functional';
  4. import { functionalRoute, routeProps, RouteProps } from '../utils/router';
  5. // Types
  6. import { CreateElement, RenderContext } from 'vue/types';
  7. import { DefaultSlots } from '../utils/use/sfc';
  8. export type GoodsActionMiniBtnProps = RouteProps & {
  9. icon: string;
  10. text?: string;
  11. info?: string | number;
  12. iconClass?: any;
  13. };
  14. const [sfc, bem] = use('goods-action-mini-btn');
  15. function GoodsActionMiniBtn(
  16. h: CreateElement,
  17. props: GoodsActionMiniBtnProps,
  18. slots: DefaultSlots,
  19. ctx: RenderContext<GoodsActionMiniBtnProps>
  20. ) {
  21. const onClick = (event: Event) => {
  22. emit(ctx, 'click', event);
  23. functionalRoute(ctx);
  24. };
  25. return (
  26. <div class={[bem(), 'van-hairline']} onClick={onClick} {...inherit(ctx)}>
  27. <Icon
  28. class={[bem('icon'), props.iconClass]}
  29. tag="div"
  30. info={props.info}
  31. name={props.icon}
  32. />
  33. {slots.default ? slots.default() : props.text}
  34. </div>
  35. );
  36. }
  37. GoodsActionMiniBtn.props = {
  38. ...routeProps,
  39. text: String,
  40. icon: String,
  41. info: [String, Number],
  42. iconClass: null as any
  43. };
  44. export default sfc<GoodsActionMiniBtnProps, IconEvents>(GoodsActionMiniBtn);