Ver código fonte

20221026日提交

asd123a20 2 anos atrás
pai
commit
6430114fc1
100 arquivos alterados com 3640 adições e 278 exclusões
  1. 1 0
      App.vue
  2. 30 0
      api/activity.js
  3. 6 1
      api/family.js
  4. 10 0
      api/integral.js
  5. 28 0
      components/gaoyia-parse/components/wxParseAudio.vue
  6. 94 0
      components/gaoyia-parse/components/wxParseImg.vue
  7. 55 0
      components/gaoyia-parse/components/wxParseTable.vue
  8. 98 0
      components/gaoyia-parse/components/wxParseTemplate0.vue
  9. 88 0
      components/gaoyia-parse/components/wxParseTemplate1.vue
  10. 88 0
      components/gaoyia-parse/components/wxParseTemplate10.vue
  11. 86 0
      components/gaoyia-parse/components/wxParseTemplate11.vue
  12. 88 0
      components/gaoyia-parse/components/wxParseTemplate2.vue
  13. 88 0
      components/gaoyia-parse/components/wxParseTemplate3.vue
  14. 88 0
      components/gaoyia-parse/components/wxParseTemplate4.vue
  15. 88 0
      components/gaoyia-parse/components/wxParseTemplate5.vue
  16. 88 0
      components/gaoyia-parse/components/wxParseTemplate6.vue
  17. 88 0
      components/gaoyia-parse/components/wxParseTemplate7.vue
  18. 88 0
      components/gaoyia-parse/components/wxParseTemplate8.vue
  19. 88 0
      components/gaoyia-parse/components/wxParseTemplate9.vue
  20. 15 0
      components/gaoyia-parse/components/wxParseVideo.vue
  21. 261 0
      components/gaoyia-parse/libs/html2json.js
  22. 156 0
      components/gaoyia-parse/libs/htmlparser.js
  23. 209 0
      components/gaoyia-parse/libs/wxDiscode.js
  24. 258 0
      components/gaoyia-parse/parse.css
  25. 228 0
      components/gaoyia-parse/parse.vue
  26. 6 4
      env.js
  27. 47 11
      pages.json
  28. 168 0
      pages/activity/details.vue
  29. 110 0
      pages/activity/index.vue
  30. 151 0
      pages/activity/uploadFiel.vue
  31. 1 2
      pages/details/index.vue
  32. 0 19
      pages/illness/come.vue
  33. 5 5
      pages/illness/index.vue
  34. 40 25
      pages/illness/receive.vue
  35. 18 16
      pages/index/index.vue
  36. 99 0
      pages/integral/index.vue
  37. 13 5
      pages/my/index.vue
  38. 5 53
      pages/policy/index.vue
  39. 60 0
      pages/questionnaire/details.vue
  40. 116 0
      pages/questionnaire/index.vue
  41. 41 0
      pages/questionnaire/web.vue
  42. 40 113
      pages/service/index.vue
  43. 6 3
      pages/user/familyInfo.vue
  44. BIN
      static/cw2.png
  45. BIN
      static/home1.png
  46. BIN
      static/home2.png
  47. BIN
      static/policy1.png
  48. BIN
      static/policy2.png
  49. BIN
      static/service1.png
  50. BIN
      static/service2.png
  51. BIN
      static/user1.png
  52. BIN
      static/user2.png
  53. BIN
      static/wj.png
  54. BIN
      static/xj.png
  55. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  56. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  57. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  58. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseAudio.js.map
  59. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseImg.js.map
  60. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTable.js.map
  61. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate0.js.map
  62. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate1.js.map
  63. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate10.js.map
  64. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate11.js.map
  65. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate2.js.map
  66. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate3.js.map
  67. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate4.js.map
  68. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate5.js.map
  69. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate6.js.map
  70. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate7.js.map
  71. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate8.js.map
  72. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate9.js.map
  73. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseVideo.js.map
  74. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/parse.js.map
  75. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/details.js.map
  76. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/index.js.map
  77. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/uploadFiel.js.map
  78. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/details/index.js.map
  79. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/illness/index.js.map
  80. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/illness/receive.js.map
  81. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  82. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/integral/index.js.map
  83. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/index.js.map
  84. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/index.js.map
  85. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/policy/index.js.map
  86. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/details.js.map
  87. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/index.js.map
  88. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/web.js.map
  89. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/service/index.js.map
  90. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/familyInfo.js.map
  91. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/index.js.map
  92. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.js.map
  93. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.js.map
  94. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.js.map
  95. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.js.map
  96. 11 5
      unpackage/dist/dev/mp-weixin/app.json
  97. 244 0
      unpackage/dist/dev/mp-weixin/common/main.wxss
  98. 1 1
      unpackage/dist/dev/mp-weixin/common/runtime.js
  99. 2 2
      unpackage/dist/dev/mp-weixin/common/vendor.js
  100. 0 0
      unpackage/dist/dev/mp-weixin/components/gaoyia-parse/components/wxParseAudio.js

+ 1 - 0
App.vue

@@ -19,6 +19,7 @@
 	/* #ifndef APP-NVUE */
 	@import '@/static/customicons.css';
 	// 设置整个项目的背景色
+	@import url("/components/gaoyia-parse/parse.css");
 	page {
 		background-color: #f5f5f5;
 	}

+ 30 - 0
api/activity.js

@@ -0,0 +1,30 @@
+import request from './request.js';
+const getActivity = async data => {
+	const res = await request.get({ url: `/activity/list`, data });
+	return res.data;
+}
+const getdetails = async ({ activityId }) => {
+	const res = await request.get({ url: `/activity/${activityId}` });
+	return res.data;
+}
+const getstatus = async ({ activityId }) => {
+	const res = await request.get({ url: `/activity/status/${activityId}` });
+	return res.data;
+}
+const report = async ({ activityId }) => {
+	const res = await request.post({ url: `/activity/report/${activityId}` });
+	return res.data;
+}
+const offReport = async ({ activityId }) => {
+	const res = await request.del({ url: `/activity/report-cancel/${activityId}` });
+	return res.data;
+}
+const uploadImgs = async data => {
+	const res = await request.post({ url: `/activity/submit-photo`, data });
+	return res.data;
+}
+const getPhotos = async ({ activityId }) => {
+	const res = await request.get({ url: `/activity/log-details/${activityId}` });
+	return res.data;
+}
+export default { getActivity, getdetails, getstatus, report, offReport, uploadImgs, getPhotos };

+ 6 - 1
api/family.js

@@ -44,4 +44,9 @@ const getUserAll = async (data) => {
 	const res = await request.get({ url: `/wx/resident/members-for-reporting` });
 	return res.data;
 }
-export default { familyInfo, getFamilyInfo, filing, membersStatus, runningTask, getFamilyInfoDetails, getApplyUser, getReqInfoDetails, getUserAll };
+// 取消审核申请
+const removeApply = async (data) => {
+	const res = await request.post({ url: `/resident/req/cancel/${data.residentReqId}`, data });
+	return res.data;
+}
+export default { familyInfo, getFamilyInfo, filing, membersStatus, runningTask, getFamilyInfoDetails, getApplyUser, getReqInfoDetails, getUserAll, removeApply };

+ 10 - 0
api/integral.js

@@ -0,0 +1,10 @@
+import request from './request.js';
+const getIntegral = async data => {
+	const res = await request.get({ url: `/wx/points/point`, data });
+	return res.data;
+}
+const getRanking = async data => {
+	const res = await request.get({ url: '/wx/points/ranking-list' });
+	return res.data;
+}
+export default { getIntegral, getRanking };

+ 28 - 0
components/gaoyia-parse/components/wxParseAudio.vue

@@ -0,0 +1,28 @@
+<template>
+	<!-- '<audio/>' 组件不再维护,建议使用能力更强的 'uni.createInnerAudioContext' 接口 有时间再改-->
+  <!--增加audio标签支持-->
+  <audio
+    :id="node.attr.id"
+    :class="node.classStr"
+    :style="node.styleStr"
+    :src="node.attr.src"
+    :loop="node.attr.loop"
+    :poster="node.attr.poster"
+    :name="node.attr.name"
+    :author="node.attr.author"
+    controls></audio>
+</template>
+
+<script>
+export default {
+  name: 'wxParseAudio',
+  props: {
+    node: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+};
+</script>

+ 94 - 0
components/gaoyia-parse/components/wxParseImg.vue

@@ -0,0 +1,94 @@
+<template>
+	<image
+		:mode="node.attr.mode"
+		:lazy-load="node.attr.lazyLoad"
+		:class="node.classStr"
+		:style="newStyleStr || node.styleStr"
+		:data-src="node.attr.src"
+		:src="node.attr.src"
+		@tap="wxParseImgTap"
+		@load="wxParseImgLoad"
+	/>
+</template>
+
+<script>
+export default {
+	name: 'wxParseImg',
+	data() {
+		return {
+			newStyleStr: '',
+			preview: true
+		};
+	},
+	inject: ['parseWidth'],
+	mounted() {},
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			}
+		}
+	},
+	
+	methods: {
+		wxParseImgTap(e) {
+			if (!this.preview) return;
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let parent = this.$parent;
+			while (!parent.preview || typeof parent.preview !== 'function') {
+				// TODO 遍历获取父节点执行方法
+				parent = parent.$parent;
+			}
+			parent.preview(src, e);
+		},
+		// 图片视觉宽高计算函数区
+		wxParseImgLoad(e) {
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let { width, height } = e.mp.detail;
+
+			const recal = this.wxAutoImageCal(width, height);
+
+			const { imageheight, imageWidth } = recal;
+			const { padding, mode } = this.node.attr;//删除padding
+			// const { mode } = this.node.attr;
+
+			const { styleStr } = this.node;
+			const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
+
+			this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;//删除padding
+			// this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px;`;
+		},
+		// 计算视觉优先的图片宽高
+		wxAutoImageCal(originalWidth, originalHeight) {
+			// 获取图片的原始长宽
+			const windowWidth = this.parseWidth.value;
+			const results = {};
+
+			if (originalWidth < 60 || originalHeight < 60) {
+				const { src } = this.node.attr;
+				let parent = this.$parent;
+				while (!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.removeImageUrl(src);
+				this.preview = false;
+			}
+
+			// 判断按照那种方式进行缩放
+			if (originalWidth > windowWidth) {
+				// 在图片width大于手机屏幕width时候
+				results.imageWidth = windowWidth;
+				results.imageheight = windowWidth * (originalHeight / originalWidth);
+			} else {
+				// 否则展示原来的数据
+				results.imageWidth = originalWidth;
+				results.imageheight = originalHeight;
+			}
+			return results;
+		}
+	}
+};
+</script>

+ 55 - 0
components/gaoyia-parse/components/wxParseTable.vue

@@ -0,0 +1,55 @@
+<template>
+	<div class='tablebox'>
+		<rich-text :nodes="nodes" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+	</div>
+</template>
+<script>
+export default {
+	name: 'wxParseTable',
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			},
+		},
+	},
+	inject: ['parseSelect'],
+	data() {
+		return {
+			nodes:[]
+		};
+	},
+	mounted() {
+		this.nodes=this.loadNode([this.node]);
+	},
+	methods: {
+		loadNode(node) {
+			let obj = [];
+			for (let children of node) {
+				if (children.node=='element') {
+					let t = {
+						name:children.tag,
+						attrs: {
+							class: children.classStr,
+							// style: children.styleStr,
+						},
+						children: children.nodes?this.loadNode(children.nodes):[]
+					}
+					
+					obj.push(t)
+				} else if(children.node=='text'){
+					obj.push({
+						type: 'text',
+						text: children.text
+					})
+				}
+			}
+			return obj
+		}
+	}
+};
+</script>
+<style>
+	@import url("../parse.css");
+</style>

+ 98 - 0
components/gaoyia-parse/components/wxParseTemplate0.vue

