Explorar o código

Merge remote-tracking branch 'origin/yuetuan' into 10/23-test

Xiao_Mo %!s(int64=4) %!d(string=hai) anos
pai
achega
77fc0fd896

+ 14 - 7
src/views/resetTeaming/components/resetPayList.vue

@@ -4,13 +4,13 @@
     <el-form :inline="true" :model="searchForm">
       <el-form-item>
         <el-select
-          placeholder="订单类型"
-          v-model="searchForm.payUserType"
+          placeholder="缴费类型"
+          v-model="searchForm.paymentType"
           clearable
           filterable
         >
           <el-option
-            v-for="(item, index) in payOrderTypeLists"
+            v-for="(item, index) in payOrderTypeList"
             :label="item.label"
             :value="item.value"
             :key="index"
@@ -30,9 +30,9 @@
       <div class="newBand"
            @click="newUserPay"
            v-permission="'musicGroupPaymentCalender/add'">新建学员缴费</div>
-      <div class="newBand"
+      <!-- <div class="newBand"
            @click="newSchoolPay"
-           v-permission="'musicGroupPaymentCalender/add'">新建学校缴费</div>
+           v-permission="'musicGroupPaymentCalender/add'">新建学校缴费</div> -->
       <div class="newBand"
            v-permission="'/studentPayBase'"
            @click="setStudentPay">学员缴费设置</div>
