radio.uvue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <cl-page>
  3. <view class="p-3">
  4. <demo-item :label="t('基础用法')">
  5. <view class="flex flex-row flex-wrap">
  6. <cl-radio
  7. v-model="checked2"
  8. v-for="(item, index) in options"
  9. :key="index"
  10. :value="item.value"
  11. :pt="{
  12. className: 'mr-5'
  13. }"
  14. >
  15. {{ item.label }}
  16. </cl-radio>
  17. </view>
  18. </demo-item>
  19. <demo-item :label="t('纵向排列')">
  20. <cl-radio
  21. v-model="checked"
  22. v-for="(item, index) in options"
  23. :key="index"
  24. :value="item.value"
  25. :pt="{
  26. className: parseClass([
  27. 'my-2',
  28. [
  29. isVerticalCustom,
  30. 'justify-between border border-solid border-surface-200 rounded-lg p-2 !my-1'
  31. ]
  32. ])
  33. }"
  34. >
  35. {{ item.label }}
  36. </cl-radio>
  37. <cl-list
  38. border
  39. :pt="{
  40. className: 'mt-2'
  41. }"
  42. >
  43. <cl-list-item :label="t('换个样式')">
  44. <cl-switch v-model="isVerticalCustom"></cl-switch>
  45. </cl-list-item>
  46. </cl-list>
  47. </demo-item>
  48. <demo-item :label="t('自定义')">
  49. <view class="mb-3 flex flex-row flex-wrap">
  50. <cl-radio
  51. v-model="checked3"
  52. v-for="(item, index) in options"
  53. :key="index"
  54. :value="item.value"
  55. :disabled="isDisabled"
  56. :show-icon="!isHideIcon"
  57. :active-icon="isIcon ? 'heart-fill' : 'checkbox-circle-line'"
  58. :inactive-icon="isIcon ? 'heart-line' : 'checkbox-blank-circle-line'"
  59. :pt="{
  60. className: parseClass([
  61. 'mr-5',
  62. [isCustom, 'bg-surface-100 py-2 px-3 rounded-lg !mr-2 !mb-2'],
  63. {
  64. '!bg-surface-700': isDark && isCustom
  65. }
  66. ])
  67. }"
  68. >
  69. {{ item.label }}
  70. </cl-radio>
  71. </view>
  72. <cl-list border>
  73. <cl-list-item :label="t('换个图标')">
  74. <cl-switch v-model="isIcon"></cl-switch>
  75. </cl-list-item>
  76. <cl-list-item :label="t('不显示图标')">
  77. <cl-switch v-model="isHideIcon"></cl-switch>
  78. </cl-list-item>
  79. <cl-list-item :label="t('禁用')">
  80. <cl-switch v-model="isDisabled"></cl-switch>
  81. </cl-list-item>
  82. <cl-list-item :label="t('其他样式')">
  83. <cl-switch v-model="isCustom"></cl-switch>
  84. </cl-list-item>
  85. </cl-list>
  86. </demo-item>
  87. </view>
  88. </cl-page>
  89. </template>
  90. <script lang="ts" setup>
  91. import { ref } from "vue";
  92. import DemoItem from "../components/item.uvue";
  93. import { parseClass } from "@/cool";
  94. import { useUi, type ClRadioOption } from "@/uni_modules/cool-ui";
  95. import { isDark } from "@/cool";
  96. import { t } from "@/locale";
  97. const ui = useUi();
  98. const isIcon = ref(false);
  99. const isCustom = ref(false);
  100. const isDisabled = ref(false);
  101. const isHideIcon = ref(false);
  102. const isVerticalCustom = ref(false);
  103. const checked = ref("1");
  104. const checked2 = ref("2");
  105. const checked3 = ref("3");
  106. const options = ref<ClRadioOption[]>([
  107. {
  108. label: "Vue",
  109. value: "1"
  110. },
  111. {
  112. label: "React",
  113. value: "2"
  114. },
  115. {
  116. label: "Angular",
  117. value: "3"
  118. },
  119. {
  120. label: "Svelte",
  121. value: "4"
  122. }
  123. ]);
  124. </script>