@@ -0,0 +1,98 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node"/>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	// #ifdef APP-PLUS | H5
+	import wxParseTemplate from './wxParseTemplate0';
+	// #endif
+	// #ifdef MP
+	import wxParseTemplate from './wxParseTemplate1';
+	// #endif
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+
+	export default {
+		// #ifdef APP-PLUS | H5
+		name: 'wxParseTemplate',
+		// #endif
+		// #ifdef MP
+		name: 'wxParseTemplate0',
+		// #endif
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;// TODO currentTarget才有dataset
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate1.vue

@@ -0,0 +1,88 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate2';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate1',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate10.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate11';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate10',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 86 - 0
components/gaoyia-parse/components/wxParseTemplate11.vue

@@ -0,0 +1,86 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate11',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate2.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate3';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate2',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate3.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate4';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate3',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate4.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate5';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate4',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate5.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate6';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate5',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate6.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate7';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate6',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate7.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate8';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate7',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate8.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate9';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate8',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate9.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate10';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate9',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 15 - 0
components/gaoyia-parse/components/wxParseVideo.vue

@@ -0,0 +1,15 @@
+<template>
+  <!--增加video标签支持,并循环添加-->
+  <view :class="node.classStr" :style="node.styleStr">
+    <video :class="node.classStr" :style="node.styleStr" class="video-video" :src="node.attr.src"></video>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'wxParseVideo',
+  props: {
+    node: {},
+  },
+};
+</script>

+ 261 - 0
components/gaoyia-parse/libs/html2json.js

