Jelajahi Sumber

启蒙课问卷 样式

1
mo 3 tahun lalu
induk
melakukan
26181176b8

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

+ 7 - 3
src/views/resetTeaming/index.vue

@@ -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() {

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

@@ -0,0 +1,27 @@
+<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-tabs>
+  </div>
+</template>
+<script>
+import forecastName from './forecastName'
+import initiationList from './initiationList'
+export default {
+  components:{forecastName,initiationList},
+  data() {
+    return {
+      activeName:'first',
+      team_status :this.$route.query.team_status
+    };
+  },
+  mounted() {},
+  methods: {
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

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

@@ -0,0 +1,458 @@
+<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="['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
+        >
+      </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>
+    </div>
+
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        @reset="onReSet"
+        @submit="search"
+        :model="searchForm"
+        ref="searchForm"
+      >
+        <el-form-item prop="name">
+          <el-input
+            v-model.trim="searchForm.name"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="学生编号/姓名/手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="currentGrade">
+          <!-- <el-input
+          v-model.trim="searchForm.currentGrade"
+          clearable
+          placeholder="学员年级"
+        ></el-input> -->
+          <el-select
+            v-model.trim="searchForm.currentGrade"
+            filterable
+            clearable
+            placeholder="请选择年级"
+          >
+            <el-option
+              v-for="(item, index) in gradeList"
+              :key="index"
+              :label="item.label"
+              :value="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="teacherRecommandSubjectId">
+          <el-select
+            clearable
+            v-model="searchForm.teacherRecommandSubjectId"
+            placeholder="老师推荐声部"
+          >
+            <el-option
+              v-for="item in selects.subjects"
+              :value="item.id"
+              :label="item.name"
+              :key="item.id"
+            ></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">
+              {{
+                scope.row.teacherRecommandSubjectId
+                  ? scope.row.teacherRecommandSubjectName
+                  : null
+              }}
+              {{
+                !scope.row.teacherRecommandSubjectName &&
+                scope.row.teacherRecommandSubjectId == 999
+                  ? "听从老师安排"
+                  : null
+              }}
+              {{
+                !scope.row.teacherRecommandSubjectId &&
+                !scope.row.teacherRecommandSubjectName
+                  ? "无"
+                  : null
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="是否在学习某件乐器"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="目前所学乐器"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="报名参加管乐团家长会了解相关情况"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="备注"
+          ></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" />
+    <!-- 预报名详情 -->
+    <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>
+      <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="visitVisible"
+    >
+      <visit-model
+        v-if="visitVisible"
+        @close="visitVisible = false"
+        :detail="visitDetail"
+        @submited="getList"
+      />
+    </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>
+  </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/intention";
+import { getMusicGroupGradeList } from "@/api/buildTeam";
+import {
+  queryPreApplyList,
+  finishPreApply,
+  sendParentMeetingNotice,
+} 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/index.html?musicGroupId=" +
+        query.id,
+      detailUrl:
+        vaildTeachingUrl() + "/#/preApplySubject?musicGroupId=" + query.id,
+      searchForm: {
+        name: null,
+        subjectId: null,
+        teacherRecommandSubjectId: null,
+        selectionSubjectId: null,
+        isAllowAdjust: null,
+        cloudTeacherMethod: null,
+        kitPurchaseMethod: 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: [],
+    };
+  },
+  mounted() {
+    this.$store.dispatch("setSubjects");
+    this.init();
+  },
+  methods: {
+    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) {
+          for (let i in result) {
+            this.gradeList.push({
+              value: i,
+              label: result[i],
+            });
+          }
+        }
+      });
+      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/studentRegistration/preRegisterExport",
+          params: {
+            ...params,
+            musicGroupId: this.musicGroupId,
+          },
+          fileName: "预报名列表.xls",
+        },
+        "是否确认导出报表?"
+      );
+    },
+    async getList() {
+      try {
+        const result = await queryPreApplyList({
+          ...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 sendParentMeetingNotice({
+              ...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();
+            //开始时间不选时,结束时间最大值小于等于当天
+          }
+        },
+      };
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+</style>