فهرست منبع

启蒙问卷

1
mo 3 سال پیش
والد
کامیت
9b0d8b49b0

+ 10 - 0
src/components/QrCode/index.vue

@@ -10,6 +10,7 @@
                 <vue-qr :text="codeUrl" style="width: 100%" :margin="0"></vue-qr>
                 <p class="code-url" v-if="codeUrl"><copy-text>{{ codeUrl }}</copy-text></p>
             </div>
+            <el-button v-if="ispreLook" type="primary" style="width:100%" @click="preLook">预 览</el-button>
         </el-dialog>
     </div>
 </template>
@@ -43,6 +44,12 @@ export default {
         },
         codeUrl: {
             type: String
+        },
+        ispreLook:{
+           type: Boolean,
+            default() {
+                return false
+            }
         }
     },
     mounted() {
@@ -57,6 +64,9 @@ export default {
             copy(url)
             this.$message.success('复制成功')
         },
+        preLook(){
+          this.$emit('preLook')
+        }
     },
     watch: {
         value(newValue) {

+ 1 - 1
src/views/resetTeaming/index.vue

@@ -84,7 +84,7 @@
           label="预报名信息"
           name="9"
           :disabled="!teamid"
-          v-if="permission('/teamForecastName')"
+          v-if="permission('/teamForecastNameIndex')"
         >
           <!--         v-if="
             team_status == 'PRE_APPLY' ||

+ 30 - 1
src/views/teamBuild/api.js

@@ -94,4 +94,33 @@ export const sendParentMeetingNotice = data => request2({
   requestType: 'form'
 })
 
-// 审核拒绝
+// 启蒙课问卷列表
+export const getMusicEnlighList = data => request2({
+  url: '/api-web/musicEnlightenmentQuestionnaire/queryPage',
+  params: data,
+  method: 'get',
+  requestType: 'form'
+})
+
+export const getMusicEnlighListDetail = data => request2({
+  url: '/api-web/musicEnlightenmentQuestionnaire/musicEnlightenmentQuestionnaireStat',
+  params: data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 获取短信推送模板
+export const getSysMessageConfig = data => request2({
+  url: '/api-web/sysMessageConfig/getWithType',
+  params: data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 发送启蒙短信
+export const sendEnlighParentMeetingNotice = data => request2({
+  url: '/api-web/musicEnlightenmentQuestionnaire/sendParentMeetingNotice',
+  params: data,
+  method: 'post',
+  requestType: 'form'
+})

+ 94 - 14
src/views/teamBuild/forecastName.vue

@@ -176,14 +176,22 @@
           >
             <template slot-scope="scope">
               {{
-                scope.row.teacherRecommandSubjectId ? scope.row.teacherRecommandSubjectName : null
+                scope.row.teacherRecommandSubjectId
+                  ? scope.row.teacherRecommandSubjectName
+                  : null
               }}
               {{
-                !scope.row.teacherRecommandSubjectName && scope.row.teacherRecommandSubjectId == 999
+                !scope.row.teacherRecommandSubjectName &&
+                scope.row.teacherRecommandSubjectId == 999
                   ? "听从老师安排"
                   : null
               }}
-              {{ !scope.row.teacherRecommandSubjectId && !scope.row.teacherRecommandSubjectName ? '无' : null }}
+              {{
+                !scope.row.teacherRecommandSubjectId &&
+                !scope.row.teacherRecommandSubjectName
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -193,14 +201,21 @@
           >
             <template slot-scope="scope">
               {{
-                scope.row.selectionSubjectId ? scope.row.selectionSubjectName : null
+                scope.row.selectionSubjectId
+                  ? scope.row.selectionSubjectName
+                  : null
               }}
               {{
-                !scope.row.selectionSubjectName && scope.row.selectionSubjectId == 999
+                !scope.row.selectionSubjectName &&
+                scope.row.selectionSubjectId == 999
                   ? "听从老师安排"
                   : null
               }}
-              {{ !scope.row.selectionSubjectId && !scope.row.selectionSubjectName ? '无' : null }}
+              {{
+                !scope.row.selectionSubjectId && !scope.row.selectionSubjectName
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -217,7 +232,11 @@
                   ? "听从老师安排"
                   : null
               }}
-              {{ !scope.row.subjectFirstName && !scope.row.subjectFirst ? '无' : null }}
+              {{
+                !scope.row.subjectFirstName && !scope.row.subjectFirst
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -234,7 +253,11 @@
                   ? "听从老师安排"
                   : null
               }}
-              {{ !scope.row.subjectSecondName && !scope.row.subjectSecond ? '无' : null }}
+              {{
+                !scope.row.subjectSecondName && !scope.row.subjectSecond
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -285,9 +308,19 @@
     </div>
 
     <!-- 预报名链接 -->
-    <qr-code v-model="codeStatus" title="预报名链接" :codeUrl="codeUrl" />
+    <qr-code
+      v-model="codeStatus"
+      title="预报名链接"
+      :codeUrl="codeUrl"
+      @preLook="preLook"
+      :ispreLook="true"
+    />
     <!-- 预报名详情 -->
-     <qr-code v-model="codedetailStatus" title="预报名详情" :codeUrl="detailUrl" />
+    <qr-code
+      v-model="codedetailStatus"
+      title="预报名详情"
+      :codeUrl="detailUrl"
+    />
     <!-- 发送家长会通知 -->
     <el-dialog
       title="发送家长会通知"
@@ -318,6 +351,10 @@
             placeholder="请输入家长会地址"
           ></el-input>
         </el-form-item>
+        <el-form-item label="短信内容">
+          <p class="msgP" v-html="sysMsgStr"></p>
+        </el-form-item>
+        <p style="color: red">确认后该短信将发送给预报名的学员</p>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="extendPaymentStatus = false">取 消</el-button>
@@ -352,6 +389,21 @@
     >
       <intention-model v-if="subjectVisible" @close="subjectVisible = false" />
     </el-dialog>
+
+    <el-dialog
+      title="预览"
+      width="500px"
+      :close-on-click-modal="false"
+      append-to-body
+      :visible.sync="preLookVisible"
+    >
+      <iframe
+        width="100%"
+        height="600px"
+        :src="codeUrl + '&look=true'"
+        frameborder="0"
+      ></iframe>
+    </el-dialog>
   </div>
 </template>
 
@@ -359,7 +411,7 @@
 import pagination from "@/components/Pagination/index";
 import qrCode from "@/components/QrCode/index";
 import { permission } from "@/utils/directivePage";
-import { vaildStudentUrl,vaildTeachingUrl } from "@/utils/validate";
+import { vaildStudentUrl, vaildTeachingUrl } from "@/utils/validate";
 import { Export } from "@/utils/downLoadFile";
 import visitModel from "@/views/withdrawal-application/modals/visit";
 import intentionModel from "./modals/intention";
@@ -367,6 +419,7 @@ import {
   queryPreApplyList,
   finishPreApply,
   sendParentMeetingNotice,
+  getSysMessageConfig
 } from "./api";
 export default {
   name: "forecastName",
@@ -375,7 +428,7 @@ export default {
   data() {
     const query = this.$route.query;
     return {
-      codedetailStatus:false,
+      codedetailStatus: false,
       teamName: query.name || null,
       codeStatus: false,
       musicGroupId: query.id,
@@ -383,7 +436,8 @@ export default {
         vaildStudentUrl() +
         "/project/forecastName/index.html?musicGroupId=" +
         query.id,
-      detailUrl:vaildTeachingUrl()+'/#/preApplySubject?musicGroupId='+query.id,
+      detailUrl:
+        vaildTeachingUrl() + "/#/preApplySubject?musicGroupId=" + query.id,
       searchForm: {
         name: null,
         subjectId: null,
@@ -417,11 +471,19 @@ export default {
           { required: true, message: "请输入家长会地址", trigger: "blur" },
         ],
       },
+      preLookVisible: false,
+      sysMsg:'',
     };
   },
-  mounted() {
+async mounted() {
     this.$store.dispatch("setSubjects");
+         // 获取短信推送模板
+      const rus = await getSysMessageConfig({
+        type: "STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE",
+      });
+      this.sysMsg = rus.data.content;
     this.getList();
+
   },
   methods: {
     permission,
@@ -533,6 +595,24 @@ export default {
         },
       };
     },
+    preLook(val) {
+      this.preLookVisible = true;
+    },
+  },
+  computed: {
+    sysMsgStr() {
+      let strArr = this.sysMsg.split("{}");
+      if (strArr.length == 3) {
+        return `${strArr[0]}<span style="color:red">"${
+          this.extendForm.meetingDate ? this.extendForm.meetingDate : "--"
+        }"</span>${strArr[1]}<span style="color:red">"${
+          this.extendForm.address ? this.extendForm.address : "--"
+        }"</span>
+        ${strArr[2]}`;
+      } else {
+        return ``;
+      }
+    },
   },
 };
 </script>

+ 6 - 3
src/views/teamBuild/forecastNameList.vue

@@ -1,14 +1,15 @@
 <template>
   <div>
     <el-tabs v-model="activeName" >
-      <el-tab-pane label="启蒙课问卷" name="first"><initiationList  :isedit="team_status == 'PRE_APPLY'"/></el-tab-pane>
-      <el-tab-pane label="预报名信息" name="second"><forecastName :isedit="team_status == 'PRE_APPLY'"/></el-tab-pane>
+      <el-tab-pane  label="启蒙课问卷" name="first"  v-if="permission('/initiationList')"><initiationList v-if="activeName=='first'" :isedit="team_status == 'PRE_APPLY'"/></el-tab-pane>
+      <el-tab-pane label="预报名信息" name="second"  v-if="permission('/teamForecastName')"><forecastName v-if="activeName=='second'" :isedit="team_status == 'PRE_APPLY'"/></el-tab-pane>
     </el-tabs>
   </div>
 </template>
 <script>
 import forecastName from './forecastName'
 import initiationList from './initiationList'
+import { permission } from "@/utils/directivePage";
 export default {
   components:{forecastName,initiationList},
   data() {
@@ -19,7 +20,9 @@ export default {
   },
   mounted() {},
   methods: {
-
+        permission(str) {
+      return permission(str);
+    },
   },
 };
 </script>

+ 127 - 68
src/views/teamBuild/initiationList.vue

@@ -13,22 +13,22 @@
         >预报名详情</el-button
       > -->
 
-      <auth :auths="['musicGroup/sendParentMeetingNotice']" v-if="isedit">
+      <auth :auths="['musicEnlightenmentQuestionnaire/sendParentMeetingNotice']" v-if="isedit">
         <el-button type="primary" @click="extendPaymentStatus = true"
           >启蒙课家长会通知</el-button
         >
       </auth>
-      <auth :auths="['forecastName/forecastLink']" v-if="isedit">
+      <auth :auths="['initiationList/forecastLink']" v-if="isedit">
         <el-button type="primary" @click="codeStatus = true"
           >启蒙课问卷</el-button
         >
       </auth>
-      <auth :auths="['studentRegistration/preRegisterExport']">
+      <auth :auths="['export/musicEnlightenmentQuestionnaires']">
         <el-button type="primary" @click="downloadFile"
           >启蒙课问卷导出</el-button
         >
       </auth>
-      <auth :auths="['studentRegistration/queryPreApplySubjectList']">
+      <auth :auths="['musicEnlightenmentQuestionnaire/musicEnlightenmentQuestionnaireStat']">
         <el-button type="primary" @click="subjectVisible = true"
           >启蒙课问卷统计</el-button
         >
@@ -43,22 +43,22 @@
         :model="searchForm"
         ref="searchForm"
       >
-        <el-form-item prop="name">
+        <el-form-item prop="search">
           <el-input
-            v-model.trim="searchForm.name"
+            v-model.trim="searchForm.search"
             clearable
             @keyup.enter.native="search"
             placeholder="学生编号/姓名/手机号"
           ></el-input>
         </el-form-item>
-        <el-form-item prop="currentGrade">
+        <el-form-item prop="currentGradeNum">
           <!-- <el-input
           v-model.trim="searchForm.currentGrade"
           clearable
           placeholder="学员年级"
         ></el-input> -->
           <el-select
-            v-model.trim="searchForm.currentGrade"
+            v-model.trim="searchForm.currentGradeNum"
             filterable
             clearable
             placeholder="请选择年级"
@@ -67,7 +67,7 @@
               v-for="(item, index) in gradeList"
               :key="index"
               :label="item.label"
-              :value="item.label"
+              :value="item.value"
             ></el-option>
           </el-select>
         </el-form-item>
@@ -75,6 +75,7 @@
           <el-select
             clearable
             v-model="searchForm.teacherRecommandSubjectId"
+            filterable
             placeholder="老师推荐声部"
           >
             <el-option
@@ -85,6 +86,16 @@
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item prop="musicalInstrumentsLearning">
+          <el-select
+            clearable
+            v-model="searchForm.musicalInstrumentsLearning"
+            placeholder="是否正在学习某乐器"
+          >
+            <el-option value="true" label="是"></el-option>
+            <el-option value="false" label="否"></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item>
           <el-button type="danger" native-type="seach">搜索</el-button>
           <el-button native-type="reset" type="primary">重置</el-button>
@@ -106,11 +117,11 @@
             prop="userName"
             label="学员姓名"
           ></el-table-column>
-          <el-table-column align="center" prop="gender" label="性别">
+          <!-- <el-table-column align="center" prop="gender" label="性别">
             <template slot-scope="scope">
               {{ scope.row.gender ? "男" : "女" }}
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" prop="phone" label="联系电话">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.phone }}</copy-text>
@@ -127,45 +138,58 @@
             label="老师推荐声部"
           >
             <template slot-scope="scope">
-              {{
-                scope.row.teacherRecommandSubjectId
-                  ? scope.row.teacherRecommandSubjectName
-                  : null
-              }}
-              {{
-                !scope.row.teacherRecommandSubjectName &&
-                scope.row.teacherRecommandSubjectId == 999
-                  ? "听从老师安排"
-                  : null
-              }}
-              {{
-                !scope.row.teacherRecommandSubjectId &&
-                !scope.row.teacherRecommandSubjectName
-                  ? "无"
-                  : null
-              }}
+              <div>
+                {{
+                  scope.row.teacherRecommandSubjectId
+                    ? scope.row.subjectName
+                    : "--"
+                }}
+              </div>
             </template>
           </el-table-column>
           <el-table-column
             align="center"
-            prop="userName"
+            prop="musicalInstrumentsLearning"
             label="是否在学习某件乐器"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="userName"
-            label="目前所学乐器"
-          ></el-table-column>
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.musicalInstrumentsLearning ? "是" : "否" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="userName" label="目前所学乐器">
+            <template slot-scope="scope">
+              <div>
+                {{
+                  scope.row.musicalInstrumentsLearning
+                    ? scope.row.musicalInstrumentsName
+                    : "否"
+                }}
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="userName"
             label="报名参加管乐团家长会了解相关情况"
-          ></el-table-column>
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.joinParentMeeting ? "是" : "否" }}
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
-            prop="userName"
+            prop="remark"
             label="备注"
-          ></el-table-column>
+            width="200px"
+          >
+            <template slot-scope="scope">
+              <overflow-text width="200px" :text="scope.row.remark" />
+            </template>
+          </el-table-column>
         </el-table>
         <pagination
           sync
@@ -179,7 +203,13 @@
     </div>
 
     <!-- 预报名链接 -->
-    <qr-code v-model="codeStatus" title="预报名链接" :codeUrl="codeUrl" />
+    <qr-code
+      v-model="codeStatus"
+      title="启蒙课问卷"
+      :codeUrl="codeUrl"
+      @preLook="preLook"
+      :ispreLook="true"
+    />
     <!-- 预报名详情 -->
     <qr-code
       v-model="codedetailStatus"
@@ -216,7 +246,11 @@
             placeholder="请输入家长会地址"
           ></el-input>
         </el-form-item>
+        <el-form-item label="短信内容" >
+          <p class="msgP" v-html="sysMsgStr"></p> </el-form-item>
+        <p style="color:red">确认后该短信将发送给已填写启蒙课问卷学员</p>
       </el-form>
+
       <div slot="footer" class="dialog-footer">
         <el-button @click="extendPaymentStatus = false">取 消</el-button>
         <el-button type="primary" @click="onExtendPayment('extendForm')"
@@ -224,31 +258,28 @@
         >
       </div>
     </el-dialog>
-    <!-- 回访记录 -->
     <el-dialog
-      title="新增回访"
+      title="启蒙课统计"
       width="600px"
       destroy-on-close
       :close-on-click-modal="false"
-      :visible.sync="visitVisible"
+      :visible.sync="subjectVisible"
     >
-      <visit-model
-        v-if="visitVisible"
-        @close="visitVisible = false"
-        :detail="visitDetail"
-        @submited="getList"
-      />
+      <intention-model v-if="subjectVisible" @close="subjectVisible = false" />
     </el-dialog>
-
-    <!-- 回访记录 -->
     <el-dialog
-      title="意向列表"
-      width="600px"
-      destroy-on-close
+      title="预览"
+      width="500px"
       :close-on-click-modal="false"
-      :visible.sync="subjectVisible"
+      append-to-body
+      :visible.sync="preLookVisible"
     >
-      <intention-model v-if="subjectVisible" @close="subjectVisible = false" />
+      <iframe
+        width="100%"
+        height="600px"
+        :src="codeUrl + '&look=true'"
+        frameborder="0"
+      ></iframe>
     </el-dialog>
   </div>
 </template>
@@ -260,12 +291,13 @@ import { permission } from "@/utils/directivePage";
 import { vaildStudentUrl, vaildTeachingUrl } from "@/utils/validate";
 import { Export } from "@/utils/downLoadFile";
 import visitModel from "@/views/withdrawal-application/modals/visit";
-import intentionModel from "./modals/intention";
+import intentionModel from "./modals/initiationStatistics";
 import { getMusicGroupGradeList } from "@/api/buildTeam";
 import {
-  queryPreApplyList,
+  getSysMessageConfig,
   finishPreApply,
-  sendParentMeetingNotice,
+  sendEnlighParentMeetingNotice,
+  getMusicEnlighList,
 } from "./api";
 export default {
   name: "forecastName",
@@ -280,18 +312,17 @@ export default {
       musicGroupId: query.id,
       codeUrl:
         vaildStudentUrl() +
-        "/project/forecastName/index.html?musicGroupId=" +
+        "/project/forecastName/initiation.html?musicGroupId=" +
         query.id,
       detailUrl:
         vaildTeachingUrl() + "/#/preApplySubject?musicGroupId=" + query.id,
       searchForm: {
-        name: null,
+        search: null,
+        currentGradeNum: null,
         subjectId: null,
         teacherRecommandSubjectId: null,
         selectionSubjectId: null,
-        isAllowAdjust: null,
-        cloudTeacherMethod: null,
-        kitPurchaseMethod: null,
+        musicalInstrumentsLearning: null,
       },
       tableList: [],
       pageInfo: {
@@ -318,6 +349,8 @@ export default {
         ],
       },
       gradeList: [],
+      preLookVisible: false,
+      sysMsg: "",
     };
   },
   mounted() {
@@ -325,12 +358,13 @@ export default {
     this.init();
   },
   methods: {
-    init() {
+    async init() {
       this.teamid = this.$route.query.id;
       getMusicGroupGradeList({ musicGroupId: this.teamid }).then((res) => {
         let result = res.data;
         this.gradeListObj = res.data;
         if (res.code == 200 && result) {
+          this.gradeList = [];
           for (let i in result) {
             this.gradeList.push({
               value: i,
@@ -339,6 +373,11 @@ export default {
           }
         }
       });
+      // 获取短信推送模板
+      const rus = await getSysMessageConfig({
+        type: "STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE",
+      });
+      this.sysMsg = rus.data.content;
       this.getList();
     },
     permission,
@@ -359,19 +398,19 @@ export default {
       Export(
         this,
         {
-          url: "/api-web/studentRegistration/preRegisterExport",
+          url: "/api-web/export/musicEnlightenmentQuestionnaires",
           params: {
             ...params,
             musicGroupId: this.musicGroupId,
           },
-          fileName: "预报名列表.xls",
+          fileName: "启蒙课问卷.xls",
         },
         "是否确认导出报表?"
       );
     },
     async getList() {
       try {
-        const result = await queryPreApplyList({
+        const result = await getMusicEnlighList({
           ...this.searchForm,
           musicGroupId: this.musicGroupId,
           page: this.pageInfo.page,
@@ -427,7 +466,7 @@ export default {
               cancelButtonText: "取消",
               type: "warning",
             });
-            await sendParentMeetingNotice({
+            await sendEnlighParentMeetingNotice({
               ...this.extendForm,
               musicGroupId: this.musicGroupId,
             });
@@ -450,9 +489,29 @@ export default {
         },
       };
     },
+    preLook(val) {
+      this.preLookVisible = true;
+    },
+  },
+  computed: {
+    sysMsgStr() {
+      let strArr = this.sysMsg.split("{}");
+      if (strArr.length == 3) {
+        return `${strArr[0]}<span style="color:red">"${
+          this.extendForm.meetingDate ? this.extendForm.meetingDate : "--"
+        }"</span>${strArr[1]}<span style="color:red">"${this.extendForm.address ? this.extendForm.address:"--"}"</span>
+        ${strArr[2]}`;
+      } else {
+        return ``;
+      }
+    },
   },
 };
 </script>
 
 <style lang="less" scoped>
+.msgP {
+  line-height: 24px;
+  margin-top: 10px;
+}
 </style>

+ 55 - 0
src/views/teamBuild/modals/initiationStatistics.vue

@@ -0,0 +1,55 @@
+<template>
+  <div>
+      <!-- <el-alert title="其它=听从老师安排" type="info" effect="dark" :closable="false"></el-alert> -->
+      <el-table
+        style="width: 100%"
+        max-height="300px"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="list"
+      >
+        <el-table-column prop="subjectName" align="center" label="老师推荐声部">
+        </el-table-column>
+
+        <el-table-column prop="userNum" align="center" label="人数">
+            <template slot-scope="scope">
+                {{ scope.row.userNum }}人
+            </template>
+        </el-table-column>
+           <el-table-column prop="learningUserNum" align="center" label="在学乐器人数">
+          <template slot-scope="scope">
+            {{ scope.row.learningUserNum }}人
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+<script>
+import { getMusicEnlighListDetail } from '../api'
+export default {
+    data() {
+        let query = this.$route.query
+        return {
+            list: [],
+            musicGroupId: query.id
+        }
+    },
+    mounted() {
+        this.FetchList()
+    },
+    methods: {
+        async FetchList() {
+            const res = await getMusicEnlighListDetail({
+                musicGroupId: this.musicGroupId,
+            })
+            this.list = res.data
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+  .dialog-footer{
+    margin-top: 20px;
+    display: block;
+    text-align: right;
+  }
+</style>