Browse Source

Merge branch 'iterationApp' into dev

lex-xin 3 years ago
parent
commit
097844dd2a

+ 26 - 13
package-lock.json

@@ -893,6 +893,11 @@
       "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
       "dev": true
     },
+    "@popperjs/core": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npm.taobao.org/@popperjs/core/download/@popperjs/core-2.9.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.9.2.tgz",
+      "integrity": "sha1-rep7aVPLs0ZRdmsFSEaOdDxqI1M="
+    },
     "@soda/friendly-errors-webpack-plugin": {
       "version": "1.7.1",
       "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz",
@@ -988,9 +993,17 @@
       "dev": true
     },
     "@vant/icons": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.2.1.tgz",
-      "integrity": "sha512-5ivsKQR4ySbdBW5UPoQDVqO6rdc1um3rvq/0VL+ZSA7Y3MdBQ3E4/NL0hoAY5/sZZeYfIDKEP21gpjUzdeEDQQ=="
+      "version": "1.6.0",
+      "resolved": "https://registry.nlark.com/@vant/icons/download/@vant/icons-1.6.0.tgz?cache=0&sync_timestamp=1621322269707&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vant%2Ficons%2Fdownload%2F%40vant%2Ficons-1.6.0.tgz",
+      "integrity": "sha1-Pbfrf5Y/UaKghnZyDVr5xMNRL+s="
+    },
+    "@vant/popperjs": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/@vant/popperjs/download/@vant/popperjs-1.1.0.tgz?cache=0&sync_timestamp=1617713442527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Fpopperjs%2Fdownload%2F%40vant%2Fpopperjs-1.1.0.tgz",
+      "integrity": "sha1-tO3uW7+m+xhwWYbjE9T9XxeUKg8=",
+      "requires": {
+        "@popperjs/core": "^2.9.2"
+      }
     },
     "@vue/babel-helper-vue-jsx-merge-props": {
       "version": "1.0.0",
@@ -7152,10 +7165,9 @@
       }
     },
     "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz",
-      "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=",
-      "dev": true
+      "version": "4.17.21",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835817439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz",
+      "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
     },
     "lodash.defaultsdeep": {
       "version": "4.6.1",
@@ -11098,12 +11110,13 @@
       }
     },
     "vant": {
-      "version": "2.5.4",
-      "resolved": "https://registry.npmjs.org/vant/-/vant-2.5.4.tgz",
-      "integrity": "sha512-eIeXrzsEP5cNbMkskFwxu3i6kkzS2pR7/fF0pFoTXhl/oYRdkXUt46RnRQtazz/BNHVBf2j3dVnwLTIBPRGstQ==",
+      "version": "2.12.21",
+      "resolved": "https://registry.nlark.com/vant/download/vant-2.12.21.tgz?cache=0&sync_timestamp=1623659246335&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvant%2Fdownload%2Fvant-2.12.21.tgz",
+      "integrity": "sha1-pRYKE1hienoCxae7apEbzCwOcX4=",
       "requires": {
         "@babel/runtime": "7.x",
-        "@vant/icons": "1.2.1",
+        "@vant/icons": "^1.5.3",
+        "@vant/popperjs": "^1.0.0",
         "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
         "vue-lazyload": "1.2.3"
       }
@@ -11216,8 +11229,8 @@
     },
     "vue-lazyload": {
       "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.2.3.tgz",
-      "integrity": "sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g=="
+      "resolved": "https://registry.npm.taobao.org/vue-lazyload/download/vue-lazyload-1.2.3.tgz",
+      "integrity": "sha1-kB+ewVx+bKeHgaK65KNDaGve2yw="
     },
     "vue-loader": {
       "version": "15.7.1",

+ 2 - 1
package.json

@@ -18,9 +18,10 @@
     "es6-promise": "^4.2.8",
     "install": "^0.13.0",
     "js-storage": "^1.1.0",
+    "lodash": "^4.17.21",
     "moment": "^2.29.1",
     "qs": "^6.8.0",
-    "vant": "^2.5.4",
+    "vant": "^2.12.21",
     "vconsole": "^3.3.4",
     "vue": "^2.6.10",
     "vue-amap": "^0.5.10",

+ 1 - 1
src/assets/commonLess/common.less

@@ -52,7 +52,7 @@
 
 .van-field__control {
   color: #808080 !important;
-  font-size: .16rem;
+  font-size: .14rem;
 }
 
 input::-webkit-input-placeholder,

+ 6 - 7
src/assets/commonLess/variable.less

@@ -34,18 +34,17 @@
   color: #c0c0c0;
 }
 
