index.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template src="./template.html"></template>
  2. <script lang="ts">
  3. import { computed } from 'vue';
  4. import { createComponent } from '@/packages/utils/create';
  5. import { useRouter } from '@/packages/utils/useRoute';
  6. import { pxCheck } from '@/packages/utils/pxCheck';
  7. const { componentName, create } = createComponent('cell');
  8. export default create({
  9. props: {
  10. title: { type: String, default: '' },
  11. subTitle: { type: String, default: '' },
  12. desc: { type: String, default: '' },
  13. descTextAlign: { type: String, default: 'right' },
  14. isLink: { type: Boolean, default: false },
  15. to: [String, Object],
  16. replace: { type: Boolean, default: false },
  17. roundRadius: { type: [String, Number], default: '' },
  18. url: { type: String, default: '' },
  19. icon: { type: String, default: '' },
  20. rightIcon: { type: String, default: 'right' },
  21. center: { type: Boolean, default: false },
  22. size: { type: String, default: '' } // large
  23. },
  24. emits: ['click'],
  25. setup(props, { emit }) {
  26. const classes = computed(() => {
  27. const prefixCls = componentName;
  28. return {
  29. [prefixCls]: true,
  30. [`${prefixCls}--clickable`]: props.isLink || props.to,
  31. [`${prefixCls}--center`]: props.center,
  32. [`${prefixCls}--large`]: props.size == 'large'
  33. };
  34. });
  35. const router = useRouter();
  36. const baseStyle = computed(() => {
  37. return {
  38. borderRadius: pxCheck(props.roundRadius)
  39. };
  40. });
  41. const handleClick = (event: Event) => {
  42. emit('click', event);
  43. if (props.to && router) {
  44. router[props.replace ? 'replace' : 'push'](props.to);
  45. // if(props.replace){
  46. // router.replace(props.to)
  47. // }else{
  48. // router.push(props.to)
  49. // }
  50. } else if (props.url) {
  51. props.replace ? location.replace(props.url) : (location.href = props.url);
  52. }
  53. };
  54. return {
  55. handleClick,
  56. classes,
  57. baseStyle
  58. };
  59. }
  60. });
  61. </script>