@@ -0,0 +1,261 @@
+/**
+ * html2Json 改造来自: https://github.com/Jxck/html2json
+ *
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+import wxDiscode from './wxDiscode';
+import HTMLParser from './htmlparser';
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Block Elements - HTML 5
+const block = makeMap('br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+function removeDOCTYPE(html) {
+  const isDocument = /<body.*>([^]*)<\/body>/.test(html);
+  return isDocument ? RegExp.$1 : html;
+}
+
+function trimHtml(html) {
+  return html
+    .replace(/<!--.*?-->/gi, '')
+    .replace(/\/\*.*?\*\//gi, '')
+    .replace(/[ ]+</gi, '<')
+    .replace(/<script[^]*<\/script>/gi, '')
+    .replace(/<style[^]*<\/style>/gi, '');
+}
+
+function getScreenInfo() {
+  const screen = {};
+  wx.getSystemInfo({
+    success: (res) => {
+      screen.width = res.windowWidth;
+      screen.height = res.windowHeight;
+    },
+  });
+  return screen;
+}
+
+function html2json(html, customHandler, imageProp, host) {
+  // 处理字符串
+  html = removeDOCTYPE(html);
+  html = trimHtml(html);
+  html = wxDiscode.strDiscode(html);
+  // 生成node节点
+  const bufArray = [];
+  const results = {
+    nodes: [],
+    imageUrls: [],
+  };
+
+	const screen = getScreenInfo();
+  function Node(tag) {
+    this.node = 'element';
+    this.tag = tag;
+		
+		this.$screen = screen;
+  }
+
+  HTMLParser(html, {
+    start(tag, attrs, unary) {
+      // node for this element
+      const node = new Node(tag);
+
+      if (bufArray.length !== 0) {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+      }
+
+      if (block[tag]) {
+        node.tagType = 'block';
+      } else if (inline[tag]) {
+        node.tagType = 'inline';
+      } else if (closeSelf[tag]) {
+        node.tagType = 'closeSelf';
+      }
+
+      node.attr = attrs.reduce((pre, attr) => {
+        const { name } = attr;
+        let { value } = attr;
+        if (name === 'class') {
+          node.classStr = value;
+        }
+        // has multi attibutes
+        // make it array of attribute
+        if (name === 'style') {
+          node.styleStr = value;
+        }
+        if (value.match(/ /)) {
+          value = value.split(' ');
+        }
+
+        // if attr already exists
+        // merge it
+        if (pre[name]) {
+          if (Array.isArray(pre[name])) {
+            // already array, push to last
+            pre[name].push(value);
+          } else {
+            // single value, make it array
+            pre[name] = [pre[name], value];
+          }
+        } else {
+          // not exist, put it
+          pre[name] = value;
+        }
+
+        return pre;
+      }, {});
+
+      // 优化样式相关属性
+      if (node.classStr) {
+        node.classStr += ` ${node.tag}`;
+      } else {
+        node.classStr = node.tag;
+      }
+      if (node.tagType === 'inline') {
+        node.classStr += ' inline';
+      }
+
+      // 对img添加额外数据
+      if (node.tag === 'img') {
+        let imgUrl = node.attr.src;
+        imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
+        Object.assign(node.attr, imageProp, {
+          src: imgUrl || '',
+        });
+        if (imgUrl) {
+          results.imageUrls.push(imgUrl);
+        }
+      }
+
+      // 处理a标签属性
+      if (node.tag === 'a') {
+        node.attr.href = node.attr.href || '';
+      }
+
+      // 处理font标签样式属性
+      if (node.tag === 'font') {
+        const fontSize = [
+          'x-small',
+          'small',
+          'medium',
+          'large',
+          'x-large',
+          'xx-large',
+          '-webkit-xxx-large',
+        ];
+        const styleAttrs = {
+          color: 'color',
+          face: 'font-family',
+          size: 'font-size',
+        };
+        if (!node.styleStr) node.styleStr = '';
+        Object.keys(styleAttrs).forEach((key) => {
+          if (node.attr[key]) {
+            const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
+            node.styleStr += `${styleAttrs[key]}: ${value};`;
+          }
+        });
+      }
+
+      // 临时记录source资源
+      if (node.tag === 'source') {
+        results.source = node.attr.src;
+      }
+
+      if (customHandler.start) {
+        customHandler.start(node, results);
+      }
+
+      if (unary) {
+        // if this tag doesn't have end tag
+        // like <img src="hoge.png"/>
+        // add to parents
+        const parent = bufArray[0] || results;
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      } else {
+        bufArray.unshift(node);
+      }
+    },
+    end(tag) {
+      // merge into parent tag
+      const node = bufArray.shift();
+      if (node.tag !== tag) {
+        console.error('invalid state: mismatch end tag');
+      }
+
+      // 当有缓存source资源时于于video补上src资源
+      if (node.tag === 'video' && results.source) {
+        node.attr.src = results.source;
+        delete results.source;
+      }
+
+      if (customHandler.end) {
+        customHandler.end(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (!parent.nodes) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+    chars(text) {
+      if (!text.trim()) return;
+
+      const node = {
+        node: 'text',
+        text,
+      };
+
+      if (customHandler.chars) {
+        customHandler.chars(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+  });
+
+  return results;
+}
+
+export default html2json;

+ 156 - 0
components/gaoyia-parse/libs/htmlparser.js

@@ -0,0 +1,156 @@
+/**
+ *
+ * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+// Regular Expressions for parsing tags and attributes
+
+const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Empty Elements - HTML 5
+const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
+
+// Block Elements - HTML 5
+const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+// Attributes that have their values filled in disabled="disabled"
+const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
+
+function HTMLParser(html, handler) {
+  let index;
+  let chars;
+  let match;
+  let last = html;
+  const stack = [];
+
+  stack.last = () => stack[stack.length - 1];
+
+  function parseEndTag(tag, tagName) {
+    // If no tag name is provided, clean shop
+    let pos;
+    if (!tagName) {
+      pos = 0;
+    } else {
+      // Find the closest opened tag of the same type
+      tagName = tagName.toLowerCase();
+      for (pos = stack.length - 1; pos >= 0; pos -= 1) {
+        if (stack[pos] === tagName) break;
+      }
+    }
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (let i = stack.length - 1; i >= pos; i -= 1) {
+        if (handler.end) handler.end(stack[i]);
+      }
+
+      // Remove the open elements from the stack
+      stack.length = pos;
+    }
+  }
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = tagName.toLowerCase();
+
+    if (block[tagName]) {
+      while (stack.last() && inline[stack.last()]) {
+        parseEndTag('', stack.last());
+      }
+    }
+
+    if (closeSelf[tagName] && stack.last() === tagName) {
+      parseEndTag('', tagName);
+    }
+
+    unary = empty[tagName] || !!unary;
+
+    if (!unary) stack.push(tagName);
+
+    if (handler.start) {
+      const attrs = [];
+
+      rest.replace(attr, function genAttr(matches, name) {
+        const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
+
+        attrs.push({
+          name,
+          value,
+          escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
+        });
+      });
+
+      if (handler.start) {
+        handler.start(tagName, attrs, unary);
+      }
+    }
+  }
+
+  while (html) {
+    chars = true;
+
+    if (html.indexOf('</') === 0) {
+      match = html.match(endTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(endTag, parseEndTag);
+        chars = false;
+      }
+
+      // start tag
+    } else if (html.indexOf('<') === 0) {
+      match = html.match(startTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(startTag, parseStartTag);
+        chars = false;
+      }
+    }
+
+    if (chars) {
+      index = html.indexOf('<');
+      let text = '';
+      while (index === 0) {
+        text += '<';
+        html = html.substring(1);
+        index = html.indexOf('<');
+      }
+      text += index < 0 ? html : html.substring(0, index);
+      html = index < 0 ? '' : html.substring(index);
+
+      if (handler.chars) handler.chars(text);
+    }
+
+    if (html === last) throw new Error(`Parse Error: ${html}`);
+    last = html;
+  }
+
+  // Clean up any remaining tags
+  parseEndTag();
+}
+
+export default HTMLParser;

+ 209 - 0
components/gaoyia-parse/libs/wxDiscode.js

@@ -0,0 +1,209 @@
+// HTML 支持的数学符号
+function strNumDiscode(str) {
+str = str.replace(/&forall;|&#8704;|&#x2200;/g, '∀');
+str = str.replace(/&part;|&#8706;|&#x2202;/g, '∂');
+str = str.replace(/&exist;|&#8707;|&#x2203;/g, '∃');
+str = str.replace(/&empty;|&#8709;|&#x2205;/g, '∅');
+str = str.replace(/&nabla;|&#8711;|&#x2207;/g, '∇');
+str = str.replace(/&isin;|&#8712;|&#x2208;/g, '∈');
+str = str.replace(/&notin;|&#8713;|&#x2209;/g, '∉');
+str = str.replace(/&ni;|&#8715;|&#x220b;/g, '∋');
+str = str.replace(/&prod;|&#8719;|&#x220f;/g, '∏');
+str = str.replace(/&sum;|&#8721;|&#x2211;/g, '∑');
+str = str.replace(/&minus;|&#8722;|&#x2212;/g, '−');
+str = str.replace(/&lowast;|&#8727;|&#x2217;/g, '∗');
+str = str.replace(/&radic;|&#8730;|&#x221a;/g, '√');
+str = str.replace(/&prop;|&#8733;|&#x221d;/g, '∝');
+str = str.replace(/&infin;|&#8734;|&#x221e;/g, '∞');
+str = str.replace(/&ang;|&#8736;|&#x2220;/g, '∠');
+str = str.replace(/&and;|&#8743;|&#x2227;/g, '∧');
+str = str.replace(/&or;|&#8744;|&#x2228;/g, '∨');
+str = str.replace(/&cap;|&#8745;|&#x2229;/g, '∩');
+str = str.replace(/&cup;|&#8746;|&#x222a;/g, '∪');
+str = str.replace(/&int;|&#8747;|&#x222b;/g, '∫');
+str = str.replace(/&there4;|&#8756;|&#x2234;/g, '∴');
+str = str.replace(/&sim;|&#8764;|&#x223c;/g, '∼');
+str = str.replace(/&cong;|&#8773;|&#x2245;/g, '≅');
+str = str.replace(/&asymp;|&#8776;|&#x2248;/g, '≈');
+str = str.replace(/&ne;|&#8800;|&#x2260;/g, '≠');
+str = str.replace(/&le;|&#8804;|&#x2264;/g, '≤');
+str = str.replace(/&ge;|&#8805;|&#x2265;/g, '≥');
+str = str.replace(/&sub;|&#8834;|&#x2282;/g, '⊂');
+str = str.replace(/&sup;|&#8835;|&#x2283;/g, '⊃');
+str = str.replace(/&nsub;|&#8836;|&#x2284;/g, '⊄');
+str = str.replace(/&sube;|&#8838;|&#x2286;/g, '⊆');
+str = str.replace(/&supe;|&#8839;|&#x2287;/g, '⊇');
+str = str.replace(/&oplus;|&#8853;|&#x2295;/g, '⊕');
+str = str.replace(/&otimes;|&#8855;|&#x2297;/g, '⊗');
+str = str.replace(/&perp;|&#8869;|&#x22a5;/g, '⊥');
+str = str.replace(/&sdot;|&#8901;|&#x22c5;/g, '⋅');
+return str;
+}
+
+// HTML 支持的希腊字母
+function strGreeceDiscode(str) {
+str = str.replace(/&Alpha;|&#913;|&#x391;/g, 'Α');
+str = str.replace(/&Beta;|&#914;|&#x392;/g, 'Β');
+str = str.replace(/&Gamma;|&#915;|&#x393;/g, 'Γ');
+str = str.replace(/&Delta;|&#916;|&#x394;/g, 'Δ');
+str = str.replace(/&Epsilon;|&#917;|&#x395;/g, 'Ε');
+str = str.replace(/&Zeta;|&#918;|&#x396;/g, 'Ζ');
+str = str.replace(/&Eta;|&#919;|&#x397;/g, 'Η');
+str = str.replace(/&Theta;|&#920;|&#x398;/g, 'Θ');
+str = str.replace(/&Iota;|&#921;|&#x399;/g, 'Ι');
+str = str.replace(/&Kappa;|&#922;|&#x39a;/g, 'Κ');
+str = str.replace(/&Lambda;|&#923;|&#x39b;/g, 'Λ');
+str = str.replace(/&Mu;|&#924;|&#x39c;/g, 'Μ');
+str = str.replace(/&Nu;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Xi;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Omicron;|&#927;|&#x39f;/g, 'Ο');
+str = str.replace(/&Pi;|&#928;|&#x3a0;/g, 'Π');
+str = str.replace(/&Rho;|&#929;|&#x3a1;/g, 'Ρ');
+str = str.replace(/&Sigma;|&#931;|&#x3a3;/g, 'Σ');
+str = str.replace(/&Tau;|&#932;|&#x3a4;/g, 'Τ');
+str = str.replace(/&Upsilon;|&#933;|&#x3a5;/g, 'Υ');
+str = str.replace(/&Phi;|&#934;|&#x3a6;/g, 'Φ');
+str = str.replace(/&Chi;|&#935;|&#x3a7;/g, 'Χ');
+str = str.replace(/&Psi;|&#936;|&#x3a8;/g, 'Ψ');
+str = str.replace(/&Omega;|&#937;|&#x3a9;/g, 'Ω');
+
+str = str.replace(/&alpha;|&#945;|&#x3b1;/g, 'α');
+str = str.replace(/&beta;|&#946;|&#x3b2;/g, 'β');
+str = str.replace(/&gamma;|&#947;|&#x3b3;/g, 'γ');
+str = str.replace(/&delta;|&#948;|&#x3b4;/g, 'δ');
+str = str.replace(/&epsilon;|&#949;|&#x3b5;/g, 'ε');
+str = str.replace(/&zeta;|&#950;|&#x3b6;/g, 'ζ');
+str = str.replace(/&eta;|&#951;|&#x3b7;/g, 'η');
+str = str.replace(/&theta;|&#952;|&#x3b8;/g, 'θ');
+str = str.replace(/&iota;|&#953;|&#x3b9;/g, 'ι');
+str = str.replace(/&kappa;|&#954;|&#x3ba;/g, 'κ');
+str = str.replace(/&lambda;|&#955;|&#x3bb;/g, 'λ');
+str = str.replace(/&mu;|&#956;|&#x3bc;/g, 'μ');
+str = str.replace(/&nu;|&#957;|&#x3bd;/g, 'ν');
+str = str.replace(/&xi;|&#958;|&#x3be;/g, 'ξ');
+str = str.replace(/&omicron;|&#959;|&#x3bf;/g, 'ο');
+str = str.replace(/&pi;|&#960;|&#x3c0;/g, 'π');
+str = str.replace(/&rho;|&#961;|&#x3c1;/g, 'ρ');
+str = str.replace(/&sigmaf;|&#962;|&#x3c2;/g, 'ς');
+str = str.replace(/&sigma;|&#963;|&#x3c3;/g, 'σ');
+str = str.replace(/&tau;|&#964;|&#x3c4;/g, 'τ');
+str = str.replace(/&upsilon;|&#965;|&#x3c5;/g, 'υ');
+str = str.replace(/&phi;|&#966;|&#x3c6;/g, 'φ');
+str = str.replace(/&chi;|&#967;|&#x3c7;/g, 'χ');
+str = str.replace(/&psi;|&#968;|&#x3c8;/g, 'ψ');
+str = str.replace(/&omega;|&#969;|&#x3c9;/g, 'ω');
+str = str.replace(/&thetasym;|&#977;|&#x3d1;/g, 'ϑ');
+str = str.replace(/&upsih;|&#978;|&#x3d2;/g, 'ϒ');
+str = str.replace(/&piv;|&#982;|&#x3d6;/g, 'ϖ');
+str = str.replace(/&middot;|&#183;|&#xb7;/g, '·');
+return str;
+}
+
+function strcharacterDiscode(str) {
+// 加入常用解析
+
+// str = str.replace(/&nbsp;|&#32;|&#x20;/g, "&nbsp;");
+// str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '&ensp;');
+// str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+// str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '&emsp;');
+// str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+// str = str.replace(/&apos;|&#39;|&#x27;/g, "&apos;");
+// str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+// str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+// str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+// str = str.replace(/&amp;|&#38;|&#x26;/g, '&amp;');
+// str = str.replace(/&lt;|&#60;|&#x3c;/g, '&lt;');
+// str = str.replace(/&gt;|&#62;|&#x3e;/g, '&gt;');
+
+
+
+
+str = str.replace(/&nbsp;|&#32;|&#x20;/g, "<span class='spaceshow'> </span>");
+str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+str = str.replace(/&quot;|&#39;|&#x27;/g, "'");
+str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+str = str.replace(/&amp;|&#38;|&#x26;/g, '&');
+str = str.replace(/&lt;|&#60;|&#x3c;/g, '<');
+str = str.replace(/&gt;|&#62;|&#x3e;/g, '>');
+return str;
+}
+
+// HTML 支持的其他实体
+function strOtherDiscode(str) {
+str = str.replace(/&OElig;|&#338;|&#x152;/g, 'Œ');
+str = str.replace(/&oelig;|&#339;|&#x153;/g, 'œ');
+str = str.replace(/&Scaron;|&#352;|&#x160;/g, 'Š');
+str = str.replace(/&scaron;|&#353;|&#x161;/g, 'š');
+str = str.replace(/&Yuml;|&#376;|&#x178;/g, 'Ÿ');
+str = str.replace(/&fnof;|&#402;|&#x192;/g, 'ƒ');
+str = str.replace(/&circ;|&#710;|&#x2c6;/g, 'ˆ');
+str = str.replace(/&tilde;|&#732;|&#x2dc;/g, '˜');
+str = str.replace(/&thinsp;|$#8201;|&#x2009;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&zwnj;|&#8204;|&#x200C;/g, '<span class=\'spaceshow\'>‌</span>');
+str = str.replace(/&zwj;|$#8205;|&#x200D;/g, '<span class=\'spaceshow\'>‍</span>');
+str = str.replace(/&lrm;|$#8206;|&#x200E;/g, '<span class=\'spaceshow\'>‎</span>');
+str = str.replace(/&rlm;|&#8207;|&#x200F;/g, '<span class=\'spaceshow\'>‏</span>');
+str = str.replace(/&ndash;|&#8211;|&#x2013;/g, '–');
+str = str.replace(/&mdash;|&#8212;|&#x2014;/g, '—');
+str = str.replace(/&lsquo;|&#8216;|&#x2018;/g, '‘');
+str = str.replace(/&rsquo;|&#8217;|&#x2019;/g, '’');
+str = str.replace(/&sbquo;|&#8218;|&#x201a;/g, '‚');
+str = str.replace(/&ldquo;|&#8220;|&#x201c;/g, '“');
+str = str.replace(/&rdquo;|&#8221;|&#x201d;/g, '”');
+str = str.replace(/&bdquo;|&#8222;|&#x201e;/g, '„');
+str = str.replace(/&dagger;|&#8224;|&#x2020;/g, '†');
+str = str.replace(/&Dagger;|&#8225;|&#x2021;/g, '‡');
+str = str.replace(/&bull;|&#8226;|&#x2022;/g, '•');
+str = str.replace(/&hellip;|&#8230;|&#x2026;/g, '…');
+str = str.replace(/&permil;|&#8240;|&#x2030;/g, '‰');
+str = str.replace(/&prime;|&#8242;|&#x2032;/g, '′');
+str = str.replace(/&Prime;|&#8243;|&#x2033;/g, '″');
+str = str.replace(/&lsaquo;|&#8249;|&#x2039;/g, '‹');
+str = str.replace(/&rsaquo;|&#8250;|&#x203a;/g, '›');
+str = str.replace(/&oline;|&#8254;|&#x203e;/g, '‾');
+str = str.replace(/&euro;|&#8364;|&#x20ac;/g, '€');
+str = str.replace(/&trade;|&#8482;|&#x2122;/g, '™');
+str = str.replace(/&larr;|&#8592;|&#x2190;/g, '←');
+str = str.replace(/&uarr;|&#8593;|&#x2191;/g, '↑');
+str = str.replace(/&rarr;|&#8594;|&#x2192;/g, '→');
+str = str.replace(/&darr;|&#8595;|&#x2193;/g, '↓');
+str = str.replace(/&harr;|&#8596;|&#x2194;/g, '↔');
+str = str.replace(/&crarr;|&#8629;|&#x21b5;/g, '↵');
+str = str.replace(/&lceil;|&#8968;|&#x2308;/g, '⌈');
+str = str.replace(/&rceil;|&#8969;|&#x2309;/g, '⌉');
+str = str.replace(/&lfloor;|&#8970;|&#x230a;/g, '⌊');
+str = str.replace(/&rfloor;|&#8971;|&#x230b;/g, '⌋');
+str = str.replace(/&loz;|&#9674;|&#x25ca;/g, '◊');
+str = str.replace(/&spades;|&#9824;|&#x2660;/g, '♠');
+str = str.replace(/&clubs;|&#9827;|&#x2663;/g, '♣');
+str = str.replace(/&hearts;|&#9829;|&#x2665;/g, '♥');
+str = str.replace(/&diams;|&#9830;|&#x2666;/g, '♦');
+return str;
+}
+
+function strDiscode(str) {
+  str = strNumDiscode(str);
+  str = strGreeceDiscode(str);
+  str = strcharacterDiscode(str);
+  str = strOtherDiscode(str);
+  return str;
+}
+
+function urlToHttpUrl(url, domain) {
+  if (/^\/\//.test(url)) {
+    return `https:${url}`;
+  } else if (/^\//.test(url)) {
+    return `https://${domain}${url}`;
+  }
+  return url;
+}
+
+export default {
+  strDiscode,
+  urlToHttpUrl,
+};

+ 258 - 0
components/gaoyia-parse/parse.css

@@ -0,0 +1,258 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+/**
+ * 请在全局下引入该文件,@import '/static/wxParse.css';
+ */
+.wxParse {
+	user-select:none;
+	width: 100%;
+	font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
+	color: #333;
+	line-height: 1.5;
+	font-size: 1em;
+	text-align:justify;/* //左右两端对齐 */
+}
+.wxParse view ,.wxParse uni-view{
+	word-break: break-word;
+}
+.wxParse .p {
+	padding-bottom: 0.5em;
+	clear: both;
+	/* letter-spacing: 0;//字间距 */
+}
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+  display: block;
+}
+
+.wxParse .h1{
+  font-size: 2em;
+  line-height: 1.2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2{
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3{
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4{
+  margin: 1.33em 0;
+}
+.wxParse .h5{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+
+.wxParse .h1,
+.wxParse .h2,
+.wxParse .h3,
+.wxParse .h4,
+.wxParse .h5,
+.wxParse .h6,
+.wxParse .b,
+.wxParse .strong{
+  font-weight: bolder;
+}
+
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+.wxParse .spaceshow{
+	  white-space: pre;
+}
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16upx;
+  white-space: pre;
+  margin: 1em 0upx;
+  font-size: 24upx;
+}
+.wxParse .code {
+	overflow: auto;
+	padding: 16upx;
+	white-space: pre;
+	margin: 1em 0upx;
+	background: #f5f5f5;
+	font-size: 24upx;
+}
+
+.wxParse .big {
+  font-size: 1.17em;
+}
+
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+
+.wxParse .strong,
+.wxParse .text,
+.wxParse .span,
+.wxParse .s {
+  display: inline;
+}
+
+.wxParse .a {
+  color: deepskyblue;
+}
+
+.wxParse .video {
+  text-align: center;
+  margin: 22upx 0;
+}
+
+.wxParse .video-video {
+  width: 100%;
+}
+.wxParse .uni-image{
+	max-width: 100%;
+}
+.wxParse .img {
+  display: block;
+  max-width: 100%;
+  margin-bottom: 0em;/* //与p标签底部padding同时修改 */
+  overflow: hidden;
+}
+
+.wxParse .blockquote {
+  margin: 10upx 0;
+  padding: 22upx 0 22upx 22upx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6upx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 2em;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+.wxParse .tablebox{
+	overflow: auto;
+	background-color: #f5f5f5;
+	background: #f5f5f5;
+	font-size: 13px;
+	padding: 8px;
+}
+.wxParse .table .table,.wxParse .table{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	/* width: 100%; */
+	overflow: auto;
+	white-space: pre;
+}
+.wxParse .tbody{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	border: 1px solid #dadada;
+}
+.wxParse .table  .thead, .wxParse  .table .tfoot, .wxParse  .table .th{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	background: #ececec;
+	font-weight: 40;
+}
+.wxParse  .table .tr {
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* border: 2px solid #F0AD4E; */
+	overflow:auto;
+}
+.wxParse  .table .th,
+.wxParse  .table .td{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	border: 2upx solid #dadada;
+	overflow:auto;
+}
+.wxParse .audio, .wxParse .uni-audio-default{
+	display: block;
+}

+ 228 - 0
components/gaoyia-parse/parse.vue

@@ -0,0 +1,228 @@
+<!--**
+ * forked from:https://github.com/F-loat/mpvue-wxParse
+ *
+ * github地址: https://github.com/dcloudio/uParse
+ *
+ * for: uni-app框架下 富文本解析
+ * 
+ * 优化 by gaoyia@qq.com  https://github.com/gaoyia/parse
+ */-->
+
+<template>
+	
+	<!--基础元素-->
+	<div class="wxParse" :class="className" :style="'user-select:' + userSelect">
+		<block v-for="(node, index) of nodes" :key="index" v-if="!loading">
+			<wxParseTemplate :node="node" />
+		</block>
+	</div>
+</template>
+
+<script>
+import HtmlToJson from './libs/html2json';
+import wxParseTemplate from './components/wxParseTemplate0';
+
+	
+	export default {
+		name: 'wxParse',
+		props: {
+			// user-select:none;
+			userSelect: {
+				type: String,
+				default: 'text' //none |text| all | element
+			},
+			imgOptions: {
+				type: [Object, Boolean],
+				default: function() {
+					return {
+						loop: false,
+						indicator: 'number',
+						longPressActions: false
+						// longPressActions: {
+						// 	 itemList: ['发送给朋友', '保存图片', '收藏'],
+						// 		success: function (res) {
+						// 			console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+						// 		},
+						// 		fail: function (res) {
+						// 			console.log(res.errMsg);
+						// 		}    
+						// 	}
+						// }
+					}
+				}
+			},
+			loading: {
+				type: Boolean,
+				default: false
+			},
+			className: {
+				type: String,
+				default: ''
+			},
+			content: {
+				type: String,
+				default: ''
+			},
+			noData: {
+				type: String,
+				default: '<div style="color: red;">数据不能为空</div>'
+			},
+			startHandler: {
+				type: Function,
+				default () {
+					return node => {
+						node.attr.class = null;
+						node.attr.style = null;
+					};
+				}
+			},
+			endHandler: {
+				type: Function,
+				default: null
+			},
+			charsHandler: {
+				type: Function,
+				default: null
+			},
+			imageProp: {
+				type: Object,
+				default () {
+					return {
+						mode: 'aspectFit',
+						padding: 0,
+						lazyLoad: false,
+						domain: ''
+					};
+				}
+			}
+		},
+		components: {
+			wxParseTemplate
+		},
+		data() {
+			return {
+				nodes: {},
+				imageUrls: [],
+				wxParseWidth: {
+					value: 0
+				}
+			};
+		},
+		computed: {},
+		mounted() {
+			this.setHtml()
+		},
+		methods: {
+			setHtml() {
+				this.getWidth().then((data) => {
+					this.wxParseWidth.value = data;
+				})
+				let {
+					content,
+					noData,
+					imageProp,
+					startHandler,
+					endHandler,
+					charsHandler
+				} = this;
+				let parseData = content || noData;
+				let customHandler = {
+					start: startHandler,
+					end: endHandler,
+					chars: charsHandler
+				};
+				let results = HtmlToJson(parseData, customHandler, imageProp, this);
+
+				this.imageUrls = results.imageUrls;
+				// this.nodes = results.nodes;
+				
+				
+				this.nodes = [];
+				results.nodes.forEach((item) => {
+					setTimeout(() => {
+						this.nodes.push(item)
+					}, 0);
+				})
+			},
+			getWidth() {
+				return new Promise((res, rej) => {
+					// #ifndef MP-ALIPAY || MP-BAIDU
+					uni.createSelectorQuery()
+						.in(this)
+						.select('.wxParse')
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data.width);
+							}
+						).exec();
+					// #endif
+					// #ifdef MP-BAIDU
+					const query = swan.createSelectorQuery();
+					query.select('.wxParse').boundingClientRect();
+					query.exec(obj => {
+						const rect = obj[0]
+						if (rect) {
+							res(rect.width);
+						}
+					});
+					// #endif
+					// #ifdef MP-ALIPAY
+					my.createSelectorQuery()
+						.select('.wxParse')
+						.boundingClientRect().exec((ret) => {
+							res(ret[0].width);
+						});
+					// #endif
+				});
+			},
+			navigate(href, $event, attr) {
+				console.log(href, attr);
+				this.$emit('navigate', href, $event);
+			},
+			preview(src, $event) {
+				if (!this.imageUrls.length || typeof this.imgOptions === 'boolean') {
+
+				} else {
+					uni.previewImage({
+						current: src,
+						urls: this.imageUrls,
+						loop: this.imgOptions.loop,
+						indicator: this.imgOptions.indicator,
+						longPressActions: this.imgOptions.longPressActions
+					});
+				}
+				this.$emit('preview', src, $event);
+			},
+			removeImageUrl(src) {
+				const {
+					imageUrls
+				} = this;
+				imageUrls.splice(imageUrls.indexOf(src), 1);
+			}
+		},
+		// 父组件中提供
+		provide() {
+			return {
+				parseWidth: this.wxParseWidth,
+				parseSelect: this.userSelect
+				// 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
+			};
+		},
+		watch: {
+			content(){
+				this.setHtml()
+			}
+			// content: {
+			// 	handler: function(newVal, oldVal) {
+			// 		if (newVal !== oldVal) {
+			// 			
+			// 		}
+			// 	},
+			// 	deep: true
+			// }
+		}
+	};
+</script>

+ 6 - 4
env.js

@@ -1,12 +1,14 @@
 const ENV_API_URL = {
 	development: {
-		url: 'https://fuyu.scapp.cn/wx-api/api',
-		// url: 'http://192.168.0.70:7070/api',
-		imgUrl: 'https://fuyu.scapp.cn/static/wxa/'
+		// url: 'https://fuyu.scapp.cn/wx-api/api',
+		url: 'http://192.168.0.63/wx-api/api',
+		imgUrl: 'https://fuyu.scapp.cn/static/wxa/',
+		fileUrl: 'http://192.168.0.63'
 	},
 	production: {
 		url: 'https://fuyu.scapp.cn/wx-api/api',
-		imgUrl: 'https://fuyu.scapp.cn/static/wxa/'
+		imgUrl: 'https://fuyu.scapp.cn/static/wxa/',
+		fileUrl: 'http://192.168.0.63'
 	},
 }
 export const BASE_URL = ENV_API_URL[process.env.NODE_ENV || 'development'];

+ 47 - 11
pages.json

@@ -15,13 +15,13 @@
 		{
 			"path": "pages/service/index",
 			"style": {
-				"navigationBarTitleText": "服务"
+				"navigationBarTitleText": "政务服务"
 			}
 		},
 		{
 			"path": "pages/policy/index",
 			"style": {
-				"navigationBarTitleText": "政策",
+				"navigationBarTitleText": "党建引领",
 				"enablePullDownRefresh": true
 			}
 		},
@@ -31,12 +31,6 @@
 				"navigationBarTitleText": "核酸检测报备"
 			}
 		},
