index.wxml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <view wx:for="{{form}}" wx:key="valueName" data-name="{{item.valueName}}">
  2. <view hidden="{{ !item.required && !showAll }}">
  3. <!-- <van-transition show="{{ item.required || showAll }}" name="fade" custom-class="block"> -->
  4. <!-- 单列选择器 -->
  5. <view class="picker" wx:if="{{item.type=='selector'}}">
  6. <view class="label">
  7. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  8. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  9. </view>
  10. <view style="position: relative;">
  11. <view class="picker-slot" wx:if="{{item.slot}}">
  12. <slot name="{{item.slot}}" />
  13. </view>
  14. <picker mode='selector' range="{{item.range}}" range-key='{{item.rangeKey}}' value="{{item.rangeIndex}}" disabled="{{item.disabled}}" data-item="{{item}}" data-index="{{index}}" bindchange="bindSelectorChange">
  15. <view class="content">
  16. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  17. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  18. </view>
  19. </picker>
  20. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  21. </view>
  22. </view>
  23. <!-- 多列选择器 -->
  24. <view class="picker" wx:elif="{{item.type=='multiSelector'}}">
  25. <view class="label">
  26. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  27. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  28. </view>
  29. <view style="position: relative;">
  30. <view class="picker-slot" wx:if="{{item.slot}}">
  31. <slot name="{{item.slot}}" />
  32. </view>
  33. <picker mode='multiSelector' range="{{item.range}}" range-key='{{item.rangeKey}}' value="{{item.rangeIndex}}" disabled="{{item.disabled}}" data-item="{{item}}" data-index="{{index}}" bindchange="bindMultiSelectorChange" bindcolumnchange="bindcolumnchange">
  34. <view class="content">
  35. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{language[item.value]||item.value}}</text>
  36. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  37. </view>
  38. </picker>
  39. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  40. </view>
  41. </view>
  42. <!-- 日期选择器 -->
  43. <view class="picker" wx:elif="{{item.type=='date'}}">
  44. <view class="label">
  45. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  46. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  47. </view>
  48. <view style="position: relative;">
  49. <view class="picker-slot" wx:if="{{item.slot}}">
  50. <slot name="{{item.slot}}" />
  51. </view>
  52. <picker mode='date' value="{{item.value}}" disabled="{{item.disabled}}" fields='{{item.fields||"day"}}' start="{{item.start}}" end="{{item.end}}" data-item="{{item}}" bindchange="bindDateChange">
  53. <view class="content">
  54. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value}}</text>
  55. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  56. </view>
  57. </picker>
  58. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  59. </view>
  60. </view>
  61. <!-- 日期范围选择器 -->
  62. <view class="picker" wx:elif="{{item.type=='dateRange'}}">
  63. <view class="label">
  64. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  65. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  66. </view>
  67. <view style="position: relative;">
  68. <view class="picker-slot" wx:if="{{item.slot}}">
  69. <slot name="{{item.slot}}" />
  70. </view>
  71. <view class="content" style="display: flex;">
  72. <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">
  73. <text wx:if="{{item.value[0]}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value[0]}}</text>
  74. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder[0]]||item.placeholder[0]}}</text>
  75. </picker>
  76. <view style="margin: 0 20rpx;color: #000;">{{language['至']||'至'}}</view>
  77. <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">
  78. <text wx:if="{{item.value[1]}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value[1]}}</text>
  79. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder[1]]||item.placeholder[1]}}</text>
  80. </picker>
  81. </view>
  82. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  83. </view>
  84. </view>
  85. <!-- 时间选择器 -->
  86. <view class="picker" wx:elif="{{item.type=='time'}}">
  87. <view class="label">
  88. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  89. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  90. </view>
  91. <view style="position: relative;">
  92. <view class="picker-slot" wx:if="{{item.slot}}">
  93. <slot name="{{item.slot}}" />
  94. </view>
  95. <picker mode='time' value="{{item.value}}" disabled="{{item.disabled}}" fields='{{item.fields}}' start="{{item.start}}" end="{{item.end}}" data-item="{{item}}" bindchange="bindDateChange">
  96. <view class="content">
  97. <text wx:if="{{item.value}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value}}</text>
  98. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  99. </view>
  100. </picker>
  101. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  102. </view>
  103. </view>
  104. <!-- 省市县选择器 -->
  105. <view class="picker" wx:elif="{{item.type=='region'}}">
  106. <view class="label">
  107. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  108. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  109. </view>
  110. <view style="position: relative;">
  111. <view class="picker-slot" wx:if="{{item.slot}}">
  112. <slot name="{{item.slot}}" />
  113. </view>
  114. <picker mode='region' value="{{item.value}}" disabled="{{item.disabled}}" data-item="{{item}}" bindchange="bindRegionChange">
  115. <view class="content">
  116. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value}}</text>
  117. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  118. </view>
  119. </picker>
  120. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  121. </view>
  122. </view>
  123. <!-- 性别 -->
  124. <view class="picker" wx:elif="{{item.type=='sex'}}">
  125. <view class="label">
  126. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  127. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  128. </view>
  129. <view style="position: relative;">
  130. <view class="content">
  131. <van-radio-group value="{{ item.value }}" data-item="{{item}}" bind:change="sexChange">
  132. <view style="display: flex;">
  133. <van-radio icon-size='16' custom-class='radio' name="男">{{language['男']||'男'}}</van-radio>
  134. <van-radio icon-size='16' name="女">{{language['女']||'女'}}</van-radio>
  135. </view>
  136. </van-radio-group>
  137. </view>
  138. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  139. </view>
  140. </view>
  141. <!-- 单选 选择器 -->
  142. <view class="picker" wx:elif="{{item.type=='radio'}}">
  143. <view class="label">
  144. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  145. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  146. </view>
  147. <view style="position: relative;">
  148. <view class="content">
  149. <van-radio-group direction='{{item.direction||"vertical"}}' value="{{ item.value }}" data-item="{{item}}" disabled="{{item.disabled||false}}" bind:change="radioChange">
  150. <van-radio wx:for="{{item.radioList}}" wx:for-item="it" wx:for-index="i" wx:key="name" icon-size="16" custom-class="radio {{i != 0&&item.direction!='horizontal' ? 'radio_margin_top' : '' }}" name="{{it.id}}">
  151. {{language[it.name]||it.name}}
  152. </van-radio>
  153. </van-radio-group>
  154. </view>
  155. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  156. </view>
  157. </view>
  158. <!-- 异步类型选择 -->
  159. <view class="picker" wx:elif="{{item.type=='option'}}">
  160. <view class="label">
  161. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  162. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  163. </view>
  164. <view style="position: relative;">
  165. <view class="content" style="justify-content: space-between; display: flex; align-items: flex-start;" data-item="{{item}}" bindtap="toOptions">
  166. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};">{{item.value}}</text>
  167. <text wx:else style="color: {{item.error?'#EE4C4E':''}};">{{language[item.placeholder]||item.placeholder}}</text>
  168. <view wx:if="{{ item.value[0] && !item.interrupt}}" class="iconfont icon-quxiao" catch:tap="clearItem" data-index="{{index}}" />
  169. <van-icon wx:else name="arrow" style="flex-shrink: 0; margin-top: 12rpx;" />
  170. </view>
  171. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  172. </view>
  173. </view>
  174. <!-- 跳转路由选择 值使用数组,0保存显示名称,1保存ID -->
  175. <view class="picker" wx:elif="{{item.type=='route'}}">
  176. <view class="label">
  177. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  178. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  179. </view>
  180. <view style="position: relative;">
  181. <view class="content" style="justify-content: space-between; display: flex; align-items: flex-start;" data-item="{{item}}" bindtap="route">
  182. <text wx:if="{{item.value.length}}" style="color:{{item.disabled?'#C8C9CC':'#000'}};flex: 1;">{{language[item.value[0]]||item.value[0]}}</text>
  183. <text wx:else style="color: {{item.error?'#EE4C4E':''}};flex: 1;">{{language[item.placeholder]||item.placeholder}}</text>
  184. <view wx:if="{{item.slot}}">
  185. <slot name="{{item.slot}}" />
  186. </view>
  187. <view wx:if="{{ item.value[0] && !item.interrupt && !item.disabled}}" class="iconfont icon-quxiao" catch:tap="clearItem" data-index="{{index}}" />
  188. <van-icon wx:else name="arrow" style="flex-shrink: 0; margin-top: 12rpx;" />
  189. </view>
  190. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  191. </view>
  192. </view>
  193. <!-- 固定电话输入 -->
  194. <view class="picker" wx:elif="{{item.type=='telephone'}}">
  195. <view class="label">
  196. <text class="need" style="color: {{item.required?'#EE0A24':'rgba(0,0,0,0)'}};">*</text>
  197. <text class="text" style="color:{{item.disabled?'#C8C9CC':''}};">{{language[item.label]||item.label}}</text>
  198. </view>
  199. <view style="position: relative;">
  200. <view class="content telephone">
  201. <input class="area-code" disabled="{{item.disabled||false}}" placeholder-class='telephone-p' data-item="{{item}}" data-i="0" bindinput="inputChange" type="number" value="{{item.value[0]}}" maxlength='4' placeholder="区号" /><text>-</text><input disabled="{{item.disabled||false}}" class="phone" placeholder-class='telephone-p' data-item="{{item}}" data-i="1" bindinput="inputChange" type="number" value="{{item.value[1]}}" maxlength='8' placeholder="号码" />
  202. </view>
  203. <view wx:if="{{item.errMsg}}" class="error-tips">{{language[item.errMsg]||item.errMsg}}</view>
  204. </view>
  205. </view>
  206. <!-- 输入框 -->
  207. <van-field wx:else label="{{language[item.label]||item.label}}" required="{{item.required}}" maxlength="{{item.maxlength||'-1'}}" 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" bind:blur='onBlur' data-item="{{item}}">
  208. <view slot='button' style="display: flex;">
  209. <view wx:if="{{item.slot}}" style="margin-right: 8rpx;">
  210. <slot name="{{item.slot}}" />
  211. </view>
  212. <Yl_VoiceInput wx:if="{{ item.type=='text'|| item.type=='textarea' || item.type == 'digit' && languagecode =='ZH' && !item.disabled}}" data-index="{{index}}" bindcallback="onVoiceInput" />
  213. </view>
  214. </van-field>
  215. </view>
  216. <!-- </van-transition> -->
  217. </view>