-.van-dropdown-menu__title--down {
-  &::after{border-color: transparent transparent @mColor @mColor;}
-  
-}
+// .van-dropdown-menu__title--down {
+//   &::after{border-color: transparent transparent @mColor @mColor;}
+// }
 /deep/.van-dropdown-menu__title {
   font-size: 0.17rem;
   color: #1a1a1a;
   line-height: inherit;
   height: auto;
-  &::after{
-    border-color: transparent transparent @mColor @mColor;
-  }
+  // &::after{
+  //   border-color: transparent transparent @mColor @mColor;
+  // }
 }
 /deep/ .van-rate__item:not(:last-child) {
   padding-right: .15rem;

+ 2 - 2
src/main.js

@@ -9,14 +9,14 @@ import { Button, Icon, Tag, Swipe, SwipeItem, Popup, Picker,
     Collapse, CollapseItem, Tab, Tabs, Row, Col, Cell, CellGroup,
     Circle, Field, DatetimePicker, Image, Loading,
     ActionSheet, RadioGroup, Radio, Checkbox, CheckboxGroup,
-    CountDown, Panel, Dialog, Sticky, Rate, Switch, ImagePreview, NavBar} from 'vant'
+    CountDown, Panel, Dialog, Sticky, Rate, Switch, ImagePreview, NavBar, NoticeBar} from 'vant'
 Vue.use(Button).use(Icon).use(Tag).use(Swipe).use(SwipeItem)
    .use(Popup).use(Picker).use(DropdownMenu).use(DropdownItem).use(Search)
    .use(PullRefresh).use(Toast).use(List).use(Collapse).use(CollapseItem)
    .use(Tab).use(Tabs).use(Row).use(Col).use(Cell).use(CellGroup)
    .use(Circle).use(Field).use(DatetimePicker).use(Image).use(Loading)
    .use(ActionSheet).use(RadioGroup).use(Radio).use(Checkbox).use(CheckboxGroup)
-   .use(CountDown).use(Panel).use(Dialog).use(Sticky).use(Rate).use(Switch).use(ImagePreview)
+   .use(CountDown).use(Panel).use(Dialog).use(Sticky).use(Rate).use(Switch).use(ImagePreview).use(NoticeBar)
    .use(NavBar)
 Vue.config.productionTip = false
 

+ 39 - 6
src/views/audition/ArrangeWork.vue

@@ -12,9 +12,16 @@
         <van-field rows="8" v-model="content" type="textarea" placeholder="请输入(1-600字)" />
       </div>
     </div>
-    <van-cell class="endTime" title="作业提交截止时间" @click="onEndTime" readonly placeholder="请选择截止时间" >
+    <van-cell class="endTime" title="作业提交截止时间" @click="onEndTime" is-link readonly placeholder="请选择截止时间" >
       <template #default>
-        {{ dateSection.showStartDate }} <span class="arrowDown"></span>
+        {{ dateSection.showStartDate }}
+         <!-- <span class="arrowDown"></span> -->
+      </template>
+    </van-cell>
+    <van-cell class="endTime" v-if="memberNum" title="作业曲目" @click="accompanimentStatus = true" readonly is-link placeholder="请选择作业曲目" >
+      <template #default>
+        {{ dateSection.musicScoreName }}
+         <!-- <span class="arrowDown"></span> -->
       </template>
     </van-cell>
     <div class="button-group">
@@ -33,6 +40,13 @@
         @cancel="dateSection.status = false"
       />
     </van-popup>
+
+    <van-popup position="bottom" v-model="accompanimentStatus"  :style="{ height: '100%' }" style=" border-radius: 0; overflow: inherit;">
+      <van-sticky>
+        <m-header name="作业曲目" :backUrl="backUrl" />
+      </van-sticky>
+      <accompaniment-modal isHead @onSelectMusic="onSelectMusic" />
+    </van-popup>
   </div>
 </template>
 <script>
@@ -40,24 +54,37 @@ import MHeader from "@/components/MHeader"
 import { browser, _throttle }  from '@/common/common'
 import dayjs from "dayjs";
 import { addHomeWork } from '@/api/audition'
