Browse Source

头部修改

lex 2 năm trước cách đây
mục cha
commit
26e8d0b6f5

+ 1 - 20
src/school/manage-teacher/index.tsx

@@ -1,26 +1,9 @@
 import OHeader from '@/components/o-header'
-import OQrcode from '@/components/o-qrcode'
 import OSearch from '@/components/o-search'
 import OSticky from '@/components/o-sticky'
-import {
-  ActionSheet,
-  Cell,
-  closeToast,
-  Grid,
-  GridItem,
-  Icon,
-  Image,
-  List,
-  Popup,
-  showFailToast,
-  showLoadingToast,
-  showSuccessToast,
-  showToast
-} from 'vant'
+import { Cell, Icon, Image, List } from 'vant'
 import { defineComponent, onMounted, reactive } from 'vue'
 import styles from './index.module.less'
-import iconSaveImage from '@/school/orchestra/images/icon-save-image.png'
-import iconWechat from '@/school/orchestra/images/icon-wechat.png'
 import iconTeacher from '@common/images/icon_teacher.png'
 import { useRouter } from 'vue-router'
 import request from '@/helpers/request'
@@ -28,8 +11,6 @@ import { state } from '@/state'
 import OEmpty from '@/components/o-empty'
 import OFullRefresh from '@/components/o-full-refresh'
 import { manageTeacherType } from '@/constant'
