Showing
8 changed files
with
145 additions
and
40 deletions
| ... | @@ -3,16 +3,38 @@ | ... | @@ -3,16 +3,38 @@ |
| 3 | </template> | 3 | </template> |
| 4 | 4 | ||
| 5 | <script setup> | 5 | <script setup> |
| 6 | +import Cookies from 'js-cookie' | ||
| 7 | + | ||
| 6 | import axios from '@/utils/axios' | 8 | import axios from '@/utils/axios' |
| 7 | import { useRoute, useRouter } from 'vue-router' | 9 | import { useRoute, useRouter } from 'vue-router' |
| 8 | import { onMounted } from 'vue' | 10 | import { onMounted } from 'vue' |
| 9 | import { Toast } from 'vant' | 11 | import { Toast } from 'vant' |
| 10 | import { mainStore } from './store'; | 12 | import { mainStore } from './store'; |
| 13 | + | ||
| 11 | const store = mainStore(); | 14 | const store = mainStore(); |
| 12 | const $router = useRouter(); | 15 | const $router = useRouter(); |
| 13 | 16 | ||
| 14 | -onMounted(() => { | 17 | +/** |
| 15 | -}) | 18 | + * 获取默认儿童信息 |
| 19 | + * @returns name, perf_id, kg_id | ||
| 20 | + */ | ||
| 21 | +if (!Cookies.get('default_perf')) { | ||
| 22 | + axios.get('/srv/?a=default_perf') | ||
| 23 | + .then(res => { | ||
| 24 | + if (res.data.code === 1) { | ||
| 25 | + Cookies.set('default_perf', JSON.stringify(res.data.data)); | ||
| 26 | + } else { | ||
| 27 | + console.warn(res); | ||
| 28 | + Toast({ | ||
| 29 | + icon: 'close', | ||
| 30 | + message: res.data.msg | ||
| 31 | + }); | ||
| 32 | + } | ||
| 33 | + }) | ||
| 34 | + .catch(err => { | ||
| 35 | + console.error(err); | ||
| 36 | + }); | ||
| 37 | +} | ||
| 16 | </script> | 38 | </script> |
| 17 | 39 | ||
| 18 | <style lang="less"> | 40 | <style lang="less"> |
| ... | @@ -37,4 +59,4 @@ body { | ... | @@ -37,4 +59,4 @@ body { |
| 37 | padding: 0; | 59 | padding: 0; |
| 38 | } | 60 | } |
| 39 | } | 61 | } |
| 40 | -</style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 62 | +</style> | ... | ... |
| ... | @@ -5,13 +5,13 @@ | ... | @@ -5,13 +5,13 @@ |
| 5 | <van-row> | 5 | <van-row> |
| 6 | <van-col> | 6 | <van-col> |
| 7 | <div class="donate-book"> | 7 | <div class="donate-book"> |
| 8 | - <van-image width="80" height="80" src="https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPngc434046fdf1f9499d251b280af2568ddbe64839799d00a9aee226edbeb710aed" /> | 8 | + <van-image width="80" height="80" :src="item.avatar" /> |
| 9 | </div> | 9 | </div> |
| 10 | </van-col> | 10 | </van-col> |
| 11 | <van-col> | 11 | <van-col> |
| 12 | <div class="donate-detail"> | 12 | <div class="donate-detail"> |
| 13 | - <p class="text">逃家小兔绘本</p> | 13 | + <p class="text">{{ item.name }}</p> |
| 14 | - <p class="price">¥59</p> | 14 | + <p class="price">¥{{ item.price }}</p> |
| 15 | </div> | 15 | </div> |
| 16 | </van-col> | 16 | </van-col> |
| 17 | </van-row> | 17 | </van-row> |
| ... | @@ -50,6 +50,8 @@ | ... | @@ -50,6 +50,8 @@ |
| 50 | </template> | 50 | </template> |
| 51 | 51 | ||
| 52 | <script setup> | 52 | <script setup> |
| 53 | +import Cookies from 'js-cookie' | ||
| 54 | + | ||
| 53 | import MyButton from '@/components/MyButton/index.vue' | 55 | import MyButton from '@/components/MyButton/index.vue' |
| 54 | import { ref, reactive, onMounted } from 'vue' | 56 | import { ref, reactive, onMounted } from 'vue' |
| 55 | import { useRoute, useRouter } from 'vue-router' | 57 | import { useRoute, useRouter } from 'vue-router' |
| ... | @@ -70,7 +72,7 @@ onMounted(() => { | ... | @@ -70,7 +72,7 @@ onMounted(() => { |
| 70 | import mixin from 'common/mixin'; | 72 | import mixin from 'common/mixin'; |
| 71 | 73 | ||
| 72 | export default { | 74 | export default { |
| 73 | - props: ['showPopup'], | 75 | + props: ['showPopup', 'item'], |
| 74 | mixins: [mixin.init], | 76 | mixins: [mixin.init], |
| 75 | data() { | 77 | data() { |
| 76 | return { | 78 | return { |
| ... | @@ -81,6 +83,9 @@ export default { | ... | @@ -81,6 +83,9 @@ export default { |
| 81 | } | 83 | } |
| 82 | }, | 84 | }, |
| 83 | mounted() { | 85 | mounted() { |
| 86 | + // 缺省儿童信息 | ||
| 87 | + const default_perf = Cookies.get('default_perf') ? JSON.parse(Cookies.get('default_perf')) : ''; | ||
| 88 | + this.donate_name = default_perf.name; | ||
| 84 | }, | 89 | }, |
| 85 | watch: { | 90 | watch: { |
| 86 | showPopup(value, pre) { | 91 | showPopup(value, pre) { |
| ... | @@ -103,13 +108,31 @@ export default { | ... | @@ -103,13 +108,31 @@ export default { |
| 103 | this.closeBtn(); | 108 | this.closeBtn(); |
| 104 | }, | 109 | }, |
| 105 | donateBook() { | 110 | donateBook() { |
| 106 | - console.warn(this.donate_name); | 111 | + // 爱心捐书接口 |
| 107 | - console.warn(this.donate_number); | 112 | + axios.post('/srv/?a=add_donate', { |
| 108 | - this.closeBtn(); | 113 | + book_id: this.item.book_id, |
| 114 | + qty: this.donate_number, | ||
| 115 | + donate_name: this.donate_name, | ||
| 116 | + }) | ||
| 117 | + .then(res => { | ||
| 118 | + if (res.data.code === 1) { | ||
| 119 | + console.warn(res.data.data); | ||
| 120 | + this.closeBtn(); | ||
| 109 | 121 | ||
| 110 | - // 交易成功跳转回调页面 | 122 | + // 交易成功跳转回调页面 |
| 111 | - this.$router.push({ | 123 | + this.$router.push({ |
| 112 | - path: '/client/wechatpayCallback' | 124 | + path: '/client/wechatpayCallback' |
| 125 | + }) | ||
| 126 | + } else { | ||
| 127 | + console.warn(res); | ||
| 128 | + Toast({ | ||
| 129 | + icon: 'close', | ||
| 130 | + message: res.data.msg | ||
| 131 | + }); | ||
| 132 | + } | ||
| 133 | + }) | ||
| 134 | + .catch(err => { | ||
| 135 | + console.error(err); | ||
| 113 | }) | 136 | }) |
| 114 | }, | 137 | }, |
| 115 | } | 138 | } |
| ... | @@ -172,4 +195,4 @@ export default { | ... | @@ -172,4 +195,4 @@ export default { |
| 172 | flex: 1; | 195 | flex: 1; |
| 173 | padding: 0 0.5rem; | 196 | padding: 0 0.5rem; |
| 174 | } | 197 | } |
| 175 | -</style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 198 | +</style> | ... | ... |
| ... | @@ -9,7 +9,7 @@ | ... | @@ -9,7 +9,7 @@ |
| 9 | <span style="font-size: 0.8rem; color: #272727;">尊敬的</span> | 9 | <span style="font-size: 0.8rem; color: #272727;">尊敬的</span> |
| 10 | </van-col> | 10 | </van-col> |
| 11 | <van-col> | 11 | <van-col> |
| 12 | - <div style="color: #713610; padding: 1rem;" class="van-hairline--bottom">{{ name }}</div> | 12 | + <div style="color: #713610; padding: 1rem;" class="van-hairline--bottom">{{ item.name }}</div> |
| 13 | </van-col> | 13 | </van-col> |
| 14 | <van-col>:</van-col> | 14 | <van-col>:</van-col> |
| 15 | </van-row> | 15 | </van-row> |
| ... | @@ -19,7 +19,7 @@ | ... | @@ -19,7 +19,7 @@ |
| 19 | </div> | 19 | </div> |
| 20 | <div class="price"> | 20 | <div class="price"> |
| 21 | <div>爱心捐赠</div> | 21 | <div>爱心捐赠</div> |
| 22 | - <div>{{ price }} 元</div> | 22 | + <div>{{ item.amt }} 元</div> |
| 23 | </div> | 23 | </div> |
| 24 | <div class="organizer"> | 24 | <div class="organizer"> |
| 25 | <div class="wrapper"> | 25 | <div class="wrapper"> |
| ... | @@ -33,7 +33,7 @@ | ... | @@ -33,7 +33,7 @@ |
| 33 | </div> | 33 | </div> |
| 34 | </div> | 34 | </div> |
| 35 | </div> | 35 | </div> |
| 36 | - <div class="date">{{ datetime }}</div> | 36 | + <div class="date">{{ item.donate_date }}</div> |
| 37 | </div> | 37 | </div> |
| 38 | </template> | 38 | </template> |
| 39 | 39 | ||
| ... | @@ -60,6 +60,7 @@ import mixin from 'common/mixin'; | ... | @@ -60,6 +60,7 @@ import mixin from 'common/mixin'; |
| 60 | 60 | ||
| 61 | export default { | 61 | export default { |
| 62 | mixins: [mixin.init], | 62 | mixins: [mixin.init], |
| 63 | + props: ['item'], | ||
| 63 | data() { | 64 | data() { |
| 64 | return { | 65 | return { |
| 65 | name: '杨桐桐', | 66 | name: '杨桐桐', |
| ... | @@ -132,4 +133,4 @@ export default { | ... | @@ -132,4 +133,4 @@ export default { |
| 132 | padding-right: 2rem; | 133 | padding-right: 2rem; |
| 133 | } | 134 | } |
| 134 | } | 135 | } |
| 135 | -</style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 136 | +</style> | ... | ... |
| ... | @@ -16,7 +16,6 @@ axios.interceptors.request.use( | ... | @@ -16,7 +16,6 @@ axios.interceptors.request.use( |
| 16 | // 绑定默认请求头 | 16 | // 绑定默认请求头 |
| 17 | config.params = _.merge(config.params, { | 17 | config.params = _.merge(config.params, { |
| 18 | f: 'voice', | 18 | f: 'voice', |
| 19 | - client_id: '313939' | ||
| 20 | }) | 19 | }) |
| 21 | return config; | 20 | return config; |
| 22 | }, | 21 | }, | ... | ... |
| ... | @@ -75,7 +75,7 @@ | ... | @@ -75,7 +75,7 @@ |
| 75 | <span style="font-size: 0.85rem;">订阅</span> | 75 | <span style="font-size: 0.85rem;">订阅</span> |
| 76 | </div> | 76 | </div> |
| 77 | <div class="button"> | 77 | <div class="button"> |
| 78 | - <my-button @on-click="payFor" type="plain">爱心捐书</my-button> | 78 | + <my-button @on-click="toDonate" type="plain">爱心捐书</my-button> |
| 79 | </div> | 79 | </div> |
| 80 | <div class="button"> | 80 | <div class="button"> |
| 81 | <my-button @on-click="uploadVideo" type="primary">上传作品</my-button> | 81 | <my-button @on-click="uploadVideo" type="primary">上传作品</my-button> |
| ... | @@ -91,6 +91,9 @@ | ... | @@ -91,6 +91,9 @@ |
| 91 | <p>请前往个人中心进行实名认证</p> | 91 | <p>请前往个人中心进行实名认证</p> |
| 92 | </div> | 92 | </div> |
| 93 | </notice-overlay> | 93 | </notice-overlay> |
| 94 | + | ||
| 95 | + <donate-book :showPopup="showDonate" :item="donateItem" @on-close="closeDonate"></donate-book> | ||
| 96 | + | ||
| 94 | </template> | 97 | </template> |
| 95 | 98 | ||
| 96 | <script setup> | 99 | <script setup> |
| ... | @@ -100,6 +103,7 @@ import { useVideoList } from '@/composables/useVideoList.js' | ... | @@ -100,6 +103,7 @@ import { useVideoList } from '@/composables/useVideoList.js' |
| 100 | import MyButton from '@/components/MyButton/index.vue' | 103 | import MyButton from '@/components/MyButton/index.vue' |
| 101 | import VideoCard from '@/components/VideoCard/index.vue' | 104 | import VideoCard from '@/components/VideoCard/index.vue' |
| 102 | import NoticeOverlay from '@/components/NoticeOverlay/index.vue' | 105 | import NoticeOverlay from '@/components/NoticeOverlay/index.vue' |
| 106 | +import DonateBook from '@/components/DonateBook/index.vue' | ||
| 103 | 107 | ||
| 104 | import icon_video from '@images/video.png' | 108 | import icon_video from '@images/video.png' |
| 105 | import icon_up from '@images/icon-guanbi@2x.png' | 109 | import icon_up from '@images/icon-guanbi@2x.png' |
| ... | @@ -168,11 +172,26 @@ const onSubscribe = () => { | ... | @@ -168,11 +172,26 @@ const onSubscribe = () => { |
| 168 | }) | 172 | }) |
| 169 | } | 173 | } |
| 170 | 174 | ||
| 171 | -// 爱心捐书 | 175 | +/*************** 捐书模块START ***************/ |
| 172 | -// TODO: 需要联调捐书接口 | 176 | +const donateItem = ref({}) |
| 173 | -const payFor = () => { | 177 | +// 弹出捐赠弹框模块 |
| 174 | - console.warn('弹出框'); | 178 | +const showDonate = ref(false); |
| 179 | + | ||
| 180 | +const toDonate = () => { | ||
| 181 | + showDonate.value = true; | ||
| 182 | + // 捐书数据 | ||
| 183 | + donateItem.value = { | ||
| 184 | + book_id: $route.query.id, | ||
| 185 | + avatar: bookInfo.value.cover, | ||
| 186 | + name: bookInfo.value.name, | ||
| 187 | + price: bookInfo.value.price | ||
| 188 | + } | ||
| 189 | +} | ||
| 190 | + | ||
| 191 | +const closeDonate = (v) => { | ||
| 192 | + showDonate.value = v; | ||
| 175 | } | 193 | } |
| 194 | +/**********************************/ | ||
| 176 | 195 | ||
| 177 | // 跳转个人中心 | 196 | // 跳转个人中心 |
| 178 | const onSubmit = () => { | 197 | const onSubmit = () => { |
| ... | @@ -197,9 +216,12 @@ const uploadVideo = () => { | ... | @@ -197,9 +216,12 @@ const uploadVideo = () => { |
| 197 | if (res.data.code === 1) { | 216 | if (res.data.code === 1) { |
| 198 | // 实名认证标识 | 217 | // 实名认证标识 |
| 199 | if (res.data.data.can_upload) { | 218 | if (res.data.data.can_upload) { |
| 200 | - // TODO: 上传视频直接跳转?不需要表示判断是上传哪个幼儿园吗? | 219 | + // 已读隐私条例,直接跳转上传页面 |
| 201 | - if (Cookies.get('privacy_notice')) { // 已读隐私条例,直接跳转上传页面 | 220 | + if (Cookies.get('privacy_notice')) { |
| 202 | - location.href = 'https://jinshuju.net/f/NAGn1D'; | 221 | + // x_field_1是金数据表单传入的参数,家长上传的格式为:book_id-perf_id,perf_id是当前缺省的儿童id |
| 222 | + let default_perf = Cookies.get('default_perf') ? JSON.parse(Cookies.get('default_perf')) : ''; | ||
| 223 | + let str = `${$route.query.id}-${default_perf.perf_id}` | ||
| 224 | + location.href = `https://jinshuju.net/f/NAGn1D?x_field_1=${str}`; | ||
| 203 | } else { | 225 | } else { |
| 204 | $router.push({ | 226 | $router.push({ |
| 205 | path: '/client/privacyNotice' | 227 | path: '/client/privacyNotice' | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div class="donate-certificate-page content-bg"> | 2 | <div class="donate-certificate-page content-bg"> |
| 3 | - <donate-cert></donate-cert> | 3 | + <donate-cert :item="certItem"></donate-cert> |
| 4 | </div> | 4 | </div> |
| 5 | + <shortcut-fixed type="C" :item="shortcutItem"></shortcut-fixed> | ||
| 5 | </template> | 6 | </template> |
| 6 | 7 | ||
| 7 | <script setup> | 8 | <script setup> |
| 8 | import DonateCert from '@/components/DonateCert/index.vue' | 9 | import DonateCert from '@/components/DonateCert/index.vue' |
| 10 | +import ShortcutFixed from '@/components/ShortcutFixed/index.vue' | ||
| 9 | 11 | ||
| 10 | import { ref, reactive, onMounted } from 'vue' | 12 | import { ref, reactive, onMounted } from 'vue' |
| 11 | import { useRoute, useRouter } from 'vue-router' | 13 | import { useRoute, useRouter } from 'vue-router' |
| ... | @@ -15,11 +17,30 @@ import { Toast } from 'vant'; | ... | @@ -15,11 +17,30 @@ import { Toast } from 'vant'; |
| 15 | const $route = useRoute(); | 17 | const $route = useRoute(); |
| 16 | const $router = useRouter(); | 18 | const $router = useRouter(); |
| 17 | 19 | ||
| 18 | -// TODO: 捐款成功后,查询生成捐赠证书 | 20 | +// 配置快捷跳转条 |
| 21 | +const shortcutItem = ref(['home']); | ||
| 19 | 22 | ||
| 20 | - onMounted(() => { | 23 | +const certItem = ref('') |
| 21 | - | 24 | +// TODO: 捐款成功后,查询生成捐赠证书 |
| 22 | - }) | 25 | +axios.get('/srv/?a=one_cert', { |
| 26 | + params: { | ||
| 27 | + donate_id: $route.query.donate_id | ||
| 28 | + } | ||
| 29 | +}) | ||
| 30 | +.then(res => { | ||
| 31 | + if (res.data.code === 1) { | ||
| 32 | + certItem.value = res.data.data; | ||
| 33 | + } else { | ||
| 34 | + console.warn(res); | ||
| 35 | + Toast({ | ||
| 36 | + icon: 'close', | ||
| 37 | + message: res.data.msg | ||
| 38 | + }); | ||
| 39 | + } | ||
| 40 | +}) | ||
| 41 | +.catch(err => { | ||
| 42 | + console.error(err); | ||
| 43 | +}) | ||
| 23 | </script> | 44 | </script> |
| 24 | 45 | ||
| 25 | <script> | 46 | <script> |
| ... | @@ -47,4 +68,4 @@ export default { | ... | @@ -47,4 +68,4 @@ export default { |
| 47 | height: 96vh; | 68 | height: 96vh; |
| 48 | padding: 2vh; | 69 | padding: 2vh; |
| 49 | } | 70 | } |
| 50 | -</style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 71 | +</style> | ... | ... |
| ... | @@ -18,7 +18,7 @@ | ... | @@ -18,7 +18,7 @@ |
| 18 | </div> | 18 | </div> |
| 19 | </div> | 19 | </div> |
| 20 | 20 | ||
| 21 | - <donate-book :showPopup="showDonate" @on-close="closeDonate"></donate-book> | 21 | + <donate-book :showPopup="showDonate" :item="donateItem" @on-close="closeDonate"></donate-book> |
| 22 | </template> | 22 | </template> |
| 23 | 23 | ||
| 24 | <script setup> | 24 | <script setup> |
| ... | @@ -35,16 +35,29 @@ import { Toast } from 'vant'; | ... | @@ -35,16 +35,29 @@ import { Toast } from 'vant'; |
| 35 | const $route = useRoute(); | 35 | const $route = useRoute(); |
| 36 | const $router = useRouter(); | 36 | const $router = useRouter(); |
| 37 | 37 | ||
| 38 | -// TODO: 作品上传完成后,回调到成功页面 | 38 | +/*************** 捐书模块START ***************/ |
| 39 | +const donateItem = ref({}) | ||
| 39 | 40 | ||
| 41 | +// TODO: 作品上传完成后,回调到成功页面,需要返回书籍的详情 | ||
| 40 | // 弹出捐赠弹框模块 | 42 | // 弹出捐赠弹框模块 |
| 41 | const showDonate = ref(false); | 43 | const showDonate = ref(false); |
| 42 | -const closeDonate = (v) => { // 查看更多回复 | 44 | + |
| 43 | - showDonate.value = v; | ||
| 44 | -} | ||
| 45 | const toDonate = () => { | 45 | const toDonate = () => { |
| 46 | showDonate.value = true; | 46 | showDonate.value = true; |
| 47 | + // TODO: 这些信息到时候需要后台带过来 | ||
| 48 | + donateItem.value = { | ||
| 49 | + book_id: '314134', | ||
| 50 | + avatar: 'https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPngc434046fdf1f9499d251b280af2568ddbe64839799d00a9aee226edbeb710aed', | ||
| 51 | + name: '逃家小兔绘本', | ||
| 52 | + price: '59' | ||
| 53 | + } | ||
| 47 | } | 54 | } |
| 55 | + | ||
| 56 | +const closeDonate = (v) => { | ||
| 57 | + showDonate.value = v; | ||
| 58 | +} | ||
| 59 | +/**********************************/ | ||
| 60 | + | ||
| 48 | const goBack = () => { | 61 | const goBack = () => { |
| 49 | $router.push({ | 62 | $router.push({ |
| 50 | path: '/client/bookDetail' | 63 | path: '/client/bookDetail' |
| ... | @@ -81,4 +94,4 @@ export default { | ... | @@ -81,4 +94,4 @@ export default { |
| 81 | color: #222222; | 94 | color: #222222; |
| 82 | text-align: center; | 95 | text-align: center; |
| 83 | } | 96 | } |
| 84 | -</style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 97 | +</style> | ... | ... |
| ... | @@ -52,9 +52,13 @@ export default { | ... | @@ -52,9 +52,13 @@ export default { |
| 52 | }, | 52 | }, |
| 53 | methods: { | 53 | methods: { |
| 54 | getCert () { | 54 | getCert () { |
| 55 | + // TODO: 需要获取 donate_id | ||
| 55 | // 跳转到捐赠证书页面,替换掉当前页面,不能返回这个页面 | 56 | // 跳转到捐赠证书页面,替换掉当前页面,不能返回这个页面 |
| 56 | this.$router.replace({ | 57 | this.$router.replace({ |
| 57 | - path: '/client/donateCertificate' | 58 | + path: '/client/donateCertificate', |
| 59 | + query: { | ||
| 60 | + donate_id: '314358' // 测试默认值 | ||
| 61 | + } | ||
| 58 | }); | 62 | }); |
| 59 | } | 63 | } |
| 60 | } | 64 | } | ... | ... |
-
Please register or login to post a comment