mo 3 years ago
parent
commit
1f85c4b514
55 changed files with 860 additions and 132 deletions
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-08128ceb.10ae0cf4.css
  3. 0 0
      dist/static/css/chunk-2032a5f9.5d128770.css
  4. 1 0
      dist/static/css/chunk-292153ca.c8ad809f.css
  5. 0 0
      dist/static/css/chunk-3696b1b1.e55e65ab.css
  6. 0 0
      dist/static/css/chunk-588eee5a.e8e2939e.css
  7. 0 1
      dist/static/css/chunk-7ca32848.afb0f5ab.css
  8. 0 0
      dist/static/css/chunk-9c444f74.375b4147.css
  9. 0 0
      dist/static/css/chunk-b9b32b50.999ac1fb.css
  10. 0 0
      dist/static/css/chunk-c3b849c6.1ceb58fc.css
  11. 0 0
      dist/static/js/app.4e475c17.js
  12. 0 0
      dist/static/js/chunk-00de1148.d454f70e.js
  13. 0 0
      dist/static/js/chunk-026cbb1a.dadc766c.js
  14. 0 0
      dist/static/js/chunk-0491b8f1.26e40d13.js
  15. 1 0
      dist/static/js/chunk-08128ceb.61f67b76.js
  16. 0 0
      dist/static/js/chunk-081a8b8e.c7115f7d.js
  17. 0 0
      dist/static/js/chunk-09f2e803.8ec4fed8.js
  18. 1 1
      dist/static/js/chunk-0ca6c6f9.5a691882.js
  19. 0 0
      dist/static/js/chunk-113d417a.ef4d24c9.js
  20. 0 0
      dist/static/js/chunk-1298fcaa.919b992d.js
  21. 4 0
      dist/static/js/chunk-14f81e1c.22071e5e.js
  22. 0 0
      dist/static/js/chunk-1697edb4.082fc958.js
  23. 0 0
      dist/static/js/chunk-292153ca.5e9917d2.js
  24. 0 0
      dist/static/js/chunk-2d217e7a.4a7cdee7.js
  25. 0 0
      dist/static/js/chunk-3696b1b1.134cb6b4.js
  26. 0 0
      dist/static/js/chunk-3f7c6ea7.c1e6928c.js
  27. 0 0
      dist/static/js/chunk-48f2714c.ec2f6795.js
  28. 8 0
      dist/static/js/chunk-588eee5a.7100a727.js
  29. 0 0
      dist/static/js/chunk-68da6b0b.c0aca9ec.js
  30. 0 0
      dist/static/js/chunk-6b86d388.428a39a9.js
  31. 0 0
      dist/static/js/chunk-6d44028a.712a9493.js
  32. 0 0
      dist/static/js/chunk-7a64171e.ac6f0975.js
  33. 0 0
      dist/static/js/chunk-926ccd64.7ca937c8.js
  34. 0 0
      dist/static/js/chunk-9c444f74.f5ca3ea8.js
  35. 0 0
      dist/static/js/chunk-b9b32b50.42a48a43.js
  36. 0 0
      dist/static/js/chunk-bd334e84.89b5f2d8.js
  37. 1 0
      dist/static/js/chunk-c23a63d0.450c19b5.js
  38. 0 0
      dist/static/js/chunk-c274d6ea.ec31bfab.js
  39. 0 0
      dist/static/js/chunk-c3b849c6.9a3b9e09.js
  40. 0 0
      dist/static/js/chunk-c59bca8c.ede7b211.js
  41. 0 0
      dist/static/js/chunk-commons.25a13ea3.js
  42. 0 0
      dist/static/js/chunk-commons.396eb450.js
  43. 0 0
      dist/static/js/chunk-d3ed357c.55c87e82.js
  44. 0 0
      dist/static/js/chunk-d983dc6e.f8fd3d88.js
  45. 0 0
      dist/static/js/chunk-f84b980e.a38cd0d1.js
  46. 0 0
      dist/static/js/chunk-fae5b3fa.92eff6f2.js
  47. 10 0
      src/components/QrCode/index.vue
  48. 1 1
      src/router/index.js
  49. 60 89
      src/views/HumanResources/form.vue
  50. 8 4
      src/views/resetTeaming/index.vue
  51. 30 1
      src/views/teamBuild/api.js
  52. 124 35
      src/views/teamBuild/forecastName.vue
  53. 30 0
      src/views/teamBuild/forecastNameList.vue
  54. 520 0
      src/views/teamBuild/initiationList.vue
  55. 61 0
      src/views/teamBuild/modals/initiationStatistics.vue

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


+ 0 - 0
dist/static/css/chunk-0ca6c6f9.10ae0cf4.css → dist/static/css/chunk-08128ceb.10ae0cf4.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-2032a5f9.5d128770.css


+ 1 - 0
dist/static/css/chunk-292153ca.c8ad809f.css