-import html2canvas from 'html2canvas'
-import { promisefiyPostMessage, postMessage } from '@/helpers/native-message'
 import OActionSheet from '@/components/o-action-sheet'
 
 export default defineComponent({

+ 5 - 1
src/school/mass-message/component/class-list/index.tsx

@@ -34,6 +34,10 @@ export default defineComponent({
       type: [String, Number],
       default: 0
     },
+    headerHeight: {
+      type: [String, Number],
+      default: 0
+    },
     selectItem: {
       type: Array,
       default: () => []
@@ -168,7 +172,7 @@ export default defineComponent({
         style={{ 'min-height': `calc(100vh - ${props.height}px - ${props.bottomHeight}px)` }}
       >
         {forms.orchestraList.length > 0 && (
-          <Sticky position="top" offsetTop={props.height} style={{ width: '100%' }}>
+          <Sticky position="top" offsetTop={props.headerHeight} style={{ width: '100%' }}>
             <div class={'searchGroup-single'}>
               <div
                 class={['searchItem', forms.showPopover ? 'searchItem-active' : '']}

+ 12 - 2
src/school/mass-message/component/manage-list/index.tsx

@@ -31,6 +31,10 @@ export default defineComponent({
       type: [String, Number],
       default: 0
     },
+    headerHeight: {
+      type: [String, Number],
+      default: 0
+    },
     removeTeacherId: {
       type: String,
       default: ''
@@ -145,14 +149,20 @@ export default defineComponent({
     onMounted(() => {
       getList()
       initSelectItem()
+
+      console.log(props.height, props.bottomHeight, '11121212')
     })
 
     return () => (
       <div
         class={[!forms.listState.dataShow && 'emptyRootContainer']}
-        style={{ 'min-height': `calc(100vh - ${props.height}px - ${props.bottomHeight}px)` }}
+        style={{
+          'min-height': `calc(100vh - ${props.height === 'auto' ? 0 : props.height}px - ${
+            props.bottomHeight
+          }px)`
+        }}
       >
-        <Sticky position="top" offsetTop={props.height} style={{ width: '100%' }}>
+        <Sticky position="top" offsetTop={props.headerHeight} style={{ width: '100%' }}>
           <OSearch
             // inputBackground="white"
             // background="#F8F8F8"

+ 5 - 1
src/school/mass-message/component/student-list/index.tsx

@@ -29,6 +29,10 @@ export default defineComponent({
       type: [String, Number],
       default: 0
     },
+    headerHeight: {
+      type: [String, Number],
+      default: 0
+    },
     selectItem: {
       type: Array,
       default: () => []
@@ -140,7 +144,7 @@ export default defineComponent({
         class={[!forms.listState.dataShow && 'emptyRootContainer']}
         style={{ 'min-height': `calc(100vh - ${props.height}px - ${props.bottomHeight}px)` }}
       >
-        <Sticky position="top" offsetTop={props.height} style={{ width: '100%' }}>
+        <Sticky position="top" offsetTop={props.headerHeight} style={{ width: '100%' }}>
           <OSearch
             // inputBackground="white"
             // background="#F8F8F8"

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

@@ -31,6 +31,10 @@ export default defineComponent({
       type: [String, Number],
       default: 0
     },
+    headerHeight: {
+      type: [String, Number],
+      default: 0
+    },
     removeTeacherId: {
       type: String,
       default: ''
@@ -153,7 +157,7 @@ export default defineComponent({
         class={[!forms.listState.dataShow && 'emptyRootContainer']}
         style={{ 'min-height': `calc(100vh - ${props.height}px - ${props.bottomHeight}px)` }}
       >
-        <Sticky position="top" offsetTop={props.height} style={{ width: '100%' }}>
+        <Sticky position="top" offsetTop={props.headerHeight} style={{ width: '100%' }}>
           <OSearch
             // inputBackground="white"
             // background="#F8F8F8"

+ 2 - 108
src/school/mass-message/create-message.tsx

@@ -3,7 +3,6 @@ import { sendType } from '@/constant'
 import request from '@/helpers/request'
 import { getOssUploadUrl, state } from '@/state'
 import dayjs from 'dayjs'
-import umiRequest from 'umi-request'
 import {
   ActionSheet,
   Button,
@@ -33,6 +32,7 @@ import { useRoute, useRouter } from 'vue-router'
 import OActionSheet from '@/components/o-action-sheet'
 import { formatterDatePicker } from '@/helpers/utils'
 import OUploadAll from '@/components/o-upload-all'
+import OHeader from '@/components/o-header'
 
 export default defineComponent({
   name: 'create-message',
@@ -66,93 +66,6 @@ export default defineComponent({
       ]
     })
 
-    const beforeRead = (file: any) => {
-      // console.log(file, 'beforeRead')
-      const isLt2M = file.size / 1024 / 1024 < 5
-      if (!isLt2M) {
-        showToast(`上传文件大小不能超过 5MB`)
-        return false
-      }
-      return true
-    }
-    const beforeDelete = (file: any, detail: { index: any }) => {
-      // this.dataModel.splice(detail.index, 1)
-      return true
-    }
-    const afterRead = async (file: any, detail: any) => {
-      try {
-        file.status = 'uploading'
-        file.message = '上传中...'
-        await uploadFile(file)
-      } catch (error) {
-        //
-        closeToast()
-      }
-    }
-
-    const uploadFile = async (files: any) => {
-      // 上传文件
-      try {
-        console.log(files, 'files')
-        const file = files.file
-        // 获取签名
-        const signUrl = '/api-school/open/getUploadSign'
-        const tempName = file.name || ''
-        const fileName = '/i-m/' + (tempName && tempName.replace(/ /gi, '_'))
-        const key = new Date().getTime() + fileName
-        // showLoadingToast({
-        //   message: '加载中...',
-        //   forbidClick: true,
-        //   loadingType: 'spinner',
-        //   duration: 0
-        // })
-        const res = await request.post(signUrl, {
-          hideLoading: true,
-          data: {
-            filename: fileName,
-            bucketName: forms.bucket,
-            postData: {
-              filename: fileName,
-              acl: 'public-read',
-              key: key,
-              unknowValueField: []
-            }
-          }
-        })
-        // setTimeout(() => {
-
-        // }, 100)
-        const obj = {
-          policy: res.data.policy,
-          signature: res.data.signature,
-          key: key,
-          KSSAccessKeyId: res.data.kssAccessKeyId,
-          acl: 'public-read',
-          name: fileName
-        }
-        const formData = new FormData()
-        for (const key in obj) {
-          formData.append(key, obj[key])
-        }
-        formData.append('file', file, fileName)
-        await umiRequest(getOssUploadUrl(forms.bucket), {
-          method: 'POST',
-          data: formData
-        })
-        // console.log(getOssUploadUrl(state.bucket) + key)
-        const uploadUrl = getOssUploadUrl(forms.bucket) + key
-        // closeToast()
-
-        // state.fileList.push({ url: uploadUrl })
-        files.url = uploadUrl
-        files.status = 'done'
-      } catch (error) {
-        files.status = 'failed'
-        // closeToast()
-        console.log(error, 'uploadFile')
-      }
-    }
-
     const onSubmit = async () => {
       try {
         if (!forms.sendType) {
@@ -213,18 +126,9 @@ export default defineComponent({
           })
         }
 
-        // router.replace('/mass-message')
         router.back()
         forms.sureLoading = false
         forms.updateLoading = false
-        // setTimeout(() => {
-        //   showToast(forms.id ? '修改成功' : '添加成功')
-        // }, 100)
-        // setTimeout(() => {
-        //   router.replace('/mass-message')
-        //   forms.sureLoading = false
-        //   forms.updateLoading = false
-        // }, 1100)
       } catch {
         //
         forms.sureLoading = false
@@ -316,7 +220,7 @@ export default defineComponent({
 
     return () => (
       <div class={styles['create-message']}>
-        {/* <OHeader /> */}
+        <OHeader />
         <CellGroup inset class={styles.cellGroup}>
           <Field
             inputAlign="right"
@@ -366,16 +270,6 @@ export default defineComponent({
           <Cell title="上传附件">
             {{
               label: () => (
-                // <Uploader
-                //   style={{ marginTop: '12px' }}
-                //   v-model={forms.attachments}
-                //   afterRead={afterRead}
-                //   beforeRead={beforeRead}
-                //   beforeDelete={beforeDelete}
-                //   accept="image/*"
-                //   maxCount={9}
-                //   disabled={formDisabled.value}
-                // />
                 <OUploadAll
                   v-model:modelValue={forms.attachments}
                   maxCount={9}

+ 23 - 2
src/school/mass-message/select-sned.tsx

@@ -1,3 +1,4 @@
+import OHeader from '@/components/o-header'
 import OSticky from '@/components/o-sticky'
 import { useRect } from '@vant/use'
 import { Button, Sticky, Tab, Tabs } from 'vant'
@@ -23,6 +24,7 @@ export default defineComponent({
   emits: ['close', 'confirm', 'update:selectList'],
   setup(props, { emit }) {
     const state = reactive({
+      headerHeight: 0,
       height: 'auto' as any,
       bottomHeight: 0,
       tabValue: 'class',
@@ -63,7 +65,7 @@ export default defineComponent({
 
     onMounted(() => {
       const { height } = useRect(document.querySelector('.van-tab') as HTMLElement)
-      state.height = height
+      state.height = state.height === 'auto' ? height : state.height + height
 
       resetSelectItems()
       console.log(state, 'select')
@@ -75,10 +77,26 @@ export default defineComponent({
         style={{ background: '#f6f6f6', minHeight: '100vh' }}
         id="select-send-message"
       >
-        <Tabs sticky lineWidth={20} lineHeight={4} v-model:active={state.tabValue}>
+        <OSticky
+          onGetHeight={(val: any) => {
+            console.log(val, 'height')
+            state.height = state.height === 'auto' ? val : state.height + val
+            state.headerHeight = val
+          }}
+        >
+          <OHeader title="发送对象" />
+        </OSticky>
+        <Tabs
+          sticky
+          lineWidth={20}
+          lineHeight={4}
+          v-model:active={state.tabValue}
+          offsetTop={state.headerHeight}
+        >
           <Tab title="班级列表" name="class">
             <ClassList
               height={state.height}
+              headerHeight={state.headerHeight}
               bottomHeight={state.bottomHeight}
               v-model:selectItem={state.selectClass}
             />
@@ -86,6 +104,7 @@ export default defineComponent({
           <Tab title="学员列表" name="student">
             <StudentList
               height={state.height}
+              headerHeight={state.headerHeight}
               bottomHeight={state.bottomHeight}
               v-model:selectItem={state.selectStudent}
             />
@@ -93,6 +112,7 @@ export default defineComponent({
           <Tab title="伴学指导" name="teacher">
             <TeacherList
               height={state.height}
+              headerHeight={state.headerHeight}
               bottomHeight={state.bottomHeight}
               v-model:selectItem={state.selectTeacher}
             />
@@ -100,6 +120,7 @@ export default defineComponent({
           <Tab title="管理老师" name="manage">
             <ManageList
               height={state.height}
+              headerHeight={state.headerHeight}
               bottomHeight={state.bottomHeight}
               v-model:selectItem={state.selectManage}
             />

+ 13 - 0
src/school/save-share-image/index.module.less

@@ -1,3 +1,16 @@
+.btnHeader {
+  display: flex;
+  align-items: center;
+  height: var(--van-nav-bar-height);
+  .iconBack {
+    position: relative;
+    padding-left: var(--van-padding-md);
+    font-size: 20px;
+    color: #fff;
+    z-index: 9;
+  }
+}
+
 .saveShareImage {
   position: relative;
   min-height: 100vh;

+ 21 - 1
src/school/save-share-image/index.tsx

@@ -10,7 +10,7 @@ import {
   showToast
 } from 'vant'
 import { defineComponent, onMounted, reactive } from 'vue'
-import { useRoute } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
 import styles from './index.module.less'
 import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'
 import html2canvas from 'html2canvas'
@@ -22,11 +22,14 @@ import teacherTopBg from './images/teacher-top_bg.png'
 import manageTopBg from './images/manage-top_bg.png'
 import orchestraTopBg from './images/orchestra-top_bg.png'
 import defaultLogo from '@/common/images/logo@2x.png'
+import OHeader from '@/components/o-header'
+import { browser } from '@/helpers/utils'
 
 export default defineComponent({
   name: 'save-share-image',
   setup() {
     const route = useRoute()
+    const router = useRouter()
     const state = reactive({
       type: route.query.type as any,
       paramValue: 2,
@@ -221,8 +224,25 @@ export default defineComponent({
         getDetail()
       }
     })
+
+    const onBack = () => {
+      if (browser().isApp) {
+        postMessage({ api: 'goBack' })
+      } else {
+        router.back()
+      }
+    }
     return () => (
       <div class={[styles.saveShareImage]}>
+        <OHeader background="transparent">
+          {{
+            content: () => (
+              <div class={styles.btnHeader} onClick={onBack}>
+                <Icon name="arrow-left" class={styles.iconBack} />
+              </div>
+            )
+          }}
+        </OHeader>
         {state.type === 'teacher' && <Image src={teacherTopBg} class={styles.topImage} />}
         {state.type === 'manage' && <Image src={manageTopBg} class={styles.topImage} />}
         {state.type === 'orchestra' && <Image src={orchestraTopBg} class={styles.topImage} />}

+ 1 - 0
src/school/school-detail/eidt-school.tsx

@@ -153,6 +153,7 @@ export default defineComponent({
     })
     return () => (
       <>
+        <OHeader />
         <div class={styles.schoolEidtWrap}>
           <div class={styles.eidtWrap}>
             <CellGroup inset>

+ 2 - 0
src/views/accompany/index.tsx

@@ -1,3 +1,4 @@
+import OHeader from '@/components/o-header'
 import request from '@/helpers/request'
 import { state } from '@/state'
 import { Image, Loading } from 'vant'
@@ -58,6 +59,7 @@ export default defineComponent({
     })
     return () => (
       <div class={styles.accompany}>
+        <OHeader />
         <div class={styles.accompanyCategory}>
           {data.svgs.map((item: any) => {
             return (

+ 11 - 7
src/views/accompany/music-list.tsx

@@ -24,6 +24,7 @@ import { getImage } from './images'
 import styles from './index.module.less'
 import OSticky from '@/components/o-sticky'
 import OSearch from '@/components/o-search'
+import OHeader from '@/components/o-header'
 
 export default defineComponent({
   name: 'accompany-music-list',
@@ -146,7 +147,6 @@ export default defineComponent({
     }
     //进入云教练
     const openView = (item: any) => {
-
       let src = `${location.origin}/orchestra-music-score/?id=${item.id}`
       postMessage({
         api: 'openAccompanyWebView',
@@ -172,8 +172,9 @@ export default defineComponent({
             document.documentElement.style.setProperty('--header-height', height + 'px')
           }}
         >
+          <OHeader border={false} />
           <div>
-            <DropdownMenu activeColor='var(--van-primary)'>
+            <DropdownMenu activeColor="var(--van-primary)">
               <DropdownItem
                 v-model:modelValue={data.value1}
                 options={option1.value}
@@ -189,11 +190,14 @@ export default defineComponent({
               ></DropdownItem>
             </DropdownMenu>
             <div class={styles.filter}>
-              <OSearch style={{width: '100%'}} background='transparent' onSearch={(keyword: string) => {
-                data.keyword = keyword
-                onSearch()
-              }} />
-              
+              <OSearch
+                style={{ width: '100%' }}
+                background="transparent"
+                onSearch={(keyword: string) => {
+                  data.keyword = keyword
+                  onSearch()
+                }}
+              />
             </div>
           </div>
         </OSticky>

+ 3 - 3
src/views/attendance-rule/index.tsx

@@ -53,9 +53,9 @@ export default defineComponent({
     })
     return () => (
       <>
-        {/* <OSticky position="top" background="#F8F8F8">
-          <OHeader></OHeader>
-        </OSticky> */}
+        <OSticky position="top" background="#F8F8F8">
+          <OHeader />
+        </OSticky>
         <div class={styles.attCollapseWrap} ref={divRef}>
           <Collapse v-model={state.activeNames} accordion>
             <CollapseItem

+ 17 - 0
src/views/follow-account/index.module.less

@@ -1,3 +1,20 @@
+.btnHeader {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 99;
+  width: 100%;
+  display: flex;
+  align-items: center;
+  height: var(--van-nav-bar-height);
+  .iconBack {
+    position: relative;
+    padding-left: var(--van-padding-md);
+    font-size: 20px;
+    color: #fff;
+    z-index: 9;
+  }
+}
 .followAccount {
   position: relative;
   min-height: 100vh;

+ 31 - 7
src/views/follow-account/index.tsx

@@ -1,5 +1,6 @@
 import {
   closeToast,
+  Icon,
   Image,
   showFailToast,
   showLoadingToast,
@@ -13,10 +14,14 @@ import content2 from './images/content2.png'
 import qrcode from './images/qrcode.jpg'
 import html2canvas from 'html2canvas'
 import { promisefiyPostMessage, postMessage } from '@/helpers/native-message'
+import OHeader from '@/components/o-header'
+import { browser } from '@/helpers/utils'
+import { useRouter } from 'vue-router'
 
 export default defineComponent({
   name: 'follow-account',
   setup() {
+    const router = useRouter()
     const imgs = reactive({
       saveLoading: false,
       image: null as any,
@@ -68,17 +73,36 @@ export default defineComponent({
       }
     }
 
+    const onBack = () => {
+      if (browser().isApp) {
+        postMessage({ api: 'goBack' })
+      } else {
+        router.back()
+      }
+    }
+
     return () => (
-      <div class={styles.followAccount}>
-        <Image src={content1} class={styles.content1} />
-        <Image src={content2} class={styles.content2} />
+      <>
+        <div class={styles.followAccount}>
+          <OHeader background="transparent">
+            {{
+              content: () => (
+                <div class={styles.btnHeader} onClick={onBack}>
+                  <Icon name="arrow-left" class={styles.iconBack} />
+                </div>
+              )
+            }}
+          </OHeader>
+          <Image src={content1} class={styles.content1} />
+          <Image src={content2} class={styles.content2} />
 
-        <div class={styles.saveQrcode} onClick={onSaveImg}></div>
+          <div class={styles.saveQrcode} onClick={onSaveImg}></div>
 
-        <div id="preview-container" class={styles.followQrcode}>
-          <Image src={qrcode} />
+          <div id="preview-container" class={styles.followQrcode}>
+            <Image src={qrcode} />
+          </div>
         </div>
-      </div>
+      </>
     )
   }
 })

+ 9 - 7
src/views/information/help-center/detail.tsx

@@ -34,14 +34,16 @@ export default defineComponent({
         ) : (
           <OHeader />
         )}
-        <div class={styles.detail}>
-          <div class={styles.title}>{detail.value.title}</div>
-          <div class={styles.who}>
-            <span>管乐团</span>
-            {detail.value.updateTime}
-          </div>
+        <div class={[styles.detail]}>
+          <div class={styles.detailContent}>
+            <div class={styles.title}>{detail.value.title}</div>
+            <div class={styles.who}>
+              <span>管乐团</span>
+              {detail.value.updateTime}
+            </div>
 
-          <div class={styles.content} v-html={detail.value.content}></div>
+            <div class={styles.content} v-html={detail.value.content}></div>
+          </div>
         </div>
       </>
     )

+ 2 - 0
src/views/information/index.tsx

@@ -1,4 +1,5 @@
 import OEmpty from '@/components/o-empty'
+import OHeader from '@/components/o-header'
 import OSearch from '@/components/o-search'
 import OSticky from '@/components/o-sticky'
 import request from '@/helpers/request'
@@ -87,6 +88,7 @@ export default defineComponent({
     return () => (
       <div class={[styles.helpCenter, !form.listState.dataShow && 'emptyRootContainer']}>
         <OSticky position="top">
+          <OHeader border={false} />
           <OSearch onSearch={onSearch} />
         </OSticky>
 

+ 4 - 1
src/views/information/information-detail.module.less

@@ -1,11 +1,14 @@
 .detail {
   background-color: #fff;
-  padding: 18px;
   min-height: 100vh;
   font-size: 15px;
   color: #333333;
   line-height: 25px;
 
+  .detailContent {
+    padding: 18px;
+  }
+
   .title {
     font-size: 20px;
     font-weight: 600;

+ 10 - 6
src/views/information/information-detail.tsx

@@ -1,3 +1,4 @@
+import OHeader from '@/components/o-header'
 import request from '@/helpers/request'
 import { state } from '@/state'
 import { defineComponent, onMounted, ref } from 'vue'
@@ -26,13 +27,16 @@ export default defineComponent({
     })
     return () => (
       <div class={styles.detail}>
-        <div class={styles.title}>{detail.value.title}</div>
-        <div class={styles.who}>
-          <span>管乐团</span>
-          {detail.value.createTime}
-        </div>
+        <OHeader />
+        <div class={styles.detailContent}>
+          <div class={styles.title}>{detail.value.title}</div>
+          <div class={styles.who}>
+            <span>管乐团</span>
+            {detail.value.createTime}
+          </div>
 
-        <div class={styles.content} v-html={detail.value.content}></div>
+          <div class={styles.content} v-html={detail.value.content}></div>
+        </div>
       </div>
     )
   }

+ 10 - 6
src/views/information/message-detail.tsx

@@ -1,3 +1,4 @@
+import OHeader from '@/components/o-header'
 import request from '@/helpers/request'
 import { state } from '@/state'
 import { defineComponent, onMounted, ref } from 'vue'
@@ -26,13 +27,16 @@ export default defineComponent({
     })
     return () => (
       <div class={styles.detail}>
-        <div class={styles.title}>{detail.value.title}</div>
-        <div class={styles.who}>
-          <span>管乐团</span>
-          {detail.value.createTime}
-        </div>
+        <OHeader />
+        <div class={styles.detailContent}>
+          <div class={styles.title}>{detail.value.title}</div>
+          <div class={styles.who}>
+            <span>管乐团</span>
+            {detail.value.createTime}
+          </div>
 
-        <div class={styles.content} v-html={detail.value.content}></div>
+          <div class={styles.content} v-html={detail.value.content}></div>
+        </div>
       </div>
     )
   }

+ 10 - 6
src/views/information/notice-detail.tsx

@@ -1,3 +1,4 @@
+import OHeader from '@/components/o-header'
 import request from '@/helpers/request'
 import { state } from '@/state'
 import { defineComponent, onMounted, ref } from 'vue'
@@ -26,13 +27,16 @@ export default defineComponent({
     })
     return () => (
       <div class={styles.detail}>
-        <div class={styles.title}>{detail.value.title}</div>
-        <div class={styles.who}>
-          <span>管乐团</span>
-          {detail.value.createTime}
-        </div>
+        <OHeader />
+        <div class={styles.detailContent}>
+          <div class={styles.title}>{detail.value.title}</div>
+          <div class={styles.who}>
+            <span>管乐团</span>
+            {detail.value.createTime}
+          </div>
 
-        <div class={styles.content} v-html={detail.value.content}></div>
+          <div class={styles.content} v-html={detail.value.content}></div>
+        </div>
       </div>
     )
   }