index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <uni-shadow-root class="weapp-lib-checkbox-index"><view :class="(utils.bem('checkbox', [{ horizontal: direction === 'horizontal' }]))+' custom-class'">
  3. <view v-if="labelPosition === 'left'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
  4. <slot></slot>
  5. </view>
  6. <view class="van-checkbox__icon-wrap" @click="toggle">
  7. <slot v-if="useIconSlot" name="icon"></slot>
  8. <van-icon v-else name="success" size="0.8em" :class="utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }])" :style="computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize)" custom-class="icon-class" custom-style="line-height: 1.25em;"></van-icon>
  9. </view>
  10. <view v-if="labelPosition === 'right'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
  11. <slot></slot>
  12. </view>
  13. </view></uni-shadow-root>
  14. </template>
  15. <wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
  16. <script>
  17. import VanIcon from '../icon/index.vue'
  18. global['__wxVueOptions'] = {components:{'van-icon': VanIcon}}
  19. global['__wxRoute'] = 'weapp/lib/checkbox/index'
  20. "use strict";
  21. Object.defineProperty(exports, "__esModule", { value: true });
  22. var relation_1 = require("../common/relation");
  23. var component_1 = require("../common/component");
  24. function emit(target, value) {
  25. target.$emit('input', value);
  26. target.$emit('change', value);
  27. }
  28. (0, component_1.VantComponent)({
  29. field: true,
  30. relation: (0, relation_1.useParent)('checkbox-group'),
  31. classes: ['icon-class', 'label-class'],
  32. props: {
  33. value: Boolean,
  34. disabled: Boolean,
  35. useIconSlot: Boolean,
  36. checkedColor: String,
  37. labelPosition: {
  38. type: String,
  39. value: 'right',
  40. },
  41. labelDisabled: Boolean,
  42. shape: {
  43. type: String,
  44. value: 'round',
  45. },
  46. iconSize: {
  47. type: null,
  48. value: 20,
  49. },
  50. },
  51. data: {
  52. parentDisabled: false,
  53. direction: 'vertical',
  54. },
  55. methods: {
  56. emitChange: function (value) {
  57. if (this.parent) {
  58. this.setParentValue(this.parent, value);
  59. }
  60. else {
  61. emit(this, value);
  62. }
  63. },
  64. toggle: function () {
  65. var _a = this.data, parentDisabled = _a.parentDisabled, disabled = _a.disabled, value = _a.value;
  66. if (!disabled && !parentDisabled) {
  67. this.emitChange(!value);
  68. }
  69. },
  70. onClickLabel: function () {
  71. var _a = this.data, labelDisabled = _a.labelDisabled, parentDisabled = _a.parentDisabled, disabled = _a.disabled, value = _a.value;
  72. if (!disabled && !labelDisabled && !parentDisabled) {
  73. this.emitChange(!value);
  74. }
  75. },
  76. setParentValue: function (parent, value) {
  77. var parentValue = parent.data.value.slice();
  78. var name = this.data.name;
  79. var max = parent.data.max;
  80. if (value) {
  81. if (max && parentValue.length >= max) {
  82. return;
  83. }
  84. if (parentValue.indexOf(name) === -1) {
  85. parentValue.push(name);
  86. emit(parent, parentValue);
  87. }
  88. }
  89. else {
  90. var index = parentValue.indexOf(name);
  91. if (index !== -1) {
  92. parentValue.splice(index, 1);
  93. emit(parent, parentValue);
  94. }
  95. }
  96. },
  97. },
  98. });
  99. export default global['__wxComponents']['weapp/lib/checkbox/index']
  100. </script>
  101. <style platform="mp-weixin">
  102. @import '../common/index.css';.van-checkbox{align-items:center;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{flex:none}.van-checkbox__icon{align-items:center;border:1px solid var(--checkbox-border-color,#c8c9cc);box-sizing:border-box;color:transparent;display:flex;font-size:var(--checkbox-size,20px);height:1em;justify-content:center;text-align:center;transition-duration:var(--checkbox-transition-duration,.2s);transition-property:color,border-color,background-color;width:1em}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:var(--checkbox-checked-icon-color,#1989fa);color:#fff}.van-checkbox__icon--disabled{background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;color:var(--checkbox-label-color,#323233);padding-left:var(--checkbox-label-margin,10px)}.van-checkbox__label--left{float:left;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
  103. </style>