fa-fields.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <template>
  2. <view class="fields">
  3. <block v-for="(item, index) in fields" :key="index">
  4. <!-- 地点 -->
  5. <view class="item" v-if="item.type == 'city'">
  6. <view class="u-m-b-30 text-weight u-font-30">
  7. <view class="u-item-title" v-text="item.title"></view>
  8. </view>
  9. <view class="content u-flex">
  10. <u-icon name="map"></u-icon>
  11. <text class="u-m-l-10" :selectable="true">{{ item.value }}</text>
  12. </view>
  13. </view>
  14. <!-- 定位 -->
  15. <view class="item" v-if="item.type == 'location'">
  16. <view class="u-m-b-30 text-weight u-font-30">
  17. <view class="u-item-title" v-text="item.title"></view>
  18. </view>
  19. <view class="content u-flex" @click="lookMap(item.value)">
  20. <u-icon name="map"></u-icon>
  21. <text class="u-m-l-10" :selectable="true">{{ item.value && item.value.address }}</text>
  22. </view>
  23. </view>
  24. <!-- 文本,数字 -->
  25. <view class="item" v-if="['string', 'text', 'number', 'selectpage'].indexOf(item.type) != -1">
  26. <view class="u-m-b-30 text-weight u-font-30">
  27. <view class="u-item-title" v-text="item.title"></view>
  28. </view>
  29. <view class="content u-flex">
  30. <text class="u-m-l-10" :selectable="true">{{ item.value }}</text>
  31. </view>
  32. </view>
  33. <!-- 文件下载 -->
  34. <view class="item" v-if="['files', 'file'].indexOf(item.type) != -1"><fa-download :item="item"></fa-download></view>
  35. <!-- 列表 -->
  36. <view class="item" v-if="item.type == 'select' || item.type == 'radio'">
  37. <view class="u-m-b-30 text-weight u-font-30">
  38. <view class="u-item-title" v-text="item.title"></view>
  39. </view>
  40. <view class="content u-flex">
  41. <text class="u-m-l-10" :selectable="true">{{ item.content_list[item.value] }}</text>
  42. </view>
  43. </view>
  44. <!-- 开关 -->
  45. <view class="item" v-if="item.type == 'switch'">
  46. <view class="u-m-b-30 text-weight u-font-30">
  47. <view class="u-item-title" v-text="item.title"></view>
  48. </view>
  49. <view class="content u-flex">
  50. <text class="u-m-l-10">{{ item.value }}</text>
  51. </view>
  52. </view>
  53. <!-- 关联多选 -->
  54. <view class="item" v-if="item.type == 'selectpages'">
  55. <view class="u-m-b-30 text-weight u-font-30">
  56. <view class="u-item-title" v-text="item.title"></view>
  57. </view>
  58. <view class="content u-flex">
  59. <text class="u-m-l-10" :selectable="true">{{ item.value.join(',') }}</text>
  60. </view>
  61. </view>
  62. <!-- 列表多选 -->
  63. <view class="item" v-if="item.type == 'selects' || item.type == 'checkbox'">
  64. <view class="u-m-b-30 text-weight u-font-30">
  65. <view class="u-item-title" v-text="item.title"></view>
  66. </view>
  67. <view class="content u-flex">
  68. <text class="u-m-l-10">{{ listSelects(item) }}</text>
  69. </view>
  70. </view>
  71. <!-- 图 -->
  72. <view class="item" v-if="['images', 'image'].indexOf(item.type) != -1"><fa-images :item="item"></fa-images></view>
  73. <!-- 富文本 -->
  74. <view class="item" v-if="item.type == 'editor'">
  75. <view class="u-m-b-30 text-weight u-font-30">
  76. <view class="u-item-title" v-text="item.title"></view>
  77. </view>
  78. <view class="content u-flex">
  79. <u-parse
  80. :html="item.value"
  81. :tag-style="vuex_parse_style"
  82. :domain="vuex_config.upload ? vuex_config.upload.cdnurl : ''"
  83. @linkpress="navigate"
  84. ></u-parse>
  85. </view>
  86. </view>
  87. <!-- 时间 -->
  88. <view class="item" v-if="['date', 'time', 'datetime', 'datetimerange'].indexOf(item.type) != -1">
  89. <view class="u-m-b-30 text-weight u-font-30">
  90. <view class="u-item-title" v-text="item.title"></view>
  91. </view>
  92. <view class="content u-flex">
  93. <u-icon name="clock"></u-icon>
  94. <text class="u-m-l-10" :selectable="true" v-text="item.value"></text>
  95. </view>
  96. </view>
  97. <!-- 数组 -->
  98. <view class="item" v-if="item.type == 'array'">
  99. <view class="u-m-b-30 text-weight u-font-30">
  100. <view class="u-item-title" v-text="item.title"></view>
  101. </view>
  102. <view class="content">
  103. <u-table>
  104. <u-tr class="u-tr">
  105. <u-th class="u-th" v-text="item.setting.key"></u-th>
  106. <u-th class="u-th" v-text="item.setting.value"></u-th>
  107. </u-tr>
  108. <u-tr class="u-tr" v-for="(res, ink) in item.value" :key="ink">
  109. <u-td class="u-td" v-text="ink"></u-td>
  110. <u-td class="u-td" v-text="res"></u-td>
  111. </u-tr>
  112. </u-table>
  113. </view>
  114. </view>
  115. </block>
  116. </view>
  117. </template>
  118. <script>
  119. export default {
  120. props: {
  121. fields: {
  122. type: Array,
  123. default() {
  124. return [];
  125. }
  126. }
  127. },
  128. computed: {
  129. listSelects() {
  130. return item => {
  131. if (!item) {
  132. return item;
  133. }
  134. let arr = [];
  135. let varArr = item.value.split(',');
  136. varArr.forEach(res => {
  137. arr.push(item.content_list[res]);
  138. });
  139. return arr.join(',');
  140. };
  141. },
  142. fileType() {
  143. return filename => {
  144. var index1 = filename.lastIndexOf('.');
  145. var index2 = filename.length;
  146. return filename.substring(index1, index2);
  147. };
  148. }
  149. },
  150. data() {
  151. return {};
  152. },
  153. methods:{
  154. lookMap(item) {
  155. if(!item) return;
  156. uni.openLocation({
  157. latitude: parseFloat(item.lat),
  158. longitude: parseFloat(item.lng),
  159. success: function() {
  160. console.log('success');
  161. }
  162. });
  163. },
  164. swipers(index){
  165. uni.previewImage({
  166. current: index,
  167. urls: this.detail.images_text,
  168. longPressActions: {
  169. itemList: ['发送给朋友', '保存图片', '收藏'],
  170. success: function(data) {
  171. console.log(data);
  172. },
  173. fail: function(err) {
  174. console.log(err.errMsg);
  175. }
  176. }
  177. });
  178. },
  179. }
  180. };
  181. </script>
  182. <style lang="scss" scoped>
  183. .fields{
  184. .item{
  185. background-color: #FFFFFF;
  186. padding: 30rpx;
  187. margin-top: 15rpx;
  188. .u-item-title{
  189. padding: 0;
  190. }
  191. }
  192. }
  193. </style>