generate-form.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <view>
  3. <form>
  4. <view class="cu-form-group" v-if="item.readable" :class="index===0?'margin-top':''" v-for="(item,index) in formData" :key="index">
  5. <view class="title">
  6. <text class="red-color " v-if="item.options.required">* </text> {{item.name}}
  7. </view>
  8. <template v-if="item.type=='input'">
  9. <!-- 普通输入框 -->
  10. <input :placeholder='item.placeholder' :disabled="!item.writable" v-model="item.value"></input>
  11. </template>
  12. <template v-if="item.type=='textarea' || item.type=='editor'">
  13. <!-- 多行文本输入框 -->
  14. <textarea maxlength="-1" :placeholder='item.placeholder' :disabled="!item.writable" v-model="item.value"></textarea>
  15. </template>
  16. <template v-if="item.type=='number'">
  17. <!-- 普通输入框 -->
  18. <input type="number" :placeholder='item.placeholder' :disabled="!item.writable" v-model="item.value"></input>
  19. </template>
  20. <template v-if="item.type=='radio'">
  21. <!-- 单选框 -->
  22. <jp-radio-group v-if="item.options.remote === 3" v-model="item.value">
  23. <label v-for="(option, index) in $dictUtils.getDictList(item.options.dictType)">
  24. <view>
  25. {{option.label}}
  26. <radio class='blue radio' :disabled="!item.writable" :value="option.value" :class="item.value==option.value?'checked':''" :checked="item.value==option.value?true:false" ></radio>
  27. </view>
  28. </label>
  29. </jp-radio-group>
  30. <jp-radio-group v-else-if="item.options.showLabel" v-model="item.value">
  31. <label v-for="(option, index) in item.options.options">
  32. <view>
  33. {{option.label}}
  34. <radio class='blue radio' :disabled="!item.writable" :value="option.value" :class="item.value==option.value?'checked':''" :checked="item.value==option.value?true:false" ></radio>
  35. </view>
  36. </label>
  37. </jp-radio-group>
  38. <jp-radio-group v-else v-model="item.value">
  39. <label v-for="(option, index) in item.options.options">
  40. <view>
  41. {{option.value}}
  42. <radio class='blue radio' :disabled="!item.writable" :value="option.value" :checked="item.value==option.value?true:false" ></radio>
  43. </view>
  44. </label>
  45. </jp-radio-group>
  46. </template>
  47. <template v-if="item.type=='checkbox'">
  48. <jp-checkbox-group v-if="item.options.remote === 3" v-model="item.value">
  49. <label v-for="(option, index) in $dictUtils.getDictList(item.options.dictType)">
  50. <view>
  51. {{option.label || option.value}}
  52. <checkbox :disabled="!item.writable" class="blue" :value="option.value" :class="(','+item.value+',').indexOf(','+option.value+',')>=0?'checked':''" :checked="(','+item.value+',').indexOf(','+option.value+',')>=0" ></checkbox>
  53. </view>
  54. </label>
  55. </jp-checkbox-group>
  56. <jp-checkbox-group v-else-if="item.options.showLabel" v-model="item.value">
  57. <label v-for="(option, index) in item.options.options">
  58. <view>
  59. {{option.label}}
  60. <checkbox :disabled="!item.writable" class="blue" :value="option.value" :class="(','+item.value+',').indexOf(','+option.value+',')>=0?'checked':''" :checked="(','+item.value+',').indexOf(','+option.value+',')>=0" ></checkbox>
  61. </view>
  62. </label>
  63. </jp-checkbox-group>
  64. <jp-checkbox-group v-else v-model="item.value">
  65. <label v-for="(option, index) in item.options.options">
  66. <view>
  67. {{option.value}}
  68. <checkbox class="blue" :disabled="!item.writable" :value="option.value" :class="(','+item.value+',').indexOf(','+option.value+',')>=0?'checked':''" :checked="(','+item.value+',').indexOf(','+option.value+',')>=0" ></checkbox>
  69. </view>
  70. </label>
  71. </jp-checkbox-group>
  72. </template>
  73. <template v-if="item.type=='time'">
  74. <!-- 时间控件 -->
  75. <jp-datetime-picker v-model="item.value" :placeholder='item.placeholder' :disabled="!item.writable" mode="time"></jp-datetime-picker>
  76. </template>
  77. <template v-if="item.type=='date'">
  78. <!-- 日期控件 -->
  79. <jp-datetime-picker v-model="item.value" :placeholder='item.placeholder' :disabled="!item.writable" mode="date"></jp-datetime-picker>
  80. </template>
  81. <template v-if="item.type=='rate'">
  82. <!-- 评分 -->
  83. <uni-rate :size="18":disabled="!item.writable" :allowHalf="item.options.allowHalf" v-model="item.value" :max="item.options.max"/>
  84. </template>
  85. <template v-if="item.type=='color'">
  86. <!-- 颜色选择框 -->
  87. <jp-color-picker :disabled="!item.writable" v-model="item.value" ></jp-color-picker>
  88. </template>
  89. <template v-if="item.type=='select'">
  90. <!-- 选择框 -->
  91. <jp-picker :disabled="!item.writable" v-if="item.options.remote === 3" v-model="item.value" :range="$dictUtils.getDictList(item.options.dictType)">
  92. </jp-picker>
  93. <jp-picker :disabled="!item.writable" v-else-if="item.options.showLabel" v-model="item.value" :range="item.options.options">
  94. </jp-picker>
  95. <jp-picker :disabled="!item.writable" v-else v-model="item.value" rangeKey="value" :range="item.options.options">
  96. </jp-picker>
  97. </template>
  98. <template v-if="item.type=='switch'">
  99. <!-- 开关 -->
  100. <jp-switch :placeholder='item.placeholder' :disabled="!item.writable" v-model="item.value"></jp-switch>
  101. </template>
  102. <template v-if="item.type=='slider'">
  103. <!-- 滑块 -->
  104. <jp-slider :placeholder='item.placeholder' :disabled="!item.writable" v-model="item.value"></jp-slider>
  105. </template>
  106. <template v-if="item.type=='text'">
  107. <!-- 普通输入框 -->
  108. <text>{{item.value}}</text>
  109. </template>
  110. <template v-if="item.type=='html'">
  111. <!-- 普通输入框 -->
  112. <view v-html="item.value"></view>
  113. </template>
  114. <template v-if="item.type=='imgupload' || item.type=='fileupload'">
  115. <!-- 图片上传 -->
  116. <jp-image-upload :disabled="!item.writable" v-model="item.value"></jp-image-upload>
  117. </template>
  118. <template v-if="item.type=='user'">
  119. <!-- 用户选择框 -->
  120. <user-select :disabled="!item.writable" v-model="item.value"></user-select>
  121. </template>
  122. <template v-if="item.type=='office'">
  123. <!-- 机构选择框 -->
  124. <jp-office-select :disabled="!item.writable" v-model="item.value"></jp-office-select>
  125. </template>
  126. <template v-if="item.type=='area'">
  127. <!-- 普通输入框 -->
  128. <jp-area-select :disabled="!item.writable" v-model="item.value"></jp-area-select>
  129. </template>
  130. <template v-if="item.type=='dict'">
  131. <!-- 字典 -->
  132. <jp-picker :disabled="!item.writable" v-model="item.value" :range="$dictUtils.getDictList(item.options.dictType)"></jp-picker>
  133. </template>
  134. </view>
  135. </form>
  136. </view>
  137. </template>
  138. <script>
  139. export default {
  140. name: 'activeForm',
  141. watch:{
  142. formData:{
  143. handler (val) {
  144. console.log(this.formData)
  145. },
  146. immediate: true,
  147. deep: false
  148. }
  149. },
  150. props: {
  151. formData:{
  152. type:Array,
  153. default:function(){
  154. return []
  155. }
  156. }
  157. },
  158. methods: {
  159. }
  160. }
  161. </script>
  162. <style lang="scss">
  163. .uni-list-cell {
  164. justify-content: flex-start
  165. }
  166. .cu-form-group{
  167. uni-checkbox-group{
  168. text-align: right;
  169. }
  170. uni-radio-group {
  171. text-align: right;
  172. }
  173. uni-checkbox, uni-radio {
  174. position: relative;
  175. margin-top: 7px;
  176. margin-left:7px;
  177. margin-bottom: 7px;
  178. }
  179. }
  180. </style>