作者 卢胜

bugxiugai

正在显示 48 个修改的文件 包含 3150 行增加304 行删除
@@ -14,7 +14,6 @@ @@ -14,7 +14,6 @@
14 console.log('获取code'); 14 console.log('获取code');
15 getApp().authorization() 15 getApp().authorization()
16 } else if (e.query.code) { 16 } else if (e.query.code) {
17 - console.log(2);  
18 getApp().getOpenid(e.query.code) 17 getApp().getOpenid(e.query.code)
19 } 18 }
20 // else { 19 // else {
@@ -106,7 +105,12 @@ @@ -106,7 +105,12 @@
106 display: flex; 105 display: flex;
107 align-items: center; 106 align-items: center;
108 } 107 }
109 - 108 + .flexbetom {
  109 + flex: 1;
  110 + display: flex;
  111 + align-items: center;
  112 + justify-content: space-between;
  113 + }
110 .fw700 { 114 .fw700 {
111 font-weight: 700; 115 font-weight: 700;
112 } 116 }
@@ -48,6 +48,9 @@ export const sort_list = (data) => request({url: 'arc/sort_list',method: 'post' @@ -48,6 +48,9 @@ export const sort_list = (data) => request({url: 'arc/sort_list',method: 'post'
48 export const arc_list = (data) => request({url: 'arc/arc_list',method: 'post',data: data}) 48 export const arc_list = (data) => request({url: 'arc/arc_list',method: 'post',data: data})
49 49
50 // 详情资讯 50 // 详情资讯
51 -export const arc_detail = (arc_id) => request({url: 'arc/arc_detail',method: 'post',data: {arc_id}}) 51 +export const arc_detail = (arc_id,url) => request({url: 'arc/arc_detail',method: 'post',data: {arc_id,url}})
52 // 全部分类 52 // 全部分类
53 export const sort_all = (keyword) => request({url: 'product/sort_all',method: 'post',data: {keyword}}) 53 export const sort_all = (keyword) => request({url: 'product/sort_all',method: 'post',data: {keyword}})
  54 +
  55 +//搜索弹窗分类
  56 +export const sort_search = (keyword) => request({url: 'product/sort_search',method: 'post',data: {keyword}})
  1 +<template>
  2 + <!--增加audio标签支持-->
  3 + <audio
  4 + :id="node.attr.id"
  5 + :class="node.classStr"
  6 + :style="node.styleStr"
  7 + :src="node.attr.src"
  8 + :loop="node.attr.loop"
  9 + :poster="node.attr.poster"
  10 + :name="node.attr.name"
  11 + :author="node.attr.author"
  12 + controls></audio>
  13 +</template>
  14 +
  15 +<script>
  16 +export default {
  17 + name: 'wxParseAudio',
  18 + props: {
  19 + node: {
  20 + type: Object,
  21 + default() {
  22 + return {};
  23 + },
  24 + },
  25 + },
  26 +};
  27 +</script>
  1 +<template>
  2 + <image
  3 + :mode="node.attr.mode"
  4 + :lazy-load="node.attr.lazyLoad"
  5 + :class="node.classStr"
  6 + :style="newStyleStr || node.styleStr"
  7 + :data-src="node.attr.src"
  8 + :src="node.attr.src"
  9 + @tap="wxParseImgTap"
  10 + @load="wxParseImgLoad"
  11 + />
  12 +</template>
  13 +
  14 +<script>
  15 +export default {
  16 + name: 'wxParseImg',
  17 + data() {
  18 + return {
  19 + newStyleStr: '',
  20 + preview: true,
  21 + };
  22 + },
  23 + props: {
  24 + node: {
  25 + type: Object,
  26 + default() {
  27 + return {};
  28 + },
  29 + },
  30 + },
  31 + methods: {
  32 + wxParseImgTap(e) {
  33 + if (!this.preview) return;
  34 + const { src } = e.currentTarget.dataset;
  35 + if (!src) return;
  36 + let parent = this.$parent;
  37 + while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
  38 + parent = parent.$parent;
  39 + }
  40 + parent.preview(src, e);
  41 + },
  42 + // 图片视觉宽高计算函数区
  43 + wxParseImgLoad(e) {
  44 + const { src } = e.currentTarget.dataset;
  45 + if (!src) return;
  46 + const { width, height } = e.mp.detail;
  47 + const recal = this.wxAutoImageCal(width, height);
  48 + const { imageheight, imageWidth } = recal;
  49 + const { padding, mode } = this.node.attr;
  50 + const { styleStr } = this.node;
  51 + const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
  52 + this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;
  53 + },
  54 + // 计算视觉优先的图片宽高
  55 + wxAutoImageCal(originalWidth, originalHeight) {
  56 + // 获取图片的原始长宽
  57 + const { padding } = this.node.attr;
  58 + const windowWidth = this.node.$screen.width - (2 * padding);
  59 + const results = {};
  60 +
  61 + if (originalWidth < 60 || originalHeight < 60) {
  62 + const { src } = this.node.attr;
  63 + let parent = this.$parent;
  64 + while(!parent.preview || typeof parent.preview !== 'function') {
  65 + parent = parent.$parent;
  66 + }
  67 + parent.removeImageUrl(src);
  68 + this.preview = false;
  69 + }
  70 +
  71 + // 判断按照那种方式进行缩放
  72 + if (originalWidth > windowWidth) {
  73 + // 在图片width大于手机屏幕width时候
  74 + results.imageWidth = windowWidth;
  75 + results.imageheight = windowWidth * (originalHeight / originalWidth);
  76 + } else {
  77 + // 否则展示原来的数据
  78 + results.imageWidth = originalWidth;
  79 + results.imageheight = originalHeight;
  80 + }
  81 +
  82 + return results;
  83 + },
  84 + },
  85 +};
  86 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--table类型-->
  47 + <block v-else-if="node.tag == 'table'">
  48 + <view :class="node.classStr" class="table" :style="node.styleStr">
  49 + <block v-for="(node, index) of node.nodes" :key="index">
  50 + <wx-parse-template :node="node" />
  51 + </block>
  52 + </view>
  53 + </block>
  54 +
  55 + <!--br类型-->
  56 + <block v-else-if="node.tag == 'br'">
  57 + <text>\n</text>
  58 + </block>
  59 +
  60 + <!--其他标签-->
  61 + <block v-else>
  62 + <view :class="node.classStr" :style="node.styleStr">
  63 + <block v-for="(node, index) of node.nodes" :key="index">
  64 + <wx-parse-template :node="node" />
  65 + </block>
  66 + </view>
  67 + </block>
  68 +
  69 + </block>
  70 +
  71 + <!--判断是否是文本节点-->
  72 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  73 + </view>
  74 +</template>
  75 +
  76 +<script>
  77 + import wxParseTemplate from './wxParseTemplate1';
  78 + import wxParseImg from './wxParseImg';
  79 + import wxParseVideo from './wxParseVideo';
  80 + import wxParseAudio from './wxParseAudio';
  81 +
  82 + export default {
  83 + name: 'wxParseTemplate0',
  84 + props: {
  85 + node: {},
  86 + },
  87 + components: {
  88 + wxParseTemplate,
  89 + wxParseImg,
  90 + wxParseVideo,
  91 + wxParseAudio,
  92 + },
  93 + methods: {
  94 + wxParseATap(e) {
  95 + const {
  96 + href
  97 + } = e.currentTarget.dataset;// TODO currentTarget才有dataset
  98 + if (!href) return;
  99 + let parent = this.$parent;
  100 + while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
  101 + parent = parent.$parent;
  102 + }
  103 + parent.navigate(href, e);
  104 + },
  105 + },
  106 + };
  107 +</script>
  1 +<template>
  2 + <view :class="(node.tag == 'li' ? node.classStr : (node.node==='text'?'text':''))">
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <!-- <view :class="node.classStr" :style="node.styleStr"> -->
  16 + <view :style="node.styleStr">
  17 + <block v-for="(node, index) of node.nodes" :key="index">
  18 + <wx-parse-template :node="node" />
  19 + </block>
  20 + </view>
  21 + </block>
  22 +
  23 + <!--video类型-->
  24 + <block v-else-if="node.tag == 'video'">
  25 + <wx-parse-video :node="node" />
  26 + </block>
  27 +
  28 + <!--audio类型-->
  29 + <block v-else-if="node.tag == 'audio'">
  30 + <wx-parse-audio :node="node" />
  31 + </block>
  32 +
  33 + <!--img类型-->
  34 + <block v-else-if="node.tag == 'img'">
  35 + <wx-parse-img :node="node" />
  36 + </block>
  37 +
  38 + <!--a类型-->
  39 + <block v-else-if="node.tag == 'a'">
  40 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  41 + <block v-for="(node, index) of node.nodes" :key="index">
  42 + <wx-parse-template :node="node" />
  43 + </block>
  44 + </view>
  45 + </block>
  46 +
  47 + <!--br类型-->
  48 + <block v-else-if="node.tag == 'br'">
  49 + <text>\n</text>
  50 + </block>
  51 +
  52 + <!--其他标签-->
  53 + <block v-else>
  54 + <view :class="node.classStr" :style="node.styleStr">
  55 + <block v-for="(node, index) of node.nodes" :key="index">
  56 + <wx-parse-template :node="node" />
  57 + </block>
  58 + </view>
  59 + </block>
  60 +
  61 + </block>
  62 +
  63 + <!--判断是否是文本节点-->
  64 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  65 + </view>
  66 +</template>
  67 +
  68 +<script>
  69 + import wxParseTemplate from './wxParseTemplate2';
  70 + import wxParseImg from './wxParseImg';
  71 + import wxParseVideo from './wxParseVideo';
  72 + import wxParseAudio from './wxParseAudio';
  73 +
  74 + export default {
  75 + name: 'wxParseTemplate1',
  76 + props: {
  77 + node: {},
  78 + },
  79 + components: {
  80 + wxParseTemplate,
  81 + wxParseImg,
  82 + wxParseVideo,
  83 + wxParseAudio,
  84 + },
  85 + methods: {
  86 + wxParseATap(e) {
  87 + const {
  88 + href
  89 + } = e.currentTarget.dataset;
  90 + if (!href) return;
  91 + let parent = this.$parent;
  92 + while(!parent.preview || typeof parent.preview !== 'function') {
  93 + parent = parent.$parent;
  94 + }
  95 + parent.navigate(href, e);
  96 + },
  97 + },
  98 + };
  99 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 + </block>
  60 +
  61 + <!--判断是否是文本节点-->
  62 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  63 + </view>
  64 +</template>
  65 +
  66 +<script>
  67 + import wxParseTemplate from './wxParseTemplate11';
  68 + import wxParseImg from './wxParseImg';
  69 + import wxParseVideo from './wxParseVideo';
  70 + import wxParseAudio from './wxParseAudio';
  71 +
  72 + export default {
  73 + name: 'wxParseTemplate10',
  74 + props: {
  75 + node: {},
  76 + },
  77 + components: {
  78 + wxParseTemplate,
  79 + wxParseImg,
  80 + wxParseVideo,
  81 + wxParseAudio,
  82 + },
  83 + methods: {
  84 + wxParseATap(e) {
  85 + const {
  86 + href
  87 + } = e.currentTarget.dataset;
  88 + if (!href) return;
  89 + let parent = this.$parent;
  90 + while(!parent.preview || typeof parent.preview !== 'function') {
  91 + parent = parent.$parent;
  92 + }
  93 + parent.navigate(href, e);
  94 + },
  95 + },
  96 + };
  97 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <!--button类型-->
  6 + <block v-if="node.tag == 'button'">
  7 + <button type="default" size="mini">
  8 + </button>
  9 + </block>
  10 +
  11 + <!--li类型-->
  12 + <block v-else-if="node.tag == 'li'">
  13 + <view :class="node.classStr" :style="node.styleStr">
  14 + {{node.text}}
  15 + </view>
  16 + </block>
  17 +
  18 + <!--video类型-->
  19 + <block v-else-if="node.tag == 'video'">
  20 + <wx-parse-video :node="node" />
  21 + </block>
  22 +
  23 + <!--audio类型-->
  24 + <block v-else-if="node.tag == 'audio'">
  25 + <wx-parse-audio :node="node" />
  26 + </block>
  27 +
  28 + <!--img类型-->
  29 + <block v-else-if="node.tag == 'img'">
  30 + <wx-parse-img :node="node" />
  31 + </block>
  32 +
  33 + <!--a类型-->
  34 + <block v-else-if="node.tag == 'a'">
  35 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  36 + {{node.text}}
  37 + </view>
  38 + </block>
  39 +
  40 + <!--br类型-->
  41 + <block v-else-if="node.tag == 'br'">
  42 + <text>\n</text>
  43 + </block>
  44 +
  45 + <!--其他标签-->
  46 + <block v-else>
  47 + <view :class="node.classStr" :style="node.styleStr">
  48 + {{node.text}}
  49 + </view>
  50 + </block>
  51 + </block>
  52 +
  53 + <!--判断是否是文本节点-->
  54 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  55 + </view>
  56 +</template>
  57 +
  58 +<script>
  59 + import wxParseImg from './wxParseImg';
  60 + import wxParseVideo from './wxParseVideo';
  61 + import wxParseAudio from './wxParseAudio';
  62 +
  63 + export default {
  64 + name: 'wxParseTemplate11',
  65 + props: {
  66 + node: {},
  67 + },
  68 + components: {
  69 + wxParseImg,
  70 + wxParseVideo,
  71 + wxParseAudio,
  72 + },
  73 + methods: {
  74 + wxParseATap(e) {
  75 + const {
  76 + href
  77 + } = e.currentTarget.dataset;
  78 + if (!href) return;
  79 + let parent = this.$parent;
  80 + while(!parent.preview || typeof parent.preview !== 'function') {
  81 + parent = parent.$parent;
  82 + }
  83 + parent.navigate(href, e);
  84 + },
  85 + },
  86 + };
  87 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate3';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate2',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate4';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate3',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate5';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate4',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate6';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate5',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate7';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate6',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate8';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate7',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate9';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate8',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <view>
  3 + <!--判断是否是标签节点-->
  4 + <block v-if="node.node == 'element'">
  5 + <block v-if="node.tag == 'button'">
  6 + <button type="default" size="mini">
  7 + <block v-for="(node, index) of node.nodes" :key="index">
  8 + <wx-parse-template :node="node" />
  9 + </block>
  10 + </button>
  11 + </block>
  12 +
  13 + <!--li类型-->
  14 + <block v-else-if="node.tag == 'li'">
  15 + <view :class="node.classStr" :style="node.styleStr">
  16 + <block v-for="(node, index) of node.nodes" :key="index">
  17 + <wx-parse-template :node="node" />
  18 + </block>
  19 + </view>
  20 + </block>
  21 +
  22 + <!--video类型-->
  23 + <block v-else-if="node.tag == 'video'">
  24 + <wx-parse-video :node="node" />
  25 + </block>
  26 +
  27 + <!--audio类型-->
  28 + <block v-else-if="node.tag == 'audio'">
  29 + <wx-parse-audio :node="node" />
  30 + </block>
  31 +
  32 + <!--img类型-->
  33 + <block v-else-if="node.tag == 'img'">
  34 + <wx-parse-img :node="node" />
  35 + </block>
  36 +
  37 + <!--a类型-->
  38 + <block v-else-if="node.tag == 'a'">
  39 + <view @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
  40 + <block v-for="(node, index) of node.nodes" :key="index">
  41 + <wx-parse-template :node="node" />
  42 + </block>
  43 + </view>
  44 + </block>
  45 +
  46 + <!--br类型-->
  47 + <block v-else-if="node.tag == 'br'">
  48 + <text>\n</text>
  49 + </block>
  50 +
  51 + <!--其他标签-->
  52 + <block v-else>
  53 + <view :class="node.classStr" :style="node.styleStr">
  54 + <block v-for="(node, index) of node.nodes" :key="index">
  55 + <wx-parse-template :node="node" />
  56 + </block>
  57 + </view>
  58 + </block>
  59 +
  60 + </block>
  61 +
  62 + <!--判断是否是文本节点-->
  63 + <block v-else-if="node.node == 'text'">{{node.text}}</block>
  64 + </view>
  65 +</template>
  66 +
  67 +<script>
  68 + import wxParseTemplate from './wxParseTemplate10';
  69 + import wxParseImg from './wxParseImg';
  70 + import wxParseVideo from './wxParseVideo';
  71 + import wxParseAudio from './wxParseAudio';
  72 +
  73 + export default {
  74 + name: 'wxParseTemplate9',
  75 + props: {
  76 + node: {},
  77 + },
  78 + components: {
  79 + wxParseTemplate,
  80 + wxParseImg,
  81 + wxParseVideo,
  82 + wxParseAudio,
  83 + },
  84 + methods: {
  85 + wxParseATap(e) {
  86 + const {
  87 + href
  88 + } = e.currentTarget.dataset;
  89 + if (!href) return;
  90 + let parent = this.$parent;
  91 + while(!parent.preview || typeof parent.preview !== 'function') {
  92 + parent = parent.$parent;
  93 + }
  94 + parent.navigate(href, e);
  95 + },
  96 + },
  97 + };
  98 +</script>
  1 +<template>
  2 + <!--增加video标签支持,并循环添加-->
  3 + <view :class="node.classStr" :style="node.styleStr">
  4 + <video :class="node.classStr" class="video-video" :src="node.attr.src"></video>
  5 + </view>
  6 +</template>
  7 +
  8 +<script>
  9 +export default {
  10 + name: 'wxParseVideo',
  11 + props: {
  12 + node: {},
  13 + },
  14 +};
  15 +</script>
  1 +/**
  2 + * html2Json 改造来自: https://github.com/Jxck/html2json
  3 + *
  4 + *
  5 + * author: Di (微信小程序开发工程师)
  6 + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
  7 + * 垂直微信小程序开发交流社区
  8 + *
  9 + * github地址: https://github.com/icindy/wxParse
  10 + *
  11 + * for: 微信小程序富文本解析
  12 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
  13 + */
  14 +
  15 +import wxDiscode from './wxDiscode';
  16 +import HTMLParser from './htmlparser';
  17 +
  18 +function makeMap(str) {
  19 + const obj = {};
  20 + const items = str.split(',');
  21 + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
  22 + return obj;
  23 +}
  24 +
  25 +// Block Elements - HTML 5
  26 +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');
  27 +
  28 +// Inline Elements - HTML 5
  29 +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');
  30 +
  31 +// Elements that you can, intentionally, leave open
  32 +// (and which close themselves)
  33 +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
  34 +
  35 +function removeDOCTYPE(html) {
  36 + const isDocument = /<body.*>([^]*)<\/body>/.test(html);
  37 + return isDocument ? RegExp.$1 : html;
  38 +}
  39 +
  40 +function trimHtml(html) {
  41 + return html
  42 + .replace(/<!--.*?-->/gi, '')
  43 + .replace(/\/\*.*?\*\//gi, '')
  44 + .replace(/[ ]+</gi, '<')
  45 + .replace(/<script[^]*<\/script>/gi, '')
  46 + .replace(/<style[^]*<\/style>/gi, '');
  47 +}
  48 +
  49 +function getScreenInfo() {
  50 + const screen = {};
  51 + wx.getSystemInfo({
  52 + success: (res) => {
  53 + screen.width = res.windowWidth;
  54 + screen.height = res.windowHeight;
  55 + },
  56 + });
  57 + return screen;
  58 +}
  59 +
  60 +function html2json(html, customHandler, imageProp, host) {
  61 + // 处理字符串
  62 + html = removeDOCTYPE(html);
  63 + html = trimHtml(html);
  64 + html = wxDiscode.strDiscode(html);
  65 + // 生成node节点
  66 + const bufArray = [];
  67 + const results = {
  68 + nodes: [],
  69 + imageUrls: [],
  70 + };
  71 +
  72 + const screen = getScreenInfo();
  73 + function Node(tag) {
  74 + this.node = 'element';
  75 + this.tag = tag;
  76 +
  77 + this.$screen = screen;
  78 + }
  79 +
  80 + HTMLParser(html, {
  81 + start(tag, attrs, unary) {
  82 + // node for this element
  83 + const node = new Node(tag);
  84 +
  85 + if (bufArray.length !== 0) {
  86 + const parent = bufArray[0];
  87 + if (parent.nodes === undefined) {
  88 + parent.nodes = [];
  89 + }
  90 + }
  91 +
  92 + if (block[tag]) {
  93 + node.tagType = 'block';
  94 + } else if (inline[tag]) {
  95 + node.tagType = 'inline';
  96 + } else if (closeSelf[tag]) {
  97 + node.tagType = 'closeSelf';
  98 + }
  99 +
  100 + node.attr = attrs.reduce((pre, attr) => {
  101 + const { name } = attr;
  102 + let { value } = attr;
  103 + if (name === 'class') {
  104 + node.classStr = value;
  105 + }
  106 + // has multi attibutes
  107 + // make it array of attribute
  108 + if (name === 'style') {
  109 + node.styleStr = value;
  110 + }
  111 + if (value.match(/ /)) {
  112 + value = value.split(' ');
  113 + }
  114 +
  115 + // if attr already exists
  116 + // merge it
  117 + if (pre[name]) {
  118 + if (Array.isArray(pre[name])) {
  119 + // already array, push to last
  120 + pre[name].push(value);
  121 + } else {
  122 + // single value, make it array
  123 + pre[name] = [pre[name], value];
  124 + }
  125 + } else {
  126 + // not exist, put it
  127 + pre[name] = value;
  128 + }
  129 +
  130 + return pre;
  131 + }, {});
  132 +
  133 + // 优化样式相关属性
  134 + if (node.classStr) {
  135 + node.classStr += ` ${node.tag}`;
  136 + } else {
  137 + node.classStr = node.tag;
  138 + }
  139 + if (node.tagType === 'inline') {
  140 + node.classStr += ' inline';
  141 + }
  142 +
  143 + // 对img添加额外数据
  144 + if (node.tag === 'img') {
  145 + let imgUrl = node.attr.src;
  146 + imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
  147 + Object.assign(node.attr, imageProp, {
  148 + src: imgUrl || '',
  149 + });
  150 + if (imgUrl) {
  151 + results.imageUrls.push(imgUrl);
  152 + }
  153 + }
  154 +
  155 + // 处理a标签属性
  156 + if (node.tag === 'a') {
  157 + node.attr.href = node.attr.href || '';
  158 + }
  159 +
  160 + // 处理font标签样式属性
  161 + if (node.tag === 'font') {
  162 + const fontSize = [
  163 + 'x-small',
  164 + 'small',
  165 + 'medium',
  166 + 'large',
  167 + 'x-large',
  168 + 'xx-large',
  169 + '-webkit-xxx-large',
  170 + ];
  171 + const styleAttrs = {
  172 + color: 'color',
  173 + face: 'font-family',
  174 + size: 'font-size',
  175 + };
  176 + if (!node.styleStr) node.styleStr = '';
  177 + Object.keys(styleAttrs).forEach((key) => {
  178 + if (node.attr[key]) {
  179 + const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
  180 + node.styleStr += `${styleAttrs[key]}: ${value};`;
  181 + }
  182 + });
  183 + }
  184 +
  185 + // 临时记录source资源
  186 + if (node.tag === 'source') {
  187 + results.source = node.attr.src;
  188 + }
  189 +
  190 + if (customHandler.start) {
  191 + customHandler.start(node, results);
  192 + }
  193 +
  194 + if (unary) {
  195 + // if this tag doesn't have end tag
  196 + // like <img src="hoge.png"/>
  197 + // add to parents
  198 + const parent = bufArray[0] || results;
  199 + if (parent.nodes === undefined) {
  200 + parent.nodes = [];
  201 + }
  202 + parent.nodes.push(node);
  203 + } else {
  204 + bufArray.unshift(node);
  205 + }
  206 + },
  207 + end(tag) {
  208 + // merge into parent tag
  209 + const node = bufArray.shift();
  210 + if (node.tag !== tag) {
  211 + console.error('invalid state: mismatch end tag');
  212 + }
  213 +
  214 + // 当有缓存source资源时于于video补上src资源
  215 + if (node.tag === 'video' && results.source) {
  216 + node.attr.src = results.source;
  217 + delete results.source;
  218 + }
  219 +
  220 + if (customHandler.end) {
  221 + customHandler.end(node, results);
  222 + }
  223 +
  224 + if (bufArray.length === 0) {
  225 + results.nodes.push(node);
  226 + } else {
  227 + const parent = bufArray[0];
  228 + if (!parent.nodes) {
  229 + parent.nodes = [];
  230 + }
  231 + parent.nodes.push(node);
  232 + }
  233 + },
  234 + chars(text) {
  235 + if (!text.trim()) return;
  236 +
  237 + const node = {
  238 + node: 'text',
  239 + text,
  240 + };
  241 +
  242 + if (customHandler.chars) {
  243 + customHandler.chars(node, results);
  244 + }
  245 +
  246 + if (bufArray.length === 0) {
  247 + results.nodes.push(node);
  248 + } else {
  249 + const parent = bufArray[0];
  250 + if (parent.nodes === undefined) {
  251 + parent.nodes = [];
  252 + }
  253 + parent.nodes.push(node);
  254 + }
  255 + },
  256 + });
  257 +
  258 + return results;
  259 +}
  260 +
  261 +export default html2json;
  1 +/**
  2 + *
  3 + * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
  4 + *
  5 + * author: Di (微信小程序开发工程师)
  6 + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
  7 + * 垂直微信小程序开发交流社区
  8 + *
  9 + * github地址: https://github.com/icindy/wxParse
  10 + *
  11 + * for: 微信小程序富文本解析
  12 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
  13 + */
  14 +// Regular Expressions for parsing tags and attributes
  15 +
  16 +const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
  17 +const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
  18 +const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
  19 +
  20 +function makeMap(str) {
  21 + const obj = {};
  22 + const items = str.split(',');
  23 + for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
  24 + return obj;
  25 +}
  26 +
  27 +// Empty Elements - HTML 5
  28 +const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
  29 +
  30 +// Block Elements - HTML 5
  31 +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');
  32 +
  33 +// Inline Elements - HTML 5
  34 +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');
  35 +
  36 +// Elements that you can, intentionally, leave open
  37 +// (and which close themselves)
  38 +const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
  39 +
  40 +// Attributes that have their values filled in disabled="disabled"
  41 +const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
  42 +
  43 +function HTMLParser(html, handler) {
  44 + let index;
  45 + let chars;
  46 + let match;
  47 + let last = html;
  48 + const stack = [];
  49 +
  50 + stack.last = () => stack[stack.length - 1];
  51 +
  52 + function parseEndTag(tag, tagName) {
  53 + // If no tag name is provided, clean shop
  54 + let pos;
  55 + if (!tagName) {
  56 + pos = 0;
  57 + } else {
  58 + // Find the closest opened tag of the same type
  59 + tagName = tagName.toLowerCase();
  60 + for (pos = stack.length - 1; pos >= 0; pos -= 1) {
  61 + if (stack[pos] === tagName) break;
  62 + }
  63 + }
  64 + if (pos >= 0) {
  65 + // Close all the open elements, up the stack
  66 + for (let i = stack.length - 1; i >= pos; i -= 1) {
  67 + if (handler.end) handler.end(stack[i]);
  68 + }
  69 +
  70 + // Remove the open elements from the stack
  71 + stack.length = pos;
  72 + }
  73 + }
  74 +
  75 + function parseStartTag(tag, tagName, rest, unary) {
  76 + tagName = tagName.toLowerCase();
  77 +
  78 + if (block[tagName]) {
  79 + while (stack.last() && inline[stack.last()]) {
  80 + parseEndTag('', stack.last());
  81 + }
  82 + }
  83 +
  84 + if (closeSelf[tagName] && stack.last() === tagName) {
  85 + parseEndTag('', tagName);
  86 + }
  87 +
  88 + unary = empty[tagName] || !!unary;
  89 +
  90 + if (!unary) stack.push(tagName);
  91 +
  92 + if (handler.start) {
  93 + const attrs = [];
  94 +
  95 + rest.replace(attr, function genAttr(matches, name) {
  96 + const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
  97 +
  98 + attrs.push({
  99 + name,
  100 + value,
  101 + escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
  102 + });
  103 + });
  104 +
  105 + if (handler.start) {
  106 + handler.start(tagName, attrs, unary);
  107 + }
  108 + }
  109 + }
  110 +
  111 + while (html) {
  112 + chars = true;
  113 +
  114 + if (html.indexOf('</') === 0) {
  115 + match = html.match(endTag);
  116 +
  117 + if (match) {
  118 + html = html.substring(match[0].length);
  119 + match[0].replace(endTag, parseEndTag);
  120 + chars = false;
  121 + }
  122 +
  123 + // start tag
  124 + } else if (html.indexOf('<') === 0) {
  125 + match = html.match(startTag);
  126 +
  127 + if (match) {
  128 + html = html.substring(match[0].length);
  129 + match[0].replace(startTag, parseStartTag);
  130 + chars = false;
  131 + }
  132 + }
  133 +
  134 + if (chars) {
  135 + index = html.indexOf('<');
  136 + let text = '';
  137 + while (index === 0) {
  138 + text += '<';
  139 + html = html.substring(1);
  140 + index = html.indexOf('<');
  141 + }
  142 + text += index < 0 ? html : html.substring(0, index);
  143 + html = index < 0 ? '' : html.substring(index);
  144 +
  145 + if (handler.chars) handler.chars(text);
  146 + }
  147 +
  148 + if (html === last) throw new Error(`Parse Error: ${html}`);
  149 + last = html;
  150 + }
  151 +
  152 + // Clean up any remaining tags
  153 + parseEndTag();
  154 +}
  155 +
  156 +export default HTMLParser;
  1 +// HTML 支持的数学符号
  2 +function strNumDiscode(str) {
  3 + str = str.replace(/&forall;/g, '∀');
  4 + str = str.replace(/&part;/g, '∂');
  5 + str = str.replace(/&exist;/g, '∃');
  6 + str = str.replace(/&empty;/g, '∅');
  7 + str = str.replace(/&nabla;/g, '∇');
  8 + str = str.replace(/&isin;/g, '∈');
  9 + str = str.replace(/&notin;/g, '∉');
  10 + str = str.replace(/&ni;/g, '∋');
  11 + str = str.replace(/&prod;/g, '∏');
  12 + str = str.replace(/&sum;/g, '∑');
  13 + str = str.replace(/&minus;/g, '−');
  14 + str = str.replace(/&lowast;/g, '∗');
  15 + str = str.replace(/&radic;/g, '√');
  16 + str = str.replace(/&prop;/g, '∝');
  17 + str = str.replace(/&infin;/g, '∞');
  18 + str = str.replace(/&ang;/g, '∠');
  19 + str = str.replace(/&and;/g, '∧');
  20 + str = str.replace(/&or;/g, '∨');
  21 + str = str.replace(/&cap;/g, '∩');
  22 + str = str.replace(/&cup;/g, '∪');
  23 + str = str.replace(/&int;/g, '∫');
  24 + str = str.replace(/&there4;/g, '∴');
  25 + str = str.replace(/&sim;/g, '∼');
  26 + str = str.replace(/&cong;/g, '≅');
  27 + str = str.replace(/&asymp;/g, '≈');
  28 + str = str.replace(/&ne;/g, '≠');
  29 + str = str.replace(/&le;/g, '≤');
  30 + str = str.replace(/&ge;/g, '≥');
  31 + str = str.replace(/&sub;/g, '⊂');
  32 + str = str.replace(/&sup;/g, '⊃');
  33 + str = str.replace(/&nsub;/g, '⊄');
  34 + str = str.replace(/&sube;/g, '⊆');
  35 + str = str.replace(/&supe;/g, '⊇');
  36 + str = str.replace(/&oplus;/g, '⊕');
  37 + str = str.replace(/&otimes;/g, '⊗');
  38 + str = str.replace(/&perp;/g, '⊥');
  39 + str = str.replace(/&sdot;/g, '⋅');
  40 + return str;
  41 +}
  42 +
  43 +// HTML 支持的希腊字母
  44 +function strGreeceDiscode(str) {
  45 + str = str.replace(/&Alpha;/g, 'Α');
  46 + str = str.replace(/&Beta;/g, 'Β');
  47 + str = str.replace(/&Gamma;/g, 'Γ');
  48 + str = str.replace(/&Delta;/g, 'Δ');
  49 + str = str.replace(/&Epsilon;/g, 'Ε');
  50 + str = str.replace(/&Zeta;/g, 'Ζ');
  51 + str = str.replace(/&Eta;/g, 'Η');
  52 + str = str.replace(/&Theta;/g, 'Θ');
  53 + str = str.replace(/&Iota;/g, 'Ι');
  54 + str = str.replace(/&Kappa;/g, 'Κ');
  55 + str = str.replace(/&Lambda;/g, 'Λ');
  56 + str = str.replace(/&Mu;/g, 'Μ');
  57 + str = str.replace(/&Nu;/g, 'Ν');
  58 + str = str.replace(/&Xi;/g, 'Ν');
  59 + str = str.replace(/&Omicron;/g, 'Ο');
  60 + str = str.replace(/&Pi;/g, 'Π');
  61 + str = str.replace(/&Rho;/g, 'Ρ');
  62 + str = str.replace(/&Sigma;/g, 'Σ');
  63 + str = str.replace(/&Tau;/g, 'Τ');
  64 + str = str.replace(/&Upsilon;/g, 'Υ');
  65 + str = str.replace(/&Phi;/g, 'Φ');
  66 + str = str.replace(/&Chi;/g, 'Χ');
  67 + str = str.replace(/&Psi;/g, 'Ψ');
  68 + str = str.replace(/&Omega;/g, 'Ω');
  69 +
  70 + str = str.replace(/&alpha;/g, 'α');
  71 + str = str.replace(/&beta;/g, 'β');
  72 + str = str.replace(/&gamma;/g, 'γ');
  73 + str = str.replace(/&delta;/g, 'δ');
  74 + str = str.replace(/&epsilon;/g, 'ε');
  75 + str = str.replace(/&zeta;/g, 'ζ');
  76 + str = str.replace(/&eta;/g, 'η');
  77 + str = str.replace(/&theta;/g, 'θ');
  78 + str = str.replace(/&iota;/g, 'ι');
  79 + str = str.replace(/&kappa;/g, 'κ');
  80 + str = str.replace(/&lambda;/g, 'λ');
  81 + str = str.replace(/&mu;/g, 'μ');
  82 + str = str.replace(/&nu;/g, 'ν');
  83 + str = str.replace(/&xi;/g, 'ξ');
  84 + str = str.replace(/&omicron;/g, 'ο');
  85 + str = str.replace(/&pi;/g, 'π');
  86 + str = str.replace(/&rho;/g, 'ρ');
  87 + str = str.replace(/&sigmaf;/g, 'ς');
  88 + str = str.replace(/&sigma;/g, 'σ');
  89 + str = str.replace(/&tau;/g, 'τ');
  90 + str = str.replace(/&upsilon;/g, 'υ');
  91 + str = str.replace(/&phi;/g, 'φ');
  92 + str = str.replace(/&chi;/g, 'χ');
  93 + str = str.replace(/&psi;/g, 'ψ');
  94 + str = str.replace(/&omega;/g, 'ω');
  95 + str = str.replace(/&thetasym;/g, 'ϑ');
  96 + str = str.replace(/&upsih;/g, 'ϒ');
  97 + str = str.replace(/&piv;/g, 'ϖ');
  98 + str = str.replace(/&middot;/g, '·');
  99 + return str;
  100 +}
  101 +
  102 +function strcharacterDiscode(str) {
  103 + // 加入常用解析
  104 + str = str.replace(/&nbsp;/g, ' ');
  105 + str = str.replace(/&ensp;/g, ' ');
  106 + str = str.replace(/&emsp;/g, ' ');
  107 + str = str.replace(/&quot;/g, "'");
  108 + str = str.replace(/&amp;/g, '&');
  109 + str = str.replace(/&lt;/g, '<');
  110 + str = str.replace(/&gt;/g, '>');
  111 + str = str.replace(/&#8226;/g, '•');
  112 +
  113 + return str;
  114 +}
  115 +
  116 +// HTML 支持的其他实体
  117 +function strOtherDiscode(str) {
  118 + str = str.replace(/&OElig;/g, 'Œ');
  119 + str = str.replace(/&oelig;/g, 'œ');
  120 + str = str.replace(/&Scaron;/g, 'Š');
  121 + str = str.replace(/&scaron;/g, 'š');
  122 + str = str.replace(/&Yuml;/g, 'Ÿ');
  123 + str = str.replace(/&fnof;/g, 'ƒ');
  124 + str = str.replace(/&circ;/g, 'ˆ');
  125 + str = str.replace(/&tilde;/g, '˜');
  126 + str = str.replace(/&ensp;/g, '');
  127 + str = str.replace(/&emsp;/g, '');
  128 + str = str.replace(/&thinsp;/g, '');
  129 + str = str.replace(/&zwnj;/g, '');
  130 + str = str.replace(/&zwj;/g, '');
  131 + str = str.replace(/&lrm;/g, '');
  132 + str = str.replace(/&rlm;/g, '');
  133 + str = str.replace(/&ndash;/g, '–');
  134 + str = str.replace(/&mdash;/g, '—');
  135 + str = str.replace(/&lsquo;/g, '‘');
  136 + str = str.replace(/&rsquo;/g, '’');
  137 + str = str.replace(/&sbquo;/g, '‚');
  138 + str = str.replace(/&ldquo;/g, '“');
  139 + str = str.replace(/&rdquo;/g, '”');
  140 + str = str.replace(/&bdquo;/g, '„');
  141 + str = str.replace(/&dagger;/g, '†');
  142 + str = str.replace(/&Dagger;/g, '‡');
  143 + str = str.replace(/&bull;/g, '•');
  144 + str = str.replace(/&hellip;/g, '…');
  145 + str = str.replace(/&permil;/g, '‰');
  146 + str = str.replace(/&prime;/g, '′');
  147 + str = str.replace(/&Prime;/g, '″');
  148 + str = str.replace(/&lsaquo;/g, '‹');
  149 + str = str.replace(/&rsaquo;/g, '›');
  150 + str = str.replace(/&oline;/g, '‾');
  151 + str = str.replace(/&euro;/g, '€');
  152 + str = str.replace(/&trade;/g, '™');
  153 +
  154 + str = str.replace(/&larr;/g, '←');
  155 + str = str.replace(/&uarr;/g, '↑');
  156 + str = str.replace(/&rarr;/g, '→');
  157 + str = str.replace(/&darr;/g, '↓');
  158 + str = str.replace(/&harr;/g, '↔');
  159 + str = str.replace(/&crarr;/g, '↵');
  160 + str = str.replace(/&lceil;/g, '⌈');
  161 + str = str.replace(/&rceil;/g, '⌉');
  162 +
  163 + str = str.replace(/&lfloor;/g, '⌊');
  164 + str = str.replace(/&rfloor;/g, '⌋');
  165 + str = str.replace(/&loz;/g, '◊');
  166 + str = str.replace(/&spades;/g, '♠');
  167 + str = str.replace(/&clubs;/g, '♣');
  168 + str = str.replace(/&hearts;/g, '♥');
  169 +
  170 + str = str.replace(/&diams;/g, '♦');
  171 + str = str.replace(/&#39;/g, "'");
  172 + return str;
  173 +}
  174 +
  175 +function strDiscode(str) {
  176 + str = strNumDiscode(str);
  177 + str = strGreeceDiscode(str);
  178 + str = strcharacterDiscode(str);
  179 + str = strOtherDiscode(str);
  180 + return str;
  181 +}
  182 +
  183 +function urlToHttpUrl(url, domain) {
  184 + if (/^\/\//.test(url)) {
  185 + return `https:${url}`;
  186 + } else if (/^\//.test(url)) {
  187 + return `https://${domain}${url}`;
  188 + }
  189 + return url;
  190 +}
  191 +
  192 +export default {
  193 + strDiscode,
  194 + urlToHttpUrl,
  195 +};
  1 +## uParse 适用于 uni-app/mpvue 的富文本解析组件
  2 +
  3 +> 支持 Html、Markdown 解析,Fork自: [mpvue-wxParse](https://github.com/F-loat/mpvue-wxParse)
  4 +
  5 +
  6 +## 属性
  7 +
  8 +| 名称 | 类型 | 默认值 | 描述 |
  9 +| -----------------|--------------- | ------------- | ---------------- |
  10 +| loading | Boolean | false | 数据加载状态 |
  11 +| className | String | — | 自定义 class 名称 |
  12 +| content | String | — | 渲染内容 |
  13 +| noData | String | 数据不能为空 | 空数据时的渲染展示 |
  14 +| startHandler | Function | 见源码 | 自定义 parser 函数 |
  15 +| endHandler | Function | null | 自定义 parser 函数 |
  16 +| charsHandler | Function | null | 自定义 parser 函数 |
  17 +| imageProp | Object | 见下文 | 图片相关参数 |
  18 +
  19 +### 自定义 parser 函数具体介绍
  20 +
  21 +* 传入的参数为当前节点 `node` 对象及解析结果 `results` 对象,例如 `startHandler(node, results)`
  22 +* 无需返回值,通过对传入的参数直接操作来完成需要的改动
  23 +* 自定义函数会在原解析函数处理之后执行
  24 +
  25 +### imageProp 对象具体属性
  26 +
  27 +| 名称 | 类型 | 默认值 | 描述 |
  28 +| -----------------|--------------- | ------------- | ------------------ |
  29 +| mode | String | 'aspectFit' | 图片裁剪、缩放的模式 |
  30 +| padding | Number | 0 | 图片内边距 |
  31 +| lazyLoad | Boolean | false | 图片懒加载 |
  32 +| domain | String | '' | 图片服务域名 |
  33 +
  34 +## 事件
  35 +
  36 +| 名称 | 参数 | 描述 |
  37 +| -----------------|----------------- | ---------------- |
  38 +| preview | 图片地址,原始事件 | 预览图片时触发 |
  39 +| navigate | 链接地址,原始事件 | 点击链接时触发 |
  40 +
  41 +## 基本使用方法
  42 +
  43 +
  44 +``` vue
  45 +<template>
  46 + <div>
  47 + <u-parse :content="article" @preview="preview" @navigate="navigate" />
  48 + </div>
  49 +</template>
  50 +
  51 +<script>
  52 +import uParse from '@/components/u-parse/u-parse.vue'
  53 +
  54 +export default {
  55 + components: {
  56 + uParse
  57 + },
  58 + data () {
  59 + return {
  60 + article: '<div>我是HTML代码</div>'
  61 + }
  62 + },
  63 + methods: {
  64 + preview(src, e) {
  65 + // do something
  66 + },
  67 + navigate(href, e) {
  68 + // do something
  69 + }
  70 + }
  71 +}
  72 +</script>
  73 +
  74 +<style>
  75 +@import url("@/components/u-parse/u-parse.css");
  76 +</style>
  77 +```
  78 +
  79 +
  80 +## 渲染 Markdown
  81 +
  82 +> 先将 markdown 转换为 html 即可
  83 +
  84 +```
  85 +npm install marked
  86 +```
  87 +
  88 +``` js
  89 +import marked from 'marked'
  90 +import uParse from '@/components/u-parse/u-parse.vue'
  91 +
  92 +export default {
  93 + components: {
  94 + uParse
  95 + },
  96 + data () {
  97 + return {
  98 + article: marked(`#hello, markdown!`)
  99 + }
  100 + }
  101 +}
  102 +```
  1 +/**
  2 + * author: Di (微信小程序开发工程师)
  3 + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
  4 + * 垂直微信小程序开发交流社区
  5 + *
  6 + * github地址: https://github.com/icindy/wxParse
  7 + *
  8 + * for: 微信小程序富文本解析
  9 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
  10 + */
  11 +
  12 +.wxParse {
  13 + width: 100%;
  14 + font-family: Helvetica, sans-serif;
  15 + font-size: 30upx;
  16 + color: #666;
  17 + line-height: 1.8;
  18 +}
  19 +
  20 +.wxParse view {
  21 + word-break: hyphenate;
  22 +}
  23 +
  24 +.wxParse .inline {
  25 + display: inline;
  26 + margin: 0;
  27 + padding: 0;
  28 +}
  29 +
  30 +.wxParse .div {
  31 + margin: 0;
  32 + padding: 0;
  33 +}
  34 +
  35 +.wxParse .h1 .text {
  36 + font-size: 2em;
  37 + margin: 0.67em 0;
  38 +}
  39 +.wxParse .h2 .text {
  40 + font-size: 1.5em;
  41 + margin: 0.83em 0;
  42 +}
  43 +.wxParse .h3 .text {
  44 + font-size: 1.17em;
  45 + margin: 1em 0;
  46 +}
  47 +.wxParse .h4 .text {
  48 + margin: 1.33em 0;
  49 +}
  50 +.wxParse .h5 .text {
  51 + font-size: 0.83em;
  52 + margin: 1.67em 0;
  53 +}
  54 +.wxParse .h6 .text {
  55 + font-size: 0.67em;
  56 + margin: 2.33em 0;
  57 +}
  58 +
  59 +.wxParse .h1 .text,
  60 +.wxParse .h2 .text,
  61 +.wxParse .h3 .text,
  62 +.wxParse .h4 .text,
  63 +.wxParse .h5 .text,
  64 +.wxParse .h6 .text,
  65 +.wxParse .b,
  66 +.wxParse .strong {
  67 + font-weight: bolder;
  68 +}
  69 +
  70 +
  71 +.wxParse .p {
  72 + margin: 1em 0;
  73 +}
  74 +
  75 +.wxParse .i,
  76 +.wxParse .cite,
  77 +.wxParse .em,
  78 +.wxParse .var,
  79 +.wxParse .address {
  80 + font-style: italic;
  81 +}
  82 +
  83 +.wxParse .pre,
  84 +.wxParse .tt,
  85 +.wxParse .code,
  86 +.wxParse .kbd,
  87 +.wxParse .samp {
  88 + font-family: monospace;
  89 +}
  90 +.wxParse .pre {
  91 + overflow: auto;
  92 + background: #f5f5f5;
  93 + padding: 16upx;
  94 + white-space: pre;
  95 + margin: 1em 0upx;
  96 +}
  97 +.wxParse .code {
  98 + display: inline;
  99 + background: #f5f5f5;
  100 +}
  101 +
  102 +.wxParse .big {
  103 + font-size: 1.17em;
  104 +}
  105 +
  106 +.wxParse .small,
  107 +.wxParse .sub,
  108 +.wxParse .sup {
  109 + font-size: 0.83em;
  110 +}
  111 +
  112 +.wxParse .sub {
  113 + vertical-align: sub;
  114 +}
  115 +.wxParse .sup {
  116 + vertical-align: super;
  117 +}
  118 +
  119 +.wxParse .s,
  120 +.wxParse .strike,
  121 +.wxParse .del {
  122 + text-decoration: line-through;
  123 +}
  124 +
  125 +.wxParse .strong,
  126 +.wxParse .s {
  127 + display: inline;
  128 +}
  129 +
  130 +.wxParse .a {
  131 + color: deepskyblue;
  132 +}
  133 +
  134 +.wxParse .video {
  135 + text-align: center;
  136 + margin: 22upx 0;
  137 +}
  138 +
  139 +.wxParse .video-video {
  140 + width: 100%;
  141 +}
  142 +
  143 +.wxParse .img {
  144 + display: inline-block;
  145 + width: 0;
  146 + height: 0;
  147 + max-width: 100%;
  148 + overflow: hidden;
  149 +}
  150 +
  151 +.wxParse .blockquote {
  152 + margin: 10upx 0;
  153 + padding: 22upx 0 22upx 22upx;
  154 + font-family: Courier, Calibri, "宋体";
  155 + background: #f5f5f5;
  156 + border-left: 6upx solid #dbdbdb;
  157 +}
  158 +.wxParse .blockquote .p {
  159 + margin: 0;
  160 +}
  161 +
  162 +.wxParse .ul, .wxParse .ol {
  163 + display: block;
  164 + margin: 1em 0;
  165 + padding-left: 33upx;
  166 +}
  167 +.wxParse .ol {
  168 + list-style-type: disc;
  169 +}
  170 +.wxParse .ol {
  171 + list-style-type: decimal;
  172 +}
  173 +.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
  174 + display: list-item;
  175 + align-items: baseline;
  176 + text-align: match-parent;
  177 +}
  178 +
  179 +.wxParse .ol>.li,.wxParse .ul>.li {
  180 + display: list-item;
  181 + align-items: baseline;
  182 + text-align: match-parent;
  183 +}
  184 +.wxParse .ul .ul, .wxParse .ol .ul {
  185 + list-style-type: circle;
  186 +}
  187 +.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
  188 + list-style-type: square;
  189 +}
  190 +
  191 +.wxParse .u {
  192 + text-decoration: underline;
  193 +}
  194 +.wxParse .hide {
  195 + display: none;
  196 +}
  197 +.wxParse .del {
  198 + display: inline;
  199 +}
  200 +.wxParse .figure {
  201 + overflow: hidden;
  202 +}
  203 +
  204 +.wxParse .table {
  205 + width: 100%;
  206 +}
  207 +.wxParse .thead, .wxParse .tfoot, .wxParse .tr {
  208 + display: flex;
  209 + flex-direction: row;
  210 +}
  211 +.wxParse .tr {
  212 + width:100%;
  213 + display: flex;
  214 + border-right: 2upx solid #e0e0e0;
  215 + border-bottom: 2upx solid #e0e0e0;
  216 +}
  217 +.wxParse .th,
  218 +.wxParse .td {
  219 + display: flex;
  220 + width: 1276upx;
  221 + overflow: auto;
  222 + flex: 1;
  223 + padding: 11upx;
  224 + border-left: 2upx solid #e0e0e0;
  225 +}
  226 +.wxParse .td:last {
  227 + border-top: 2upx solid #e0e0e0;
  228 +}
  229 +.wxParse .th {
  230 + background: #f0f0f0;
  231 + border-top: 2upx solid #e0e0e0;
  232 +}
  1 +<!--**
  2 + * forked from:https://github.com/F-loat/mpvue-wxParse
  3 + *
  4 + * github地址: https://github.com/dcloudio/uParse
  5 + *
  6 + * for: uni-app框架下 富文本解析
  7 + */-->
  8 +
  9 +<template>
  10 +<!--基础元素-->
  11 +<div class="wxParse" :class="className" v-if="!loading">
  12 + <block v-for="(node,index) of nodes" :key="index">
  13 + <wxParseTemplate :node="node" />
  14 + </block>
  15 +</div>
  16 +</template>
  17 +
  18 +<script>
  19 +import HtmlToJson from './libs/html2json';
  20 +import wxParseTemplate from './components/wxParseTemplate0';
  21 +
  22 +export default {
  23 + name: 'wxParse',
  24 + props: {
  25 + loading: {
  26 + type: Boolean,
  27 + default: false,
  28 + },
  29 + className: {
  30 + type: String,
  31 + default: '',
  32 + },
  33 + content: {
  34 + type: String,
  35 + default: '',
  36 + },
  37 + noData: {
  38 + type: String,
  39 + default: '<div style="color: red;">数据不能为空</div>',
  40 + },
  41 + startHandler: {
  42 + type: Function,
  43 + default() {
  44 + return (node) => {
  45 + node.attr.class = null;
  46 + node.attr.style = null;
  47 + };
  48 + },
  49 + },
  50 + endHandler: {
  51 + type: Function,
  52 + default: null,
  53 + },
  54 + charsHandler: {
  55 + type: Function,
  56 + default: null,
  57 + },
  58 + imageProp: {
  59 + type: Object,
  60 + default() {
  61 + return {
  62 + mode: 'aspectFit',
  63 + padding: 0,
  64 + lazyLoad: false,
  65 + domain: '',
  66 + };
  67 + },
  68 + },
  69 + },
  70 + components: {
  71 + wxParseTemplate,
  72 + },
  73 + data() {
  74 + return {
  75 + imageUrls: [],
  76 + };
  77 + },
  78 + computed: {
  79 + nodes() {
  80 + const {
  81 + content,
  82 + noData,
  83 + imageProp,
  84 + startHandler,
  85 + endHandler,
  86 + charsHandler,
  87 + } = this;
  88 + const parseData = content || noData;
  89 + const customHandler = {
  90 + start: startHandler,
  91 + end: endHandler,
  92 + chars: charsHandler,
  93 + };
  94 + const results = HtmlToJson(parseData, customHandler, imageProp, this);
  95 + this.imageUrls = results.imageUrls;
  96 + console.log(results)
  97 + return results.nodes;
  98 + },
  99 + },
  100 + methods: {
  101 + navigate(href, $event) {
  102 + this.$emit('navigate', href, $event);
  103 + },
  104 + preview(src, $event) {
  105 + if (!this.imageUrls.length) return;
  106 + wx.previewImage({
  107 + current: src,
  108 + urls: this.imageUrls,
  109 + });
  110 + this.$emit('preview', src, $event);
  111 + },
  112 + removeImageUrl(src) {
  113 + const { imageUrls } = this;
  114 + imageUrls.splice(imageUrls.indexOf(src), 1);
  115 + },
  116 + },
  117 +};
  118 +</script>
1 { 1 {
2 "name" : "Bitcoin", 2 "name" : "Bitcoin",
3 - "appid" : "__UNI__D80DC8B", 3 + "appid" : "__UNI__D7F2A57",
4 "description" : "", 4 "description" : "",
5 "versionName" : "1.0.0", 5 "versionName" : "1.0.0",
6 "versionCode" : "100", 6 "versionCode" : "100",
@@ -207,6 +207,15 @@ @@ -207,6 +207,15 @@
207 } 207 }
208 208
209 } 209 }
  210 + ,{
  211 + "path" : "pages/index/grant",
  212 + "style" :
  213 + {
  214 + "navigationBarTitleText": "",
  215 + "enablePullDownRefresh": false
  216 + }
  217 +
  218 + }
210 ], 219 ],
211 "globalStyle": { 220 "globalStyle": {
212 "navigationBarTextStyle": "black", 221 "navigationBarTextStyle": "black",
1 <template> 1 <template>
2 <view class="buydetail"> 2 <view class="buydetail">
3 <view class="buytop"> 3 <view class="buytop">
4 - <text class="buytitle"> 数字货币</text> 4 + <!-- <text class="buytitle"> 数字货币</text> -->
5 <view class="buybox flexA"> 5 <view class="buybox flexA">
6 <image :src="list1[0]" mode=""></image> 6 <image :src="list1[0]" mode=""></image>
7 <view class="buymiss"> 7 <view class="buymiss">
@@ -120,9 +120,11 @@ @@ -120,9 +120,11 @@
120 is_cert: "", 120 is_cert: "",
121 }, 121 },
122 show: false, 122 show: false,
  123 + opid:"",
123 } 124 }
124 }, 125 },
125 onLoad(options) { 126 onLoad(options) {
  127 + this.opid=uni.getStorageSync('openId')
126 this.product_id = options.id 128 this.product_id = options.id
127 this.product_detail() 129 this.product_detail()
128 this.last_buy_data() 130 this.last_buy_data()
@@ -6,11 +6,16 @@ @@ -6,11 +6,16 @@
6 <view class="time"> 6 <view class="time">
7 发布时间{{detail.publishtime}} 7 发布时间{{detail.publishtime}}
8 </view> 8 </view>
9 - <image src="../../static/ic_fenxiang.png" mode=""></image> 9 + <image src="../../static/ic_fenxiang.png" mode="" @click="shareModel=true"></image>
10 </view> 10 </view>
11 <rich-text :nodes="detail.content"></rich-text> 11 <rich-text :nodes="detail.content"></rich-text>
12 </view> 12 </view>
13 - 13 + <view class="share" v-if="shareModel" @click="shareModel=false">
  14 + <image src="/static/detailShare.png" mode=""></image>
  15 + <view class="">
  16 + 点击这里进行分享
  17 + </view>
  18 + </view>
14 </view> 19 </view>
15 </template> 20 </template>
16 21
@@ -18,6 +23,8 @@ @@ -18,6 +23,8 @@
18 import { 23 import {
19 arc_detail 24 arc_detail
20 } from '@/api/index.js' 25 } from '@/api/index.js'
  26 + var jweixin = require('jweixin-module');
  27 + console.log(jweixin, "000")
21 export default { 28 export default {
22 data() { 29 data() {
23 return { 30 return {
@@ -26,19 +33,31 @@ @@ -26,19 +33,31 @@
26 title: "", 33 title: "",
27 publishtime: "", 34 publishtime: "",
28 content: "", 35 content: "",
29 - } 36 + },
  37 + shareModel: false,
  38 + Images: "http://yuanjie.n.broing.cn/assets/img/share_logo.jpg",
  39 + jssdk:{},
30 } 40 }
31 }, 41 },
32 onLoad(options) { 42 onLoad(options) {
33 this.id = options.id 43 this.id = options.id
  44 + let title = uni.getStorageSync("deltitle")
  45 + uni.setNavigationBarTitle({
  46 + title: title //这是修改后的导航栏文字
  47 + })
34 this.arc_detail() 48 this.arc_detail()
35 }, 49 },
  50 + onUnload() {
  51 + uni.removeStorageSync("deltitle")
  52 + },
36 methods: { 53 methods: {
37 //详情 54 //详情
38 async arc_detail() { 55 async arc_detail() {
39 try { 56 try {
40 - const res = await arc_detail(this.id) 57 + const res = await arc_detail(this.id, window.location.href)
41 this.detail = res.detail 58 this.detail = res.detail
  59 + this.jssdk = res.jssdk
  60 + this.share()
42 console.log('arc_detail', res) 61 console.log('arc_detail', res)
43 // 保存数据 62 // 保存数据
44 } catch (err) { 63 } catch (err) {
@@ -49,6 +68,83 @@ @@ -49,6 +68,83 @@
49 console.log('arc_detail', err) 68 console.log('arc_detail', err)
50 } 69 }
51 }, 70 },
  71 + share() {
  72 + let that = this;
  73 + jweixin.config({
  74 + debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  75 + appId: that.jssdk.appId, // 必填,公众号的唯一标识
  76 + timestamp: that.jssdk.timestamp, // 必填,生成签名的时间戳
  77 + nonceStr: that.jssdk.nonceStr, // 必填,生成签名的随机串
  78 + signature: that.jssdk.signature, // 必填,签名
  79 + jsApiList: that.jssdk.jsApiList // 必填,需要使用的JS接口列表
  80 + })
  81 + jweixin.error(function(res) {
  82 + console.log(res, '错误')
  83 + });
  84 + console.log('分享了', that.jssdk.signature);
  85 + jweixin.ready(function() {
  86 +
  87 + //分享给朋友
  88 + jweixin.onMenuShareAppMessage({
  89 + title: that.detail.title, // 分享标题
  90 + link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  91 + desc: "【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
  92 + imgUrl: that.Images, // 分享图标
  93 + success: function() {
  94 + // 用户点击了分享后执行的回调函数
  95 + uni.showToast({
  96 + title: '分享成功',
  97 + duration: 2000
  98 + });
  99 + },
  100 + cancel: function(res) {
  101 + console.log('取消分享')
  102 + }
  103 + });
  104 + jweixin.updateAppMessageShareData({
  105 + title: that.detail.title, // 分享标题
  106 + link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  107 + desc: "【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
  108 + imgUrl: that.Images, // 分享图标
  109 + success: function() {
  110 + console.log('设置分享给朋友成功')
  111 + },
  112 + cancel: function(res) {
  113 + console.log('取消分享')
  114 + }
  115 + });
  116 + //分享到朋友圈
  117 + jweixin.onMenuShareTimeline({
  118 + title: that.detail.title, // 分享标题
  119 + link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  120 + desc: "【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
  121 + imgUrl: that.Images, // 分享图标
  122 + success: function() {
  123 + // 用户点击了分享后执行的回调函数
  124 + uni.showToast({
  125 + title: '分享成功',
  126 + duration: 2000
  127 + });
  128 + },
  129 + cancel: function(res) {
  130 + console.log('取消分享')
  131 + }
  132 + });
  133 + jweixin.updateTimelineShareData({
  134 + title: that.detail.title, // 分享标题
  135 + link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  136 + desc: "【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
  137 + imgUrl: that.Images, // 分享图标
  138 + success: function() {
  139 + console.log('设置分享到朋友圈成功')
  140 + },
  141 + cancel: function(res) {
  142 + console.log('取消分享')
  143 + }
  144 + });
  145 + });
  146 + },
  147 +
52 } 148 }
53 } 149 }
54 </script> 150 </script>
@@ -70,4 +166,30 @@ @@ -70,4 +166,30 @@
70 } 166 }
71 } 167 }
72 } 168 }
  169 +
  170 + .share {
  171 + position: fixed;
  172 + left: 0;
  173 + top: 0;
  174 + width: 100%;
  175 + height: 100%;
  176 + background: rgba(0, 0, 0, .6);
  177 +
  178 + image {
  179 + position: fixed;
  180 + right: 80rpx;
  181 + top: 4rpx;
  182 + width: 188rpx;
  183 + height: 262rpx;
  184 + }
  185 +
  186 + view {
  187 + position: fixed;
  188 + right: 80rpx;
  189 + top: 300rpx;
  190 + color: rgba(255, 255, 255, 1);
  191 + font-size: 36rpx;
  192 + font-weight: 700;
  193 + }
  194 + }
73 </style> 195 </style>
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <view class="Detail"> 2 <view class="Detail">
3 <view class="topbg"> 3 <view class="topbg">
4 <view class="bgimage"> 4 <view class="bgimage">
5 - <u-swiper :list="list1" @change="change" @click="click" :height="375"></u-swiper> 5 + <u-swiper :list="list1" @change="change" @click="onclick" :height="375"></u-swiper>
6 </view> 6 </view>
7 <view class="topmain"> 7 <view class="topmain">
8 <view class="toptitle"> 8 <view class="toptitle">
@@ -202,6 +202,12 @@ @@ -202,6 +202,12 @@
202 this.report_list() 202 this.report_list()
203 }, 203 },
204 methods: { 204 methods: {
  205 + onclick(index){
  206 + uni.previewImage({
  207 + current: index,
  208 + urls: this.list1,
  209 + });
  210 + },
205 goTop(){ 211 goTop(){
206 uni.pageScrollTo({ 212 uni.pageScrollTo({
207 scrollTop: 0 213 scrollTop: 0
@@ -244,6 +250,7 @@ @@ -244,6 +250,7 @@
244 jweixin.onMenuShareAppMessage({ 250 jweixin.onMenuShareAppMessage({
245 title: that.detail.name, // 分享标题 251 title: that.detail.name, // 分享标题
246 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 252 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  253 + desc:"【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
247 imgUrl: that.detail.images_preview[0], // 分享图标 254 imgUrl: that.detail.images_preview[0], // 分享图标
248 success: function() { 255 success: function() {
249 // 用户点击了分享后执行的回调函数 256 // 用户点击了分享后执行的回调函数
@@ -259,6 +266,7 @@ @@ -259,6 +266,7 @@
259 jweixin.updateAppMessageShareData({ 266 jweixin.updateAppMessageShareData({
260 title: that.detail.name, // 分享标题 267 title: that.detail.name, // 分享标题
261 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 268 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  269 + desc:"【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
262 imgUrl: that.detail.images_preview[0], // 分享图标 270 imgUrl: that.detail.images_preview[0], // 分享图标
263 success: function() { 271 success: function() {
264 console.log('设置分享给朋友成功') 272 console.log('设置分享给朋友成功')
@@ -271,6 +279,7 @@ @@ -271,6 +279,7 @@
271 jweixin.onMenuShareTimeline({ 279 jweixin.onMenuShareTimeline({
272 title: that.detail.name, // 分享标题 280 title: that.detail.name, // 分享标题
273 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 281 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  282 + desc:"【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
274 imgUrl: that.detail.images_preview[0], // 分享图标 283 imgUrl: that.detail.images_preview[0], // 分享图标
275 success: function() { 284 success: function() {
276 // 用户点击了分享后执行的回调函数 285 // 用户点击了分享后执行的回调函数
@@ -286,6 +295,7 @@ @@ -286,6 +295,7 @@
286 jweixin.updateTimelineShareData({ 295 jweixin.updateTimelineShareData({
287 title: that.detail.name, // 分享标题 296 title: that.detail.name, // 分享标题
288 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 297 link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  298 + desc:"【琉璃藏宝阁】数字藏品流转平台,顺利“琉”转,藏品“璃”手",
289 imgUrl: that.detail.images_preview[0], // 分享图标 299 imgUrl: that.detail.images_preview[0], // 分享图标
290 success: function() { 300 success: function() {
291 console.log('设置分享到朋友圈成功') 301 console.log('设置分享到朋友圈成功')
@@ -514,6 +524,8 @@ @@ -514,6 +524,8 @@
514 } 524 }
515 525
516 .namelast { 526 .namelast {
  527 + width: 420rpx;
  528 + word-break: break-all;
517 color: rgba(0, 0, 0, 1); 529 color: rgba(0, 0, 0, 1);
518 font-size: 28rpx; 530 font-size: 28rpx;
519 font-weight: 400; 531 font-weight: 400;
  1 +<template>
  2 + <view>
  3 + <view>
  4 + <!-- url为要跳转外链的地址-->
  5 + <web-view :src="urls">
  6 + </web-view>
  7 + </view>
  8 + </view>
  9 +</template>
  10 + <!-- 公众号跳转
  11 + 要跳转之前的位置js
  12 + gotogrant(url) {
  13 + console.log(url)
  14 + var url = url;
  15 + uni.navigateTo({
  16 + // 此处的链接为小程序上面新建的webview页面路径,参数url为要跳转外链的地址
  17 + url: "/pages/index/grant?url=" + encodeURIComponent(url)
  18 + });
  19 + }, -->
  20 +<script>
  21 + export default {
  22 + data() {
  23 + return {
  24 + urls:""
  25 + }
  26 + },
  27 + onLoad(val) {
  28 + console.log(val)
  29 + //解码
  30 + this.urls = decodeURIComponent(val.url);
  31 + // 设置当前的title 如果外链中有的话将被覆盖
  32 + // if(this.isNotEmpty(val.title)){
  33 + // this.setTitle(val.title);
  34 + // }
  35 + },
  36 + methods: {
  37 + isNotEmpty(obj) {
  38 + if (typeof obj == undefined || obj == null || obj == "" || obj == "undefined" || obj.length == 0) {
  39 + return false;
  40 + } else {
  41 + return true;
  42 + }
  43 + },
  44 + // 设置title
  45 + setTitle(title) {
  46 + uni.setNavigationBarTitle({
  47 + title: title
  48 + })
  49 + },
  50 + }
  51 + }
  52 + //公众号跳转
  53 + // gotogrant(url) {
  54 + // console.log(url)
  55 + // var url = url;
  56 + // uni.navigateTo({
  57 + // // 此处的链接为小程序上面新建的webview页面路径,参数url为要跳转外链的地址
  58 + // url: "/pages/index/grant?url=" + encodeURIComponent(url)
  59 + // });
  60 + // }
  61 +</script>
  62 +
  63 +
  64 +
  65 +
  66 +
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <view class="logo"> 3 <view class="logo">
4 <image src="/static/ic_logo.png" mode=""></image> 4 <image src="/static/ic_logo.png" mode=""></image>
5 <view class="search" @click="gosourch"> 5 <view class="search" @click="gosourch">
6 - <view class="tosear" > 6 + <view class="tosear">
7 <input type="text" value="" placeholder="搜索" 7 <input type="text" value="" placeholder="搜索"
8 placeholder-style="text-align: center;font-size: 28rpx; color: rgba(194,194,194,1);" /> 8 placeholder-style="text-align: center;font-size: 28rpx; color: rgba(194,194,194,1);" />
9 <image src="/static/icon-search.png" mode=""></image> 9 <image src="/static/icon-search.png" mode=""></image>
@@ -12,14 +12,14 @@ @@ -12,14 +12,14 @@
12 </view> 12 </view>
13 <view class="top"> 13 <view class="top">
14 <view class="banner"> 14 <view class="banner">
15 - <u-swiper keyName="image_preview" :list="list1" @click="click" :indicator="true" indicatorMode="dot" 15 + <u-swiper keyName="image_preview" :list="list1" @click="toclick" :indicator="true" indicatorMode="dot"
16 radius="12" height="160" :circular="true"> 16 radius="12" height="160" :circular="true">
17 </u-swiper> 17 </u-swiper>
18 </view> 18 </view>
19 </view> 19 </view>
20 <view class="contail"> 20 <view class="contail">
21 <view class="nev"> 21 <view class="nev">
22 - <view class="bar" v-for="(item,index) in categoryList" :key="index" @click="tocate(item.id)"> 22 + <view class="bar" v-for="(item,index) in categoryList" :key="index" @click="tocate(item.id,item.name)">
23 <image class="barimg" :src="item.image_preview" mode=""></image> 23 <image class="barimg" :src="item.image_preview" mode=""></image>
24 <text>{{item.name}}</text> 24 <text>{{item.name}}</text>
25 </view> 25 </view>
@@ -34,26 +34,27 @@ @@ -34,26 +34,27 @@
34 <view class="title"> 34 <view class="title">
35 相关资讯 35 相关资讯
36 </view> 36 </view>
37 - <view class="more" @click="torealtime(1)"> 37 + <view class="more" @click="torealtime(1,'相关资讯')">
38 更多 38 更多
39 <image src="/static/ic-arrow.png" mode=""></image> 39 <image src="/static/ic-arrow.png" mode=""></image>
40 </view> 40 </view>
41 </view> 41 </view>
42 <view class="newbar"> 42 <view class="newbar">
43 - <view v-for="(item,index) in informationList" :key="index" @click="oncusdetail(item.id)">·{{item.title}}</view> 43 + <view v-for="(item,index) in informationList" :key="index" @click="oncusdetail(item.id,item.title)">
  44 + ·{{item.title}}</view>
44 </view> 45 </view>
45 </view> 46 </view>
46 - <view class="rightbox" @click="torealtime(2)"> 47 + <view class="rightbox" @click="torealtime(2,'热门活动')">
47 <view class="righttitle"> 48 <view class="righttitle">
48 <view class="title"> 49 <view class="title">
49 热门活动 50 热门活动
50 </view> 51 </view>
51 - <view class="active"> 52 + <!-- <view class="active">
52 充值活动 53 充值活动
53 - </view> 54 + </view> -->
54 </view> 55 </view>
55 <view class="activeimg"> 56 <view class="activeimg">
56 - <image src="/static/Rectangle 2372.png" mode=""></image> 57 + <image src="/static/6.jpg" mode="widthFix" ></image>
57 <!-- <image src="/static/logo.png" mode=""></image> 58 <!-- <image src="/static/logo.png" mode=""></image>
58 <image src="/static/logo.png" mode=""></image> --> 59 <image src="/static/logo.png" mode=""></image> -->
59 </view> 60 </view>
@@ -124,8 +125,8 @@ @@ -124,8 +125,8 @@
124 return { 125 return {
125 title: 'Hello', 126 title: 'Hello',
126 list1: [], 127 list1: [],
127 - nevlist: [1, 2, 3, 4, , 6, 7],  
128 - leftlist: [1, 2, 3], 128 + nevlist: [],
  129 + leftlist: [],
129 fallindex: 1, 130 fallindex: 1,
130 //瀑布 131 //瀑布
131 list: [], 132 list: [],
@@ -139,7 +140,7 @@ @@ -139,7 +140,7 @@
139 onShow() { 140 onShow() {
140 this.initial() 141 this.initial()
141 }, 142 },
142 - onLoad() { 143 + onLoad(e) {
143 this.product_list(true) 144 this.product_list(true)
144 }, 145 },
145 onReachBottom() { 146 onReachBottom() {
@@ -147,31 +148,40 @@ @@ -147,31 +148,40 @@
147 this.product_list() 148 this.product_list()
148 }, 149 },
149 methods: { 150 methods: {
150 - goTop(){ 151 + toclick(index) {
  152 + console.log(this.list1[index].href)
  153 + uni.navigateTo({
  154 + // 此处的链接为小程序上面新建的webview页面路径,参数url为要跳转外链的地址
  155 + url: "/pages/index/grant?url=" + encodeURIComponent(this.list1[index].href)
  156 + });
  157 +
  158 + },
  159 + goTop() {
151 uni.pageScrollTo({ 160 uni.pageScrollTo({
152 scrollTop: 0 161 scrollTop: 0
153 }); 162 });
154 }, 163 },
155 // 资讯详情 164 // 资讯详情
156 - oncusdetail(e) { 165 + oncusdetail(e,title) {
  166 + uni.setStorageSync("deltitle",title)
157 uni.navigateTo({ 167 uni.navigateTo({
158 url: "/pages/index/consultationDetails?id=" + e 168 url: "/pages/index/consultationDetails?id=" + e
159 }) 169 })
160 }, 170 },
161 - tocate(id) { 171 + tocate(id, name) {
162 uni.navigateTo({ 172 uni.navigateTo({
163 - url: "/pages/index/product?sort_id="+id 173 + url: "/pages/index/product?sort_id=" + id + "&sort_name=" + name
164 }) 174 })
165 }, 175 },
166 - toallCate(){ 176 + toallCate() {
167 uni.navigateTo({ 177 uni.navigateTo({
168 url: "/pages/index/category" 178 url: "/pages/index/category"
169 }) 179 })
170 }, 180 },
171 //咨询列表 181 //咨询列表
172 - torealtime(e) { 182 + torealtime(e,title) {
173 uni.navigateTo({ 183 uni.navigateTo({
174 - url: "/pages/index/realTimeInfo?type=" + e 184 + url: "/pages/index/realTimeInfo?type=" + e+"&title="+title
175 }) 185 })
176 }, 186 },
177 async product_report() { 187 async product_report() {
@@ -208,17 +218,17 @@ @@ -208,17 +218,17 @@
208 } 218 }
209 }, 219 },
210 //产品列表 220 //产品列表
211 - async product_list(x,state) { 221 + async product_list(x, state) {
212 let obj = { 222 let obj = {
213 type: this.fallindex, 223 type: this.fallindex,
214 page: this.currentpage, 224 page: this.currentpage,
215 - ids: this.fallindex == 1 && state? this.idgroup.join(",") : "", 225 + ids: this.fallindex == 1 && state ? this.idgroup.join(",") : "",
216 pagenum: 15, 226 pagenum: 15,
217 } 227 }
218 try { 228 try {
219 const res = await product_list(obj) 229 const res = await product_list(obj)
220 console.log('产品列表', res) 230 console.log('产品列表', res)
221 - this.idgroup=[] 231 + this.idgroup = []
222 this.list = x ? res.list.data : this.list.concat(res.list.data) 232 this.list = x ? res.list.data : this.list.concat(res.list.data)
223 this.list.forEach((item, index) => { 233 this.list.forEach((item, index) => {
224 item.image = item.images_preview[0] 234 item.image = item.images_preview[0]
@@ -268,12 +278,12 @@ @@ -268,12 +278,12 @@
268 } 278 }
269 }, 279 },
270 changefall(e) { 280 changefall(e) {
271 - let state = this.fallindex==e?1:0 281 + let state = this.fallindex == e ? 1 : 0
272 this.fallindex = e 282 this.fallindex = e
273 console.log(this.fallindex) 283 console.log(this.fallindex)
274 - this.currentpage=1  
275 - this.list=[]  
276 - this.product_list(true,state) 284 + this.currentpage = 1
  285 + this.list = []
  286 + this.product_list(true, state)
277 }, 287 },
278 //跳转详情 288 //跳转详情
279 godetail(item) { 289 godetail(item) {
@@ -609,6 +619,7 @@ @@ -609,6 +619,7 @@
609 } 619 }
610 } 620 }
611 } 621 }
  622 +
612 .goTop { 623 .goTop {
613 width: 96rpx; 624 width: 96rpx;
614 height: 96rpx; 625 height: 96rpx;
@@ -48,14 +48,23 @@ @@ -48,14 +48,23 @@
48 keyword: "", 48 keyword: "",
49 currentpage: 1, 49 currentpage: 1,
50 sort_id: "", 50 sort_id: "",
  51 + sort_name:"",
51 } 52 }
52 }, 53 },
53 onLoad(options) { 54 onLoad(options) {
54 if (options.ktext) { 55 if (options.ktext) {
55 this.keyword = options.ktext 56 this.keyword = options.ktext
  57 + uni.setNavigationBarTitle({
  58 + title: "产品" //这是修改后的导航栏文字
  59 + })
56 } 60 }
57 if (options.sort_id) { 61 if (options.sort_id) {
58 this.sort_id = options.sort_id 62 this.sort_id = options.sort_id
  63 + this.sort_name = options.sort_name
  64 + let that =this
  65 + uni.setNavigationBarTitle({
  66 + title: that.sort_name //这是修改后的导航栏文字
  67 + })
59 } 68 }
60 this.product_list(true) 69 this.product_list(true)
61 }, 70 },
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <view class="banner"> 8 <view class="banner">
9 <scroll-view scroll-x="true" style="white-space:nowrap "> 9 <scroll-view scroll-x="true" style="white-space:nowrap ">
10 <view class="nav" :class="{newnav:chooseindex==index}" v-for="(item,index) in typelist" :key="index" 10 <view class="nav" :class="{newnav:chooseindex==index}" v-for="(item,index) in typelist" :key="index"
11 - @click="choose(index,item.id)">{{item.name}} 11 + @click="choose(index,item.id,item.name)">{{item.name}}
12 <view class="tip" v-if="chooseindex==index"> 12 <view class="tip" v-if="chooseindex==index">
13 </view> 13 </view>
14 </view> 14 </view>
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </view> 17 </view>
18 <view class="group"> 18 <view class="group">
19 <scroll-view scroll-y="true" @scrolltolower="scrolltolower" style="height: 100vh"> 19 <scroll-view scroll-y="true" @scrolltolower="scrolltolower" style="height: 100vh">
20 - <view class="item" v-for="(item,idx) in sortlist" :key="idx" @click="ondetail(item.id)"> 20 + <view class="item" v-for="(item,idx) in sortlist" :key="idx" @click="ondetail(item.id,item.title)">
21 <view class="bot flexA"> 21 <view class="bot flexA">
22 <view class="left flexA"> 22 <view class="left flexA">
23 <image :src="item.image_preview" mode=""></image> 23 <image :src="item.image_preview" mode=""></image>
@@ -47,14 +47,21 @@ @@ -47,14 +47,21 @@
47 keyword: "", 47 keyword: "",
48 sortlist: [], 48 sortlist: [],
49 currentpage: 1, 49 currentpage: 1,
  50 + nametitle: "",
50 } 51 }
51 }, 52 },
52 onLoad(options) { 53 onLoad(options) {
53 this.type = options.type 54 this.type = options.type
  55 + let title=options.title
  56 + uni.setNavigationBarTitle({
  57 + title: title //这是修改后的导航栏文字
  58 + })
54 this.sort_list(true) 59 this.sort_list(true)
  60 +
55 }, 61 },
56 methods: { 62 methods: {
57 - ondetail(e) { 63 + ondetail(e,title) {
  64 + uni.setStorageSync("deltitle",title)
58 uni.navigateTo({ 65 uni.navigateTo({
59 url: "/pages/index/consultationDetails?id=" + e 66 url: "/pages/index/consultationDetails?id=" + e
60 }) 67 })
@@ -70,17 +77,20 @@ @@ -70,17 +77,20 @@
70 this.arc_list(true) 77 this.arc_list(true)
71 }, 78 },
72 //类型选择 79 //类型选择
73 - choose(e, id) {  
74 - this.chooseindex = e  
75 - this.sortlist = []  
76 - this.sort_id = id  
77 - this.arc_list(true) 80 + choose(e, id, name) {
  81 + let that =this
  82 + that.chooseindex = e
  83 + that.sortlist = []
  84 + that.sort_id = id
  85 + that.nametitle = name
  86 + console.log(that.nametitle, name)
  87 + that.arc_list(true)
78 }, 88 },
79 // 分类 89 // 分类
80 async sort_list() { 90 async sort_list() {
81 - console.log(this.type,"000") 91 + console.log(this.type, "000")
82 let obj = { 92 let obj = {
83 - type:this.type, 93 + type: this.type,
84 keyword: this.keyword, 94 keyword: this.keyword,
85 } 95 }
86 try { 96 try {
1 <template> 1 <template>
2 <view class="top"> 2 <view class="top">
3 - <u-search :showAction="true" actionText="搜索" :clearabled="true" v-model="ktext" @custom="onsouch(ktext)"> 3 + <u-search :showAction="true" actionText="搜索" :clearabled="true" v-model="ktext" @custom="onsouch(ktext)" @search="onsouch(ktext)">
4 </u-search> 4 </u-search>
5 <view class="main"> 5 <view class="main">
6 <view class="title" v-if="hostlist.length"> 6 <view class="title" v-if="hostlist.length">
@@ -14,9 +14,17 @@ @@ -14,9 +14,17 @@
14 <view class="name"> 14 <view class="name">
15 所属分类: 15 所属分类:
16 </view> 16 </view>
17 - <view class="barchoose flexA" @click="showCategory = true">  
18 - <text :style="{color:sortName=='请选择'?'grey':'#000'}">{{sortName}}</text>  
19 - <image src="/static/ic-arrow2.png" mode=""></image> 17 + <!-- @click="showCategory = true" -->
  18 + <view class="barchoose flexA">
  19 + <input type="text" v-model="sortName" placeholder="搜索选择所属分类"
  20 + placeholder-style="font-size: 32rpx;" @input="showbox" >
  21 + <!-- <text :style="{color:sortName=='请选择'?'grey':'#000'}">{{sortName}}</text> -->
  22 + <!-- <image src="/static/ic-arrow2.png" mode=""></image> -->
  23 + </view>
  24 + <view class="barbox" v-if="sortName&&isshowbox">
  25 + <scroll-view scroll-y="true" style="height: 100%;">
  26 + <view class="bartip" v-for="(item,index) in columns" :key="index" @click="selctCategory(item)">{{item.name}}</view>
  27 + </scroll-view>
20 </view> 28 </view>
21 </view> 29 </view>
22 <view class="bar"> 30 <view class="bar">
@@ -31,7 +39,8 @@ @@ -31,7 +39,8 @@
31 <view class="name"> 39 <view class="name">
32 物品介绍: 40 物品介绍:
33 </view> 41 </view>
34 - <u--textarea :autoHeight="true" maxlength="300" v-model="form.description" border="none" placeholder="请输入"></u--textarea> 42 + <u--textarea :autoHeight="true" maxlength="300" v-model="form.description" border="none"
  43 + placeholder="请输入"></u--textarea>
35 </view> 44 </view>
36 <view class="newbar"> 45 <view class="newbar">
37 <view class="name"> 46 <view class="name">
@@ -98,7 +107,7 @@ @@ -98,7 +107,7 @@
98 <view class="name"> 107 <view class="name">
99 <text>*</text>实名认证: 108 <text>*</text>实名认证:
100 </view> 109 </view>
101 - <view class="barlast" v-if="lastInfo.is_cert==0" > 110 + <view class="barlast" v-if="lastInfo.is_cert==0">
102 去认证<image src="/static/arrowR.png" mode=""></image> 111 去认证<image src="/static/arrowR.png" mode=""></image>
103 </view> 112 </view>
104 <view class="barlast" v-else style="color: #18D18E;"> 113 <view class="barlast" v-else style="color: #18D18E;">
@@ -113,7 +122,8 @@ @@ -113,7 +122,8 @@
113 </view> 122 </view>
114 </view> 123 </view>
115 124
116 - <u-popup :show="showmoney" :closeOnClickOverlay="false" @close="close" @open="open" mode="center" :round="12"> 125 + <u-popup :show="showmoney" :closeOnClickOverlay="false" @close="close" @open="open" mode="center"
  126 + :round="12">
117 <view class="popname"> 127 <view class="popname">
118 <view class="title"> 128 <view class="title">
119 缴纳保证金 129 缴纳保证金
@@ -121,7 +131,7 @@ @@ -121,7 +131,7 @@
121 <view class="contant"> 131 <view class="contant">
122 为了保证平台用户交易的安全性,您需要缴纳{{lastInfo.cert_withdraw_price}}元保证金后方可在平台中进行发布物品操作。交易完成后,可在余额中心中进行退回。 132 为了保证平台用户交易的安全性,您需要缴纳{{lastInfo.cert_withdraw_price}}元保证金后方可在平台中进行发布物品操作。交易完成后,可在余额中心中进行退回。
123 </view> 133 </view>
124 - <view class="btngroup" > 134 + <view class="btngroup">
125 <view class="concle" @click="back"> 135 <view class="concle" @click="back">
126 暂不缴纳 136 暂不缴纳
127 </view> 137 </view>
@@ -139,7 +149,7 @@ @@ -139,7 +149,7 @@
139 <view class="contant"> 149 <view class="contant">
140 为了保证平台用户交易的安全性,您需要实名认证后,才能在平台中进行发布物品操作 150 为了保证平台用户交易的安全性,您需要实名认证后,才能在平台中进行发布物品操作
141 </view> 151 </view>
142 - <view class="btngroup" > 152 + <view class="btngroup">
143 <view class="concle" @click="back"> 153 <view class="concle" @click="back">
144 暂不认证 154 暂不认证
145 </view> 155 </view>
@@ -151,7 +161,8 @@ @@ -151,7 +161,8 @@
151 </u-popup> 161 </u-popup>
152 </view> 162 </view>
153 163
154 - <u-picker :show="showCategory" @cancel="showCategory=false" @confirm="selctCategory" :columns="columns" keyName="name"></u-picker> 164 + <!-- <u-picker :show="showCategory" @cancel="showCategory=false" @confirm="selctCategory" :columns="columns"
  165 + keyName="name"></u-picker> -->
155 <Botton :flag="3"></Botton> 166 <Botton :flag="3"></Botton>
156 </view> 167 </view>
157 </template> 168 </template>
@@ -159,13 +170,29 @@ @@ -159,13 +170,29 @@
159 <script> 170 <script>
160 var that 171 var that
161 var wx = require('jweixin-module') 172 var wx = require('jweixin-module')
162 - import {baseURL} from '@/utils/request.js' 173 + import {
  174 + baseURL
  175 + } from '@/utils/request.js'
163 import Botton from "@/components/Botton.vue" 176 import Botton from "@/components/Botton.vue"
164 - import {sortList,product_detail} from '@/api/index'  
165 - import {toa} from '@/utils/toast.js'  
166 - import { getCategory,sendProduct,getLastInfo,payGuarantee,authorization ,getOpenid,userCertWithdraw} from '@/api/send' 177 + import {
  178 + sortList,
  179 + product_detail,
  180 + sort_search
  181 + } from '@/api/index'
  182 + import {
  183 + toa
  184 + } from '@/utils/toast.js'
  185 + import {
  186 + getCategory,
  187 + sendProduct,
  188 + getLastInfo,
  189 + payGuarantee,
  190 + authorization,
  191 + getOpenid,
  192 + userCertWithdraw
  193 + } from '@/api/send'
167 export default { 194 export default {
168 - name:'send', 195 + name: 'send',
169 components: { 196 components: {
170 Botton 197 Botton
171 }, 198 },
@@ -174,67 +201,92 @@ @@ -174,67 +201,92 @@
174 fileList1: [], 201 fileList1: [],
175 show: false, 202 show: false,
176 showmoney: false, 203 showmoney: false,
177 - showCategory:false,  
178 - content:'', 204 + showCategory: false,
  205 + content: '',
  206 + isshowbox: true,
179 columns: [], 207 columns: [],
180 - lastInfo:{},  
181 - sortName:'请选择',  
182 - form:{  
183 - product_id:'', // string 否 物品id  
184 - name:'', // string 是 物品名称  
185 - sort_id:'', // integer 是 所属分类  
186 - price:'', // string 是 价格  
187 - description:'', // string 是 物品介绍  
188 - images:'', // string 是 物品图片  
189 - seller_name:'', // string 否 卖家姓名  
190 - seller_mobile:'', // string 否 手机号  
191 - package_add:'', // string 是 钱包地址  
192 - wechat_num:'', // string 是 微信号 208 + lastInfo: {},
  209 + sortName: '',
  210 + form: {
  211 + product_id: '', // string 否 物品id
  212 + name: '', // string 是 物品名称
  213 + sort_id: '', // integer 是 所属分类
  214 + price: '', // string 是 价格
  215 + description: '', // string 是 物品介绍
  216 + images: '', // string 是 物品图片
  217 + seller_name: '', // string 否 卖家姓名
  218 + seller_mobile: '', // string 否 手机号
  219 + package_add: '', // string 是 钱包地址
  220 + wechat_num: '', // string 是 微信号
193 }, 221 },
194 - code:'' 222 + code: ''
195 } 223 }
196 }, 224 },
197 onLoad(e) { 225 onLoad(e) {
198 that = this 226 that = this
199 - if(e.id){ 227 + if (e.id) {
200 this.form.product_id = e.id 228 this.form.product_id = e.id
201 this.getDetail() 229 this.getDetail()
202 } 230 }
203 this.code = e.code || '' 231 this.code = e.code || ''
204 this.getLastInfo() 232 this.getLastInfo()
205 this.sortList() 233 this.sortList()
206 - if(this.code){ 234 + if (this.code) {
207 this.getOpenid() 235 this.getOpenid()
208 } 236 }
209 237
210 }, 238 },
211 - onShow() {  
212 - }, 239 + onShow() {},
213 methods: { 240 methods: {
214 - back(){ 241 + //所属分类搜索
  242 + async showbox() {
  243 + let that = this
  244 + that.isshowbox = true
  245 + try {
  246 + const res = await sort_search(that.sortName)
  247 + console.log('sort_search', res)
  248 + that.columns = res.list
  249 + // 保存数据
  250 + } catch (err) {
  251 + uni.showToast({
  252 + title: err,
  253 + icon: 'none'
  254 + })
  255 + console.log('sort_search', err)
  256 + }
  257 + },
  258 + //所属分类确定
  259 + // showok() {
  260 + // that.isshowbox = false
  261 + // },
  262 + //列表选择
  263 + back() {
215 uni.navigateBack({}) 264 uni.navigateBack({})
216 - this.showmoney=false 265 + this.showmoney = false
217 }, 266 },
218 // 获取openid 267 // 获取openid
219 - async getOpenid(){ 268 + async getOpenid() {
220 try { 269 try {
221 const res = await getOpenid(this.code) 270 const res = await getOpenid(this.code)
222 console.log('getOpenid', res) 271 console.log('getOpenid', res)
223 - uni.setStorageSync('openId',res.openid) 272 + uni.setStorageSync('openId', res.openid)
224 this.userCertWithdraw() 273 this.userCertWithdraw()
225 // 保存数据 274 // 保存数据
226 } catch (err) { 275 } catch (err) {
227 - setTimeout(()=>{  
228 - uni.showToast({ title:err,icon:'none' })  
229 - },300) 276 + setTimeout(() => {
  277 + uni.showToast({
  278 + title: err,
  279 + icon: 'none'
  280 + })
  281 + }, 300)
230 uni.redirectTo({ 282 uni.redirectTo({
231 - url:'/pages/index/index' 283 + url: '/pages/index/index'
232 }) 284 })
233 console.log('getOpenid', err) 285 console.log('getOpenid', err)
234 } 286 }
235 }, 287 },
236 // 缴纳保证金 288 // 缴纳保证金
237 - async userCertWithdraw(){ 289 + async userCertWithdraw() {
238 try { 290 try {
239 const openId = uni.getStorageSync('openId') 291 const openId = uni.getStorageSync('openId')
240 const res = await userCertWithdraw(openId) 292 const res = await userCertWithdraw(openId)
@@ -248,41 +300,44 @@ @@ -248,41 +300,44 @@
248 signature: res.pay_data.paySign, // 必填,签名 300 signature: res.pay_data.paySign, // 必填,签名
249 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表 301 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表
250 }) 302 })
251 - wx.ready(function () { 303 + wx.ready(function() {
252 wx.chooseWXPay({ 304 wx.chooseWXPay({
253 timestamp: res.pay_data.timeStamp, // 时间戳 305 timestamp: res.pay_data.timeStamp, // 时间戳
254 nonceStr: res.pay_data.nonceStr, // 随机数 306 nonceStr: res.pay_data.nonceStr, // 随机数
255 package: res.pay_data.package, // 307 package: res.pay_data.package, //
256 signType: res.pay_data.signType, 308 signType: res.pay_data.signType,
257 paySign: res.pay_data.paySign, // 签名 309 paySign: res.pay_data.paySign, // 签名
258 - success: function () { 310 + success: function() {
259 that.lastInfo.is_cert_withdraw = 1 311 that.lastInfo.is_cert_withdraw = 1
260 that.showmoney = false 312 that.showmoney = false
261 that.getLastInfo() 313 that.getLastInfo()
262 toa.success('支付成功') 314 toa.success('支付成功')
263 }, 315 },
264 - cancel: function () {  
265 - setTimeout(()=>{ 316 + cancel: function() {
  317 + setTimeout(() => {
266 toa.toast('取消失败') 318 toa.toast('取消失败')
267 - },200) 319 + }, 200)
268 uni.navigateBack({}) 320 uni.navigateBack({})
269 }, 321 },
270 - fail: function () {  
271 - setTimeout(()=>{ 322 + fail: function() {
  323 + setTimeout(() => {
272 toa.toast('支付失败') 324 toa.toast('支付失败')
273 - },200) 325 + }, 200)
274 uni.navigateBack({}) 326 uni.navigateBack({})
275 } 327 }
276 }) 328 })
277 }) 329 })
278 // 保存数据 330 // 保存数据
279 } catch (err) { 331 } catch (err) {
280 - uni.showToast({ title:err,icon:'none' }) 332 + uni.showToast({
  333 + title: err,
  334 + icon: 'none'
  335 + })
281 console.log('userCertWithdraw', err) 336 console.log('userCertWithdraw', err)
282 } 337 }
283 }, 338 },
284 // 获取详情 339 // 获取详情
285 - async getDetail(){ 340 + async getDetail() {
286 try { 341 try {
287 const res = await product_detail(this.form.product_id) 342 const res = await product_detail(this.form.product_id)
288 // this.form = res.detail 343 // this.form = res.detail
@@ -292,16 +347,19 @@ @@ -292,16 +347,19 @@
292 this.form.name = res.detail.name 347 this.form.name = res.detail.name
293 this.form.price = res.detail.price 348 this.form.price = res.detail.price
294 this.form.description = res.detail.description 349 this.form.description = res.detail.description
295 - res.detail.fileList.forEach(it=>{ 350 + res.detail.fileList.forEach(it => {
296 it.shortUrl = it.url 351 it.shortUrl = it.url
297 it.url = it.fullUrl 352 it.url = it.fullUrl
298 }) 353 })
299 this.fileList1 = res.detail.fileList 354 this.fileList1 = res.detail.fileList
300 - console.log(this.fileList1,'图片'); 355 + console.log(this.fileList1, '图片');
301 console.log('getDetail', res) 356 console.log('getDetail', res)
302 // 保存数据 357 // 保存数据
303 } catch (err) { 358 } catch (err) {
304 - uni.showToast({ title:err,icon:'none' }) 359 + uni.showToast({
  360 + title: err,
  361 + icon: 'none'
  362 + })
305 console.log('getDetail', err) 363 console.log('getDetail', err)
306 } 364 }
307 }, 365 },
@@ -322,26 +380,33 @@ @@ -322,26 +380,33 @@
322 this.form.price = val; 380 this.form.price = val;
323 }) 381 })
324 }, 382 },
325 - async sortList(){ 383 + async sortList() {
326 try { 384 try {
327 const res = await sortList(2) 385 const res = await sortList(2)
328 - this.columns = [res.list]  
329 - console.log('sortList', res) 386 + this.columns = res.list
  387 + console.log('sortList', this.columns, "0")
330 // 保存数据 388 // 保存数据
331 } catch (err) { 389 } catch (err) {
332 - uni.showToast({ title:err,icon:'none' }) 390 + uni.showToast({
  391 + title: err,
  392 + icon: 'none'
  393 + })
333 console.log('sortList', err) 394 console.log('sortList', err)
334 } 395 }
335 }, 396 },
336 - async getLastInfo(){ 397 + async getLastInfo() {
337 try { 398 try {
338 const res = await getLastInfo() 399 const res = await getLastInfo()
339 this.lastInfo = res.detail 400 this.lastInfo = res.detail
340 console.log(1); 401 console.log(1);
341 - if(res.detail.is_cert==0){ return this.show = true}  
342 - if(res.detail.is_cert_withdraw!=1 && !this.code){ this.showmoney = true} 402 + if (res.detail.is_cert == 0) {
  403 + return this.show = true
  404 + }
  405 + if (res.detail.is_cert_withdraw != 1 && !this.code) {
  406 + this.showmoney = true
  407 + }
343 console.log(2); 408 console.log(2);
344 - console.log(res.detail.is_cert_withdraw!=1,!this.code); 409 + console.log(res.detail.is_cert_withdraw != 1, !this.code);
345 this.form.seller_mobile = res.detail.seller_mobile 410 this.form.seller_mobile = res.detail.seller_mobile
346 this.form.seller_name = res.detail.seller_name 411 this.form.seller_name = res.detail.seller_name
347 this.form.package_add = res.detail.package_add 412 this.form.package_add = res.detail.package_add
@@ -349,7 +414,10 @@ @@ -349,7 +414,10 @@
349 console.log('getLastInfo', res) 414 console.log('getLastInfo', res)
350 // 保存数据 415 // 保存数据
351 } catch (err) { 416 } catch (err) {
352 - uni.showToast({ title:err,icon:'none' }) 417 + uni.showToast({
  418 + title: err,
  419 + icon: 'none'
  420 + })
353 console.log('getLastInfo', err) 421 console.log('getLastInfo', err)
354 } 422 }
355 }, 423 },
@@ -379,13 +447,13 @@ @@ -379,13 +447,13 @@
379 }) 447 })
380 for (let i = 0; i < lists.length; i++) { 448 for (let i = 0; i < lists.length; i++) {
381 const result = await this.uploadFilePromise(lists[i].url) 449 const result = await this.uploadFilePromise(lists[i].url)
382 - console.log(result,'获取的结构'); 450 + console.log(result, '获取的结构');
383 let item = this[`fileList${event.name}`][fileListLen] 451 let item = this[`fileList${event.name}`][fileListLen]
384 this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, { 452 this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
385 status: 'success', 453 status: 'success',
386 message: '', 454 message: '',
387 url: result.fullurl, 455 url: result.fullurl,
388 - shortUrl:result.url 456 + shortUrl: result.url
389 })) 457 }))
390 fileListLen++ 458 fileListLen++
391 } 459 }
@@ -397,7 +465,7 @@ @@ -397,7 +465,7 @@
397 filePath: url, 465 filePath: url,
398 name: 'file', 466 name: 'file',
399 formData: { 467 formData: {
400 - token:uni.getStorageSync('token') || '' 468 + token: uni.getStorageSync('token') || ''
401 }, 469 },
402 success: (res) => { 470 success: (res) => {
403 setTimeout(() => { 471 setTimeout(() => {
@@ -407,56 +475,63 @@ @@ -407,56 +475,63 @@
407 }); 475 });
408 }) 476 })
409 }, 477 },
410 - selctCategory(e){  
411 - this.sortName = e.value[0].name  
412 - this.form.sort_id = e.value[0].id  
413 - this.showCategory = false  
414 - console.log(e); 478 + selctCategory(e) {
  479 + console.log(e)
  480 + this.sortName = e.name
  481 + this.form.sort_id = e.id
  482 + this.isshowbox = false
  483 + console.log(this.sortName,this.form.sort_id);
415 }, 484 },
416 // 发布 485 // 发布
417 - send(){ 486 + send() {
418 console.log(this.lastInfo); 487 console.log(this.lastInfo);
419 - if(this.lastInfo.is_cert_withdraw!=1 ) return this.showmoney = true  
420 - if(this.lastInfo.is_cert==0) return this.show = true  
421 - if(this.fileList1.length){  
422 - this.form.images = this.fileList1.map(it=>it.shortUrl).join(',') 488 + if (this.lastInfo.is_cert_withdraw != 1) return this.showmoney = true
  489 + if (this.lastInfo.is_cert == 0) return this.show = true
  490 + if (this.fileList1.length) {
  491 + this.form.images = this.fileList1.map(it => it.shortUrl).join(',')
423 } 492 }
424 console.log(this.form); 493 console.log(this.form);
425 this.sendProduct() 494 this.sendProduct()
426 }, 495 },
427 - async sendProduct(){ 496 + async sendProduct() {
428 try { 497 try {
429 const res = await sendProduct(this.form) 498 const res = await sendProduct(this.form)
430 console.log('sendProduct', res) 499 console.log('sendProduct', res)
431 - setTimeout(()=>{  
432 - toa.success(this.form.product_id?'修改成功':'发布成功')  
433 - },400) 500 + setTimeout(() => {
  501 + toa.success(this.form.product_id ? '修改成功' : '发布成功')
  502 + }, 400)
434 uni.redirectTo({ 503 uni.redirectTo({
435 - url:'/pages/mine/myRelease' 504 + url: '/pages/mine/myRelease'
436 }) 505 })
437 // 保存数据 506 // 保存数据
438 } catch (err) { 507 } catch (err) {
439 - uni.showToast({ title:err,icon:'none' }) 508 + uni.showToast({
  509 + title: err,
  510 + icon: 'none'
  511 + })
440 console.log('sendProduct', err) 512 console.log('sendProduct', err)
441 } 513 }
442 }, 514 },
443 - goRealName(){ 515 + goRealName() {
444 uni.navigateTo({ 516 uni.navigateTo({
445 - url:'/pages/index/realName' 517 + url: '/pages/index/realName'
446 }) 518 })
447 519
448 }, 520 },
449 // 拿code 521 // 拿code
450 - async authorization(){ 522 + async authorization() {
451 try { 523 try {
452 const openId = uni.getStorageSync('openId') 524 const openId = uni.getStorageSync('openId')
453 - if(openId) return this.userCertWithdraw() 525 + if (openId) return this.userCertWithdraw()
454 const res = await authorization(window.location.href) 526 const res = await authorization(window.location.href)
455 console.log('authorization', res) 527 console.log('authorization', res)
456 window.location.href = res.url 528 window.location.href = res.url
457 // 保存数据 529 // 保存数据
458 } catch (err) { 530 } catch (err) {
459 - uni.showToast({ title:err,icon:'none' }) 531 + uni.showToast({
  532 + title: err,
  533 + icon: 'none'
  534 + })
460 console.log('authorization', err) 535 console.log('authorization', err)
461 } 536 }
462 }, 537 },
@@ -487,6 +562,7 @@ @@ -487,6 +562,7 @@
487 padding: 0 32rpx; 562 padding: 0 32rpx;
488 563
489 .bar { 564 .bar {
  565 + position: relative;
490 display: flex; 566 display: flex;
491 align-items: center; 567 align-items: center;
492 justify-content: space-between; 568 justify-content: space-between;
@@ -509,12 +585,16 @@ @@ -509,12 +585,16 @@
509 } 585 }
510 586
511 .barchoose { 587 .barchoose {
512 -  
513 color: rgba(0, 0, 0, 0.4); 588 color: rgba(0, 0, 0, 0.4);
514 font-size: 28rpx; 589 font-size: 28rpx;
515 font-weight: 400; 590 font-weight: 400;
516 font-family: "PingFang SC"; 591 font-family: "PingFang SC";
517 - image{ 592 +
  593 + input {
  594 + text-align: right;
  595 + }
  596 +
  597 + image {
518 width: 24rpx; 598 width: 24rpx;
519 height: 16rpx; 599 height: 16rpx;
520 } 600 }
@@ -535,11 +615,36 @@ @@ -535,11 +615,36 @@
535 } 615 }
536 } 616 }
537 617
  618 + .nameinput {
  619 + flex: 1;
  620 +
538 input { 621 input {
539 text-align: right; 622 text-align: right;
540 } 623 }
541 } 624 }
542 625
  626 + .barbox {
  627 + position: absolute;
  628 + right: 0;
  629 + z-index: 99;
  630 + bottom: -400rpx;
  631 + padding: 0 24rpx;
  632 + height: 400rpx;
  633 + font-size: 28rpx;
  634 + font-weight: 400;
  635 + font-family: "PingFang SC";
  636 + box-sizing: border-box;
  637 + background-color: #ffffff;
  638 + border: 1px solid #F0f0f0;
  639 + box-shadow: 5rpx 5rpx 5rpx rgba(0, 0, 0, 0.1);
  640 +
  641 + .bartip {
  642 + padding: 24rpx 0;
  643 + box-sizing: border-box;
  644 + }
  645 + }
  646 + }
  647 +
543 .newbar { 648 .newbar {
544 padding: 32rpx 0; 649 padding: 32rpx 0;
545 box-sizing: border-box; 650 box-sizing: border-box;
@@ -662,6 +767,7 @@ @@ -662,6 +767,7 @@
662 min-height: 200rpx; 767 min-height: 200rpx;
663 background: #f4f5f7; 768 background: #f4f5f7;
664 } 769 }
  770 +
665 /deep/ .uni-textarea-wrapper { 771 /deep/ .uni-textarea-wrapper {
666 height: 100% !important; 772 height: 100% !important;
667 } 773 }
1 <template> 1 <template>
2 - <view class="">  
3 - <rich-text :nodes="text"></rich-text> 2 + <view class="" style="padding: 32rpx;">
  3 + <!-- <rich-text :nodes="text"></rich-text> -->
  4 + <u-parse :content="text" noData="数据加载中..." @preview="preview" @navigate="navigate" ></u-parse>
4 </view> 5 </view>
5 </template> 6 </template>
6 7
7 <script> 8 <script>
8 - import { getAgreement } from '@/api/login.js' 9 + import {
  10 + getAgreement
  11 + } from '@/api/login.js'
  12 + import uParse from '@/components/u-parse/u-parse.vue'
9 export default { 13 export default {
  14 + components: {
  15 + uParse
  16 + },
10 data() { 17 data() {
11 return { 18 return {
12 text: '', 19 text: '',
13 - type:'' 20 + type: ''
14 } 21 }
15 }, 22 },
16 onLoad(e) { 23 onLoad(e) {
17 this.type = e.type 24 this.type = e.type
18 - wx.setNavigationBarTitle({ title: e.type==1?'用户协议':e.type==2?'隐私政策':'' }) 25 + wx.setNavigationBarTitle({
  26 + title: e.type == 1 ? '用户协议' : e.type == 2 ? '隐私政策' : ''
  27 + })
19 this.getAgreement() 28 this.getAgreement()
20 }, 29 },
21 methods: { 30 methods: {
22 - async getAgreement(){ 31 + async getAgreement() {
  32 + uni.showLoading({
  33 + title: '加载中',
  34 + mask: true
  35 + })
23 try { 36 try {
24 const res = await getAgreement(this.type) 37 const res = await getAgreement(this.type)
25 this.text = res.agreement 38 this.text = res.agreement
26 - console.log('getAgreement', res) 39 + uni.hideLoading();
27 // 保存数据 40 // 保存数据
28 } catch (err) { 41 } catch (err) {
29 uni.showToast({ title:err,icon:'none' }) 42 uni.showToast({ title:err,icon:'none' })
30 - console.log('getAgreement', err)  
31 } 43 }
32 }, 44 },
33 }, 45 },
@@ -35,4 +47,5 @@ @@ -35,4 +47,5 @@
35 </script> 47 </script>
36 48
37 <style> 49 <style>
  50 + @import url("@/components/u-parse/u-parse.css");
38 </style> 51 </style>
@@ -5,10 +5,10 @@ @@ -5,10 +5,10 @@
5 5
6 <view class="bar flexwrap"> 6 <view class="bar flexwrap">
7 <view class="name"> 7 <view class="name">
8 - 用户名 8 + 手机号
9 </view> 9 </view>
10 <view class="last name"> 10 <view class="last name">
11 - <input v-model="account" maxlength="16" type="text" value="" placeholder="请输入用户名" /> 11 + <input v-model="account" maxlength="16" type="text" value="" placeholder="请输入手机号" />
12 </view> 12 </view>
13 </view> 13 </view>
14 <view class="bar flexwrap"> 14 <view class="bar flexwrap">
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 密码: 16 密码:
17 </view> 17 </view>
18 <view class="last name"> 18 <view class="last name">
19 - <input v-model="password" maxlength="16" type="password" value="" placeholder="请输入密码" /> 19 + <input v-model="password" maxlength="16" type="password" value="" placeholder="请输入密码"/>
20 </view> 20 </view>
21 </view> 21 </view>
22 <view class="loginbtn" @click="doLogin"> 22 <view class="loginbtn" @click="doLogin">
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 验证码: 17 验证码:
18 </view> 18 </view>
19 <view class="lastname"> 19 <view class="lastname">
20 - <input v-model="captcha" maxlength="" type="number" value="" placeholder="请输入验证码" /> 20 + <input v-model="captcha" maxlength="4" type="number" value="" placeholder="请输入验证码" />
21 <view class="code" @click="getCode"> 21 <view class="code" @click="getCode">
22 {{num==0?'获取验证码':num + '秒重新发送'}} 22 {{num==0?'获取验证码':num + '秒重新发送'}}
23 </view> 23 </view>
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 验证码: 32 验证码:
33 </view> 33 </view>
34 <view class="lastname"> 34 <view class="lastname">
35 - <input v-model="code" maxlength="6" type="text" value="" placeholder="请输入验证码" /> 35 + <input v-model="code" maxlength="4" type="text" value="" placeholder="请输入验证码" />
36 <view class="code" @click="getCode"> 36 <view class="code" @click="getCode">
37 {{num==0?'获取验证码':num + '秒重新发送'}} 37 {{num==0?'获取验证码':num + '秒重新发送'}}
38 </view> 38 </view>
@@ -51,23 +51,27 @@ @@ -51,23 +51,27 @@
51 <text style="margin-left: 10rpx;" @click="toAgree(1)"> 用户协议、</text><text @click="toAgree(2)">隐私政策</text> 51 <text style="margin-left: 10rpx;" @click="toAgree(1)"> 用户协议、</text><text @click="toAgree(2)">隐私政策</text>
52 </view> 52 </view>
53 </view> 53 </view>
54 -  
55 </view> 54 </view>
56 </template> 55 </template>
57 56
58 <script> 57 <script>
59 - import {sendCode,register} from '@/api/login.js'  
60 - import {toa} from '@/utils/toast.js' 58 + import {
  59 + sendCode,
  60 + register
  61 + } from '@/api/login.js'
  62 + import {
  63 + toa
  64 + } from '@/utils/toast.js'
61 export default { 65 export default {
62 data() { 66 data() {
63 return { 67 return {
64 - username:'',  
65 - password:'',  
66 - mobile:'',  
67 - code:'',  
68 - clearId:'',  
69 - num:0,  
70 - isSelect:false 68 + username: '',
  69 + password: '',
  70 + mobile: '',
  71 + code: '',
  72 + clearId: '',
  73 + num: 0,
  74 + isSelect: false
71 }; 75 };
72 }, 76 },
73 methods: { 77 methods: {
@@ -77,65 +81,71 @@ @@ -77,65 +81,71 @@
77 // url:'/pages/login/login' 81 // url:'/pages/login/login'
78 // }) 82 // })
79 }, 83 },
80 - toRegister(){  
81 - if(!this.username) return toa.toast('请输入用户名')  
82 - if(!this.password) return toa.toast('请输入密码')  
83 - if(!this.mobile) return toa.toast('请输入手机号')  
84 - if(!this.code) return toa.toast('请输入验证码')  
85 - if(!this.isSelect) return toa.toast('请先同意用户协议和隐私政策') 84 + toRegister() {
  85 + if (!this.username) return toa.toast('请输入用户名')
  86 + if (!this.password) return toa.toast('请输入密码')
  87 + if (!this.mobile) return toa.toast('请输入手机号')
  88 + if (!this.code) return toa.toast('请输入验证码')
  89 + if (!this.isSelect) return toa.toast('请先同意用户协议和隐私政策')
86 this.register() 90 this.register()
87 }, 91 },
88 - async register(){ 92 + async register() {
89 try { 93 try {
90 - const res = await register(this.username,this.password,this.mobile,this.code) 94 + const res = await register(this.username, this.password, this.mobile, this.code)
91 console.log('register', res) 95 console.log('register', res)
92 - setTimeout(()=>{ 96 + setTimeout(() => {
93 toa.success('注册成功') 97 toa.success('注册成功')
94 - },200) 98 + }, 200)
95 uni.navigateBack({}) 99 uni.navigateBack({})
96 // 保存数据 100 // 保存数据
97 } catch (err) { 101 } catch (err) {
98 - uni.showToast({ title:err,icon:'none' }) 102 + uni.showToast({
  103 + title: err,
  104 + icon: 'none'
  105 + })
99 console.log('register', err) 106 console.log('register', err)
100 } 107 }
101 }, 108 },
102 - getCode(){  
103 - if(this.num>0) return  
104 - if(!this.mobile) return toa.toast('请先输入手机号')  
105 - if (!(/^1[34578]\d{9}$/.test(this.mobile))) return toa.toast('请输入正确手机号') 109 + getCode() {
  110 + if (this.num > 0) return
  111 + if (!this.mobile) return toa.toast('请先输入手机号')
  112 + if (!(/^1[345789]\d{9}$/.test(this.mobile))) return toa.toast('请输入正确手机号')
106 this.sendCode() 113 this.sendCode()
107 }, 114 },
108 - async sendCode(){ 115 + async sendCode() {
109 try { 116 try {
110 - const res = await sendCode(this.mobile,'register') 117 + const res = await sendCode(this.mobile, 'register')
111 toa.success('发送成功') 118 toa.success('发送成功')
112 this.setInter() 119 this.setInter()
113 console.log('sendCode', res) 120 console.log('sendCode', res)
114 // 保存数据 121 // 保存数据
115 } catch (err) { 122 } catch (err) {
116 - uni.showToast({ title:err,icon:'none' }) 123 + uni.showToast({
  124 + title: err,
  125 + icon: 'none'
  126 + })
117 console.log('sendCode', err) 127 console.log('sendCode', err)
118 } 128 }
119 }, 129 },
120 - setInter (){  
121 - this.num=60 130 + setInter() {
  131 + this.num = 60
122 this.clearId = setInterval(() => { 132 this.clearId = setInterval(() => {
123 - this.num -- 133 + this.num--
124 }, 1000) 134 }, 1000)
125 }, 135 },
126 - toAgree(type){ 136 + toAgree(type) {
127 uni.navigateTo({ 137 uni.navigateTo({
128 - url:'/pages/login/agreement?type='+ type 138 + url: '/pages/login/agreement?type=' + type
129 }) 139 })
130 } 140 }
131 }, 141 },
132 - onHide(){ 142 + onHide() {
133 this.num = 0 143 this.num = 0
134 clearInterval(this.clearId) 144 clearInterval(this.clearId)
135 }, 145 },
136 watch: { 146 watch: {
137 num(newValue, oldValue) { 147 num(newValue, oldValue) {
138 - if(newValue==0){ 148 + if (newValue == 0) {
139 this.num = 0 149 this.num = 0
140 clearInterval(this.clearId) 150 clearInterval(this.clearId)
141 } 151 }
@@ -147,6 +157,7 @@ @@ -147,6 +157,7 @@
147 <style lang="scss"> 157 <style lang="scss">
148 .login { 158 .login {
149 padding: 0 48rpx; 159 padding: 0 48rpx;
  160 + padding-bottom: 32rpx;
150 box-sizing: border-box; 161 box-sizing: border-box;
151 162
152 .icon { 163 .icon {
@@ -220,12 +231,12 @@ @@ -220,12 +231,12 @@
220 } 231 }
221 232
222 .user { 233 .user {
223 - position: absolute;  
224 - width: 100%;  
225 - left: 50%;  
226 - bottom: 16rpx;  
227 - transform: translateX(-50%);  
228 - // margin-top: 200rpx; 234 + // position: fixed;
  235 + // width: 100%;
  236 + // left: 50%;
  237 + // bottom: 64rpx;
  238 + // transform: translateX(-50%);
  239 + margin-top: 100rpx;
229 text-align: center; 240 text-align: center;
230 display: flex; 241 display: flex;
231 align-items: center; 242 align-items: center;
@@ -5,7 +5,8 @@ @@ -5,7 +5,8 @@
5 <u-tabs :list="list2" lineColor="#FED000" :scrollable="false" @click="onclick"></u-tabs> 5 <u-tabs :list="list2" lineColor="#FED000" :scrollable="false" @click="onclick"></u-tabs>
6 </u-sticky> 6 </u-sticky>
7 <view class="group"> 7 <view class="group">
8 - <view class="item" v-for="(item,idx) in showlist" :key="idx" @click.stop="ondetail(item.id,item.orderinfo.product_id)"> 8 + <view class="item" v-for="(item,idx) in showlist" :key="idx"
  9 + @click.stop="ondetail(item.id,item.orderinfo.product_id)">
9 <view class="top flexA"> 10 <view class="top flexA">
10 <view class="left flexA"> 11 <view class="left flexA">
11 <image src="/static/order.png" mode=""></image> 12 <image src="/static/order.png" mode=""></image>
@@ -45,8 +46,10 @@ @@ -45,8 +46,10 @@
45 <view v-if="item.license_preview" class="flexC yellow" 46 <view v-if="item.license_preview" class="flexC yellow"
46 @click.stop="openshow(item.id,idx,item.license_preview,item.status)">交易证明 47 @click.stop="openshow(item.id,idx,item.license_preview,item.status)">交易证明
47 </view> 48 </view>
48 - <view v-if="reChest(item.status)" class="flexC" @click.stop="order_confirm(item.id,idx,1)">已收货</view>  
49 - <view v-if="reChest(item.status)" class="flexC" @click.stop="order_confirm(item.id,idx,2)">未收货</view> 49 + <view v-if="reChest(item.status)" class="flexC" @click.stop="order_confirm(item.id,idx,1)">已收货
  50 + </view>
  51 + <view v-if="reChest(item.status)" class="flexC" @click.stop="order_confirm(item.id,idx,2)">未收货
  52 + </view>
50 </view> 53 </view>
51 </view> 54 </view>
52 </view> 55 </view>
@@ -94,6 +97,10 @@ @@ -94,6 +97,10 @@
94 showindex: "", 97 showindex: "",
95 showstatus: "", 98 showstatus: "",
96 showimg: "", 99 showimg: "",
  100 + //弹窗数据
  101 + conid: "",
  102 + conidx: "",
  103 + contype: "",
97 } 104 }
98 }, 105 },
99 onLoad() { 106 onLoad() {
@@ -101,29 +108,30 @@ @@ -101,29 +108,30 @@
101 }, 108 },
102 methods: { 109 methods: {
103 // 跳转详情 110 // 跳转详情
104 - ondetail(id,shopId) { 111 + ondetail(id, shopId) {
105 console.log(id) 112 console.log(id)
106 uni.navigateTo({ 113 uni.navigateTo({
107 url: `/pages/mine/order_detail?id=${id}&shopId=${shopId}` 114 url: `/pages/mine/order_detail?id=${id}&shopId=${shopId}`
108 }) 115 })
109 }, 116 },
110 //确认收货 117 //确认收货
111 - async order_confirm(id, idx, type) { 118 + async reqedconfirm() {
112 let obj = { 119 let obj = {
113 - order_id: id,  
114 - type: type, 120 + order_id: this.conid,
  121 + type: this.contype,
115 } 122 }
  123 + console.log(this.conid,this.contype,this.conidx,"000")
116 try { 124 try {
117 const res = await order_confirm(obj) 125 const res = await order_confirm(obj)
118 console.log('order_confirm', res) 126 console.log('order_confirm', res)
119 this.show = false 127 this.show = false
120 if (this.typeindex == 2) { 128 if (this.typeindex == 2) {
121 - this.showlist.splice(idx, 1) 129 + this.showlist.splice(this.conidx, 1)
122 } else { 130 } else {
123 - if (type == 2) {  
124 - this.showlist[idx].status = 5 131 + if (this.contype == 2) {
  132 + this.showlist[this.conidx].status = 5
125 } else { 133 } else {
126 - this.showlist[idx].status = 6 134 + this.showlist[this.conidx].status = 6
127 } 135 }
128 } 136 }
129 // 保存数据 137 // 保存数据
@@ -135,6 +143,33 @@ @@ -135,6 +143,33 @@
135 console.log('order_confirm', err) 143 console.log('order_confirm', err)
136 } 144 }
137 }, 145 },
  146 + //确认收货
  147 + async order_confirm(id, idx, type) {
  148 + let that = this
  149 + that.conid = id
  150 + that.conidx = idx
  151 + that.contype = type
  152 + if (type == 1) {
  153 + uni.showModal({
  154 + content: "是否确认收货",
  155 + success(res) {
  156 + if (res.confirm) {
  157 + that.reqedconfirm()
  158 + }
  159 + }
  160 + })
  161 + } else {
  162 + uni.showModal({
  163 + content: "是否未收到货",
  164 + success(res) {
  165 + if (res.confirm) {
  166 + that.reqedconfirm()
  167 + }
  168 + }
  169 + })
  170 + }
  171 +
  172 + },
138 // 查看交易证明 173 // 查看交易证明
139 openshow(id, index, img, status) { 174 openshow(id, index, img, status) {
140 this.showimg = img 175 this.showimg = img
@@ -272,6 +307,7 @@ @@ -272,6 +307,7 @@
272 .right { 307 .right {
273 font-size: 30rpx; 308 font-size: 30rpx;
274 font-weight: 700; 309 font-weight: 700;
  310 +
275 .staright { 311 .staright {
276 margin-top: 12rpx; 312 margin-top: 12rpx;
277 color: rgba(0, 0, 0, 0.3); 313 color: rgba(0, 0, 0, 0.3);
@@ -56,10 +56,10 @@ @@ -56,10 +56,10 @@
56 <image :src="`/static/bot${idx+1}.png`" mode=""></image> 56 <image :src="`/static/bot${idx+1}.png`" mode=""></image>
57 {{item.name}} 57 {{item.name}}
58 </view> 58 </view>
59 - <view class="item" v-for="(item,idx) in botList" :key="item.id" @click="toBotDetail(item.id)"> 59 + <!-- <view class="item" v-for="(item,idx) in botList" :key="item.id" @click="toBotDetail(item.id)">
60 <image :src="item.image_preview" mode=""></image> 60 <image :src="item.image_preview" mode=""></image>
61 {{item.title}} 61 {{item.title}}
62 - </view> 62 + </view> -->
63 </view> 63 </view>
64 </view> 64 </view>
65 65
@@ -155,7 +155,9 @@ @@ -155,7 +155,9 @@
155 setTimeout(()=>{ 155 setTimeout(()=>{
156 toa.success('退出成功') 156 toa.success('退出成功')
157 },200) 157 },200)
158 - uni.clearStorage() 158 + // uni.clearStorage()
  159 + uni.removeStorageSync('token')
  160 + uni.removeStorageSync('userInfo')
159 uni.navigateTo({ 161 uni.navigateTo({
160 url:'/pages/login/login' 162 url:'/pages/login/login'
161 }) 163 })
@@ -385,7 +387,7 @@ @@ -385,7 +387,7 @@
385 padding: 32rpx 0; 387 padding: 32rpx 0;
386 box-sizing: border-box; 388 box-sizing: border-box;
387 width: 702rpx; 389 width: 702rpx;
388 - height: 464rpx; 390 +
389 border-radius: 24rpx; 391 border-radius: 24rpx;
390 opacity: 1; 392 opacity: 1;
391 background: rgba(255, 255, 255, 1); 393 background: rgba(255, 255, 255, 1);
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <image src="/static/2.png" mode=""></image> 6 <image src="/static/2.png" mode=""></image>
7 <text>{{detail.buyer_name}}</text> 7 <text>{{detail.buyer_name}}</text>
8 </view> 8 </view>
9 - <view class="topbox" @click="ondetail(detail.id)"> 9 + <view class="topbox" @click="ondetail">
10 <view class="boxtop flexD"> 10 <view class="boxtop flexD">
11 <view class="order"> 11 <view class="order">
12 订单号:{{detail.order_no}} 12 订单号:{{detail.order_no}}
@@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@
84 }, 84 },
85 methods: { 85 methods: {
86 //跳转详情 86 //跳转详情
87 - ondetail(item) { 87 + ondetail() {
88 uni.navigateTo({ 88 uni.navigateTo({
89 url: "/pages/index/detail?id=" + this.shopId 89 url: "/pages/index/detail?id=" + this.shopId
90 }) 90 })
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <u-tabs :list="list2" lineColor="#FED000" :scrollable="false" @click="onclick"></u-tabs> 4 <u-tabs :list="list2" lineColor="#FED000" :scrollable="false" @click="onclick"></u-tabs>
5 </u-sticky> 5 </u-sticky>
6 <view class="group"> 6 <view class="group">
7 - <view class="item" v-for="(item,idx) in list" :key="idx" @click.stop="ondetail(item.id)"> 7 + <view class="item" v-for="(item,idx) in list" :key="idx" @click.stop="ondetail(item.id,item.orderinfo.product_id)">
8 <view class="top flexA"> 8 <view class="top flexA">
9 <view class="left flexA"> 9 <view class="left flexA">
10 <image src="/static/order.png" mode=""></image> 10 <image src="/static/order.png" mode=""></image>
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 <text v-if="item.status==2">待发送</text> 17 <text v-if="item.status==2">待发送</text>
18 <text v-if="item.status==3">待买家确认</text> 18 <text v-if="item.status==3">待买家确认</text>
19 <text v-if="item.status==4">已收货</text> 19 <text v-if="item.status==4">已收货</text>
20 - <text v-if="item.status==5" >平台裁决</text> 20 + <text v-if="item.status==5">平台裁决</text>
21 <text v-if="item.status==6">已完成</text> 21 <text v-if="item.status==6">已完成</text>
22 <text v-if="item.status==7">交易失败</text> 22 <text v-if="item.status==7">交易失败</text>
23 </view> 23 </view>
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 <view class="name">买方:{{item.buyer_name}}</view> 31 <view class="name">买方:{{item.buyer_name}}</view>
32 </view> 32 </view>
33 </view> 33 </view>
34 - <view class="right" > 34 + <view class="right">
35 <text style="font-size: 20rpx;">¥</text>{{item.orderinfo.price}} 35 <text style="font-size: 20rpx;">¥</text>{{item.orderinfo.price}}
36 <view style=" color: rgba(0,0,0,0.4);font-size: 24rpx;" v-if="item.status==5"> 36 <view style=" color: rgba(0,0,0,0.4);font-size: 24rpx;" v-if="item.status==5">
37 审核中 37 审核中
@@ -45,9 +45,12 @@ @@ -45,9 +45,12 @@
45 <view class="botBtn flexA"> 45 <view class="botBtn flexA">
46 <view v-if="reseller(item.status)" class="flexC" @click.stop="openshowBuyer(item)">买家信息</view> 46 <view v-if="reseller(item.status)" class="flexC" @click.stop="openshowBuyer(item)">买家信息</view>
47 <view v-if="reseller(item.status)" class="flexC" @click.stop="order_send(item.id,idx)">发货</view> 47 <view v-if="reseller(item.status)" class="flexC" @click.stop="order_send(item.id,idx)">发货</view>
48 - <view v-if="!item.license_preview&&(item.status==2||item.status==3)" class="flexC yellow" @click.stop="openimag(item.id,idx,1)">上传转赠证明</view>  
49 - <view v-if="item.license_preview" class="flexC yellow" @click.stop="openshow(item.license_preview)">查看交易证明</view>  
50 - <view v-if="item.license_preview" class="flexC yellow" @click.stop="openimag(item.id,idx,2)">重新上传证明</view> 48 + <view v-if="!item.license_preview&&(item.status==2||item.status==3)" class="flexC yellow"
  49 + @click.stop="openimag(item.id,idx,1)">上传转赠证明</view>
  50 + <view v-if="item.license_preview" class="flexC yellow" @click.stop="openshow(item.license_preview)">
  51 + 查看交易证明</view>
  52 + <view v-if="item.license_preview" class="flexC yellow" @click.stop="openimag(item.id,idx,2)">重新上传证明
  53 + </view>
51 </view> 54 </view>
52 </view> 55 </view>
53 </view> 56 </view>
@@ -69,31 +72,41 @@ @@ -69,31 +72,41 @@
69 买家信息 72 买家信息
70 </view> 73 </view>
71 <view class="list flexA" v-if="code"> 74 <view class="list flexA" v-if="code">
72 - <view class="left"><text style="color: #FC4338;">*</text>接收账户:</view>  
73 - <view class="right flexA">  
74 - <view class="fw700">{{code}}</view>  
75 - <view style="margin-left: 16rpx;color: rgba(0,0,0,0.4);" @click.stop="copy(code)">复制</view> 75 + <view class="left flexwrap">
  76 + <text style="color: #FC4338;">*</text>
  77 + <text class="leftsize">接收账户:</text>
  78 + <view class="fw700">{{code}}</view></view>
  79 + <view class="right">
  80 + <view style="margin-left: 16rpx;color: rgba(0,0,0,0.4); " @click.stop="copy(code)">复制</view>
76 </view> 81 </view>
77 </view> 82 </view>
78 <view class="list flexA"> 83 <view class="list flexA">
79 - <view class="left"><text style="color: #FC4338;">*</text>微信号:</view>  
80 - <view class="right flexA">  
81 - <view class="fw700">{{wechart}}</view> 84 + <view class="left flexwrap">
  85 + <text style="color: #FC4338;">*</text>
  86 + <text class="leftsize">微信号:</text>
  87 + <view class="fw700">{{wechart}}</view></view>
  88 + <view class="right ">
82 <view style="margin-left: 16rpx;color: rgba(0,0,0,0.4);" @click.stop="copy(wechart)">复制</view> 89 <view style="margin-left: 16rpx;color: rgba(0,0,0,0.4);" @click.stop="copy(wechart)">复制</view>
83 </view> 90 </view>
84 </view> 91 </view>
85 <view class="list flexA" v-if="name"> 92 <view class="list flexA" v-if="name">
86 - <view class="left">联系人:</view> 93 + <view class="left">
  94 + <text class="leftsize">联系人:</text>
  95 + </view>
87 <view class="right flexA"> 96 <view class="right flexA">
88 <view class="fw700">{{name}}</view> 97 <view class="fw700">{{name}}</view>
89 </view> 98 </view>
90 </view> 99 </view>
91 <view class="list flexA" v-if="phone"> 100 <view class="list flexA" v-if="phone">
92 - <view class="left">联系电话:</view> 101 + <view class="left">
  102 + <text class="leftsize">联系电话:</text>
  103 + </view>
93 <view class="right flexA"> 104 <view class="right flexA">
94 <view class="fw700">{{phone}}</view> 105 <view class="fw700">{{phone}}</view>
95 - <view style="margin-left: 16rpx;" >  
96 - <a :href="'tel:' + phone" ><image src="/static/phone.png" mode=""></image></a> 106 + <view style="margin-left: 16rpx;">
  107 + <a :href="'tel:' + phone">
  108 + <image src="/static/phone.png" mode=""></image>
  109 + </a>
97 </view> 110 </view>
98 </view> 111 </view>
99 </view> 112 </view>
@@ -153,16 +166,16 @@ @@ -153,16 +166,16 @@
153 }, 166 },
154 methods: { 167 methods: {
155 //拨打买家电话 168 //拨打买家电话
156 - gophone(phone){ 169 + gophone(phone) {
157 console.log(phone) 170 console.log(phone)
158 uni.makePhoneCall({ 171 uni.makePhoneCall({
159 - phoneNumber:phone//仅为示例 172 + phoneNumber: phone //仅为示例
160 }); 173 });
161 }, 174 },
162 // 跳转详情 175 // 跳转详情
163 - ondetail(id){ 176 + ondetail(id,shopId) {
164 uni.navigateTo({ 177 uni.navigateTo({
165 - url:"/pages/mine/order_detail?id="+id 178 + url: `/pages/mine/order_detail?id=${id}&shopId=${shopId}`
166 }) 179 })
167 }, 180 },
168 // 状态筛选 181 // 状态筛选
@@ -183,7 +196,7 @@ @@ -183,7 +196,7 @@
183 console.log(this.licenimg) 196 console.log(this.licenimg)
184 }, 197 },
185 //上传证明 198 //上传证明
186 - openimag(id, imgindex,type) { 199 + openimag(id, imgindex, type) {
187 let that = this 200 let that = this
188 that.imgid = id 201 that.imgid = id
189 that.imgindex = imgindex 202 that.imgindex = imgindex
@@ -201,7 +214,7 @@ @@ -201,7 +214,7 @@
201 }, 214 },
202 success: (uploadFileRes) => { 215 success: (uploadFileRes) => {
203 uni.showToast({ 216 uni.showToast({
204 - title:type==1?'上传证明成功':'重新上传证明成功' 217 + title: type == 1 ? '上传证明成功' : '重新上传证明成功'
205 }) 218 })
206 let data = JSON.parse(uploadFileRes.data); 219 let data = JSON.parse(uploadFileRes.data);
207 console.log(data); 220 console.log(data);
@@ -383,7 +396,8 @@ @@ -383,7 +396,8 @@
383 text-align: center; 396 text-align: center;
384 font-size: 30rpx; 397 font-size: 30rpx;
385 font-weight: 700; 398 font-weight: 700;
386 - a{ 399 +
  400 + a {
387 text-decoration: none; 401 text-decoration: none;
388 color: #000000; 402 color: #000000;
389 } 403 }
@@ -420,7 +434,8 @@ @@ -420,7 +434,8 @@
420 border-color: rgba(254, 208, 0, 1); 434 border-color: rgba(254, 208, 0, 1);
421 color: rgba(0, 0, 0, 0.9); 435 color: rgba(0, 0, 0, 0.9);
422 } 436 }
423 - .yellow:nth-last-child(1){ 437 +
  438 + .yellow:nth-last-child(1) {
424 margin-right: 0; 439 margin-right: 0;
425 } 440 }
426 } 441 }
@@ -489,8 +504,19 @@ @@ -489,8 +504,19 @@
489 color: rgba(0, 0, 0, 0.9); 504 color: rgba(0, 0, 0, 0.9);
490 font-size: 28rpx; 505 font-size: 28rpx;
491 justify-content: space-between; 506 justify-content: space-between;
492 - 507 + .left{
  508 + flex: 1;
  509 + .leftsize{
  510 + width: 150rpx;
  511 + }
  512 + .fw700{
  513 + word-break: break-all;
  514 + flex: 1;
  515 + }
  516 + }
493 .right { 517 .right {
  518 +
  519 +
494 image { 520 image {
495 margin-top: 5rpx; 521 margin-top: 5rpx;
496 width: 32rpx; 522 width: 32rpx;
@@ -2,14 +2,15 @@ @@ -2,14 +2,15 @@
2 <view class=""> 2 <view class="">
3 <image class="bg" src="/static/takeMoneyBg.png" mode=""></image> 3 <image class="bg" src="/static/takeMoneyBg.png" mode=""></image>
4 <view class="top"> 4 <view class="top">
5 - <view >账户余额:</view>  
6 - <view > <text style="32rpx">¥</text>{{money}}</view> 5 + <view v-if="type==1">账户余额:</view>
  6 + <view v-else>保证金余额:</view>
  7 + <view> <text style="32rpx">¥</text>{{money}}</view>
7 </view> 8 </view>
8 <view class="center"> 9 <view class="center">
9 <view class="title" v-if="type==1">提现金额</view> 10 <view class="title" v-if="type==1">提现金额</view>
10 <view class="inputPrice" v-if="type==1"> 11 <view class="inputPrice" v-if="type==1">
11 <view class=""> 12 <view class="">
12 - ¥<input type="text" @input="checkNumber" v-model="form.price"/> 13 + ¥<input type="text" @input="checkNumber" v-model="form.price" />
13 </view> 14 </view>
14 <view class="right" @click="takePrice">全部提现</view> 15 <view class="right" @click="takePrice">全部提现</view>
15 </view> 16 </view>
@@ -17,12 +18,12 @@ @@ -17,12 +18,12 @@
17 <!-- 支付要输入的信息 --> 18 <!-- 支付要输入的信息 -->
18 <view class="payInput" v-if="form.withdraw_type==2"> 19 <view class="payInput" v-if="form.withdraw_type==2">
19 <view class="list"> 20 <view class="list">
20 - <view class="input" >支付宝收款姓名:</view> 21 + <view class="input">支付宝收款姓名:</view>
21 <input type="text" v-model="form.withdraw_name" placeholder="请输入" value="" /> 22 <input type="text" v-model="form.withdraw_name" placeholder="请输入" value="" />
22 </view> 23 </view>
23 <view class="list"> 24 <view class="list">
24 <view class="input">支付宝绑定的账号:</view> 25 <view class="input">支付宝绑定的账号:</view>
25 - <input type="text" v-model="form.withdraw_mobile" maxlength="11" placeholder="请输入" value="" /> 26 + <input type="text" v-model="form.withdraw_mobile" placeholder="请输入" value="" />
26 </view> 27 </view>
27 </view> 28 </view>
28 <view class="payInput" v-if="form.withdraw_type==3"> 29 <view class="payInput" v-if="form.withdraw_type==3">
@@ -36,7 +37,7 @@ @@ -36,7 +37,7 @@
36 </view> 37 </view>
37 <view class="list"> 38 <view class="list">
38 <view class="input">持卡人姓名:</view> 39 <view class="input">持卡人姓名:</view>
39 - <input type="number" v-model="form.name" maxlength="11" placeholder="请输入" value="" /> 40 + <input type="text" v-model="form.name" placeholder="请输入" value="" />
40 </view> 41 </view>
41 </view> 42 </view>
42 <view class="line" v-if="type==1"></view> 43 <view class="line" v-if="type==1"></view>
@@ -77,68 +78,81 @@ @@ -77,68 +78,81 @@
77 </view> 78 </view>
78 79
79 <view class="Withdrawal flexC" @click="takeMoney">提现</view> 80 <view class="Withdrawal flexC" @click="takeMoney">提现</view>
80 - <view class="tips">  
81 - 温馨提示:为了平台更好的服务于平台用户,提示时平台将会提取交易金额的10%手续费用于维持平台的运营工作 81 + <view class="tips" v-if="type==1">
  82 + 温馨提示:为了能给您带来更好的服务,琉璃藏宝阁平台将抽取订单余额的{{withdraw_percent}}%作为交易手续费,账户余额为抽取手续费之后的金额,提现足额到账。
  83 + </view>
  84 + <view class="tips" v-else>
  85 + 温馨提示:保证金不收取任何手续费,可随时提现。若您违反了琉璃藏宝阁平台用户规则,平台将扣除部分保证金。
82 </view> 86 </view>
83 -  
84 </view> 87 </view>
85 </view> 88 </view>
86 </template> 89 </template>
87 90
88 <script> 91 <script>
89 - import {toa} from '@/utils/toast.js'  
90 - import { getUserInfo,takeMoney,takeBail } from '@/api/mine.js'  
91 - export default{ 92 + import {
  93 + toa
  94 + } from '@/utils/toast.js'
  95 + import {
  96 + getUserInfo,
  97 + takeMoney,
  98 + takeBail
  99 + } from '@/api/mine.js'
  100 + export default {
92 data() { 101 data() {
93 return { 102 return {
94 - payType:'1',  
95 - money:0,  
96 - price:'',  
97 - form:{  
98 - price:'', // integer 否 提现金额  
99 - withdraw_type:1, // integer 是 提现方式:1=微信2=支付宝3=银行卡  
100 - withdraw_name:'', // string 否 支付宝收款姓名  
101 - withdraw_mobile:'', // string 否 支付宝绑定的手机号  
102 - bank_name:'', // string 否 提现银行  
103 - bank_num:'', // string 否 银行卡号  
104 - name:'', // string 否 持卡人姓名 103 + payType: '1',
  104 + money: 0,
  105 + price: '',
  106 + form: {
  107 + price: '', // integer 否 提现金额
  108 + withdraw_type: 1, // integer 是 提现方式:1=微信2=支付宝3=银行卡
  109 + withdraw_name: '', // string 否 支付宝收款姓名
  110 + withdraw_mobile: '', // string 否 支付宝绑定的手机号
  111 + bank_name: '', // string 否 提现银行
  112 + bank_num: '', // string 否 银行卡号
  113 + name: '', // string 否 持卡人姓名
105 }, 114 },
106 - type:1 115 + type: 1,
  116 + withdraw_percent:"",
107 } 117 }
108 }, 118 },
109 onLoad(e) { 119 onLoad(e) {
110 // 1 是余额 2是保证金 120 // 1 是余额 2是保证金
111 - this.type= e.type 121 + this.type = e.type
112 }, 122 },
113 onShow() { 123 onShow() {
114 this.getUserInfo() 124 this.getUserInfo()
115 }, 125 },
116 methods: { 126 methods: {
117 - async getUserInfo(){ 127 + async getUserInfo() {
118 try { 128 try {
119 const res = await getUserInfo() 129 const res = await getUserInfo()
120 - if(this.type==1){ 130 + if (this.type == 1) {
121 this.money = res.user.money 131 this.money = res.user.money
122 - }else { 132 + this.withdraw_percent=res.user.withdraw_percent
  133 + } else {
123 this.money = res.user.score 134 this.money = res.user.score
124 this.form.price = res.user.score 135 this.form.price = res.user.score
125 } 136 }
126 console.log('getUserInfo', res) 137 console.log('getUserInfo', res)
127 // 保存数据 138 // 保存数据
128 } catch (err) { 139 } catch (err) {
129 - uni.showToast({ title:err,icon:'none' }) 140 + uni.showToast({
  141 + title: err,
  142 + icon: 'none'
  143 + })
130 console.log('getUserInfo', err) 144 console.log('getUserInfo', err)
131 } 145 }
132 }, 146 },
133 147
134 // 切换支付方式 148 // 切换支付方式
135 - toggleType(type){ 149 + toggleType(type) {
136 this.form.withdraw_type = type 150 this.form.withdraw_type = type
137 }, 151 },
138 152
139 // 提现全部按钮 153 // 提现全部按钮
140 - takePrice(){  
141 - if(this.money<=0) return toa.toast('账户余额不足') 154 + takePrice() {
  155 + if (this.money <= 0) return toa.toast('账户余额不足')
142 this.form.price = this.money 156 this.form.price = this.money
143 }, 157 },
144 checkNumber(e) { 158 checkNumber(e) {
@@ -160,65 +174,71 @@ @@ -160,65 +174,71 @@
160 }, 174 },
161 175
162 // 提现功能按钮 176 // 提现功能按钮
163 - takeMoney(){  
164 - if(this.money<=0) return toa.toast('账户余额不足')  
165 - if(!this.money) return toa.toast('请输入提现金额')  
166 - if(this.form.withdraw_type==1 && this.form.price<1) return toa.toast('微信提现最少提现1元')  
167 - if(this.form.withdraw_type==2 && !this.form.withdraw_name ) return toa.toast('请输入支付宝收款姓名')  
168 - if(this.form.withdraw_type==2 && !this.form.withdraw_mobile ) return toa.toast('请输入支付宝收款手机号')  
169 - if(this.form.withdraw_type==3 && !this.form.bank_name ) return toa.toast('请输入银行卡提现银行')  
170 - if(this.form.withdraw_type==3 && !this.form.bank_num ) return toa.toast('请输入银行卡号')  
171 - if(this.form.withdraw_type==3 && !this.form.name ) return toa.toast('请输入持卡人姓名') 177 + takeMoney() {
  178 + if (this.money <= 0) return toa.toast('账户余额不足')
  179 + if (!this.money) return toa.toast('请输入提现金额')
  180 + if (this.form.withdraw_type == 1 && this.form.price < 1) return toa.toast('微信提现最少提现1元')
  181 + if (this.form.withdraw_type == 2 && !this.form.withdraw_name) return toa.toast('请输入支付宝收款姓名')
  182 + if (this.form.withdraw_type == 2 && !this.form.withdraw_mobile) return toa.toast('请输入支付宝收款手机号')
  183 + if (this.form.withdraw_type == 3 && !this.form.bank_name) return toa.toast('请输入银行卡提现银行')
  184 + if (this.form.withdraw_type == 3 && !this.form.bank_num) return toa.toast('请输入银行卡号')
  185 + if (this.form.withdraw_type == 3 && !this.form.name) return toa.toast('请输入持卡人姓名')
172 console.log(this.form); 186 console.log(this.form);
173 - if(this.type==1){  
174 - if(this.form.withdraw_type==1){ 187 + if (this.type == 1) {
  188 + if (this.form.withdraw_type == 1) {
175 toa.toast('微信提现暂未开放,敬请期待') 189 toa.toast('微信提现暂未开放,敬请期待')
176 - }else { 190 + } else {
177 this.toTakeMoney() 191 this.toTakeMoney()
178 } 192 }
179 - }else {  
180 - if(this.form.withdraw_type==1){ 193 + } else {
  194 + if (this.form.withdraw_type == 1) {
181 toa.toast('微信提现暂未开放,敬请期待') 195 toa.toast('微信提现暂未开放,敬请期待')
182 - }else { 196 + } else {
183 this.takeBail() 197 this.takeBail()
184 } 198 }
185 } 199 }
186 200
187 201
188 }, 202 },
189 - async toTakeMoney(){ 203 + async toTakeMoney() {
190 try { 204 try {
191 const res = await takeMoney(this.form) 205 const res = await takeMoney(this.form)
192 - setTimeout(()=>{ 206 + setTimeout(() => {
193 toa.success('提现提交成功,请等待审核') 207 toa.success('提现提交成功,请等待审核')
194 - },200) 208 + }, 200)
195 for (let key in this.form) { 209 for (let key in this.form) {
196 - this.form[key]='' 210 + this.form[key] = ''
197 } 211 }
198 this.form.withdraw_type = 1 212 this.form.withdraw_type = 1
199 this.getUserInfo() 213 this.getUserInfo()
200 console.log('takeMoney', res) 214 console.log('takeMoney', res)
201 // 保存数据 215 // 保存数据
202 } catch (err) { 216 } catch (err) {
203 - uni.showToast({ title:err,icon:'none' }) 217 + uni.showToast({
  218 + title: err,
  219 + icon: 'none'
  220 + })
204 console.log('takeMoney', err) 221 console.log('takeMoney', err)
205 } 222 }
206 }, 223 },
207 - async takeBail(){ 224 + async takeBail() {
208 try { 225 try {
209 const res = await takeBail(this.form) 226 const res = await takeBail(this.form)
210 - setTimeout(()=>{ 227 + setTimeout(() => {
211 toa.success('提现提交成功,请等待审核') 228 toa.success('提现提交成功,请等待审核')
212 - },200) 229 + }, 200)
213 for (let key in this.form) { 230 for (let key in this.form) {
214 - this.form[key]='' 231 + this.form[key] = ''
215 } 232 }
216 this.form.withdraw_type = 1 233 this.form.withdraw_type = 1
217 this.getUserInfo() 234 this.getUserInfo()
218 console.log('takeMoney', res) 235 console.log('takeMoney', res)
219 // 保存数据 236 // 保存数据
220 } catch (err) { 237 } catch (err) {
221 - uni.showToast({ title:err,icon:'none' }) 238 + uni.showToast({
  239 + title: err,
  240 + icon: 'none'
  241 + })
222 console.log('takeMoney', err) 242 console.log('takeMoney', err)
223 } 243 }
224 } 244 }
@@ -231,6 +251,7 @@ @@ -231,6 +251,7 @@
231 page { 251 page {
232 background: #f6f6f6; 252 background: #f6f6f6;
233 } 253 }
  254 +
234 .bg { 255 .bg {
235 overflow: hidden; 256 overflow: hidden;
236 position: absolute; 257 position: absolute;
@@ -239,20 +260,24 @@ @@ -239,20 +260,24 @@
239 width: 100%; 260 width: 100%;
240 height: 366rpx; 261 height: 366rpx;
241 } 262 }
  263 +
242 .top { 264 .top {
243 position: absolute; 265 position: absolute;
244 left: 32rpx; 266 left: 32rpx;
245 top: 64rpx; 267 top: 64rpx;
  268 +
246 view:nth-child(1) { 269 view:nth-child(1) {
247 - color: rgba(0,0,0,0.4); 270 + color: rgba(0, 0, 0, 0.4);
248 font-size: 28rpx; 271 font-size: 28rpx;
249 } 272 }
  273 +
250 view:nth-child(2) { 274 view:nth-child(2) {
251 - color: rgba(0,0,0,0.9); 275 + color: rgba(0, 0, 0, 0.9);
252 font-size: 64rpx; 276 font-size: 64rpx;
253 font-weight: 700; 277 font-weight: 700;
254 } 278 }
255 } 279 }
  280 +
256 .center { 281 .center {
257 position: absolute; 282 position: absolute;
258 width: 686rpx; 283 width: 686rpx;
@@ -263,12 +288,14 @@ @@ -263,12 +288,14 @@
263 transform: translateX(-50%); 288 transform: translateX(-50%);
264 background: #fff; 289 background: #fff;
265 box-sizing: border-box; 290 box-sizing: border-box;
  291 +
266 .line { 292 .line {
267 margin: 32rpx 0; 293 margin: 32rpx 0;
268 width: 622rpx; 294 width: 622rpx;
269 height: 1rpx; 295 height: 1rpx;
270 - background: rgba(240,242,245,1); 296 + background: rgba(240, 242, 245, 1);
271 } 297 }
  298 +
272 // 收到的信息 299 // 收到的信息
273 .payInput { 300 .payInput {
274 .list { 301 .list {
@@ -276,49 +303,58 @@ @@ -276,49 +303,58 @@
276 justify-content: space-between; 303 justify-content: space-between;
277 font-size: 28rpx; 304 font-size: 28rpx;
278 margin: 32rpx 0; 305 margin: 32rpx 0;
  306 +
279 .input { 307 .input {
280 flex: 1; 308 flex: 1;
281 font-weight: 700; 309 font-weight: 700;
282 } 310 }
  311 +
283 input { 312 input {
284 text-align: right; 313 text-align: right;
285 - width:300rpx; 314 + width: 300rpx;
286 } 315 }
287 } 316 }
288 } 317 }
  318 +
289 .title { 319 .title {
290 font-weight: 700; 320 font-weight: 700;
291 margin-bottom: 32rpx; 321 margin-bottom: 32rpx;
292 font-weight: 700; 322 font-weight: 700;
293 } 323 }
  324 +
294 .inputPrice { 325 .inputPrice {
295 display: flex; 326 display: flex;
296 justify-content: space-between; 327 justify-content: space-between;
297 align-items: center; 328 align-items: center;
  329 +
298 view { 330 view {
299 font-weight: 700; 331 font-weight: 700;
300 display: flex; 332 display: flex;
301 align-items: center; 333 align-items: center;
302 font-size: 52rpx; 334 font-size: 52rpx;
  335 +
303 input { 336 input {
304 margin-left: 20rpx; 337 margin-left: 20rpx;
305 font-weight: 400; 338 font-weight: 400;
306 } 339 }
307 } 340 }
  341 +
308 .right { 342 .right {
309 - color: rgba(33,83,212,1); 343 + color: rgba(33, 83, 212, 1);
310 font-size: 28rpx; 344 font-size: 28rpx;
311 font-weight: 400; 345 font-weight: 400;
312 } 346 }
313 } 347 }
314 } 348 }
  349 +
315 .payType { 350 .payType {
316 - .list{ 351 + .list {
317 margin-bottom: 32rpx; 352 margin-bottom: 32rpx;
318 display: flex; 353 display: flex;
319 align-items: center; 354 align-items: center;
320 justify-content: space-between; 355 justify-content: space-between;
321 } 356 }
  357 +
322 .left { 358 .left {
323 image { 359 image {
324 margin-right: 24rpx; 360 margin-right: 24rpx;
@@ -326,6 +362,7 @@ @@ -326,6 +362,7 @@
326 height: 48rpx; 362 height: 48rpx;
327 } 363 }
328 } 364 }
  365 +
329 .right { 366 .right {
330 image { 367 image {
331 width: 36rpx; 368 width: 36rpx;
@@ -333,19 +370,21 @@ @@ -333,19 +370,21 @@
333 } 370 }
334 } 371 }
335 } 372 }
  373 +
336 .Withdrawal { 374 .Withdrawal {
337 margin: 100rpx auto 0; 375 margin: 100rpx auto 0;
338 width: 622rpx; 376 width: 622rpx;
339 height: 88rpx; 377 height: 88rpx;
340 - color: rgba(0,0,0,0.9); 378 + color: rgba(0, 0, 0, 0.9);
341 font-size: 32rpx; 379 font-size: 32rpx;
342 font-weight: 700; 380 font-weight: 700;
343 border-radius: 28rpx; 381 border-radius: 28rpx;
344 - background: linear-gradient(90deg, rgba(255,230,89,1) 0%, rgba(255,216,0,1) 100%); 382 + background: linear-gradient(90deg, rgba(255, 230, 89, 1) 0%, rgba(255, 216, 0, 1) 100%);
345 } 383 }
  384 +
346 .tips { 385 .tips {
347 margin-top: 16rpx; 386 margin-top: 16rpx;
348 - color: rgba(0,0,0,0.4); 387 + color: rgba(0, 0, 0, 0.4);
349 font-size: 24rpx; 388 font-size: 24rpx;
350 } 389 }
351 </style> 390 </style>
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 <view v-if="isSend==1" class="topState flexC" :class="item2.status==1?'Sale':'Sold'"> 35 <view v-if="isSend==1" class="topState flexC" :class="item2.status==1?'Sale':'Sold'">
36 {{item2.status==1?'售卖中':'已卖出'}} 36 {{item2.status==1?'售卖中':'已卖出'}}
37 </view> 37 </view>
38 - <view class="bot" v-if="isSend==1"> 38 + <view class="bot" v-if="isSend==1&&item2.status==1">
39 <image @click.stop="edit(item2)" src="/static/edit.png" mode=""></image> 39 <image @click.stop="edit(item2)" src="/static/edit.png" mode=""></image>
40 <image @click.stop="del(item2,index2)" src="/static/del.png" mode=""></image> 40 <image @click.stop="del(item2,index2)" src="/static/del.png" mode=""></image>
41 </view> 41 </view>
1 <!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>琉璃藏宝阁</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)')) 1 <!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>琉璃藏宝阁</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
2 - document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/static/index.a5c69d49.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/static/js/chunk-vendors.f3bf79df.js></script><script src=/static/js/index.e92a2594.js></script></body></html>  
  2 + document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/static/index.2772579d.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/static/js/chunk-vendors.25d822ea.js></script><script src=/static/js/index.f0cd1748.js></script></body></html>
1 -uni-tabbar{display:block;box-sizing:border-box;width:100%;z-index:998}uni-tabbar .uni-tabbar{display:-webkit-box;display:-webkit-flex;display:flex;z-index:998;box-sizing:border-box}uni-tabbar.uni-tabbar-bottom,uni-tabbar.uni-tabbar-bottom .uni-tabbar,uni-tabbar.uni-tabbar-top,uni-tabbar.uni-tabbar-top .uni-tabbar{position:fixed;left:var(--window-left);right:var(--window-right)}.uni-app--showlayout+uni-tabbar.uni-tabbar-bottom,.uni-app--showlayout+uni-tabbar.uni-tabbar-bottom .uni-tabbar,.uni-app--showlayout+uni-tabbar.uni-tabbar-top,.uni-app--showlayout+uni-tabbar.uni-tabbar-top .uni-tabbar{left:var(--window-margin);right:var(--window-margin)}uni-tabbar.uni-tabbar-bottom .uni-tabbar{bottom:0;padding-bottom:0;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}uni-tabbar .uni-tabbar~.uni-placeholder{width:100%;margin-bottom:0;margin-bottom:constant(safe-area-inset-bottom);margin-bottom:env(safe-area-inset-bottom)}uni-tabbar .uni-tabbar *{box-sizing:border-box}uni-tabbar .uni-tabbar__item{-webkit-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;flex:1;font-size:0;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}uni-tabbar .uni-tabbar__bd,uni-tabbar .uni-tabbar__item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal}uni-tabbar .uni-tabbar__bd{position:relative;-webkit-flex-direction:column;flex-direction:column;cursor:pointer}uni-tabbar .uni-tabbar__icon{position:relative;display:inline-block;margin-top:5px}uni-tabbar .uni-tabbar__icon.uni-tabbar__icon__diff{margin-top:0;width:34px;height:34px}uni-tabbar .uni-tabbar__icon img{width:100%;height:100%}uni-tabbar .uni-tabbar__label{position:relative;text-align:center;font-size:10px}uni-tabbar .uni-tabbar-border{position:absolute;left:0;top:0;width:100%;height:1px;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-tabbar .uni-tabbar__reddot{position:absolute;top:0;right:0;width:12px;height:12px;border-radius:50%;background-color:#f43530;color:#fff;-webkit-transform:translate(40%,-20%);transform:translate(40%,-20%)}uni-tabbar .uni-tabbar__badge{width:auto;height:16px;line-height:16px;border-radius:16px;min-width:16px;padding:0 2px;font-size:12px;text-align:center;white-space:nowrap}uni-tabbar .uni-tabbar__mid{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;position:absolute;bottom:0;background-size:100% 100%}uni-content,uni-tabbar .uni-tabbar__mid{display:-webkit-box;display:-webkit-flex;display:flex}uni-content{-webkit-box-flex:1;-webkit-flex:1 0 auto;flex:1 0 auto;height:100%}uni-main{-webkit-box-flex:1;-webkit-flex:1;flex:1;width:100%}uni-top-window+uni-content{height:calc(100vh - var(--top-window-height))}uni-left-window{width:var(--window-left);-webkit-box-ordinal-group:0;-webkit-order:-1;order:-1}uni-left-window,uni-right-window{position:relative;overflow-x:hidden}uni-right-window{width:var(--window-right)}uni-left-window[data-show],uni-right-window[data-show]{position:absolute}uni-right-window[data-show]{right:0}.uni-left-window,.uni-right-window,uni-content .uni-mask{z-index:997}.uni-mask+.uni-left-window,.uni-mask+.uni-right-window{position:fixed}.uni-top-window{position:fixed;left:var(--window-margin);right:var(--window-margin);top:0;z-index:998;overflow:hidden}uni-toast{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box;pointer-events:none;font-size:16px}uni-toast .uni-sample-toast{position:fixed;z-index:999;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;max-width:80%}uni-toast .uni-simple-toast__text{display:inline-block;vertical-align:middle;color:#fff;background-color:rgba(17,17,17,.7);padding:10px 20px;border-radius:5px;font-size:13px;text-align:center;max-width:100%;word-break:break-all;white-space:normal}uni-toast .uni-mask{pointer-events:auto}uni-toast .uni-toast{position:fixed;z-index:999;width:8em;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:rgba(17,17,17,.7);text-align:center;border-radius:5px;color:#fff}uni-toast .uni-toast *{box-sizing:border-box}uni-toast .uni-toast__icon{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}uni-toast .uni-icon_toast{margin:15px 0 0}uni-toast .uni-icon_toast.uni-icon-success-no-circle:before{color:#fff;font-size:55px}uni-toast .uni-icon_toast.uni-icon-error:before{color:#fff;font-size:50px}uni-toast .uni-icon_toast.uni-loading{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}uni-toast .uni-toast__content{margin:0 0 15px}uni-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box}uni-modal .uni-modal{position:fixed;z-index:999;width:80%;max-width:300px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}uni-modal .uni-modal *{box-sizing:border-box}uni-modal .uni-modal__hd{padding:1em 1.6em .3em}uni-modal .uni-modal__title{font-weight:400;font-size:18px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}uni-modal .uni-modal__bd,uni-modal .uni-modal__title{word-wrap:break-word;word-break:break-all;white-space:pre-wrap}uni-modal .uni-modal__bd{padding:1.3em 1.6em 1.3em;min-height:40px;font-size:15px;line-height:1.4;color:#999;max-height:400px;overflow-x:hidden;overflow-y:auto}uni-modal .uni-modal__textarea{resize:none;border:0;margin:0;width:90%;padding:10px;font-size:20px;outline:none;border:none;background-color:#eee;text-decoration:inherit}uni-modal .uni-modal__ft{position:relative;line-height:48px;font-size:18px;display:-webkit-box;display:-webkit-flex;display:flex}uni-modal .uni-modal__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-modal .uni-modal__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative;cursor:pointer}uni-modal .uni-modal__btn:active{background-color:#eee}uni-modal .uni-modal__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}uni-modal .uni-modal__btn:first-child:after{display:none}uni-modal .uni-modal__btn_default{color:#353535}uni-modal .uni-modal__btn_primary{color:#007aff}uni-actionsheet{display:block;box-sizing:border-box}uni-actionsheet .uni-actionsheet{position:fixed;left:6px;right:6px;bottom:6px;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:999;visibility:hidden;-webkit-transition:visibility .3s,-webkit-transform .3s;transition:visibility .3s,-webkit-transform .3s;transition:transform .3s,visibility .3s;transition:transform .3s,visibility .3s,-webkit-transform .3s}uni-actionsheet .uni-actionsheet.uni-actionsheet_toggle{visibility:visible;-webkit-transform:translate(0);transform:translate(0)}uni-actionsheet .uni-actionsheet *{box-sizing:border-box}uni-actionsheet .uni-actionsheet__action,uni-actionsheet .uni-actionsheet__menu{border-radius:5px;background-color:#fcfcfd}uni-actionsheet .uni-actionsheet__action{margin-top:6px}uni-actionsheet .uni-actionsheet__cell,uni-actionsheet .uni-actionsheet__title{position:relative;padding:10px 6px;text-align:center;font-size:18px;text-overflow:ellipsis;overflow:hidden;cursor:pointer}uni-actionsheet .uni-actionsheet__title{position:absolute;top:0;right:0;left:0;z-index:1;background-color:#fff;border-radius:5px 5px 0 0;border-bottom:1px solid #e5e5e5}uni-actionsheet .uni-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-actionsheet .uni-actionsheet__cell:active{background-color:#ececec}uni-actionsheet .uni-actionsheet__cell:first-child:before{display:none}@media screen and (min-width:500px) and (min-height:500px){.uni-mask.uni-actionsheet__mask{background:none}uni-actionsheet .uni-actionsheet{width:300px;left:50%;right:auto;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;-webkit-transition:opacity .3s,visibility .3s;transition:opacity .3s,visibility .3s}uni-actionsheet .uni-actionsheet.uni-actionsheet_toggle{opacity:1;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}uni-actionsheet .uni-actionsheet__menu{box-shadow:0 0 20px 5px rgba(0,0,0,.3)}uni-actionsheet .uni-actionsheet__action{display:none}}*{margin:0;-webkit-tap-highlight-color:transparent}@font-face{font-weight:400;font-style:normal;font-family:uni;src:url("data:application/octet-stream;base64,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") format("truetype")}@font-face{font-weight:400;font-style:normal;font-family:unibtn;src:url("data:application/octet-stream;base64,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") format("truetype")}body,html{-webkit-user-select:none;user-select:none;width:100%;height:100%}body{overflow-x:hidden}[class*=" uni-icon-"],[class^=uni-icon-]{display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 uni;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" uni-btn-icon"],[class^=uni-btn-icon]{display:inline-block;font:normal normal normal 14px/1 unibtn;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" uni-btn-icon"]:before,[class^=uni-btn-icon]:before{margin:0;box-sizing:border-box}.uni-icon-success-no-circle:before{content:"\EA08"}.uni-icon-error:before{content:"\EA0B"}.uni-loading,uni-button[loading]:before{background:rgba(0,0,0,0) url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat}.uni-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:uni-loading 1s steps(12) infinite;animation:uni-loading 1s steps(12) infinite;background-size:100%}@-webkit-keyframes uni-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes uni-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.uni-mask{position:fixed;z-index:999;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,.5)}.uni-fade-enter-active,.uni-fade-leave-active{-webkit-transition-duration:.25s;transition-duration:.25s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease;transition-timing-function:ease}.uni-fade-enter,.uni-fade-leave-active{opacity:0}[nvue] uni-label,[nvue] uni-scroll-view,[nvue] uni-swiper-item,[nvue] uni-view{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-shrink:0;flex-shrink:0;-webkit-box-flex:0;-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:auto;flex-basis:auto;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start}[nvue] uni-button{margin:0}[nvue-dir-row] uni-label,[nvue-dir-row] uni-swiper-item,[nvue-dir-row] uni-view{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row}[nvue-dir-column] uni-label,[nvue-dir-column] uni-swiper-item,[nvue-dir-column] uni-view{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}[nvue-dir-row-reverse] uni-label,[nvue-dir-row-reverse] uni-swiper-item,[nvue-dir-row-reverse] uni-view{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}[nvue-dir-column-reverse] uni-label,[nvue-dir-column-reverse] uni-swiper-item,[nvue-dir-column-reverse] uni-view{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}[nvue] uni-image,[nvue] uni-input,[nvue] uni-scroll-view,[nvue] uni-swiper,[nvue] uni-swiper-item,[nvue] uni-text,[nvue] uni-textarea,[nvue] uni-video,[nvue] uni-view{position:relative;border:0 solid #000;box-sizing:border-box}[nvue] uni-swiper-item{position:absolute}uni-app{width:100%;height:100%}uni-app,uni-page-head{display:block;box-sizing:border-box}uni-page-head .uni-page-head{position:fixed;left:var(--window-left);right:var(--window-right);height:44px;height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top));padding:7px 3px;padding-top:calc(7px + constant(safe-area-inset-top));padding-top:calc(7px + env(safe-area-inset-top));display:-webkit-box;display:-webkit-flex;display:flex;overflow:hidden;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;box-sizing:border-box;z-index:998;color:#fff;background-color:#000;-webkit-transition-property:all;transition-property:all}uni-page-head .uni-page-head-titlePenetrate,uni-page-head .uni-page-head-titlePenetrate .uni-page-head-bd,uni-page-head .uni-page-head-titlePenetrate .uni-page-head-bd *{pointer-events:none}uni-page-head .uni-page-head-titlePenetrate *{pointer-events:auto}uni-page-head .uni-page-head.uni-page-head-transparent .uni-page-head-ft>div{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}uni-page-head .uni-page-head~.uni-placeholder{width:100%;height:44px;height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top))}uni-page-head .uni-placeholder-titlePenetrate{pointer-events:none}uni-page-head .uni-page-head *{box-sizing:border-box}uni-page-head .uni-page-head-hd{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;font-size:16px}uni-page-head .uni-page-head-bd{position:absolute;left:70px;right:70px;min-width:0}.uni-page-head-btn{position:relative;width:auto;margin:0 2px;word-break:keep-all;white-space:pre;cursor:pointer}.uni-page-head-transparent .uni-page-head-btn{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;width:32px;height:32px;border-radius:50%;background-color:rgba(0,0,0,.5)}uni-page-head .uni-btn-icon{overflow:hidden;min-width:1em}.uni-page-head-btn-red-dot:after{content:attr(badge-text);position:absolute;right:0;top:0;background-color:red;color:#fff;width:18px;height:18px;line-height:18px;border-radius:18px;overflow:hidden;-webkit-transform:scale(.5) translate(40%,-40%);transform:scale(.5) translate(40%,-40%);-webkit-transform-origin:100% 0;transform-origin:100% 0}.uni-page-head-btn-red-dot[badge-text]:after{font-size:12px;width:auto;min-width:18px;max-width:42px;text-align:center;padding:0 3px;-webkit-transform:scale(.7) translate(40%,-40%);transform:scale(.7) translate(40%,-40%)}.uni-page-head-btn-select>.uni-btn-icon:after{display:inline-block;font-family:unibtn;content:"\e601";margin-left:2px;-webkit-transform:rotate(-90deg) scale(.8);transform:rotate(-90deg) scale(.8)}.uni-page-head-search{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex:1;flex:1;margin:0 2px;line-height:30px;font-size:15px}.uni-page-head-search-input{width:100%;height:100%;padding-left:34px;text-align:left}.uni-page-head-search-placeholder{position:absolute;max-width:100%;height:100%;padding-left:34px;overflow:hidden;word-break:keep-all;white-space:pre}.uni-page-head-search-placeholder-right{right:0}.uni-page-head-search-placeholder-center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.uni-page-head-search-placeholder:before{position:absolute;top:0;left:2px;width:30px;content:"\ea0e";display:block;font-size:20px;font-family:uni;text-align:center}uni-page-head .uni-page-head-ft{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse;font-size:13px}uni-page-head .uni-page-head__title{font-weight:700;font-size:16px;line-height:30px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}uni-page-head .uni-page-head__title .uni-loading{width:16px;height:16px;margin-top:-3px}uni-page-head .uni-page-head__title .uni-page-head__title_image{width:auto;height:26px;vertical-align:middle}uni-page-head .uni-page-head-shadow{overflow:visible}uni-page-head .uni-page-head-shadow:after{content:"";position:absolute;left:0;right:0;top:100%;height:5px;background-size:100% 100%}uni-page-head .uni-page-head-shadow-grey:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}uni-page-head .uni-page-head-shadow-blue:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-blue.png)}uni-page-head .uni-page-head-shadow-green:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-green.png)}uni-page-head .uni-page-head-shadow-orange:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-orange.png)}uni-page-head .uni-page-head-shadow-red:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-red.png)}uni-page-head .uni-page-head-shadow-yellow:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-yellow.png)}uni-page-head .uni-icon-clear{-webkit-align-self:center;align-self:center;padding-right:5px}uni-page-wrapper{display:block;height:100%;position:relative}uni-page-head[uni-page-head-type=default]~uni-page-wrapper{height:calc(100% - 44px);height:calc(100% - 44px - constant(safe-area-inset-top));height:calc(100% - 44px - env(safe-area-inset-top))}uni-page-body,uni-page-refresh{display:block;box-sizing:border-box;width:100%}uni-page-refresh{position:absolute;top:0;height:40px}uni-page-refresh .uni-page-refresh{position:absolute;top:-45px;left:50%;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);background:#fff;box-shadow:0 1px 6px rgba(0,0,0,.117647),0 1px 4px rgba(0,0,0,.117647);display:none;z-index:997}uni-page-refresh .uni-page-refresh,uni-page-refresh .uni-page-refresh-inner{width:40px;height:40px;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;border-radius:50%}uni-page-refresh .uni-page-refresh-inner{line-height:0}uni-page-refresh.uni-page-refresh--aborting .uni-page-refresh,uni-page-refresh.uni-page-refresh--pulling .uni-page-refresh,uni-page-refresh.uni-page-refresh--reached .uni-page-refresh,uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh,uni-page-refresh.uni-page-refresh--restoring .uni-page-refresh,uni-page-refresh .uni-page-refresh-inner{display:-webkit-box;display:-webkit-flex;display:flex}uni-page-refresh.uni-page-refresh--aborting .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--pulling .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--reached .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__icon,uni-page-refresh.uni-page-refresh--restoring .uni-page-refresh__icon{display:none}uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__spinner{-webkit-transform-origin:center center;transform-origin:center center;-webkit-animation:uni-page-refresh-rotate 2s linear infinite;animation:uni-page-refresh-rotate 2s linear infinite}uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;-webkit-animation:uni-page-refresh-dash 1.5s ease-in-out infinite,uni-page-refresh-colorful 6s ease-in-out infinite;animation:uni-page-refresh-dash 1.5s ease-in-out infinite,uni-page-refresh-colorful 6s ease-in-out infinite}@-webkit-keyframes uni-page-refresh-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes uni-page-refresh-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes uni-page-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes uni-page-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}uni-page{display:block;width:100%;height:100%}.uni-async-error{position:absolute;left:0;right:0;top:0;bottom:0;color:#999;padding:100px 10px;text-align:center}.uni-async-loading{box-sizing:border-box;width:100%;padding:50px;text-align:center}.uni-async-loading .uni-loading{width:30px;height:30px}@font-face{font-weight:400;font-style:normal;font-family:unimapbtn;src:url("data:application/octet-stream;base64,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") format("truetype")}.uni-system-choose-location{display:block;position:absolute;left:0;top:0;width:100%;height:100%;background:#f8f8f8}.uni-system-choose-location .map{position:absolute;top:0;left:0;width:100%;height:300px}.uni-system-choose-location .map-location{position:absolute;left:50%;bottom:50%;width:32px;height:52px;margin-left:-16px;cursor:pointer;background-size:100%}.uni-system-choose-location .map-move{position:absolute;bottom:50px;right:10px;width:40px;height:40px;box-sizing:border-box;line-height:40px;background-color:#fff;border-radius:50%;pointer-events:auto;cursor:pointer;box-shadow:0 0 5px 1px rgba(0,0,0,.3)}.uni-system-choose-location .map-move>i{display:block;width:100%;height:100%;font:normal normal normal 14px/1 unimapbtn;line-height:inherit;text-align:center;font-size:24px;text-rendering:auto;-webkit-font-smoothing:antialiased}.uni-system-choose-location .nav{position:absolute;top:0;left:0;width:100%;height:44px;background-color:rgba(0,0,0,0);background-image:-webkit-linear-gradient(top,rgba(0,0,0,.3),rgba(0,0,0,0));background-image:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,0))}.uni-system-choose-location .nav-btn{position:absolute;box-sizing:border-box;top:0;left:0;width:60px;height:44px;padding:6px;line-height:32px;font-size:26px;color:#fff;text-align:center;cursor:pointer}.uni-system-choose-location .nav-btn.confirm{left:auto;right:0}.uni-system-choose-location .nav-btn.disable{opacity:.4}.uni-system-choose-location .nav-btn>.uni-btn-icon{display:block;width:100%;height:100%;line-height:inherit;border-radius:2px}.uni-system-choose-location .nav-btn.confirm>.uni-btn-icon{background-color:#007aff}.uni-system-choose-location .menu{position:absolute;top:300px;left:0;width:100%;bottom:0;background-color:#fff}.uni-system-choose-location .search{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row;height:50px;padding:8px;line-height:34px;box-sizing:border-box;background-color:#fff}.uni-system-choose-location .search-input{-webkit-box-flex:1;-webkit-flex:1;flex:1;height:100%;border-radius:5px;padding:0 5px;background:#ebebeb}.uni-system-choose-location .search-btn{margin-left:5px;color:#007aff;font-size:17px;text-align:center}.uni-system-choose-location .list{position:absolute;top:50px;left:0;width:100%;bottom:0;padding-bottom:10px}.uni-system-choose-location .list-loading{display:-webkit-box;display:-webkit-flex;display:flex;height:50px;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.uni-system-choose-location .list-item{position:relative;padding:10px;padding-right:40px;cursor:pointer}.uni-system-choose-location .list-item.selected:before{position:absolute;top:50%;right:10px;width:30px;height:30px;margin-top:-15px;text-align:center;content:"\e651";font:normal normal normal 14px/1 unibtn;font-size:24px;line-height:30px;color:#007aff;text-rendering:auto;-webkit-font-smoothing:antialiased}.uni-system-choose-location .list-item:not(:last-child):after{position:absolute;content:"";height:1px;left:10px;bottom:0;width:100%;background-color:#d3d3d3}.uni-system-choose-location .list-item-title{font-size:14px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.uni-system-choose-location .list-item-detail{font-size:12px;color:grey;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (min-width:800px){.uni-system-choose-location .map{top:0;height:100%}.uni-system-choose-location .map-move{bottom:10px;right:320px}.uni-system-choose-location .menu{top:54px;left:auto;right:10px;width:300px;bottom:10px;max-height:600px;box-shadow:0 0 20px 5px rgba(0,0,0,.3)}}.uni-system-open-location{display:block;position:absolute;left:0;top:0;width:100%;height:100%;background:#f8f8f8;z-index:999}.uni-system-open-location .map{position:absolute;top:0;left:0;width:100%;bottom:80px;height:auto}.uni-system-open-location .info{position:absolute;bottom:0;left:0;width:100%;height:80px;background-color:#fff;padding:15px;box-sizing:border-box;line-height:1.5}.uni-system-open-location .info>.name{font-size:17px;color:#111}.uni-system-open-location .info>.address{font-size:14px;color:#666}.uni-system-open-location .info>.nav{position:absolute;top:50%;right:15px;width:50px;height:50px;border-radius:50%;margin-top:-25px;background-color:#007aff}.uni-system-open-location .info>.nav>svg{display:block;width:100%;height:100%;padding:10px;box-sizing:border-box}.uni-system-open-location .map-move{position:absolute;bottom:50px;right:10px;width:40px;height:40px;box-sizing:border-box;line-height:40px;background-color:#fff;border-radius:50%;pointer-events:auto;cursor:pointer;box-shadow:0 0 5px 1px rgba(0,0,0,.3)}.uni-system-open-location .map-move>i{display:block;width:100%;height:100%;font:normal normal normal 14px/1 unimapbtn;line-height:inherit;text-align:center;font-size:24px;text-rendering:auto;-webkit-font-smoothing:antialiased}.uni-system-open-location .nav-btn-back{position:absolute;box-sizing:border-box;top:0;left:0;width:44px;height:44px;padding:6px;line-height:32px;font-size:26px;color:#fff;text-align:center;cursor:pointer}.uni-system-open-location .nav-btn-back>.uni-btn-icon{display:block;width:100%;height:100%;line-height:inherit;border-radius:50%;background-color:rgba(0,0,0,.5)}.uni-system-open-location .map-content{position:absolute;left:0;top:0;width:100%;bottom:0;overflow:hidden}.uni-system-open-location .map-content.fix-position{top:-74px;bottom:-44px}.uni-system-open-location .map-content>iframe{width:100%;height:100%;border:none}.uni-system-open-location .actTonav{position:absolute;right:16px;bottom:56px;width:60px;height:60px;border-radius:60px}.image-view-area,.image-view-view{position:absolute;left:0;top:0;width:100%;height:100%}.image-view-img{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:100%;max-width:100%}.uni-system-preview-image{display:block;position:fixed;left:0;top:0;width:100%;height:100%;z-index:999;background:rgba(0,0,0,.8)}.uni-system-preview-image-swiper{position:absolute;left:0;top:0;width:100%;height:100%}uni-audio{display:none}uni-audio[controls]{display:inline-block}uni-audio[hidden]{display:none}.uni-audio-default{max-width:100%;min-width:302px;height:65px;background:#fcfcfc;border:1px solid #e0e0e0;border-radius:2.5px;display:inline-block;overflow:hidden}.uni-audio-left{width:65px;height:65px;float:left;background-color:#e6e6e6;background-size:100% 100%;background-position:50% 50%}.uni-audio-button{width:24px;height:24px;margin:20.5px;background-size:cover}.uni-audio-button.play{background-image:url(data:image/png;base64,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)}.uni-audio-button.pause{background-image:url(data:image/png;base64,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)}.uni-audio-right{box-sizing:border-box;height:65px;margin-left:65px;padding:11px 16.5px 13.5px 15px;overflow:hidden}.uni-audio-time{margin-top:3.5px;height:16.5px;font-size:12px;color:#888;float:right}.uni-audio-info{margin-right:70px;overflow:hidden}.uni-audio-name{height:22.5px;line-height:22.5px;margin-bottom:3.5px;font-size:14px;color:#353535}.uni-audio-author,.uni-audio-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.uni-audio-author{height:14.5px;line-height:14.5px;font-size:12px;color:#888}uni-button{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:transparent;overflow:hidden;color:#000;background-color:#f8f8f8;cursor:pointer}uni-button[hidden]{display:none!important}uni-button:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}uni-button[native]{padding-left:0;padding-right:0}uni-button[native] .uni-button-cover-view-wrapper{border:inherit;border-color:inherit;border-radius:inherit;background-color:inherit}uni-button[native] .uni-button-cover-view-inner{padding-left:14px;padding-right:14px}uni-button uni-cover-view{line-height:inherit;white-space:inherit}uni-button[type=default]{color:#000;background-color:#f8f8f8}uni-button[type=primary]{color:#fff;background-color:#007aff}uni-button[type=warn]{color:#fff;background-color:#e64340}uni-button[disabled]{color:hsla(0,0%,100%,.6);cursor:not-allowed}uni-button[disabled]:not([type]),uni-button[disabled][type=default]{color:rgba(0,0,0,.3);background-color:#f7f7f7}uni-button[disabled][type=primary]{background-color:rgba(0,122,255,.6)}uni-button[disabled][type=warn]{background-color:#ec8b89}uni-button[type=primary][plain]{color:#007aff;border:1px solid #007aff;background-color:rgba(0,0,0,0)}uni-button[type=primary][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=primary][plain]:after{border-width:0}uni-button[type=default][plain]{color:#353535;border:1px solid #353535;background-color:rgba(0,0,0,0)}uni-button[type=default][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=default][plain]:after{border-width:0}uni-button[plain]{color:#353535;border:1px solid #353535;background-color:rgba(0,0,0,0)}uni-button[plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[plain]:after{border-width:0}uni-button[plain][native] .uni-button-cover-view-inner{padding:0}uni-button[type=warn][plain]{color:#e64340;border:1px solid #e64340;background-color:rgba(0,0,0,0)}uni-button[type=warn][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=warn][plain]:after{border-width:0}uni-button[size=mini]{display:inline-block;line-height:2.3;font-size:13px;padding:0 1.34em}uni-button[size=mini][native]{padding:0}uni-button[size=mini][native] .uni-button-cover-view-inner{padding:0 1.34em}uni-button[loading]:not([disabled]){cursor:progress}uni-button[loading]:before{content:" ";display:inline-block;width:18px;height:18px;vertical-align:middle;-webkit-animation:uni-loading 1s steps(12) infinite;animation:uni-loading 1s steps(12) infinite;background-size:100%}uni-button[loading][type=primary]{color:hsla(0,0%,100%,.6);background-color:#0062cc}uni-button[loading][type=primary][plain]{color:#007aff;background-color:rgba(0,0,0,0)}uni-button[loading][type=default]{color:rgba(0,0,0,.6);background-color:#dedede}uni-button[loading][type=default][plain]{color:#353535;background-color:rgba(0,0,0,0)}uni-button[loading][type=warn]{color:hsla(0,0%,100%,.6);background-color:#ce3c39}uni-button[loading][type=warn][plain]{color:#e64340;background-color:rgba(0,0,0,0)}uni-button[loading][native]:before{content:none}.button-hover{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:rgba(0,0,0,0)}.button-hover[type=primary]{color:hsla(0,0%,100%,.6);background-color:#0062cc}.button-hover[type=primary][plain]{color:rgba(26,173,25,.6);border-color:rgba(26,173,25,.6);background-color:rgba(0,0,0,0)}.button-hover[type=default]{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[type=default][plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:rgba(0,0,0,0)}.button-hover[type=warn]{color:hsla(0,0%,100%,.6);background-color:#ce3c39}.button-hover[type=warn][plain]{color:rgba(230,67,64,.6);border-color:rgba(230,67,64,.6);background-color:rgba(0,0,0,0)}uni-canvas{width:300px;height:150px;display:block;position:relative}uni-canvas>canvas{position:absolute;top:0;left:0;width:100%;height:100%}uni-checkbox-group[hidden]{display:none}uni-checkbox{-webkit-tap-highlight-color:transparent;display:inline-block;cursor:pointer}uni-checkbox[hidden]{display:none}uni-checkbox[disabled]{cursor:not-allowed}uni-checkbox .uni-checkbox-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-checkbox .uni-checkbox-input{margin-right:5px;-webkit-appearance:none;appearance:none;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:22px;height:22px;position:relative}uni-checkbox:not([disabled]) .uni-checkbox-input:hover{border-color:#007aff}uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked{color:#007aff}uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";font-size:22px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-checkbox .uni-checkbox-input.uni-checkbox-input-disabled{background-color:#e1e1e1}uni-checkbox .uni-checkbox-input.uni-checkbox-input-disabled:before{color:#adadad}uni-checkbox-group{display:block}.ql-container{display:block;position:relative;box-sizing:border-box;-webkit-user-select:text;user-select:text;outline:none;overflow:hidden;width:100%;height:200px;min-height:200px}.ql-container[hidden]{display:none}.ql-container .ql-editor{position:relative;font-size:inherit;line-height:inherit;font-family:inherit;min-height:inherit;width:100%;height:100%;padding:0;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-overflow-scrolling:touch}.ql-container .ql-editor::-webkit-scrollbar{width:0!important}.ql-container .ql-editor.scroll-disabled{overflow:hidden}.ql-container .ql-image-overlay{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;box-sizing:border-box;border:1px dashed #ccc;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-user-select:none;user-select:none}.ql-container .ql-image-overlay .ql-image-size{position:absolute;padding:4px 8px;text-align:center;background-color:#fff;color:#888;border:1px solid #ccc;box-sizing:border-box;opacity:.8;right:4px;top:4px;font-size:12px;display:inline-block;width:auto}.ql-container .ql-image-overlay .ql-image-toolbar{position:relative;text-align:center;box-sizing:border-box;background:#000;border-radius:5px;color:#fff;font-size:0;min-height:24px;z-index:100}.ql-container .ql-image-overlay .ql-image-toolbar span{display:inline-block;cursor:pointer;padding:5px;font-size:12px;border-right:1px solid #fff}.ql-container .ql-image-overlay .ql-image-toolbar span:last-child{border-right:0}.ql-container .ql-image-overlay .ql-image-toolbar span.triangle-up{padding:0;position:absolute;top:-12px;left:50%;-webkit-transform:translatex(-50%);transform:translatex(-50%);width:0;height:0;border-width:6px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.ql-container .ql-image-overlay .ql-image-handle{position:absolute;height:12px;width:12px;border-radius:50%;border:1px solid #ccc;box-sizing:border-box;background:#fff}.ql-container img{display:inline-block;max-width:100%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;height:100%;outline:none;overflow-y:auto;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li:before,.ql-editor ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:2em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl),.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:2em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:2em}.ql-editor .ql-indent-2:not(.ql-direction-rtl),.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:4em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:4em}.ql-editor .ql-indent-3:not(.ql-direction-rtl),.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:6em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor .ql-indent-4:not(.ql-direction-rtl),.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:8em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:8em}.ql-editor .ql-indent-5:not(.ql-direction-rtl),.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:10em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:10em}.ql-editor .ql-indent-6:not(.ql-direction-rtl),.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:12em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor .ql-indent-7:not(.ql-direction-rtl),.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:14em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:14em}.ql-editor .ql-indent-8:not(.ql-direction-rtl),.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:16em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:16em}.ql-editor .ql-indent-9:not(.ql-direction-rtl),.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:18em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right,.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;pointer-events:none;position:absolute}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}uni-icon{display:inline-block;font-size:0;box-sizing:border-box}uni-icon[hidden]{display:none}uni-icon>i{font:normal normal normal 14px/1 weui}uni-icon>i:before{margin:0;box-sizing:border-box}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url("data:application/octet-stream;base64,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzJAKEx8AAABfAAAAFZjbWFw65cFHQAAAhwAAAJQZ2x5Zp+UEEcAAASUAAAIvGhlYWQUqc7xAAAA4AAAADZoaGVhB/YD+wAAALwAAAAkaG10eEJoAAAAAAHUAAAASGxvY2EUxhJeAAAEbAAAACZtYXhwASEAQwAAARgAAAAgbmFtZeNcHtgAAA1QAAAB5nBvc3T6OoZLAAAPOAAAAOYAAQAAA+gAAABaA+gAAAAAA7MAAQAAAAAAAAAAAAAAAAAAABIAAQAAAAEAAMCU2KdfDzz1AAsD6AAAAADY7EUUAAAAANjsRRQAAAAAA7MD5AAAAAgAAgAAAAAAAAABAAAAEgA3AAUAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQOwAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6gHqEQPoAAAAWgPoAAAAAAABAAAAAAAAAAAAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAAAAABQAAAAMAAAAsAAAABAAAAXQAAQAAAAAAbgADAAEAAAAsAAMACgAAAXQABABCAAAABAAEAAEAAOoR//8AAOoB//8AAAABAAQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAANwAAAAAAAAAEQAA6gEAAOoBAAAAAQAA6gIAAOoCAAAAAgAA6gMAAOoDAAAAAwAA6gQAAOoEAAAABAAA6gUAAOoFAAAABQAA6gYAAOoGAAAABgAA6gcAAOoHAAAABwAA6ggAAOoIAAAACAAA6gkAAOoJAAAACQAA6goAAOoKAAAACgAA6gsAAOoLAAAACwAA6gwAAOoMAAAADAAA6g0AAOoNAAAADQAA6g4AAOoOAAAADgAA6g8AAOoPAAAADwAA6hAAAOoQAAAAEAAA6hEAAOoRAAAAEQAAAAAARACKAMQBEgFgAZIB4gH6AioCeAK0AwwDZAOiA9wEEAReAAAAAgAAAAADlQOVABQAKQAAJSInJicmNDc2NzYyFxYXFhQHBgcGJzI3Njc2NCcmJyYiBwYHBhQXFhcWAfRxYV83OTk3X2HiYV83OTk3X2FxZFVTMTIyMVNVyFVTMTIyMVNVUzk3X2HiYV83OTk3X2HiYV83OTIyMVNVyFVTMTIyMVNVyFVTMTIAAAIAAAAAA7MDswAXAC0AAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMHBiIvASY2OwERNDY7ATIWFREzMhYB7nZnZDs9PTtkZ3Z8amY7Pj47Zmkhdg4oDnYODRddCwcmBwtdFw0Dsz47Zmp8dmdkOz09O2Rndn1pZjs+/fCaEhKaEhoBFwgLCwj+6RoAAwAAAAADlQOVABQAGAAhAAAlIicmJyY0NzY3NjIXFhcWFAcGBwYDETMRJzI2NCYiBhQWAfRxYV83OTk3X2HiYV83OTk3X2GQPh8RGRkiGRlTOTdfYeJhXzc5OTdfYeJhXzc5AfT+3QEjKhgjGBgjGAAAAAACAAAAAAOxA+QAFwAsAAABBgcGDwERFBcWFxYXNjc2NzY1EScmJyYTAQYvASY/ATYyHwEWNjclNjIfARYB9WlsP3A3Rz5sXmxsXW09SDdwQGuP/tUEBIoDAxIBBQFxAQUCARICBQERBAPjFyASJBL+rI51ZUg/HBw/SGV1jgFUEiQSIP66/tkDA48EBBkCAVYCAQHlAQIQBAAAAAADAAAAAAOxA+QAFwAmAC8AAAEGBwYPAREUFxYXFhc2NzY3NjURJyYnJgczMhYVAxQGKwEiJwM0NhMiJjQ2MhYUBgH1aWtAcDdHPmxebGxdbT1IN3BAa4M0BAYMAwImBQELBh4PFhYeFRUD5BggEiQS/q2PdWRJPh0dPklkdY8BUxIkEiD4BgT+xgIDBQE6BAb+QBUfFRUfFQAAAAACAAAAAAOVA5UAFAAaAAAlIicmJyY0NzY3NjIXFhcWFAcGBwYDJwcXAScB9HFhXzc5OTdfYeJhXzc5OTdfYaJzLJ8BFi1TOTdfYeJhXzc5OTdfYeJhXzc5AUhzLJ8BFSwAAAAAAwAAAAADlQOVABQAKQAvAAAlIicmJyY0NzY3NjIXFhcWFAcGBwYnMjc2NzY0JyYnJiIHBgcGFBcWFxYTNxcBJzcB9HFhXzc5OTdfYeJhXzc5OTdfYXFkVVMxMjIxU1XIVVMxMjIxU1Uz8iT+6p8jUzk3X2HiYV83OTk3X2HiYV83OTIyMVNVyFVTMTIyMVNVyFVTMTIBBPIj/uufJAAAAAEAAAAAA5kDGAAHAAAlATcXARcBBgGF/vg7zgHYOv3vAcsBCTvPAdg7/e4BAAAAAAIAAAAAA5UDlQAFABoAAAE1IxUXNwMiJyYnJjQ3Njc2MhcWFxYUBwYHBgITPrEsvnFhXzc5OTdfYeJhXzc5OTdfYQIO4PqxLP7kOTdfYeJhXzc5OTdfYeJhXzc5AAAAAAMAAAAAA5UDlQAFABoALwAAARcHJzUzAyInJicmNDc2NzYyFxYXFhQHBgcGJzI3Njc2NCcmJyYiBwYHBhQXFhcWAg2iI7EyGXFhXzc5OTdfYeJhXzc5OTdfYXFkVVMxMjIxU1XIVVMxMjIxU1UCCaIksfr9ZTk3X2HiYV83OTk3X2HiYV83OTIyMVNVyFVTMTIyMVNVyFVTMTIAAAMAAAAAA5UDlQAUABgAIQAAJSInJicmNDc2NzYyFxYXFhQHBgcGAxMzEwMyNjQmIg4BFgH0cWFfNzk5N19h4mFfNzk5N19hkQU2BSAQFRUgFQEWUzk3X2HiYV83OTk3X2HiYV83OQKV/sQBPP43Fh8VFR8WAAAAAAQAAAAAA5UDlQAUACkALQA2AAAlIicmJyY0NzY3NjIXFhcWFAcGBwYnMjc2NzY0JyYnJiIHBgcGFBcWFxYTMxEjEyImNDYyFhQGAfRxYV83OTk3X2HiYV83OTk3X2FxZFVTMTIyMVNVyFVTMTIyMVNVSzIyGREZGSIZGVM5N19h4mFfNzk5N19h4mFfNzkyMjFTVchVUzEyMjFTVchVUzEyAcL+3QFNGCMYGCMYAAAAAwAAAAADlQOVABQAKQA1AAAlIicmJyY0NzY3NjIXFhcWFAcGBwYnMjc2NzY0JyYnJiIHBgcGFBcWFxYTFwcnByc3JzcXNxcB9HFhXzc5OTdfYeJhXzc5OTdfYXFkVVMxMjIxU1XIVVMxMjIxU1WHgiOCgiOCgiOCgiNTOTdfYeJhXzc5OTdfYeJhXzc5MjIxU1XIVVMxMjIxU1XIVVMxMgFvgiOCgiOCgiOCgiMAAAACAAAAAANUA0IAGAAlAAABFwcnDgEjIicmJyY0NzY3NjIXFhcWFRQGJzQuASIOARQeATI+AQKoqyOsJ180T0RCJycnJ0JEn0RCJiglDUFvg29BQW+Db0EBYKwjrCAjKCZCRJ9EQicnJydCRE82YZdBb0FBb4NvQUFvAAAAAgAAAAADlQOVAAsAIAAAATcnBycHFwcXNxc3AyInJicmNDc2NzYyFxYXFhQHBgcGAiB9LH19LH19LH19LKlxYV83OTk3X2HiYV83OTk3X2EB9H0sfX0sfX0sfX0s/tw5N19h4mFfNzk5N19h4mFfNzkAAAACAAAAAAOVA5UAFAAcAAAlIicmJyY0NzY3NjIXFhcWFAcGBwYDJzcnBwYfAQH0cWFfNzk5N19h4mFfNzk5N19hHoqKK7UBAbVTOTdfYeJhXzc5OTdfYeJhXzc5ARKPjy27AQG6AAAAAAUAAAAAA1cDbAAJAB0AJwArAC8AAAETHgEzITI2NxMzAw4BIyEiJicDIzU0NjMhMhYdASUyFh0BIzU0NjMHMxMjEzMDIwEaIgETDQEuDRMBIjIiAjAh/tIhMAIiVgwJApoJDP7xCQzQDAkVMhUyiTIVMgLd/cgOEhIOAjj9xSEuLiECOx4IDAwIHo4MCR0dCQz6/okBd/6JAAAAAAAAEADGAAEAAAAAAAEABAAAAAEAAAAAAAIABwAEAAEAAAAAAAMABAALAAEAAAAAAAQABAAPAAEAAAAAAAUACwATAAEAAAAAAAYABAAeAAEAAAAAAAoAKwAiAAEAAAAAAAsAEwBNAAMAAQQJAAEACABgAAMAAQQJAAIADgBoAAMAAQQJAAMACAB2AAMAAQQJAAQACAB+AAMAAQQJAAUAFgCGAAMAAQQJAAYACACcAAMAAQQJAAoAVgCkAAMAAQQJAAsAJgD6d2V1aVJlZ3VsYXJ3ZXVpd2V1aVZlcnNpb24gMS4wd2V1aUdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAHcAZQB1AGkAUgBlAGcAdQBsAGEAcgB3AGUAdQBpAHcAZQB1AGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHcAZQB1AGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAAZjaXJjbGUIZG93bmxvYWQEaW5mbwxzYWZlLXN1Y2Nlc3MJc2FmZS13YXJuB3N1Y2Nlc3MOc3VjY2Vzcy1jaXJjbGURc3VjY2Vzcy1uby1jaXJjbGUHd2FpdGluZw53YWl0aW5nLWNpcmNsZQR3YXJuC2luZm8tY2lyY2xlBmNhbmNlbAZzZWFyY2gFY2xlYXIEYmFjawZkZWxldGUAAAAA") format("truetype")}.uni-icon-success:before{content:"\EA06"}.uni-icon-success_circle:before{content:"\EA07"}.uni-icon-success_no_circle:before{content:"\EA08"}.uni-icon-safe_success:before{content:"\EA04"}.uni-icon-safe_warn:before{content:"\EA05"}.uni-icon-info:before{content:"\EA03"}.uni-icon-info_circle:before{content:"\EA0C"}.uni-icon-warn:before{content:"\EA0B"}.uni-icon-waiting:before{content:"\EA09"}.uni-icon-waiting_circle:before{content:"\EA0A"}.uni-icon-circle:before{content:"\EA01"}.uni-icon-cancel:before{content:"\EA0D"}.uni-icon-download:before{content:"\EA02"}.uni-icon-search:before{content:"\EA0E"}.uni-icon-clear:before{content:"\EA0F"}.uni-icon-safe_success,.uni-icon-success,.uni-icon-success_circle,.uni-icon-success_no_circle{color:#007aff}.uni-icon-safe_warn{color:#ffbe00}.uni-icon-info{color:#10aeff}.uni-icon-info_circle{color:#007aff}.uni-icon-warn{color:#f76260}.uni-icon-waiting,.uni-icon-waiting_circle{color:#10aeff}.uni-icon-circle{color:#c9c9c9}.uni-icon-cancel{color:#f43530}.uni-icon-download{color:#007aff}.uni-icon-clear,.uni-icon-search{color:#b2b2b2}uni-image{width:320px;height:240px;display:inline-block;overflow:hidden;position:relative}uni-image[hidden]{display:none}uni-image>div,uni-image>img{width:100%;height:100%}uni-image>img{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;display:block;position:absolute;top:0;left:0;opacity:0}uni-image>.uni-image-will-change{will-change:transform}uni-input{display:block;font-size:16px;line-height:1.4em;height:1.4em;min-height:1.4em;overflow:hidden}uni-input[hidden]{display:none}.uni-input-form,.uni-input-input,.uni-input-placeholder,.uni-input-wrapper{outline:none;border:none;padding:0;margin:0;text-decoration:inherit}.uni-input-form,.uni-input-wrapper{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;width:100%;height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.uni-input-input,.uni-input-placeholder{width:100%}.uni-input-placeholder{position:absolute;top:auto!important;left:0;color:grey;overflow:hidden;text-overflow:clip;white-space:pre;word-break:keep-all;pointer-events:none;line-height:inherit}.uni-input-input{position:relative;display:block;height:100%;background:none;color:inherit;opacity:1;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit}.uni-input-input[type=search]::-webkit-search-cancel-button,.uni-input-input[type=search]::-webkit-search-decoration{display:none}.uni-input-input::-webkit-inner-spin-button,.uni-input-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.uni-input-input[type=number]{-moz-appearance:textfield}.uni-input-input:disabled{-webkit-text-fill-color:currentcolor}.uni-label-pointer{cursor:pointer}uni-movable-area{display:block;position:relative;width:10px;height:10px}uni-movable-area[hidden]{display:none}uni-movable-view{display:inline-block;width:10px;height:10px;top:0;left:0;position:absolute;cursor:grab}uni-movable-view[hidden]{display:none}uni-navigator{height:auto;width:auto;display:block;cursor:pointer}uni-navigator[hidden]{display:none}.navigator-hover{background-color:rgba(0,0,0,.1);opacity:.7}uni-picker-view-column{-webkit-flex:1;-webkit-box-flex:1;flex:1;position:relative;height:100%;overflow:hidden}uni-picker-view-column[hidden]{display:none}.uni-picker-view-group{height:100%;overflow:hidden}.uni-picker-view-mask{transform:translateZ(0);-webkit-transform:translateZ(0)}.uni-picker-view-indicator,.uni-picker-view-mask{position:absolute;left:0;width:100%;z-index:3;pointer-events:none}.uni-picker-view-mask{top:0;height:100%;margin:0 auto;background:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat}.uni-picker-view-indicator{height:34px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.uni-picker-view-content{position:absolute;top:0;left:0;width:100%;will-change:transform;padding:102px 0;cursor:pointer}.uni-picker-view-content>*{height:34px;overflow:hidden}.uni-picker-view-indicator:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.uni-picker-view-indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.uni-picker-view-indicator:after,.uni-picker-view-indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}uni-picker-view{display:block}uni-picker-view .uni-picker-view-wrapper{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;overflow:hidden;height:100%}uni-picker-view[hidden]{display:none}uni-progress{display:-webkit-flex;display:-webkit-box;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center}uni-progress[hidden]{display:none}.uni-progress-bar{-webkit-flex:1;-webkit-box-flex:1;flex:1}.uni-progress-inner-bar{width:0;height:100%}.uni-progress-info{margin-top:0;margin-bottom:0;min-width:2em;margin-left:15px;font-size:16px}uni-radio-group[hidden]{display:none}uni-radio{-webkit-tap-highlight-color:transparent;display:inline-block;cursor:pointer}uni-radio[hidden]{display:none}uni-radio[disabled]{cursor:not-allowed}uni-radio .uni-radio-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-radio .uni-radio-input{-webkit-appearance:none;appearance:none;margin-right:5px;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:50%;width:22px;height:22px;position:relative}uni-radio:not([disabled]) .uni-radio-input:hover{border-color:#007aff}uni-radio .uni-radio-input.uni-radio-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";color:#fff;font-size:18px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-radio .uni-radio-input.uni-radio-input-disabled{background-color:#e1e1e1;border-color:#d1d1d1}uni-radio .uni-radio-input.uni-radio-input-disabled:before{color:#adadad}uni-radio-group{display:block}@-webkit-keyframes once-show{0%{top:0}}@keyframes once-show{0%{top:0}}uni-resize-sensor,uni-resize-sensor>div{position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden}uni-resize-sensor{display:block;z-index:-1;visibility:hidden;-webkit-animation:once-show 1ms;animation:once-show 1ms}uni-resize-sensor>div>div{position:absolute;left:0;top:0}uni-resize-sensor>div:first-child>div{width:100000px;height:100000px}uni-resize-sensor>div:last-child>div{width:200%;height:200%}uni-scroll-view{display:block;width:100%}uni-scroll-view[hidden]{display:none}.uni-scroll-view{position:relative;-webkit-overflow-scrolling:touch;max-height:inherit}.uni-scroll-view,.uni-scroll-view-content{width:100%;height:100%}.uni-scroll-view-refresher{position:relative;overflow:hidden}.uni-scroll-view-refresh{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row}.uni-scroll-view-refresh,.uni-scroll-view-refresh-inner{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.uni-scroll-view-refresh-inner{line-height:0;width:40px;height:40px;border-radius:50%;background-color:#fff;box-shadow:0 1px 6px rgba(0,0,0,.117647),0 1px 4px rgba(0,0,0,.117647)}.uni-scroll-view-refresh__spinner{-webkit-transform-origin:center center;transform-origin:center center;-webkit-animation:uni-scroll-view-refresh-rotate 2s linear infinite;animation:uni-scroll-view-refresh-rotate 2s linear infinite}.uni-scroll-view-refresh__spinner>circle{stroke:currentColor;stroke-linecap:round;-webkit-animation:uni-scroll-view-refresh-dash 2s linear infinite;animation:uni-scroll-view-refresh-dash 2s linear infinite}@-webkit-keyframes uni-scroll-view-refresh-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes uni-scroll-view-refresh-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes uni-scroll-view-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes uni-scroll-view-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}uni-slider{margin:10px 18px;padding:0;display:block}uni-slider[hidden]{display:none}uni-slider .uni-slider-wrapper{display:-webkit-flex;display:-webkit-box;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;min-height:16px}uni-slider .uni-slider-tap-area{-webkit-flex:1;-webkit-box-flex:1;flex:1;padding:8px 0}uni-slider .uni-slider-handle-wrapper{position:relative;height:2px;border-radius:5px;background-color:#e9e9e9;cursor:pointer;-webkit-tap-highlight-color:transparent}uni-slider .uni-slider-handle-wrapper,uni-slider .uni-slider-track{-webkit-transition:background-color .3s ease;transition:background-color .3s ease}uni-slider .uni-slider-track{height:100%;border-radius:6px;background-color:#007aff}uni-slider .uni-slider-handle,uni-slider .uni-slider-thumb{position:absolute;left:50%;top:50%;cursor:pointer;border-radius:50%;-webkit-transition:border-color .3s ease;transition:border-color .3s ease}uni-slider .uni-slider-handle{width:28px;height:28px;margin-top:-14px;margin-left:-14px;background-color:rgba(0,0,0,0);z-index:3;cursor:grab}uni-slider .uni-slider-thumb{z-index:2;box-shadow:0 0 4px rgba(0,0,0,.2)}uni-slider .uni-slider-step{position:absolute;width:100%;height:2px;background:rgba(0,0,0,0);z-index:1}uni-slider .uni-slider-value{width:3ch;color:#888;font-size:14px;margin-left:1em}uni-slider .uni-slider-disabled .uni-slider-track{background-color:#ccc}uni-slider .uni-slider-disabled .uni-slider-thumb{background-color:#fff;border-color:#ccc}uni-swiper-item{display:block;overflow:hidden;will-change:transform;position:absolute;width:100%;height:100%;cursor:grab}uni-swiper-item[hidden]{display:none}uni-swiper{display:block;height:150px}uni-swiper[hidden]{display:none}uni-swiper .uni-swiper-wrapper{overflow:hidden;position:relative;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0)}uni-swiper .uni-swiper-slides{position:absolute;left:0;top:0;right:0;bottom:0}uni-swiper .uni-swiper-slide-frame{position:absolute;left:0;top:0;width:100%;height:100%;will-change:transform}uni-swiper .uni-swiper-dots{position:absolute;font-size:0}uni-swiper .uni-swiper-dots-horizontal{left:50%;bottom:10px;text-align:center;white-space:nowrap;-webkit-transform:translate(-50%);transform:translate(-50%)}uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot{margin-right:8px}uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot:last-child{margin-right:0}uni-swiper .uni-swiper-dots-vertical{right:10px;top:50%;text-align:right;-webkit-transform:translateY(-50%);transform:translateY(-50%)}uni-swiper .uni-swiper-dots-vertical .uni-swiper-dot{display:block;margin-bottom:9px}uni-swiper .uni-swiper-dots-vertical .uni-swiper-dot:last-child{margin-bottom:0}uni-swiper .uni-swiper-dot{display:inline-block;width:8px;height:8px;cursor:pointer;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-timing-function:ease;transition-timing-function:ease;background:rgba(0,0,0,.3);border-radius:50%}uni-swiper .uni-swiper-dot-active{background-color:#000}uni-switch{-webkit-tap-highlight-color:transparent;display:inline-block;cursor:pointer}uni-switch[hidden]{display:none}uni-switch[disabled]{cursor:not-allowed}uni-switch .uni-switch-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-switch .uni-switch-input{-webkit-appearance:none;appearance:none;position:relative;width:52px;height:32px;margin-right:5px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background-color:#dfdfdf;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}uni-switch[disabled] .uni-switch-input{opacity:.7}uni-switch .uni-switch-input:before{width:50px;background-color:#fdfdfd}uni-switch .uni-switch-input:after,uni-switch .uni-switch-input:before{content:" ";position:absolute;top:0;left:0;height:30px;border-radius:15px;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}uni-switch .uni-switch-input:after{width:30px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}uni-switch .uni-switch-input.uni-switch-input-checked{border-color:#007aff;background-color:#007aff}uni-switch .uni-switch-input.uni-switch-input-checked:before{-webkit-transform:scale(0);transform:scale(0)}uni-switch .uni-switch-input.uni-switch-input-checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}uni-switch .uni-checkbox-input{margin-right:5px;-webkit-appearance:none;appearance:none;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:22px;height:22px;position:relative;color:#007aff}uni-switch:not([disabled]) .uni-checkbox-input:hover{border-color:#007aff}uni-switch .uni-checkbox-input.uni-checkbox-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";color:inherit;font-size:22px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-switch .uni-checkbox-input.uni-checkbox-input-disabled{background-color:#e1e1e1}uni-switch .uni-checkbox-input.uni-checkbox-input-disabled:before{color:#adadad}uni-text[selectable]{cursor:auto;user-select:text;-webkit-user-select:text}uni-textarea{width:300px;height:150px;display:block;position:relative;font-size:16px;line-height:normal;white-space:pre-wrap;word-break:break-all}uni-textarea[hidden]{display:none}.uni-textarea-compute,.uni-textarea-line,.uni-textarea-placeholder,.uni-textarea-textarea,.uni-textarea-wrapper{outline:none;border:none;padding:0;margin:0;text-decoration:inherit}.uni-textarea-wrapper{display:block;position:relative;width:100%;height:100%;min-height:inherit}.uni-textarea-compute,.uni-textarea-line,.uni-textarea-placeholder,.uni-textarea-textarea{position:absolute;width:100%;height:100%;left:0;top:0;white-space:inherit;word-break:inherit}.uni-textarea-placeholder{color:grey;overflow:hidden}.uni-textarea-compute,.uni-textarea-line{visibility:hidden;height:auto}.uni-textarea-line{width:1em}.uni-textarea-textarea{resize:none;background:none;color:inherit;opacity:1;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit}.uni-textarea-textarea-fix-margin{width:auto;right:0;margin:0 -3px}.uni-textarea-textarea:disabled{-webkit-text-fill-color:currentcolor}uni-view{display:block}uni-view[hidden]{display:none}uni-ad{display:block;overflow:hidden}uni-ad[hidden]{display:none}uni-cover-image{display:block;line-height:1.2;overflow:hidden;pointer-events:auto}uni-cover-image,uni-cover-image img{height:100%;width:100%}uni-cover-image[hidden]{display:none}uni-cover-image .uni-cover-image{width:100%;height:100%;text-overflow:inherit;overflow:inherit;white-space:nowrap;-webkit-align-items:inherit;-webkit-box-align:inherit;align-items:inherit;-webkit-justify-content:inherit;-webkit-box-pack:inherit;justify-content:inherit;-webkit-flex-direction:inherit;-webkit-box-orient:inherit;-webkit-box-direction:inherit;flex-direction:inherit;font-size:0;display:inherit}uni-cover-view{display:block;line-height:1.2;overflow:hidden;white-space:nowrap;pointer-events:auto}uni-cover-view[hidden]{display:none}uni-cover-view .uni-cover-view{width:100%;height:100%;text-overflow:inherit;overflow:hidden;white-space:inherit;-webkit-align-items:inherit;-webkit-box-align:inherit;align-items:inherit;-webkit-justify-content:inherit;-webkit-box-pack:inherit;justify-content:inherit;-webkit-flex-direction:inherit;-webkit-box-orient:inherit;-webkit-box-direction:inherit;flex-direction:inherit;-webkit-flex-wrap:inherit;flex-wrap:inherit;display:inherit;overflow:inherit}uni-map{position:relative;width:300px;height:150px;display:block}uni-map[hidden]{display:none}uni-picker{position:relative;display:block;cursor:pointer}uni-picker[hidden]{display:none}uni-picker[disabled]{cursor:not-allowed}.uni-picker-container{display:none;position:fixed;left:0;right:0;top:0;bottom:0;box-sizing:border-box;z-index:999;font-size:16px}.uni-picker-container .uni-picker-custom *{box-sizing:border-box}.uni-picker-container .uni-picker-custom{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:999;width:100%;background-color:#efeff4;visibility:hidden;-webkit-transition:visibility .3s,-webkit-transform .3s;transition:visibility .3s,-webkit-transform .3s;transition:transform .3s,visibility .3s;transition:transform .3s,visibility .3s,-webkit-transform .3s}.uni-picker-container .uni-picker-custom.uni-picker-toggle{visibility:visible;-webkit-transform:translate(0);transform:translate(0)}.uni-picker-container .uni-picker-content{position:relative;display:block;width:100%;height:238px;background-color:#fff}.uni-picker-container .uni-picker-item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;cursor:pointer}.uni-picker-container .uni-picker-header{display:block;position:relative;text-align:center;width:100%;height:45px;background-color:#fff}.uni-picker-container .uni-picker-header:after{content:"";position:absolute;left:0;bottom:0;right:0;height:1px;clear:both;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.uni-picker-container .uni-picker-action{display:block;max-width:50%;top:0;height:100%;box-sizing:border-box;padding:0 14px;font-size:17px;line-height:45px;overflow:hidden;cursor:pointer}.uni-picker-container .uni-picker-action.uni-picker-action-cancel{float:left;color:#888}.uni-picker-container .uni-picker-action.uni-picker-action-confirm{float:right;color:#007aff}.uni-picker-container .uni-picker-select{display:none}.uni-picker-system{position:absolute;display:none;display:block;top:0;left:0;width:100%;height:100%;overflow:hidden}.uni-picker-system>input{position:absolute;border:none;height:100%;opacity:0;cursor:pointer}.uni-picker-system>input.firefox{top:0;left:0;width:100%}.uni-picker-system>input.chrome{top:0;left:0;width:2em;font-size:32px;height:32px}@media screen and (min-width:500px) and (min-height:500px){.uni-mask.uni-picker-mask{background:none}.uni-picker-container .uni-picker-custom{width:300px;left:50%;right:auto;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;border-radius:5px;-webkit-transition:opacity .3s,visibility .3s;transition:opacity .3s,visibility .3s;box-shadow:0 0 20px 5px rgba(0,0,0,.3)}.uni-picker-container .uni-picker-header{border-radius:5px 5px 0 0}.uni-picker-container .uni-picker-content{-webkit-transform:translate(0);transform:translate(0);overflow:hidden;border-radius:0 0 5px 5px}.uni-picker-container .uni-picker-custom.uni-picker-toggle{opacity:1;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uni-selector-select .uni-picker-content,.uni-selector-select .uni-picker-header{display:none}.uni-selector-select .uni-picker-select{display:block;max-height:300px;overflow:auto;background-color:#fff;border-radius:5px;padding:6px 0}.uni-selector-select .uni-picker-item{padding:0 10px;color:#555}.uni-selector-select .uni-picker-item:hover{background-color:#f6f6f6}.uni-selector-select .uni-picker-item.selected{color:#007aff}}uni-video{width:300px;height:225px;display:inline-block;line-height:0;overflow:hidden;position:relative}uni-video[hidden]{display:none}.uni-video-container{width:100%;height:100%;background-color:#000;display:inline-block;position:absolute;top:0;left:0;overflow:hidden;object-position:inherit}.uni-video-container.uni-video-type-fullscreen{position:fixed;z-index:999}.uni-video-video{width:100%;height:100%;object-position:inherit}.uni-video-cover{bottom:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;background-color:rgba(1,1,1,.5);z-index:1}.uni-video-cover,.uni-video-slots{position:absolute;top:0;left:0;width:100%}.uni-video-slots{height:100%;overflow:hidden;pointer-events:none}.uni-video-cover-play-button{width:40px;height:40px;background-size:50%;background-repeat:no-repeat;background-position:50% 50%;cursor:pointer}.uni-video-cover-duration{color:#fff;font-size:16px;line-height:1;margin-top:10px}.uni-video-bar{height:44px;background-color:rgba(0,0,0,.5);overflow:hidden;position:absolute;bottom:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:0 10px;z-index:0;-webkit-transform:translateZ(0);transform:translateZ(0)}.uni-video-bar.uni-video-bar-full{left:0}.uni-video-controls{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;margin:0 8.5px}.uni-video-control-button{width:13px;height:15px;padding:14.5px 12.5px 14.5px 12.5px;margin-left:-8.5px;box-sizing:content-box;cursor:pointer}.uni-video-control-button:after{content:"";display:block;width:100%;height:100%;background-size:100%;background-position:50% 50%;background-repeat:no-repeat}.uni-video-control-button.uni-video-control-button-play:after,.uni-video-cover-play-button{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAeCAYAAAAy2w7YAAAAAXNSR0IArs4c6QAAAWhJREFUSA1j+P///0cgBoHjQGzCQCsAtgJB/AMy5wCxGNXtQ9iBwvoA5BUCMQvVLEQxHpNzDSjkRhXLMM3GKrIeKKpEkYVYjcUu+AMo3ALE3GRZiN1MvKKPgbIRJFuG10j8koeA0gZEW4jfLIKyf4EqpgOxMEELCRpFnIJ3QGU5QMyM00LizCFa1SWgSkeslhFtBGkKVwGVy6FYSJp+klR/A6quB2JOkIWMIK0oNlOf8xBoZDE9LAI7nYn6HsBq4l96WHQEaLUpAyiOaASeAM2NgvuPBpaACt82IEYtfKls0UagecpwXyAzqGTRdaA57sjmYrAptAjUsCkGYlYMg9EFyLQI1IiZB8Ti6Obh5JNh0QmgHlOcBuKSIMGi50C18UDMiMssvOJEWPQLqKYbiHnxGkRIkoBF24DyaoTMIEoeh0W3geI+RBlArCI0iz4D+RVAzEasfqLVAQ19AcSg5LoYiKWI1kiiQgCMBLnEEcfDSgAAAABJRU5ErkJggg==")}.uni-video-control-button.uni-video-control-button-pause:after{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAAAXNSR0IArs4c6QAAAFlJREFUSA3tksEKACAIQ7X//5zq98wOgQayum8QaGweHhMzG/6OujzKAymn+0LMqivu1XznWmX8/echTIyMyAgTwA72iIwwAexgj8gIE8CO3aMRbDPMaEy5BRGaKcZv8YxRAAAAAElFTkSuQmCC")}.uni-video-current-time,.uni-video-duration{height:14.5px;line-height:14.5px;margin-top:15px;margin-bottom:14.5px;font-size:12px;color:#cbcbcb}.uni-video-progress-container{-webkit-box-flex:2;-webkit-flex-grow:2;flex-grow:2;position:relative}.uni-video-progress{height:2px;margin:21px 12px;background-color:hsla(0,0%,100%,.4);position:relative;cursor:pointer}.uni-video-progress-buffered{position:absolute;left:0;top:0;width:0;height:100%;-webkit-transition:width .1s;transition:width .1s;background-color:hsla(0,0%,100%,.8)}.uni-video-ball{width:16px;height:16px;padding:14px;position:absolute;top:-21px;box-sizing:content-box;left:0;margin-left:-22px}.uni-video-inner{width:100%;height:100%;background-color:#fff;border-radius:50%}.uni-video-danmu-button{white-space:nowrap;line-height:1;padding:2px 10px;border:1px solid #fff;border-radius:5px;font-size:13px;color:#fff;margin:0 8.5px;cursor:pointer}.uni-video-danmu-button.uni-video-danmu-button-active{border-color:#48c23d;color:#48c23d}.uni-video-fullscreen{width:17px;height:17px;padding:8.5px;box-sizing:content-box;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAAXNSR0IArs4c6QAAAQRJREFUWAnt1d0NwiAQB/CmS7hHX5zFxLF0Ah2hE/lg7BT4PyMJUj6Oyt299BIioZT7ARYG59wLpTXmoXOMGO/QecxtwyWW4o42AupGALkFdX1MkHxE3Q7jIbQPqNthQogpJoZkMLRlsn/gFMQEk4OoY0oQVUwNoobhQFQwgMxUKFkt0C8+Zy61d8SeR5iHWCLOwF/MCb8Tp//ex3QFsE1HlCfKFUX2OijNFMnPKD7k76YcBoL402Zh8B77+MjlXrVvwfglXA32b0MrRgxCE2nBiEJaMOIQLkYFwsGoQWoYVUgJow4pYD4Weq4ayBqfwDYQmnUK0301kITujuawu65/l2B5A4z3Qe+Ut7EBAAAAAElFTkSuQmCC");background-size:50%;background-position:50% 50%;background-repeat:no-repeat;cursor:pointer}.uni-video-fullscreen.uni-video-type-fullscreen{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAABBElEQVRYhcXWwQ3CMAwF0O+qOzAKQzAAl0pMxQQwQhmGKwcERxbgc4lEVdHUbm3zJR8qJemTo6YByS3JO8kjyQbGkHQpkOz4zcmK8YQ0BWDCkOxL+UDKombMYKwfZAkmDGLFhEIsmHCIFpMC0WDSIHOYVEgNkw6pYPIhE5j/QCoYF0g7eEkPYGej+cX82x/l6aIAIOb9CcrajrjFE/IAQGP1IgIRcYVsVs32+vx+nC9nWq6dAZDhOaPHBEDGh54O4w0pa9oxEZBFmCjIBGb6Qh4JMWGiIWpMBkSFyYLMYjIhNUw7N9GQi2aQiLxJHspjV+rl1hFrRp25uV2MRGQRBsAewPUD/HhJVOOuCzwAAAAASUVORK5CYII=")}.uni-video-danmu{position:absolute;top:0;left:0;bottom:0;width:100%;margin-top:14px;margin-bottom:44px;font-size:14px;line-height:14px;overflow:visible}.uni-video-danmu-item{line-height:1;position:absolute;color:#fff;white-space:nowrap;left:100%;-webkit-transform:translatex(0);transform:translatex(0);-webkit-transition-property:left,-webkit-transform;transition-property:left,-webkit-transform;transition-property:left,transform;transition-property:left,transform,-webkit-transform;-webkit-transition-duration:3s;transition-duration:3s;-webkit-transition-timing-function:linear;transition-timing-function:linear}.uni-video-toast{pointer-events:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:5px;background-color:hsla(0,0%,100%,.8);color:#000;display:none}.uni-video-toast.uni-video-toast-volume{width:100px;height:100px;display:block}.uni-video-toast-volume .uni-video-toast-title{width:100%;font-size:12px;line-height:16px;text-align:center;margin-top:10px;display:block}.uni-video-toast-volume .uni-video-toast-icon{fill:#000;width:50%;height:50%;margin-left:25%;display:block}.uni-video-toast-volume .uni-video-toast-value{width:80px;height:5px;margin-top:5px;margin-left:10px}.uni-video-toast-volume .uni-video-toast-value>.uni-video-toast-value-content{overflow:hidden}.uni-video-toast-volume-grids{width:80px;height:5px}.uni-video-toast-volume-grids-item{float:left;width:7.1px;height:5px;background-color:#000}.uni-video-toast-volume-grids-item:not(:first-child){margin-left:1px}.uni-video-toast.uni-video-toast-progress{display:block;background-color:rgba(0,0,0,.8);color:#fff;font-size:14px;line-height:18px;padding:6px}uni-web-view{position:absolute;left:0;right:0;top:0;bottom:0}body::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}