mo 4 lat temu
rodzic
commit
eb31929d9f

+ 659 - 423
src/views/reportForm/index.vue

@@ -1,15 +1,18 @@
 <template>
   <div class="m-container">
     <h2>
-      <div class="squrt"></div>报表中心
+      <div class="squrt"></div>
+      报表中心
     </h2>
     <div class="m-core">
       <div class="m-wrap">
         <div class="title">课酬导出:</div>
-        <el-date-picker v-model="mouth"
-                        type="month"
-                        placeholder="选择月"
-                        value-format="yyyy-MM-dd"></el-date-picker>
+        <el-date-picker
+          v-model="mouth"
+          type="month"
+          placeholder="选择月"
+          value-format="yyyy-MM-dd"
+        ></el-date-picker>
         <!-- <el-select v-model.trim="courseScheduleType"
                    style="marginLeft:10px"
                    filterable
@@ -21,210 +24,338 @@
                      :label="item.label"
                      :value="item.value"></el-option>
         </el-select> -->
-        <el-button style="margin-left: 10px;" type="primary" @click="exportSalar"  v-permission="'export/teacherSalary'">导出</el-button>
-        <el-tooltip placement="top"
-                    popper-class="mTooltip">
-          <div slot="content">
-            将只导出当前选择月份已结算的课程课酬。
-          </div>
-          <i class="el-icon-question micon el-tooltip"
-             style="font-size: 18px; color: #F56C6C"
-             v-permission="'export/teacherSalary'"></i>
+        <el-button
+          style="margin-left: 10px"
+          type="primary"
+          @click="exportSalar"
+          v-permission="'export/teacherSalary'"
+          >导出</el-button
+        >
+        <el-tooltip placement="top" popper-class="mTooltip">
+          <div slot="content">将只导出当前选择月份已结算的课程课酬。</div>
+          <i
+            class="el-icon-question micon el-tooltip"
+            style="font-size: 18px; color: #f56c6c"
+            v-permission="'export/teacherSalary'"
+          ></i>
         </el-tooltip>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">乐团招生汇总:
-          </div>
-          <select-all v-model.trim="organIdList"
-                     class="organSelect"
-                     style="width:100%"
-                     filterable
-                     placeholder="请选择分部"
-                     multiple
-                     clearable>
-            <el-option v-for="(item,index) in selects.branchs"
-                       :key="index"
-                       :label="item.name"
-                       :value="item.id"></el-option>
+          <div class="title">乐团招生汇总:</div>
+          <select-all
+            v-model.trim="organIdList"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            placeholder="请选择分部"
+            multiple
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
           </select-all>
-          <el-button style="margin-left: 10px;" type="primary"  @click="exportMusicGroup"
-               v-permission="'export/musicGroupRegister'">导出</el-button>
-          <el-tooltip placement="top"
-                      popper-class="mTooltip">
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportMusicGroup"
+            v-permission="'export/musicGroupRegister'"
+            >导出</el-button
+          >
+          <el-tooltip placement="top" popper-class="mTooltip">
             <div slot="content">
               请选择分部后,导出招生情况汇总表,分部可多选
             </div>
-            <i class="el-icon-question micon el-tooltip"
-               v-permission="'export/musicGroupRegister'"
-               style="font-size: 18px; color: #F56C6C"></i>
+            <i
+              class="el-icon-question micon el-tooltip"
+              v-permission="'export/musicGroupRegister'"
+              style="font-size: 18px; color: #f56c6c"
+            ></i>
           </el-tooltip>
         </div>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">老师默认课酬:
-          </div>
-          <select-all v-model.trim="teacherDefaultSalaryOrganId"
-                     class="organSelect"
-                     style="width:100%"
-                     filterable
-                     placeholder="请选择分部"
-                     multiple
-                     clearable>
-            <el-option v-for="(item,index) in selects.branchs"
-                       :key="index"
-                       :label="item.name"
-                       :value="item.id"></el-option>
+          <div class="title">老师默认课酬:</div>
+          <select-all
+            v-model.trim="teacherDefaultSalaryOrganId"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            placeholder="请选择分部"
+            multiple
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
           </select-all>
 
