Explorar o código

Merge branch '0601Action' into test

mo %!s(int64=4) %!d(string=hai) anos
pai
achega
5acca7d60e

+ 11 - 1
src/api/systemManage.js

@@ -46,6 +46,16 @@ export function queryByOrganId (data) {
   })
 }
 
+// 根据合作单位获取乐团
+
+export function getMusicGroup (data) {
+  return request({
+    url: api + '/musicGroup/findByCooperationId',
+    method: 'get',
+    params: data
+  })
+}
+
 // 分页查询教学点
 export function schoolQueryPage (data) {
   return request({
@@ -351,4 +361,4 @@ export function queryEmployeeOrganByUser(data) {
     method: 'get',
     params: data
   })
-}
+}

+ 4 - 0
src/router/index.js

@@ -401,6 +401,10 @@ export const asyncRoutes = {
   // 问卷管理
   setQuestions: () => import('@/views/setQuestions'),
   questionOperation: () => import('@/views/setQuestions/operation'),
+  // 21暑期考级
+  childrensDay:()=>import('@/views/childrensDay'),
+  // 考级详情
+  childrensdayDetail:()=>import('@/views/childrensDay/detail'),
 }
 
 export default router

+ 12 - 0
src/store/modules/permission.js

@@ -367,6 +367,18 @@ function setDetailRoute(accessedRoutes) {
             activeMenu: '/otherManager/reaplceMusicPlayer'
           }
         },
+        {
+          name: '活动详情',
+          path: 'childrensdayDetail',
+          component: () => import('@/views/childrensDay/detail'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '活动详情',
+            belongTopMenu: "/business",
+            activeMenu: '/childrensDay'
+          }
+        },
         // /otherManager/reaplceMusicPlayer /reaplceMusicPlayer/answer
 
       ])