-		{
-			"path": "pages/illness/come",
-			"style": {
-				"navigationBarTitleText": "返(来)长报备"
-			}
-		},
 		{
 			"path": "pages/illness/receive",
 			"style": {
@@ -85,12 +79,54 @@
 			"style": {
 				"navigationBarTitleText": "注册用户"
 			}
+		},
+		{
+			"path": "pages/questionnaire/index",
+			"style": {
+				"navigationBarTitleText": "问卷调查"
+			}
+		},
+		{
+			"path": "pages/questionnaire/details",
+			"style": {
+				"navigationBarTitleText": "问卷调查详情"
+			}
+		},
+		{
+			"path": "pages/questionnaire/web",
+			"style": {
+				"navigationBarTitleText": "问卷调查"
+			}
+		},
+		{
+			"path": "pages/integral/index",
+			"style": {
+				"navigationBarTitleText": "我的积分"
+			}
+		},
+		{
+			"path": "pages/activity/index",
+			"style": {
+				"navigationBarTitleText": "活动列表"
+			}
+		},
+		{
+			"path": "pages/activity/details",
+			"style": {
+				"navigationBarTitleText": "活动详情"
+			}
+		},
+		{
+			"path": "pages/activity/uploadFiel",
+			"style": {
+				"navigationBarTitleText": "获取积分"
+			}
 		}
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "#fff",
 		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#fd6b18",
+		"navigationBarBackgroundColor": "#c60814",
 		"backgroundColor": "#fff",
 		"app-plus": {
 			"background": "#efeff4"
@@ -111,13 +147,13 @@
 		"pagePath": "pages/service/index",
 		"iconPath": "static/service1.png",
 		"selectedIconPath": "static/service2.png",
-		"text": "服务"
+		"text": "政务服务"
 	},
 	{
 		"pagePath": "pages/policy/index",
 		"iconPath": "static/policy1.png",
 		"selectedIconPath": "static/policy2.png",
-		"text": "政策"
+		"text": "党建引领"
 	},
 	{
 		"pagePath": "pages/my/index",

+ 168 - 0
pages/activity/details.vue

@@ -0,0 +1,168 @@
+<template>
+	<view class="container">
+		<image class="banner" :src="info.image" mode="scaleToFill"></image>
+		<uni-section :title="info.topic" titleFontSize="18" type="line">
+			<uni-list>
+				<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon[0]" title="报名时间" :rightText="`${info.regStartTime}至${info.regEndTime}`"></uni-list-item>
+				<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon[0]" title="活动时间" :rightText="`${info.startTime}至${info.endTime}`"></uni-list-item>
+				<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon[1]" title="负责人" :rightText="info.sponsorName"></uni-list-item>
+				<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon[2]" title="联系电话" :rightText="info.sponsorPhone"></uni-list-item>
+			</uni-list>
+		</uni-section>
+		<uni-section title="活动详情" titleFontSize="18" type="line">
+			<rich-text image-menu-prevent="true" :nodes="info.description" class="content"></rich-text>
+		</uni-section>
+		<uni-goods-nav class="goodNav" :fill="true" :options="options" :buttonGroup="buttonGroup" @buttonClick="buttonClick" />
+	</view>
+</template>
+
+<script>
+	import request from '../../api/activity.js';
+	import { BASE_URL } from '../../env.js';
+	export default {
+		onLoad: function (option) {
+			this.activityId = option.activityId;
+		},
+		data() {
+			return {
+				activityId: '',
+				info: null,
+				options: [],
+				extraIcon: [
+					{
+						color: '#c60814',
+						size: '22',
+						type: 'calendar'
+					},
+					{
+						color: '#c60814',
+						size: '22',
+						type: 'person-filled'
+					},
+					{
+						color: '#c60814',
+						size: '22',
+						type: 'phone'
+					}
+				],
+				buttonGroup: [
+					{
+					  text: '报名活动',
+					  backgroundColor: '#ff0000',
+					  color: '#fff'
+					},
+					{
+					  text: '获取积分',
+					  backgroundColor: '#ffa200',
+					  color: '#fff'
+					}
+				],
+				statusInfo: true
+			}
+		},
+		mounted() {
+			this.query();
+		},
+		methods: {
+			async query() {
+				const res = await request.getdetails({ activityId: this.activityId });
+				const statusInfo = await request.getstatus({ activityId: this.activityId });
+				res.data.image = BASE_URL.fileUrl + res.data.image;
+				this.info = res.data;
+				this.statusInfo = statusInfo.status
+				const newDateTime = new Date().getTime();
+				const isTime = Date.parse(res.data.regEndTime);
+				const startTime = Date.parse(res.data.regStartTime);
+				if (!statusInfo.status) {
+					this.buttonGroup[0].backgroundColor = '#ff0000';
+					this.buttonGroup[0].text = '报名活动';
+					delete this.buttonGroup[0].status
+					delete this.buttonGroup[0].disable
+				}
+				if (statusInfo.status) {
+					this.buttonGroup[0].backgroundColor = '#999';
+					this.buttonGroup[0].text = '取消报名';
+					this.buttonGroup[0].status = true;
+					delete this.buttonGroup[1].disable;
+					this.buttonGroup[1].backgroundColor = '#ffa200';
+				}
+				if (newDateTime < startTime) {
+					this.buttonGroup[0].backgroundColor = '#999';
+					this.buttonGroup[0].text = '报名未开始';
+					this.buttonGroup[0].disable = true;
+				}
+				if (newDateTime > isTime) {
+					this.buttonGroup[0].backgroundColor = '#999';
+					this.buttonGroup[0].text = '报名已结束';
+					this.buttonGroup[0].disable = true;
+				}
+				if (res.data.status == 0) res.data.statusText = '活动未开始';
+				if (res.data.status == 3) res.data.statusText = '活动已结束';
+				this.buttonGroup[1].text = res.data.statusText;
+				if (res.data.status == 0 || res.data.status == 3 || !statusInfo.status) {
+					this.buttonGroup[1].backgroundColor = '#999';
+					this.buttonGroup[1].disable = true;
+				}
+			},
+			buttonClick(e) {
+				if (e.index == 0){
+					if (e.content.disable) return;
+					if (e.content.status) {
+						this.offReport();
+						return;
+					};
+					this.report();
+				} else {
+					if (e.content.disable) return;
+					this.submitPhoto();
+				}
+			},
+			async report() {
+				const res = await request.report({ activityId: this.activityId });
+				if (res.code == 200) {
+					wx.showToast({
+						title: '报名成功'
+					})
+					this.query();
+				}
+			},
+			async offReport() {
+				const res = await request.offReport({ activityId: this.activityId });
+				if (res.code == 200) {
+					wx.showToast({
+						title: '取消报名成功'
+					})
+					this.query();
+				}
+			},
+			async submitPhoto() {
+				console.log('获取积分')
+				uni.navigateTo({ url: `/pages/activity/uploadFiel?activityId=${this.activityId}` })
+			}
+		}
+	}
+</script>
+
+<style>
+	.container {
+		position: relative;
+		padding-bottom: 12vw;
+		background-color: #fff;
+	}
+	.banner {
+		width: 100%;
+		height: 50vw;
+	}
+	.content {
+		display: block;
+		width: 90%;
+		margin: 10px auto;
+	}
+	.goodNav {
+		width: 100%;
+		height: 12vw;
+		position: fixed;
+		left: 0;
+		bottom: 0;
+	}
+</style>

+ 110 - 0
pages/activity/index.vue

@@ -0,0 +1,110 @@
+<template>
+	<view class="container">
+		<uni-list>
+			<uni-list-item v-for="(item, index) in list" :key="index">
+				<!-- 自定义 header -->
+				<template v-slot:header>
+					<view class="slot-box">
+						<image class="slot-image" :src=" item.image"></image>
+						<text class="status">{{ item.statusText }}</text>
+					</view>
+				</template>
+				<!-- 自定义 body -->
+				<template v-slot:body>
+					<view class="slot-body">
+						<view class="slot-box slot-title">{{ item.topic }}</view>
+						<view class="slot-box slot-text">人数限制: {{ item.regMaxCount }}人</view>
+					</view>
+				</template>
+				<!-- 自定义 footer-->
+				<template v-slot:footer>
+					<view class="slot-footer">
+						<uni-icons class="footerIcon" type="forward" size="35"  @click="btn(item)"></uni-icons>
+					</view>
+				</template>
+			</uni-list-item>
+		</uni-list>
+		<uni-load-more :status="more" />
+	</view>
+</template>
+
+<script>
+	import request from '../../api/activity.js';
+	import { BASE_URL } from '../../env.js';
+	export default {
+		data() {
+			return {
+				list: [],
+				more: 'more',
+				page: 0,
+				size: 12,
+			}
+		},
+		mounted() {
+			this.query();
+		},
+		methods: {
+			async query() {
+				this.page += 1;
+				this.more = 'loading';
+				const res = await request.getActivity({ pageNum: this.page, pageSize: this.size });
+				res.rows.map(e => {
+					if (e.status == 0) e.statusText = '未开始';
+					// if (e.status == 1) e.statusText = '进行中';
+					if (e.status == 2) e.statusText = '已结束';
+					e.image = BASE_URL.fileUrl + e.image;
+					return e;
+				})
+				this.list.push(...res.rows)
+				// 根据总数 算页数  如果当前页 = 总页数就是没有数据  否则就是上拉加载
+				this.more = this.page >= Math.ceil(res.total / this.size) ? 'noMore' : 'more';
+			},
+			btn(e) {
+				uni.navigateTo({ url: `/pages/activity/details?activityId=${e.activityId}` })
+			}
+		},
+		// 页面生命周期中onReachBottom(页面滚动到底部的事件)
+		onReachBottom() {
+			if(this.more != 'noMore') {
+				this.more = 'more';
+				this.query();
+			}
+		}
+	}
+</script>
+
+<style>
+.slot-box {
+	position: relative;
+}
+.slot-image {
+	width: 70px;
+	height: 70px;
+}
+.status {
+	position: absolute;
+	left: 0;
+	top: 0;
+	font-size: 12px;
+	color: #fff;
+	background: #999;
+}
+.slot-body {
+	width: 70%;
+	margin-left: 10px;
+}
+.slot-title {
+	font-size: 1.2em;
+	font-weight: 600;
+	color: #000;
+	line-height: 1.5em;
+}
+.slot-text {
+	font-size: 14px;
+	color: #999;
+	line-height: 3em;
+}
+.footerIcon {
+	line-height: 4em;
+}
+</style>

+ 151 - 0
pages/activity/uploadFiel.vue

@@ -0,0 +1,151 @@
+<template>
+	<view class="container">
+		<view class="uploadBox">
+			<view class="uploadItem upload" v-for="item in form" :key="item">
+				<image :src="item" class="uploadImg"></image>
+				<image src="../../static/cw2.png" class="imgx" @click="imgx({ url: item })"></image>
+			</view>
+			<view class="upload" @click="upload('retrofit_over')">
+				<image src="../../static/xj.png" class="xiangji"></image>
+			</view>
+		</view>
+		<button class="submit" type="primary" @click="submit">提交</button>
+	</view>
+</template>
+
+<script>
+	import request from '../../api/activity.js';
+	import { BASE_URL } from '../../env.js';
+	const token = uni.getStorageSync('token');
+	export default {
+		onLoad: function (option) {
+			this.activityId = option.activityId;
+		},
+		data() {
+			return {
+				activityId: '',
+				form: []
+			}
+		},
+		async mounted() {
+			const res = await request.getPhotos({ activityId: this.activityId });
+			if (res.errcode) {
+				wx.showToast({
+					title: res.details,
+					icon: 'error'
+				})
+				setTimeout(() => {
+					uni.navigateBack()
+				}, 1000)
+				return;
+			}
+			const photos = res.data.photos?.map(e => e.photo);
+			if (photos) this.form = photos;
+		},
+		methods: {
+			async submit() {
+				if (this.form.length <= 0) {
+					wx.showToast({
+						title: '请选择图片',
+						icon: 'error'
+					})
+					return;
+				};
+				const res = await request.uploadImgs({ activityId: this.activityId, photos: this.form });
+				if (res.code == 200) {
+					wx.showToast({
+						title: '提交成功'
+					})
+					setTimeout(() => {
+						uni.navigateBack()
+					}, 1000)
+				}
+				
+			},
+			// 文件上传
+			upload() {
+				const token = uni.getStorageSync('token');
+				uni.chooseImage({
+					count: 1,
+					success: async (chooseImageRes) => {
+						wx.showLoading({
+							title: '上传中'
+						})
+						const tempFilePaths = chooseImageRes.tempFilePaths;
+						uni.uploadFile({
+							url: BASE_URL.url + '/activity/photo',
+							name: 'file',
+							header: {
+								'Authorization': `Bearer ${token}`
+							},
+							filePath: tempFilePaths[0],
+							success: (uploadFileRes) => {
+								const obj = JSON.parse(uploadFileRes.data);
+								this.form.push(BASE_URL.fileUrl + obj.imgUrl);
+							},
+							fail(e) {
+								console.log(e)
+								wx.showToast({
+									title: '上传失败'
+								})
+							},
+							complete() {
+								wx.hideLoading();
+							}
+						});
+					}
+				});
+			},
+			// 取消图片上传
+			imgx({ url }) {
+				this.form = this.form.filter(e => e !== url);
+			},
+		}
+	}
+</script>
+
+<style>
+	.upload {
+		width: 85px;
+		height: 85px;
+		border-radius: 12px;
+		border: 1px solid #999;
+		margin: 10px 0;
+		margin-right: 5px;
+		background: #dadada;
+	}
+	.xiangji {
+		display: block;
+		width: 40px;
+		height: 40px;
+		margin: 25px auto;
+	}
+	.uploadItem {
+		display: flex;
+		position: relative;
+	}
+	.uploadImg {
+		width: 100%;
+		height: 100%;
+		display: block;
+		border-radius: 12px;
+		overflow: hidden;
+	}
+	.uploadBox {
+		display: flex;
+		width: 90%;
+		margin: 5px auto;
+		flex-wrap: wrap;
+	}
+	.imgx {
+		width: 15px;
+		height: 15px;
+		position: absolute;
+		top: -5px;
+		right: -5px;
+	}
+	.submit {
+		width: 90%;
+		margin: 25px auto;
+	}
+</style>

+ 1 - 2
pages/details/index.vue

@@ -3,8 +3,7 @@
 		<uni-title type="h1" class="title" align="center" :title="info.title || info.noticeTitle"></uni-title>
 		<text class="time">创建时间:{{ info.createTime }}</text>
 		<rich-text image-menu-prevent="true" :nodes="info.content || info.noticeContent" class="content"></rich-text>
-		<!-- <view class="content" v-html="info.content || info.noticeContent"> -->
-		</view>
+		<!-- <view class="content" v-html="info.content || info.noticeContent"></view> -->
 	</view>
 </template>
 

+ 0 - 19
pages/illness/come.vue

@@ -1,19 +0,0 @@
-<template>
-	<view class="container">
-		<text class="intro">come</text>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style>
-</style>

+ 5 - 5
pages/illness/index.vue

@@ -6,7 +6,7 @@
 					<uni-list-chat :class="{ left: isId == item.residentId }" class="item" :avatar="item.avatar || '/static/user1.png'" :title="item.name" :note="item.phone" badge-positon="left">
 						<view class="chat-custom-right">
 							<text class="chat-custom-text">{{ item && item.status == 0 ? '未检' : '已检' }}</text>
-							<button type="primary" size="mini" :disabled="item && item.status == 1" @click="filing(item)">报备</button>
+							<button type="primary" size="mini" :disabled="item && item.status == 1" @click="filing(item)">已检</button>
 						</view>
 					</uni-list-chat>
 				</view>
@@ -35,7 +35,7 @@
 		},
 		async mounted() {
 			const task = await requestFamily.runningTask();
-			if (task.code == 200) {
+			if (task.code == 200 && task.data.length > 0) {
 				this.task = task.data[0];
 				this.natTaskId = task.data[0].natTaskId;
 				this.query();
@@ -48,14 +48,14 @@
 			async query() {
 				const residentIds = [];
 				const familyInfo = await requestFamily.getUserAll();
-				familyInfo.rows.forEach(e => residentIds.push(e.residentId))
+				familyInfo.data.forEach(e => residentIds.push(e.residentId))
 				if (familyInfo.code == 200) {
 					const membersStatus = await requestFamily.membersStatus({ residentIds, natTaskId: this.natTaskId });
-					familyInfo.rows = familyInfo.rows.map(e => {
+					familyInfo.data = familyInfo.data.map(e => {
 						const resident = membersStatus.data.find(j => j.residentId == e.residentId);
 						return { ...e, status: resident?.status || 0 };
 					})
-					this.list = familyInfo.rows;
+					this.list = familyInfo.data;
 				}
 			},
 			// 报备

+ 40 - 25
pages/illness/receive.vue

@@ -18,7 +18,8 @@
 					<button type="primary" size="mini" @click="userbtn(item)">详情</button>
 				</uni-list-chat>
 				<!-- <uni-icons @click="userbtn(item)"  color="#fff" class="del compose" type="compose" size="28"></uni-icons> -->
-				<uni-icons :class="{ left: isId !== item.residentId }" @click="delbtn(item)" color="#fff" class="del" type="trash-filled" size="28"></uni-icons>
+				<uni-icons v-if="item.reqStatus == 1" :class="{ left: isId !== item.residentId }" @click="delbtn(item)" color="#fff" class="del" type="trash-filled" size="28"></uni-icons>
+				<uni-icons v-else :class="{ left: isId !== item.residentId }" @click="delbtn(item)" color="#fff" class="del cancel" type="undo-filled" size="28"></uni-icons>
 			</view>
 		</uni-list>
 	</view>
@@ -49,25 +50,25 @@
 		},
 		methods: {
 			async query() {
+				this.list = [];
 				const familyInfo = await requestFamily.getFamilyInfo();
 				const res = await requestFamily.getApplyUser();
 				res.data.forEach(e => {
-					 const isTrue = familyInfo.rows.find(k => e.residentReqId == k.residentId);
-					 if (isTrue) {
-						familyInfo.rows.map(j => {
-							const data = e.residentReqId == j.residentId
-							if (data) return { ...j, reqStatus: data.reqStatus };
-							return j;
-						})
-						return;
-					}
-					familyInfo.rows.push({ ...e, residentId: e.residentReqId }) 
+					const data = familyInfo.data.find(k => e.residentId == k.residentId);
+					if (!data) familyInfo.data.push(e);
 				})
-				this.list = familyInfo.rows.map(e => {
-					if (e.reqStatus == 0) e.reqStatusText = '待审核';
-					if (e.reqStatus == 1) e.reqStatusText = '已通过';
-					if (e.reqStatus == 2) e.reqStatusText = '已拒绝';
-					return e;
+				familyInfo.data.forEach(e => {
+					const data = res.data.find(j => j.residentId == e.residentId);
+					let reqStatusText = '';
+					if (data && data.reqStatus == 0) reqStatusText = '待审核';
+					if (data && data.reqStatus == 2) reqStatusText = '已拒绝';
+					let obj = {};
+					if (data) {
+						obj = { ...data, reqStatusText }
+					}else {
+						obj =  { ...e, reqStatusText, reqStatus: 1 };
+					}
+					this.$set(this.list, this.list.length, obj);
 				});
 			},
 			// 滑动开始
@@ -80,7 +81,6 @@
 			// 滑动结束
 			touchEnd(e) {
 				const data = this.list.find(j => j.residentId == e.currentTarget.id);
-				if (data.reqStatus !== '1') return;
 				if (e.changedTouches.length == 1) {
 					//手指移动结束后水平位置
 					var endX = e.changedTouches[0].clientX;
@@ -97,14 +97,26 @@
 			},
 			// 删除
 			async delbtn(e) {
-				const res = await requestFamily.familyInfo({ ...e, reqType: '2' });
-				if (res.code == 200) {
-					this.isId = '';
-					uni.showToast({
-						title: '已提交审核',
-						duration: 2000,
-					});
+				console.log(e, 'eee')
+				let msg = '';
+				if (e.reqStatus == 1) {
+					// 提交删除申请
+					const res = await requestFamily.familyInfo({ ...e, reqType: '2' });
+					if (res.code == 200) {
+						msg = '已提交审核';
+					}
+				} else {
+					// 取消审核信息
+					const res = await requestFamily.removeApply({ residentReqId: e.residentReqId });
+					if (res.code == 200) {
+						msg = '已取消申请信息';
+					}
 				}
+				this.isId = '';
+				uni.showToast({
+					title: msg,
+					duration: 2000,
+				});
 				this.query();
 			},
 			// 添加
@@ -115,7 +127,7 @@
 			},
 			// 修改
 			userbtn(e) {
-				if (e.reqStatus == '1') {
+				if (!e.reqStatus || e.reqStatus == '1') {
 					uni.navigateTo({
 						url: `/pages/user/familyInfo?residentId=${e.residentId}`
 					})
@@ -165,6 +177,9 @@
 		width: 70px;
 		background: red;
 	}
+	.cancel {
+		background: #d6d8da;
+	}
 	.right {
 		margin-right: -70px;
 	}

+ 18 - 16
pages/index/index.vue

@@ -8,20 +8,18 @@
 			</swiper>
 		</view>
 		<uni-notice-bar moreColor="#000" scrollable show-get-more show-icon :text="notice" more-text="更多>>" @getmore="getMore" />
-		<uni-section titleFontSize="16px" class="mb-10 sectionBox" title="疫情服务" type="line">
-			<view class="card" v-for="(item, index) in list" :key="index" :border="false" @click="illnessBtn(item)">
-				<image style="width: 100%; height: 90px" :src="item.url"></image>
+		<!-- 治理 -->
+		<uni-section titleFontSize="16px"  class="mb-10 sectionBox" title="精细治理" type="line">
+			<view class="card" v-for="(item, index) in govern" :key="index" :border="false" @click="illnessBtn(item)">
+				<image style="width: 50%; height: 55px; margin: 0 auto; display: block;" :src="item.url"></image>
 				<text class="title">{{ item.title }}</text>
 			</view>
 		</uni-section>
-		<uni-section titleFontSize="16px"  class="mb-10 sectionBox" title="办事指南" type="line">
-			<template v-slot:right>
-				<!-- <text @click="morBtn">更多>></text> -->
-			</template>
-			<uni-card class="card card2" v-for="(item, index) in policyList" :key="index" @click="policyBtn(item)">
-				<image class="cover" :src="item.url"></image>
-				<h2>{{ item.title }}</h2>
-				<text class="cardText">{{ item.text }}</text>
+		<!-- 疫情 -->
+		<uni-section titleFontSize="16px" class="mb-10 sectionBox" title="疫情防控" type="line">
+			<uni-card class="card card2" v-for="(item, index) in list" :key="index" :border="false" @click="illnessBtn(item)">
+				<text class="title">{{ item.title }}</text>
+				<image style="width: 60%; height: 70px; margin-left: 40%; display: block;" :src="item.url"></image>
 			</uni-card>
 		</uni-section>
 	</view>
@@ -41,15 +39,16 @@
 				interval: 3000,
 				duration: 500,
 				indicatorDots: false,
-				bannerList: []
+				bannerList: [],
+				govern: []
 			}
 		},
 		async mounted() {
 			const config = await requestLogin.getJson();
-			const { list, bannerList, policyList } = config.data;
+			const { list, bannerList, governList } = config.data;
 			this.list = list;
 			this.bannerList = bannerList;
-			this.policyList = policyList;
+			this.govern = governList;
 			const _this = this;
 			wx.login({
 				 success: async ({ code }) => {
@@ -101,8 +100,11 @@
 </script>
 
 <style>
+	.container {
+		background: #fff;
+	}
 	.swiper {
-		height: 30vw;
+		height: 45vw;
 		overflow: hidden;
 	}
 	.uni-section-content {
@@ -140,7 +142,7 @@
 		margin: 0 !important;
 	}
 	.uni-card__content {
-		padding: 0 !important;
+		/* padding: 0 !important; */
 	}
 	h2 {
 		font-weight: 700;

+ 99 - 0
pages/integral/index.vue

@@ -0,0 +1,99 @@
+<template>
+	<view class="box">
+		<view class="top">
+			<view class="left">
+				<text class="name">荣誉积分</text>
+				<text class="num">{{ integral.honorPoints }}</text>
+			</view>
+			<view class="right">
+				<text class="name">消费积分</text>
+				<text class="num">{{ integral.spendPoints }}</text>
+			</view>
+		</view>
+		<view class="main">
+			<view class="titleBox">
+				<view class="ranking">排名</view>
+				<view class="userName">姓名</view>
+				<view class="userIntegral">积分</view>
+			</view>
+			<view class="titleBox item" v-for="(item, index) in list">
+				<view class="ranking">{{ item.num | userNum }}</view>
+				<view class="userName">{{ item.name }}</view>
+				<view class="userIntegral">{{ item.honorPoints }}分</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import request from '../../api/integral';
+	export default {
+		data() {
+			return {
+				integral: {},
+				list: []
+			}
+		},
+		async mounted() {
+			const integral = await request.getIntegral();
+			this.integral = integral.data;
+			const ranking = await request.getRanking();
+			let num = 0;
+			this.list = ranking.data.map(e => {
+				num ++ 
+				return { ...e, num }
+			});
+			
+		},
+		filters: {
+			userNum(val) {
+				if (val == 1) return '🥇';
+				if (val == 2) return '🥈';
+				if (val == 3) return '🥉';
+				return val;
+			}
+		}
+	}
+</script>
+
+<style>
+.top {
+	width: 100%;
+	height: 15vh;
+	background-color: #cb0714;
+	display: flex;
+}
+.left, .right {
+	width: 50%;
+	color: #fff;
+}
+.left .name, .right .name {
+	width: 100%;
+	text-align: center;
+	font-size: 1.2em;
+	display: block;
+}
+.left .num, .right .num {
+	display: block;
+	width: 100%;
+	text-align: center;
+	font-size: 1.5em;
+}
+.titleBox {
+	display: flex;
+	border-bottom: 1px solid #bfbfbf;
+	background-color: #dddddd;
+}
+.ranking, .userName, .userIntegral {
+	width: 32%;
+	text-align: center;
+}
+.userName {
+	border-left: 1px solid #bfbfbf;
+	border-right: 1px solid #bfbfbf;
+}
+.item {
+	background-color: #fff;
+	line-height: 2.5em;
+}
+</style>

+ 13 - 5
pages/my/index.vue

@@ -115,10 +115,18 @@
 					this.illness();
 					return;
 				}
-				// if (e == 4) {
-				// 	this.logOut();
-				// 	return;
-				// }
+				if (e == 2) {
+					uni.navigateTo({
+						url: '/pages/questionnaire/index'
+					})
+					return;
+				}
+				if (e == 3) {
+					uni.navigateTo({
+						url: '/pages/integral/index'
+					})
+					return;
+				}
 				uni.showToast({
 					title: '敬请期待',
 					icon: 'error',
@@ -146,7 +154,7 @@
 	}
 	.top {
 		height: 25vh;
-		background-color: #fd6b18;
+		background-color: #cb0714;
 		padding-top: 10px;
 		position: relative;
 		z-index: 1;

+ 5 - 53
pages/policy/index.vue

@@ -2,15 +2,9 @@
 	<view class="container">
 		<view class="top">
 			<view class="search">
-				<!-- <input class="uni-input" size="mini" confirm-type="search" placeholder="请输入您要查询的政策名称" /> -->
 				<uni-easyinput class="uni-input" prefixIcon="search" v-model="searchVal" placeholder="请输入您要查询的政策名称"></uni-easyinput>
 				<button class="searchBtn" type="default" size="mini" @click="searchBtn">搜索</button>
 			</view>
-			<view class="tabsBox">
-				<view class="tab" v-for="(item, index) in btnList" :key="index">
-					<text class="text" :class="{ current: istab == item.typeId }" @click="tabsBtn(item)">{{ item.typeName }}</text>
-				</view>
-			</view>
 		</view>
 		<uni-list border class="list">
 			<uni-list-item v-for="(item, index) in dataList" :key="index" :ellipsis="2" :title="item.title" link clickable  @click="listItemBtn(item)" ></uni-list-item>
@@ -25,57 +19,29 @@
 		data() {
 			return {
 				searchVal: '',
-				istab: 'all',
 				page: 0,
 				size: 12,
-				policyItem: null,
 				// more = 加载前, loading = 加载中, noMore = 没有更多
 				more: 'more',
-				btnList: [
-					{ typeName: '全部', typeId: 'all' },
-				],
-				dataList: [],
-				typeName: ''
+				dataList: []
 			}
 		},
 		onShow: function() {
-			this.init();
+			// this.init();
 		},
 		async mounted() {
-			// 查询分类鞋标
-			const res = await request.getTypeList({ alias: 'policy' });
-			this.btnList.push(...res.data);
+			this.getPolicyList({ typeName: 'policy' });
 		},
 		methods: {
-			async init() {
-				this.reset();
-				// 获取缓存内的标签值
-				this.policyItem = uni.getStorageSync('policyItem');
-				if (this.policyItem && (this.policyItem !== null || this.policyItem !== '')){
-					this.tabsBtn({ ...this.btnList[0], tagName: this.policyItem });
-					return;
-				}
-				this.tabsBtn({ ...this.btnList[0] });
-			},
 			// 列表点击函数
 			listItemBtn(e) {
 				uni.navigateTo({ url: `/pages/details/index?id=${e.id}` })
 			},
-			// tab标签点击函数
-			async tabsBtn(e) {
-				this.reset();
-				this.istab = e.typeId;
-				const filter = {};
-				filter.typeName = e.alias ?? 'policy';
-				if (e.tagName) filter.tagName = e.tagName;
-				if(this.searchVal !== '') filter.title = this.searchVal;
-				this.typeName = e.alias ?? 'policy';
-				await this.getPolicyList({ ...filter });
-			},
 			// 搜索函数
 			async getPolicyList(e) {
 				this.page += 1;
 				this.more = 'loading';
+				if(this.searchVal !== '') e.title = this.searchVal;
 				const res = await request.getArticleList({ pageNum: this.page, pageSize: this.size, ...e });
 				this.dataList.push(...res.rows)
 				// 根据总数 算页数  如果当前页 = 总页数就是没有数据  否则就是上拉加载
@@ -90,20 +56,13 @@
 			reset() {
 				this.page = 0;
 				this.dataList = [];
-				this.istab = 'all';
-				this.policyItem = null;
 			}
 		},
 		// 页面生命周期中onReachBottom(页面滚动到底部的事件)
 		onReachBottom() {
 			if(this.more != 'noMore') {
 				this.more = 'more';
-				const filter = {};
-				if(this.searchVal !== '') filter.title = this.searchVal;
-				if (this.policyItem !== null && this.policyItem !== '') filter.tagName = this.policyItem;
-				filter.typeName = this.typeName;
-				this.getPolicyList({ ...filter });
-				
+				this.getPolicyList();
 			}
 		}
 	}
@@ -115,10 +74,6 @@
 		background-color: #fff;
 	}
 	.top {
-		position: fixed;
-		top: 0;
-		left: 0;
-		height: 100px;
 		width: 100%;
 		z-index: 999;
 		background-color: #fff;
@@ -173,8 +128,5 @@
 	}
 	.list {
 		display: block;
-		/* width: 90%; */
-		/* margin: 0 auto; */
-		margin-top: 100px;
 	}
 </style>

+ 60 - 0
pages/questionnaire/details.vue

@@ -0,0 +1,60 @@
+<template>
+	<view class="container">
+		<uni-title type="h1" class="title" align="center" :title="info.title || info.noticeTitle"></uni-title>
+		<text class="time">创建时间:{{ info.createTime }}</text>
+		<u-parse :content="info.content" @navigate="navigate" />
+	</view>
+</template>
+
+<script>
+	import request from '../../api/cms.js';
+	import uParse from '@/components/gaoyia-parse/parse.vue'
+	export default {
+		components: {
+		    uParse
+		},
+		onLoad: function (option) {
+			this.id = option.id;
+		},
+		data() {
+			return {
+				id: '',
+				info: null,
+			}
+		},
+		async mounted() {
+			const res = await request.getArticleDetail({ id: this.id });
+			this.info = res.data;
+		},
+		methods: {
+			preview(src, e) {
+			  console.log(src, e)
+			},
+			navigate(href, e) {
+			  uni.navigateTo({ url: `/pages/questionnaire/web?url=${href}` })
+			}
+		}
+	}
+</script>
+
+<style>
+	.time {
+		width: 100%;
+		text-align: center;
+		display: block;
+		font-size: 12px;
+	}
+	.content {
+		display: block;
+		width: 90%;
+		margin: 10px auto;
+	}
+	.title {
+		width: 90%;
+		margin: 0 auto;
+		display: block;
+	}
+	.uni-title__base {
+		line-height: 1.2em !important;
+	}
+</style>

+ 116 - 0
pages/questionnaire/index.vue

@@ -0,0 +1,116 @@
+<template>
+	<view class="container">
+		<uni-list border class="list">
+			<uni-list-item v-for="(item, index) in dataList" :key="index" :ellipsis="2" :title="item.title" link clickable  @click="listItemBtn(item)" ></uni-list-item>
+		</uni-list>
+		<uni-load-more :status="more" />
+	</view>
+</template>
+
+<script>
+	import request from '../../api/cms.js';
+	export default {
+		data() {
+			return {
+				page: 0,
+				size: 12,
+				// more = 加载前, loading = 加载中, noMore = 没有更多
+				more: 'more',
+				dataList: []
+			}
+		},
+		onShow: function() {},
+		async mounted() {
+			this.getPolicyList({ typeName: 'questionnaire' });
+		},
+		methods: {
+			// 列表点击函数
+			listItemBtn(e) {
+				uni.navigateTo({ url: `/pages/questionnaire/details?id=${e.id}` })
+			},
+			// 搜索函数
+			async getPolicyList(e) {
+				this.page += 1;
+				this.more = 'loading';
+				const res = await request.getArticleList({ pageNum: this.page, pageSize: this.size, ...e });
+				this.dataList.push(...res.rows)
+				// 根据总数 算页数  如果当前页 = 总页数就是没有数据  否则就是上拉加载
+				this.more = this.page >= Math.ceil(res.total / this.size) ? 'noMore' : 'more';
+			},
+			reset() {
+				this.page = 0;
+				this.dataList = [];
+			}
+		},
+		// 页面生命周期中onReachBottom(页面滚动到底部的事件)
+		onReachBottom() {
+			if(this.more != 'noMore') {
+				this.more = 'more';
+				this.getPolicyList();
+			}
+		}
+	}
+</script>
+
+<style>
+	.container {
+		width: 100%;
+		background-color: #fff;
+	}
+	.top {
+		width: 100%;
+		z-index: 999;
+		background-color: #fff;
+	}
+	.tabsBox {
+		width: 100%;
+		border-bottom: 1px solid #d3d3d3;
+		display: flex;
+	}
+	.tab {
+		width: 25%;
+	}
+	.text {
+		display: block;
+		width: 80%;
+		margin: 0 auto;
+		text-align: center;
+	}
+	.current {
+		color: #ff9302;
+		border-bottom: 1px solid #ff9302;
+	}
+	.search {
+		width: 90%;
+		height: 2em;
+		border: 1px solid #f3f3f3;
+		background-color: #fff !important;
+		border-radius: 12px;
+		display: flex;
+		margin: 20px auto;
+	}
+	.uni-easyinput {
+		width: 70%;
+		margin-left: 5%;
+		height: 100%;
+		font-size: 14px;
+	}
+	.uni-easyinput .uni-easyinput__content {
+		border: none !important;
+		height: 100%;
+		line-height: 2em;
+	}
+	.searchBtn {
+		width: 20%;
+		background-color: #ff9302 !important;
+		border: none;
+		color: #fff !important;
+		height: 2em;
+		margin-top: 0.2em;
+		margin-left: 4%;
+		border-radius: 12px;
+	}
+	.list {
+		display: block;
+	}
+</style>

+ 41 - 0
pages/questionnaire/web.vue

@@ -0,0 +1,41 @@
+<template>
+	<web-view :src="url"></web-view>
+</template>
+
+<script>
+	export default {
+		onLoad: function (option) {
+			const token = uni.getStorageSync('token');
+			this.url = `${option.url}?token=Bearer ${token}`;
+		},
+		data() {
+			return {
+				url: '',
+			}
+		},
+		async mounted() {},
+		methods: {}
+	}
+</script>
+
+<style>
+	.time {
+		width: 100%;
+		text-align: center;
+		display: block;
+		font-size: 12px;
+	}
+	.content {
+		display: block;
+		width: 90%;
+		margin: 10px auto;
+	}
+	.title {
+		width: 90%;
+		margin: 0 auto;
+		display: block;
+	}
+	.uni-title__base {
+		line-height: 1.2em !important;
+	}
+</style>

+ 40 - 113
pages/service/index.vue

@@ -1,145 +1,72 @@
 <template>
 	<view class="container">
-		<view class="top">
-			<uni-search-bar bgColor="#EEEEEE" class="uni-mt-10" radius="15" placeholder="请输入您要查询的服务名称" clearButton="auto" cancelButton="none" @confirm="search" />
-			<view class="tabsBox">
-				<view class="tab" v-for="(item, index) in btnList" :key="index" :class="{ current: istab == item.typeId }" @click="tabsBtn(item)">
-					{{ item.typeName }}
-				</view>
-			</view>
-		</view>
-		<uni-card :title="istitle" class="cardBox">
-			<uni-list border class="list">
-				<uni-list-item v-for="(item, index) in dataList" :key="index" :note="item.note" :ellipsis="1" :title="item.title" link clickable  @click="listItemBtn(item)" ></uni-list-item>
-			</uni-list>
-			<uni-load-more :status="more" />
+		<uni-card class="card card2" v-for="(item, index) in policyList" :key="index" @click="policyBtn(item)">
+			<image class="cover" :src="item.url"></image>
+			<h2>{{ item.title }}</h2>
+			<text class="cardText">{{ item.text }}</text>
 		</uni-card>
 	</view>
 </template>
 
 <script>
-	import request from '../../api/cms.js';
+	import requestLogin from '../../api/login.js';
 	export default {
 		data() {
 			return {
-				searchVal: '',
-				id: '',
-				istitle: '',
-				page: 0,
-				size: 10,
-				istab: 'all',
-				more: 'more',
-				btnList: [
-					{ typeName: '全部', typeId: 'all' },
-				],
-				dataList: [],
-				typeName: ''
+				policyList: []
 			}
 		},
 		async mounted() {
-			// 查询分类列表
-			const res = await request.getTypeList({ alias: 'service' });
-			this.btnList.push(...res.data);
-		},
-		onShow: function() {
-			this.tabsBtn({ ...this.btnList[0] });
+			const config = await requestLogin.getJson();
+			const { list, bannerList, policyList } = config.data;
+			this.policyList = policyList;
 		},
+		onShow: function() {},
 		methods: {
-			// 搜索函数
-			search(e) {
-				if(!e.value || e.value == '') return;
-				this.reset();
-				this.searchVal = e.value;
-				this.getServiceList({ title: e.value, typeName: 'service' });
-			},
-			// tab点击函数
-			async tabsBtn(e) {
-				this.reset();
-				this.istab = e.typeId;
-				this.istitle = this.btnList.find(j => j.typeId == e.typeId)?.typeName;
-				const filter = {};
-				filter.typeName = e.alias ?? 'service';
-				this.typeName = e.alias ?? 'service';
-				if(this.searchVal !== '') filter.title = this.searchVal;
-				await this.getServiceList({ ...filter });
-			},
-			// 查询详情函数
-			listItemBtn(e) {
-				uni.navigateTo({ url: `/pages/details/index?id=${e.id}` });
+			policyBtn(e) {
+				uni.navigateTo({ url: e.path });
 			},
-			// 查询列表函数
-			async getServiceList(e) {
-				this.page += 1;
-				this.more = 'loading';
-				const res = await request.getArticleList({ pageNum: this.page, pageSize: this.size, ...e });
-				this.dataList.push(...res.rows)
-				// 根据总数 算页数  如果当前页 = 总页数就是没有数据  否则就是上拉加载
-				this.more = this.page >= Math.ceil(res.total / this.size) ? 'noMore' : 'more';
-			},
-			reset() {
-				this.page = 0;
-				this.dataList = [];
-				this.istab = 'all';
-			}
 		},
 		// 页面生命周期中onReachBottom(页面滚动到底部的事件)
-		onReachBottom() {
-			if(this.more != 'noMore') {
-				this.more = 'more';
-				const filter = {};
-				if (this.searchVal && this.searchVal !== '')  filter.title = this.searchVal;
-				filter.typeName = this.typeName;
-				this.getServiceList({ ...filter });
-			}
-		}
+		onReachBottom() {}
 	}
 </script>
 
 <style>
 	.container {
-		width: 100%;
-		background-color: #fff;
+		display: flex;
+		flex-wrap: wrap;
 	}
-	.top {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 120px;
-		z-index: 999;
-		background-color: #fff;
+	.card {
+		display: block;
+		margin: 10px;
+		width: 28%;
 	}
-	.searchBox {
-		width: 90%;
-		margin: 10px auto;
-		border: 1px solid #999;
+	.cover {
+		display: block;
+		width: 40px;
+		height: 40px;
+		margin: 5px auto;
 	}
-	.tabsBox {
-		width: 90%;
-		margin: 10px auto;
-		display: flex;
+	.uni-card {
+		padding: 0 !important;
+		margin: 0 !important;
 	}
-	.tab {
-		width: 22%;
-		margin: 1%;
-		text-align: center;
-		border: 1px solid #d3d3d3;
-		border-radius: 15px;
-		font-size: 13px;
-		padding: 8px;
+	.uni-card__content {
+		padding: 0 !important;
 	}
-	.current {
-		color: #fff !important;
-		background-color: #ff9302;
-		border: none;
+	h2 {
+		font-weight: 700;
+		width: 100%;
+		text-align: center;
+		font-size: 16px;
 	}
-	.cardBox {
-		margin-top: 110px;
+	.cardText {
 		display: block;
-		padding: 10px 0;
-	}
-	.uni-card__header-content-title {
-		font-weight: 800;
-		font-size: 18px !important;
+		width: 100%;
+		text-align: center;
+		font-size: 12px;
+		margin-bottom: 5px;
+		color: #999;
 	}
 </style>

+ 6 - 3
pages/user/familyInfo.vue

@@ -120,8 +120,6 @@
 			async setAddr(data) {
 				// 小区存在
 				if (data.estateId && data.estateId !== null) {
-					// const res = await request.buildingList({ estateId: data.estateId });
-					// this.range = res.rows.map(e => ({ ...e, text: `${e.number}栋`, value: e.buildingId }));
 					await this.onchange({ detail: { value: [{ value: data.estateId }] } });
 				}
 				// 楼栋存在
@@ -231,13 +229,18 @@
 						// 居民修改
 						this.formData.reqType = this.formData.residentId || this.formData.residentReqId ? 1 : 0;
 						const res = await requestFamily.familyInfo(this.formData);
-						if (res.code == 200) {
+						if (res.code && res.code == 200) {
 							uni.showToast({
 								title: this.formData.residentId ? '修改成功' : '添加成功',
 								duration: 2000,
 							});
 							uni.navigateBack()
 						}
+						uni.showToast({
+							title: res.details,
+							icon: 'error',
+							duration: 2000,
+						});
 					}
 				})
 			},

BIN
static/cw2.png


BIN
static/home1.png


BIN
static/home2.png


BIN
static/policy1.png


BIN
static/policy2.png


BIN
static/service1.png


BIN
static/service2.png


BIN
static/user1.png


BIN
static/user2.png


BIN
static/wj.png


BIN
static/xj.png


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseAudio.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseImg.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTable.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate0.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate1.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate10.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate11.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate2.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate3.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate4.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate5.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate6.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate7.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate8.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseTemplate9.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/components/wxParseVideo.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/gaoyia-parse/parse.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/details.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/uploadFiel.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/details/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/illness/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/illness/receive.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/integral/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/my/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/policy/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/details.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/questionnaire/web.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/service/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/familyInfo.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/index.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.js.map


+ 11 - 5
unpackage/dist/dev/mp-weixin/app.json

@@ -5,7 +5,6 @@
     "pages/service/index",
     "pages/policy/index",
     "pages/illness/index",
-    "pages/illness/come",
     "pages/illness/receive",
     "pages/illness/testingRoom",
     "pages/details/index",
@@ -13,13 +12,20 @@
     "pages/notice/index",
     "pages/user/index",
     "pages/user/familyInfo",
-    "pages/register/index"
+    "pages/register/index",
+    "pages/questionnaire/index",
+    "pages/questionnaire/details",
+    "pages/questionnaire/web",
+    "pages/integral/index",
+    "pages/activity/index",
+    "pages/activity/details",
+    "pages/activity/uploadFiel"
   ],
   "subPackages": [],
   "window": {
     "navigationBarTextStyle": "white",
     "navigationBarTitleText": "uni-app",
-    "navigationBarBackgroundColor": "#fd6b18",
+    "navigationBarBackgroundColor": "#c60814",
     "backgroundColor": "#fff"
   },
   "tabBar": {
@@ -38,13 +44,13 @@
         "pagePath": "pages/service/index",
         "iconPath": "static/service1.png",
         "selectedIconPath": "static/service2.png",
-        "text": "服务"
+        "text": "政务服务"
       },
       {
         "pagePath": "pages/policy/index",
         "iconPath": "static/policy1.png",
         "selectedIconPath": "static/policy2.png",
-        "text": "政策"
+        "text": "党建引领"
       },
       {
         "pagePath": "pages/my/index",

+ 244 - 0
unpackage/dist/dev/mp-weixin/common/main.wxss

@@ -19,6 +19,250 @@
 .zhuanfa:before {
   content: "\e610";
 }
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+/**
+ * 请在全局下引入该文件,@import '/static/wxParse.css';
+ */
+.wxParse {
+	-webkit-user-select:none;
+	        user-select:none;
+	width: 100%;
+	font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
+	color: #333;
+	line-height: 1.5;
+	font-size: 1em;
+	text-align:justify;/* //左右两端对齐 */
+}
+.wxParse view,.wxParse uni-view{
+	word-break: break-word;
+}
+.wxParse .p {
+	padding-bottom: 0.5em;
+	clear: both;
+	/* letter-spacing: 0;//字间距 */
+}
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+  display: block;
+}
+.wxParse .h1{
+  font-size: 2em;
+  line-height: 1.2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2{
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3{
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4{
+  margin: 1.33em 0;
+}
+.wxParse .h5{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h1,
+.wxParse .h2,
+.wxParse .h3,
+.wxParse .h4,
+.wxParse .h5,
+.wxParse .h6,
+.wxParse .b,
+.wxParse .strong{
+  font-weight: bolder;
+}
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+.wxParse .spaceshow{
+	  white-space: pre;
+}
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16rpx;
+  white-space: pre;
+  margin: 1em 0rpx;
+  font-size: 24rpx;
+}
+.wxParse .code {
+	overflow: auto;
+	padding: 16rpx;
+	white-space: pre;
+	margin: 1em 0rpx;
+	background: #f5f5f5;
+	font-size: 24rpx;
+}
+.wxParse .big {
+  font-size: 1.17em;
+}
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+.wxParse .strong,
+.wxParse .text,
+.wxParse .span,
+.wxParse .s {
+  display: inline;
+}
+.wxParse .a {
+  color: deepskyblue;
+}
+.wxParse .video {
+  text-align: center;
+  margin: 22rpx 0;
+}
+.wxParse .video-video {
+  width: 100%;
+}
+.wxParse .uni-image{
+	max-width: 100%;
+}
+.wxParse .img {
+  display: block;
+  max-width: 100%;
+  margin-bottom: 0em;/* //与p标签底部padding同时修改 */
+  overflow: hidden;
+}
+.wxParse .blockquote {
+  margin: 10rpx 0;
+  padding: 22rpx 0 22rpx 22rpx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6rpx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 2em;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+.wxParse .tablebox{
+	overflow: auto;
+	background-color: #f5f5f5;
+	background: #f5f5f5;
+	font-size: 13px;
+	padding: 8px;
+}
+.wxParse .table .table,.wxParse .table{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	/* width: 100%; */
+	overflow: auto;
+	white-space: pre;
+}
+.wxParse .tbody{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	border: 1px solid #dadada;
+}
+.wxParse .table  .thead, .wxParse  .table .tfoot, .wxParse  .table .th{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	background: #ececec;
+	font-weight: 40;
+}
+.wxParse  .table .tr {
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* border: 2px solid #F0AD4E; */
+	overflow:auto;
+}
+.wxParse  .table .th,
+.wxParse  .table .td{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	border: 2rpx solid #dadada;
+	overflow:auto;
+}
+.wxParse .audio, .wxParse .uni-audio-default{
+	display: block;
+}
 .uni-border {
   border: 1px #F0F0F0 solid;
 }

Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
unpackage/dist/dev/mp-weixin/common/runtime.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 2 - 2
unpackage/dist/dev/mp-weixin/common/vendor.js


+ 0 - 0
unpackage/dist/dev/mp-weixin/components/gaoyia-parse/components/wxParseAudio.js


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff