正在显示
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> |
components/u-parse/components/wxParseImg.vue
0 → 100644
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> |
components/u-parse/libs/html2json.js
0 → 100644
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; |
components/u-parse/libs/htmlparser.js
0 → 100644
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; |
components/u-parse/libs/wxDiscode.js
0 → 100644
1 | +// HTML 支持的数学符号 | ||
2 | +function strNumDiscode(str) { | ||
3 | + str = str.replace(/∀/g, '∀'); | ||
4 | + str = str.replace(/∂/g, '∂'); | ||
5 | + str = str.replace(/∃/g, '∃'); | ||
6 | + str = str.replace(/∅/g, '∅'); | ||
7 | + str = str.replace(/∇/g, '∇'); | ||
8 | + str = str.replace(/∈/g, '∈'); | ||
9 | + str = str.replace(/∉/g, '∉'); | ||
10 | + str = str.replace(/∋/g, '∋'); | ||
11 | + str = str.replace(/∏/g, '∏'); | ||
12 | + str = str.replace(/∑/g, '∑'); | ||
13 | + str = str.replace(/−/g, '−'); | ||
14 | + str = str.replace(/∗/g, '∗'); | ||
15 | + str = str.replace(/√/g, '√'); | ||
16 | + str = str.replace(/∝/g, '∝'); | ||
17 | + str = str.replace(/∞/g, '∞'); | ||
18 | + str = str.replace(/∠/g, '∠'); | ||
19 | + str = str.replace(/∧/g, '∧'); | ||
20 | + str = str.replace(/∨/g, '∨'); | ||
21 | + str = str.replace(/∩/g, '∩'); | ||
22 | + str = str.replace(/∪/g, '∪'); | ||
23 | + str = str.replace(/∫/g, '∫'); | ||
24 | + str = str.replace(/∴/g, '∴'); | ||
25 | + str = str.replace(/∼/g, '∼'); | ||
26 | + str = str.replace(/≅/g, '≅'); | ||
27 | + str = str.replace(/≈/g, '≈'); | ||
28 | + str = str.replace(/≠/g, '≠'); | ||
29 | + str = str.replace(/≤/g, '≤'); | ||
30 | + str = str.replace(/≥/g, '≥'); | ||
31 | + str = str.replace(/⊂/g, '⊂'); | ||
32 | + str = str.replace(/⊃/g, '⊃'); | ||
33 | + str = str.replace(/⊄/g, '⊄'); | ||
34 | + str = str.replace(/⊆/g, '⊆'); | ||
35 | + str = str.replace(/⊇/g, '⊇'); | ||
36 | + str = str.replace(/⊕/g, '⊕'); | ||
37 | + str = str.replace(/⊗/g, '⊗'); | ||
38 | + str = str.replace(/⊥/g, '⊥'); | ||
39 | + str = str.replace(/⋅/g, '⋅'); | ||
40 | + return str; | ||
41 | +} | ||
42 | + | ||
43 | +// HTML 支持的希腊字母 | ||
44 | +function strGreeceDiscode(str) { | ||
45 | + str = str.replace(/Α/g, 'Α'); | ||
46 | + str = str.replace(/Β/g, 'Β'); | ||
47 | + str = str.replace(/Γ/g, 'Γ'); | ||
48 | + str = str.replace(/Δ/g, 'Δ'); | ||
49 | + str = str.replace(/Ε/g, 'Ε'); | ||
50 | + str = str.replace(/Ζ/g, 'Ζ'); | ||
51 | + str = str.replace(/Η/g, 'Η'); | ||
52 | + str = str.replace(/Θ/g, 'Θ'); | ||
53 | + str = str.replace(/Ι/g, 'Ι'); | ||
54 | + str = str.replace(/Κ/g, 'Κ'); | ||
55 | + str = str.replace(/Λ/g, 'Λ'); | ||
56 | + str = str.replace(/Μ/g, 'Μ'); | ||
57 | + str = str.replace(/Ν/g, 'Ν'); | ||
58 | + str = str.replace(/Ξ/g, 'Ν'); | ||
59 | + str = str.replace(/Ο/g, 'Ο'); | ||
60 | + str = str.replace(/Π/g, 'Π'); | ||
61 | + str = str.replace(/Ρ/g, 'Ρ'); | ||
62 | + str = str.replace(/Σ/g, 'Σ'); | ||
63 | + str = str.replace(/Τ/g, 'Τ'); | ||
64 | + str = str.replace(/Υ/g, 'Υ'); | ||
65 | + str = str.replace(/Φ/g, 'Φ'); | ||
66 | + str = str.replace(/Χ/g, 'Χ'); | ||
67 | + str = str.replace(/Ψ/g, 'Ψ'); | ||
68 | + str = str.replace(/Ω/g, 'Ω'); | ||
69 | + | ||
70 | + str = str.replace(/α/g, 'α'); | ||
71 | + str = str.replace(/β/g, 'β'); | ||
72 | + str = str.replace(/γ/g, 'γ'); | ||
73 | + str = str.replace(/δ/g, 'δ'); | ||
74 | + str = str.replace(/ε/g, 'ε'); | ||
75 | + str = str.replace(/ζ/g, 'ζ'); | ||
76 | + str = str.replace(/η/g, 'η'); | ||
77 | + str = str.replace(/θ/g, 'θ'); | ||
78 | + str = str.replace(/ι/g, 'ι'); | ||
79 | + str = str.replace(/κ/g, 'κ'); | ||
80 | + str = str.replace(/λ/g, 'λ'); | ||
81 | + str = str.replace(/μ/g, 'μ'); | ||
82 | + str = str.replace(/ν/g, 'ν'); | ||
83 | + str = str.replace(/ξ/g, 'ξ'); | ||
84 | + str = str.replace(/ο/g, 'ο'); | ||
85 | + str = str.replace(/π/g, 'π'); | ||
86 | + str = str.replace(/ρ/g, 'ρ'); | ||
87 | + str = str.replace(/ς/g, 'ς'); | ||
88 | + str = str.replace(/σ/g, 'σ'); | ||
89 | + str = str.replace(/τ/g, 'τ'); | ||
90 | + str = str.replace(/υ/g, 'υ'); | ||
91 | + str = str.replace(/φ/g, 'φ'); | ||
92 | + str = str.replace(/χ/g, 'χ'); | ||
93 | + str = str.replace(/ψ/g, 'ψ'); | ||
94 | + str = str.replace(/ω/g, 'ω'); | ||
95 | + str = str.replace(/ϑ/g, 'ϑ'); | ||
96 | + str = str.replace(/ϒ/g, 'ϒ'); | ||
97 | + str = str.replace(/ϖ/g, 'ϖ'); | ||
98 | + str = str.replace(/·/g, '·'); | ||
99 | + return str; | ||
100 | +} | ||
101 | + | ||
102 | +function strcharacterDiscode(str) { | ||
103 | + // 加入常用解析 | ||
104 | + str = str.replace(/ /g, ' '); | ||
105 | + str = str.replace(/ /g, ' '); | ||
106 | + str = str.replace(/ /g, ' '); | ||
107 | + str = str.replace(/"/g, "'"); | ||
108 | + str = str.replace(/&/g, '&'); | ||
109 | + str = str.replace(/</g, '<'); | ||
110 | + str = str.replace(/>/g, '>'); | ||
111 | + str = str.replace(/•/g, '•'); | ||
112 | + | ||
113 | + return str; | ||
114 | +} | ||
115 | + | ||
116 | +// HTML 支持的其他实体 | ||
117 | +function strOtherDiscode(str) { | ||
118 | + str = str.replace(/Œ/g, 'Œ'); | ||
119 | + str = str.replace(/œ/g, 'œ'); | ||
120 | + str = str.replace(/Š/g, 'Š'); | ||
121 | + str = str.replace(/š/g, 'š'); | ||
122 | + str = str.replace(/Ÿ/g, 'Ÿ'); | ||
123 | + str = str.replace(/ƒ/g, 'ƒ'); | ||
124 | + str = str.replace(/ˆ/g, 'ˆ'); | ||
125 | + str = str.replace(/˜/g, '˜'); | ||
126 | + str = str.replace(/ /g, ''); | ||
127 | + str = str.replace(/ /g, ''); | ||
128 | + str = str.replace(/ /g, ''); | ||
129 | + str = str.replace(/‌/g, ''); | ||
130 | + str = str.replace(/‍/g, ''); | ||
131 | + str = str.replace(/‎/g, ''); | ||
132 | + str = str.replace(/‏/g, ''); | ||
133 | + str = str.replace(/–/g, '–'); | ||
134 | + str = str.replace(/—/g, '—'); | ||
135 | + str = str.replace(/‘/g, '‘'); | ||
136 | + str = str.replace(/’/g, '’'); | ||
137 | + str = str.replace(/‚/g, '‚'); | ||
138 | + str = str.replace(/“/g, '“'); | ||
139 | + str = str.replace(/”/g, '”'); | ||
140 | + str = str.replace(/„/g, '„'); | ||
141 | + str = str.replace(/†/g, '†'); | ||
142 | + str = str.replace(/‡/g, '‡'); | ||
143 | + str = str.replace(/•/g, '•'); | ||
144 | + str = str.replace(/…/g, '…'); | ||
145 | + str = str.replace(/‰/g, '‰'); | ||
146 | + str = str.replace(/′/g, '′'); | ||
147 | + str = str.replace(/″/g, '″'); | ||
148 | + str = str.replace(/‹/g, '‹'); | ||
149 | + str = str.replace(/›/g, '›'); | ||
150 | + str = str.replace(/‾/g, '‾'); | ||
151 | + str = str.replace(/€/g, '€'); | ||
152 | + str = str.replace(/™/g, '™'); | ||
153 | + | ||
154 | + str = str.replace(/←/g, '←'); | ||
155 | + str = str.replace(/↑/g, '↑'); | ||
156 | + str = str.replace(/→/g, '→'); | ||
157 | + str = str.replace(/↓/g, '↓'); | ||
158 | + str = str.replace(/↔/g, '↔'); | ||
159 | + str = str.replace(/↵/g, '↵'); | ||
160 | + str = str.replace(/⌈/g, '⌈'); | ||
161 | + str = str.replace(/⌉/g, '⌉'); | ||
162 | + | ||
163 | + str = str.replace(/⌊/g, '⌊'); | ||
164 | + str = str.replace(/⌋/g, '⌋'); | ||
165 | + str = str.replace(/◊/g, '◊'); | ||
166 | + str = str.replace(/♠/g, '♠'); | ||
167 | + str = str.replace(/♣/g, '♣'); | ||
168 | + str = str.replace(/♥/g, '♥'); | ||
169 | + | ||
170 | + str = str.replace(/♦/g, '♦'); | ||
171 | + str = str.replace(/'/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 | +}; |
components/u-parse/readme.md
0 → 100644
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 | +``` |
components/u-parse/u-parse.css
0 → 100644
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 | +} |
components/u-parse/u-parse.vue
0 → 100644
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> |
@@ -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; |
pages/index/grant.vue
0 → 100644
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> |
static/5.jpg
0 → 100644
750.0 KB
static/6.jpg
0 → 100644
45.6 KB
@@ -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,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzJAKEx+AAABfAAAAFZjbWFw65cFHQAAAhwAAAJQZ2x5ZvCRR/EAAASUAAAKtGhlYWQLKIN9AAAA4AAAADZoaGVhCCwD+gAAALwAAAAkaG10eEJo//8AAAHUAAAASGxvY2EYqhW6AAAEbAAAACZtYXhwASEAVQAAARgAAAAgbmFtZeNcHtgAAA9IAAAB5nBvc3T6bLhLAAARMAAAAOYAAQAAA+gAAABaA+j/////A+kAAQAAAAAAAAAAAAAAAAAAABIAAQAAAAEAACkCj3dfDzz1AAsD6AAAAADUER9XAAAAANQRH1f//wAAA+kD6gAAAAgAAgAAAAAAAAABAAAAEgBJAAUAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQOwAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6gHqEQPoAAAAWgPqAAAAAAABAAAAAAAAAAAAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+j//wPoAAAD6AAAAAAABQAAAAMAAAAsAAAABAAAAXQAAQAAAAAAbgADAAEAAAAsAAMACgAAAXQABABCAAAABAAEAAEAAOoR//8AAOoB//8AAAABAAQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAANwAAAAAAAAAEQAA6gEAAOoBAAAAAQAA6gIAAOoCAAAAAgAA6gMAAOoDAAAAAwAA6gQAAOoEAAAABAAA6gUAAOoFAAAABQAA6gYAAOoGAAAABgAA6gcAAOoHAAAABwAA6ggAAOoIAAAACAAA6gkAAOoJAAAACQAA6goAAOoKAAAACgAA6gsAAOoLAAAACwAA6gwAAOoMAAAADAAA6g0AAOoNAAAADQAA6g4AAOoOAAAADgAA6g8AAOoPAAAADwAA6hAAAOoQAAAAEAAA6hEAAOoRAAAAEQAAAAAARgCMANIBJgF4AcQCMgJgAqgC/ANIA6YD/gROBKAE9AVaAAAAAgAAAAADrwOtABQAKQAAASIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAfV4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NlteA608O2Rn8GdjOzw8O2Nn8GdkOzz8rzc1W17bXlw1Nzc1XF7bXls1NwAAAAACAAAAAAOzA7MAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTBwYiLwEmNjsBETQ2OwEyFhURMzIWAe52Z2Q7PT07ZGd2fGpmOz4+O2ZpIXYOKA52Dg0XXQsHJgcLXRcNA7M+O2ZqfHZnZDs9PTtkZ3Z9aWY7Pv3wmhISmhIaARcICwsI/ukaAAMAAAAAA+UD5QAXACMALAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAxQrASI1AzQ7ATIHJyImNDYyFhQGAe6Ecm9BRERBb3KEiXZxQkREQnF1aQIxAwgCQgMBIxIZGSQZGQPkREJxdomEcm9BRERBb3KEinVxQkT9HQICAWICAjEZIxkZIxkAAAAAAwAAAAADsQPkABsAKgAzAAABBgcGBwYHBjcRFBcWFxYXNjc2NzY1ESQXJicmBzMyFhUDFAYrASInAzQ2EyImNDYyFhQGAfVBQTg7LDt/IEc+bF5sbF1tPUj+2KhQQVVvNAQGDAMCJgUBCwYeDxYWHhUVA+QPEg4SDhIpCv6tj3VkST4dHT5JZHWPAVNeNRkSGPwGBP7GAgMFAToEBv5AFR8VFR8VAAAAAgAAAAADsQPkABkALgAAAQYHBgc2BREUFxYXFhc2NzY3NjURJBcmJyYTAQYvASY/ATYyHwEWNjclNjIfARYB9VVVQk+v/tFHPmxebGxdbT1I/tGvT0JVo/7VBASKAwMSAQUBcQEFAgESAgUBEQQD4xMYEhk3YP6sjnVlSD8cHD9IZXWOAVRgNxkSGP62/tkDA48EBBkCAVYCAQHlAQIQBAAAAAACAAAAAAPkA+QAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTAQYiLwEmPwE2Mh8BFjI3ATYyHwEWAe6Ecm9BQ0NCbnODiXVxQkREQnF1kf6gAQUBowMDFgEFAYUCBQEBQwIFARUEA+NEQnF1iYNzbkJDQ0FvcoSJdXFCRP6j/qUBAagEBR4CAWYBAQENAgIVBAAAAAQAAAAAA68DrQAUACkAPwBDAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYDIicmJyY0NzY3NjIXFhcWFAcGBwYTBQ4BLwEmBg8BBhYfARYyNwE+ASYiFzAfAQH1eGdkOzw8O2Rn8GZkOzw8O2RmeG5eWzY3NzZbXtteWzY3NzZbXmn+9gYSBmAGDwUDBQEGfQUQBgElBQELEBUBAQOtPDtkZ/BnYzs8PDtjZ/BnZDs8/K83NVte215cNTc3NVxe215bNTcCJt0FAQVJBQIGBAcRBoAGBQEhBQ8LBAEBAAABAAAAAAO7AzoAFwAAEy4BPwE+AR8BFjY3ATYWFycWFAcBBiInPQoGBwUHGgzLDCELAh0LHwsNCgr9uQoeCgGzCyEOCw0HCZMJAQoBvgkCCg0LHQv9sQsKAAAAAAIAAAAAA+UD5gAXACwAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMHBi8BJicmNRM0NjsBMhYVExceAQHvhHJvQUNDQm5zg4l1cUJEREJxdVcQAwT6AwIEEAMCKwIDDsUCAQPlREJxdYmDc25CQ0NBb3KEiXVxQkT9VhwEAncCAgMGAXoCAwMC/q2FAgQAAAQAAAAAA68DrQADABgALQAzAAABMB8BAyIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAyMVMzUjAuUBAfJ4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NltemyT92QKDAQEBLDw7ZGfwZ2M7PDw7Y2fwZ2Q7PPyvNzVbXtteXDU3NzVcXtteWzU3AjH9JAAAAAMAAAAAA+QD5AAXACcAMAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAzMyFhUDFAYrASImNQM0NhMiJjQ2MhYUBgHuhHJvQUNDQm5zg4l1cUJEREJxdZ42BAYMAwInAwMMBh8PFhYeFhYD40RCcXWJg3NuQkNDQW9yhIl1cUJE/vYGBf7AAgMDAgFABQb+NhYfFhYfFgAABAAAAAADwAPAAAgAEgAoAD0AAAEyNjQmIgYUFhcjFTMRIxUzNSMDIgcGBwYVFBYXFjMyNzY3NjU0Jy4BAyInJicmNDc2NzYyFxYXFhQHBgcGAfQYISEwISFRjzk5yTorhG5rPT99am+DdmhlPD4+PMyFbV5bNTc3NVte2l5bNTc3NVteAqAiLyIiLyI5Hf7EHBwCsT89a26Ed8w8Pj48ZWh2g29qffyjNzVbXtpeWzU3NzVbXtpeWzU3AAADAAAAAAOoA6gACwAgADUAAAEHJwcXBxc3FzcnNwMiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBgKOmpocmpocmpocmpq2dmZiOjs7OmJm7GZiOjs7OmJmdmtdWTQ2NjRZXdZdWTQ2NjRZXQKqmpocmpocmpocmpoBGTs6YmbsZmI6Ozs6YmbsZmI6O/zCNjRZXdZdWTQ2NjRZXdZdWTQ2AAMAAAAAA+kD6gAaAC8AMAAAAQYHBiMiJyYnJjQ3Njc2MhcWFxYVFAcGBwEHATI3Njc2NCcmJyYiBwYHBhQXFhcWMwKONUBCR21dWjU3NzVaXdpdWzU2GBcrASM5/eBXS0grKysrSEuuSkkqLCwqSUpXASMrFxg2NVtd2l1aNTc3NVpdbUdCQDX+3jkBGSsrSEuuSkkqLCwqSUquS0grKwAC//8AAAPoA+gAFAAwAAABIgcGBwYQFxYXFiA3Njc2ECcmJyYTFg4BIi8BBwYuATQ/AScmPgEWHwE3Nh4BBg8BAfSIdHFDRERDcXQBEHRxQ0REQ3F0SQoBFBsKoqgKGxMKqKIKARQbCqKoChsUAQqoA+hEQ3F0/vB0cUNERENxdAEQdHFDRP1jChsTCqiiCgEUGwqiqAobFAEKqKIKARQbCqIAAAIAAAAAA+QD5AAXADQAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMUBiMFFxYUDwEGLwEuAT8BNh8BFhQPAQUyFh0BAe6Ecm9BQ0NCbnODiXVxQkREQnF1fwQC/pGDAQEVAwTsAgEC7AQEFAIBhAFwAgMD40RCcXWJg3NuQkNDQW9yhIl1cUJE/fYCAwuVAgQCFAQE0AIFAtEEBBQCBQGVCwMDJwAAAAUAAAAAA9QD0wAjACcANwBHAEgAAAERFAYjISImNREjIiY9ATQ2MyE1NDYzITIWHQEhMhYdARQGIyERIREHIgYVERQWOwEyNjURNCYjISIGFREUFjsBMjY1ETQmKwEDeyYb/XYbJkMJDQ0JAQYZEgEvExkBBgkNDQn9CQJc0QkNDQktCQ0NCf7sCQ0NCS0JDQ0JLQMi/TQbJiYbAswMCiwJDS4SGRkSLg0JLAoM/UwCtGsNCf5NCQ0NCQGzCQ0NCf5NCQ0NCQGzCQ0AAAAAEADGAAEAAAAAAAEABAAAAAEAAAAAAAIABwAEAAEAAAAAAAMABAALAAEAAAAAAAQABAAPAAEAAAAAAAUACwATAAEAAAAAAAYABAAeAAEAAAAAAAoAKwAiAAEAAAAAAAsAEwBNAAMAAQQJAAEACABgAAMAAQQJAAIADgBoAAMAAQQJAAMACAB2AAMAAQQJAAQACAB+AAMAAQQJAAUAFgCGAAMAAQQJAAYACACcAAMAAQQJAAoAVgCkAAMAAQQJAAsAJgD6d2V1aVJlZ3VsYXJ3ZXVpd2V1aVZlcnNpb24gMS4wd2V1aUdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAHcAZQB1AGkAUgBlAGcAdQBsAGEAcgB3AGUAdQBpAHcAZQB1AGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHcAZQB1AGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAAZjaXJjbGUIZG93bmxvYWQEaW5mbwxzYWZlX3N1Y2Nlc3MJc2FmZV93YXJuB3N1Y2Nlc3MOc3VjY2Vzcy1jaXJjbGURc3VjY2Vzcy1uby1jaXJjbGUHd2FpdGluZw53YWl0aW5nLWNpcmNsZQR3YXJuC2luZm8tY2lyY2xlBmNhbmNlbAZzZWFyY2gFY2xlYXIEYmFjawZkZWxldGUAAAAA") 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,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") 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)}} |
-
请 注册 或 登录 后发表评论