+ 24 - 0
src/views/childrensDay/api.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+import request2 from '@/utils/request2'
+import qs from 'qs'
+let api = '/api-web'
+
+
+
+// 获取活动列表
+export function getMusicGroupGradeList(data) {
+  return request2({
+    url: api + '/childrenReserve/queryStatisticsPage',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取活动详情列表
+export function getMusicGroupDetail(data) {
+  return request2({
+    url: api + '/childrenReserve/queryStatisticsDetailPage',
+    method: 'get',
+    params: data
+  })
+}

+ 279 - 0
src/views/childrensDay/detail.vue

@@ -0,0 +1,279 @@
+
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <el-page-header
+        @back="onCancel"
+        :content="musicGroupName"
+      ></el-page-header>
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref='searchForm'
+      >
+        <el-form-item prop="organId">
+          <el-input
+            v-model="searchForm.search"
+            placeholder="学员姓名/编号/手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="isReserve">
+          <el-select
+            v-model.trim="searchForm.isReserve"
+            filterable
+            clearable
+            placeholder="是否预约"
+          >
+            <el-option value="0" label="否"></el-option>
+            <el-option value="1" label="是"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="subjectId">
+          <el-select
+            v-model.trim="searchForm.subjectId"
+            filterable
+            clearable
+            placeholder="声部"
+          >
+            <el-option
+              v-for="(item, index) in soundList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.school"
+            filterable
+            clearable
+            placeholder="是否参加乐器考级"
+          >
+            <el-option value="0" label="否"></el-option>
+            <el-option value="1" label="是"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.school"
+            filterable
+            clearable
+            placeholder="是否参加乐理考级"
+          >
+            <el-option value="0" label="否"></el-option>
+            <el-option value="1" label="是"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.school"
+            filterable
+            clearable
+            placeholder="是否购买VIP"
+          >
+            <el-option value="0" label="否"></el-option>
+            <el-option value="1" label="是"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.school"
+            filterable
+            clearable
+            placeholder="是否购买乐理课"
+          >
+            <el-option value="0" label="否"></el-option>
+            <el-option value="1" label="是"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+
+      <statistic :col="6" class="statistic" :cols="0">
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+      </statistic>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="username"
+            label="学员姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userId"
+            label="学员编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="isReserve"
+            label="是否预约"
+          >
+          <template slot-scope="scope">
+            <div>
+              {{scope.row.isReserve?'是':'否'}}
+            </div>
+          </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="报考器乐等级"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="乐理报考等级"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="是否购买VIP"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="是否购买乐理课"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="支付金额"
+          ></el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { getMusicGroupDetail } from "./api";
+import { getSubject } from "@/api/buildTeam";
+import countTo from "vue-count-to";
+export default {
+  components: { pagination, "count-to": countTo },
+
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        isReserve: null,
+        subjectId: null,
+      },
+
+      tableList: [{}],
+      soundList: [],
+      cooperationList: [],
+      musicList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      musicGroupName: "",
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.musicGroupName = this.$route.query.musicGroupName || "对外分部";
+      getSubject({
+      }).then((res) => {
+        if (res.code == 200) {
+          this.soundList = res.data;
+        }
+      });
+      this.getList()
+    },
+    async getList() {
+      try {
+        const res = await getMusicGroupDetail({ page: this.rules.page,
+          rows: this.rules.limit,
+          ...this.searchForm,musicGroupId:this.$route.query.musicGroupId});
+          this.tableList = res.data.rows;
+          this.rules.total = res.data.total
+      } catch {}
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {},
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({
+        path: "/childrensDay",
+      });
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.statistic {
+  .statistic-content > span {
+    font-size: 20px !important;
+    &:first-child {
+      font-size: 24px !important;
+      color: rgba(0, 0, 0, 0.85);
+      font-weight: bold;
+    }
+  }
+}
+</style>

+ 312 - 0
src/views/childrensDay/index.vue

@@ -0,0 +1,312 @@
+
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      21暑期考级
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        ref='searchForm'
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            filterable
+            v-model.trim="searchForm.organId"
+            clearable
+            placeholder="请选择分部"
+            @change="changeOrgan"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="cooperationId">
+          <el-select
+            v-model.trim="searchForm.cooperationId"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+            @change="changeCooper"
+          >
+            <el-option
+              v-for="(item, index) in cooperationList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="musicGroupId">
+          <el-select
+            v-model.trim="searchForm.musicGroupId"
+            clearable
+            filterable
+            placeholder="请选择乐团"
+            :disabled="!searchForm.cooperationId"
+          >
+            <el-option
+              v-for="(item, index) in musicList"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="btnList">
+        <el-button type="primary" @click="onCreateQRCode('placeholder')"
+          >占位链接</el-button
+        >
+        <el-button type="primary">器乐考级链接</el-button>
+        <el-button type="primary">VIP课程链接</el-button>
+        <el-button type="primary">乐理考级链接</el-button>
+        <el-button type="primary">导出</el-button>
+      </div>
+      <statistic :col="6" class="statistic" :cols="0">
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+        <statistic-item>
+          <span><count-to :endVal="3000" /></span>
+          <span>器乐考级人次</span>
+        </statistic-item>
+      </statistic>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="cooperationOrganName"
+            label="合作单位"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupName"
+            label="乐团名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="normalNum"
+            label="在读人数"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="reserveNum"
+            label="预约人数"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="noReserveNum"
+            label="未预约人数"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="instrumentalMusicNum"
+            label="器乐考级人次"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicTheoryNum"
+            label="乐理考级人次"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="buyVipNum"
+            label="vip课购买人数"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="buyVipAmount"
+            label="vip课成交金额"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="buyMusicTheoryNum"
+            label="乐理课购买人数"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="buyMusicTheoryAmount"
+            label="乐理课成交金额"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text" @click="gotoDetail(scope.row)"
+                  >详情</el-button
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <qr-code v-model="codeStatus" :title="codeTitle" :codeUrl="qrCodeUrl" />
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import qrCode from "@/components/QrCode/index";
+import { vaildStudentUrl } from "@/utils/validate";
+import load from "@/utils/loading";
+import { queryByOrganId, getSchool, getMusicGroup } from "@/api/systemManage";
+import { getMusicGroupGradeList } from "./api";
+import countTo from "vue-count-to";
+export default {
+  components: { pagination, "count-to": countTo, qrCode },
+
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+        cooperationId: null,
+        musicGroupId: null,
+      },
+      codeStatus: false,
+      codeTitle: null,
+      qrCodeUrl: null,
+      tableList: [],
+      cooperationList: [],
+      musicList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      try {
+        const res = await getMusicGroupGradeList({
+          page: this.rules.page,
+          rows: this.rules.limit,
+          ...this.searchForm,
+        });
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch (e) {}
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.rules = {
+        ...this.rules,
+        page: 1,
+      };
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    onCreateQRCode(status) {
+      if (status == "placeholder") {
+        this.codeTitle = "占位链接";
+        this.qrCodeUrl = vaildStudentUrl() + "/#/childrenSeat";
+      }
+      this.codeStatus = true;
+    },
+    changeOrgan(val) {
+      this.searchForm.cooperationId = null;
+      this.searchForm.musicGroupId = null;
+      if (val) {
+        queryByOrganId({ organId: val }).then((res) => {
+          if (res.code == 200) {
+            this.cooperationList = res.data;
+          }
+        });
+      }
+    },
+    changeCooper(val) {
+      this.searchForm.musicGroupId = null;
+      if (val) {
+        getMusicGroup({ cooperationId: val }).then((res) => {
+          this.musicList = res.data;
+        });
+      }
+    },
+    gotoDetail(row) {
+      // query:{'musicGroupId':}
+      this.$router.push({ path: "/business/childrensdayDetail",query:{'musicGroupId':row.musicGroupId,'musicGroupName':row.musicGroupName} });
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.statistic {
+  .statistic-content > span {
+    font-size: 20px !important;
+    &:first-child {
+      font-size: 24px !important;
+      color: rgba(0, 0, 0, 0.85);
+      font-weight: bold;
+    }
+  }
+}
+</style>