-          <el-button style="margin-left: 10px;" type="primary"  @click="exportDefaultSalary"
-               v-permission="'export/teacherDefaultSalary'">导出</el-button>
-          <el-tooltip placement="top"
-                      popper-class="mTooltip">
-            <div slot="content">
-              请选择分部后,导出老师列表及老师课酬信息
-            </div>
-            <i class="el-icon-question micon el-tooltip"
-               style="font-size: 18px; color: #F56C6C"
-               v-permission="'export/teacherDefaultSalary'"></i>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportDefaultSalary"
+            v-permission="'export/teacherDefaultSalary'"
+            >导出</el-button
+          >
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">请选择分部后,导出老师列表及老师课酬信息</div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+              v-permission="'export/teacherDefaultSalary'"
+            ></i>
           </el-tooltip>
         </div>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">乐团在读人数:
-          </div>
-          <select-all v-model.trim="musicTeamNum"
-                     class="organSelect"
-                     style="width:100%"
-                     filterable
-                     multiple
-                     placeholder="请选择分部"
-                     clearable>
-            <el-option v-for="(item,index) in selects.branchs"
-                       :key="index"
-                       :label="item.name"
-                       :value="item.id"></el-option>
+          <div class="title">乐团在读人数:</div>
+          <select-all
+            v-model.trim="musicTeamNum"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            multiple
+            placeholder="请选择分部"
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
           </select-all>
-          <el-button style="margin-left: 10px;" type="primary"  @click="exportMusicTeamNum"
-               v-permission="'export/musicGroupNormalStudentNum'">导出</el-button>
-          <el-tooltip placement="top"
-                      popper-class="mTooltip">
-            <div slot="content">
-              请选择分部后,导出乐团在读人数信息
-            </div>
-            <i class="el-icon-question micon el-tooltip"
-               style="font-size: 18px; color: #F56C6C"
-               v-permission="'export/teacherDefaultSalary'"></i>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportMusicTeamNum"
+            v-permission="'export/musicGroupNormalStudentNum'"
+            >导出</el-button
+          >
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">请选择分部后,导出乐团在读人数信息</div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+              v-permission="'export/teacherDefaultSalary'"
+            ></i>
           </el-tooltip>
         </div>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">回款统计:
-          </div>
-          <select-all v-model.trim="studentOrganId"
-                     class="organSelect"
-                     style="width:100%"
-                     filterable
-                     placeholder="请选择分部"
-                     multiple
-                     clearable>
-            <el-option v-for="(item,index) in selects.branchs"
-                       :key="index"
-                       :label="item.name"
-                       :value="item.id"></el-option>
+          <div class="title">回款统计:</div>
+          <select-all
+            v-model.trim="studentOrganId"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            placeholder="请选择分部"
+            multiple
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
           </select-all>
-          <el-date-picker style="margin-left: 15px;"
-                          v-model="studentMonth"
-                          type="month"
-                          placeholder="选择月"
-                          value-format="yyyy-MM-dd"></el-date-picker>
-          <el-button style="margin-left: 10px;" type="primary" @click="exportStudent"
-               v-permission="'export/studentOrder'">导出</el-button>
-          <el-tooltip placement="top"
-                      popper-class="mTooltip">
-            <div slot="content">
-              请选择分部和月份,导出回款统计
-            </div>
-            <i class="el-icon-question micon el-tooltip"
-               style="font-size: 18px; color: #F56C6C"
-               v-permission="'export/studentOrder'"></i>
+          <el-date-picker
+            style="margin-left: 15px"
+            v-model="studentMonth"
+            type="month"
+            placeholder="选择月"
+            value-format="yyyy-MM-dd"
+          ></el-date-picker>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportStudent"
+            v-permission="'export/studentOrder'"
+            >导出</el-button
+          >
+          <el-tooltip placement="top" popper-class="mTooltip">
+            <div slot="content">请选择分部和月份,导出回款统计</div>
+            <i
+              class="el-icon-question micon el-tooltip"
+              style="font-size: 18px; color: #f56c6c"
+              v-permission="'export/studentOrder'"
+            ></i>
           </el-tooltip>
         </div>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">学生考勤:
-          </div>
-          <select-all v-model.trim="attendanceOrganId"
-                     class="organSelect"
-                     style="width:100%"
-                     filterable
-                     multiple
-                     placeholder="请选择分部"
-                     clearable>
-            <el-option v-for="(item,index) in selects.branchs"
-                       :key="index"
-                       :label="item.name"
-                       :value="item.id"></el-option>
+          <div class="title">学生考勤:</div>
+          <select-all
+            v-model.trim="attendanceOrganId"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            multiple
+            placeholder="请选择分部"
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
           </select-all>
