lex 2 years ago
parent
commit
24e75140a0

+ 1 - 1
index.html

@@ -34,7 +34,7 @@
   <meta name="apple-touch-fullscreen" content="yes" />
   <!-- windows phone 点击无高光 -->
   <meta name="msapplication-tap-highlight" content="no" />
-  <title>酷乐秀</title>
+  <title>管乐团</title>
   <script src="/flexible.js" charset="UTF-8"></script>
   <script type="text/javascript">
     window.paymentType = 'STUDENT'

+ 1 - 1
school.html

@@ -34,7 +34,7 @@
   <meta name="apple-touch-fullscreen" content="yes" />
   <!-- windows phone 点击无高光 -->
   <meta name="msapplication-tap-highlight" content="no" />
-  <title>酷乐秀</title>
+  <title>管乐团</title>
   <script src="/flexible.js" charset="UTF-8"></script>
   <script type="text/javascript">
     window.paymentType = 'SCHOOL'

+ 3 - 2
src/school/companion-teacher/companion-detail.tsx

@@ -24,6 +24,7 @@ import request from '@/helpers/request'
 import { state as baseState } from '@/state'
 import { useRoute, useRouter } from 'vue-router'
 import OEmpty from '@/components/o-empty'
+import ODialog from '@/components/o-dialog'
 
 export default defineComponent({
   name: 'companion-detail',
@@ -136,12 +137,12 @@ export default defineComponent({
               )
             }}
           </Cell>
-          <Cell>
+          <Cell center>
             {{
               title: () => (
                 <div class={styles.subjectContainer}>
                   <span>声部:</span>
-                  <div>
+                  <div style={{ display: 'flex', alignItems: 'center' }}>
                     {state.detail.subjectNames &&
                       state.detail.subjectNames.map((subject: any) => (
                         <Tag type="primary" class={styles.tagSubject}>

+ 2 - 2
src/school/companion-teacher/index.tsx

@@ -350,12 +350,12 @@ export default defineComponent({
                     )
                   }}
                 </Cell>
-                <Cell>
+                <Cell center>
                   {{
                     title: () => (
                       <div class={styles.subjectContainer}>
                         <span>声部:</span>
-                        <div>
+                        <div style={{ display: 'flex', alignItems: 'center' }}>
                           {item.subjectNames &&
                             item.subjectNames.length > 0 &&
                             item.subjectNames.map((subject: any) => (

+ 18 - 7
src/school/companion-teacher/unbind.tsx

@@ -75,18 +75,29 @@ export default defineComponent({
           message: '是否确认交接',
           showCancelButton: true
         }).then(async () => {
-          await request.post('/api-school/classGroup/handoverTeacher', {
+          const { data } = await request.post('/api-school/classGroup/handoverTeacher', {
             data: {
               teacherId: route.query.id,
               updateTeacherList: [...courseInfo]
             }
           })
-          setTimeout(() => {
-            showToast('交接成功')
-          }, 100)
-          setTimeout(() => {
-            router.replace('/companion-teacher')
-          }, 1000)
+
+          if (data.finish === true) {
+            setTimeout(() => {
+              showToast('交接成功')
+            }, 100)
+            setTimeout(() => {
+              router.replace('/companion-teacher')
+            }, 1000)
+          } else {
+            router.push({
+              path: '/course-preview',
+              query: {
+                cacheId: data.cacheId,
+                type: 'change'
+              }
+            })
+          }
         })
       } catch {
         //

+ 2 - 2
src/school/mass-message/component/teacher-list/teacher-list.tsx

@@ -192,12 +192,12 @@ export default defineComponent({
                       )
                     }}
                   </Cell>
-                  <Cell>
+                  <Cell center>
                     {{
                       title: () => (
                         <div class={styles.subjectContainer}>
                           <span>声部:</span>
-                          <div>
+                          <div style={{ display: 'flex', alignItems: 'center' }}>
                             {item.subjectNames &&
                               item.subjectNames.map((subject: any) => (
                                 <Tag type="primary" class={styles.tagSubject}>

+ 124 - 4
src/school/orchestra/compontent/information.tsx

@@ -1,5 +1,20 @@
 import OSticky from '@/components/o-sticky'
-import { Button, DatePicker, Grid, GridItem, Icon, Image, List, Picker, Popover, Popup } from 'vant'
+import {
+  Button,
+  closeToast,
+  DatePicker,
+  Grid,
+  GridItem,
+  Icon,
+  Image,
+  List,
+  Picker,
+  Popover,
+  Popup,
+  showLoadingToast,
+  showSuccessToast,
+  showToast
+} from 'vant'
 import { computed, defineComponent, nextTick, onMounted, reactive } from 'vue'
 import styles from './information.module.less'
 import iconSaveImage from '../images/icon-save-image.png'
@@ -10,6 +25,8 @@ import { useRoute } from 'vue-router'
 import { CountUp } from 'countup.js'
 import OEmpty from '@/components/o-empty'
 import dayjs from 'dayjs'
+import { promisefiyPostMessage, postMessage } from '@/helpers/native-message'
+import html2canvas from 'html2canvas'
 
 export default defineComponent({
   name: 'detail-information',
@@ -181,6 +198,109 @@ export default defineComponent({
       })
     }
 
+    const imgs = reactive({
+      saveLoading: false,
+      image: null as any,
+      shareLoading: false
+    })
+    const onSaveImg = async () => {
+      // 判断是否在保存中...
+      if (imgs.saveLoading) {
+        return
+      }
+      imgs.saveLoading = true
+      // 判断是否已经生成图片
+      if (imgs.image) {
+        saveImg()
+      } else {
+        const container: any = document.getElementById(`preview-container`)
+        html2canvas(container, {
+          allowTaint: true,
+          useCORS: true,
+          backgroundColor: null
+        })
+          .then(async (canvas) => {
+            const url = canvas.toDataURL('image/png')
+            imgs.image = url
+            saveImg()
+          })
+          .catch(() => {
+            closeToast()
+            imgs.saveLoading = false
+          })
+      }
+    }
+    const onShare = () => {
+      if (imgs.shareLoading) {
+        return
+      }
+      imgs.shareLoading = true
+      if (imgs.image) {
+        openShare()
+      } else {
+        const container: any = document.getElementById(`preview-container`)
+        html2canvas(container, {
+          allowTaint: true,
+          useCORS: true,
+          backgroundColor: null
+        })
+          .then(async (canvas) => {
+            const url = canvas.toDataURL('image/png')
+            imgs.image = url
+            openShare()
+          })
+          .catch(() => {
+            closeToast()
+            imgs.shareLoading = false
+          })
+      }
+    }
+    const openShare = () => {
+      const image = imgs.image
+      setTimeout(() => {
+        imgs.shareLoading = false
+      }, 100)
+      if (image) {
+        postMessage(
+          {
+            api: 'shareTripartite',
+            content: {
+              title: '',
+              desc: '',
+              image,
+              video: '',
+              type: 'image',
+              // button: ['copy']
+              shareType: 'wechat'
+            }
+          },
+          (res: any) => {
+            if (res && res.content) {
+              showToast(res.content.message || (res.content.status ? '分享成功' : '分享失败'))
+            }
+          }
+        )
+      }
+    }
+    const saveImg = async () => {
+      showLoadingToast({ message: '图片生成中...', forbidClick: true })
+      setTimeout(() => {
+        imgs.saveLoading = false
+      }, 100)
+      const res = await promisefiyPostMessage({
+        api: 'savePicture',
+        content: {
+          base64: imgs.image
+        }
+      })
+      if (res?.content?.status === 'success') {
+        showSuccessToast('保存成功')
+        form.showQrcode = false
+      } else {
+        showFailToast('保存失败')
+      }
+    }
+
     onMounted(() => {
       getDetails()
       getStatistics()
@@ -309,7 +429,7 @@ export default defineComponent({
           // safeAreaInsetBottom={true}
         >
           <div class={styles.codeContainer}>
-            <div class={styles.codeImg}>
+            <div class={styles.codeImg} id="preview-container">
               <div class={styles.codeContent}>
                 <h2 class={styles.codeTitle}>乐团报名</h2>
                 <div class={[styles.codeName, 'van-ellipsis']}>{state.orchestraInfo.name}</div>
@@ -336,13 +456,13 @@ export default defineComponent({
                 <i></i>分享方式
               </h3>
               <Grid columnNum={2} border={false}>
-                <GridItem>
+                <GridItem onClick={onSaveImg}>
                   {{
                     icon: () => <Image class={styles.shareImg} src={iconSaveImage} />,
                     text: () => <div class={styles.shareText}>保存图片</div>
                   }}
                 </GridItem>
-                <GridItem>
+                <GridItem onClick={onShare}>
                   {{
                     icon: () => <Image class={styles.shareImg} src={iconWechat} />,
                     text: () => <div class={styles.shareText}>微信</div>

+ 3 - 1
src/school/orchestra/create-orchestra/index.tsx

@@ -185,7 +185,9 @@ export default defineComponent({
           <Field
             label="乐团声部"
             readonly
-            placeholder="选择声部"
+            placeholder={
+              state.selectSubjects.length > 0 ? `已${state.selectSubjects.length}选个` : '选择声部'
+            }
             isLink
             inputAlign="right"
             onClick={() => (state.subjectStatus = true)}

+ 5 - 1
src/school/train-planning/component/course-preview/index.tsx

@@ -156,7 +156,11 @@ export default defineComponent({
         }, 100)
         setTimeout(() => {
           state.isClick = false
-          postMessage({ api: 'back', content: {} })
+          if (route.query.type === 'change') {
+            router.replace('/companion-teacher')
+          } else {
+            postMessage({ api: 'back', content: {} })
+          }
         }, 1100)
       } catch {
         //

+ 1 - 1
teacher.html

@@ -34,7 +34,7 @@
   <meta name="apple-touch-fullscreen" content="yes" />
   <!-- windows phone 点击无高光 -->
   <meta name="msapplication-tap-highlight" content="no" />
-  <title>酷乐秀</title>
+  <title>管乐团</title>
   <script src="/flexible.js" charset="UTF-8"></script>
   <script type="text/javascript">
     window.paymentType = 'TEACHER'