size-set.uvue 1.5 KB

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