-          <el-select v-model.trim="attendanceCourseType"
-                     class="organSelect"
-                     style=" margin-left: 15px; width:100%"
-                     filterable
-                     placeholder="请选择课程类型">
-            <el-option v-for="(item,index) in courseListType"
-                       :key="index"
-                       :label="item.label"
-                       :value="item.value"></el-option>
+          <el-select
+            v-model.trim="attendanceCourseType"
+            class="organSelect"
+            style="margin-left: 15px; width: 100%"
+            filterable
+            placeholder="请选择课程类型"
+          >
+            <el-option
+              v-for="(item, index) in courseListType"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
           </el-select>
-          <el-date-picker v-model.trim="timer"
-                          style="width:420px;margin-left: 15px;"
-                          type="daterange"
-                          value-format="yyyy-MM-dd"
-                          range-separator="至"
-                          start-placeholder="上课开始日期"
-                          end-placeholder="上课结束日期"
-                          :picker-options="{
-                            firstDayOfWeek: 1
-                          }"
+          <el-date-picker
+            v-model.trim="timer"
+            style="width: 420px; margin-left: 15px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="上课开始日期"
+            end-placeholder="上课结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
           ></el-date-picker>
-          <el-button style="margin-left: 10px;" type="primary" @click="exportAttendance"
-               v-permission="'export/exportStudentAttendances'">导出</el-button>
-          <!-- <el-tooltip placement="top"
-                      popper-class="mTooltip">
-            <div slot="content">
-              请选择分部和月份,导出回款统计
-            </div>
-            <i class="el-icon-question micon el-tooltip"
-               style="font-size: 18px; color: #F56C6C"
-               v-permission="'export/studentOrder'"></i>
-          </el-tooltip> -->
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportAttendance"
+            v-permission="'export/exportStudentAttendances'"
+            >导出</el-button
+          >
         </div>
       </div>
       <el-divider></el-divider>
       <div class="m-core">
         <div class="m-wrap">
-          <div class="title">乐保订单导出:
-          </div>
+          <div class="title">课程余额明细:</div>
+          <select-all
+            v-model.trim="AccountOrganId"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            multiple
+            placeholder="请选择分部"
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </select-all>
+          <el-date-picker
+            v-model.trim="AccountTimer"
+            style="width: 420px; margin-left: 15px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+          ></el-date-picker>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportAccount"
+            v-permission="'export/userCoursesAccount/4388'"
+            >导出</el-button
+          >
+        </div>
+      </div>
+      <el-divider></el-divider>
+      <div class="m-core">
+        <div class="m-wrap">
+          <div class="title">账户余额明细:</div>
+          <select-all
+            v-model.trim="AccountDetailOrganId"
+            class="organSelect"
+            style="width: 100%"
+            filterable
+            multiple
+            placeholder="请选择分部"
+            clearable
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </select-all>
+          <el-date-picker
+            v-model.trim="AccountDetailTimer"
+            style="width: 420px; margin-left: 15px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+          ></el-date-picker>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportDetailAccount"
+            v-permission="'export/userCoursesAccount/4389'"
+            >导出</el-button
+          >
+        </div>
+      </div>
+      <el-divider></el-divider>
+      <div class="m-core">
+        <div class="m-wrap">
+          <div class="title">乐保订单导出:</div>
           <el-date-picker
             v-model="leBaoTimer"
-            style="width:420px;margin-left: 15px;"
+            style="width: 420px; margin-left: 15px"
             type="monthrange"
             value-format="yyyy-MM-dd"
             range-separator="至"
             start-placeholder="开始月份"
-            end-placeholder="结束月份">
+            end-placeholder="结束月份"
+          >
           </el-date-picker>
-          <el-button style="margin-left: 10px;" type="primary" @click="exportLeBao"
-               v-permission="'studentInstrument/export'">导出</el-button>
+          <el-button
+            style="margin-left: 10px"
+            type="primary"
+            @click="exportLeBao"
+            v-permission="'studentInstrument/export'"
+            >导出</el-button
+          >
           <!-- <el-tooltip placement="top"
                       popper-class="mTooltip">
             <div slot="content">
@@ -240,344 +371,449 @@
   </div>
 </template>
 <script>
