Forráskód Böngészése

Merge branch '08/24teamQuest' into jenkins

mo 2 éve
szülő
commit
7344d91aee
40 módosított fájl, 2214 hozzáadás és 209 törlés
  1. 0 0
      dist/static/js/app.612ee71f.js
  2. 0 0
      dist/static/js/chunk-20841b8e.d034ed3c.js
  3. 0 0
      dist/static/js/chunk-54daf316.2546949f.js
  4. 0 0
      dist/static/js/chunk-7791b9a2.f067c86d.js
  5. 0 0
      dist/static/js/chunk-80642148.c41e1af5.js
  6. 0 0
      dist/static/js/chunk-80f30f36.8fd7d3ca.js
  7. 0 0
      dist/static/js/chunk-86c79eee.243c0264.js
  8. 2 0
      dist/static/js/chunk-bfced2fa.8f673410.js
  9. 0 0
      dist/static/js/chunk-cf34dd02.ae719a1c.js
  10. 0 0
      dist/static/js/chunk-e007daee.79781630.js
  11. 22 0
      src/api/buildTeam.js
  12. 2 2
      src/constant/index.js
  13. 4 2
      src/utils/searchArray.js
  14. 1 1
      src/utils/vueFilter.js
  15. 38 0
      src/views/baseRulesManager/api.js
  16. 217 0
      src/views/baseRulesManager/components/teamNo.vue
  17. 10 7
      src/views/baseRulesManager/index.vue
  18. 141 0
      src/views/baseRulesManager/modals/eidtTeamNo.vue
  19. 350 0
      src/views/branchPayManager/payList.vue
  20. 30 1
      src/views/categroyManager/specialSetup/branchSetting.vue
  21. 260 49
      src/views/resetTeaming/components/payInfoDetail.vue
  22. 162 37
      src/views/resetTeaming/components/resetPayList.vue
  23. 3 3
      src/views/resetTeaming/components/resetPayListSchool.vue
  24. 1 1
      src/views/resetTeaming/components/strudentPayInfo.vue
  25. 19 18
      src/views/resetTeaming/index.vue
  26. 141 0
      src/views/resetTeaming/modals/backMoney.vue
  27. 1 1
      src/views/resetTeaming/modals/member-pay-form.vue
  28. 3 6
      src/views/resetTeaming/modals/pay.scss
  29. 1 0
      src/views/resetTeaming/modals/payMember.vue
  30. 365 0
      src/views/resetTeaming/modals/paySchoolInfo.vue
  31. 1 0
      src/views/resetTeaming/modals/payTeamActive.vue
  32. 68 2
      src/views/resetTeaming/modals/review-detail.vue
  33. 1 1
      src/views/resetTeaming/modals/user-pay-form.vue
  34. 35 11
      src/views/teamBuild/components/soundSetComponents/chioseMusic.vue
  35. 40 14
      src/views/teamBuild/components/soundSetComponents/soundSetCore.vue
  36. 255 25
      src/views/teamBuild/components/teamBaseInfo.vue
  37. 31 18
      src/views/teamBuild/components/teamSoundSet.vue
  38. 1 1
      src/views/teamBuild/forecastName.vue
  39. 3 3
      src/views/teamDetail/teamInfo.vue
  40. 6 6
      src/views/teamDetail/teamList.vue

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/app.612ee71f.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-20841b8e.d034ed3c.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-54daf316.2546949f.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-7791b9a2.f067c86d.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-80642148.c41e1af5.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-80f30f36.8fd7d3ca.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-86c79eee.243c0264.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 0
dist/static/js/chunk-bfced2fa.8f673410.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-cf34dd02.ae719a1c.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
dist/static/js/chunk-e007daee.79781630.js


+ 22 - 0
src/api/buildTeam.js

@@ -1633,3 +1633,25 @@ export function getAgreement(data) {
     params: data
   });
 }
+
+
+// 获取分部年纪
+export function getGradeList (data) {
+  return request({
+    url: api + '/organization/getGradeList',
+    method: 'get',
+    params: data
+  })
+}
+
+
+// 提交审核  草稿->审核中
+//     requestType: "json"
+export function musicGroupAuditing(data) {
+  return request2({
+    url: api + `/musicGroup/audit`,
+    method: "post",
+    data: data,
+    requestType: "form"
+  });
+}

+ 2 - 2
src/constant/index.js

@@ -240,12 +240,12 @@ export const packageStatus = {
   1: "可用",
   2: "已使用"
 };
