size-set.uvue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <cl-select
  3. ref="selectRef"
  4. v-model="size"
  5. :title="t('全局字号')"
  6. :options="list"
  7. :show-trigger="false"
  8. @changing="onChanging"
  9. >
  10. <template #prepend>
  11. <view class="px-3 absolute top-0 left-0 z-10">
  12. <cl-text
  13. :style="{
  14. fontSize: px2rpx(14) * size + 'rpx'
  15. }"
  16. >{{ t("这是一段示例文字,用于预览不同字号的效果。") }}</cl-text
  17. >
  18. </view>
  19. </template>
  20. </cl-select>
  21. </template>
  22. <script setup lang="ts">
  23. import { px2rpx } from "@/cool";
  24. import { t } from "@/locale";
  25. import { type ClSelectOption } from "@/uni_modules/cool-ui";
  26. import { config } from "@/uni_modules/cool-ui/config";
  27. import { ref } from "vue";
  28. defineOptions({
  29. name: "size-set"
  30. });
  31. const selectRef = ref<ClSelectComponentPublicInstance | null>(null);
  32. // 语言列表
  33. const list = [
  34. {
  35. label: "0.9",
  36. value: 0.9
  37. },
  38. {
  39. label: t("默认 1.0"),
  40. value: 1
  41. },
  42. {
  43. label: "1.1",
  44. value: 1.1
  45. },
  46. {
  47. label: "1.2",
  48. value: 1.2
  49. },
  50. {
  51. label: "1.3",
  52. value: 1.3
  53. },
  54. {
  55. label: "1.4",
  56. value: 1.4
  57. }
  58. ] as ClSelectOption[];
  59. // 当前语言
  60. const size = ref(1);
  61. // 是否可见
  62. const visible = ref(false);
  63. // 打开
  64. function open() {
  65. visible.value = true;
  66. size.value = config.fontSize ?? 1;
  67. selectRef.value!.open((value) => {
  68. config.fontSize = value == 1 ? null : (value as number);
  69. });
  70. }
  71. // 关闭
  72. function close() {
  73. visible.value = false;
  74. }
  75. // 切换
  76. function onChanging(value: number) {
  77. size.value = value;
  78. }
  79. defineExpose({
  80. visible,
  81. open,
  82. close
  83. });
  84. </script>