index.wxml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <view wx:for="{{form}}" wx:key="valueName" data-name="{{item.valueName}}">
  2. <view hidden="{{ !item.required && !showAll }}">
  3. <!-- 日期选择器 -->
  4. <view class="picker" wx:if="{{item.type=='date'}}">
  5. <view class="label">
  6. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  7. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  8. </view>
  9. <view style="position: relative;">
  10. <view class="picker-slot" wx:if="{{item.slot}}">
  11. <slot name="{{item.slot}}" />
  12. </view>
  13. <picker mode='date' value="{{item.value}}" disabled="{{item.disabled}}" fields='{{item.fields||"day"}}' start="{{item.start}}" end="{{item.end}}" data-item="{{item}}" bindchange="bindDateChange">
  14. <view class="content">
  15. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  16. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  17. </view>
  18. </picker>
  19. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  20. </view>
  21. </view>
  22. <!-- 日期范围选择器 -->
  23. <view class="picker" wx:elif="{{item.type=='dateRange'}}">
  24. <view class="label">
  25. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  26. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  27. </view>
  28. <view style="position: relative;">
  29. <view class="picker-slot" wx:if="{{item.slot}}">
  30. <slot name="{{item.slot}}" />
  31. </view>
  32. <view class="content" style="display: flex;">
  33. <picker mode='date' value="{{item.value[0]}}" disabled="{{item.disabled}}" fields='{{item.fields||"day"}}' start="{{item.start}}" end="{{item.end}}" data-item="{{item}}" data-index="0" bindchange="rangeDateChange">
  34. <text wx:if="{{item.value[0]}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value[0]}}</text>
  35. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{item.placeholder[0]}}</text>
  36. </picker>
  37. <view style="margin: 0 20rpx;color: #000;">{{language['至']||'至'}}</view>
  38. <picker mode='date' value="{{item.value[1]}}" disabled="{{item.disabled}}" fields='{{item.fields||"day"}}' start="{{item.value[0]}}" end="{{item.end}}" data-item="{{item}}" data-index="1" bindchange="rangeDateChange">
  39. <text wx:if="{{item.value[1]}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value[1]}}</text>
  40. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{item.placeholder[1]}}</text>
  41. </picker>
  42. </view>
  43. <view wx:if="{{item.errMsg}}" class="error-tips">{{item.errMsg}}</view>
  44. </view>
  45. </view>
  46. <!-- 时间选择器 -->
  47. <view class="picker" wx:elif="{{item.type=='time'}}">
  48. <view class="label">
  49. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  50. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  51. </view>
  52. <view style="position: relative;">
  53. <view class="picker-slot" wx:if="{{item.slot}}">
  54. <slot name="{{item.slot}}" />
  55. </view>
  56. <picker mode='time' value="{{item.value}}" disabled="{{item.disabled}}" fields='{{item.fields}}' start="{{item.start}}" end="{{item.end}}" data-item="{{item}}" bindchange="bindDateChange">
  57. <view class="content">
  58. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  59. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  60. </view>
  61. </picker>
  62. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  63. </view>
  64. </view>
  65. <!-- 省市县选择器 -->
  66. <view class="picker" wx:elif="{{item.type=='region'}}">
  67. <view class="label">
  68. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  69. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  70. </view>
  71. <view style="position: relative;">
  72. <view class="picker-slot" wx:if="{{item.slot}}">
  73. <slot name="{{item.slot}}" />
  74. </view>
  75. <picker mode='region' value="{{item.value}}" disabled="{{item.disabled}}" data-item="{{item}}" bindchange="bindRegionChange">
  76. <view class="content">
  77. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  78. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  79. </view>
  80. </picker>
  81. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  82. </view>
  83. </view>
  84. <!-- 性别 -->
  85. <view class="picker" wx:elif="{{item.type=='sex'}}">
  86. <view class="label">
  87. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  88. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  89. </view>
  90. <view style="position: relative;">
  91. <view class="content">
  92. <van-radio-group value="{{ item.value }}" data-item="{{item}}" bind:change="sexChange">
  93. <view style="display: flex;">
  94. <van-radio icon-size='16' custom-class='radio' name="男">{{language['男']||'男'}}</van-radio>
  95. <van-radio icon-size='16' name="女">{{language['女']||'女'}}</van-radio>
  96. </view>
  97. </van-radio-group>
  98. </view>
  99. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  100. </view>
  101. </view>
  102. <!-- 单选 选择器 -->
  103. <view class="picker" wx:elif="{{item.type=='radio'}}">
  104. <view class="label">
  105. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  106. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  107. </view>
  108. <view style="position: relative;">
  109. <view class="content">
  110. <van-radio-group value="{{ item.value }}" data-item="{{item}}" bind:change="radioChange">
  111. <van-radio wx:for="{{item.radioList}}" wx:for-item="it" wx:for-index="i" wx:key="it.name" icon-size="16" custom-class="radio {{i != 0 ? 'radio_margin_top' : '' }}" name="{{it.id}}">{{language[it.name]||it.name}}</van-radio>
  112. </van-radio-group>
  113. </view>
  114. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  115. </view>
  116. </view>
  117. <!-- 类型选择 -->
  118. <view class="picker" wx:elif="{{item.type=='option'}}">
  119. <view class="label">
  120. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  121. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  122. </view>
  123. <view style="position: relative;">
  124. <view class="content" style="justify-content: space-between; display: flex; align-items: flex-start;" data-item="{{item}}" bindtap="toOptions">
  125. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  126. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  127. <van-icon name="arrow" style="flex-shrink: 0; margin-top: 12rpx;" />
  128. </view>
  129. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  130. </view>
  131. </view>
  132. <!-- 跳转路由选择 值使用数组,0保存显示名称,1保存ID -->
  133. <view class="picker" wx:elif="{{item.type=='route'}}">
  134. <view class="label">
  135. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  136. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  137. </view>
  138. <view style="position: relative;">
  139. <view class="content" style="justify-content: space-between; display: flex; align-items: flex-start;" data-item="{{item}}" bindtap="route">
  140. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value[0]]||item.value[0]}}</text>
  141. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  142. <van-icon name="arrow" style="flex-shrink: 0; margin-top: 12rpx;" />
  143. </view>
  144. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  145. </view>
  146. </view>
  147. <!-- 输入框 -->
  148. <van-field wx:else label="{{language[item.label]||item.label}}" required="{{item.required}}" value="{{ item.value }}" placeholder="{{language[item.placeholder]||item.placeholder||language['请填写']||'请填写'}}" label-class='label-class' type="{{item.type}}" error="{{item.error}}" error-message='{{item.errMsg}}' disabled="{{item.disabled}}" autosize border="{{ false }}" bind:input="inputChange" data-item="{{item}}">
  149. <slot wx:if="{{item.slot}}" name="{{item.slot}}" slot='button' />
  150. </van-field>
  151. </view>
  152. </view>