+import AccompanimentModal from './modal/accompanimentModal'
+import cleanDeep from 'clean-deep'
 export default {
   name: "teacherList",
-  components: { MHeader },
+  components: { MHeader, AccompanimentModal },
   data() {
     let tempDate = new Date() // 默认显示T+3
     tempDate.setDate(tempDate.getDate() + 3)
+    let query = this.$route.query
     return {
       that: this,
+      memberNum: query.memberNum,
       headerStatus: true,
+      backUrl: {
+        status: true,
+        callBack: () => {
+          this.accompanimentStatus = false
+        }
+      },
       dateSection: {
         status: false,
         minDate: new Date(),
         maxDate: new Date(2025, 10, 1),
         currentDate: tempDate,
-        showStartDate: dayjs(tempDate).format("YYYY年MM月DD日")
+        showStartDate: dayjs(tempDate).format("YYYY年MM月DD日"),
+        musicScoreId: null,
+        musicScoreName: null,
       },
       content: null, // 课程编号
       expiryDate: null, // 作业截止日期
+      accompanimentStatus: false, // 伴奏弹窗
     };
   },
   mounted() {
@@ -83,6 +110,11 @@ export default {
       }
       return val
     },
+    onSelectMusic(value) {
+      this.dateSection.musicScoreName = value.examSongName
+      this.dateSection.musicScoreId = value.musicScoreId
+      this.accompanimentStatus = false
+    },
     confirmStartTime() {
       this.dateSection.showStartDate = dayjs(this.dateSection.currentDate).format("YYYY年MM月DD日")
       this.dateSection.status = false
@@ -105,9 +137,10 @@ export default {
       let params = {
         content: this.content,
         courseId: query.courseId,
-        expiryDate: dayjs(this.dateSection.currentDate).format('YYYY-MM-DD')
+        expiryDate: dayjs(this.dateSection.currentDate).format('YYYY-MM-DD'),
+        musicScoreId: this.dateSection.musicScoreId
       }
-      addHomeWork({...params}).then(res => {
+      addHomeWork(cleanDeep({...params})).then(res => {
         let result = res.data
         this.$toast.clear()
         if(result.code == 200) {

+ 8 - 0
src/views/audition/CourseEvaluation.vue

@@ -175,6 +175,7 @@ export default {
       isInside: false,
       isAssignHomework: 0, // 是否有布置作业,0 => 否 1 => 是
       enableAssignHomework: 0, // 是否要布置作业  0 否  1 是
+      memberStatus: 0, // 是否有学生或者乐团是会员
     };
   },
   created() {
@@ -255,6 +256,11 @@ export default {
       if (result.code == 200) {
         this.isAssignHomework = result.data.isAssignHomework;
         this.enableAssignHomework = result.data.enableAssignHomework;
+        const courseViewType = result.data.courseViewType || 0;
+        const memberNum = result.data.memberNum || 0;
+        if(courseViewType > 0 || memberNum > 0) {
+          this.memberNum = 1
+        }
       } else {
         this.$toast(result.msg);
       }
@@ -335,6 +341,7 @@ export default {
               path: "/arrangeWork",
               query: {
                 courseId: this.courseId,
+                memberNum: this.memberNum
               },
             });
           })
@@ -346,6 +353,7 @@ export default {
           path: "/arrangeWork",
           query: {
             courseId: this.courseId,
+            memberNum: this.memberNum
           },
         });
       }

+ 1 - 1
src/views/audition/ManageEvaluation.vue

@@ -16,7 +16,7 @@
       <!-- <div class="searchMore">
                 筛选<i class="arrowDown"></i>
       </div>-->
-      <van-dropdown-menu>
+      <van-dropdown-menu active-color="#01C1B5">
         <!-- <div class="susqurt">|</div> -->
         <van-dropdown-item title="筛选" ref="item" v-model="search.status">
           <div class="dropList">

+ 1 - 1
src/views/audition/MonthAppeal.vue

@@ -5,7 +5,7 @@
           <div @click="onAppealRecord">申诉记录</div>
       </template>
     </m-header>
-    <van-dropdown-menu>
+    <van-dropdown-menu active-color="#01C1B5">
       <van-dropdown-item v-model="value1" :options="option1" @change="getList" />
     </van-dropdown-menu>
 

+ 236 - 0
src/views/audition/modal/accompanimentModal.vue

@@ -0,0 +1,236 @@
+<template>
+    <div class="accompanimentModal">
+        <van-sticky :offset-top="isHead ? '.46rem' : 0">
+            <van-dropdown-menu class="cateDropDown" active-color="#01C1B5">
+                <van-dropdown-item v-model="levelId" :options="levelOptions" @change="levelChange" />
+                <van-dropdown-item v-model="subjectId" :options="subjectOptions" @change="subjectChange" />
+            </van-dropdown-menu>
+            <van-search
+                v-model="search"
+                show-action
+                placeholder="请输入搜索关键词"
+                shape="round"
+            >
+                <template #label>
+                    <van-dropdown-menu class="headDropDown" active-color="#01C1B5">
+                        <van-dropdown-item v-model="typeId" :options="typeOptions" @change="typeChange" />
+                    </van-dropdown-menu>
+                </template>
+                <template #action>
+                    <div @click="onSearch">搜索</div>
+                </template>
+            </van-search>
+        </van-sticky>
+
+        <van-list
+            v-model="loading"
+            v-if="show"
+            key="data"
+            :finished="finished"
+            finished-text="没有更多数据了"
+            @load="FetchList"
+        >
+            <van-cell-group>
+                <van-cell
+                    v-for="(item, index) in list"
+                    :key="index"
+                    class="input-cell"
+                    clickable
+                    @click="onSelect(item)"
+                    :center="true"
+                >
+                    <template slot="icon">
+                        <van-icon class="iconMusic" :name="MusicIcon" />
+                    </template>
+                    <template slot="title">
+                        <!-- {{ item.examSongName }} -->
+                        <van-notice-bar
+                            background="none"
+                            color="#444"
+                            :scrollable="false"
+                            :text="item.examSongName"
+                        />
+                    </template>
+                </van-cell>
+            </van-cell-group>
+        </van-list>
+        <m-empty class="empty" v-else key="data" />
+    </div>
+</template>
+
+<script>
+import { find } from 'lodash'
+import { sysMusicScoreCategoriesTree, queryPageLimit, querySubjectIds } from './api'
+import MusicIcon from './icons/music.png'
+export default {
+    props: {
+        isHead: {
+            type: Boolean,
+            default() {
+                return false
+            }
+        }
+    },
+    data() {
+        return {
+            MusicIcon,
+            levelId: 0,
+            subjectId: 0,
+            levelOptions: [
+                // { text: '全部等级', value: 0 },
+            ],
+            subjectOptions: [
+                { text: '全部声部', value: 0 }
+            ],
+            typeId: 0,
+            typeOptions: [],
+            search: null,
+            loading: false,
+            finished: false,
+            show: true,
+            params: {
+                page: 1,
+                rows: 20,
+            },
+            list: [],
+        }
+    },
+    async mounted() {
+        this.FetchLevel()
+    },
+    methods: {
+        async FetchLevel() {
+            try {
+                const res = await sysMusicScoreCategoriesTree({ parentId: 1 })
+                // console.log(res)
+                this.levelOptions = [...res.data.map((item) => ({value: item.id, text: item.name, childs: item.sysMusicScoreCategoriesList}))]
+                if (this.levelOptions.length && !this.levelId) {
+                    // console.log(this.levelOptions)
+                    this.levelId = this.levelOptions[0].value
+                    const active = find(this.levelOptions, {value: this.levelId})
+                    if (active) {
+                        if (active.childs) {
+                            this.typeOptions = [{value: 0, text: '全部练习'}, ...active.childs.map((item) => ({value: item.id, text: item.name}))]
+                        } else {
+                            this.typeOptions = null
+                        }
+                    }
+                }
+            } catch(error) {
+                //
+            }
+        },
+        async FetchCats() {
+            try {
+                const res = await querySubjectIds()
+                this.subjectOptions = [...this.subjectOptions, ...res.data.filter((item) => !!item).map((item) => ({value: item.id, text: item.name}))]
+            } catch (error) {
+                //
+            }
+        },
+        async FetchList() {
+            if (this.subjectOptions.length === 1) {
+                await this.FetchCats()
+            }
+            try {
+                let params = this.params
+                const res = await queryPageLimit({
+                    ...params,
+                    clientType: 'SMART_PRACTICE',
+                    subjectId: this.subjectId === 0 ? undefined : this.subjectId,
+                    categoriesId: (this.levelId || this.typeId) === 0 ? undefined : this.typeId || this.levelId,
+                    search: this.search
+                })
+                this.loading = false;
+                const { data } = res
+                this.list = [...this.list, ...data.rows]
+                if(params.page >= Math.ceil(data.totalPage)) {
+                    this.finished = true
+                    // Toast('列表加载完成')
+                }
+                this.params.page = data.nextPage
+                if(this.list.length <= 0) {
+                    this.show = false
+                }
+            } catch {
+                //
+            }
+        },
+        levelChange(val) {
+            this.levelId = val
+            this.typeId = 0
+            const active = find(this.levelOptions, {value: val})
+            if (active) {
+                if (active.childs) {
+                    this.typeOptions = [{value: 0, text: '全部练习'}, ...active.childs.map((item) => ({value: item.id, text: item.name}))]
+                } else {
+                    this.typeOptions = null
+                }
+            }
+            this.onSearch()
+        },
+        subjectChange(val) {
+            this.subjectId = val
+            this.onSearch()
+        },
+        typeChange(val) {
+            this.typeId = val
+            this.onSearch()
+        },
+        onSearch() {
+            this.params.page = 1
+            this.list = []
+            this.show = true
+            this.finished = false
+            this.FetchList()
+        },
+        onSelect(item) {
+            this.$emit('onSelectMusic', item)
+        }
+    }
+}
+</script>
+
+<style lang="less" scoped>
+.accompanimentModal {
+    background-color: #f5f5f5;
+    min-height: 100vh;
+    /deep/.van-search {
+        .van-cell {
+            font-size: 0.14rem;
+            padding: 0.05rem 0.08rem;
+            line-height: 0.24rem;
+        }
+        .van-dropdown-menu__bar {
+            height: .36rem;
+            background: transparent;
+            box-shadow: none;
+        }
+    }
+
+    .headDropDown {
+        height: .36rem;
+        background: transparent;
+        /deep/.van-dropdown-menu__title {
+            font-size: .14rem;
+        }
+    }
+    /deep/.van-field__control {
+        font-size: .14rem;
+    }
+    /deep/.van-dropdown-item .van-cell {
+        padding: 0.12rem 0.16rem;
+    }
+
+    .iconMusic {
+        /deep/.van-icon__image {
+            width: .38rem;
+            height: .38rem;
+            margin: auto;
+            vertical-align: middle;
+            // padding-right: .1rem;
+        }
+    }
+
+}
+</style>

+ 27 - 0
src/views/audition/modal/api.js

@@ -0,0 +1,27 @@
+const api = '/api-teacher'
+import request from '@/helpers/request'
+// 树状列表
+export const sysMusicScoreCategoriesTree = (data) => {
+  return request({
+      url: '/sysMusicScoreCategories/queryTree',
+      method: 'get',
+      params: data
+  })
+}
+
+export const queryPageLimit = (data) => {
+    return request({
+        url: '/sysMusicScoreAccompaniment/queryPageLimit',
+        method: 'get',
+        hideLoading: true,
+        params: data
+    })
+}
+
+export const querySubjectIds = (data) => {
+    return request({
+        url: '/sysMusicScoreAccompaniment/querySubjectIds',
+        method: 'get',
+        params: data
+    })
+}

BIN
src/views/audition/modal/icons/music.png


+ 3 - 3
src/views/visitManager/visitList.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="visitList">
     <m-header v-if="headerStatus" />
-    <van-dropdown-menu  :close-on-click-outside="false">
+    <van-dropdown-menu  :close-on-click-outside="false" active-color="#01C1B5">
       <van-dropdown-item v-model="value1" @change="onTypeChange" title="回访类型" :options="option1" />
       <van-dropdown-item
         v-model="value2"
@@ -266,7 +266,7 @@ export default {
   min-height: 100vh;
   .visitTime {
     .van-cell__right-icon{
-      line-height: .48rem;
+      line-height: .36rem;
     }
   }
 }
@@ -360,7 +360,7 @@ export default {
 }
 .van-cell{
     color: #1A1A1A;
-    line-height: .48rem!important;
+    line-height: .36rem!important;
     font-size: .16rem;
 }