checkbox.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="oCheckbox controller" :class="[preview ? '' : 'o-unit']" v-if="widget.type == 'checkbox'">
  3. <van-field
  4. :name="widget.model"
  5. :label="widget.name || '复选框'"
  6. :required="fileCheck ? false : options.required || false"
  7. :disabled="options.disabled || false"
  8. clearable
  9. :rules="rule"
  10. v-if="!preview"
  11. >
  12. <template #input>
  13. <van-checkbox-group v-model="dataModel" :direction="options.inline ? 'horizontal' : 'vertical'">
  14. <van-checkbox shape="square" :name="item.value" v-for="item in options.options" :key="item.value">{{ item.value }}</van-checkbox>
  15. </van-checkbox-group>
  16. </template>
  17. </van-field>
  18. <van-field
  19. v-else
  20. :name="widget.model"
  21. :label="widget.name || '复选框'"
  22. class="preview"
  23. >
  24. <template #input>
  25. <van-checkbox-group disabled v-model="dataModel" :direction="options.inline ? 'horizontal' : 'vertical'">
  26. <van-checkbox shape="square" :name="item.value" v-for="item in options.options" :key="item.value">{{ item.value }}</van-checkbox>
  27. </van-checkbox-group>
  28. </template>
  29. </van-field>
  30. </div>
  31. </template>
  32. <script>
  33. export default {
  34. name: 'oCheckbox',
  35. props: ['widget', 'preview', 'value', 'fileCheck'],
  36. data() {
  37. return {
  38. dataModel: this.widget.options?.defaultValue || null,
  39. }
  40. },
  41. mounted() {
  42. // 初始化参数
  43. if(this.value) {
  44. const widget = this.widget
  45. const model = widget.originModel || widget.model
  46. for(let v in this.value) {
  47. if(v == model) {
  48. this.dataModel = this.value[v]
  49. }
  50. }
  51. }
  52. },
  53. methods: {
  54. },
  55. computed: {
  56. options() {
  57. return this.widget.options || {}
  58. },
  59. rule() {
  60. let rules = this.widget.rules || []
  61. if(rules && rules.length > 0) {
  62. rules.forEach(item => {
  63. if(item.pattern) {
  64. item.pattern = eval(item.pattern)
  65. }
  66. // 判断是否上传文件
  67. if(this.fileCheck) {
  68. item.required = false
  69. }
  70. });
  71. }
  72. return rules
  73. }
  74. },
  75. watch: {
  76. // dataModel: {
  77. // deep: true,
  78. // handler(newValue) {
  79. // if (newValue !== undefined && newValue !== null) {
  80. // }
  81. // }
  82. // },
  83. }
  84. }
  85. </script>
  86. <style lang='less' scoped>
  87. @import url('./controlCommon.less');
  88. .oCheckbox {
  89. /deep/.van-checkbox {
  90. padding: .03rem 0;
  91. }
  92. /deep/.van-checkbox--horizontal {
  93. margin-right: .15rem;
  94. }
  95. }
  96. </style>