-import { exportTeacherSalary } from '@/api/generalSettings'
-import { courseType, courseListType } from '@/utils/searchArray'
-import { Export } from '@/utils/downLoadFile'
-import cleanDeep from 'clean-deep'
-import dayjs from 'dayjs'
-import axios from 'axios'
-import qs from 'qs'
-import {
-  getToken
-} from '@/utils/auth'
-import load from '@/utils/loading'
+import { exportTeacherSalary } from "@/api/generalSettings";
+import { courseType, courseListType } from "@/utils/searchArray";
+import { Export } from "@/utils/downLoadFile";
+import cleanDeep from "clean-deep";
+import dayjs from "dayjs";
+import axios from "axios";
+import qs from "qs";
+import { getToken } from "@/utils/auth";
+import load from "@/utils/loading";
 export default {
   name: "reportForm",
-  data () {
+  data() {
     return {
       mouth: "",
       organIdList: [],
-      teacherDefaultSalaryOrganId: '',
+      teacherDefaultSalaryOrganId: "",
       courseArray: courseType,
       courseListType,
       courseScheduleType: [],
       musicTeamNum: [],
-      studentOrganId: '',
-      studentMonth: '',
+      studentOrganId: "",
+      studentMonth: "",
       attendanceOrganId: [],
-      attendanceCourseType: 'MUSIC',
+      attendanceCourseType: "MUSIC",
       timer: [],
-      leBaoTimer: []
+      leBaoTimer: [],
+      AccountOrganId: [],
+      AccountTimer: [],
+      AccountDetailOrganId: [],
+      AccountDetailTimer: [],
     };
   },
-  mounted () {
-    this.$store.dispatch('setBranchs')
+  mounted() {
+    this.$store.dispatch("setBranchs");
   },
   methods: {
-    exportSalar () {
+    exportSalar() {
       if (!this.mouth) {
-        this.$message.error('请选择导出月份')
-        return
+        this.$message.error("请选择导出月份");
+        return;
       }
       // let courseTypeList = this.courseScheduleType.join(',')
-      let url = '/api-web/export/teacherSalary'
-      let data = { date: this.mouth }
+      let url = "/api-web/export/teacherSalary";
+      let data = { date: this.mouth };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出课酬', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出课酬", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate()
-              let fname = ymd + '课酬.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "课酬.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    exportMusicGroup () {
+    exportMusicGroup() {
       if (this.organIdList.length < 1) {
-        this.$message.error('请至少选择一个分部')
-        return
+        this.$message.error("请至少选择一个分部");
+        return;
       }
-      let url = '/api-web/export/musicGroupRegister'
-      let data = { organIds: this.organIdList.join(',') }
+      let url = "/api-web/export/musicGroupRegister";
+      let data = { organIds: this.organIdList.join(",") };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出招生情况汇总表', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出招生情况汇总表", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate()
-              let fname = ymd + '招生情况汇总表.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "招生情况汇总表.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    exportDefaultSalary () {
-
-      let organIdList = this.teacherDefaultSalaryOrganId.join(',')
-      let url = '/api-web/export/teacherDefaultSalary'
-      let data = { organIdList }
+    exportDefaultSalary() {
+      let organIdList = this.teacherDefaultSalaryOrganId.join(",");
+      let url = "/api-web/export/teacherDefaultSalary";
+      let data = { organIdList };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出老师默认课酬表', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出老师默认课酬表", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate()
-              let fname = ymd + '老师默认课酬表.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "老师默认课酬表.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    exportMusicTeamNum () {
-      let organIds = this.musicTeamNum.join(',')
-      let url = '/api-web/export/musicGroupNormalStudentNum'
-      let data = { organIds }
+    exportMusicTeamNum() {
+      let organIds = this.musicTeamNum.join(",");
+      let url = "/api-web/export/musicGroupNormalStudentNum";
+      let data = { organIds };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出乐团在读人数', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出乐团在读人数", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate()
-              let fname = ymd + '乐团在读人数.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "乐团在读人数.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    exportStudent () {
+    exportStudent() {
       if (!this.studentMonth) {
-        this.$message.error('请选择导出月份')
-        return
+        this.$message.error("请选择导出月份");
+        return;
       }
-      let studentOrganId = this.studentOrganId.join(',')
-      let url = '/api-web/export/studentOrder'
-      let data = { organIds: studentOrganId, date: this.studentMonth }
+      let studentOrganId = this.studentOrganId.join(",");
+      let url = "/api-web/export/studentOrder";
+      let data = { organIds: studentOrganId, date: this.studentMonth };
       const options = {
-        method: 'POST',
+        method: "POST",
         headers: {
-          'Authorization': getToken()
+          Authorization: getToken(),
         },
         data: qs.stringify(cleanDeep(data)),
         url,
-        responseType: 'blob'
-      }
-      this.$confirm('您确定导出回款统计', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        load.startLoading()
-        axios(options).then(res => {
-          let blob = new Blob([res.data], {
-            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
-            type: 'application/vnd.ms-excel;charset=utf-8'
-            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
-          })
+        responseType: "blob",
+      };
+      this.$confirm("您确定导出回款统计", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          load.startLoading();
+          axios(options)
+            .then((res) => {
+              let blob = new Blob([res.data], {
+                // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+                type: "application/vnd.ms-excel;charset=utf-8",
+                //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+              });
 
-          let text = (new Response(blob)).text()
-          text.then(res => {
-            // 判断是否报错
-            if (res.indexOf('code') != -1) {
-              let json = JSON.parse(res)
-              this.$message.error(json.msg)
-            } else {
-              let objectUrl = URL.createObjectURL(blob)
-              let link = document.createElement("a")
-              let nowTime = new Date()
-              let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate()
-              let fname = ymd + '回款统计.xls' //下载文件的名字
-              link.href = objectUrl
-              link.setAttribute("download", fname)
-              document.body.appendChild(link)
-              link.click()
-            }
-          })
-          load.endLoading();
-        }).catch(error => {
-          this.$message.error('导出数据失败,请联系管理员');
-          load.endLoading();
+              let text = new Response(blob).text();
+              text.then((res) => {
+                // 判断是否报错
+                if (res.indexOf("code") != -1) {
+                  let json = JSON.parse(res);
+                  this.$message.error(json.msg);
+                } else {
+                  let objectUrl = URL.createObjectURL(blob);
+                  let link = document.createElement("a");
+                  let nowTime = new Date();
+                  let ymd =
+                    nowTime.getFullYear() +
+                    "" +
+                    (nowTime.getMonth() + 1) +
+                    "" +
+                    nowTime.getDate();
+                  let fname = ymd + "回款统计.xls"; //下载文件的名字
+                  link.href = objectUrl;
+                  link.setAttribute("download", fname);
+                  document.body.appendChild(link);
+                  link.click();
+                }
+              });
+              load.endLoading();
+            })
+            .catch((error) => {
+              this.$message.error("导出数据失败,请联系管理员");
+              load.endLoading();
+            });
         })
-      }).catch(() => { })
+        .catch(() => {});
     },
-    exportAttendance () {
+    exportAttendance() {
       let classStartDate, classEndDate;
       if (this.timer && this.timer.length > 0) {
-        classStartDate = this.timer[0]
-        classEndDate = this.timer[1]
+        classStartDate = this.timer[0];
+        classEndDate = this.timer[1];
       } else {
-        classStartDate = null
-        classEndDate = null
+        classStartDate = null;
+        classEndDate = null;
       }
-      Export(this, {
-        url: '/api-web/export/exportStudentAttendances',
-        fileName: '学生考勤.xls',
-        method: 'post',
-        params: qs.stringify({ organId: this.attendanceOrganId.join(','), groupType: this.attendanceCourseType, classStartDate, classEndDate })
-      }, '您确定导出学生考勤?')
+      Export(
+        this,
+        {
+          url: "/api-web/export/exportStudentAttendances",
+          fileName: "学生考勤.xls",
+          method: "post",
+          params: qs.stringify({
+            organId: this.attendanceOrganId.join(","),
+            groupType: this.attendanceCourseType,
+            classStartDate,
+            classEndDate,
+          }),
+        },
+        "您确定导出学生考勤?"
+      );
     },
-    exportLeBao () {
+    exportLeBao() {
       let endTime, startTime;
       if (this.leBaoTimer && this.leBaoTimer.length > 1) {
-        startTime = this.leBaoTimer[0]
-        let end = this.leBaoTimer[1]
-        end = new Date(end)
-        end = new Date(end.getFullYear(), end.getMonth() + 1, 0)
-        endTime = dayjs(end).format('YYYY-MM-DD')
+        startTime = this.leBaoTimer[0];
+        let end = this.leBaoTimer[1];
+        end = new Date(end);
+        end = new Date(end.getFullYear(), end.getMonth() + 1, 0);
+        endTime = dayjs(end).format("YYYY-MM-DD");
       } else {
-        this.$message.error('请选择导出月份')
-        return
+        this.$message.error("请选择导出月份");
+        return;
       }
-      Export(this, {
-        url: '/api-web/studentInstrument/export',
-        fileName: '乐保订单.xls',
-        method: 'get',
-        params: { startTime: startTime, endTime: endTime }
-      }, '您确定导出乐保订单?')
+      Export(
+        this,
+        {
+          url: "/api-web/studentInstrument/export",
+          fileName: "乐保订单.xls",
+          method: "get",
+          params: { startTime: startTime, endTime: endTime },
+        },
+        "您确定导出乐保订单?"
+      );
     },
-  }
-
+    exportAccount(){
+      let endTime, startTime;
+      if (this.AccountTimer && this.AccountTimer.length > 1) {
+        startTime = this.AccountTimer[0];
+        let end = this.AccountTimer[1];
+        end = new Date(end);
+        end = new Date(end.getFullYear(), end.getMonth() + 1, 0);
+        endTime = dayjs(end).format("YYYY-MM-DD");
+      }else{
+        startTime=null;
+        endTime=null;
+      }
+      Export(
+        this,
+        {
+          url: "/api-web/export/userCoursesAccount",
+          fileName: "课程余额明细.xls",
+          method: "post",
+          params: { startTime: startTime, endTime: endTime,organId: this.AccountOrganId.join(",") },
+        },
+        "您确定导出课程余额明细?"
+      );
+    },
+    exportDetailAccount(){
+      let endTime, startTime;
+      if (this.AccountDetailTimer && this.AccountDetailTimer.length > 1) {
+        startTime = this.AccountDetailTimer[0];
+        let end = this.AccountDetailTimer[1];
+        end = new Date(end);
+        end = new Date(end.getFullYear(), end.getMonth() + 1, 0);
+        endTime = dayjs(end).format("YYYY-MM-DD");
+      }else{
+        startTime=null;
+        endTime=null;
+      }
+      Export(
+        this,
+        {
+          url: "/api-web/export/userCoursesAccount",
+          fileName: "账户余额明细.xls",
+          method: "post",
+          params: { startTime: startTime, endTime: endTime,organId: this.AccountDetailOrganId.join(",") },
+        },
+        "您确定导出账户余额明细明细?"
+      );
+    }
+  },
+  // AccountDetailTimer
 };
 </script>
 <style lang="scss" scoped>

+ 21 - 1
src/views/resetTeaming/modals/user-pay-form.vue

@@ -81,7 +81,12 @@
     <template>
       <el-alert title="缴费设置" :closable="false" class="alert" type="info">
       </el-alert>
+
       <el-form ref="payment" :model="payment">
+        <el-form-item label-width="160px"
+          label="系统缴费金额" v-if="!paymentType&&type=='user'&&(courseViewType==2||courseViewType==3)">
+          <el-input :disabled="true"></el-input>
+          </el-form-item>
         <el-form-item
           label-width="160px"
           label="缴费方式"
@@ -200,7 +205,7 @@ import otherform from "./other";
 import baseInfoVue from "../../teamDetail/components/baseInfo.vue";
 import merge from "webpack-merge";
 import numeral from "numeral";
-
+import { organizationCloudTeacherFeeQueryPage } from '@/api/specialSetting'
 const paymentTypeFormat = {
   0: "MUSIC_APPLY",
   1: "MUSIC_RENEW",
@@ -251,6 +256,8 @@ export default {
       viewDetail: null,
       organizationCourseUnitPriceSettingsByType: {},
       paymentPatternTypeOptions: objectToOptions(paymentPatternType),
+      cloudFee:'',
+      courseViewType:''
     };
   },
   computed: {
@@ -372,6 +379,19 @@ export default {
   },
   methods: {
     async init() {
+      let organId = this.baseInfo?.musicGroup?.organId
+       this.courseViewType = this.baseInfo?.musicGroup?.courseViewType
+      // 如果为学员缴费且是乐团缴费则显示云教练的价格
+      if(!this.paymentType&&this.type=='user'&&organId&&(courseViewType==2||courseViewType==3)){
+        try{
+          const res = await organizationCloudTeacherFeeQueryPage({organId})
+          this.courseViewType==2?this.cloudFee = res.data.rows[0].price:this.cloudFee = res.data.rows[0].plusPrice
+        }catch(e){
+          console.log(e)
+        }
+        // 获取乐团云教练费用
+        // this.cloudFee
+      }
       this.getCharges();
       if (this.rowDetail) {
         for (const key in paymentTypeFormat) {