-
+//   DRAFT: "创建缴费中",
 export const musicGroupType = {
   DRAFT: "编辑中",
   AUDIT: "审核中",
   PRE_APPLY: "预报名中",
-  PRE_BUILD_FEE: "创建缴费中",
+
   FEE_AUDIT: "费用审核中",
   APPLY: "报名中",
   PAY: "缴费中",

+ 4 - 2
src/utils/searchArray.js

@@ -26,7 +26,8 @@ import {
   catgGoupType,
   catRole,
   catType,
-  quiteReason
+  quiteReason,
+  payUserType
 } from "../constant";
 // 课程类型
 let tenantConfig = sessionStorage.getItem("tenantConfig");
@@ -807,7 +808,7 @@ export const stockType = [
 //   { value: 'DRAFT', text: '编辑中' },
 //   { value: 'AUDIT', text: '审核中' },
 //   { value: 'PRE_APPLY', text: '预报名中' },
-//   { value: 'PRE_BUILD_FEE', text: '创建缴费中' },
+//   { value: 'DRAFT', text: '创建缴费中' },
 //   { value: 'APPLY', text: '报名中' },
 //   { value: 'PAY', text: '缴费中' },
 //   { value: 'PREPARE', text: '筹备中' },
@@ -862,6 +863,7 @@ export const catgGoupTypeList = getValueForKey(catgGoupType);
 export const catRoleList = getValueForKey(catRole);
 export const catTypeList = getValueForKey(catType);
 export const quiteReasonList = getValueForKey(quiteReason);
+export const payUserTypeList = getValueForKey(payUserType);
 //downListType
 function getValueForKey(obj) {
   let arr = [];

+ 1 - 1
src/utils/vueFilter.js

@@ -364,7 +364,7 @@ Vue.filter("paymentStatus", value => {
 //     PAY: "缴费中",
 //     PREPARE: "筹备中",
 //     PROGRESS: "进行中",
-//     PRE_BUILD_FEE: '创建缴费中',
+//     DRAFT: '创建缴费中',
 //     CANCELED: '取消',
 //     PAUSE: '暂停',
 //     AUDIT: '乐团审核中',

+ 38 - 0
src/views/baseRulesManager/api.js

@@ -0,0 +1,38 @@
+import request2 from '@/utils/request2'
+import qs from 'qs'
+let api = '/api-web'
+
+export function getMusicGroupPlanMakingList(data) {
+  return request2({
+    url: api + '/musicGroupPlanMaking/queryAll',
+    method: 'get',
+    requestType:'form'
+  })
+}
+
+export function addMusicGroupPlanMaking(data) {
+  return request2({
+    url: api + '/musicGroupPlanMaking/add',
+    method: 'post',
+    data
+  })
+}
+
+export function updateMusicGroupPlanMaking(data) {
+  return request2({
+    url: api + '/musicGroupPlanMaking/update',
+    method: 'post',
+    data
+  })
+}
+
+
+// 根据编制id 查默认声部
+export function getMusicGroupPlanMakingDetail(data) {
+  return request2({
+    url: api + '/musicGroupPlanMaking/query',
+    method: 'get',
+    requestType:'form',
+    params:data
+  })
+}

+ 217 - 0
src/views/baseRulesManager/components/teamNo.vue

@@ -0,0 +1,217 @@
+
+<template>
+  <div>
+    <div>
+      <!-- 搜索标题 -->
+      <!-- <save-form
+        :inline="true"
+        class="searchForm"
+        ref="searchForm"
+        :model.sync="searchForm"
+        save-key="baseRulesManager-teamNo"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="
+              (e) => {
+                e.target.blur();
+                $refs.searchForm.save();
+                search();
+              }
+            "
+            placeholder="编制名称"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="subjectId">
+          <el-select
+            v-model.trim="searchForm.subjectId"
+            clearable
+            filterable
+            placeholder="请选择声部"
+          >
+            <el-option
+              v-for="(item, index) in selects.subjects"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="primary">搜索</el-button>
+          <el-button @click="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form> -->
+      <div class="btnWraps">
+        <el-button @click="addNo" type="primary"   v-if="
+                  $helpers.permission(
+                    'musicGroupPlanMaking/add'
+                  )
+                ">新建编制</el-button>
+      </div>
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column
+            align="center"
+            prop="id"
+            label="编号"
+            width="200px"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            width="200px"
+            prop="name"
+            label="编制名称"
+          >
+          </el-table-column>
+          <el-table-column align="center" prop="subjectName" label="默认声部">
+
+          </el-table-column>
+          <el-table-column
+            align="center"
+            label="操作"
+            fixed="right"
+            width="200px"
+          >
+            <template slot-scope="scope">
+              <el-button
+                @click="resetTeamNo(scope.row)"
+                type="text"
+                v-if="
+                  $helpers.permission(
+                    'musicGroupPlanMaking/update'
+                  )
+                "
+              >
+                修改
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <!-- <pagination
+          :total.sync="pageInfo.total"
+          save-key="baseRulesManager-teamNo"
+          sync
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        /> -->
+      </div>
+    </div>
+    <eidtTeamNo ref="eidtTeamNo" @getList="getList" />
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import { getEmployeeOrgan } from "@/api/buildTeam";
+import Tooltip from "@/components/Tooltip/index";
+import { auditTypeList, auditPaymentTypeList } from "@/utils/searchArray";
+import eidtTeamNo from "../modals/eidtTeamNo.vue";
+import { getMusicGroupPlanMakingList } from "../api";
+const initSearch = {
+  search: null,
+  paymentType: null,
+  status: "AUDITING",
+  organId: null,
+};
+export default {
+  components: { pagination, eidtTeamNo },
+  name: "helpCategory",
+  data() {
+    return {
+      typesStatus: false,
+      selList: [],
+      organList: [],
+      statusList: auditTypeList,
+      searchForm: { ...initSearch },
+      tableList: [{}],
+
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      detail: null,
+      typeStatus: false,
+    };
+  },
+  mounted() {
+    // this.$store.dispatch("setBranchs");
+    this.$store.dispatch("setSubjects");
+    this.getList();
+  },
+  methods: {
+    selectable(row, index) {
+      return row.status == "AUDITING";
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.$refs.searchForm.save(this.searchForm);
+      this.$refs.searchForm.save(this.pageInfo, "page");
+      this.getList();
+    },
+    reset() {
+      this.searchForm = { ...initSearch };
+      this.search();
+    },
+    getList() {
+      let params = {
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit,
+        ...this.searchForm,
+      };
+      getMusicGroupPlanMakingList().then((res) => {
+        if (res.code == 200) {
+          let result = res.data.map((item) => {
+            let subjectNameArr = [];
+            if (item.subjectMap) {
+              for (let key in item.subjectMap) {
+                subjectNameArr.push(item.subjectMap[key]);
+              }
+            }
+            item.subjectName = subjectNameArr.join(",");
+            return item;
+          });
+          this.tableList = result;
+          // this.pageInfo.total = result.total;
+        }
+      });
+    },
+
+    addNo() {
+      this.$refs.eidtTeamNo.openDialog();
+    },
+    resetTeamNo(row){
+      this.$refs.eidtTeamNo.openDialog(row);
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+::v-deep .el-date-editor.el-input {
+  width: 100% !important;
+}
+::v-deep .el-select {
+  width: 100% !important;
+}
+::v-deep .el-table .cell {
+  display: -webkit-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+}
+.btnWraps {
+  margin-bottom: 20px;
+}
+</style>

+ 10 - 7
src/views/baseRulesManager/index.vue

@@ -39,14 +39,15 @@
         >
           <leBaoRules v-if="activeIndex==1"/>
         </el-tab-pane>
-        <!-- <el-tab-pane
-          label="服务异常提醒"
+        <el-tab-pane
+          label="建团编制"
           lazy
-          name="4"
-          v-if="permissionList.earlyWarning"
+          name="5"
+          v-if="permission('musicGroupPlanMaking/queryAll')"
         >
-          <serverMinitor />
-        </el-tab-pane> -->
+
+          <teamNo v-if="activeIndex==5"/>
+        </el-tab-pane>
         <!-- <el-tab-pane
           label="机构参数设置"
           lazy
@@ -65,6 +66,7 @@ import leBaoRules from "@/views/courseRulersManager/components/leBaoRules";//
 import dayaTeamRules from "./components/dayaTeamRules";
 import goodsRules from "./components/goodsRules";
 import institutionRules from "./components/institutionRules";
+import teamNo from './components/teamNo'
 import otherRules from './components/otherRules'
 import { permission } from "@/utils/directivePage";
 export default {
@@ -74,7 +76,8 @@ export default {
     overallManager,
     dayaTeamRules,
     otherRules,
-    leBaoRules
+    leBaoRules,
+    teamNo
   },
   name: "baseRulersManager",
   data() {

+ 141 - 0
src/views/baseRulesManager/modals/eidtTeamNo.vue

@@ -0,0 +1,141 @@
+<template>
+  <div>
+    <el-dialog
+      :title="form.id ? '修改编制' : '新增编制'"
+      :visible.sync="teamNoVisible"
+      width="600px"
+    >
+      <el-form :model="form">
+        <el-form-item
+          label="编制名称"
+          prop="name"
+          :rules="[{ required: true, message: '编制名称不能为空' }]"
+        >
+          <el-input
+            placeholder="请输入编制名称"
+            v-model.trim="form.name"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item
+          label="默认声部"
+          prop="subjectIds"
+          :rules="[{ required: true, message: '默认声部不能为空' }]"
+        >
+          <el-select
+            v-model.trim="form.subjectIds"
+            clearable
+            filterable
+            multiple
+            placeholder="请选择声部"
+            collapse-tags
+          >
+            <el-option
+              v-for="(item, index) in selects.subjects"
+              :key="index"
+              :value="item.id"
+              :label="item.name"
+            >
+            </el-option>
+          </el-select>
+          <div class="tagList">
+            <el-tag
+              v-for="tag in chioseSoundList"
+              :key="tag.name"
+              closable
+              style="margin-right: 5px"
+              @close="handleClose(tag)"
+            >
+              {{ tag.name }}
+            </el-tag>
+          </div>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="teamNoVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submit"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { addMusicGroupPlanMaking,updateMusicGroupPlanMaking } from "../api";
+export default {
+  data() {
+    return {
+      form: {
+        id: "",
+        name: "",
+        subjectIds: [],
+      },
+      teamNoVisible: false,
+    };
+  },
+  mounted() {
+    this.$store.dispatch("setSubjects");
+  },
+  methods: {
+    openDialog(row) {
+      if(row&&row.id){
+        this.form  = {...row,subjectIds:row.subjectIdList.split(',').map((item)=>{return item*1} )}
+      }else{
+        this.form =  {
+        id: "",
+        name: "",
+        subjectIds: [],
+      }
+      }
+      this.teamNoVisible = true;
+    },
+    handleClose(tag) {
+      console.log(tag, "tag");
+      this.form.subjectIds.forEach((subjectId, index) => {
+        if (subjectId == tag.id) {
+          this.form.subjectIds.splice(index, 1);
+        }
+      });
+    },
+    async submit() {
+      try {
+        if (!this.form.id) {
+          const res = await addMusicGroupPlanMaking({
+            ...this.form,
+            subjectIdList: this.form.subjectIds.join(","),
+          });
+          this.$message.success("新增成功");
+        } else {
+          const res = await updateMusicGroupPlanMaking({
+            ...this.form,
+            subjectIdList: this.form.subjectIds.join(","),
+          });
+          this.$message.success("修改成功");
+        }
+        this.$emit('getList')
+        this.teamNoVisible = false
+      } catch (e) {
+        console.log(e);
+      }
+    },
+  },
+  computed: {
+    chioseSoundList() {
+      let arr = [];
+      this.selects.subjects.forEach((subject) => {
+        if (this.form.subjectIds.indexOf(subject.id) != -1) {
+          arr.push(subject);
+        }
+      });
+      return arr;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+::v-deep .el-form--inline {
+  .el-form-item__content {
+    display: block;
+  }
+}
+</style>

+ 350 - 0
src/views/branchPayManager/payList.vue

@@ -0,0 +1,350 @@
+ <!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      合作单位缴费
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        ref="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            clearable
+            multiple
+            collapse-tags
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="cooperationId">
+          <el-select
+            v-model.trim="searchForm.cooperationId"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+            @change="changeCooper"
+          >
+            <el-option
+              v-for="(item, index) in cooperationList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            @click="exportBack"
+            v-permission="'export/userCashAccountLog'"
+            >导出</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="id"
+            label="退费编号"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="学员">
+            <template slot-scope="scope">
+              <div>
+                <p>{{ scope.row.username }}</p>
+                <p>{{ scope.row.userId }}</p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="groupId"
+            label="课程组编号"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="退费金额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.amount | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="退费类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.returnFeeType | backType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="退费时间"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.createTime }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="transNo"
+            label="交易流水号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="payTime"
+            label="打款时间"
+            width="100px"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="退费状态">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.transNo ? "已打款" : "未打款" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <auth auths="userCashAccountLog/update">
+                  <el-button type="text" @click="resetBackForm(scope.row)"
+                    >修改</el-button
+                  >
+                </auth>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog :visible.sync="resetVisible" title="修改退费记录" width="400px">
+      <el-form
+        :model="form"
+        :rules="rules"
+        :inline="true"
+        label-width="100px"
+        class="form"
+        ref="form"
+      >
+        <el-form-item label="编号"
+          ><el-input :disabled="true" v-model="form.id"></el-input
+        ></el-form-item>
+        <el-form-item label="学员"
+          ><el-input :disabled="true" v-model="form.username"></el-input
+        ></el-form-item>
+        <el-form-item label="课程组编号"
+          ><el-input :disabled="true" v-model="form.groupId"></el-input
+        ></el-form-item>
+        <el-form-item label="金额"
+          ><el-input
+            :disabled="true"
+            :value="form.amount | moneyFormat"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="交易流水号"
+          ><el-input v-model="form.transNo"></el-input
+        ></el-form-item>
+        <el-form-item
+          v-if="form.transNo"
+          prop="payTime"
+          label="打款时间"
+          :rules="[{ required: true, message: '请选择打款时间' }]"
+        >
+          <el-date-picker
+            v-model="form.payTime"
+            clearable
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            :picker-options="{ firstDayOfWeek: 1 }"
+            placeholder="打款时间"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="退费时间">
+          <el-input :disabled="true" v-model="form.createTime"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="resetVisible = false">取 消</el-button>
+
+        <el-button @click="resetRorm" type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import { getTimes } from "@/utils";
+import load from "@/utils/loading";
+import { backTypeList } from "@/utils/searchArray";
+import { getUserCashAccountLog, resetUserCashAccountLog } from "./api";
+import { Export } from "@/utils/downLoadFile";
+import qs from "qs";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        returnFeeType: null,
+        organId: [],
+        backTime: [],
+        payTime: [],
+        returnFeeFlag:null
+      },
+      backTypeList,
+      tableList: [],
+      cooperationList: [],
+      activeRow: null,
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      form: {
+        id: null,
+      },
+      resetVisible: false,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      let { backTime, payTime, organId, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        organId: organId.join(","),
+        ...getTimes(backTime, ["createStartTime", "createEndTime"]),
+        ...getTimes(payTime, ["payStartTime", "payEndTime"]),
+      };
+      try {
+        const res = await getUserCashAccountLog(params);
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs["searchForm"].resetFields();
+      this.search();
+    },
+    resetBackForm(row) {
+      this.activeRow = row;
+      this.form = { ...row };
+      this.resetVisible = true;
+    },
+    resetRorm() {
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          try {
+            if(!this.form.transNo){
+              this.form.payTime = null;
+            }
+            const res = await resetUserCashAccountLog(this.form);
+            this.$message.success("修改成功");
+            this.resetVisible = false;
+            this.getList();
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+    exportBack() {
+      let { backTime, payTime, organId, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        organId: organId.join(","),
+        ...getTimes(backTime, ["createStartTime", "createEndTime"]),
+        ...getTimes(payTime, ["payStartTime", "payEndTime"]),
+      };
+      Export(
+        this,
+        {
+          url: "/api-web/export/userCashAccountLog",
+          fileName: "退费列表.xls",
+          method: "post",
+          params: qs.stringify(params),
+        },
+        "您确定导出退费列表?"
+      );
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.search {
+  ::v-deep .el-input__inner {
+    width: 260px !important;
+  }
+}
+.form {
+  ::v-deep .el-input {
+    width: 220px;
+  }
+}
+</style>

+ 30 - 1
src/views/categroyManager/specialSetup/branchSetting.vue

@@ -60,6 +60,12 @@
               {{ scope.row.gradeType | gradeTypeFormat }}
             </template>
           </el-table-column>
+          <el-table-column
+            align="center"
+            prop="maxMusicalInstrumentsProfits"
+            label="乐器分润上限"
+          >
+          </el-table-column>
           <el-table-column align="center" label="成立时间">
             <template slot-scope="scope">
               {{ scope.row.registerDate | formatTimer }}
@@ -197,6 +203,19 @@
           ></el-date-picker>
         </el-form-item>
         <el-form-item
+          label="乐器分润上限"
+          prop="maxMusicalInstrumentsProfits"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model.trim="form.maxMusicalInstrumentsProfits"
+            placeholder="请输入乐器分润上限"
+            autocomplete="off"
+          >
+          <template slot="append">元</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
           label="公司名称"
           prop="corporateName"
           :label-width="formLabelWidth"
@@ -438,7 +457,7 @@ export default {
         create: "添加分部",
         update: "修改分部",
       },
-      formLabelWidth: "100px",
+      formLabelWidth: "120px",
       branchStatus: false,
       provinceList: [], // 省列表
       cityList: [], // 市列表
@@ -458,6 +477,7 @@ export default {
         corporateCode: null,
         corporateSeal: null,
         corporateFinancialSeal: null,
+        maxMusicalInstrumentsProfits:null
       },
       rules: {
         name: [{ required: true, message: "请输入分部名称", trigger: "blur" }],
@@ -472,6 +492,14 @@ export default {
         gradeType: [
           { required: true, message: "请选择学年制", trigger: "change" },
         ],
+        maxMusicalInstrumentsProfits: [
+          { required: true, message: "请输入乐器分润上线", trigger: "change" },
+          {
+            pattern:
+              /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+            message: "请输入正确的金额",
+          },
+        ],
       },
       codeStatus: false,
       qrCodeUrl: null,
@@ -644,6 +672,7 @@ export default {
                 corporateCode: row.corporateCode,
                 corporateSeal: row.corporateSeal,
                 corporateFinancialSeal: row.corporateFinancialSeal,
+                maxMusicalInstrumentsProfits:row.maxMusicalInstrumentsProfits
               };
             });
             this.branchStatus = true;

+ 260 - 49
src/views/resetTeaming/components/payInfoDetail.vue

@@ -32,6 +32,9 @@
                         form.eclass = [];
                         form.eclass.push({});
                       }
+                      if (!teamCourse) {
+                        form.calenderFeeType = 'STUDENT';
+                      }
                     }
                   "
                 >
@@ -174,8 +177,30 @@
                 @create="addActive"
                 @remove="removeActive"
               />
+              <paySchoolInfo
+                :form="form"
+                :courseUnitPriceSettingsByType="
+                  organizationCourseUnitPriceSettingsByType
+                "
+                :teamCourse="teamCourse"
+                :member="member"
+                :teamActive="teamActive"
+                :leBao="leBao"
+                @setAllTotal="setAllTotal"
+                v-if="$route.query.payUserType == 'SCHOOL'"
+              />
+              <backMoney
+                v-if="
+                  $route.query.payUserType == 'SCHOOL' &&
+                  form.currentTotalAmount > 0
+                "
+                :form="form"
+              />
             </div>
-            <div class="teamCourseList coreList">
+            <div
+              class="teamCourseList coreList"
+              v-if="$route.query.payUserType == 'STUDENT'"
+            >
               <div class="coreTitle">
                 <p>基础信息设置</p>
               </div>
@@ -223,6 +248,41 @@
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
+                <el-col style="width: 430px">
+                  <!--           :rules="[
+                      {
+                        required: true,
+                        message: '请选择缴费时间',
+                        trigger: 'blur',
+                      },
+                    ]" -->
+                  <el-form-item prop="paymentDate" ref="paymentDate">
+                    <template slot="label">
+                      <p style="position: relative">
+                        <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
+                        是否展示售价
+                        <!-- <el-tooltip placement="top" popper-class="mTooltip">
+                          <div slot="content">在该时间段内学员才可缴费</div>
+                          <i
+                            class="el-icon-question"
+                            style="
+                              font-size: 18px;
+                              color: #f56c6c;
+                              position: relative;
+                              top: 2px;
+                            "
+                          ></i>
+                        </el-tooltip> -->
+                      </p>
+                    </template>
+                    <el-select v-model="form.isShowSalePrice">
+                      <el-option label="是" :value="true"> </el-option>
+                      <el-option label="否" :value="false"> </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
                 <el-col class="memoWrap">
                   <el-form-item
                     class="memoWrapItem"
@@ -257,8 +317,9 @@
 
                     <el-input
                       style="width: 100%"
-                      :rows="1"
+                      :rows="3"
                       v-model="form.memo"
+                      type="textarea"
                       maxlength="50"
                       show-word-limit
                     ></el-input>
@@ -327,6 +388,8 @@ import payTeamCourse from "../modals/payTeamCourse";
 import payMember from "../modals/payMember";
 import payLeBao from "../modals/payLeBao";
 import payTeamActive from "../modals/payTeamActive";
+import paySchoolInfo from "../modals/paySchoolInfo";
+import backMoney from "../modals/backMoney";
 import numeral from "numeral";
 import dayjs from "dayjs";
 import subjectPreview from "@/views/resetTeaming/modals/subject-preview";
@@ -356,6 +419,8 @@ export default {
     payLeBao,
     payTeamActive,
     subjectPreview,
+    paySchoolInfo,
+    backMoney,
   },
   data() {
     return {
@@ -376,19 +441,29 @@ export default {
         ],
         leBaoList: [{}],
         activeList: [{}],
+        teacherFeeList: [],
         isShowMemberForPay: true,
         isShowMusicInsuranceForPay: true,
         isShowVipCourseForPay: true,
         isShowMusicCourseForPay: true,
         leixing: "1",
+        isShowSalePrice: true,
+        calenderFeeJson: {
+          discountTotal: "",
+          allTotal: "",
+          sutdentNumber: "",
+        },
+        calenderFeeType: "STUDENT",
+        musicGroupCalenderRefundPeriods: [{ refundDate: "", refundAmount: "" }],
+        currentTotalAmount: 0,
       },
       teamCourse: false,
-      teamCourseDisabled: false,
       member: false,
-      memberDisabled: false,
       teamActive: false,
-      teamActiveDisabled: false,
       leBao: false,
+      memberDisabled: false,
+      teamCourseDisabled: false,
+      teamActiveDisabled: false,
       leBaoDisabled: false,
       organizationCourseUnitPriceSettings: null,
       baseInfo: null,
@@ -419,6 +494,7 @@ export default {
       tenantId: null,
       isField: false,
       showAutoActivationFlag: false,
+      initDetail: false,
     };
   },
   mounted() {
@@ -444,7 +520,7 @@ export default {
       this.courseViewType = this.baseInfo?.musicGroup?.courseViewType;
       if (
         this.courseViewType != 2 &&
-        this.$route.query.team_status == "PRE_BUILD_FEE"
+        this.$route.query.team_status == "DRAFT"
       ) {
         // 课程团的创建缴费
         this.teamCourse = true;
@@ -453,7 +529,7 @@ export default {
         this.form.paymentType = "MUSIC_APPLY";
       } else if (
         this.courseViewType == 2 &&
-        this.$route.query.team_status == "PRE_BUILD_FEE"
+        this.$route.query.team_status == "DRAFT"
       ) {
         // 会员团的创建缴费
         this.member = true;
@@ -463,12 +539,12 @@ export default {
         this.leBaoDisabled = true;
       }
       if (this.$route.query.payUserType == "SCHOOL") {
-        this.member = false;
-        this.memberDisabled = true;
+        // this.member = false;
+        // this.memberDisabled = true;
         this.leBao = false;
-        this.teamActive = false;
         this.leBaoDisabled = true;
-        this.teamActiveDisabled = true;
+        // this.teamActive = false;
+        // this.teamActiveDisabled = true;
       } else {
       }
       await this.getCharges(); // 续费的选择缴费类型
@@ -481,7 +557,8 @@ export default {
       await this.getAgreement(); // 获取是否有正在启用得协议
       if (this.$route.query.calenderId) {
         // 说明是修改  查缴项目详情
-        getMusicGroupPaymentCalenderDetail({
+        this.initDetail = true;
+        await getMusicGroupPaymentCalenderDetail({
           id: this.$route.query.calenderId,
         }).then((res) => {
           if (res.code == 200) {
@@ -497,15 +574,28 @@ export default {
               res.data?.calender?.deadlinePaymentDate,
             ]);
             this.$set(this.form, "memo", res.data?.calender?.memo);
+
+            this.$set(
+              this.form,
+              "isShowMemberForPay",
+              res.data?.calender?.paymentItemShowState?.isShowMemberForPay
+            );
             this.$set(
               this.form,
-              "payUserType",
-              res.data?.calender?.payUserType
+              "isShowMusicInsuranceForPay",
+              res.data?.calender?.paymentItemShowState
+                ?.isShowMusicInsuranceForPay
+            );
+            this.$set(
+              this.form,
+              "isShowVipCourseForPay",
+              res.data?.calender?.paymentItemShowState?.isShowVipCourseForPay
+            );
+            this.$set(
+              this.form,
+              "isShowMusicCourseForPay",
+              res.data?.calender?.paymentItemShowState?.isShowMusicCourseForPay
             );
-            this.$set(this.form, "isShowMemberForPay", res.data?.calender?.paymentItemShowState?.isShowMemberForPay);
-            this.$set(this.form, "isShowMusicInsuranceForPay", res.data?.calender?.paymentItemShowState?.isShowMusicInsuranceForPay);
-            this.$set(this.form, "isShowVipCourseForPay", res.data?.calender?.paymentItemShowState?.isShowVipCourseForPay);
-            this.$set(this.form, "isShowMusicCourseForPay", res.data?.calender?.paymentItemShowState?.isShowMusicCourseForPay);
             if (res.data.member) {
               // 团练保
               this.member = true;
@@ -520,6 +610,37 @@ export default {
                 this.teamCourse = true;
                 this.isSetCourseSettingsId = true;
                 this.$set(this.form, "eclass", res.data?.course);
+                console.log('设置完成eclass')
+                this.initDetail = true;
+                this.$set(
+                  this.form,
+                  "payUserType",
+                  res.data?.calender?.payUserType
+                );
+                this.$set(
+                  this.form,
+                  "calenderFeeType",
+                  res.data?.calender?.calenderFeeType
+                );
+                this.$set(
+                  this.form,
+                  "musicGroupCalenderRefundPeriods",
+                  res.data?.calenderRefundPeriods
+                );
+
+                let calenderFeeJson = res.data?.calender?.calenderFeeJson;
+                if (calenderFeeJson) {
+                  calenderFeeJson = JSON.parse(calenderFeeJson);
+                  this.$set(this.form, "calenderFeeJson", calenderFeeJson);
+                  if (this.form.calenderFeeType == "TEACHER") {
+                    this.$set(
+                      this.form,
+                      "teacherFeeList",
+                      calenderFeeJson.teacherFeeList
+                    );
+                  }
+
+                }
               });
             }
             if (res.data?.activity?.length > 0) {
@@ -650,7 +771,7 @@ export default {
           path: "/business/resetTeaming",
           query,
         });
-      } else if (query.type == "PRE_BUILD_FEE" || query.type == "feeAudit") {
+      } else if (query.type == "teamDraft" || query.type == "feeAudit") {
         this.$store.dispatch("delVisitedViews", this.$route);
         this.$router.push({
           path: "/business/resetTeaming",
@@ -752,6 +873,10 @@ export default {
           if (res.code == 200) {
             this.dialogSubjectList = res.data.musicGroupSubjectPlans;
             // 默认预览第一个
+            if (this.dialogSubjectList.length <= 0) {
+              this.$message.error("请先设置声部信息");
+              return;
+            }
             this.activeName = this.dialogSubjectList[0].subjectId.toString();
             this.dialogSubjectVisible = true;
           } else {
@@ -790,6 +915,17 @@ export default {
       this.$refs.form.validate(async (isok) => {
         if (isok) {
           let obj = this.fommatDate();
+          if(this.form.payUserType=='SCHOOL'){
+            let total = 0;
+            this.form.musicGroupCalenderRefundPeriods.forEach(item=>{
+              total+=item.refundAmount*1
+            })
+            if(total !=this.form.currentTotalAmount){
+              console.log(total,this.form.currentTotalAmount)
+              this.$message.error('付款金额与回款金额不一致,请重新设置')
+              return
+            }
+          }
           if (this.$route.query.calenderId) {
             obj.calenderId = this.$route.query.calenderId;
             try {
@@ -906,7 +1042,9 @@ export default {
           member: memberObj, // 云教练
           memberPrivilegesItemList: [], // 会员基本内容
           repair:
-            (form.leBaoList?.length > 0&&this.isShowLeBao&&this.$route.query.team_status != 'PROGRESS')
+            form.leBaoList?.length > 0 &&
+            this.isShowLeBao &&
+            this.$route.query.team_status != "PROGRESS"
               ? { ...form.leBaoList[0], optionalFlag: false }
               : null, // 乐保
         },
@@ -917,34 +1055,73 @@ export default {
       };
     },
     fommatDate() {
-      return {
-        payUserType: this.$route.query.payUserType,
-        musicGroupOrganizationCourseSettingId:
-          this.form.musicGroupOrganizationCourseSettingId || null,
-        memo: this.form.memo,
-        startPaymentDate: this.form.paymentDate[0],
-        deadlinePaymentDate: this.form.paymentDate[1],
-        calenderActivityList:
-          this.form.activeList?.length > 0 ? this.form.activeList : null,
-        musicRepair:
-          this.form.leBaoList?.length > 0
-            ? { ...this.form.leBaoList[0] }
-            : null,
-        calenderMember:
-          this.form.memberList?.length > 0 &&
-          this.form.memberList[0]?.memberRankSettingId
-            ? { ...this.form.memberList[0] }
-            : null,
-        musicGroupPaymentCalenderCourseSettingsList:
-          this.form.eclass?.length > 0 ? this.form.eclass : null,
-        musicGroupId: this.$route.query.id,
-        paymentItemShowState:  JSON.stringify({
-          isShowMemberForPay: this.form.isShowMemberForPay,
-          isShowMusicInsuranceForPay: this.form.isShowMusicInsuranceForPay,
-          isShowVipCourseForPay: this.form.isShowVipCourseForPay,
-          isShowMusicCourseForPay: this.form.isShowMusicCourseForPay,
-        }),
-      };
+      if (this.$route.query.payUserType == "STUDENT") {
+        return {
+          payUserType: this.$route.query.payUserType,
+          musicGroupOrganizationCourseSettingId:
+            this.form.musicGroupOrganizationCourseSettingId || null,
+          memo: this.form.memo,
+          startPaymentDate: this.form.paymentDate[0],
+          deadlinePaymentDate: this.form.paymentDate[1],
+          calenderActivityList:
+            this.form.activeList?.length > 0 ? this.form.activeList : null,
+          musicRepair:
+            this.form.leBaoList?.length > 0
+              ? { ...this.form.leBaoList[0] }
+              : null,
+          calenderMember:
+            this.form.memberList?.length > 0 &&
+            this.form.memberList[0]?.memberRankSettingId
+              ? { ...this.form.memberList[0] }
+              : null,
+          musicGroupPaymentCalenderCourseSettingsList:
+            this.form.eclass?.length > 0 ? this.form.eclass : null,
+          musicGroupId: this.$route.query.id,
+          paymentItemShowState: JSON.stringify({
+            isShowMemberForPay: this.form.isShowMemberForPay,
+            isShowMusicInsuranceForPay: this.form.isShowMusicInsuranceForPay,
+            isShowVipCourseForPay: this.form.isShowVipCourseForPay,
+            isShowMusicCourseForPay: this.form.isShowMusicCourseForPay,
+          }),
+        };
+      } else {
+        let calenderFeeJson = this.form.calenderFeeJson;
+        if (this.form.calenderFeeType == "TEACHER") {
+          calenderFeeJson.teacherFeeList = this.form.teacherFeeList;
+        }
+
+        return {
+          payUserType: this.$route.query.payUserType,
+          musicGroupOrganizationCourseSettingId:
+            this.form.musicGroupOrganizationCourseSettingId || null,
+          memo: this.form.memo,
+          calenderActivityList:
+            this.form.activeList?.length > 0 ? this.form.activeList : null,
+          musicRepair:
+            this.form.leBaoList?.length > 0
+              ? { ...this.form.leBaoList[0] }
+              : null,
+          calenderMember:
+            this.form.memberList?.length > 0 &&
+            this.form.memberList[0]?.memberRankSettingId
+              ? { ...this.form.memberList[0] }
+              : null,
+          musicGroupPaymentCalenderCourseSettingsList:
+            this.form.eclass?.length > 0 ? this.form.eclass : null,
+          musicGroupId: this.$route.query.id,
+          paymentItemShowState: JSON.stringify({
+            isShowMemberForPay: this.form.isShowMemberForPay,
+            isShowMusicInsuranceForPay: this.form.isShowMusicInsuranceForPay,
+            isShowVipCourseForPay: this.form.isShowVipCourseForPay,
+            isShowMusicCourseForPay: this.form.isShowMusicCourseForPay,
+          }),
+          calenderFeeType: this.form.calenderFeeType,
+          calenderFeeJson: JSON.stringify(calenderFeeJson),
+          musicGroupCalenderRefundPeriods:
+            this.form.musicGroupCalenderRefundPeriods,
+          currentTotalAmount: this.form.currentTotalAmount,
+        };
+      }
     },
     getScroll() {
       this.scrollTop =
@@ -957,6 +1134,16 @@ export default {
         this.isField = false;
       }
     },
+    setAllTotal(val) {
+      this.form.calenderFeeJson.allTotal = val;
+      this.form.currentTotalAmount =
+        this.form.calenderFeeJson.allTotal -
+        this.form.calenderFeeJson.discountTotal;
+      this.$set(this.form, "currentTotalAmount", this.form.currentTotalAmount);
+    },
+    currentTotalAmount(val) {
+      this.$set(this.form, "currentTotalAmount", val);
+    },
   },
   watch: {
     teamCourse(val) {
@@ -981,6 +1168,29 @@ export default {
         this.$set(this.form, "leBaoList", [{}]);
       }
     },
+    "form.eclass": {
+      handler(newValue) {
+        if (this.initDetail) {
+          this.initDetail = false;
+          return;
+        }
+        let arr = [];
+        newValue.forEach((item) => {
+          arr.push({
+            courseType: item.courseType,
+            teacherNumber: 0,
+            courseNumber: 0,
+            courseCurrentPrice: 0,
+          });
+        });
+        this.$set(this.form, "teacherFeeList", arr);
+      },
+      deep: true,
+    },
+    "form.currentTotalAmount"(val) {
+      // console.log(val,'form.currentTotalAmount');
+      // this.$forceUpdate()
+    },
     async "form.musicGroupOrganizationCourseSettingId"(val) {
       // && !this.rowDetail !this.$route.query.calenderId
 
@@ -1032,7 +1242,8 @@ export default {
 <style lang="scss" scoped>
 @import "~@/views/resetTeaming/modals/pay.scss";
 .memoWrap {
-  width: calc(100% - 430px);
+  // width: calc(100% - 860px);
+  width: 860px;
   .memoWrapItem {
     display: block;
     ::v-deep .el-form-item__content {

+ 162 - 37
src/views/resetTeaming/components/resetPayList.vue

@@ -9,6 +9,21 @@
     >
       <el-form-item>
         <el-select
+          placeholder="缴费种类"
+          v-model="searchForm.payUserType"
+          clearable
+          filterable
+        >
+          <el-option
+            v-for="(item, index) in payUserTypeList"
+            :label="item.label"
+            :value="item.value"
+            :key="index"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-select
           placeholder="缴费类型"
           v-model="searchForm.paymentType"
           clearable
@@ -37,6 +52,14 @@
       >
         新建学员缴费
       </div>
+      <div
+        class="newBand"
+        @click="newSchoolPay"
+        v-if="teamStatus"
+        v-permission="'musicGroupPaymentCalender/createCalender/4359'"
+      >
+        新建学校缴费
+      </div>
       <!-- <div class="newBand"
            v-if="teamStatus"
            v-permission="'/studentPayBase'"
@@ -63,6 +86,13 @@
             </div>
           </template>
         </el-table-column>
+        <el-table-column align="center" prop="paymentType" label="缴费种类">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.payUserType | payUserTypeFormat }}
+            </div>
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="paymentType" label="缴费类型">
           <template slot-scope="scope">
             <div>
@@ -117,13 +147,14 @@
         </el-table-column> -->
         <el-table-column align="center" prop="status" label="缴费人数">
           <template slot-scope="scope">
-            <div>{{ scope.row.actualNum }}/{{ scope.row.expectNum }}</div>
+            <div v-if="scope.row.payUserType=='STUDENT'">{{ scope.row.actualNum }}/{{ scope.row.expectNum }}</div>
+            <div V-esle>--</div>
           </template>
         </el-table-column>
-        <!-- <el-table-column align="center"
-                         prop="operatorName"
-                         label="责任人">
-        </el-table-column> -->
+        <el-table-column align="center"
+                         prop="currentTotalAmount"
+                         label="缴费金额(元)">
+        </el-table-column>
         <el-table-column align="center" prop="memo" width="200px" label="备注">
           <template slot-scope="scope">
             <overflow-text width="200px" :text="scope.row.memo" />
@@ -141,13 +172,14 @@
               <auth
                 auths="musicGroupPaymentCalenderDetail/batchAdd/3890"
                 v-if="
-                  scope.row.auditStatus != 'REJECT' &&
-                  scope.row.auditStatus != 'AUDITING' &&
-                  scope.row.auditStatus != 'DRAFT' &&
+                  scope.row.status != 'REJECT' &&
+                  scope.row.status != 'AUDITING' &&
+                  scope.row.status != 'DRAFT' &&
                   teamStatus &&
                   scope.row.paymentType != 'MUSIC_APPLY' &&
                   scope.row.paymentType != 'ADD_STUDENT' &&
-                  scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST'
+                  scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST'&&
+                  scope.row.payUserType === 'STUDENT'
                 "
               >
                 <el-button type="text" @click="openChioseStudent(scope.row)"
@@ -175,7 +207,6 @@
                   (team_status == 'FEE_AUDIT' || team_status == 'PROGRESS') &&
                   scope.row.status === 'AUDITING' &&
                   scope.row.paymentType != 'ADD_STUDENT'
-
                 "
               >
                 <el-button type="text" @click="revoke(scope.row)"
@@ -188,9 +219,7 @@
                 v-if="
                   teamStatus &&
                   scope.row.paymentType != 'ADD_STUDENT' &&
-
-                  (scope.row.status == 'DRAFT' ||
-                    scope.row.status == 'REJECT')
+                  (scope.row.status == 'DRAFT' || scope.row.status == 'REJECT')
                 "
               >
                 <el-button type="text" @click="removeBatchNo(scope.row)"
@@ -202,8 +231,7 @@
                 v-if="
                   teamStatus &&
                   scope.row.paymentType == 'ADD_STUDENT' &&
-                  (scope.row.status == 'DRAFT' ||
-                    scope.row.status == 'REJECT')
+                  (scope.row.status == 'DRAFT' || scope.row.status == 'REJECT')
                 "
               >
                 <el-button type="text" @click="removeBatchNo(scope.row)"
@@ -217,7 +245,7 @@
                   !isNewGropu &&
                   teamStatus &&
                   scope.row.paymentType != 'MUSIC_APPLY' &&
-                  (scope.row.status == 'OPEN'||scope.row.status == 'OVER')
+                  (scope.row.status == 'OPEN' || scope.row.status == 'OVER')
                 "
                 @click="onCreateQRCode(scope.row)"
                 >续费二维码</el-button
@@ -513,6 +541,23 @@
         <el-button @click="dialogSubjectVisible = false">取 消</el-button>
       </div> -->
     </el-dialog>
+    <el-button type="primary" @click="submitAudit" v-if="team_status == 'DRAFT'"
+      >提交审核</el-button
+    >
+    <el-button
+      type="primary"
+      @click="approval"
+      v-if="team_status == 'AUDIT'"
+      v-permission="'musicGroup/auditSuccess'"
+      >审核通过</el-button
+    >
+    <el-button
+      type="danger"
+      @click="refuse"
+      v-if="team_status == 'AUDIT'"
+      v-permission="'musicGroup/auditFailed'"
+      >驳回</el-button
+    >
   </div>
 </template>
 <script>
@@ -520,7 +565,13 @@ import pagination from "@/components/Pagination/index";
 import dayjs from "dayjs";
 import QrCode from "@/components/QrCode/index";
 import { vaildStudentUrl } from "@/utils/validate";
-import { getTeamBaseInfo } from "@/api/buildTeam";
+import {
+  getTeamBaseInfo,
+  auditSuccess,
+  auditFailed,
+  musicGroupAuditing,
+} from "@/api/buildTeam";
+// import { auditSuccess, auditFailed } from "@/api/buildTeam";
 import {
   resetMusicGroupPaymentCalender,
   delMusicGroupPaymentCalender,
@@ -544,7 +595,7 @@ import reviewDetail from "../modals/review-detail";
 import subjectPreview from "@/views/resetTeaming/modals/subject-preview";
 import { userPaymentType } from "@/constant";
 import { objectToOptions } from "@/utils";
-import { payOrderTypeList } from "@/utils/searchArray";
+import { payOrderTypeList, payUserTypeList } from "@/utils/searchArray";
 export default {
   props: ["isNewGropu"],
   components: {
@@ -561,7 +612,7 @@ export default {
   },
   data() {
     return {
-      paymentType: this.team_status == "PRE_BUILD_FEE" ? 0 : 1,
+      paymentType: this.team_status == "DRAFT" ? 0 : 1,
       musicGroupStu: [],
       payFormType: "user",
       userVisible: false,
@@ -571,6 +622,7 @@ export default {
       organizationCourseUnitPriceSettings: [],
       searchForm: {
         paymentType: null,
+        payUserType: null,
       },
       viewDetail: null,
       tableList: [],
@@ -615,14 +667,16 @@ export default {
       activeName: null,
       dialogCalenderId: null, // 选择编号
       baseInfo: null,
-      memberVisible: false, // 会员缴费
+      memberVisible: false, // 会员缴费,
+      payUserTypeList: payUserTypeList,
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   async mounted() {
-    this.paymentType = this.team_status == "PRE_BUILD_FEE" ? 0 : 1;
+    this.teamid = this.$route.query.id;
+    this.paymentType = this.team_status == "DRAFT" ? 0 : 1;
     // 获取分部
     try {
       const res = await getOrganizationCourseUnitPriceSettings({
@@ -656,9 +710,7 @@ export default {
     },
     teamStatus() {
       // let type = this.$route.query.type;
-      return (
-        this.team_status == "PRE_BUILD_FEE" || this.team_status == "PROGRESS"
-      );
+      return this.team_status == "DRAFT" || this.team_status == "PROGRESS";
     },
     team_status() {
       return this.$route.query.team_status;
@@ -703,7 +755,7 @@ export default {
       // 判断一下乐团是课程缴费 还是会员缴费 且乐团状态为创建缴费中
       // if (
       //   this.baseInfo?.musicGroup?.courseViewType == 2 &&
-      //   this.team_status == "PRE_BUILD_FEE"
+      //   this.team_status == "DRAFT"
       // ) {
       //   this.payFormType = "user";
       //   this.isNew = true;
@@ -717,10 +769,16 @@ export default {
       // }
     },
     newSchoolPay() {
-      this.payFormType = "school";
-      this.isNew = true;
-      this.activeRow = null;
-      this.userVisible = true;
+      let query = this.$route.query;
+      this.$router.push(
+        {
+          path: "/business/studentPaySet",
+          query: { ...query, payUserType: "SCHOOL" },
+        },
+        (route) => {
+          route.meta.title = "学校缴费设置";
+        }
+      );
     },
     getList() {
       let musicGroupId = this.$route.query.id;
@@ -728,7 +786,7 @@ export default {
         page: this.rules.page,
         rows: this.rules.limit,
         musicGroupId: musicGroupId,
-        payUserType: "STUDENT",
+        payUserType: this.searchForm.payUserType,
         paymentType: this.searchForm.paymentType,
       }).then((res) => {
         if (res.code == 200) {
@@ -775,15 +833,10 @@ export default {
         let query = this.$route.query;
         this.$router.push({
           path: "/business/studentPaySet",
-          query: { ...query, payUserType: "STUDENT", calenderId: row.id },
+          query: { ...query, payUserType: row.payUserType, calenderId: row.id },
         });
         // 跳转新接口
         // this.memberVisible = true;
-      } else {
-        this.isNew = false;
-        this.activeRow = row;
-        this.payFormType = row.payUserType === "SCHOOL" ? "school" : "user";
-        this.userVisible = true;
       }
 
       // 判断一下 是不是云收费团 且是乐团报名缴费
@@ -855,6 +908,23 @@ export default {
         // this.$router.push({ path: "/teamPayInfo/strudentPayInfo", query });
       }
     },
+    async submitAudit() {
+      try {
+        await this.$confirm("确定提交审核?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        });
+        const res = await musicGroupAuditing({ musicGroupId: this.teamid });
+        this.$message.success("提交成功");
+        this.$store.dispatch("delVisitedViews", this.$route);
+        this.$router.push({
+          path: "/teamList",
+        });
+      } catch (e) {
+        console.log(e);
+      }
+    },
     // setStudentPay () {
     //   let query = this.$route.query;
     //   this.$router.push({ path: "/business/studentPayBase", query });
@@ -988,11 +1058,17 @@ export default {
       // 开始预览
       this.dialogCalenderId = row.id;
       const musicGroupId = this.$route.query.id;
-      await findMusicGroupSubjectInfo({ musicGroupId: musicGroupId }).then(
+       findMusicGroupSubjectInfo({ musicGroupId: musicGroupId }).then(
         (res) => {
           if (res.code == 200) {
+
             this.dialogSubjectList = res.data.musicGroupSubjectPlans;
+
             // 默认预览第一个
+            if(this.dialogSubjectList.length<=0){
+              this.$message.error('请先设置声部信息')
+              return
+            }
             this.activeName = this.dialogSubjectList[0].subjectId.toString();
             this.dialogSubjectVisible = true;
           } else {
@@ -1001,6 +1077,55 @@ export default {
         }
       );
     },
+    approval() {
+      // 审核通过 验证商品
+      //  let flag = this.$refs.soundSetCore.checkSubmit()
+      // if (!flag) return;
+      this.$confirm(`是否审核通过?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          auditSuccess({ musicGroupId: this.teamid }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("审核通过");
+              this.$store.dispatch("delVisitedViews", this.$route);
+              this.$router.push({
+                path: "/teamList",
+                query: { search: this.Fsearch, rules: this.Frules },
+              });
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    refuse() {
+      // auditFailed
+      this.$prompt("请输入拒绝原因", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+      }).then(({ value }) => {
+        //   点击确认  值是value
+        if (!value) {
+          this.$message.error("请输入驳回原因");
+          return;
+        } else {
+          auditFailed({ musicGroupId: this.teamid, memo: value }).then(
+            (res) => {
+              if (res.code == 200) {
+                this.$message.success("已拒绝");
+                this.$store.dispatch("delVisitedViews", this.$route);
+                this.$router.push({
+                  path: "/teamList",
+                  query: { search: this.Fsearch, rules: this.Frules },
+                });
+              }
+            }
+          );
+        }
+      });
+    },
   },
   watch: {
     chioseStudentVisible() {

+ 3 - 3
src/views/resetTeaming/components/resetPayListSchool.vue

@@ -581,7 +581,7 @@ export default {
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   async mounted() {
-    this.paymentType = this.team_status == "PRE_BUILD_FEE" ? 0 : 1;
+    this.paymentType = this.team_status == "DRAFT" ? 0 : 1;
     // 获取分部
     try {
       const res = await getOrganizationCourseUnitPriceSettings({
@@ -609,7 +609,7 @@ export default {
     teamStatus() {
       // let type = this.$route.query.type;
       let team_status = this.team_status;
-      return team_status == "PRE_BUILD_FEE" || team_status == "PROGRESS";
+      return team_status == "DRAFT" || team_status == "PROGRESS";
     },
     team_status() {
       return this.$route.query.team_status;
@@ -650,7 +650,7 @@ export default {
     newSchoolPay() {
       if (
         this.baseInfo?.musicGroup?.courseViewType == 2 &&
-        this.team_status == "PRE_BUILD_FEE"
+        this.team_status == "DRAFT"
       ) {
         this.$message.error("会员缴费乐团无法创建学校缴费");
         return;

+ 1 - 1
src/views/resetTeaming/components/strudentPayInfo.vue

@@ -762,7 +762,7 @@ export default {
           path: "/business/resetTeaming",
           query: { ...this.$route.query },
         });
-      } else if (query.type == "PRE_BUILD_FEE" || query.type == "feeAudit") {
+      } else if (query.type == "teamDraft" || query.type == "teamAudit") {
         this.$store.dispatch("delVisitedViews", this.$route);
         this.$router.push({
           path: "/business/resetTeaming",

+ 19 - 18
src/views/resetTeaming/index.vue

@@ -97,7 +97,20 @@
           name="2"
           :disabled="!teamid"
         >
-          <resetSound v-if="activeIndex == '2'" />
+          <resetSound v-if="activeIndex == '2'"    @handleClick="handleClick"/>
+        </el-tab-pane>
+        <el-tab-pane
+          label="缴费设置"
+          lazy
+          v-if="permission('/teamStudentPayList')"
+          name="3"
+          :disabled="!teamid"
+        >
+          <resetPayList
+            v-if="activeIndex == '3'"
+            @changeActive="handleClick"
+            @getBaseInfo="getBaseInfo"
+          />
         </el-tab-pane>
         <el-tab-pane
           lazy
@@ -108,7 +121,7 @@
         >
           <!--         v-if="
             team_status == 'PRE_APPLY' ||
-            team_status == 'PRE_BUILD_FEE' ||
+            team_status == 'DRAFT' ||
             team_status == 'FEE_AUDIT' ||
             team_status == 'APPLY'
           " -->
@@ -117,20 +130,8 @@
             :isedit="team_status == 'PRE_APPLY'"
           />
         </el-tab-pane>
-        <el-tab-pane
-          label="学员缴费设置"
-          lazy
-          v-if="permission('/teamStudentPayList')"
-          name="3"
-          :disabled="!teamid"
-        >
-          <resetPayList
-            v-if="activeIndex == '3'"
-            @changeActive="handleClick"
-            @getBaseInfo="getBaseInfo"
-          />
-        </el-tab-pane>
-        <el-tab-pane
+
+        <!-- <el-tab-pane
           label="学校缴费设置"
           lazy
           v-if="permission('/teamSchoolPayList')"
@@ -142,7 +143,7 @@
             @changeActive="handleClick"
             @getBaseInfo="getBaseInfo"
           />
-        </el-tab-pane>
+        </el-tab-pane> -->
         <el-tab-pane
           label="报名缴费"
           :disabled="!teamid"
@@ -310,7 +311,7 @@ export default {
         DRAFT: require("./images/2.png"),
         AUDIT: require("./images/1.png"),
         PRE_APPLY: require("./images/3.png"),
-        PRE_BUILD_FEE: require("./images/5.png"),
+        DRAFT: require("./images/5.png"),
         FEE_AUDIT: require("./images/6.png"),
         APPLY: require("./images/4.png"),
         PAY: require("./images/12.png"),

+ 141 - 0
src/views/resetTeaming/modals/backMoney.vue

@@ -0,0 +1,141 @@
+<template>
+  <div class="teamCourseList">
+    <p class="coreTitle">回款设置</p>
+    <div class="infoWrap">
+      <div class="payList">
+        <div
+          class="payRow"
+          v-for="(item, index) in form.musicGroupCalenderRefundPeriods"
+          :key="index"
+        >
+          <p class="subTitle">回款周期{{ index + 1 }}</p>
+          <el-form-item
+            label="回款金额"
+            :prop="'musicGroupCalenderRefundPeriods.' + index + '.refundAmount'"
+            :rules="[
+              { required: true, message: '请输入回款金额', trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model.trim="item.refundAmount"
+              type="number"
+              autocomplete="off"
+              placeholder="请输入回款金额"
+            >
+              <i slot="suffix" class="el-input__icon" style="padding-right: 5px"
+                >元</i
+              >
+            </el-input>
+          </el-form-item>
+
+          <el-form-item
+            label="回款时间"
+            :prop="'musicGroupCalenderRefundPeriods.' + index + '.refundDate'"
+            :rules="[
+              {
+                required: true,
+                trigger: 'blur',
+                message: '请选择回款金额',
+              },
+            ]"
+          >
+            <el-date-picker
+              v-model="item.refundDate"
+              type="date"
+              placeholder="回款时间"
+              format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd"
+            >
+            </el-date-picker>
+          </el-form-item>
+
+          <i
+            class="el-icon-delete delete"
+            v-if="!(form.musicGroupCalenderRefundPeriods.length <= 1)"
+            @click="deteleRow(item, index)"
+          ></i>
+        </div>
+        <el-row>
+          <el-button class="addBackBtn" @click="addBack">+添加</el-button>
+        </el-row>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import { courseType, boolOptions } from "@/constant";
+export default {
+  props: ["form"],
+  data() {
+    return {
+      charges: [],
+      clearable: false,
+      isDisabled: false,
+      boolOptionsOptions: [],
+      courseType,
+    };
+  },
+  methods: {
+    deteleRow(item, index) {
+      this.form.musicGroupCalenderRefundPeriods.splice(index,1)
+    },
+    addBack() {
+      this.form.musicGroupCalenderRefundPeriods.push({
+        refundDate: "",
+        refundAmount: "",
+      });
+    },
+  },
+  computed: {},
+};
+</script>
+<style lang="scss" scoped>
+@import "~@/views/resetTeaming/modals/pay.scss";
+::v-deep .infoWrap {
+  padding: 0 20px 20px;
+  .el-form-item {
+    margin: 0 0 20px;
+  }
+  .el-form-item__label {
+    display: block !important;
+    text-align: left;
+    padding-left: 10px;
+  }
+  .el-input-number {
+    width: 180px;
+    .el-input__inner {
+      text-align: left;
+    }
+  }
+}
+.memoWrap {
+  // width: calc(100% - 860px);
+  width: 860px;
+  .memoWrapItem {
+    display: block;
+    ::v-deep .el-form-item__content {
+      display: inline-block;
+      width: calc(100% - 140px);
+    }
+  }
+}
+.subTitle {
+  margin: 10px 0;
+  padding-left: 10px;
+  font-size: 15px;
+  font-weight: bold;
+  color: #606266;
+}
+.addBackBtn {
+  width: 440px;
+}
+.payRow {
+  position: relative;
+}
+.delete {
+  position: relative;
+  top: 45px;
+  margin-left: 10px;
+  cursor: pointer;
+}
+</style>

+ 1 - 1
src/views/resetTeaming/modals/member-pay-form.vue

@@ -172,7 +172,7 @@ export default {
         if (!this.rowDetail?.batchNo) {
           try {
             const res = await musicGroupPaymentCalenderAdd(reset);
-            if (this.$route.query.team_status == "PRE_BUILD_FEE") {
+            if (this.$route.query.team_status == "DRAFT") {
               this.$message.success("创建成功");
               this.$store.dispatch("delVisitedViews", this.$route);
               this.$router.push({

+ 3 - 6
src/views/resetTeaming/modals/pay.scss

@@ -19,12 +19,11 @@
     border-radius: 2px;
     left: 0;
     top: 11px;
-    content:''
+    content: "";
   }
 }
 
 .teamCourseList {
-
   margin-bottom: 15px;
   background-color: #fff;
   ::v-deep .el-radio-group {
@@ -50,8 +49,7 @@
     margin-top: 6px;
   }
 
-  ::v-deep .number-input .el-input__inner,
-  .number-input .el-input__inner {
+  :deep(.number-input .el-input__inner, .number-input .el-input__inner) {
     text-align: left;
   }
 }
@@ -60,12 +58,11 @@
   margin: 20px 0;
 }
 
-
 .titleFormItem {
   margin: 0;
   align-items: center;
 
-  ::v-deep .el-form-item__content {
+  :deep(.el-form-item__content) {
     margin-top: 3px;
   }
 }

+ 1 - 0
src/views/resetTeaming/modals/payMember.vue

@@ -181,6 +181,7 @@
         prop="actualAmount"
         key="actualAmount"
         width="170px"
+        v-if="form.calenderFeeType =='STUDENT'"
       >
         <template slot="header">
           <p style="position: relative">

+ 365 - 0
src/views/resetTeaming/modals/paySchoolInfo.vue

@@ -0,0 +1,365 @@
+<template>
+  <div class="teamCourseList">
+    <p class="coreTitle">
+      费用信息
+
+      <!-- <el-form-item
+        label="是否展示"
+        prop="isShowMusicInsuranceForPay"
+        v-if="allCourseCurrentPrice == 0"
+        class="titleFormItem"
+      >
+        <el-select
+          style="width: 100% !important"
+          v-model="form.isShowMusicInsuranceForPay"
+          placeholder="请选择是否展乐保费用"
+          size="mini"
+        >
+          <el-option label="是" :value="true"> </el-option>
+          <el-option label="否" :value="false"> </el-option>
+        </el-select>
+      </el-form-item> -->
+    </p>
+    <div class="infoWrap">
+      <el-form-item
+        label="计价标准"
+        class="vertical"
+        prop="isShowMusicInsuranceForPay"
+      >
+        <el-select v-model="form.calenderFeeType" placeholder="请选择计价标准">
+          <el-option label="按学生" value="STUDENT"> </el-option>
+          <el-option
+            label="按老师"
+            value="TEACHER"
+            :disabled="!teamCourse"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item
+        v-if="form.calenderFeeType == 'STUDENT'"
+        class="vertical"
+        label="学生人数"
+        prop="isShowMusicInsuranceForPay"
+      >
+        <el-input-number
+          v-model="form.calenderFeeJson.sutdentNumber"
+          :controls="false"
+          :min="0"
+          type="number"
+        >
+        </el-input-number>
+      </el-form-item>
+
+      <div v-if="form.calenderFeeType == 'TEACHER'">
+        <el-table
+          class="courseTable"
+          :data="form.teacherFeeList"
+          style="width: 100% !important; background: #f9f9f9"
+          :header-cell-style="{ background: '#F9F9F9', color: '#444' }"
+        >
+          <el-table-column
+            label="课程类型"
+            prop="courseType"
+            key="courseType"
+            width="170px"
+          >
+            <template slot-scope="scope">
+              <el-form-item
+                :prop="'teacherFeeList.' + scope.$index + '.courseType'"
+                :rules="{
+                  required: true,
+                  message: '请选择课程类型',
+                  trigger: 'change',
+                }"
+              >
+                <el-select
+                  style="width: 90% !important"
+                  v-model="form.teacherFeeList[scope.$index].courseType"
+                  placeholder="课程类型"
+                  clearable
+                  :disabled="true"
+                >
+                  <el-option
+                    v-for="(item, key) in courseUnitPriceSettingsByType"
+                    :key="key"
+                    :label="courseType[key]"
+                    :value="key"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="老师人数"
+            prop="teacherNumber"
+            key="teacherNumber"
+            width="170px"
+          >
+            <template slot-scope="scope">
+              <el-form-item
+                :prop="'teacherFeeList.' + scope.$index + '.teacherNumber'"
+                :rules="[
+                  {
+                    required: true,
+                    message: '老师人数',
+                    trigger: 'blur',
+                  },
+                ]"
+              >
+                <el-input-number
+                  style="width: 90% !important"
+                  class="number-input"
+                  v-model="form.teacherFeeList[scope.$index].teacherNumber"
+                  :controls="false"
+                  :precision="0"
+                  :min="1"
+                  :disabled="isDisabled"
+                  placeholder="老师人数"
+                />
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="课时数"
+            prop="courseNumber"
+            key="courseNumber"
+            width="170px"
+          >
+            <template slot="header">
+              <p style="">课时数</p>
+            </template>
+            <template slot-scope="scope">
+              <el-form-item
+                :prop="'teacherFeeList.' + scope.$index + '.courseNumber'"
+                :rules="{
+                  required: true,
+                  message: '请输入课时数',
+                  trigger: 'blur',
+                }"
+              >
+                <!-- $listeners.moneyChange -->
+                <el-input-number
+                  style="width: 90% !important"
+                  class="number-input"
+                  v-model="form.teacherFeeList[scope.$index].courseNumber"
+                  :controls="false"
+                  :precision="0"
+                  :min="1"
+                  placeholder="请输入课时数"
+                />
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="courseCurrentPrice"
+            key="courseCurrentPrice"
+            label="单课时售价(元)"
+            width="170px"
+          >
+            <template slot-scope="scope">
+              <el-form-item
+                :prop="'teacherFeeList.' + scope.$index + '.courseCurrentPrice'"
+                :rules="{
+                  required: true,
+                  message: '单课时售价(元)',
+                  trigger: 'blur',
+                }"
+              >
+                <el-input-number
+                  style="width: 90% !important"
+                  class="number-input"
+                  v-model="form.teacherFeeList[scope.$index].courseCurrentPrice"
+                  :controls="false"
+                  :precision="2"
+                  :min="1"
+                  placeholder="单课时售价(元)"
+                />
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column> </el-table-column>
+        </el-table>
+      </div>
+
+      <div>
+        <el-form-item
+          class="vertical"
+          label="总金额"
+          prop="isShowMusicInsuranceForPay"
+        >
+          <el-input-number
+            :value="allTotal"
+            :controls="false"
+            :min="0"
+            :precision="2"
+            :disabled="true"
+            type="number"
+          >
+          </el-input-number>
+        </el-form-item>
+        <el-form-item
+          class="vertical"
+          label="优惠金额"
+          prop="isShowMusicInsuranceForPay"
+        >
+          <el-input-number
+            v-model="form.calenderFeeJson.discountTotal"
+            :controls="false"
+            :min="0"
+            :max="allTotal"
+            :precision="2"
+            type="number"
+          >
+          </el-input-number>
+        </el-form-item>
+        <el-form-item
+          class="vertical"
+          label="付款金额"
+
+          prop="isShowMusicInsuranceForPay"
+        >
+          <el-input-number
+          v-model="form.currentTotalAmount"
+            :controls="false"
+            :min="0"
+            :precision="2"
+            :disabled="true"
+          >
+          </el-input-number>
+        </el-form-item>
+      </div>
+      <el-row>
+        <el-col class="memoWrap">
+          <el-form-item
+            class="memoWrapItem"
+            prop="memo"
+            :rules="[
+              {
+                required: true,
+                message: '请输入备注',
+                trigger: 'blur',
+              },
+            ]"
+            ref="memo"
+          >
+            <template slot="label">
+              <p style="position: relative">
+                <span style="color: #f56c6c; margin-right: 4px">*</span>
+                备注
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">本次缴费的内容描述</div>
+                  <i
+                    class="el-icon-question"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      position: relative;
+                      top: 2px;
+                    "
+                  ></i>
+                </el-tooltip>
+              </p>
+            </template>
+
+            <el-input
+              style="width: 100%"
+              :rows="3"
+              v-model="form.memo"
+              type="textarea"
+              maxlength="50"
+              show-word-limit
+            ></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+<script>
+import { courseType, boolOptions } from "@/constant";
+export default {
+  props: [
+    "form",
+    "leBaoInfo",
+    "courseUnitPriceSettingsByType",
+    "teamCourse",
+    "member",
+    "teamActive",
+    "leBao",
+  ],
+  data() {
+    return {
+      charges: [],
+      clearable: false,
+      isDisabled: false,
+      boolOptionsOptions: [],
+      courseType,
+    };
+  },
+  methods: {},
+  computed: {
+    allTotal() {
+      let num = 0;
+      if (this.form.calenderFeeType == "STUDENT") {
+
+        if (this.teamCourse) {
+          this.form.eclass.forEach((element) => {
+            num += element.courseCurrentPrice;
+          });
+        }
+        if (this.member) {
+          this.form.memberList.forEach((element) => {
+            num += element.actualAmount * element.num;
+          });
+        }
+        if (this.teamActive) {
+          this.form.activeList.forEach((element) => {
+            num += element.actualAmount * 1;
+          });
+        }
+
+        num *= this.form.calenderFeeJson.sutdentNumber;
+      } else {
+        this.form.teacherFeeList.forEach((element) => {
+            num += (element.courseCurrentPrice*element.courseNumber*element.teacherNumber);
+          });
+      }
+      this.$emit('setAllTotal',num)
+      return num;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+@import "~@/views/resetTeaming/modals/pay.scss";
+::v-deep .infoWrap {
+  padding: 10px;
+  .el-form-item__label {
+    display: block !important;
+    text-align: left;
+    padding-left: 10px;
+  }
+  .vertical {
+    margin-top: 0px!important;
+  }
+  .el-input-number {
+    width: 180px;
+    .el-input__inner {
+      text-align: left;
+    }
+  }
+}
+.memoWrap {
+  // width: calc(100% - 860px);
+  width: 860px;
+  .memoWrapItem {
+    display: block;
+    ::v-deep .el-form-item__content {
+      display: inline-block;
+      width: calc(100% - 140px);
+    }
+  }
+}
+</style>

+ 1 - 0
src/views/resetTeaming/modals/payTeamActive.vue

@@ -112,6 +112,7 @@
         </template>
       </el-table-column>
       <el-table-column
+      v-if="form.calenderFeeType =='STUDENT'"
         label="售价(元)"
         prop="actualAmount"
         key="actualAmount"

+ 68 - 2
src/views/resetTeaming/modals/review-detail.vue

@@ -39,10 +39,20 @@
       <descriptions-item label="订单类型:">{{
         calender.payUserType | payUserTypeFormat
       }}</descriptions-item>
-
-      <descriptions-item label="缴费金额:">{{
+      <descriptions-item label="学生人数:" v-if="calenderFeeJson&&calenderFeeJson.sutdentNumber&&calender.calenderFeeType=='STUDENT'">{{
+        numeral(calenderFeeJson.sutdentNumber)
+      }}</descriptions-item>
+      <descriptions-item label="缴费总金额:" v-if="calenderFeeJson&&calenderFeeJson.allTotal">{{
+        numeral(calenderFeeJson.allTotal).format("0,0")
+      }}</descriptions-item>
+      <descriptions-item label="优惠金额:" v-if="calenderFeeJson&&calenderFeeJson.discountTotal">{{
+        numeral(calenderFeeJson.discountTotal).format("0,0")
+      }}</descriptions-item>
+      <descriptions-item label="实缴金额">{{
         numeral(calender.currentTotalAmount).format("0,0")
       }}</descriptions-item>
+
+
       <descriptions-item label="缴费单号:" v-if="calender.payUserType == 'SCHOOL'">{{
         calender.id
       }}</descriptions-item>
@@ -309,6 +319,54 @@
       </el-table-column>
       <el-table-column prop="originalAmount" label="原价(元)"></el-table-column>
     </el-table>
+    <el-alert
+      title="老师及课程配置"
+      :closable="false"
+      class="alert"
+      type="info"
+      v-if="calenderFeeJson&&calenderFeeJson.teacherFeeList&&calender.calenderFeeType=='TEACHER'"
+    >
+    </el-alert>
+    <el-table
+      :data="calenderFeeJson.teacherFeeList"
+      stripe
+      v-if="calenderFeeJson&&calenderFeeJson.teacherFeeList&&calender.calenderFeeType=='TEACHER'"
+      style="width: 100%; margin-top: 10px"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+    >
+    <el-table-column prop="courseType" label="课程类型">
+        <template slot-scope="scope">
+          {{ scope.row.courseType | courseTypeFormat }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="teacherNumber" label="老师人数" >
+
+      </el-table-column>
+      <el-table-column prop="courseNumber" label="课程数">
+      </el-table-column>
+      <el-table-column prop="courseCurrentPrice" label="单课时售价(元)">
+      </el-table-column>
+    </el-table>
+    <el-alert
+      title="缴费周期"
+      :closable="false"
+      class="alert"
+      type="info"
+      v-if="calenderRefundPeriods&&calenderRefundPeriods.length > 0"
+    >
+    </el-alert>
+    <el-table
+      :data="calenderRefundPeriods"
+      stripe
+      v-if="calenderRefundPeriods&&calenderRefundPeriods.length > 0"
+      style="width: 100%; margin-top: 10px"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+    >
+      <el-table-column prop="refundAmount" label="回款金额" >
+      </el-table-column>
+      <el-table-column prop="refundDate" label="回款时间" >
+      </el-table-column>
+    </el-table>
 
     <!-- 会员信息 -->
 
@@ -352,6 +410,7 @@ const initData = {
   studentNum: 0,
   phone: "",
   username: "",
+  calenderRefundPeriods:[]
 };
 export default {
   components: { Item },
@@ -377,6 +436,13 @@ export default {
       }
       return "";
     },
+    calenderFeeJson(){
+      const calenderFee = this.calender?.calenderFeeJson;
+      if(calenderFee){
+        return JSON.parse(calenderFee)
+      }
+      return null
+    }
   },
   mounted() {
     this.init();

+ 1 - 1
src/views/resetTeaming/modals/user-pay-form.vue

@@ -954,7 +954,7 @@ export default {
           if (!this.rowDetail?.batchNo) {
             try {
               const res = await musicGroupPaymentCalenderAdd(data);
-              if (this.$route.query.team_status == "PRE_BUILD_FEE") {
+              if (this.$route.query.team_status == "DRAFT") {
                 this.$message.success("创建成功");
                 this.$store.dispatch("delVisitedViews", this.$route);
                 this.$router.push({

+ 35 - 11
src/views/teamBuild/components/soundSetComponents/chioseMusic.vue

@@ -1,10 +1,12 @@
 <template>
   <div>
+    <el-form :model="item">
     <div v-for="(music, index) in item.chioseMusic" :key="index">
       <div class="chioseMusic">
         <div class="flexRow bigFlex">
           <div class="chioseWrap">
             <p class="title">可选乐器{{ index + 1 }}:</p>
+
             <el-select
               style="width: 180px"
               :disabled="basdisabled"
@@ -58,11 +60,18 @@
                   ? music.type.includes('GROUP')
                   : false
               "
-              style="width: 180px"
+              style="width: 180px;margin-top: 20px;"
             >
-              <el-input type="number" v-model="music.groupPrice" disabled>
-                <template slot="append">元</template></el-input
-              >
+
+                <el-form-item
+                  :prop="'chioseMusic.'+index+'.groupPrice'"
+                  :rules="[{ validator:(rule, value, callback)=> checkGroupPrice(rule, value, callback,music), trigger: 'blur' }]"
+                >
+                  <el-input type="number" v-model="music.groupPrice">
+                    <template slot="append">元</template></el-input
+                  >
+                </el-form-item>
+
             </div>
           </div>
           <div class="chioseWrap">
@@ -100,10 +109,7 @@
             ></i>
             <i
               class="el-icon-remove-outline marginLeft10 iconStyle"
-              v-if="
-                item.chioseMusic.length > 1 &&
-                !basdisabled
-              "
+              v-if="item.chioseMusic.length > 1 && !basdisabled"
               @click="deleteMusic(music)"
               style="font-size: 20px; cursor: pointer"
             ></i>
@@ -151,11 +157,12 @@
         >新增可选乐器</el-button
       >
     </div> -->
+  </el-form>
   </div>
 </template>
 <script>
 export default {
-  props: ["item", "basdisabled", "activeSoundList"],
+  props: ["item", "basdisabled", "activeSoundList",'dividend'],
   data() {
     return {
       radio: "",
@@ -164,8 +171,8 @@ export default {
   },
   created() {},
   mounted() {
-    console.log({...this.item})
-    if (this.item.chioseMusic.length < 1) {
+    console.log(this.dividend,'dividend')
+    if ( this.item.chioseMusic.length < 1) {
       this.item.chioseMusic.push({
         musical: "",
         type: [],
@@ -180,6 +187,7 @@ export default {
       this.item.goodsList.map((some, index) => {
         if (some.id == val) {
           music.groupPrice = some.groupPurchasePrice;
+          music.groupPurchasePrice = some.groupPurchasePrice;
         }
       });
     },
@@ -214,6 +222,18 @@ export default {
     changeFee(val, music) {
       this.$set(music, "groupRemissionCourseFee", val);
     },
+    checkGroupPrice(rule, value, callback,music) {
+      console.log(rule, value, this.dividend,music);
+      if (!value) {
+        callback(new Error("请输入团购价格"));
+      } else if (value*1 >(music.groupPurchasePrice+this.dividend)) {
+        callback(new Error(`团购金额不得大于${music.groupPurchasePrice+this.dividend}`));
+      } else if (value*1 <(music.groupPurchasePrice)) {
+        callback(new Error(`团购金额不得小于${music.groupPurchasePrice}`));
+      }else {
+        callback();
+      }
+    },
   },
   // watch: {
   //   item: {
@@ -278,5 +298,9 @@ p {
   justify-content: flex-start;
   align-items: center;
   margin-bottom: 10px;
+
 }
+:deep(.el-form-item) {
+    margin-bottom: 0!important;
+  }
 </style>

+ 40 - 14
src/views/teamBuild/components/soundSetComponents/soundSetCore.vue

@@ -52,6 +52,7 @@
               :item="item"
               @lookMusic="lookMusic"
               :basdisabled="basdisabled"
+              :dividend="dividend"
             />
             <div class="coreItemRow">
               <p class="title">教辅:</p>
@@ -109,7 +110,9 @@ import {
   findMusicGroupSubjectInfo,
   updateSubjectInfo,
   getSubjectGoods,
+  getTeamBaseInfo,
 } from "@/api/buildTeam";
+import { getMusicGroupPlanMakingDetail } from "@/views/baseRulesManager/api";
 import dayjs from "dayjs";
 import chioseSoundList from "./chioseSoundList";
 import chioseMusic from "./chioseMusic";
@@ -132,6 +135,7 @@ export default {
       basdisabled: false,
       teamid: "",
       isField: true,
+      dividend:0
     };
   },
   mounted() {
@@ -142,6 +146,11 @@ export default {
     this.$nextTick((res) => {
       this.init();
     });
+    getTeamBaseInfo({ musicGroupId: this.teamid }).then((res) => {
+      if (res.code == 200) {
+        this.dividend = res.data.maxMusicalInstrumentsProfits
+      }
+    });
   },
   deactivated() {
     window.removeEventListener("scroll", this.getScroll);
@@ -252,7 +261,6 @@ export default {
                         // 格式化商品和教辅
                         res.data.musicGroupSubjectGoodsGroups.forEach(
                           (shop) => {
-
                             let index = findIndex(this.activeSoundList, (o) => {
                               return o.id == shop.subjectId;
                             });
@@ -306,17 +314,28 @@ export default {
     getDefaultSubject() {
       let type = this.topfor.type;
       let section = this.topfor.section;
-      getDefaultSubject({
-        chargeTypeId: type,
-        organId: section,
-        number: 1,
+      let musicGroupPlanMakingId = this.topfor.musicGroupPlanMakingId;
+      getMusicGroupPlanMakingDetail({
+        id: musicGroupPlanMakingId,
       }).then(async (res) => {
         if (res.code == 200) {
           let activeSound = [];
-          this.activeSoundList = res.data.map((item) => {
-            activeSound.push(item.id);
-            return this.initSound(item);
-          });
+          this.activeSoundList = [];
+
+          for (let key in res.data.subjectMap) {
+            console.log(key, "key", res.data.subjectMap[key], "name");
+            activeSound.push(key * 1);
+            this.activeSoundList.push(
+              this.initSound({
+                id: key * 1,
+                name: res.data.subjectMap[key],
+              })
+            );
+          }
+          // this.activeSoundList = res.data.map((item) => {
+          //   activeSound.push(item.id);
+          //   return this.initSound(item);
+          // });
           this.activeSound = activeSound;
           this.chioseActiveSound = activeSound;
           await this.changeActiveSound(activeSound.join(","));
@@ -356,7 +375,6 @@ export default {
       this.soundVisible = false;
     },
     initSound(item) {
-
       let obj = {
         id: item.id,
         sound: item.name,
@@ -585,8 +603,9 @@ export default {
       if (this.teamStatus == "newTeam") {
       } else {
         obj.musicGroupId = this.teamid;
+        // 有type 到审核  没有 继续草稿
         if (type) {
-          obj.musicGroupStatus = "AUDIT";
+          obj.musicGroupStatus = "DRAFT";
         } else {
           obj.musicGroupStatus = "DRAFT";
         }
@@ -598,7 +617,7 @@ export default {
               noMusic.join(",") +
               "尚未设置乐器,学员报名该声部时将无乐器可购买,是否确认?";
           } else {
-            str = "是否提交审核";
+            str = "是否设置缴费信息";
           }
           this.$confirm(str, "提示", {
             confirmButtonText: "确定",
@@ -609,10 +628,17 @@ export default {
               updateSubjectInfo(obj).then((res) => {
                 if (res.code == 200) {
                   this.$message.success("提交成功");
-                  this.$store.dispatch("delVisitedViews", this.$route);
-                  this.$router.push({
+
+                  if(type== 3){
+
+                    this.$emit('chiosetab',type)
+                  }else{
+                    this.$store.dispatch("delVisitedViews", this.$route);
+                    this.$router.push({
                     path: "/teamList",
                   });
+                  }
+
                 }
               });
             })

+ 255 - 25
src/views/teamBuild/components/teamBaseInfo.vue

@@ -7,7 +7,7 @@
         ref="topinfo"
         label-width="150px"
         :inline="true"
-        label-position="left"
+        label-position="right"
       >
         <div class="head">乐团基本信息:</div>
         <el-form-item
@@ -180,7 +180,7 @@
             placeholder="选择日期"
           ></el-date-picker>
         </el-form-item> -->
-        <el-form-item
+        <!-- <el-form-item
           label="报名截止时间"
           prop="time"
           :rules="[{ required: true, message: '请输入报名截止时间' }]"
@@ -193,7 +193,7 @@
             :picker-options="beginDate()"
             placeholder="选择日期"
           ></el-date-picker>
-        </el-form-item>
+        </el-form-item> -->
         <!-- <el-form-item
           label="预计开团时间"
           prop="startTime"
@@ -224,7 +224,11 @@
 
           </el-select>
         </el-form-item> -->
-        <el-form-item label="机构类型" prop="ownershipType" v-if="tenantId ==1">
+        <el-form-item
+          label="机构类型"
+          prop="ownershipType"
+          v-if="tenantId == 1"
+        >
           <el-select
             v-model.trim="topFrom.ownershipType"
             :disabled="basdisabled"
@@ -235,7 +239,11 @@
             value="LEASE"></el-option>-->
           </el-select>
         </el-form-item>
-           <el-form-item label="课外训练布置老师" prop="extracurricularTeacher" v-if="tenantId ==1">
+        <el-form-item
+          label="课外训练布置老师"
+          prop="extracurricularTeacher"
+          v-if="tenantId == 1"
+        >
           <el-select
             v-model.trim="topFrom.extracurricularTeacher"
             :disabled="basdisabled"
@@ -334,6 +342,142 @@
             </el-option>
           </el-select>
         </el-form-item>
+
+        <div v-if="tenantId == 1">
+          <div class="head">建团信息:</div>
+          <el-form-item
+            label="建团编制"
+            prop="musicGroupPlanMakingId"
+            :rules="[{ required: true, message: '建团编制不能为空' }]"
+          >
+            <el-select
+              v-model.trim="topFrom.musicGroupPlanMakingId"
+              filterable
+              :disabled="basdisabled"
+              clearable
+              @change="changeType"
+            >
+              <el-option
+                v-for="(item, index) in musicGroupPlanMakingList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="成团年级"
+            prop="firstRecruitGrade"
+            :rules="[{ required: true, message: '成团年级不能为空' }]"
+          >
+            <el-select
+              v-model.trim="topFrom.firstRecruitGrade"
+              filterable
+              :disabled="basdisabled || !topFrom.section"
+              clearable
+            >
+              <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
+            label="收费标准"
+            prop="defaultChargeStandard"
+            :rules="[{ required: true, message: '收费标准不能为空' }, {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+              trigger: 'blur',
+            },]"
+          >
+            <el-input
+              v-model.trim="topFrom.defaultChargeStandard"
+              placeholder="请输入收费标准"
+              :disabled="basdisabled"
+            >
+
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="单次训练时长"
+            prop="singleTrainMinutes"
+            :rules="[
+              { required: true, message: '请输入单次训练时长' },
+              {
+                pattern: /(^[0-9+]*$)/,
+                message: '请输入正确的时长',
+              },
+            ]"
+          >
+            <el-select
+              v-model.trim="topFrom.singleTrainMinutes"
+              filterable
+              :disabled="basdisabled"
+              allow-create
+              default-first-option
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in singleTrainMinutesList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="课程配置"
+            prop="coursePlan"
+            :rules="[{ required: true, message: '请选择课程配置' }]"
+          >
+            <el-select
+              v-model.trim="topFrom.coursePlan"
+              filterable
+              :disabled="basdisabled"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in coursePlanList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="毕业年级"
+            prop="graduateGrade"
+            :rules="[{ required: true, message: '毕业年级不能为空' }]"
+          >
+            <el-select
+              v-model.trim="topFrom.graduateGrade"
+              filterable
+              :disabled="basdisabled || !topFrom.firstRecruitGrade"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in gradeList"
+                :key="index"
+                :label="item.label"
+                :value="item.value"
+                :disabled="item.value <= topFrom.firstRecruitGrade"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="销售活动" prop="saleActivityDesc">
+            <el-input
+              placeholder="请输入销售活动"
+              :maxlength="100"
+              v-model.trim="topFrom.saleActivityDesc"
+              show-word-limit
+              :disabled="basdisabled"
+            ></el-input>
+          </el-form-item>
+        </div>
         <div class="head">乐团设置:</div>
         <el-form-item
           label="同步群消息"
@@ -467,6 +611,7 @@ import {
   getOrganRole,
   getTeacher,
   createTeam,
+  getGradeList,
 } from "@/api/buildTeam";
 import dayjs from "dayjs";
 import merge from "webpack-merge";
@@ -474,7 +619,20 @@ import { queryByOrganId, getSchool } from "@/api/systemManage";
 import qrCode from "@/components/QrCode/index";
 import { classStatus, courseViewTypeList } from "@/utils/searchArray";
 import { vaildStudentUrl, vaildTeacherUrl } from "@/utils/validate";
+import { getMusicGroupPlanMakingList } from "@/views/baseRulesManager/api";
 import mergeMusic from "../components/merge-music";
+const singleTrainMinutesList = [
+  { name: "90+90", id: "90+90" },
+  { name: "90+90+45", id: "90+90+45" },
+];
+const coursePlanList = [
+  { name: "PlanS", id: "PlanS" },
+  { name: "PlanA", id: "PlanA" },
+  { name: "PlanB", id: "PlanB" },
+  { name: "PlanC", id: "PlanC" },
+  { name: "PlanD", id: "PlanD" },
+  { name: "PlanE", id: "PlanE" },
+];
 export default {
   components: {
     mergeMusic,
@@ -513,7 +671,14 @@ export default {
         ownershipType: "OWN", // 合作机构类型
         repairUserId: null, // 维修技师
         transactionTeacherId: null, // 衔接老师
-        extracurricularTeacher:'NORMAL'
+        extracurricularTeacher: "NORMAL",
+        musicGroupPlanMakingId: "", //建团编制
+        firstRecruitGrade: "", // 成团年级
+        defaultChargeStandard: "", // 收费标准
+        singleTrainMinutes: "", //单次训练时长
+        coursePlan: "", // 课程计划
+        graduateGrade: "", // 毕业年级
+        saleActivityDesc: "", // 销售活动描述
       },
       baseInfo: {},
       money: 580,
@@ -530,6 +695,8 @@ export default {
       transactionList: [],
       addList: [], // 教学地点列表
       activeTeam: [],
+      gradeList: [], // 年级
+      gradeListObj: null,
       teamid: "",
       teamStatus: "",
       isInit: false,
@@ -566,6 +733,9 @@ export default {
       qrCodeUrl: null,
       codeTitle: null,
       tenantId: "",
+      coursePlanList: coursePlanList,
+      musicGroupPlanMakingList: [],
+      singleTrainMinutesList: singleTrainMinutesList,
     };
   },
   created() {},
@@ -703,7 +873,7 @@ export default {
       }
       this.teamStatus = this.$route.query.type;
       this.team_status = this.$route.query.team_status;
-      this.tenantId = this.$helpers.tenantId
+      this.tenantId = this.$helpers.tenantId;
       // if (this.teamStatus == "newTeam") {
       //   this.$store.dispatch("buildIndex", 0);
       // }
@@ -711,6 +881,14 @@ export default {
       // if (this.teamStatus != "newTeam") {
       //   this.$store.dispatch("draftIndex", 0);
       // }
+
+      // 获取建团编制
+      getMusicGroupPlanMakingList().then((res) => {
+        if (res.code == 200) {
+          this.musicGroupPlanMakingList = res.data;
+        }
+      });
+
       // 传过来的乐团信息
       this.activeTeam = this.getTeamList;
       if (
@@ -762,7 +940,7 @@ export default {
         // 如果是新建团
 
         let sotrage = JSON.parse(localStorage.getItem(`newTeambase`));
-        console.log(sotrage,this.topFrom)
+        console.log(sotrage, this.topFrom);
         sotrage ? (this.topFrom = sotrage) : this.topFrom;
         if (this.topFrom?.section) {
           // 获取员工
@@ -796,13 +974,12 @@ export default {
           let arr = [];
           if (this.sectionList.length <= 0) {
             arr.push("organ");
-          }else{
-            if(!this.topFrom.section){
-               this.$set(this.topFrom,'section',this.sectionList[0].id)
-               this.changeSection(this.sectionList[0].id)
-               // diao
+          } else {
+            if (!this.topFrom.section) {
+              this.$set(this.topFrom, "section", this.sectionList[0].id);
+              this.changeSection(this.sectionList[0].id);
+              // diao
             }
-
           }
           if (this.typeList.length <= 0) {
             arr.push("teamPayType");
@@ -820,11 +997,13 @@ export default {
       this.topFrom.head = "";
       this.topFrom.school = "";
       this.topFrom.address = "";
+      this.topFrom.firstRecruitGrade = "";
+      this.topFrom.graduateGrade = "";
+
       // 发请求 根据分部id 查询所有员工
-      if(val){
-         this.getBaseList(val);
+      if (val) {
+        this.getBaseList(val);
       }
-
     },
     async getBaseList(val) {
       // 合作单位
@@ -860,6 +1039,19 @@ export default {
           this.teacherList = res.data;
         }
       });
+      // 获取年级
+      getGradeList({ id: val }).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],
+            });
+          }
+        }
+      });
       Promise.all([
         queryByOrganId({ organId: val }),
         getSchool({ organId: val }),
@@ -959,9 +1151,9 @@ export default {
             //  修改  合并对象
             obj.musicGroup = {
               settlementType: this.topFrom.salary,
-              applyExpireDate: dayjs(this.topFrom.time).format(
+              applyExpireDate: this.topFrom.time?dayjs(this.topFrom.time).format(
                 "YYYY-MM-DD HH:mm:ss"
-              ),
+              ):null,
               chargeTypeId: this.topFrom.type,
               cooperationOrganId: this.topFrom.school,
               courseViewType: this.topFrom.courseViewType,
@@ -992,7 +1184,14 @@ export default {
               homeworkPushFlag: this.topFrom.homeworkPushFlag,
               isGiveAccessories: this.topFrom.isGiveAccessories,
               memberCourseShowFlag: this.topFrom.memberCourseShowFlag,
-              extracurricularTeacher:this.topFrom.extracurricularTeacher
+              extracurricularTeacher: this.topFrom.extracurricularTeacher,
+              musicGroupPlanMakingId: this.topFrom.musicGroupPlanMakingId,
+              firstRecruitGrade: this.topFrom.firstRecruitGrade,
+              defaultChargeStandard: this.topFrom.defaultChargeStandard,
+              singleTrainMinutes: this.topFrom.singleTrainMinutes,
+              coursePlan: this.topFrom.coursePlan,
+              graduateGrade: this.topFrom.graduateGrade,
+              saleActivityDesc: this.topFrom.saleActivityDesc,
             };
             // obj.musicGroupPaymentEntities = [];
             // createTeam
@@ -1112,7 +1311,14 @@ export default {
         homeworkPushFlag: 1,
         isGiveAccessories: 0,
         memberCourseShowFlag: 0,
-        extracurricularTeacher:'NORMAL'
+        extracurricularTeacher: "NORMAL",
+        musicGroupPlanMakingId: '',
+        firstRecruitGrade: '',
+        defaultChargeStandard: '',
+        singleTrainMinutes: '',
+        coursePlan: '',
+        graduateGrade: '',
+        saleActivityDesc: '',
       };
       this.$refs["topinfo"].resetFields();
     },
@@ -1351,9 +1557,33 @@ export default {
       this.topFrom.transactionTeacherId =
         res.data.musicGroup.transactionTeacherId || "";
       this.topFrom.homeworkPushFlag = res.data.musicGroup.homeworkPushFlag;
-      this.topFrom.isGiveAccessories = res.data.musicGroup.isGiveAccessories ? 1 : 0;
-      this.topFrom.memberCourseShowFlag = res.data.musicGroup.memberCourseShowFlag ? 1 : 0;
-       this.topFrom.extracurricularTeacher = res.data.musicGroup.extracurricularTeacher
+      this.topFrom.isGiveAccessories = res.data.musicGroup.isGiveAccessories
+        ? 1
+        : 0;
+      this.topFrom.memberCourseShowFlag = res.data.musicGroup
+        .memberCourseShowFlag
+        ? 1
+        : 0;
+      this.topFrom.extracurricularTeacher =
+        res.data.musicGroup.extracurricularTeacher;
+
+        this.topFrom.musicGroupPlanMakingId =
+        res.data.musicGroup.musicGroupPlanMakingId;
+        this.topFrom.firstRecruitGrade =
+        res.data.musicGroup.firstRecruitGrade;
+        this.topFrom.defaultChargeStandard =
+        res.data.musicGroup.defaultChargeStandard;
+        this.topFrom.singleTrainMinutes =
+        res.data.musicGroup.singleTrainMinutes;
+        this.topFrom.coursePlan =
+        res.data.musicGroup.coursePlan;
+        this.topFrom.graduateGrade =
+        res.data.musicGroup.graduateGrade;
+        this.topFrom.saleActivityDesc =
+        res.data.musicGroup.saleActivityDesc;
+
+
+
       localStorage.setItem(`${this.teamid}base`, JSON.stringify(this.topFrom));
     },
     changeType(val) {
@@ -1555,7 +1785,7 @@ export default {
 </style>
 <style scoped lang="scss">
 .banseLeft {
-  ::v-deep .el-form--inline {
+  :deep(.el-form--inline) {
     .el-form-item__content {
       display: block;
     }

+ 31 - 18
src/views/teamBuild/components/teamSoundSet.vue

@@ -11,7 +11,9 @@
       @getNumber="getNumber"
     />
     <div class="btnWrap">
-      <el-button type="primary" @click="goback"  v-if="teamStatus == 'newTeam'">上一步</el-button>
+      <el-button type="primary" @click="goback" v-if="teamStatus == 'newTeam'"
+        >上一步</el-button
+      >
 
       <el-button
         type="primary"
@@ -23,7 +25,7 @@
         }"
         >提交</el-button
       >
-      <el-button
+      <!-- <el-button
         type="primary"
         @click="submitAudit(1)"
         v-if="teamStatus == 'teamDraft'"
@@ -42,14 +44,21 @@
         v-if="teamStatus == 'teamAudit'"
         v-permission="'musicGroup/auditFailed'"
         >驳回</el-button
+      > -->
+      <el-button
+        type="primary"
+        @click="gotoNext"
+        v-if="teamStatus == 'teamAudit'"
+        v-permission="'musicGroup/auditSuccess'"
+        >下一步</el-button
       >
       <el-button
-           type="primary"
-        v-if="teamStatus == 'resetTeam'||teamStatus == 'teamDraft'"
+        type="primary"
+        v-if="teamStatus == 'resetTeam' || teamStatus == 'teamDraft'"
         v-permission="'musicGroup/updateSubjectInfo'"
-        @click="submitInfo()"
+        @click="submitInfo(3)"
       >
-        保存
+        下一步
       </el-button>
       <!--  v-if="teamStatus != 'teamAudit'" -->
       <!--
@@ -105,12 +114,12 @@ export default {
     }
   },
   activated() {
-      if (this.teamStatus == "newTeam") {
-        this.$store.dispatch("buildIndex", 1);
-      }
-      if (this.teamStatus != "newTeam") {
-        this.$store.dispatch("draftIndex", 1);
-      }
+    if (this.teamStatus == "newTeam") {
+      this.$store.dispatch("buildIndex", 1);
+    }
+    if (this.teamStatus != "newTeam") {
+      this.$store.dispatch("draftIndex", 1);
+    }
     this.teamid = this.$route.query.id;
     this.teamStatus = this.$route.query.type;
   },
@@ -119,16 +128,17 @@ export default {
     goback() {
       this.$emit("chiosetab", 0);
     },
-    submitInfo (val) {
+    submitInfo(val) {
+      this.$refs.soundSetCore.submitInfo(val);
 
-     this.$refs.soundSetCore.submitInfo(val);
+      this.$emit("chiosetab", 3);
     },
     chiosetab(val) {
-      this.$emit("chiosetab", val);
+      console.log('调用chiosetab',val)
+      this.$emit("handleClick", { name: String(val) });
     },
     submitAudit(val) {
-       this.$refs.soundSetCore.submitInfo(val);
-
+      this.$refs.soundSetCore.submitInfo(val);
     },
     selectMusic() {
       this.$refs.soundSetCore.submitInfo();
@@ -143,7 +153,7 @@ export default {
     },
     approval() {
       // 审核通过 验证商品
-     let flag = this.$refs.soundSetCore.checkSubmit()
+      let flag = this.$refs.soundSetCore.checkSubmit();
       if (!flag) return;
       this.$confirm(`是否审核通过?`, "提示", {
         confirmButtonText: "确定",
@@ -190,6 +200,9 @@ export default {
         }
       });
     },
+    gotoNext() {
+      this.$emit("handleClick", { name: "3" });
+    },
   },
 
   computed: {},

+ 1 - 1
src/views/teamBuild/forecastName.vue

@@ -9,7 +9,7 @@
         </p> -->
 
     <div class="btnList">
-      <auth :auths="['musicGroup/sendParentMeetingNotice']" v-if="isedit || $route.query.team_status=='PRE_BUILD_FEE'">
+      <auth :auths="['musicGroup/sendParentMeetingNotice']" v-if="isedit || $route.query.team_status=='DRAFT'">
         <el-button type="primary" @click="extendPaymentStatus = true"
           >预报名家长会通知</el-button
         >

+ 3 - 3
src/views/teamDetail/teamInfo.vue

@@ -29,7 +29,7 @@
         >
         <!--         v-if="
             team_status == 'PRE_APPLY' ||
-            team_status == 'PRE_BUILD_FEE' ||
+            team_status == 'DRAFT' ||
             team_status == 'FEE_AUDIT' ||
             team_status == 'APPLY'
           " -->
@@ -63,7 +63,7 @@
         >
           <resetPayList
             v-if="activeIndex == '3'"
-            :isNewGropu="team_status == 'PRE_BUILD_FEE' ? true : false"
+            :isNewGropu="team_status == 'DRAFT' ? true : false"
           />
         </el-tab-pane>
         <el-tab-pane
@@ -74,7 +74,7 @@
         >
           <resetPayListSchool
             v-if="activeIndex == '4'"
-            :isNewGropu="team_status == 'PRE_BUILD_FEE' ? true : false"
+            :isNewGropu="team_status == 'DRAFT' ? true : false"
           />
         </el-tab-pane>
       </tab-router>

+ 6 - 6
src/views/teamDetail/teamList.vue

@@ -16,7 +16,7 @@
           type="primary"
           v-if="permission('musicGroup/createGroup')"
           @click="createNewTeam"
-          >新建乐团</el-button
+          >申请乐团</el-button
         >
       </div>
 
@@ -347,7 +347,7 @@
                   v-if="
                     (scope.row.status == 'PRE_APPLY' ||
                       scope.row.status == 'PAUSE' ||
-                      scope.row.status == 'PRE_BUILD_FEE' ||
+                      scope.row.status == 'DRAFT' ||
                       scope.row.status == 'PROGRESS' ||
                       scope.row.status == 'CANCELED' ||
                       scope.row.status == 'APPLY' ||
@@ -395,7 +395,7 @@
                       scope.row.status == 'APPLY' ||
                       scope.row.status == 'PAY' ||
                       scope.row.status == 'PRE_APPLY' ||
-                      scope.row.status == 'PRE_BUILD_FEE') &&
+                      scope.row.status == 'DRAFT') &&
                     permission('musicGroup/cancelMusicGroup')
                   "
                   @click="stopTeam(scope.row)"
@@ -819,11 +819,11 @@ export default {
           );
           break;
         }
-        case "PRE_BUILD_FEE": {
+        case "DRAFT": {
           // 创建缴费中
           // this.$router.push({
           //   path: "/business/createPayment",
-          //   query: { type: "PRE_BUILD_FEE", id: row.id, name: row.name },
+          //   query: { type: "DRAFT", id: row.id, name: row.name },
           // });
           this.$router.push(
             {
@@ -832,7 +832,7 @@ export default {
                 type: "look",
                 id: row.id,
                 name: row.name,
-                team_status: "PRE_BUILD_FEE",
+                team_status: "DRAFT",
                 tabrouter: 3,
               },
             },

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott