Kaynağa Gözat

fix: 修复分享图二维码

huangziyang 1 hafta önce
ebeveyn
işleme
e5db01fb9f

+ 23 - 5
components/ShareTemplate/ShareTemplate.vue

@@ -3,7 +3,9 @@ import lPainter from "@/uni_modules/lime-painter/components/l-painter/l-painter.
 import lPainterView from "@/uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue";
 import lPainterImage from "@/uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue";
 import lPainterText from "@/uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue";
-import { ref } from "vue";
+import { ref, onMounted } from "vue";
+import { request } from "../../utils/request";
+import { getRoute, objToUrlParams } from "../../utils/router";
 
 const painter = ref(null);
 const prosp = defineProps({
@@ -22,7 +24,21 @@ const prosp = defineProps({
   onSuccess: {
     type: Function,
     default: () => {},
-  }
+  },
+});
+
+const qrCode = ref("");
+
+onMounted(() => {
+  request("api/question_bank/question_reception/user_share/get_invite_qrcode", {
+    page_url: "pages/index/index",
+    scene: `id=${getRoute().params.id}`,
+  }).then((res) => {
+    if (res.data.image) {
+      let url = res.data.image;
+      qrCode.value = url;
+    }
+  });
 });
 
 const onSaveImage = () => {
@@ -73,9 +89,11 @@ const onSaveImage = () => {
             :text="correct.rate.toFixed(1) + '%'"
             css="position: absolute;top: 550rpx;left: 100rpx;color: #e7a552;font-size: 30rpx; z-index: 2;"
           />
-          <l-painter-view css="background: red; width: 146rpx; height: 146rpx;position: absolute;bottom: 18rpx;left: 18rpx;">
-
-          </l-painter-view>
+          <l-painter-image
+            :src="qrCode"
+            css="width: 146rpx; height: 146rpx;position: absolute;bottom: 18rpx;left: 18rpx;"
+          >
+          </l-painter-image>
         </l-painter-view>
       </l-painter>
     </view>

+ 16 - 1
components/ShareTemplate/ShareTemplateExam.vue

@@ -3,7 +3,9 @@ import lPainter from "@/uni_modules/lime-painter/components/l-painter/l-painter.
 import lPainterView from "@/uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue";
 import lPainterImage from "@/uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue";
 import lPainterText from "@/uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue";
-import { ref } from "vue";
+import { ref, onMounted } from "vue";
+import { request } from "../../utils/request";
+import { getRoute, objToUrlParams } from "../../utils/router";
 
 const painter = ref(null);
 const prosp = defineProps({
@@ -25,6 +27,19 @@ const prosp = defineProps({
   },
 });
 
+const qrCode = ref("");
+onMounted(() => {
+  request("api/question_bank/question_reception/user_share/get_invite_qrcode", {
+    page_url: "pages/index/index",
+    scene: `id=${getRoute().params.id}`,
+  }).then((res) => {
+    if (res.data.image) {
+      let url = res.data.image;
+      qrCode.value = url;
+    }
+  });
+});
+
 const onSaveImage = () => {
   painter.value?.canvasToTempFilePathSync({
     fileType: "jpg",

+ 11 - 0
components/Topic/TopicPractice.vue

@@ -176,6 +176,7 @@ import Questions from "./Questions.vue";
 import Container from "../Container/Container.vue";
 import Modal from "../Modal/Modal.vue";
 import uvParse from "@/uni_modules/uv-parse/components/uv-parse/uv-parse.vue";
+import { request } from "../../utils/request";
 const styleMap = {
   2: "单选",
   3: "多选",
@@ -209,6 +210,7 @@ const props = defineProps({
     default: 0,
   },
   title: String,
+  user_exercise_paper_id: Number,
 });
 
 watchEffect(() => {
@@ -306,6 +308,15 @@ const questionSubmit = (item) => {
     item.selectAns.map((q) => q.value),
     item.ansList.map((q) => q.label)
   );
+  console.log(item);
+
+  request("api/question_bank/question_reception/topic/answer_topic", {
+    id: item.id,
+    answer: item.selectAns.map((q) => q.value).join(","),
+    is_correct: item.isRight ? 1 : 0,
+    user_exercise_paper_id: props.user_exercise_paper_id,
+    chapter_id: item.chapter_id,
+  });
 };
 
 const handlePage = (item, index, type) => {

+ 7 - 0
pages.json

@@ -21,6 +21,13 @@
         "navigationBarTitleText": "挑战"
       }
     },
+    {
+      "path": "pages/challenge/addContant",
+      "style": {
+        "navigationStyle": "custom",
+        "navigationBarTitleText": "添加客服"
+      }
+    },
     {
       "path": "pages/user/index",
       "style": {

+ 49 - 0
pages/challenge/addContant.vue

@@ -0,0 +1,49 @@
+<template>
+  <Container
+    title="添加老师咨询"
+    :scrollStyle="{
+      padding: 0,
+    }"
+  >
+    <view class="bg">
+      <view class="bg-1">
+        <image
+          src="https://openwork-oss.oss-cn-shenzhen.aliyuncs.com/uploads/question/2025/05/mBkOXhmyeJMMfONavrEVHj1ZIPBRc00jXbG8O2jT.png"
+          show-menu-by-longpress
+          class="qrcode"
+        ></image>
+      </view>
+    </view>
+  </Container>
+</template>
+
+<script setup>
+import Container from "@/components/Container/Container.vue";
+</script>
+
+<style scoped lang="scss">
+.bg {
+  width: 100%;
+  height: 100%;
+  background: url("https://openwork-oss.oss-cn-shenzhen.aliyuncs.com/uploads/question/2025/05/yz2eTeqIRv60IEe6kOQBOYlHr75wiFIpeFqrJmgZ.png");
+  background-size: 100% 100%;
+  padding: 216rpx 10rpx;
+
+  .bg-1 {
+    width: 730.71rpx;
+    height: 841rpx;
+    background: url("https://openwork-oss.oss-cn-shenzhen.aliyuncs.com/uploads/question/2025/05/cOeqNuCTmz0r5LeZnW6qnKIFZJQCC1r4FarsZS55.png");
+    background-size: 100% 100%;
+    position: relative;
+
+    .qrcode {
+      position: absolute;
+      top: 205rpx;
+      left: 141rpx;
+      width: 448rpx;
+      height: 448rpx;
+      background-size: 100% 100%;
+    }
+  }
+}
+</style>

+ 8 - 1
pages/challenge/index.vue

@@ -10,13 +10,20 @@
       <view class="bg"></view>
     </view>
     <template #stick>
-      <button class="btn">立即报名!参与挑战!</button>
+      <button class="btn" @click="toAdd">立即报名!参与挑战!</button>
     </template>
   </Container>
 </template>
 
 <script setup>
 import Container from "../../components/Container/Container.vue";
+import { router } from "../../utils/router";
+
+const toAdd = () => {
+  router.push({
+    url: "/pages/challenge/addContant",
+  })
+}
 </script>
 
 <style lang="scss" scoped>

+ 12 - 3
pages/real/history.vue

@@ -32,8 +32,8 @@
     <view class="exam-history">
       <view
         class="i"
-        :class="index !== 3 && 'no-laster'"
-        v-for="(item, index) in 4"
+        :class="index !== list.length - 1 && 'no-laster'"
+        v-for="(item, index) in list"
       >
         <view>2025-05-31</view>
         <view>90分钟</view>
@@ -51,11 +51,13 @@
 import { ref, onMounted } from "vue";
 import Container from "../../components/Container/Container.vue";
 import { getRoute, router } from "../../utils/router";
+import { request } from "../../utils/request";
 
 const userInfo = ref({
   userpic: "https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/uni@2x.png",
   username: "Hi, 这里是历史题库",
 });
+const list = ref([]);
 
 const onClick = () => {
   router.push({
@@ -66,7 +68,14 @@ const onClick = () => {
     },
   });
 };
-onMounted(() => {
+onMounted(async () => {
+  const res = await request(
+    "api/question_bank/question_reception/real_topic/get_user_all_real_paper",
+    {
+      catalogue_id: getRoute().params.id, // 考试id
+    }
+  );
+  list.value = res.data;
   userInfo.value = uni.getStorageSync("userInfo");
 });
 </script>

+ 14 - 3
pages/regulations/practice.vue

@@ -39,15 +39,25 @@ const pageParams = ref({
   limit: 999,
 });
 const data = ref([]);
-
+const user_exercise_paper_id = ref(0);
 const getList = async (params) => {
   if (pageParams.value.page * pageParams.value.limit >= total.value) return;
+  const i = await request(
+    "api/question_bank/question_reception/topic/get_user_exercise_paper"
+  );
+  if (!i.data) {
+    const r = await request(
+      "api/question_bank/question_reception/topic/set_user_new_exercise_paper"
+    );
+    user_exercise_paper_id.value = r.data;
+  } else {
+    user_exercise_paper_id.value = i.data;
+  }
   const res = await request(
     "api/question_bank/question_reception/topic/get_chapter_topic",
     {
       ...params,
-      // id: getRoute().params.id,
-      id: 66,
+      id: getRoute().params.id,
     }
   );
   total.value = res.data.total;
@@ -144,6 +154,7 @@ onMounted(() => {
     :total="total"
     mode="practice"
     :topics="data"
+    :user_exercise_paper_id="user_exercise_paper_id"
     @nextPage="nextPage"
     @lookReport="lookReport"
     :onStar="onStar"