@@ -0,0 +1 @@
+.dialog-footer[data-v-b63034cc]{margin-top:20px;display:block;text-align:right}.msgP[data-v-3e705654]{line-height:24px;margin-top:10px}.dialog-footer[data-v-213bbf36]{margin-top:20px;display:block;text-align:right}.msgP[data-v-2cff1a3a]{line-height:24px;margin-top:10px}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-3696b1b1.e55e65ab.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-588eee5a.e8e2939e.css


+ 0 - 1
dist/static/css/chunk-7ca32848.afb0f5ab.css

@@ -1 +0,0 @@
-.dialog-footer[data-v-b63034cc]{margin-top:20px;display:block;text-align:right}

+ 0 - 0
dist/static/css/chunk-d175dc08.95dac6bb.css → dist/static/css/chunk-9c444f74.375b4147.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-b9b32b50.999ac1fb.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-c3b849c6.1ceb58fc.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.4e475c17.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-00de1148.d454f70e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-026cbb1a.dadc766c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-0491b8f1.26e40d13.js


+ 1 - 0
dist/static/js/chunk-08128ceb.61f67b76.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-08128ceb"],{"0358":function(t,s,a){"use strict";a("8aa4")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8aa4":function(t,s,a){},"8cdb":function(t,s,a){"use strict";a.r(s);var i=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),t._v(" "),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._v(" "),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),t._v(" "),a("div",{staticClass:"bullshit__info"},[t._v("请检查您输入的网址是否正确,或者点击链接继续浏览")]),t._v(" "),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("返回首页")])])])])},c=[function(){var t=this,s=t.$createElement,i=t._self._c||s;return i("div",{staticClass:"pic-404"},[i("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b0"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])}],l={name:"Page404",computed:{message:function(){return"很抱歉,你访问的页面不存在"}}},e=l,n=(a("0358"),a("2877")),_=Object(n["a"])(e,i,c,!1,null,"3abe8ce9",null);s["default"]=_.exports},a36b0:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-081a8b8e.c7115f7d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-09f2e803.8ec4fed8.js


+ 1 - 1
dist/static/js/chunk-0ca6c6f9.5a691882.js

