decode.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <view>
  3. <block v-for="(item, i) in nodes.children" :key="i">
  4. <block v-if="item.tag === undefined">{{ item.text }}</block>
  5. <block v-if="item.tag === 'view'">
  6. <block v-if="item.rely">
  7. <view :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  8. <decode v-if="item.children" :nodes="item" />
  9. </view>
  10. </block>
  11. <block v-else>
  12. <view class="h2w__viewParent">
  13. <view :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  14. <decode v-if="item.children" :nodes="item" />
  15. </view>
  16. </view>
  17. </block>
  18. </block>
  19. <block v-if="item.tag === 'video'">
  20. <view class="h2w__videoParent">
  21. <video
  22. :data-data="item"
  23. :class="item.attrs.class"
  24. :data="item.attrs.data"
  25. :id="item.attrs.id"
  26. :style="item.attrs.style"
  27. @tap.stop.prevent="tapFun"
  28. :poster="item.attrs.poster"
  29. :src="item.attrs.src"
  30. >
  31. <decode v-if="item.children" :nodes="item" />
  32. </video>
  33. </view>
  34. </block>
  35. <block v-if="item.tag === 'text'">
  36. <view class="h2w__textParent">
  37. <text :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  38. <decode v-if="item.children" :nodes="item" />
  39. </text>
  40. </view>
  41. </block>
  42. <block v-if="item.tag === 'image'">
  43. <view class="h2w__imageParent">
  44. <image
  45. :data-data="item"
  46. :class="item.attrs.class"
  47. :data="item.attrs.data"
  48. :id="item.attrs.id"
  49. :style="item.attrs.style"
  50. @tap.stop.prevent="tapFun"
  51. :src="item.attrs.src"
  52. :mode="item.attrs.mode ? item.attrs.mode : 'widthFix'"
  53. :lazy-load="item.attr['lazy-load']"
  54. >
  55. <decode v-if="item.children" :nodes="item" />
  56. </image>
  57. </view>
  58. </block>
  59. <block v-if="item.tag === 'navigator'">
  60. <view class="h2w__navigatorParent">
  61. <navigator
  62. :data-data="item"
  63. :class="item.attrs.class"
  64. :data="item.attrs.data"
  65. :id="item.attrs.id"
  66. :style="item.attrs.style"
  67. @tap.stop.prevent="tapFun"
  68. :url="item.attrs.href"
  69. >
  70. <decode v-if="item.children" :nodes="item" />
  71. </navigator>
  72. </view>
  73. </block>
  74. <block v-if="item.tag === 'swiper'">
  75. <view class="h2w__swiperParent">
  76. <swiper :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  77. <decode v-if="item.children" :nodes="item" />
  78. </swiper>
  79. </view>
  80. </block>
  81. <block v-if="item.tag === 'swiper-item'">
  82. <view class="h2w__swiper-itemParent">
  83. <swiper-item :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  84. <decode v-if="item.children" :nodes="item" />
  85. </swiper-item>
  86. </view>
  87. </block>
  88. <block v-if="item.tag === 'block'">
  89. <view class="h2w__blockParent">
  90. <block
  91. :data-data="item"
  92. :class="item.attrs.class"
  93. :data="item.attrs.data"
  94. :id="item.attrs.id"
  95. :style="item.attrs.style"
  96. @tap.native.stop.prevent="tapFun($event, { data: item, tagId: item.attrs.id })"
  97. >
  98. <decode v-if="item.children" :nodes="item" />
  99. </block>
  100. </view>
  101. </block>
  102. <block v-if="item.tag === 'form'">
  103. <view class="h2w__formParent">
  104. <form :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  105. <decode v-if="item.children" :nodes="item" />
  106. </form>
  107. </view>
  108. </block>
  109. <block v-if="item.tag === 'input'">
  110. <view class="h2w__inputParent">
  111. <input :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun" />
  112. <decode v-if="item.children" :nodes="item" />
  113. </view>
  114. </block>
  115. <block v-if="item.tag === 'textarea'">
  116. <view class="h2w__textareaParent">
  117. <textarea :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  118. <decode v-if="item.children" :nodes="item"/></textarea
  119. >
  120. </view>
  121. </block>
  122. <block v-if="item.tag === 'button'">
  123. <view class="h2w__buttonParent">
  124. <button :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  125. <decode v-if="item.children" :nodes="item" />
  126. </button>
  127. </view>
  128. </block>
  129. <block v-if="item.tag === 'checkbox-group'">
  130. <view class="h2w__checkbox-groupParent">
  131. <checkbox-group
  132. :data-data="item"
  133. :class="item.attrs.class"
  134. :data="item.attrs.data"
  135. :id="item.attrs.id"
  136. :style="item.attrs.style"
  137. @tap.stop.prevent="tapFun"
  138. @change="parseEventDynamicCode($event, item.attrs.bindchange)"
  139. >
  140. <decode v-if="item.children" :nodes="item" />
  141. </checkbox-group>
  142. </view>
  143. </block>
  144. <block v-if="item.tag === 'checkbox'">
  145. <view class="h2w__checkboxParent">
  146. <checkbox
  147. :data-data="item"
  148. :class="item.attrs.class"
  149. :data="item.attrs.data"
  150. :id="item.attrs.id"
  151. :style="item.attrs.style"
  152. @tap.stop.prevent="tapFun"
  153. :checked="item.attrs.checked"
  154. :value="item.attrs.value"
  155. >
  156. <decode v-if="item.children" :nodes="item" />
  157. </checkbox>
  158. </view>
  159. </block>
  160. <block v-if="item.tag === 'radio-group'">
  161. <view class="h2w__radio-groupParent">
  162. <radio-group :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :id="item.attrs.id" :style="item.attrs.style" @tap.stop.prevent="tapFun">
  163. <decode v-if="item.children" :nodes="item" />
  164. </radio-group>
  165. </view>
  166. </block>
  167. <block v-if="item.tag === 'radio'">
  168. <view class="h2w__radioParent">
  169. <radio
  170. :data-data="item"
  171. :class="item.attrs.class"
  172. :data="item.attrs.data"
  173. :id="item.attrs.id"
  174. :style="item.attrs.style"
  175. @tap.stop.prevent="tapFun"
  176. :checked="item.attrs.checked"
  177. >
  178. <decode v-if="item.children" :nodes="item" />
  179. </radio>
  180. </view>
  181. </block>
  182. <block v-if="item.tag === 'rich-text'">
  183. <view class="h2w__rich-textParent">
  184. <rich-text :data-data="item" :class="item.attrs.class" :data="item.attrs.data" :style="item.attrs.style" @tap.stop.prevent="tapFun" :nodes="item.children">
  185. <decode v-if="item.children" :nodes="item" />
  186. </rich-text>
  187. </view>
  188. </block>
  189. <block v-if="item.tag === 'audio-player'">
  190. <audio-player :data="item" :data-data="item" @tap.native.stop.prevent="tapFun($event, { data: item })" />
  191. </block>
  192. <block v-if="item.tag === 'table'">
  193. <table :data="item" :data-data="item" @tap.native.stop.prevent="tapFun($event, { data: item })" />
  194. </block>
  195. <block v-if="item.tag === 'img'"><img :data="item" :data-data="item" @tap.native.stop.prevent="tapFun($event, { data: item })" /></block>
  196. </block>
  197. </view>
  198. </template>
  199. <script>
  200. import decode from '@/components/agent-ui/markdownPreview/towxml/decode';
  201. import audioPlayer from '@/components/agent-ui/markdownPreview/towxml/audio-player/audio-player';
  202. import table from '@/components/agent-ui/markdownPreview/towxml/table/table';
  203. import img from '@/components/agent-ui/markdownPreview/towxml/img/img';
  204. const config = require('./config');
  205. export default {
  206. components: {
  207. decode,
  208. audioPlayer,
  209. table,
  210. img
  211. },
  212. data() {
  213. return {
  214. i: '',
  215. undefined: ''
  216. };
  217. },
  218. options: {
  219. styleIsolation: 'apply-shared'
  220. },
  221. props: {
  222. nodes: {
  223. type: Object,
  224. default: () => ({})
  225. }
  226. },
  227. mounted() {
  228. // 处理小程序 attached 生命周期
  229. this.attached();
  230. },
  231. methods: {
  232. attached: function () {
  233. const that = this;
  234. config.events.forEach((item) => {
  235. that['_' + item] = function (...arg) {
  236. if (global._events && typeof global._events[item] === 'function') {
  237. global._events[item](...arg);
  238. }
  239. };
  240. });
  241. },
  242. tapFun(e, _dataset) {
  243. /* ---处理dataset begin--- */
  244. this.handleDataset(e, _dataset);
  245. /* ---处理dataset end--- */
  246. console.log('占位:函数 _tap 未声明');
  247. }
  248. },
  249. created: function () {}
  250. };
  251. </script>
  252. <style></style>