{"version":3,"file":"buy.465513df.mjs","sources":["../../../../assets/alipay.svg","../../../../assets/wechat.svg","../../../../assets/wechat_pay.svg","../../../../assets/alipay_pay.svg","../../../../api/pay.js","../../../../pages/pay/buy.vue"],"sourcesContent":["export default \"__VITE_ASSET__2e1cc1ac__\"","export default \"__VITE_ASSET__16fea893__\"","export default \"__VITE_ASSET__c7b17425__\"","export default \"__VITE_ASSET__c08f7574__\"","import req from \"~/api/request\";\n\n/**\n * 商品信息详情\n * @param data\n * @returns {*}\n */\n export function goodsGetInfo(data){\n  return req().post('/resource/auth/goods/get/info', data)\n}\n\n\n/**\n * 统一下单\n * @param data\n * @returns {*}\n */\nexport function tradeOrderUnified(data){\n  return req().post('/scm/auth/trade/order/unified',data)\n}\n\n/**\n * 查询状态\n * @param params\n * @returns {*}\n */\nexport function tradeRecordStatus(params){\n  return req().get('/scm/auth/trade/record/status/view',{params})\n}\n\n/**\n * 继续支付\n * @param data\n * @returns {*}\n */\nexport function tradeOrderContinuePay(data){\n  return req().post('/scm/auth/trade/order/continue/pay',data)\n}\n","<template>\n  <NuxtLayout name=\"buy\">\n    <div class=\"app_container buy_content\">\n      <div class=\"buy_main\">\n        <div class=\"buy_info\">\n          <div class=\"buy_order_course\" v-if=\"opts.info.id\">\n            <div class=\"product_title\">您购买的商品是</div>\n            <template v-if=\"map.examType == 5 ||  map.practiceType\">\n              <div class=\"product_info\">\n                <div class=\"product_cover\">\n                  <img src=\"~/assets/pc/buy_goods.png\" />\n                  <div class=\"product_info_msg\">\n                    <div class=\"course_name\">{{ opts.info.goodsName }}</div>\n                    <span class=\"course_cell_item\">\n                      购买后<span v-if=\"opts.info.validityType === 1\">永久有效</span>\n                      <span v-else>{{ opts.info.endTime }}到期</span>\n                    </span>\n                    <div class=\"product_price\">￥{{ opts.info.price }}</div>\n                  </div>\n                </div>\n              </div>\n            </template>\n            <template v-else-if=\"isGrade\">\n              <div class=\"product_info\">\n                <div class=\"product_cover\">\n                  <img :src=\"opts.info.coverUrl\" />\n                  <div class=\"product_info_msg\">\n                    <div class=\"course_name\">{{ opts.info.classroomName }}</div>\n                    <span class=\"course_cell_item\">\n                      购买后<span v-if=\"opts.info.validityType === 1\">永久有效</span>\n                      <span v-else-if=\"opts.info.validityType === 2\">{{ opts.info.endTime }}到期</span>\n                      <span v-else-if=\"opts.info.validityType === 3\"> {{ opts.info.days }}天到期 </span>\n                    </span>\n                    <div class=\"product_price\">￥{{ opts.info.price }}</div>\n                  </div>\n                </div>\n              </div>\n            </template>\n            <template v-else>\n              <div class=\"product_info\">\n                <div class=\"product_cover\">\n                  <img :src=\"opts.info.courseCover\" />\n                  <div class=\"product_info_msg\">\n                    <div class=\"course_name\">{{ opts.info.courseName }}</div>\n                    <span class=\"course_cell_item\">\n                      购买后<span v-if=\"opts.info.validityType === 1\">永久有效</span>\n                      <span v-else-if=\"opts.info.validityType === 2\">{{ opts.info.endTime }}到期</span>\n                      <span v-else-if=\"opts.info.validityType === 3\">\n                        {{ opts.info.days}}天到期\n                      </span>\n                    </span>\n                    <div class=\"product_price\">￥{{ opts.info.price.toFixed(2) }}</div>\n                  </div>\n                </div>\n              </div>\n            </template>\n            <!--      <div class=\"product_cell\">-->\n            <!--        <div class=\"product_title_left\">优惠</div>-->\n            <!--        <div class=\"product_right\">请选择<el-icon><arrow-right /></el-icon></div>-->\n            <!--      </div>-->\n            <div class=\"product_title pay_method\">确认支付方式</div>\n            <div class=\"pay_type\">\n              <el-radio-group v-model=\"map.payType\">\n                <el-radio label=\"alipay\" v-if=\"shopData && shopData.config.enabledAliPay\">\n                  <img src=\"~/assets/alipay.svg\" class=\"pay_item\" />\n                </el-radio>\n                <el-radio label=\"wechat\" v-if=\"shopData && shopData.config.enabledWxPay\">\n                  <img src=\"~/assets/wechat.svg\" class=\"pay_item\" />\n                </el-radio>\n              </el-radio-group>\n            </div>\n            <div class=\"footer_pay\" v-if=\"opts.info.id\">\n              <div class=\"product_title pay_method\">确认支付金额</div>\n              <div class=\"footer_buy\">\n                <div class=\"footer_price\">\n                  <div class=\"price_box\">\n                    <div class=\"price_box_left\">原价：</div>\n                    <div content=\"price_box_right\">￥{{ opts.info.linePrice }}</div>\n                  </div>\n                  <div class=\"price_box\">\n                    <div class=\"price_box_left\">销售价：</div>\n                    <div content=\"price_box_right\">￥{{ opts.info.price }}</div>\n                  </div>\n                  <!--            <div class=\"price_box\">-->\n                  <!--              <div class=\"price_box_left\">优惠券：</div>-->\n                  <!--              <div content=\"price_box_right\">￥{{opts.info.linePrice}}</div>-->\n                  <!--            </div>-->\n                  <div class=\"price_box\">\n                    <div class=\"price_box_left\">实际应付：</div>\n                    <div content=\"price_box_right\">￥{{ opts.info.price }}</div>\n                  </div>\n                  <!-- <div class=\"line_price\">优惠：￥{{opts.info.linePrice}}</div> -->\n                </div>\n                <div class=\"footer_btn\">\n                  <div class=\"price_now\">\n                    实付：<span class=\"now_price\"><span class=\"price_icon\">￥</span>{{ opts.info.price }}</span>\n                  </div>\n                  <el-button type=\"primary\" @click=\"handlePay\">立即支付</el-button>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <client-only>\n        <el-dialog\n          append-to-body\n          width=\"450px\"\n          :title=\"map.payType === 'wechat' ? '微信支付' : '支付宝支付'\"\n          v-model=\"ctrl.showPay\"\n          :before-close=\"handleClosePay\"\n        >\n          <div class=\"pay_code\" v-if=\"!ctrl.showSuccess\">\n            <div class=\"count_time\">剩余支付时间：{{ formatDuring(opts.count) }}</div>\n            <div class=\"play_tips\">\n              请使用\n              <img v-if=\"map.payType === 'wechat'\" src=\"@/assets/wechat_pay.svg\" />\n              <img v-else src=\"@/assets/alipay_pay.svg\" />\n              <span\n                :class=\"{\n                  wechat_title: map.payType === 'wechat',\n                  alipay_title: map.payType !== 'wechat',\n                }\"\n                >{{ map.payType === 'wechat' ? '微信' : '支付宝' }}</span\n              >\n              扫码\n            </div>\n            <div class=\"pay_info\">\n              支付：<span class=\"pay_price\">{{ opts.payInfo.paidAmount }}元</span>\n            </div>\n            <qrcode class=\"qr_code\" v-if=\"ctrl.showPay\" :value=\"opts.payInfo.payMessage\" :size=\"200\" alt=\"支付二维码\" />\n            <div class=\"pay_title\">\n              {{ !ctrl.isPayClick ? '请您及时付款，以便于订单尽快处理！' : '您暂无完成支付，请支付完成后'\n              }}<el-button type=\"text\" class=\"mgl10\" v-if=\"ctrl.isPayClick\">重试</el-button>\n            </div>\n            <div class=\"pay_btn\" v-if=\"!ctrl.isPayClick\" @click=\"handlePayClick\">\n              <el-button type=\"primary\">我已支付</el-button>\n            </div>\n          </div>\n          <div class=\"success_pay\" v-else>\n            <div class=\"iconfont icon-success\"></div>\n            <div class=\"success_title\">支付成功</div>\n            <div class=\"buy_btn_info\">\n              <el-button type=\"primary\" round @click=\"toPracticeOrExam\" v-if=\"map.examType == 5 || map.practiceType\">前往查看</el-button>\n              <el-button type=\"primary\" round @click=\"toLearn\" v-else>进入学习</el-button>\n              <el-button type=\"text\" @click=\"toOrder\"\n                >查看订单 <el-icon><arrow-right></arrow-right><arrow-right></arrow-right></el-icon\n              ></el-button>\n            </div>\n          </div>\n        </el-dialog>\n      </client-only>\n      <exam-before-exam\n        v-if=\"ctrl.examInfoVisible\"\n        :dialogVisible=\"ctrl.examInfoVisible\"\n        :exam-name=\"ctrl.examInfo.examName\"\n        :paper-id=\"ctrl.examInfo.paperId\"\n        :resource-id=\"ctrl.examInfo.id\"\n        :resource-type=\"5\"\n        :exam-type=\"5\"\n        :biz-type=\"3\"\n        @close=\"closeDialog\"\n      ></exam-before-exam>\n    </div>\n  </NuxtLayout>\n</template>\n\n<script setup>\nimport { ArrowRight } from '@element-plus/icons-vue'\nimport { getAuthCourseView } from '../../api/course'\nimport { gradeView } from '@/api/grade.js'\nimport { goodsGetInfo } from '../../api/pay'\nimport { useUserStore } from '../../stores/user'\nimport { tradeOrderUnified, tradeRecordStatus } from '../../api/pay'\nimport { setSession, getStore, setStore } from '../../utils/storage'\nimport { ElMessage } from 'element-plus'\nimport { formatDuring } from '../../utils'\nimport { paperExamInfo, paperRecordCheck } from \"@/api/paper\";\nimport cookie from \"@/utils/cookies\";\n\nconst route = useRoute()\nconst router = useRouter()\nconst { getEnumList, token, getLocalSession, getToken } = useUserStore()\nconst store = useUserStore()\n\nconst shopData = ref(null)\nconst map = reactive({\n  id: '',\n  payType: 'alipay',\n})\n\nlet cookieData = cookie.getShop()\nuseHead({\n  title: '购买详情-'+ cookieData.shopName,\n})\nconst isGrade = computed(() => {\n  return route.query.type === '2'\n})\nconst opts = reactive({\n  info: {},\n  ipInfo: {},\n  PeriodTypeEnum: {},\n  payInfo: {},\n  count: 30 * 60 * 1000,\n  timer: null,\n  token: computed(() => {\n    return getToken()\n  }),\n})\nconst timer = ref(null)\nconst ctrl = reactive({\n  loading: false,\n  showPay: false,\n  showSuccess: false,\n  isPayClick: false,\n  examInfoVisible: false,\n  examInfo: {},\n})\n// 获取详情\nconst getInfo = async () => {\n  ctrl.loading = true\n  if (token) {\n    let result\n    if(map.practiceType){\n      result = await goodsGetInfo({\n        goodsId: map.id,\n        goodsType: 3,\n      })\n    }\n   else if (map.examType == 5) {\n      result = await goodsGetInfo({\n        goodsId: map.id,\n        goodsType: 2,\n      })\n    } else if (isGrade.value) {\n      result = await gradeView(map.id)\n    } else {\n      result = await getAuthCourseView(map)\n    }\n    if (result) {\n      ctrl.loading = false\n      opts.info = { id: map.id, ...result }\n    } else {\n      ctrl.loading = false\n    }\n  } else {\n    router.push({\n      path: '/login',\n      query: {\n        redirect: encodeURIComponent('/pay/buy?id=' + map.id),\n      },\n    })\n  }\n}\nfunction generateJsonpCallback() {\n  return `jsonpcallback_${Date.now()}_${Math.floor(Math.random() * 100000)}`\n}\n\nfunction jsonp(url, callback) {\n  const funcName = generateJsonpCallback()\n  window[funcName] = callback\n\n  const script = document.createElement('script')\n\n  // 判断 URL 是否已有参数\n  const separator = url.includes('?') ? '&' : '?'\n\n  // 拼接 callback 参数\n  script.src = `${url}${separator}callback=${funcName}`\n  script.type = 'text/javascript'\n\n  document.body.appendChild(script)\n}\nconst getPayStatus = () => {\n  tradeRecordStatus({ id: opts.payInfo.tradeSerialNo }).then((res) => {\n    if (res.orderStatus === 2) {\n      ctrl.showSuccess = true\n      // router.push({\n      //   path:'/pay/paySuccess',\n      //   query:{\n      //     id:map.id,\n      //     courseType:opts.info.courseType,\n      //     orderId:opts.payInfo.tradeSerialNo\n      //   }\n      // })\n    }\n  })\n}\nconst handlePayClick = () => {\n  ctrl.isPayClick = true\n  getPayStatus()\n}\n// 支付\nconst goodsType = computed(() => {\n  if(map.practiceType) return 10\n  if (map.examType == 5) return 9\n  if (isGrade.value) return 8\n  return opts.info.courseType\n})\nconst handlePay = () => {\n  if (opts.token) {\n    let param = {\n      goodsId: map.id,\n      goodsType: goodsType.value,\n      orderSource: 1,\n      payType: map.payType === 'wechat' ? 4 : 1,\n      userClientIp: opts.ipInfo.ip,\n    }\n    tradeOrderUnified(param).then((res) => {\n      // console.log(res.payMessage,'tradeOrderUnified')\n      opts.payInfo = res\n      ctrl.showPay = true\n      ctrl.isPayClick = false\n      if (opts.timer) {\n        clearInterval(opts.timer)\n        opts.timer = null\n      }\n      if (timer.value) {\n        clearInterval(timer.value)\n        timer.value = null\n        opts.count = 30 * 60 * 1000\n      }\n      timer.value = setInterval(() => {\n        if (opts.count === 1000) {\n          opts.count = 0\n          clearInterval(timer.value)\n          timer.value = null\n          return\n        }\n        opts.count -= 1000\n      }, 1000)\n      opts.timer = setInterval(() => {\n        getPayStatus()\n      }, 1000)\n    })\n  } else {\n    router.push({\n      path: '/login',\n      query: {\n        redirect: encodeURIComponent('/pay/buy?id=' + map.id),\n      },\n    })\n  }\n}\nconst handleClosePay = () => {\n  ctrl.showPay = false\n  if (opts.timer) {\n    clearInterval(opts.timer)\n    opts.timer = null\n  }\n}\n\nconst closeDialog = (flag = false) => {\n  ctrl.examInfoVisible = false;\n  if (flag) {\n    paperRecordCheck().then((res) => {\n      if (!res.isExamination) {\n        setStore(\"examInfo\", ctrl.examInfo);\n        router.replace({\n          path: \"/exam/startExam\",\n          query: {\n            controlShow: true,\n            examType: 5\n          },\n        });\n      } else {\n        ElMessageBox.confirm(\"请继续未完成的考试\", \"提示\", {\n          cancelButtonText: \"取消\",\n          confirmButtonText: \"确定\",\n          type: \"warning\",\n        })\n          .then(() => {\n            router.replace({\n              path: \"/exam/startExam\",\n              query: {\n                controlShow: true,\n                examType: 5,\n                isExamination: true,\n                recordId: res.recordId\n              },\n            });\n          })\n          .catch(() => {});\n      }\n    });\n  }\n};\n//支付完成跳转练习或考试\nconst toPracticeOrExam = () => {\n  const text = route.query.practiceType ? 'practice' : 'paper'\n  router.push({\n    path: `/${text}/view`,\n    query: {\n      id: route.query.id\n    }\n  })\n}\nconst toLearn = () => {\n  if (isGrade.value) {\n    router.push({\n      path: `/grade/view`,\n      query: {\n        id: opts.info.id,\n      },\n    })\n    return\n  }\n  let urlType = {\n    1: 'live',\n    2: 'video',\n    3: 'audio',\n    4: 'graphic',\n    5: 'subject',\n    6: 'topic',\n  }\n  router.push({\n    path: `/course/${urlType[opts.info.courseType]}`,\n    query: {\n      id: opts.info.id,\n    },\n  })\n}\nconst toOrder = () => {\n  router.push({\n    path: '/account/order',\n    query: {\n      id: opts.payInfo.tradeSerialNo,\n    },\n  })\n}\nonUnmounted(() => {\n  if (opts.timer) {\n    clearInterval(opts.timer)\n    opts.timer = null\n  }\n  if (timer.value) {\n    clearInterval(timer.value)\n    timer.value = null\n  }\n})\nonMounted(() => {\n  nextTick(() => {\n    getEnumList('CourseTypeEnum', 'obj').then((res) => {\n      opts.PeriodTypeEnum = res\n    })\n    if (route.query.id) {\n      map.id = route.query.id\n    }\n    if (route.query.examType) {\n      map.examType = route.query.examType\n      map.paperId = route.query.paperId\n    }\n    if(route.query.practiceType){\n      map.practiceType = route.query.practiceType\n      map.categoryId = route.query.categoryId\n    }\n    const ipConfig = getLocalSession('ipInfo')\n    if (ipConfig) {\n      opts.ipInfo = ipConfig\n    } else {\n      jsonp('//ipinfo.io/json', (res) => {\n        opts.ipInfo = res\n        setSession('ipInfo', opts.ipInfo)\n      })\n    }\n    shopData.value = store.shopData\n    // console.log(shopData.value)\n    if (!shopData.value) {\n      store.getShopInfo().then((res) => {\n        shopData.value = res\n        if (!shopData.value.config.enabledAliPay && shopData.value.config.enabledWxPay) {\n          map.payType = 'wechat'\n        }\n        getInfo()\n      })\n    } else {\n      if (!shopData.value.config.enabledAliPay && shopData.value.config.enabledWxPay) {\n        map.payType = 'wechat'\n      }\n      getInfo()\n    }\n  })\n})\n</script>\n\n<style scoped lang=\"scss\">\n.buy_content {\n  padding-bottom: 0;\n  position: relative;\n  z-index: 1;\n  min-height: 100%;\n  background-color: #f6f8fb;\n}\n.buy_main {\n  min-height: calc(100vh - 66px - 150px);\n  padding-bottom: 20px;\n}\n.buy_bg {\n  // position: absolute;\n  // top: 0;\n  width: 100%;\n  height: 150px;\n  // z-index: 0;\n  background-color: #2256f6;\n}\n.buy_info {\n  position: relative;\n  z-index: 1;\n  width: 1200px;\n  margin: 20px auto auto;\n}\n.buy_order_title {\n  font-style: normal;\n  font-weight: normal;\n  font-size: 36px;\n  color: #ffffff;\n  padding-top: 40px;\n  padding-bottom: 40px;\n}\n.buy_order_course {\n  background: #ffffff;\n  border-radius: 10px;\n  padding: 30px;\n}\n.pay_method {\n  border-top: 1px solid #ebeef5;\n  padding-top: 40px;\n}\n.product_title {\n  margin-bottom: 30px;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 20px;\n  position: relative;\n  &:before {\n    content: '';\n    padding-right: 4px;\n    margin-right: 20px;\n    height: 22px;\n    background: #3d7fff;\n  }\n}\n.product_info {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 30px 0 40px;\n}\n.product_cover {\n  display: flex;\n}\n.product_info_msg {\n  margin-left: 20px;\n}\n.course_name {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 18px;\n  max-width: 100%;\n  word-break: break-all;\n  margin-bottom: 5px;\n  margin-top: 5px;\n}\n.product_cover img {\n  width: 216px;\n  height: 120px;\n  border-radius: 8px;\n}\n.course_type_tag {\n  border-radius: 5px 0;\n  background: #2256f6;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 10px;\n  color: #ffffff;\n  width: 40px;\n  height: 18px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.course_cell_item {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n  color: #999999;\n}\n.product_price {\n  color: #f23c3c;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 16px;\n  margin-top: 30px;\n}\n.product_cell {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-style: normal;\n  font-weight: 550;\n  font-size: 16px;\n  border-top: 1px solid #ebeef5;\n  padding-top: 20px;\n  margin-bottom: 20px;\n  cursor: pointer;\n}\n.pay_type {\n  display: flex;\n  margin-top: 20px;\n  padding-bottom: 40px;\n  height: 122px;\n  .pay_item {\n    margin-right: 20px;\n    border: 1px solid #ebeef5;\n    cursor: pointer;\n    &.active {\n      border-color: #f61818;\n    }\n  }\n}\n.footer_pay {\n  background-color: #ffffff;\n}\n.footer_buy {\n  width: 100%;\n  margin: auto;\n  padding-top: 30px;\n  display: flex;\n  justify-content: space-between;\n  background-color: #ffffff;\n  .footer_btn .el-button {\n    background: #3d7fff;\n    border-radius: 4px;\n    width: 154px;\n    height: 42px;\n    font-style: normal;\n    font-weight: 400;\n    font-size: 18px;\n    border-color: #3d7fff;\n    margin-left: 30px;\n  }\n}\n.footer_btn {\n  display: flex;\n  align-items: center;\n}\n.success_pay {\n  background: #ffffff;\n  border-radius: 10px;\n  height: 460px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  .iconfont {\n    font-size: 48px;\n    color: #58b85c;\n  }\n  .success_title {\n    color: #333333;\n    font-style: normal;\n    font-weight: normal;\n    font-size: 20px;\n    margin-top: 15px;\n    margin-bottom: 30px;\n  }\n  .buy_btn_info {\n    display: flex;\n    flex-direction: column;\n  }\n  .buy_btn_info .el-button {\n    width: 154px;\n    height: 42px;\n    .el-icon {\n      height: 16px;\n      width: 16px;\n    }\n    &.el-button {\n      margin-top: 15px;\n      margin-left: 0;\n    }\n  }\n}\n.pay_code {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  .pay_title {\n    color: #999999;\n    font-style: normal;\n    font-weight: 400;\n    font-size: 14px;\n    margin-top: 12px;\n  }\n  .pay_btn {\n    margin-top: 26px;\n  }\n}\n.pay_btn .el-button {\n  width: 154px;\n  height: 42px;\n  background: #3d7fff;\n  border-radius: 49px;\n}\n.price_now {\n  font-style: normal;\n  font-weight: normal;\n  font-size: 14px;\n  color: #333333;\n}\n.now_price {\n  font-weight: 700;\n  font-size: 24px;\n  color: #f23c3c;\n}\n.price_icon {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n}\n.line_price {\n  font-style: normal;\n  font-weight: normal;\n  font-size: 14px;\n  color: #f61818;\n}\n.price_box {\n  display: flex;\n  align-items: center;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n  & + .price_box {\n    margin-top: 5px;\n  }\n  .price_box_left {\n    width: 70px;\n    text-align: left;\n  }\n  .price_box_right {\n    text-align: left;\n    margin-left: 24px;\n  }\n}\n.count_time {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 20px;\n  color: #666666;\n  margin-bottom: 26px;\n}\n.play_tips {\n  color: #999999;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 16px;\n  display: flex;\n  align-items: center;\n  .wechat_title {\n    color: #28c445;\n  }\n  .alipay_title {\n    color: #3d7fff;\n  }\n  margin-bottom: 5px;\n}\n.pay_info {\n  color: #999999;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 16px;\n  margin-bottom: 12px;\n  .pay_price {\n    color: #f01414;\n    margin-left: 8px;\n  }\n}\n</style>\n"],"names":["_imports_1","URL","import","meta","url","href","_imports_2","_imports_3","_imports_4","goodsGetInfo","data","req","post","route","useRoute","router","useRouter","getEnumList","token","getLocalSession","getToken","useUserStore","store","shopData","ref","map","reactive","id","payType","cookieData","cookie","getShop","useHead","title","shopName","isGrade","computed","query","type","opts","info","ipInfo","PeriodTypeEnum","payInfo","count","timer","ctrl","loading","showPay","showSuccess","isPayClick","examInfoVisible","examInfo","getInfo","async","result","practiceType","goodsId","goodsType","examType","value","gradeView","getAuthCourseView","push","path","redirect","encodeURIComponent","jsonp","callback","funcName","Date","now","Math","floor","random","window","script","document","createElement","separator","includes","src","body","appendChild","getPayStatus","params","tradeSerialNo","get","then","res","orderStatus","handlePayClick","courseType","handlePay","param","orderSource","userClientIp","ip","clearInterval","setInterval","handleClosePay","closeDialog","flag","paperRecordCheck","isExamination","ElMessageBox","confirm","cancelButtonText","confirmButtonText","replace","controlShow","recordId","catch","setStore","toPracticeOrExam","text","toLearn","toOrder","onUnmounted","onMounted","nextTick","paperId","categoryId","ipConfig","setSession","config","enabledAliPay","enabledWxPay","getShopInfo"],"mappings":"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"}