@@ -1 +1 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0ca6c6f9"],{"0358":function(t,s,a){"use strict";a("8aa4")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8aa4":function(t,s,a){},"8cdb":function(t,s,a){"use strict";a.r(s);var i=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),t._v(" "),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._v(" "),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),t._v(" "),a("div",{staticClass:"bullshit__info"},[t._v("请检查您输入的网址是否正确,或者点击链接继续浏览")]),t._v(" "),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("返回首页")])])])])},c=[function(){var t=this,s=t.$createElement,i=t._self._c||s;return i("div",{staticClass:"pic-404"},[i("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])}],l={name:"Page404",computed:{message:function(){return"很抱歉,你访问的页面不存在"}}},e=l,n=(a("0358"),a("2877")),_=Object(n["a"])(e,i,c,!1,null,"3abe8ce9",null);s["default"]=_.exports},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"}}]);
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-08128ceb"],{"0358":function(t,s,a){"use strict";a("8aa4")},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8aa4":function(t,s,a){},"8cdb":function(t,s,a){"use strict";a.r(s);var i=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),t._v(" "),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._v(" "),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),t._v(" "),a("div",{staticClass:"bullshit__info"},[t._v("请检查您输入的网址是否正确,或者点击链接继续浏览")]),t._v(" "),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("返回首页")])])])])},c=[function(){var t=this,s=t.$createElement,i=t._self._c||s;return i("div",{staticClass:"pic-404"},[i("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b0"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),t._v(" "),i("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])}],l={name:"Page404",computed:{message:function(){return"很抱歉,你访问的页面不存在"}}},e=l,n=(a("0358"),a("2877")),_=Object(n["a"])(e,i,c,!1,null,"3abe8ce9",null);s["default"]=_.exports},a36b0:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-113d417a.ef4d24c9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1298fcaa.919b992d.js


File diff suppressed because it is too large
+ 4 - 0
dist/static/js/chunk-14f81e1c.22071e5e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1697edb4.082fc958.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-292153ca.5e9917d2.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2d217e7a.4a7cdee7.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3696b1b1.134cb6b4.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3f7c6ea7.c1e6928c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-48f2714c.ec2f6795.js


File diff suppressed because it is too large
+ 8 - 0
dist/static/js/chunk-588eee5a.7100a727.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-68da6b0b.c0aca9ec.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6b86d388.428a39a9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6d44028a.712a9493.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7a64171e.ac6f0975.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-926ccd64.7ca937c8.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-9c444f74.f5ca3ea8.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-b9b32b50.42a48a43.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-bd334e84.89b5f2d8.js


File diff suppressed because it is too large
+ 1 - 0
dist/static/js/chunk-c23a63d0.450c19b5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c274d6ea.ec31bfab.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c3b849c6.9a3b9e09.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c59bca8c.ede7b211.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-commons.25a13ea3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-commons.396eb450.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d3ed357c.55c87e82.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d983dc6e.f8fd3d88.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f84b980e.a38cd0d1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-fae5b3fa.92eff6f2.js


+ 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/router/index.js

@@ -154,7 +154,7 @@ export const asyncRoutes = {
   teamAudit: () => import('@/views/teamBuild/teamDraft'), // 审核
   feeAudit: () => import('@/views/teamBuild/teamDraft'), // 费用审核
   auditFailed: () => import('@/views/teamBuild/teamDraft'), // 审核失败
-  forecastName: () => import('@/views/teamBuild/forecastName'), // 预报名页面
+  forecastName: () => import('@/views/teamBuild/forecastNameList'), // 预报名页面forecastName
   createPayment: () => import('@/views/teamBuild/createPayment'), // 创建缴费页面
   // VIP管理
   vipList: () => import('@/views/vipClass/vipList'),

+ 60 - 89
src/views/HumanResources/form.vue

@@ -16,22 +16,16 @@
                   <el-input v-model="form.realName" size="mini" placeholder="请输入姓名"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>年龄</th>
+              <th class="description-label">年龄</th>
               <td class="description-content">
-                <el-form-item
-                  prop="age"
-                  :rules="[
-                    { required: true, message: '请输入年龄', trigger: 'blur' }
-                  ]"
-                >
+                <el-form-item prop="age">
                   <el-input v-model="form.age" size="mini" type="number" min="1" step="1" placeholder="请输入年龄"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>性别</th>
+              <th class="description-label">性别</th>
               <td class="description-content">
                 <el-form-item
                   prop="gender"
-                  :rules="{ required: true, message: '请选择性别', trigger: 'change' }"
                 >
                   <el-select size="mini" v-model.trim="form.gender"
                               clearable
@@ -101,38 +95,34 @@
                   <span class="close">
                     <i v-if="index === 0" @click="addEducation" class="el-icon-circle-plus-outline"/>
                     <i v-else @click="removeEducation(index)" class="el-icon-remove-outline"/>
-                  </span><i class="requiredStar">*</i>学历</th>
+                  </span>学历</th>
                 <td class="description-content">
                   <el-form-item
                     :prop="'educations.' + index + '.level'"
-                    :rules="{ required: true, message: '请输入学历', trigger: 'blur' }"
                   >
                     <el-input v-model="form.educations[index].level" size="mini" placeholder="请输入学历"/>
                   </el-form-item>
                 </td>
-                <th class="description-label"><i class="requiredStar">*</i>学校</th>
+                <th class="description-label">学校</th>
                 <td class="description-content">
                   <el-form-item
                     :prop="'educations.' + index + '.school'"
-                    :rules="{ required: true, message: '请输入学校', trigger: 'blur' }"
                   >
                     <el-input size="mini" v-model="form.educations[index].school" placeholder="请输入学校"/>
                   </el-form-item>
                 </td>
-                <th class="description-label"><i class="requiredStar">*</i>专业</th>
+                <th class="description-label">专业</th>
                 <td class="description-content">
                   <el-form-item
                     :prop="'educations.' + index + '.subject'"
-                    :rules="{ required: true, message: '请输入专业', trigger: 'blur' }"
                   >
                     <el-input size="mini" v-model="form.educations[index].subject" placeholder="请输入专业"/>
                   </el-form-item>
                 </td>
-                <th class="description-label"><i class="requiredStar">*</i>毕业时间</th>
+                <th class="description-label">毕业时间</th>
                 <td class="description-content">
                   <el-form-item
                     :prop="'educations.' + index + '.year'"
-                    :rules="{ required: true, message: '请选择毕业时间', trigger: 'blur' }"
                   >
                     <el-date-picker
                       type="month"
@@ -154,27 +144,23 @@
         <table class="description-table">
           <tbody>
              <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar">*</i>所在城市</th>
+              <th class="description-label">所在城市</th>
               <td class="description-content">
                 <el-form-item prop="liveCity"
-                  :rules="[{ required: true, message: '请输入所在城市', trigger: 'blur' }]"
                 >
                   <el-input size="mini" v-model.trim="form.liveCity" placeholder="请输入所在城市"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>意向城市</th>
+              <th class="description-label">意向城市</th>
               <td class="description-content"
-                :rules="[{ required: true, message: '请输入意向城市', trigger: 'blur' }]"
               >
                 <el-form-item prop="intentionCity">
                   <el-input size="mini" v-model.trim="form.intentionCity" placeholder="请输入意向城市"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>意向合作模式</th>
+              <th class="description-label">意向合作模式</th>
               <td class="description-content">
-                <el-form-item prop="jobNature"
-                  :rules="[{ required: true, message: '请选择意向合作模式', trigger: 'blur' }]"
-                >
+                <el-form-item prop="jobNature">
                   <el-select size="mini" v-model.trim="form.jobNature"
                               clearable
                               filterable
@@ -188,11 +174,9 @@
               </td>
             </tr>
             <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar">*</i>岗位类别</th>
+              <th class="description-label">岗位类别</th>
               <td class="description-content">
-                <el-form-item prop="jobType"
-                  :rules="[{ required: true, message: '请选择岗位类别', trigger: 'blur' }]"
-                >
+                <el-form-item prop="jobType">
                   <el-select size="mini" v-model.trim="form.jobType"
                               clearable
                               filterable
@@ -206,11 +190,9 @@
                   </el-select>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="form.jobType == 'ADVISER'">*</i>声部</th>
+              <th class="description-label">声部</th>
               <td class="description-content" colspan="3">
-                <el-form-item prop="subjectIdList"
-                  :rules="[{ required: form.jobType == 'ADVISER', message: '请选择声部', trigger: 'blur' }]"
-                >
+                <el-form-item prop="subjectIdList">
                   <el-select
                   size="mini"
                     v-model.trim="form.subjectIdList"
@@ -231,11 +213,9 @@
               </td>
             </tr>
             <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar">*</i>信息来源</th>
+              <th class="description-label">信息来源</th>
               <td class="description-content">
-                <el-form-item prop="sourceFrom"
-                  :rules="[{ required: true, message: '请选择信息来源', trigger: 'blur' }]"
-                >
+                <el-form-item prop="sourceFrom">
                   <el-select v-model.trim="form.sourceFrom"
                               clearable
                               filterable
@@ -250,11 +230,9 @@
                   </el-select>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>人员状态</th>
+              <th class="description-label">人员状态</th>
               <td class="description-content">
-                <el-form-item prop="status"
-                  :rules="[{ required: true, message: '请选择人员状态', trigger: 'blur' }]"
-                >
+                <el-form-item prop="status">
                   <el-select size="mini" v-model.trim="form.status"
                               clearable
                               filterable
@@ -276,11 +254,9 @@
                   </el-select>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar">*</i>HRBP</th>
+              <th class="description-label">HRBP</th>
               <td class="description-content">
-                <el-form-item prop="hrbp"
-                  :rules="[{ required: true, message: '请选择HRBP', trigger: 'blur' }]"
-                >
+                <el-form-item prop="hrbp">
                 <el-select
                   size="mini"
                     v-model.trim="form.hrbp"
@@ -309,11 +285,10 @@
         <table class="description-table">
           <tbody>
             <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>入职日期</th>
+              <th class="description-label">入职日期</th>
               <td class="description-content">
                 <el-form-item
                   prop="entryDate"
-                  :rules="{ required: propRequred, message: '请选择入职日期', trigger: 'change' }"
                 >
                   <el-date-picker
                     type="date"
@@ -323,11 +298,10 @@
                   />
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="form.status === 'DIMISSION'">*</i>离职日期</th>
+              <th class="description-label">离职日期</th>
               <td class="description-content">
                 <el-form-item
                   prop="resignationDate"
-                  :rules="[{ required: form.status === 'DIMISSION', message: '请选择离职日期', trigger: 'change' }]"
                 >
                   <el-date-picker
                     type="date"
@@ -337,22 +311,20 @@
                   />
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="form.resignationDate">*</i>离职原因</th>
+              <th class="description-label">离职原因</th>
               <td class="description-content">
                 <el-form-item
                   prop="resignationReason"
-                  :rules="[{ required: form.resignationDate ? true : false, message: '请输入离职原因', trigger: 'blur' }]"
                 >
                   <el-input size="mini" v-model.trim="form.resignationReason" placeholder="请输入离职原因"/>
                 </el-form-item>
               </td>
             </tr>
             <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>分部</th>
+              <th class="description-label">分部</th>
               <td class="description-content">
                 <el-form-item
                   prop="organId"
-                  :rules="[{ required: propRequred, message: '请选择分部', trigger: 'change' }]"
                 >
                   <el-select v-model.trim="form.organId"
                       placeholder='请选择分部'
@@ -369,11 +341,10 @@
                     </el-select>
                   </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>职位</th>
+              <th class="description-label">职位</th>
               <td class="description-content">
                 <el-form-item
                   prop="position"
-                  :rules="[{ required: propRequred, message: '请输入职位', trigger: 'change' }]"
                 >
                   <el-select v-model.trim="form.position"
                             clearable
@@ -389,10 +360,9 @@
                   </el-select>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="form.position == 'ADVISER'">*</i>声部</th>
+              <th class="description-label">声部</th>
               <td class="description-content">
                 <el-form-item prop="jobSubjectIdList"
-                  :rules="[{ required: form.position == 'ADVISER', message: '请选择声部', trigger: 'change' }]"
                 >
                   <el-select
                     size="mini"
@@ -414,16 +384,15 @@
               </td>
             </tr>
             <tr class="description-tr">
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>紧急联系人姓名</th>
+              <th class="description-label">紧急联系人姓名</th>
               <td class="description-content">
                 <el-form-item
                   prop="emergencyContactName"
-                  :rules="{ required: propRequred, message: '请输入紧急联系人姓名', trigger: 'blur' }"
                 >
                   <el-input size="mini" v-model.trim="form.emergencyContactName" placeholder="请输入紧急联系人姓名"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>紧急联系人关系</th>
+              <th class="description-label">紧急联系人关系</th>
               <td class="description-content">
                 <el-form-item
                   prop="emergencyContactRelation"
@@ -432,12 +401,11 @@
                   <el-input size="mini" v-model.trim="form.emergencyContactRelation" placeholder="请输入紧急联系人关系"/>
                 </el-form-item>
               </td>
-              <th class="description-label"><i class="requiredStar" v-if="propRequred">*</i>紧急联系人电话</th>
+              <th class="description-label">紧急联系人电话</th>
               <td class="description-content">
                 <el-form-item
                   prop="emergencyContactPhone"
                   :rules="[
-                    { required: propRequred, message: '请输入紧急联系人电话', trigger: 'blur' },
                     { min: 11, max: 11, message: '请输入正确的手机号码', trigger: 'blur' }
                   ]"
                 >
@@ -569,33 +537,33 @@ export default {
         educations: [{level: '', school: '', year: ''}]
       },
       rules: {
-        birthdate: [
-          { required: true, message: '请输入生日', trigger: 'blur' },
-        ],
-        sourceFrom: [
-          { required: true, message: '请选择信息来源', trigger: 'change' },
-        ],
-        intentionCity: [
-          { required: true, message: '请输入工作意向', trigger: 'blur' },
-        ],
-        status: [
-          { required: true, message: '请选择员工状态', trigger: 'change' },
-        ],
-        liveCity: [
-          { required: true, message: '请输入所在城市', trigger: 'blur' },
-        ],
-        otherComment: [
-          { required: true, message: '请输入其他综合情况', trigger: 'blur' },
-        ],
-        position: [
-          { required: true, message: '请输入职位', trigger: 'blur' },
-        ],
-        realName: [
-          { required: true, message: '请输入姓名', trigger: 'blur' },
-        ],
-        subjectIdList: [
-          { required: true, message: '请选择声部', trigger: 'change' },
-        ],
+        // birthdate: [
+        //   { required: true, message: '请输入生日', trigger: 'blur' },
+        // ],
+        // sourceFrom: [
+        //   { required: true, message: '请选择信息来源', trigger: 'change' },
+        // ],
+        // intentionCity: [
+        //   { required: true, message: '请输入工作意向', trigger: 'blur' },
+        // ],
+        // status: [
+        //   { required: true, message: '请选择员工状态', trigger: 'change' },
+        // ],
+        // liveCity: [
+        //   { required: true, message: '请输入所在城市', trigger: 'blur' },
+        // ],
+        // otherComment: [
+        //   { required: true, message: '请输入其他综合情况', trigger: 'blur' },
+        // ],
+        // position: [
+        //   { required: true, message: '请输入职位', trigger: 'blur' },
+        // ],
+        // realName: [
+        //   { required: true, message: '请输入姓名', trigger: 'blur' },
+        // ],
+        // subjectIdList: [
+        //   { required: true, message: '请选择声部', trigger: 'change' },
+        // ],
       },
       tableList: [],
     }
@@ -780,6 +748,9 @@ export default {
     /deep/ .el-form-item{
       margin-bottom: 0;
       &.is-error {
+        .el-input__inner {
+          color: red;
+        }
         input::-webkit-input-placeholder {
           color: red;
         }

+ 8 - 4
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' ||
@@ -92,7 +92,7 @@
             team_status == 'FEE_AUDIT' ||
             team_status == 'APPLY'
           " -->
-          <forecastName
+          <forecastNameList
             v-if="activeIndex == '9'"
             :isedit="team_status == 'PRE_APPLY'"
           />
@@ -221,7 +221,9 @@ import musicArchives from "@/views/resetTeaming/components/musicArchices";
 import studentList from "@/views/teamDetail/components/studentList";
 import teacherList from "@/views/teamDetail/components/teacherList";
 import courseList from "@/views/teamDetail/components/courseList";
-import forecastName from "@/views/teamBuild/forecastName";
+
+import forecastNameList from "@/views/teamBuild/forecastNameList";
+// import forecastName from "@/views/teamBuild/forecastName";
 import musicOrder from "@/views/teamDetail/teamDetailedList";
 import teamJournal from "@/views/teamBuild/components/teamJournal";
 import teamRemainTime from "@/views/teamBuild/components/teamRemainTime";
@@ -230,6 +232,7 @@ import merge from "webpack-merge";
 import { permission } from "@/utils/directivePage";
 import { getTeamBaseInfo } from "@/api/buildTeam";
 import { musicGroupType } from "@/constant";
+//    forecastName,
 export default {
   components: {
     teamBaseInfo,
@@ -241,12 +244,13 @@ export default {
     studentList,
     teacherList,
     courseList,
-    forecastName,
+
     musicOrder,
     teamJournal,
     teamRemainTime,
     teamSignupList,
     musicArchives,
+    forecastNameList
   },
   name: "resetTeaming",
   data() {

+ 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'
+})

+ 124 - 35
src/views/teamBuild/forecastName.vue

@@ -9,21 +9,27 @@
         </p> -->
 
     <div class="btnList">
+      <auth :auths="['musicGroup/sendParentMeetingNotice']" v-if="isedit">
+        <el-button type="primary" @click="extendPaymentStatus = true"
+          >预报名家长会通知</el-button
+        >
+      </auth>
       <auth :auths="['forecastName/forecastLink']" v-if="isedit">
         <el-button type="primary" @click="codeStatus = true"
-          >预报名链接</el-button
+          >预报名问卷</el-button
         >
       </auth>
-
-      <el-button type="primary" @click="codedetailStatus = true" v-if="isedit"
-        >预报名详情</el-button
-      >
-
-      <auth :auths="['musicGroup/sendParentMeetingNotice']" v-if="isedit">
-        <el-button type="primary" @click="extendPaymentStatus = true"
-          >家长会通知</el-button
+      <auth :auths="['studentRegistration/preRegisterExport']">
+        <el-button type="primary" @click="downloadFile"
+          >预报名信息导出</el-button
         >
       </auth>
+      <auth :auths="['studentRegistration/queryPreApplySubjectList']">
+        <el-button type="primary" @click="subjectVisible = true"
+          >意向统计</el-button
+        >
+      </auth>
+
       <auth :auths="['musicGroup/finishPreApply']">
         <el-button type="primary" @click="onPaymentGroup" v-if="isedit"
           >乐团缴费</el-button
@@ -34,14 +40,9 @@
           >特色乐团缴费</el-button
         >
       </auth>
-      <auth :auths="['studentRegistration/preRegisterExport']">
-        <el-button type="primary" @click="downloadFile">导出</el-button>
-      </auth>
-      <auth :auths="['studentRegistration/queryPreApplySubjectList']">
-        <el-button type="primary" @click="subjectVisible = true"
-          >意向统计</el-button
-        >
-      </auth>
+      <el-button type="primary" @click="codedetailStatus = true" v-if="isedit"
+        >预报名H5统计</el-button
+      >
     </div>
 
     <div class="m-core">
@@ -50,6 +51,7 @@
         @reset="onReSet"
         @submit="search"
         :model="searchForm"
+        save-key="/forecastName"
         ref="searchForm"
       >
         <el-form-item prop="name">
@@ -77,7 +79,7 @@
             placeholder="老师推荐声部"
           >
             <el-option
-              v-for="item in selects.subjects"
+              v-for="item in subjectList"
               :value="item.id"
               :label="item.name"
               :key="item.id"
@@ -176,14 +178,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 == -1 &&
+                !scope.row.teacherRecommandSubjectName
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -193,14 +203,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 +234,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 +255,11 @@
                   ? "听从老师安排"
                   : null
               }}
-              {{ !scope.row.subjectSecondName && !scope.row.subjectSecond ? '无' : null }}
+              {{
+                !scope.row.subjectSecondName && !scope.row.subjectSecond
+                  ? "无"
+                  : null
+              }}
             </template>
           </el-table-column>
           <el-table-column
@@ -274,6 +299,7 @@
           </el-table-column>
         </el-table>
         <pagination
+          save-key="/forecastName"
           sync
           :total.sync="pageInfo.total"
           :page.sync="pageInfo.page"
@@ -285,12 +311,22 @@
     </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="预报名H5统计"
+      :codeUrl="detailUrl"
+    />
     <!-- 发送家长会通知 -->
     <el-dialog
-      title="发送家长会通知"
+      title="预报名家长会通知"
       :visible.sync="extendPaymentStatus"
       @close="onClose('extendForm')"
       width="400px"
@@ -318,6 +354,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>
@@ -344,7 +384,7 @@
 
     <!-- 回访记录 -->
     <el-dialog
-      title="意向列表"
+      title="意向统计"
       width="600px"
       destroy-on-close
       :close-on-click-modal="false"
@@ -352,6 +392,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 +414,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 +422,7 @@ import {
   queryPreApplyList,
   finishPreApply,
   sendParentMeetingNotice,
+  getSysMessageConfig,
 } from "./api";
 export default {
   name: "forecastName",
@@ -375,7 +431,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 +439,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,10 +474,20 @@ export default {
           { required: true, message: "请输入家长会地址", trigger: "blur" },
         ],
       },
+      preLookVisible: false,
+      sysMsg: "",
+      subjectList: [],
     };
   },
-  mounted() {
-    this.$store.dispatch("setSubjects");
+  async mounted() {
+    await this.$store.dispatch("setSubjects");
+    // 获取短信推送模板
+    this.subjectList = [...this.selects.subjects];
+    this.subjectList.push({ id: -1, name: "无" });
+    const rus = await getSysMessageConfig({
+      type: "STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE",
+    });
+    this.sysMsg = rus.data?.content||'';
     this.getList();
   },
   methods: {
@@ -533,9 +600,31 @@ 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>

+ 30 - 0
src/views/teamBuild/forecastNameList.vue

@@ -0,0 +1,30 @@
+<template>
+  <div>
+    <el-tabs v-model="activeName" >
+      <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() {
+    return {
+      activeName:'first',
+      team_status :this.$route.query.team_status
+    };
+  },
+  mounted() {},
+  methods: {
+        permission(str) {
+      return permission(str);
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 520 - 0
src/views/teamBuild/initiationList.vue

@@ -0,0 +1,520 @@
+<template>
+  <div class="forecastName">
+    <!-- <h2> m-container
+          <el-page-header @back="onCancel" :content="teamName"></el-page-header>
+        </h2> -->
+
+    <!-- <p style="margin-bottom: 15px; font-size: 18px; font-weight: 400">
+          缴费截止时间:{{ '2020-12-12' | formatTimer }}
+        </p> -->
+
+    <div class="btnList">
+      <!-- <el-button type="primary" @click="codedetailStatus = true" v-if="isedit"
+        >预报名详情</el-button
+      > -->
+
+      <auth :auths="['musicEnlightenmentQuestionnaire/sendParentMeetingNotice']" v-if="isedit">
+        <el-button type="primary" @click="extendPaymentStatus = true"
+          >启蒙课家长会通知</el-button
+        >
+      </auth>
+      <auth :auths="['initiationList/forecastLink']" v-if="isedit">
+        <el-button type="primary" @click="codeStatus = true"
+          >启蒙课问卷</el-button
+        >
+      </auth>
+      <auth :auths="['export/musicEnlightenmentQuestionnaires']">
+        <el-button type="primary" @click="downloadFile"
+          >启蒙课问卷导出</el-button
+        >
+      </auth>
+      <auth :auths="['musicEnlightenmentQuestionnaire/musicEnlightenmentQuestionnaireStat']">
+        <el-button type="primary" @click="subjectVisible = true"
+          >启蒙课问卷统计</el-button
+        >
+      </auth>
+    </div>
+
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        @reset="onReSet"
+        @submit="search"
+        :model="searchForm"
+        ref="searchForm"
+      >
+        <el-form-item prop="search">
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="学生编号/姓名/手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="currentGradeNum">
+          <!-- <el-input
+          v-model.trim="searchForm.currentGrade"
+          clearable
+          placeholder="学员年级"
+        ></el-input> -->
+          <el-select
+            v-model.trim="searchForm.currentGradeNum"
+            filterable
+            clearable
+            placeholder="请选择年级"
+          >
+            <el-option
+              v-for="(item, index) in gradeList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="teacherRecommandSubjectId">
+          <el-select
+            clearable
+            v-model="searchForm.teacherRecommandSubjectId"
+            filterable
+            placeholder="老师推荐声部"
+          >
+            <el-option
+              v-for="item in subjectList"
+              :value="item.id"
+              :label="item.name"
+              :key="item.id"
+            ></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>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column align="center" prop="userId" label="学员编号">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.userId }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="学员姓名"
+          ></el-table-column>
+          <!-- <el-table-column align="center" prop="gender" label="性别">
+            <template slot-scope="scope">
+              {{ scope.row.gender ? "男" : "女" }}
+            </template>
+          </el-table-column> -->
+          <el-table-column align="center" prop="phone" label="联系电话">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.phone }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="年级班级">
+            <template slot-scope="scope">
+              {{ scope.row.currentGrade }}{{ scope.row.currentClass }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="teacherRecommandSubjectId"
+            label="老师推荐声部"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{
+                  scope.row.teacherRecommandSubjectId!=-1
+                    ? scope.row.subjectName
+                    : "无"
+                }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicalInstrumentsLearning"
+            label="是否在学习某件乐器"
+          >
+            <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="报名参加管乐团家长会了解相关情况"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.joinParentMeeting ? "是" : "否" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="remark"
+            label="备注"
+            width="240px"
+          >
+            <template slot-scope="scope">
+              <overflow-text width="200px" :text="scope.row.remark" />
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+
+    <!-- 预报名链接 -->
+    <qr-code
+      v-model="codeStatus"
+      title="启蒙课问卷"
+      :codeUrl="codeUrl"
+      @preLook="preLook"
+      :ispreLook="true"
+    />
+    <!-- 预报名详情 -->
+    <qr-code
+      v-model="codedetailStatus"
+      title="预报名详情"
+      :codeUrl="detailUrl"
+    />
+    <!-- 发送家长会通知 -->
+    <el-dialog
+      title="启蒙课家长会通知"
+      :visible.sync="extendPaymentStatus"
+      @close="onClose('extendForm')"
+      width="400px"
+    >
+      <el-form
+        label-width="110px"
+        :model="extendForm"
+        ref="extendForm"
+        :rules="extendRule"
+      >
+        <el-form-item label="家长会时间" prop="meetingDate">
+          <el-date-picker
+            style="width: 100% !important"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            v-model.trim="extendForm.meetingDate"
+            type="datetime"
+            :picker-options="applyDates"
+            placeholder="请选择家长会时间"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="家长会地址" prop="address">
+          <el-input
+            v-model="extendForm.address"
+            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')"
+          >确 定</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="启蒙课统计"
+      width="600px"
+      destroy-on-close
+      :close-on-click-modal="false"
+      :visible.sync="subjectVisible"
+    >
+      <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>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import qrCode from "@/components/QrCode/index";
+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/initiationStatistics";
+import { getMusicGroupGradeList } from "@/api/buildTeam";
+import {
+  getSysMessageConfig,
+  finishPreApply,
+  sendEnlighParentMeetingNotice,
+  getMusicEnlighList,
+} from "./api";
+export default {
+  name: "forecastName",
+  components: { pagination, qrCode, visitModel, intentionModel },
+  props: ["isedit"],
+  data() {
+    const query = this.$route.query;
+    return {
+      codedetailStatus: false,
+      teamName: query.name || null,
+      codeStatus: false,
+      musicGroupId: query.id,
+      codeUrl:
+        vaildStudentUrl() +
+        "/project/forecastName/initiation.html?musicGroupId=" +
+        query.id,
+      detailUrl:
+        vaildTeachingUrl() + "/#/preApplySubject?musicGroupId=" + query.id,
+      searchForm: {
+        search: null,
+        currentGradeNum: null,
+        subjectId: null,
+        teacherRecommandSubjectId: null,
+        selectionSubjectId: null,
+        musicalInstrumentsLearning: null,
+      },
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      visitVisible: false,
+      subjectVisible: false,
+      visitDetail: null,
+      extendPaymentStatus: false,
+      extendForm: {
+        meetingDate: null,
+        address: null,
+      },
+      extendRule: {
+        meetingDate: [
+          { required: true, message: "请选择家长会时间", trigger: "change" },
+        ],
+        address: [
+          { required: true, message: "请输入家长会地址", trigger: "blur" },
+        ],
+      },
+      gradeList: [],
+      preLookVisible: false,
+      sysMsg: "",
+      subjectList:[]
+    };
+  },
+ async mounted() {
+  await  this.$store.dispatch("setSubjects");
+this.subjectList = [...this.selects.subjects]
+this.subjectList.push({id:-1,name:'无'})
+    this.init();
+  },
+  methods: {
+    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,
+              label: result[i],
+            });
+          }
+        }
+      });
+      // 获取短信推送模板
+      const rus = await getSysMessageConfig({
+        type: "STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE",
+      });
+     this.sysMsg = rus.data?.content||'';
+      this.getList();
+    },
+    permission,
+    onReSet() {
+      this.$refs["searchForm"].resetFields();
+      this.search();
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/teamList" });
+    },
+    downloadFile() {
+      let params = this.searchForm;
+      Export(
+        this,
+        {
+          url: "/api-web/export/musicEnlightenmentQuestionnaires",
+          params: {
+            ...params,
+            musicGroupId: this.musicGroupId,
+          },
+          fileName: "启蒙课问卷.xls",
+        },
+        "是否确认导出报表?"
+      );
+    },
+    async getList() {
+      try {
+        const result = await getMusicEnlighList({
+          ...this.searchForm,
+          musicGroupId: this.musicGroupId,
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+        });
+        this.tableList = result.data.rows;
+        this.pageInfo.total = result.data.total;
+      } catch (error) {}
+    },
+    async onPaymentGroup(type) {
+      try {
+        this.$confirm("您是否确定开启乐团缴费?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(async () => {
+          const result = await finishPreApply({
+            isCheckStudentNum: type == 1 ? false : true,
+            musicGroupId: this.musicGroupId,
+          });
+          this.$store.dispatch("delVisitedViews", this.$route);
+          this.$router.push({
+            path: "/teamList",
+          });
+        });
+      } catch (error) {}
+    },
+    addVisited(rows) {
+      // 新增回访
+      this.visitVisible = true;
+      this.visitDetail = {
+        musicGroupId: rows.musicGroupId,
+        overview: "",
+        purpose: "",
+        userId: rows.userId,
+        type: "",
+        visitTime: "",
+        visitType: "",
+        feedback: "",
+        realName: rows.userName,
+      };
+      // this.visitDetail = rows
+    },
+    onClose(formName) {
+      this.$refs[formName].resetFields();
+    },
+    onExtendPayment(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          try {
+            await this.$confirm("您是否确定发送家长会通知?", "提示", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning",
+            });
+            await sendEnlighParentMeetingNotice({
+              ...this.extendForm,
+              musicGroupId: this.musicGroupId,
+            });
+            this.$message.success("家长会通知已发送");
+            this.extendPaymentStatus = false;
+          } catch (error) {}
+        }
+      });
+    },
+    applyDates() {
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          if (end) {
+            return new Date(end).getTime() - 86400000 >= time.getTime();
+          } else {
+            return time.getTime() + 86400000 < Date.now();
+            //开始时间不选时,结束时间最大值小于等于当天
+          }
+        },
+      };
+    },
+    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>

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

@@ -0,0 +1,61 @@
+<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="老师推荐声部">
+          <template slot-scope="scope">
+            <div>
+              {{  scope.row.subjectName? scope.row.subjectName
+                    : "无"}}
+            </div>
+          </template>
+        </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>

Some files were not shown because too many files changed in this diff