component.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { css } from "@linaria/core";
  2. import { isPc } from "@queenjs/utils";
  3. import { onMounted, ref } from "vue";
  4. import { any } from "vue-types";
  5. import { options } from ".";
  6. import { Text } from "../..";
  7. import { createUIComp } from "../../defines/createUIComp";
  8. export const Component = createUIComp({
  9. props: {
  10. value: any<typeof options.value>().isRequired,
  11. },
  12. setup(props) {
  13. const elRef = ref();
  14. onMounted(() => {
  15. elRef.value.style.height = isPc()
  16. ? "12.8rem"
  17. : document.documentElement.clientHeight + "px";
  18. });
  19. return () => {
  20. return (
  21. <div class={compStyle} ref={elRef}>
  22. <Text.Component
  23. class="title"
  24. v-model={[props.value.title, "value"]}
  25. />
  26. <div class="arrow">↓</div>
  27. </div>
  28. );
  29. };
  30. },
  31. });
  32. const compStyle = css`
  33. .title {
  34. margin-top: 1.4rem;
  35. }
  36. .arrow {
  37. position: absolute;
  38. left: 50%;
  39. bottom: 0.42rem;
  40. width: 0.7rem;
  41. height: 0.7rem;
  42. line-height: 0.7rem;
  43. text-align: center;
  44. color: #fff;
  45. border: 2px solid #fff;
  46. border-radius: 50%;
  47. transform: translateX(-50%);
  48. }
  49. `;