@@ -401,7 +401,7 @@ export default {
       reviewVisible: false,
       organizationCourseUnitPriceSettings: [],
       searchForm: {
-        payUserType: null,
+        paymentType: null,
       },
       viewDetail: null,
       tableList: [{}],
@@ -456,6 +456,7 @@ export default {
   },
   computed: {
     payOrderTypeList() {
+      console.log(objectToOptions(userPaymentType))
       return objectToOptions(userPaymentType);
     },
     payFormTitle() {
@@ -493,7 +494,13 @@ export default {
     },
     getList () {
       let musicGroupId = this.$route.query.id
-      return musicGroupPaymentCalenderQueryPage({ page: this.rules.page, rows: this.rules.limit, musicGroupId, payUserType:this.searchForm.payUserType }).then(res => {
+      return musicGroupPaymentCalenderQueryPage({
+        page: this.rules.page,
+        rows: this.rules.limit,
+        musicGroupId,
+        payUserType: 'STUDENT',
+        paymentType: this.searchForm.paymentType,
+      }).then(res => {
         if (res.code == 200) {
           this.rules.total = res.data.total;
           this.tableList = res.data.rows;

+ 719 - 0
src/views/resetTeaming/components/resetPayListSchool.vue

@@ -0,0 +1,719 @@
+<!--  -->
+<template>
+  <div class="m-core">
+    <el-form :inline="true" :model="searchForm">
+      <el-form-item>
+        <el-select
+          placeholder="缴费类型"
+          v-model="searchForm.paymentType"
+          clearable
+          filterable
+        >
+          <el-option
+            v-for="(item, index) in payOrderTypeList"
+            :label="item.label"
+            :value="item.value"
+            :key="index"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="danger" @click="getList">搜索</el-button>
+        <!-- <el-button @click="onReSet" type="primary">重置</el-button> -->
+      </el-form-item>
+    </el-form>
+    <div class="topWrap">
+      <!-- <div class="newBand"
+           @click="newPay"
+           v-permission="'musicGroupPaymentCalender/add'">新建缴费</div> -->
+      <!-- <div class="newBand"
+           @click="newUserPay"
+           v-permission="'musicGroupPaymentCalender/add'">新建学员缴费</div> -->
+      <div class="newBand"
+           @click="newSchoolPay"
+           v-permission="'musicGroupPaymentCalender/add'">新建学校缴费</div>
+      <div class="newBand"
+           v-permission="'/studentPayBase'"
+           @click="setStudentPay">学员缴费设置</div>
+      <!-- <div class="newBand"
+      v-if="!isNewGropu"
+           @click="onCreateQRCode">续费二维码</div> -->
+    </div>
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column
+          align="center"
+          prop="expectNum"
+          width="120"
+          label="预计缴费人数"
+        ></el-table-column>
+        <el-table-column align="center" prop="paymentPattern" label="缴费方式">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.paymentPattern | teamPayStatus }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="paymentValidStartDate"
+          width="150"
+          label="缴费有效期开始日期"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.paymentValidStartDate | formatTimer }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="paymentValidEndDate"
+          width="150"
+          label="缴费有效期结束日期"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.paymentValidEndDate | formatTimer }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="actualNum"
+          width="120"
+          label="实际缴费人数"
+        ></el-table-column>
+        <el-table-column align="center" prop="status" label="缴费状态">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.status | payTypeStatus }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="isGiveMusicNetwork"
+          width="120"
+          label="是否赠送网管课"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.isGiveMusicNetwork ? "是" : "否" }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center"
+                         prop="memo"
+                         label="备注"></el-table-column>
+        <el-table-column label="操作" fixed="right" min-width="150px">
+          <template slot-scope="scope">
+            <div>
+              <el-button type="text"
+                         @click="lookDetail(scope.row)"
+                         v-permission="'musicGroupPaymentCalender/auditListDetail'">查看</el-button>
+              <el-button type="text"
+                         v-if="scope.row.status == 'REJECT'"
+                         v-permission="'musicGroupPaymentCalender/update'"
+                         @click="resetPay(scope.row)">修改</el-button>
+
+              <el-button type="text" v-if="!isNewGropu" @click="onCreateQRCode(scope.row)">续费二维码</el-button>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        :total="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getList"
+      />
+    </div>
+    <el-dialog
+      :visible.sync="payVisible"
+      :close-on-click-modal="false"
+      width="500px"
+      :title="diTitle"
+    >
+      <el-form
+        :model="payForm"
+        :inline="true"
+        label-width="120px"
+        label-position="right"
+        ref="payForm"
+      >
+        <el-form-item
+          label="缴费开始日期"
+          :rules="[
+            { required: true, message: '请设置缴费开始日期', trigger: 'blur' },
+          ]"
+          prop="startPaymentDate"
+        >
+          <el-date-picker
+            v-model.trim="payForm.startPaymentDate"
+            @change="changeStartTime"
+            type="date"
+            :picker-options="pickerOptions"
+            value-format="yyyy-MM-dd"
+            placeholder="开始日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="缴费结束日期"
+          :rules="[
+            { required: true, message: '请设置缴费结束日期', trigger: 'blur' },
+          ]"
+          prop="deadlinePaymentDate"
+        >
+          <el-date-picker
+            v-model.trim="payForm.deadlinePaymentDate"
+            type="date"
+            :picker-options="beginDate(payForm.startPaymentDate)"
+            value-format="yyyy-MM-dd"
+            placeholder="结束日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="缴费方式"
+          prop="paymentPattern"
+          :rules="[{ required: true, message: '请选择缴费方式' }]"
+        >
+          <el-select
+            placeholder="缴费方式"
+            style="width: 220px"
+            clearable
+            filterable
+            @change="paymentPatternChange"
+            v-model.trim="payForm.paymentPattern"
+          >
+            <el-option :value="0" label="按月"></el-option>
+            <el-option :value="1" label="按季"></el-option>
+            <el-option :value="2" label="一次性"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="缴费有效期开始"
+          :rules="[
+            {
+              required: true,
+              message: '请设置缴费有效期开始日期',
+              trigger: 'blur',
+            },
+          ]"
+          prop="paymentValidStartDate"
+        >
+          <el-date-picker
+            v-model.trim="payForm.paymentValidStartDate"
+            type="date"
+            @change="changePaymentStartTime"
+            :picker-options="pickerOptions"
+            value-format="yyyy-MM-dd"
+            placeholder="有效期开始日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="缴费有效期结束"
+          :rules="[
+            {
+              required: payForm.paymentPattern !== 2,
+              message: '请设置缴费有效期结束日期',
+              trigger: 'blur',
+            },
+          ]"
+          prop="paymentValidEndDate"
+        >
+          <el-date-picker
+            v-model.trim="payForm.paymentValidEndDate"
+            type="date"
+            :disabled="payForm.paymentPattern === 2"
+            :picker-options="beginDate(payForm.paymentValidStartDate)"
+            value-format="yyyy-MM-dd"
+            placeholder="有效期结束日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item
+          label="收费类型"
+          v-if="isNew"
+          :rules="[
+            { required: true, message: '请选择收费类型', trigger: 'blur' },
+          ]"
+          prop="type"
+        >
+          <el-select
+            v-model.trim="payForm.type"
+            style="width: 220px !important"
+            placeholder="课程类型"
+          >
+            <el-option label="线上" value="ONLINE"></el-option>
+            <el-option label="线下" value="OFFLINE"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="备注"
+          v-if="isNew"
+          :rules="[{ required: true, message: '请填写备注', trigger: 'blur' }]"
+          prop="memo"
+        >
+          <el-input
+            type="textarea"
+            style="width: 220px !important"
+            :rows="4"
+            placeholder="请填写备注"
+            v-model="payForm.memo"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="payVisible = false">取 消</el-button>
+        <el-button type="primary" v-if="isNew" @click="newPayInfo"
+          >确 定</el-button
+        >
+        <el-button type="primary" v-else @click="resetPayDate">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="查看"
+      :visible.sync="reviewVisible"
+      width="900px"
+      destroy-on-close
+    >
+      <reviewDetail
+        @close="reviewVisible = false"
+        @submited="getList"
+        :detail="viewDetail"
+        :musicGroupId="$route.query.id"
+        destroy-on-close
+      />
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="reviewVisible = false"
+          >关闭</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      :title="payFormTitle"
+      :visible.sync="userVisible"
+      width="800px"
+
+    >
+      <userPayForm
+        v-if="userVisible"
+        @close="userVisible = false"
+        @submited="payedSubmited"
+        @changeActive="$listeners.changeActive"
+        :organizationCourseUnitPriceSettings="organizationCourseUnitPriceSettings"
+        :rowDetail='activeRow'
+        :type="payFormType"
+        :baseInfo="baseInfo"
+        :paymentType="isNewGropu ? 0 : undefined"
+        :musicGroupId="$route.query.id"
+      />
+    </el-dialog>
+
+    <el-dialog title="学员选择"
+               :visible.sync="chioseStudentVisible"
+               destroy-on-close
+               append-to-body
+               width='800px'>
+      <setStudentFee @chioseStudent='chioseStudent'
+                     ref='setStudentFee'
+                     @submited="chioseStudentSubmited"
+                     :clearTale="clearStduent"></setStudentFee>
+      <div slot="footer"
+           class="dialog-footer">
+        <el-button @click="chioseStudentVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitNewPay">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <qr-code v-model="qrcodeStatus" title="续费二维码" :codeUrl="codeUrl" />
+  </div>
+</template>
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import qs from "qs";
+import dayjs from 'dayjs'
+import QrCode from "@/components/QrCode/index";
+import { vaildStudentUrl } from '@/utils/validate'
+import { addMusicGroupPaymentCalender, getMusicGroupPaymentCalender, resetMusicGroupPaymentCalender, delMusicGroupPaymentCalender } from "@/api/buildTeam";
+import {
+  getOrganizationCourseUnitPriceSettings
+} from '@/api/specialSetting'
+import { musicGroupPaymentCalenderQueryPage, getMusicGroupStu, musicGroupPaymentCalenderDetailBatchAdd } from '../api'
+import setStudentFee from './studentPayBase'
+import userPayForm from '../modals/user-pay-form'
+import schoolPayForm from '../modals/school-pay-form'
+import review from '../modals/review'
+import reviewDetail from '../modals/review-detail'
+import { userPaymentType } from '@/constant'
+import { objectToOptions } from '@/utils'
+import { payOrderTypeList}  from "@/utils/searchArray";
+export default {
+  props: ["baseInfo", "isNewGropu"],
+  components: {
+    pagination,
+    setStudentFee,
+    userPayForm,
+    schoolPayForm,
+    QrCode,
+    review,
+    reviewDetail,
+  },
+  data() {
+    return {
+      musicGroupStu: [],
+      payFormType: "user",
+      userVisible: false,
+      schoolVisible: false,
+      reviewVisible: false,
+      organizationCourseUnitPriceSettings: [],
+      searchForm: {
+        paymentType: null,
+      },
+      viewDetail: null,
+      tableList: [{}],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      isInit: false,
+      diTitle: "新增缴费",
+      payVisible: false,
+      payForm: {
+        startPaymentDate: null,
+        deadlinePaymentDate: null,
+        paymentPattern: null,
+        paymentValidStartDate: null,
+        paymentValidEndDate: null,
+        type: null,
+        memo: null,
+      },
+      isNew: false,
+      activeRow: null,
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() + 86400000 <= new Date().getTime();
+        },
+      },
+      qrcodeStatus: false, // 生成二维码
+      codeUrl: null,
+      chioseStudentVisible: false,
+      chioseStudentList: [],
+      clearStduent: true,
+      musicGroupPaymentCalenderId: "",
+      payOrderTypeLists: payOrderTypeList,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    try {
+      const res = await getOrganizationCourseUnitPriceSettings({
+        rows: 9999
+      })
+      this.organizationCourseUnitPriceSettings = res.data.rows
+    } catch (error) {}
+    this.init();
+  },
+  computed: {
+    payOrderTypeList() {
+      console.log(objectToOptions(userPaymentType))
+      return objectToOptions(userPaymentType);
+    },
+    payFormTitle() {
+      if (this.isNew) {
+        return this.payFormType === "user" ? "新增学员缴费" : "新增学校缴费";
+      } else {
+        return this.payFormType === "user" ? "修改学员缴费" : "修改学校缴费";
+      }
+    },
+  },
+  activated() {
+    this.init();
+  },
+  methods: {
+    async init() {
+      try {
+        const res = await getMusicGroupStu({
+          musicGroupId: this.$route.query.id,
+        });
+
+      } catch (error) {}
+      this.getList();
+    },
+    newUserPay() {
+      this.payFormType = "user";
+      this.isNew = true;
+      this.activeRow = null
+      this.userVisible = true;
+    },
+    newSchoolPay() {
+      this.payFormType = "school";
+      this.isNew = true;
+      this.activeRow = null
+      this.userVisible = true;
+    },
+    getList () {
+      let musicGroupId = this.$route.query.id
+      return musicGroupPaymentCalenderQueryPage({
+        page: this.rules.page,
+        rows: this.rules.limit,
+        musicGroupId,
+        payUserType: 'SCHOOL',
+        paymentType: this.searchForm.paymentType,
+      }).then(res => {
+        if (res.code == 200) {
+          this.rules.total = res.data.total;
+          this.tableList = res.data.rows;
+        }
+      });
+    },
+    paymentPatternChange(val) {
+      if (val === 2) {
+        this.payForm.paymentValidEndDate = null;
+      }
+    },
+    onCreateQRCode (row) { // 生成报名二维码
+      this.qrcodeStatus = true
+      this.codeUrl = vaildStudentUrl() + '/#/musicGroupRenew?calenderId=' + row.id
+    },
+    chioseStudent(val) {
+      this.chioseStudentList = val;
+    },
+    newPay() {
+      this.diTitle = "新增缴费";
+      this.isNew = true;
+      this.payVisible = true;
+    },
+    resetPay(row) {
+      this.diTitle = "修改缴费";
+      this.isNew = false;
+      this.activeRow = row;
+      this.payFormType = row.payUserType==='SCHOOL'?'school':'user'
+      this.userVisible = true;
+    },
+    async chioseStudentSubmited() {
+      try {
+        await this.$confirm('缴费创建完成, 是否立即排课?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        if (this.$listeners.changeActive) {
+          this.$listeners.changeActive({
+            name: '5'
+          })
+        }
+      } catch (error) {}
+    },
+    detelePay(row) {
+      let id = row.id;
+      this.$confirm(`确定删除该缴费周期?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          delMusicGroupPaymentCalender({ id }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    lookDetail(row) {
+      let query = this.$route.query;
+      this.$route.query.paymentId = row.id;
+      this.viewDetail = row;
+      if (row.payUserType === "SCHOOL") {
+        this.reviewVisible = true;
+      } else {
+        this.$router.push({ path: "/business/strudentPayInfo", query });
+      }
+    },
+    setStudentPay() {
+      let query = this.$route.query;
+      this.$router.push({ path: "/business/studentPayBase", query });
+    },
+    newPayInfo() {
+      this.$refs["payForm"].validate((res) => {
+        if (res) {
+          /**
+           *   payForm: {
+        startPaymentDate: null,
+        deadlinePaymentDate: null,
+        type: null,
+        memo: null
+      },
+           *
+           */
+          this.chioseStudentVisible = true;
+          return;
+        }
+      });
+    },
+    submitNewPay() {
+      if (this.chioseStudentList.length < 1) {
+        this.$message.error("请至少选择一名学员");
+        return;
+      }
+
+      let obj = {};
+      obj.userIdList = this.chioseStudentList.map((stu) => {
+        return stu.userId;
+      });
+      obj.musicGroupPaymentCalenderId = this.musicGroupPaymentCalenderId;
+      musicGroupPaymentCalenderDetailBatchAdd(obj).then((res) => {
+        if (res.code == 200) {
+          this.$message.success("添加成功");
+          this.$refs.setStudentFee.clearTable();
+          this.payVisible = false;
+          this.chioseStudentVisible = false;
+          this.getList();
+        }
+      });
+    },
+    resetPayDate() {
+      resetMusicGroupPaymentCalender({
+        id: this.activeRow.id,
+        startPaymentDate: this.payForm.startPaymentDate,
+        deadlinePaymentDate: this.payForm.deadlinePaymentDate,
+        paymentValidStartDate: this.payForm.paymentValidStartDate
+          ? dayjs(this.payForm.paymentValidStartDate).format("YYYY-MM-DD")
+          : this.payForm.paymentValidStartDate,
+        paymentValidEndDate: this.payForm.paymentValidEndDate
+          ? dayjs(this.payForm.paymentValidEndDate).format("YYYY-MM-DD")
+          : this.payForm.paymentValidEndDate,
+        paymentPattern: this.payForm.paymentPattern,
+      }).then((res) => {
+        if (res.code == 200) {
+          this.$message.success("修改成功");
+          this.payVisible = false;
+          this.getList();
+        }
+      });
+    },
+    changeStartTime(val) {
+      this.payForm.deadlinePaymentDate = this.dateAddDays(val, 3);
+    },
+    changePaymentStartTime(val) {
+      this.payForm.paymentValidEndDate = null;
+    },
+    dateAddDays(dataStr, dayCount) {
+      let strdate = dataStr; //日期字符串
+      let isdate = new Date(strdate.replace(/-/g, "/")); //把日期字符串转换成日期格式
+      isdate = new Date((isdate / 1000 + 86400 * dayCount) * 1000); //日期加1天
+      let pdate =
+        isdate.getFullYear() +
+        "-" +
+        (isdate.getMonth() + 1) +
+        "-" +
+        isdate.getDate(); //把日期格式转换成字符串
+      return pdate;
+    },
+    beginDate(end) {
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          if (end) {
+            return new Date(end).getTime() - 86400000 >= time.getTime();
+          } else {
+            return time.getTime() + 86400000 < Date.now();
+            //开始时间不选时,结束时间最大值小于等于当天
+          }
+        },
+      };
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm = { payUserType: null };
+    },
+    async payedSubmited(data) {
+      try {
+        await this.getList();
+        if (!this.isNewGropu) {
+          this.chioseStudentVisible = true;
+          if (data) {
+            this.musicGroupPaymentCalenderId = data.musicGroupPaymentCalenderId;
+          }
+        }
+      } catch (error) {}
+    },
+  },
+  watch: {
+    chioseStudentVisible() {
+      this.chioseStudentList = [];
+    },
+    payVisible (val) {
+      if (!val) {
+        this.payForm = {
+          startPaymentDate: null,
+          paymentPattern: null,
+          paymentValidStartDate: null,
+          paymentValidEndDate: null,
+          type: null,
+          memo: null,
+          deadlinePaymentDate: null,
+        };
+        this.$refs["payForm"].resetFields();
+      }
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.topWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  div {
+    margin-right: 10px;
+  }
+}
+.left-code,
+.right-code {
+  // width: 50%;
+  // float: left;
+  h2 {
+    font-size: 18px;
+    text-align: center;
+    padding-bottom: 8px;
+  }
+
+  .qrcode {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    img {
+      width: 200px;
+      height: 200px;
+      margin: 0 auto;
+    }
+  }
+  .code-url {
+    font-size: 18px;
+    text-align: center;
+    padding: 15px 15px 0 15px;
+  }
+}
+</style>

+ 12 - 2
src/views/resetTeaming/index.vue

@@ -28,7 +28,7 @@
                      name="4">
           <studentPayBase v-if="activeIndex == 4" />
         </el-tab-pane> -->
-        <el-tab-pane label="缴费设置"
+        <el-tab-pane label="学员缴费设置"
                      v-if="permission('/resetTeaming/resetPayList')"
                      name="3">
           <resetPayList
@@ -37,6 +37,15 @@
             @changeActive="handleClick"
           />
         </el-tab-pane>
+        <el-tab-pane label="学校缴费设置"
+                     v-if="permission('/resetTeaming/resetPayList')"
+                     name="6">
+          <resetPayListSchool
+            :baseInfo="baseInfo"
+            v-if="activeIndex == 6"
+            @changeActive="handleClick"
+          />
+        </el-tab-pane>
 
         <el-tab-pane label="班级调整"
                      v-if="permission('/resetTeaming/resetClass')"
@@ -66,10 +75,11 @@ import resetClass from '@/views/teamDetail/components/resetClass'
 // import lookCourse from '@/views/teamBuild/teamSeting/components/lookCourse'
 // import improvement from '@/views/teamBuild/teamSeting/components/improvementClass'
 import resetPayList from '@/views/resetTeaming/components/resetPayList'
+import resetPayListSchool from '@/views/resetTeaming/components/resetPayListSchool'
 import studentPayBase from '@/views/resetTeaming/components/studentPayBase'
 import { permission } from '@/utils/directivePage'
 export default {
-  components: { teamBaseInfo, resetSound, resetClass, resetPayList, studentPayBase },
+  components: { teamBaseInfo, resetSound, resetClass, resetPayList, resetPayListSchool, studentPayBase },
   name: 'resetTeaming',
   data () {
     return {

+ 8 - 0
src/views/teamDetail/api.js

@@ -0,0 +1,8 @@
+import request2 from '@/utils/request2'
+
+export const queryRemainCourseTypeDuration = data => request2({
+  url: '/api-web/classGroup/queryRemainCourseTypeDuration',
+  data: {},
+  params: data,
+  requestType: 'form'
+})

+ 131 - 0
src/views/teamDetail/components/modals/create-user-pay.vue

@@ -0,0 +1,131 @@
+<template>
+  <div>
+    <el-alert title="班级信息" :closable="false" class="alert" type="info">
+    </el-alert>
+    <el-form :model="form">
+      <el-form-item label="单技班">
+        <el-select v-model.trim="form.signClass" filterable clearable>
+          <el-option
+            v-for="(item, index) in signList"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="合奏班">
+        <el-select v-model.trim="form.mixClass" filterable clearable>
+          <el-option
+            v-for="(item, index) in mixList"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="基础技能班">
+        <el-select v-model.trim="form.highClass" filterable clearable>
+          <el-option
+            v-for="(item, index) in highList"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="临时班">
+        <el-select
+          v-model.trim="form.snapClass"
+          filterable
+          clearable
+          multiple
+        >
+          <el-option
+            v-for="(item, index) in snapList"
+            :key="index"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-alert title="课程信息设置" :closable="false" class="alert" type="info">
+    </el-alert>
+    <extraClass
+      :form="eclass"
+      ref="eclass"
+      :isUserType="true"
+      :isCommon="false"
+      :isDisabled="true"
+      @create="addExtraClass"
+      @remove="removeExtraClass"
+      @moneyChange="syncAllMoney"
+    />
+    <el-alert title="缴费设置" :closable="false" class="alert" type="info">
+    </el-alert>
+    <paymentCycle
+      ref="cycle"
+      :isUserType="true"
+      :form.sync="cycle"
+      :isCommon="false"
+      :isDisabled="true"
+    />
+  </div>
+</template>
+<script>
+import paymentCycle from "../../../resetTeaming/modals/payment-cycle";
+import extraClass from "../../../resetTeaming/modals/extra-class";
+import { queryRemainCourseTypeDuration } from '../../api'
+export default {
+  props: ["snapList", "highList", "mixList", "signList", 'createdUserId'],
+  components: {
+    paymentCycle,
+    extraClass
+  },
+  data() {
+    return {
+      form: {
+        signClass: '',
+        mixClass: '',
+        highClass: '',
+        snapClass: '',
+      },
+      cycle: {},
+      eclass: [],
+    }
+  },
+  watch: {
+    'form.signClass'() {
+      this.classChange()
+    },
+    'form.mixClass'() {
+      this.classChange()
+    },
+    'form.highClass'() {
+      this.classChange()
+    },
+    'form.snapClass'() {
+      this.classChange()
+    },
+  },
+  methods: {
+    async classChange() {
+      try {
+        await queryRemainCourseTypeDuration({
+          classGroupIdList: [this.form.signClass, this.form.mixClass, this.form.highClass, ...this.form.snapClass].filter(item => !!item).join(',')
+        })
+      } catch (error) {}
+    }
+  },
+};
+</script>
+<style lang="less" scoped>
+.dialog-footer {
+  margin-top: 20px;
+  display: block;
+  text-align: right;
+}
+.alert {
+  margin-bottom: 10px;
+}
+</style>

+ 22 - 2
src/views/teamDetail/components/studentList.vue

@@ -701,6 +701,20 @@
                    @click="submitAddVisit">确 定</el-button>
       </span>
     </el-dialog>
+    <el-dialog
+      title="选择班级"
+      destroy-on-close
+      width="600px"
+      :visible.sync="createUserPayVisible"
+    >
+      <createUserPay
+        :signList="signList"
+        :mixList="mixList"
+        :highList="highList"
+        :snapList="snapList"
+        :createdUserId="createdUserId"
+      />
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -731,6 +745,7 @@ import { getToken } from "@/utils/auth";
 import { permission } from "@/utils/directivePage";
 import { addVisit } from "@/views/returnVisitManager/api.js"
 import cleanDeep from 'clean-deep'
+import createUserPay from './modals/create-user-pay.vue'
 import paymentCycle from '../../resetTeaming/modals/payment-cycle'
 export default {
   name: "tstudentList",
@@ -883,12 +898,15 @@ export default {
         visitType: [{ required: true, message: "请选择回访类型" }]
       },
       pickerOptions: null,
-      classLists: null
+      classLists: null,
+      createdUserId: 2109142,
+      createUserPayVisible: true,
     };
   },
   components: {
     pagination,
-    paymentCycle
+    paymentCycle,
+    createUserPay
   },
   created () {
     // 判断是否带缓存参数
@@ -1249,6 +1267,8 @@ export default {
               this.$message.success("添加学生成功");
               this.getList();
               this.addStudentVisible = false;
+              this.createUserPayVisible = true
+              this.createdUserId = res.data
             }
             this.$refs.maskForm.resetFields();
           });