mo пре 2 година
родитељ
комит
e6dd4dd39c
61 измењених фајлова са 3945 додато и 543 уклоњено
  1. 0 0
      dist/static/js/app.612ee71f.js
  2. 1 0
      dist/static/js/chunk-20841b8e.d034ed3c.js
  3. 0 0
      dist/static/js/chunk-54daf316.6597ed54.js
  4. 0 0
      dist/static/js/chunk-7791b9a2.f067c86d.js
  5. 1 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.5fa9b3f0.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.74c63e11.js
  11. 22 0
      src/api/buildTeam.js
  12. 2 2
      src/constant/index.js
  13. 7 2
      src/layout/components/Navbar.vue
  14. 5 2
      src/router/index.js
  15. 16 2
      src/store/modules/permission.js
  16. 4 2
      src/utils/searchArray.js
  17. 10 1
      src/utils/vueFilter.js
  18. 38 0
      src/views/baseRulesManager/api.js
  19. 217 0
      src/views/baseRulesManager/components/teamNo.vue
  20. 10 7
      src/views/baseRulesManager/index.vue
  21. 141 0
      src/views/baseRulesManager/modals/eidtTeamNo.vue
  22. 42 0
      src/views/branchPayManager/api.js
  23. 79 0
      src/views/branchPayManager/modals/addPayCode.vue
  24. 275 0
      src/views/branchPayManager/payList.vue
  25. 313 0
      src/views/branchPayManager/payShareList.vue
  26. 355 0
      src/views/branchPayManager/payschoolList.vue
  27. 30 1
      src/views/categroyManager/specialSetup/branchSetting.vue
  28. 166 9
      src/views/courseCredentials/index.vue
  29. 1 0
      src/views/main/abnormal/index.vue
  30. 20 0
      src/views/main/constant.js
  31. 334 61
      src/views/resetTeaming/components/payInfoDetail.vue
  32. 259 47
      src/views/resetTeaming/components/resetPayList.vue
  33. 3 3
      src/views/resetTeaming/components/resetPayListSchool.vue
  34. 1 1
      src/views/resetTeaming/components/strudentPayInfo.vue
  35. 20 18
      src/views/resetTeaming/index.vue
  36. 9 6
      src/views/resetTeaming/modals/accessories.vue
  37. 54 38
      src/views/resetTeaming/modals/activity.vue
  38. 141 0
      src/views/resetTeaming/modals/backMoney.vue
  39. 20 8
      src/views/resetTeaming/modals/courseModel.vue
  40. 64 34
      src/views/resetTeaming/modals/instrumentModel.vue
  41. 1 1
      src/views/resetTeaming/modals/member-pay-form.vue
  42. 20 7
      src/views/resetTeaming/modals/member.vue
  43. 3 6
      src/views/resetTeaming/modals/pay.scss
  44. 1 0
      src/views/resetTeaming/modals/payMember.vue
  45. 428 0
      src/views/resetTeaming/modals/paySchoolInfo.vue
  46. 1 0
      src/views/resetTeaming/modals/payTeamActive.vue
  47. 81 2
      src/views/resetTeaming/modals/review-detail.vue
  48. 20 15
      src/views/resetTeaming/modals/signUpPayment.less
  49. 246 166
      src/views/resetTeaming/modals/subject-preview.vue
  50. 1 1
      src/views/resetTeaming/modals/user-pay-form.vue
  51. 71 13
      src/views/teamBuild/components/soundSetComponents/chioseMusic.vue
  52. 48 16
      src/views/teamBuild/components/soundSetComponents/soundSetCore.vue
  53. 265 28
      src/views/teamBuild/components/teamBaseInfo.vue
  54. 30 18
      src/views/teamBuild/components/teamSoundSet.vue
  55. 1 1
      src/views/teamBuild/forecastName.vue
  56. 24 13
      src/views/teamBuild/modals/change-voice.vue
  57. 2 0
      src/views/teamBuild/signupList.vue
  58. 1 1
      src/views/teamDetail/components/modals/classroom-preview.vue
  59. 3 3
      src/views/teamDetail/teamInfo.vue
  60. 35 7
      src/views/teamDetail/teamList.vue
  61. 1 1
      vue.config.js

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/app.612ee71f.js


Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
dist/static/js/chunk-20841b8e.d034ed3c.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-54daf316.6597ed54.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-7791b9a2.f067c86d.js


Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
dist/static/js/chunk-80642148.c41e1af5.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-80f30f36.8fd7d3ca.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-86c79eee.5fa9b3f0.js


Разлика између датотеке није приказан због своје велике величине
+ 2 - 0
dist/static/js/chunk-bfced2fa.8f673410.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-cf34dd02.ae719a1c.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/chunk-e007daee.74c63e11.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,13 +240,13 @@ export const packageStatus = {
   1: "可用",
   2: "已使用"
 };
-
+//   DRAFT: "创建缴费中",
 export const musicGroupType = {
   DRAFT: "编辑中",
   AUDIT: "审核中",
   PRE_APPLY: "预报名中",
-  PRE_BUILD_FEE: "创建缴费中",
   FEE_AUDIT: "费用审核中",
+  FEE_AUDIT_FAILED:'费用审核失败',
   APPLY: "报名中",
   PAY: "缴费中",
   PREPARE: "筹备中",

+ 7 - 2
src/layout/components/Navbar.vue

@@ -647,7 +647,12 @@ export default {
 .navbar_tag {
   margin: 0 5px 8px;
 }
-
+::v-deep .el-scrollbar__thumb{
+  background-color: rgba(255,255,255,.3);
+  &:hover{
+    background-color: rgba(255,255,255,.3);
+  }
+}
 .indexlayout-top-menu {
   padding-left: 57px;
   height: 76px;
@@ -946,4 +951,4 @@ export default {
 /deep/.el-badge__content.is-fixed.is-dot {
   top: 28px !important;
 }
-</style>
+</style>

+ 5 - 2
src/router/index.js

@@ -623,7 +623,10 @@ export const asyncRoutes = {
   // 学员乐保
   studentLebaoManager: () => import("@/views/studentLebaoManager"),
   // 排课资格
-  courseCredentials: () => import("@/views/courseCredentials")
+  courseCredentials: () => import("@/views/courseCredentials"),
+  // 合作单位缴费
+  branchPayManager: () => import("@/views/branchPayManager/payList"),
+  // 合作单位分润 payShareList
+  branchShareManager: () => import("@/views/branchPayManager/payShareList"),
 };
-
 export default router;

+ 16 - 2
src/store/modules/permission.js

@@ -317,14 +317,14 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
-          name: "学员缴费设置",
+          name: "缴费设置",
           path: "studentPaySet",
           component: () =>
             import("@/views/resetTeaming/components/payInfoDetail"),
           hidden: true,
           meta: {
             noCache: "1",
-            title: "学员缴费设置",
+            title: "缴费设置",
             belongTopMenu: "/business",
             activeMenu: "/teamList",
             id: "xx3"
@@ -1081,6 +1081,20 @@ function setDetailRoute(accessedRoutes) {
             activeMenu: "/businessStatement",
             id: "4217"
           }
+        },
+        {
+          name: "缴费项目列表",
+          path: "payschoolList",
+          component: () =>
+            import("@/views/branchPayManager/payschoolList"),
+          hidden: true,
+          meta: {
+            noCache: "1",
+            title: "缴费项目列表",
+            belongTopMenu: "/financialManager",
+            activeMenu: "/branchPayManager",
+            id: "4217"
+          }
         }
       ]);
     }

+ 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 = [];

+ 10 - 1
src/utils/vueFilter.js

@@ -364,7 +364,7 @@ Vue.filter("paymentStatus", value => {
 //     PAY: "缴费中",
 //     PREPARE: "筹备中",
 //     PROGRESS: "进行中",
-//     PRE_BUILD_FEE: '创建缴费中',
+//     DRAFT: '创建缴费中',
 //     CANCELED: '取消',
 //     PAUSE: '暂停',
 //     AUDIT: '乐团审核中',
@@ -619,6 +619,15 @@ Vue.filter("paymentStatusDetall", value => {
   };
   return template[value];
 });
+
+Vue.filter("paymentStatusGet", value => {
+  let template = {
+    PAID_COMPLETED: "已付款",
+    PROCESSING: "付款中",
+    NON_PAYMENT: "未付款"
+  };
+  return template[value];
+});
 Vue.filter("replacementInsFilter", value => {
   let template = {
     2: "已缴费",

+ 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>

+ 42 - 0
src/views/branchPayManager/api.js

@@ -0,0 +1,42 @@
+import request2 from '@/utils/request2'
+import qs from 'qs'
+let api = '/api-web'
+
+
+export function getCoopRefundList(data) {
+  return request2({
+    url: api + '/musicGroupCalenderRefundPeriod/queryCoopRefund',
+    method: 'post',
+    // requestType:'form',
+    data
+  })
+}
+
+export function getCoopCalenderList(data) {
+  return request2({
+    url: api + '/musicGroupCalenderRefundPeriod/queryCoopCalender',
+    method: 'post',
+    // requestType:'form',
+    data
+  })
+}
+
+
+export function getCoopShareList(data) {
+  return request2({
+    url: api + '/cooperationShareProfit/queryPage',
+    method: 'post',
+    // requestType:'form',
+    data
+  })
+}
+
+
+export function addCoopShare(data) {
+  return request2({
+    url: api + '/cooperationShareProfit/addCredentials',
+    method: 'post',
+    // requestType:'form',
+    data
+  })
+}

+ 79 - 0
src/views/branchPayManager/modals/addPayCode.vue

@@ -0,0 +1,79 @@
+<template>
+  <div>
+    <el-dialog
+      title="添加付款记录"
+      width="520px"
+      :visible.sync="visitVisible"
+      append-to-body
+    >
+      <el-form :model="form" ref="ruleForm" @close="closeDialog">
+        <el-form-item
+          label="付款流水号"
+          prop="paymentNo"
+          :rules="[{ required: true, message: '请输入付款流水号' }]"
+        >
+          <el-input v-model.trim="form.paymentNo" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item
+          label="备注"
+          prop="memo"
+        >
+          <el-input :rows="3" type="textarea" placeholder="请输入付款备注" v-model.trim="form.memo" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="上传凭证"  prop="credentials" :rules="[{ required: true, message: '请上传凭证' }]">
+        <div style="width: 100% !important">
+          <uploadImageList :uploaded="form.credentials" bucket_name="contracts"/>
+          <!-- bucket_name="cooperation" -->
+        </div>
+      </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="visitVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { addCoopShare } from '../api'
+export default {
+  data() {
+    return {
+      visitVisible: false,
+      form:{
+        id:'',
+        paymentNo:'',
+        credentials:[],
+      }
+    };
+  },
+  mounted() {},
+  methods: {
+   async submit(){
+    console.log(this.form)
+    this.$refs.ruleForm.validate( async flag=>{
+      if(flag){
+        let {credentials,...reset} = this.form
+        let url = credentials.map(item=>{return item.url})
+        try{
+          const res = await addCoopShare({...reset,credentials:url.join(',')})
+          this.$message.success('添加成功')
+          this.$emit('getList')
+          this.closeDialog()
+        }catch(e){
+          console.log(e)
+        }
+      }
+    })
+   },
+    openDialog(row){
+      this.form.id = row.id;
+      this.visitVisible = true
+    },
+    closeDialog(){
+      this.$refs.ruleForm.resetFields()
+      this.visitVisible = false
+    }
+  },
+};
+</script>

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

@@ -0,0 +1,275 @@
+ <!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      合作单位缴费
+      <auth auths="musicGroupCalenderRefundPeriod/queryCoopCalender">
+        <filter-search :keys="['searchType']" @reload="onReSet" />
+      </auth>
+    </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
+            collapse-tags
+            placeholder="请选择分部"
+            @change="changeOrgan"
+          >
+            <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="search">
+          <el-select
+            v-model.trim="searchForm.search"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+          >
+            <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>
+      </save-form>
+      <div style="font-size: 14px; color: #f85043; padding-bottom: 10px">
+        欠费总额:{{ amount | moneyFormat }}元<i
+          style="width: 10px; display: inline-block"
+        ></i>
+      </div>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="所属分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="cooperationOrganName"
+            label="合作单位"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="应收总额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.receivable | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="实收总额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.income | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="待收金额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.prepaidFee | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="educationUserName"
+            label="乐团主管"
+            width="100px"
+          >
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <auth auths="musicGroupCalenderRefundPeriod/queryCoopCalender">
+                  <el-button type="text" @click="gotoDetail(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>
+  </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 { Export } from "@/utils/downLoadFile";
+import { getCoopRefundList } from "./api";
+import { queryByOrganId } from "@/api/systemManage";
+import qs from "qs";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        returnFeeType: null,
+        organId: null,
+        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,
+      amount: 0,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      // let { , payTime, organId, ...rest } = this.searchForm;
+      let params = {
+        ...this.searchForm,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        errorType: this.$route.query.filter_type,
+      };
+      try {
+        const res = await getCoopRefundList(params);
+        this.tableList = res.data.pageInfo.rows;
+        this.rules.total = res.data.pageInfo.total;
+        this.amount = res.data.amount;
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs["searchForm"].resetFields();
+      this.search();
+    },
+    gotoDetail(row) {
+      this.$router.push({
+        path: "/financialManager/payschoolList",
+        query: { id: row.cooperationOrganId, name: row.cooperationOrganName },
+      });
+      // /financialManager/payschoolList
+    },
+
+    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),
+        },
+        "您确定导出退费列表?"
+      );
+    },
+    changeOrgan(val) {
+      this.searchForm.cooperationId = null;
+    },
+  },
+  watch: {
+    "searchForm.organId"(val) {
+      if (val) {
+        queryByOrganId({ organId: val }).then((res) => {
+          if (res.code == 200) {
+            this.cooperationList = res.data;
+          }
+        });
+      }
+    },
+    // "searchForm.cooperationId"(val) {
+    //   if (val) {
+    //     getMusicGroup({ cooperationId: val }).then((res) => {
+    //       this.musicList = res.data;
+    //     });
+    //   }
+    // },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.search {
+  ::v-deep .el-input__inner {
+    width: 260px !important;
+  }
+}
+.form {
+  ::v-deep .el-input {
+    width: 220px;
+  }
+}
+</style>

+ 313 - 0
src/views/branchPayManager/payShareList.vue

@@ -0,0 +1,313 @@
+ <!--  -->
+ <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
+            collapse-tags
+            placeholder="请选择分部"
+            @change="changeOrgan"
+          >
+            <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="cooperationOrganId">
+          <el-select
+            v-model.trim="searchForm.cooperationOrganId"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+          >
+            <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 prop="paymentStatus">
+          <el-select
+            v-model.trim="searchForm.paymentStatus"
+            clearable
+            placeholder="付款状态"
+          >
+            <el-option label="已付款" value="PAID_COMPLETED"></el-option>
+            <el-option label="未付款" value="NON_PAYMENT"></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>
+      </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="organName"
+            label="所属分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="cooperationName"
+            label="合作单位"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupName"
+            label="乐团"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicalNum"
+            label="乐器数量"
+          ></el-table-column>
+          <!-- <el-table-column
+            align="center"
+            prop="cooperationOrganName"
+            label="分润金额(每件/元)"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.receivable | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column> -->
+          <el-table-column
+            align="center"
+            prop="cooperationOrganName"
+            label="分润总金额"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.totalAmount | moneyFormat }}
+              </div>
+            </template></el-table-column
+          >
+          <el-table-column align="center" prop="educationUserName" label="乐团主管">
+
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="付款状态">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.paymentStatus | paymentStatusGet }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="paymentNo" label="付款流水号">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="memo"
+            label="备注"
+            width="100px"
+          >
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="凭证">
+            <template slot-scope="scope">
+            <el-image
+              v-if="scope.row.credentials"
+              style="width: 60px; height: 60px"
+              fit="cover"
+              :src="scope.row.credentials.split(',')[0]"
+              :previewSrcList="scope.row.credentials.split(',')"
+            >
+            </el-image>
+          </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <auth auths="cooperationShareProfit/addCredentials">
+                  <el-button :disabled="scope.row.paymentStatus=='PAID_COMPLETED'" type="text" @click="addPayCode(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>
+    <addPayCode  ref='addPayCode' @getList="getList"/>
+  </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 { Export } from "@/utils/downLoadFile";
+import { getCoopShareList } from "./api";
+import { queryByOrganId } from "@/api/systemManage";
+import  addPayCode  from './modals/addPayCode'
+import qs from "qs";
+export default {
+  components: { pagination,addPayCode },
+  data() {
+    return {
+      searchForm: {
+        cooperationOrganId: null,
+        paymentStatus: null,
+        organId: 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 { , payTime, organId, ...rest } = this.searchForm;
+      let params = {
+        ...this.searchForm,
+        page: this.rules.page,
+        rows: this.rules.limit,
+      };
+      try {
+        const res = await getCoopShareList(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();
+    },
+    addPayCode(row) {
+      this.$refs.addPayCode.openDialog(row)
+      // /financialManager/payschoolList
+    },
+
+    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),
+        },
+        "您确定导出退费列表?"
+      );
+    },
+    changeOrgan(val) {
+      this.searchForm.cooperationId = null;
+    },
+  },
+  watch: {
+    "searchForm.organId"(val) {
+      if (val) {
+        queryByOrganId({ organId: val }).then((res) => {
+          if (res.code == 200) {
+            this.cooperationList = res.data;
+          }
+        });
+      }
+    },
+    // "searchForm.cooperationId"(val) {
+    //   if (val) {
+    //     getMusicGroup({ cooperationId: val }).then((res) => {
+    //       this.musicList = res.data;
+    //     });
+    //   }
+    // },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.search {
+  ::v-deep .el-input__inner {
+    width: 260px !important;
+  }
+}
+::v-deep .el-table .cell {
+  display: -webkit-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+}
+.form {
+  ::v-deep .el-input {
+    width: 220px;
+  }
+}
+</style>

+ 355 - 0
src/views/branchPayManager/payschoolList.vue

@@ -0,0 +1,355 @@
+<template>
+  <div class="m-container">
+    <el-page-header @back="goBack" :content="name"> </el-page-header>
+    <div class="m-core" style="margin-top:20px;">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        ref="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="
+              (e) => {
+                e.target.blur();
+                $refs.saveForm.save();
+                search();
+              }
+            "
+            placeholder="乐团名称"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="refundStatus">
+          <el-select
+            v-model.trim="searchForm.refundStatus"
+            clearable
+            placeholder="付款状态"
+          >
+            <el-option label="回款中" value="ING"></el-option>
+            <el-option label="已回款" value="END"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="payTime">
+          <el-date-picker
+            v-model.trim="searchForm.payTime"
+            style="width: 400px"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="缴费开始日期"
+            end-placeholder="缴费结束日期"
+            value-format="yyyy-MM-dd"
+            :picker-options="{
+              firstDayOfWeek: 1,
+            }"
+          ></el-date-picker>
+        </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>
+      </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="musicGroupName"
+            label="乐团名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="batchNo"
+            label="缴费批次"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="缴费类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.paymentType | userPaymentTypeFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="计价标准">
+            <template slot-scope="scope">
+              <div v-if="scope.row.calenderFeeType">
+                {{
+                  scope.row.calenderFeeType == "TEACHER" ? "按老师" : "按学员"
+                }}
+              </div>
+              <div v-else>--</div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="应收总额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.receivable | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="实收总额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.income | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="待收金额">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.prepaidFee | moneyFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="educationUserName"
+            label="下一回款日期"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.nextRefundDate | dayjsFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="educationUserName"
+            label="回款状态"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.refundStatus == "ING" ? "回款中" : "已回款" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <auth auths="musicGroupPaymentCalender/getDetail/barnch">
+                  <el-button type="text" @click="lookList(scope.row)"
+                    >详情</el-button
+                  >
+                </auth>
+
+                <el-button
+                  type="text"
+                  :disabled="!scope.row.contractUrl"
+                  @click="downLoad(scope.row)"
+                  >下载合同</el-button
+                >
+              </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>
+      <el-dialog
+        title="查看"
+        :visible.sync="reviewVisible"
+        width="900px"
+        v-if="reviewVisible"
+      >
+        <reviewDetail
+          @close="reviewVisible = false"
+          @submited="getList"
+          :detail="viewDetail"
+          :musicGroupId="$route.query.id"
+          destroy-on-close
+        />
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="reviewVisible = false"
+            >关闭</el-button
+          >
+        </div>
+      </el-dialog>
+    </div>
+  </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 { Export } from "@/utils/downLoadFile";
+import { getCoopCalenderList } from "./api";
+import { queryByOrganId } from "@/api/systemManage";
+import reviewDetail from "@/views/resetTeaming/modals/review-detail";
+import qs from "qs";
+export default {
+  components: { pagination, reviewDetail },
+  data() {
+    return {
+      searchForm: {
+        cooperationId: this.$route.query.id,
+        refundStatus:''
+      },
+      name: this.$route.query.name,
+      backTypeList,
+      tableList: [],
+      cooperationList: [],
+      activeRow: null,
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      form: {
+        id: null,
+      },
+      reviewVisible: false,
+      viewDetail: null,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      let { payTime, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        ...getTimes(payTime, ["refundStartDate", "refundEndDate"]),
+        page: this.rules.page,
+        rows: this.rules.limit,
+      };
+      try {
+        const res = await getCoopCalenderList(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.searchForm.cooperationId = this.$route.query.id;
+      this.search();
+    },
+    goBack() {
+      this.$store.dispatch('delVisitedViews', this.$route)
+      this.$router.push('/branchPayManager')
+    },
+    lookList(row) {
+      this.viewDetail = row;
+      this.viewDetail.id = row.calenderId;
+      this.reviewVisible = true;
+    },
+    async downLoad(row) {
+      try {
+        await this.$confirm(`是否下载批次号为${row.batchNo}合同`, "提示", {
+          type: "warning",
+        });
+        window.open(row.contractUrl);
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    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),
+        },
+        "您确定导出退费列表?"
+      );
+    },
+    changeOrgan(val) {
+      this.searchForm.cooperationId = null;
+    },
+  },
+  watch: {
+    // "searchForm.organId"(val) {
+    //   if (val) {
+    //     queryByOrganId({ organId: val }).then((res) => {
+    //       if (res.code == 200) {
+    //         this.cooperationList = res.data;
+    //       }
+    //     });
+    //   }
+    // },
+    // "searchForm.cooperationId"(val) {
+    //   if (val) {
+    //     getMusicGroup({ cooperationId: val }).then((res) => {
+    //       this.musicList = res.data;
+    //     });
+    //   }
+    // },
+  },
+};
+</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;

+ 166 - 9
src/views/courseCredentials/index.vue

@@ -71,47 +71,204 @@
             align="center"
             prop="one"
             label="1v1"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v1</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="two"
             label="1v2"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v2</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template></el-table-column>
           <el-table-column
             align="center"
             prop="three"
             label="1v3"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v3</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template></el-table-column>
           <el-table-column
             align="center"
             prop="four"
             label="1v4"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v4</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template></el-table-column>
           <el-table-column
             align="center"
             prop="five"
             label="1v5"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v5</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template></el-table-column>
           <el-table-column
             align="center"
             prop="six"
             label="1v6"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v6</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="seven"
             label="1v7"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>1v7</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="theory"
             label="乐理课"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>乐理课</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="practice"
             label="网管课"
-          ></el-table-column>
+          >
+          <template slot="header">
+            <div class="titleCell">
+              <span>网管课</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">已上课次/总课次</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template></el-table-column>
           <!-- <el-table-column
             align="center"
             prop="activityId"

+ 1 - 0
src/views/main/abnormal/index.vue

@@ -215,6 +215,7 @@ export default {
   methods: {
     permission,
     handle(item) {
+      console.log(item,'handleItem')
       // 添加判断权限
       if (
         errorType[item[0].errorType] &&

+ 20 - 0
src/views/main/constant.js

@@ -193,6 +193,26 @@ export const errorType = {
       visitFlag: '0',
     },
   },
+  COOPERATION_PAYMENT_ERROR: {
+    name: '合作单位回款异常',
+    isError: true,
+    url: '/branchPayManager',
+    permission: '/branchPayManager',
+    always: true,
+    query: {
+      searchType: 'COOPERATION_PAYMENT_ERROR',
+    },
+  },
+  COOPERATION_PAYMENT_ALERT: {
+    name: '合作单位回款提醒',
+    isError: true,
+    url: '/branchPayManager',
+    permission: '/branchPayManager',
+    always: true,
+    query: {
+      searchType: 'COOPERATION_PAYMENT_ALERT',
+    },
+  },
   // WAIT_CREATE_PAYMENT_CALENDER: {
   //   name: '待创建缴费项目',
   //   isError: true,

+ 334 - 61
src/views/resetTeaming/components/payInfoDetail.vue

@@ -16,6 +16,26 @@
                 <div class="squrt"></div>
                 <p>基础项目配置</p>
                 <div class="payContext">请选择您需要的课程配置</div>
+                <el-form-item
+                  label="计价标准"
+                  class="vertical"
+                  prop="isShowMusicInsuranceForPay"
+                  v-if="$route.query.payUserType == 'SCHOOL'"
+                >
+                  <el-select
+                    size="mini"
+                    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>
               </div>
               <div class="checkWrap">
                 <div
@@ -32,6 +52,9 @@
                         form.eclass = [];
                         form.eclass.push({});
                       }
+                      if (!teamCourse) {
+                        form.calenderFeeType = 'STUDENT';
+                      }
                     }
                   "
                 >
@@ -174,8 +197,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 +268,41 @@
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
+                <el-col style="width: 430px">
+                  <!--           :rules="[
+                      {
+                        required: true,
+                        message: '请选择缴费时间',
+                        trigger: 'blur',
+                      },
+                    ]" -->
+                  <el-form-item prop="isShowSalePrice" ref="isShowSalePrice">
+                    <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 +337,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 +408,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,13 +439,15 @@ export default {
     payLeBao,
     payTeamActive,
     subjectPreview,
+    paySchoolInfo,
+    backMoney,
   },
   data() {
     return {
       form: {
         paymentType: "",
         memo: "",
-        eclass: [{}],
+        eclass: [],
         memberList: [
           {
             period: "",
@@ -374,21 +459,32 @@ export default {
             autoActivationFlag: false,
           },
         ],
-        leBaoList: [{}],
-        activeList: [{}],
+        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,
+        contractUrl: "",
       },
       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 +515,7 @@ export default {
       tenantId: null,
       isField: false,
       showAutoActivationFlag: false,
+      initDetail: false,
     };
   },
   mounted() {
@@ -444,7 +541,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 +550,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 +560,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 +578,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) {
@@ -489,23 +587,55 @@ export default {
               this.form.leixing = "1";
               this.form.musicGroupOrganizationCourseSettingId =
                 res.data?.calender?.musicGroupOrganizationCourseSettingId;
+                this.isSetCourseSettingsId = true;
+
             } else {
-              this.form.leixing = "1";
+              this.form.leixing = "2";
+            }
+
+            if (
+              res.data?.calender?.startPaymentDate &&
+              res.data?.calender?.deadlinePaymentDate
+            ) {
+              this.$set(this.form, "paymentDate", [
+                res.data?.calender?.startPaymentDate,
+                res.data?.calender?.deadlinePaymentDate,
+              ]);
             }
-            this.$set(this.form, "paymentDate", [
-              res.data?.calender?.startPaymentDate,
-              res.data?.calender?.deadlinePaymentDate,
-            ]);
+
+            this.$set(
+              this.form,
+              "contractUrl",
+              res.data?.calender?.contractUrl
+            );
             this.$set(this.form, "memo", res.data?.calender?.memo);
+
             this.$set(
               this.form,
-              "payUserType",
-              res.data?.calender?.payUserType
+              "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,
+              "isShowSalePrice",
+              res.data?.calender?.isShowSalePrice
+            );
+            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;
@@ -518,8 +648,38 @@ export default {
             if (res.data?.course?.length > 0) {
               this.$nextTick(() => {
                 this.teamCourse = true;
-                this.isSetCourseSettingsId = true;
+
                 this.$set(this.form, "eclass", res.data?.course);
+                console.log([...res.data?.course],'res.data?.course')
+                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 +810,11 @@ export default {
           path: "/business/resetTeaming",
           query,
         });
-      } else if (query.type == "PRE_BUILD_FEE" || query.type == "feeAudit") {
+      } else if (
+        query.type == "teamDraft" ||
+        query.type == "feeAudit" ||
+        query.type == "FEE_AUDIT_FAILED"
+      ) {
         this.$store.dispatch("delVisitedViews", this.$route);
         this.$router.push({
           path: "/business/resetTeaming",
@@ -752,6 +916,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 +958,16 @@ export default {
       this.$refs.form.validate(async (isok) => {
         if (isok) {
           let obj = this.fommatDate();
+          if (obj.payUserType == "SCHOOL") {
+            let total = 0;
+            this.form.musicGroupCalenderRefundPeriods.forEach((item) => {
+              total += item.refundAmount * 1;
+            });
+            if (total != this.form.currentTotalAmount) {
+              this.$message.error("付款金额与回款金额不一致,请重新设置");
+              return;
+            }
+          }
           if (this.$route.query.calenderId) {
             obj.calenderId = this.$route.query.calenderId;
             try {
@@ -901,12 +1079,17 @@ export default {
         payUserType: this.$route.query.payUserType,
         musicGroup: this.musicGroup,
         paymentCalender: {
+          calender: {
+            isShowSalePrice: form.isShowSalePrice,
+          },
           activity: [...activeList], // 小班课
           course: courseList, // 课程
           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 +1100,77 @@ 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,
+          }),
+          isShowSalePrice: this.form.isShowSalePrice,
+        };
+      } 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,
+          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,
+          }),
+          calenderFeeType: this.form.calenderFeeType,
+          calenderFeeJson: JSON.stringify(calenderFeeJson),
+          musicGroupCalenderRefundPeriods:
+            this.form.musicGroupCalenderRefundPeriods,
+          currentTotalAmount: this.form.currentTotalAmount,
+          contractUrl: this.form.contractUrl,
+        };
+      }
     },
     getScroll() {
       this.scrollTop =
@@ -957,6 +1183,23 @@ export default {
         this.isField = false;
       }
     },
+    setAllTotal(val) {
+      this.form.calenderFeeJson.allTotal = val;
+      if(this.form.calenderFeeJson.discountTotal){
+        this.form.currentTotalAmount =
+        this.form.calenderFeeJson.allTotal -
+        this.form.calenderFeeJson.discountTotal;
+      }else{
+        this.form.currentTotalAmount =
+        this.form.calenderFeeJson.allTotal
+
+      }
+
+      this.$set(this.form, "currentTotalAmount", this.form.currentTotalAmount);
+    },
+    currentTotalAmount(val) {
+      this.$set(this.form, "currentTotalAmount", val);
+    },
   },
   watch: {
     teamCourse(val) {
@@ -981,6 +1224,34 @@ export default {
         this.$set(this.form, "leBaoList", [{}]);
       }
     },
+    "form.eclass": {
+      handler(newValue,oldValue) {
+        // console.log("form.eclass",[...newValue])
+        let oldString = JSON.stringify(oldValue)
+        let newString = JSON.stringify(newValue)
+        if (this.initDetail || oldString == newString) {
+          this.initDetail = false;
+          return;
+        } else {
+          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
 
@@ -994,6 +1265,7 @@ export default {
               ...course,
             };
           });
+          console.log('获取musicGroupOrganizationCourseSettingId重置eclass')
           this.$set(this.form, "eclass", res.data);
           // this.syncAllMoney();
         } catch (error) {}
@@ -1004,6 +1276,7 @@ export default {
       this.cycles = [{}];
       this.collapse = [0];
       this.cycle = {};
+
       if (val != "1") {
         this.$set(
           this.form,
@@ -1032,7 +1305,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 {
@@ -1142,14 +1416,14 @@ export default {
         position: relative;
         background-color: #fefefe;
         margin-right: 12px;
-        padding: 22px;
+        padding: 0 22px;
         display: flex;
         flex-direction: row;
         align-items: center;
         border-radius: 6px;
         border: 1px solid #dfe8ec;
         cursor: pointer;
-        height: 104px;
+        height: 84px;
         width: 251px;
         overflow: hidden;
         &:hover {
@@ -1235,4 +1509,3 @@ export default {
   padding-bottom: 20px;
 }
 </style>
-

+ 259 - 47
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,21 @@
       >
         新建学员缴费
       </div>
+      <div
+        class="newBand"
+        @click="newSchoolPay"
+        v-if="teamStatus"
+        v-permission="'musicGroupPaymentCalender/createCalender/4359'"
+      >
+        新建学校缴费
+      </div>
+      <div
+            class="newBand"
+            v-permission="'musicGroup/extensionPayment'"
+            @click="extendTime"
+          >
+            延长缴费
+          </div>
       <!-- <div class="newBand"
            v-if="teamStatus"
            v-permission="'/studentPayBase'"
@@ -63,6 +93,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 +154,18 @@
         </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-else>--</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,15 +183,15 @@
               <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)"
                   >添加学员</el-button
                 >
@@ -168,6 +210,18 @@
                   >修改</el-button
                 >
               </auth>
+              <auth
+                auths="musicGroupPaymentCalender/update/4313"
+                v-if="
+                team_status == 'FEE_AUDIT_FAILED' &&
+                  (scope.row.status === 'REJECT' ||
+                    scope.row.status === 'DRAFT')
+                "
+              >
+                <el-button type="text" @click="resetPay(scope.row)"
+                  >修改</el-button
+                >
+              </auth>
               <!--                   scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST' &&-->
               <auth
                 auths="musicGroupPaymentCalender/revoke"
@@ -175,7 +229,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 +241,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 +253,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 +267,8 @@
                   !isNewGropu &&
                   teamStatus &&
                   scope.row.paymentType != 'MUSIC_APPLY' &&
-                  (scope.row.status == 'OPEN'||scope.row.status == 'OVER')
+                  (scope.row.status == 'OPEN' || scope.row.status == 'OVER')&&
+                  scope.row.payUserType === 'STUDENT'
                 "
                 @click="onCreateQRCode(scope.row)"
                 >续费二维码</el-button
@@ -513,6 +564,49 @@
         <el-button @click="dialogSubjectVisible = false">取 消</el-button>
       </div> -->
     </el-dialog>
+
+    <el-dialog
+      :title="'延长缴费'"
+      :visible.sync="extendPaymentStatus"
+      v-if="extendPaymentStatus"
+      width="400px"
+    >
+      <el-form :model="extendForm" ref="extendForm" :rules="extendRule">
+        <el-form-item label="缴费时间" prop="expireDate">
+          <el-date-picker
+            v-model.trim="extendForm.expireDate"
+            value-format="yyyy-MM-dd"
+            type="date"
+            :picker-options="applyDates"
+            placeholder="选择日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="extendPaymentStatus = false">取 消</el-button>
+        <el-button type="primary" @click="onExtendPayment('extendForm')"
+          >确 定</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-button type="primary" @click="submitAudit" v-if="team_status == 'DRAFT' || team_status == 'AUDIT_FAILED'"
+      >提交审核</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,11 +614,18 @@ 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,
   findMusicGroupSubjectInfo,
+  extensionPayment,
 } from "@/api/buildTeam";
 import { getAuditList } from "@/api/auditManager";
 import { getOrganizationCourseUnitPriceSettings } from "@/api/specialSetting";
@@ -544,7 +645,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 +662,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 +672,7 @@ export default {
       organizationCourseUnitPriceSettings: [],
       searchForm: {
         paymentType: null,
+        payUserType: null,
       },
       viewDetail: null,
       tableList: [],
@@ -615,14 +717,26 @@ export default {
       activeName: null,
       dialogCalenderId: null, // 选择编号
       baseInfo: null,
-      memberVisible: false, // 会员缴费
+      memberVisible: false, // 会员缴费,
+      payUserTypeList: payUserTypeList,
+      extendPaymentStatus: "",
+      extendForm: {
+        expireDate: null,
+      },
+      extendRule: {
+        expireDate: [
+          { required: true, message: "请选择延长时间", trigger: "change" },
+        ],
+      },
+      applyDates: this.applyDate(),
     };
   },
   //生命周期 - 创建完成(可以访问当前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 +770,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" || this.team_status == "AUDIT_FAILED";
     },
     team_status() {
       return this.$route.query.team_status;
@@ -703,7 +815,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 +829,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 +846,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 +893,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 +968,44 @@ 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);
+      }
+    },
+    extendTime() {
+      this.extendPaymentStatus = true;
+    },
+    onExtendPayment(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          extensionPayment({
+            musicGroupId: this.$route.query.id,
+            expireDate: this.extendForm.expireDate,
+          }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("延长缴费成功");
+              this.extendPaymentStatus = false;
+              this.getList()
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        }
+      });
+    },
     // setStudentPay () {
     //   let query = this.$route.query;
     //   this.$router.push({ path: "/business/studentPayBase", query });
@@ -988,18 +1139,79 @@ export default {
       // 开始预览
       this.dialogCalenderId = row.id;
       const musicGroupId = this.$route.query.id;
-      await findMusicGroupSubjectInfo({ musicGroupId: musicGroupId }).then(
-        (res) => {
-          if (res.code == 200) {
-            this.dialogSubjectList = res.data.musicGroupSubjectPlans;
-            // 默认预览第一个
-            this.activeName = this.dialogSubjectList[0].subjectId.toString();
-            this.dialogSubjectVisible = true;
-          } else {
-            this.$message.warning("没有可预览的声部");
+      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 {
+          this.$message.warning("没有可预览的声部");
         }
-      );
+      });
+    },
+    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 },
+                });
+              }
+            }
+          );
+        }
+      });
+    },
+    applyDate() {
+      let self = this;
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() + 86400000 < new Date().getTime();
+        },
+      };
     },
   },
   watch: {

+ 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" || query.type=='FEE_AUDIT_FAILED') {
         this.$store.dispatch("delVisitedViews", this.$route);
         this.$router.push({
           path: "/business/resetTeaming",

+ 20 - 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,8 +311,9 @@ 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"),
+        FEE_AUDIT_FAILED: require("./images/6.png"),
         APPLY: require("./images/4.png"),
         PAY: require("./images/12.png"),
         PREPARE: require("./images/11.png"),

+ 9 - 6
src/views/resetTeaming/modals/accessories.vue

@@ -7,22 +7,24 @@
     <div class="section" v-if="accessOries.length > 0" key="accessOries">
       <!-- <h2 class="titles">辅件</h2> -->
       <el-row class="title-row">
-        <el-col :span="12">辅件商品</el-col>
+        <el-col :span="isShowSalePrice ? 14 : 19">辅件商品</el-col>
         <!--  -->
-        <el-col :span="5" :offset="1" style="text-align: right">原价</el-col>
-        <el-col :span="5" :offset="1" style="text-align: right">现价</el-col>
+        <el-col :span="5" style="text-align: right">原价</el-col>
+        <el-col :span="5" style="text-align: right" v-if="isShowSalePrice"
+          >现价</el-col
+        >
       </el-row>
 
       <div v-for="(instr, index) in accessOries" :key="index">
         <el-row class="option-row" @click.native="onAuxiliarie(instr)">
-          <el-col :span="12">
+          <el-col :span="isShowSalePrice ? 14 : 19">
             <i
               class="check_default"
               :class="[instr.isStatus ? 'check_active' : '']"
             ></i
             >{{ instr.name }}
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5">
             <del style="color: #808080; font-size: 12px"
               >¥{{
                 instr.goodsList[0]
@@ -31,7 +33,7 @@
               }}</del
             >
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5" v-if="isShowSalePrice">
             <span style="color: #1a1a1a" v-if="instr.price == 0">免费</span>
             <span style="color: #1a1a1a" v-else
               >¥{{ (isGiveAccessories ? 0 : instr.price) | moneyFormat }}</span
@@ -61,6 +63,7 @@ export default {
     trainSmallBg: String,
     accessOries: Array,
     isGiveAccessories: Boolean, // 是否赠送辅件,如果为是,则不价格为0
+    isShowSalePrice: Boolean
   },
   data() {
     return {};

+ 54 - 38
src/views/resetTeaming/modals/activity.vue

@@ -1,68 +1,84 @@
 <template>
   <div class="courseModel" style="margin-top: 12px">
     <h2 class="titles">
-			<img :src="trainSmallBg" />
-			<span>小班课</span>
-		</h2>
+      <img :src="trainSmallBg" />
+      <span>小班课</span>
+    </h2>
 
     <div class="section">
       <el-row class="title-row">
-        <el-col :span="12">课程类型</el-col>
-        <el-col :span="5" :offset="1" style="text-align: right;">课程数</el-col>
-        <el-col :span="6" style="text-align: right;">价格</el-col>
+        <el-col :span="isShowSalePrice ? 9 : 14">课程类型</el-col>
+        <el-col :span="5" style="text-align: right;">课程数</el-col>
+        <el-col :span="5" style="text-align: right;">原价</el-col>
+        <el-col :span="5" style="text-align: right;" v-if="isShowSalePrice"
+          >售价</el-col
+        >
       </el-row>
       <div v-for="(item, index) in activityList" :key="index">
         <el-row class="option-row" @click.native="onCourseChange(item)">
-          <el-col :span="12">
-            <i class="check_default"  :class="[item.isStatus ? 'check_active' : '', item.optionalFlag ? 'disabled' : '']"></i>
+          <el-col :span="isShowSalePrice ? 9 : 14">
+            <i
+              class="check_default"
+              :class="[
+                item.isStatus ? 'check_active' : '',
+                item.optionalFlag ? 'disabled' : ''
+              ]"
+            ></i>
             <span style="display: flex; align-items: center;">
               <template>{{ item.categoryName }}</template>
             </span>
           </el-col>
-          <el-col :span="6">
-						<span style="color: #AAA; font-size: 12px">{{ item.num }}(节)</span>
-					</el-col>
-          <el-col :span="6">
-            <span style="color: #1A1A1A">¥{{ item.actualAmount | moneyFormat }}</span>
+          <el-col :span="5">
+            <span style="color: #AAA; font-size: 12px">{{ item.num }}(节)</span>
+          </el-col>
+          <el-col :span="5">
+            <del style="color: #808080; font-size: 12px"
+              >¥{{ item.originalAmount | moneyFormat }}</del
+            >
+          </el-col>
+          <el-col :span="5" v-if="isShowSalePrice">
+            <span style="color: #1A1A1A"
+              >¥{{ item.actualAmount | moneyFormat }}</span
+            >
           </el-col>
         </el-row>
       </div>
-		</div>
-
+    </div>
   </div>
 </template>
 
 <script>
 export default {
-    name: 'courseModel',
-    props: {
-			trainSmallBg: String,
-			activityList: Array
-    },
-    methods: {
-      onCourseChange(item) {
-        this.$emit('onCheckItem', item)
-      }
+  name: "courseModel",
+  props: {
+    trainSmallBg: String,
+    activityList: Array,
+    isShowSalePrice: Boolean
+  },
+  methods: {
+    onCourseChange(item) {
+      this.$emit("onCheckItem", item);
     }
-}
+  }
+};
 </script>
 
 <style lang="less" scoped>
 .giveTitle {
-	margin-top: 16px;
-	padding-top: 8px;
-	color: #1A1A1A;
-	font-size: 14;
-	padding-left: 24;
+  margin-top: 16px;
+  padding-top: 8px;
+  color: #1a1a1a;
+  font-size: 14;
+  padding-left: 24;
 }
 .small_point {
-	position: absolute;
-	left: 8px;
-	top: 7px;
-	width: 6px;
-	height: 6px;
-	background: #01C1B5;
-	border-radius: 50%;
+  position: absolute;
+  left: 8px;
+  top: 7px;
+  width: 6px;
+  height: 6px;
+  background: #01c1b5;
+  border-radius: 50%;
 }
 @import url("./signUpPayment.less");
-</style>
+</style>

+ 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>

+ 20 - 8
src/views/resetTeaming/modals/courseModel.vue

@@ -31,10 +31,13 @@
         "
       >
         <el-row class="title-row">
-          <el-col :span="12">课程类型</el-col>
+          <el-col :span="isShowSalePrice ? 9 : 14">课程类型</el-col>
           <!-- 原价 -->
-          <el-col :span="5" :offset="1" style="text-align: right;">时长</el-col>
-          <el-col :span="6" style="text-align: right;">价格</el-col>
+          <el-col :span="5" style="text-align: right;">时长</el-col>
+          <el-col :span="5" style="text-align: right;">原价</el-col>
+          <el-col :span="5" style="text-align: right;" v-if="isShowSalePrice"
+            >售价</el-col
+          >
         </el-row>
         <el-row
           class="option-row"
@@ -42,7 +45,7 @@
           v-for="(item, index) in courseInfo"
           :key="index"
         >
-          <el-col :span="12">
+          <el-col :span="isShowSalePrice ? 9 : 14">
             <i
               class="check_default"
               :class="[
@@ -55,14 +58,22 @@
             }}</template
             ><template v-else>{{ item.courseType | coursesType }}</template>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5">
             <span style="color: #AAA; font-size: 12px;"
               >{{ item.courseTotalMinuties }}(分钟)</span
             >
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5">
+            <del style="color: #AAA; font-size: 12px;"
+              >¥{{ item.courseOriginalPrice | moneyFormat }}</del
+            >
+          </el-col>
+          <el-col :span="5" v-if="isShowSalePrice">
             <span style="color: #1A1A1A"
-              >¥{{ (remissionCourseFeeStatus ? 0 : item.courseCurrentPrice) | moneyFormat }}</span
+              >¥{{
+                (remissionCourseFeeStatus ? 0 : item.courseCurrentPrice)
+                  | moneyFormat
+              }}</span
             >
           </el-col>
         </el-row>
@@ -154,7 +165,8 @@ export default {
     chargeTypeName: String,
     memberCoursePrice: Array,
     memberCourseShowFlag: Boolean,
-    remissionCourseFeeStatus: Boolean
+    remissionCourseFeeStatus: Boolean,
+    isShowSalePrice: Boolean
   },
   components: {
     // videoPlayer

+ 64 - 34
src/views/resetTeaming/modals/instrumentModel.vue

@@ -7,7 +7,9 @@
     <div class="section" v-if="instrumentResultList.length > 0">
       <div v-for="(i, index) in instrumentResultList" :key="index">
         <el-row class="title-row">
-          <el-col :span="13">
+          <el-col
+            :span="i[0]['kitType'] == 'LEASE' || isShowSalePrice ? 14 : 19"
+          >
             <template v-if="i[0]['kitType'] == 'GROUP'">
               团购乐器
             </template>
@@ -28,21 +30,29 @@
             >
             <!-- <template v-if="i[0]['kitType'] == 'LEASE'">原价</template> -->
           </el-col>
-          <el-col :span="5" :offset="1" style="text-align: right;">
-            <!-- <template v-if="i[0]['kitType'] == 'GROUP' || i[0]['kitType'] == 'FREE'">现价</template> -->
-            <template v-if="['GROUP', 'FREE'].includes(i[0]['kitType'])"
-              >现价</template
-            >
-            <template v-if="i[0]['kitType'] == 'LEASE'"
-              >租赁押金</template
-            >
+          <el-col
+            :span="5"
+            style="text-align: right;"
+            v-if="
+              ['GROUP', 'FREE'].includes(i[0]['kitType']) && isShowSalePrice
+            "
+          >
+            售价
+          </el-col>
+          <el-col
+            :span="5"
+            style="text-align: right;"
+            v-if="i[0]['kitType'] == 'LEASE'"
+            >租赁押金
           </el-col>
         </el-row>
 
         <div v-for="(con, index) in i" :key="index">
           <div @click="instrumentF(con)">
             <el-row class="option-row">
-              <el-col :span="12">
+              <el-col
+                :span="con.kitType == 'LEASE' || isShowSalePrice ? 14 : 19"
+              >
                 <i
                   class="check_default"
                   :class="[con.isStatus ? 'check_active' : '']"
@@ -51,26 +61,36 @@
                   {{ con.name }}
                 </div>
               </el-col>
-              <el-col :span="6">
+              <el-col :span="5">
                 <del
                   style="color: #808080; font-size: 12px;"
                   v-if="con.kitType != 'owned'"
                   >¥{{ con.marketPrice | moneyFormat }}</del
                 >
               </el-col>
-              <el-col :span="6">
-                <span style="color: #1A1A1A" v-if="con.kitType == 'LEASE'"
-                  >¥{{
-                    Number((con.depositFee - con.coupon).toFixed(2))
-                      | moneyFormat
-                  }}</span
-                >
+              <el-col
+                :span="5"
+                v-if="
+                  ['FREE', 'GROUP'].includes(con.kitType) && isShowSalePrice
+                "
+              >
                 <span style="color: #1A1A1A" v-if="con.kitType == 'FREE'"
                   >¥{{ 0 | moneyFormat }}</span
                 >
+                <!-- 乐器现价 = 乐器现价 + 分部分润金额 -->
                 <span style="color: #1A1A1A" v-if="con.kitType == 'GROUP'"
                   >¥{{
-                    Number((con.price - con.coupon).toFixed(2)) | moneyFormat
+                    Number(
+                      (con.price - con.coupon + con.organShareProfit).toFixed(2)
+                    ) | moneyFormat
+                  }}</span
+                >
+              </el-col>
+              <el-col :span="5" v-if="con.kitType == 'LEASE'">
+                <span style="color: #1A1A1A"
+                  >¥{{
+                    Number((con.depositFee - con.coupon).toFixed(2))
+                      | moneyFormat
                   }}</span
                 >
               </el-col>
@@ -79,14 +99,23 @@
             <el-row style="padding-left: 26px; margin-bottom: 5px;">
               <el-col :span="24">
                 <div style="display: flex;align-items: center;">
-                    <div
-                      v-if="con.goodsList"
-                      style="font-size: 12px; color: #808080"
-                    >
-                      {{ con.goodsList[0].specification }}
-                    </div>
-                    <el-tag effect="plain" size="mini" style="margin-left: 10px; color: #ff4644;" @click.stop="onLookRule" v-if="con.groupRemissionCourseFee == 1 && con.kitType == 'GROUP'">课程减免</el-tag>
+                  <div
+                    v-if="con.goodsList"
+                    style="font-size: 12px; color: #808080"
+                  >
+                    {{ con.goodsList[0].specification }}
                   </div>
+                  <el-tag
+                    effect="plain"
+                    size="mini"
+                    style="margin-left: 10px; color: #ff4644;border-color: #ff4644;"
+                    @click.stop="onLookRule"
+                    v-if="
+                      con.groupRemissionCourseFee == 1 && con.kitType == 'GROUP'
+                    "
+                    >课程减免</el-tag
+                  >
+                </div>
               </el-col>
             </el-row>
             <!-- <el-row
@@ -118,14 +147,15 @@ export default {
     buyMaintenance: Boolean,
     trainSmallBg: String,
     toolsPackage: Array,
-    organId: [Number, String, null]
+    organId: [Number, String, null],
+    isShowSalePrice: Boolean
   },
   methods: {
     // onLeBao() {
     //     this.$emit('onLeBao')
     // },
     instrumentF(item) {
-      this.$emit("instrumentF", item, 'INSTRUMENT');
+      this.$emit("instrumentF", item, "INSTRUMENT");
     },
     onQuestions(item) {
       this.$emit("onQuestions", item);
@@ -142,11 +172,11 @@ export default {
 <style lang="less" scoped>
 @import url("./signUpPayment.less");
 .icon_courseFee {
-	margin-left: 9px;
-	display: inline-block;
-	width: 17px;
-	height: 15px;
-	background: url('../../../assets/images/musicGroup/icon_courseFee.png');
-	background-size: 100%;
+  margin-left: 9px;
+  display: inline-block;
+  width: 17px;
+  height: 15px;
+  background: url("../../../assets/images/musicGroup/icon_courseFee.png");
+  background-size: 100%;
 }
 </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({

+ 20 - 7
src/views/resetTeaming/modals/member.vue

@@ -19,13 +19,20 @@
 
     <div class="section">
       <el-row class="title-row">
-        <el-col :span="12">练习系统{{ isGiveAccessories && accessStatus ? '(赠送辅件一套)' : null }}</el-col>
-        <el-col :span="5" :offset="1" style="text-align: right;">时长</el-col>
-        <el-col :span="6" style="text-align: right;">价格</el-col>
+        <el-col :span="isShowSalePrice ? 9 : 14"
+          >练习系统{{
+            isGiveAccessories && accessStatus ? "(赠送辅件一套)" : null
+          }}</el-col
+        >
+        <el-col :span="5" style="text-align: right;">时长</el-col>
+        <el-col :span="5" style="text-align: right;">原价</el-col>
+        <el-col :span="5" style="text-align: right;" v-if="isShowSalePrice"
+          >售价</el-col
+        >
       </el-row>
       <div v-for="(item, index) in toolsPackage" :key="index">
         <el-row class="option-row" @click.native="onTrainChange(item)">
-          <el-col :span="12">
+          <el-col :span="isShowSalePrice ? 9 : 14">
             <i
               class="check_default"
               :class="[
@@ -37,12 +44,17 @@
               <template>{{ item.name }}</template>
             </span>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5">
             <span style="color: #AAA; font-size: 12px;"
               >{{ item.num }}({{ item.period | unitFormat }})</span
             >
           </el-col>
-          <el-col :span="6">
+          <el-col :span="5">
+            <del style="color: #AAA; font-size: 12px;"
+              >¥{{ item.originalAmount | moneyFormat }}</del
+            >
+          </el-col>
+          <el-col :span="5" v-if="isShowSalePrice">
             <span style="color: #1A1A1A"
               >¥{{ item.actualAmount | moneyFormat }}</span
             >
@@ -90,6 +102,7 @@ export default {
     trainSmallBg: String,
     isGiveAccessories: Boolean,
     accessStatus: Boolean,
+    isShowSalePrice: Boolean
   },
   data() {
     return {
@@ -100,7 +113,7 @@ export default {
   methods: {
     onTrainChange(item) {
       // 云教练点击时
-      this.$emit("onCheckItem", item, 'train');
+      this.$emit("onCheckItem", item, "train");
     },
     onQuestions(item) {
       this.$emit("onQuestions", item);

+ 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 !='TEACHER'"
       >
         <template slot="header">
           <p style="position: relative">

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

@@ -0,0 +1,428 @@
+<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-form-item
+          prop="paymentDate"
+          :rules="[
+            {
+              required: true,
+              message: '请选择缴费时间',
+              trigger: 'blur',
+            },
+          ]"
+          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-date-picker
+            v-model="form.paymentDate"
+            type="daterange"
+            style="width: 280px"
+            :picker-options="{ firstDayOfWeek: 1 }"
+            value-format="yyyy-MM-dd"
+            range-separator="-"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+      </el-row>
+      <el-row>
+        <el-form-item
+          label="上传合同"
+          prop="contractUrl"
+          :rules="[
+            {
+              required: true,
+              message: '请上传上传合同',
+              trigger: 'blur, change',
+            },
+          ]"
+        >
+          <singe-file-upload
+            tips="仅支持上传pdf格式文件"
+            buttonText="上传合同"
+            accept=".pdf"
+            v-model="form.contractUrl"
+            bucket_name="contracts"
+          />
+          <!-- bucket_name="cooperation" -->
+        </el-form-item>
+      </el-row>
+      <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 !='TEACHER'"
         label="售价(元)"
         prop="actualAmount"
         key="actualAmount"

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

@@ -17,6 +17,7 @@
     </descriptions>
     <el-alert title="申请信息" :closable="false" class="alert" type="info">
     </el-alert>
+
     <descriptions :column="2">
       <descriptions-item label="分部名称:">{{
         calender.organName
@@ -39,10 +40,20 @@
       <descriptions-item label="订单类型:">{{
         calender.payUserType | payUserTypeFormat
       }}</descriptions-item>
-
-      <descriptions-item label="缴费金额:">{{
+      <descriptions-item label="学生人数:" v-if="calenderFeeJson&&calenderFeeJson.sutdentNumber&&calender.calenderFeeType=='STUDENT'">{{
+        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 +320,66 @@
       </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="回款状态" >
+        <template slot-scope="scope">
+
+          <div v-if="calender.status == 'NO'||calender.status == 'OPEN'||calender.status == 'OVER'||calender.status == 'PAID'">
+            {{scope.row.refundFlag?'已回款':'回款中'}}
+          </div>
+          <div v-else>
+            --
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="refundDate" label="回款时间" >
+      </el-table-column>
+    </el-table>
 
     <!-- 会员信息 -->
 
@@ -352,6 +423,7 @@ const initData = {
   studentNum: 0,
   phone: "",
   username: "",
+  calenderRefundPeriods:[]
 };
 export default {
   components: { Item },
@@ -377,6 +449,13 @@ export default {
       }
       return "";
     },
+    calenderFeeJson(){
+      const calenderFee = this.calender?.calenderFeeJson;
+      if(calenderFee){
+        return JSON.parse(calenderFee)
+      }
+      return null
+    }
   },
   mounted() {
     this.init();

+ 20 - 15
src/views/resetTeaming/modals/signUpPayment.less

@@ -21,7 +21,7 @@
 
   .toolTitle {
     font-size: 18px;
-    color: #AC4C31;
+    color: #ac4c31;
     display: flex;
     font-weight: bold;
     align-items: center;
@@ -35,11 +35,11 @@
       display: inline-block;
       width: 15px;
       height: 15px;
-      background: url('../../../assets/images/musicGroup/video_btn.png');
+      background: url("../../../assets/images/musicGroup/video_btn.png");
       background-size: 100%;
     }
 
-    >span {
+    > span {
       display: flex;
       font-size: 11px;
       line-height: 1.5;
@@ -84,7 +84,7 @@
     width: 100%;
   }
 
-  &>span {
+  & > span {
     position: absolute;
     top: 0;
     left: 0;
@@ -95,7 +95,7 @@
     padding: 0 10px;
     font-size: 18px;
     font-weight: bold;
-    color: #AC4C31;
+    color: #ac4c31;
   }
 }
 
@@ -109,18 +109,19 @@
 }
 
 .disabled {
-
   // opacity: 0.5;
   // .check_active {
   //   opacity: 0.5;
   // }
   &::before {
-    background: url("../../../assets/images/icon_checkbox_disable.png") no-repeat center !important;
+    background: url("../../../assets/images/icon_checkbox_disable.png")
+      no-repeat center !important;
     background-size: contain !important;
   }
 
   .check_active::before {
-    background: url("../../../assets/images/icon_checkbox_disable.png") no-repeat center;
+    background: url("../../../assets/images/icon_checkbox_disable.png")
+      no-repeat center;
     background-size: contain;
   }
 }
@@ -131,15 +132,17 @@
   //     opacity: 0.5;
   // }
   &::before {
-      background: url("../../../assets/images/icon_checkbox_default_disabled.png") no-repeat center;
-      background-size: contain;
-      border-radius: 50%;
+    background: url("../../../assets/images/icon_checkbox_default_disabled.png")
+      no-repeat center;
+    background-size: contain;
+    border-radius: 50%;
   }
 
   .check_active {
-      background: url("../../../assets/images/icon_checkbox_default_disabled.png") no-repeat center;
-      background-size: contain;
-      border-radius: 50%;
+    background: url("../../../assets/images/icon_checkbox_default_disabled.png")
+      no-repeat center;
+    background-size: contain;
+    border-radius: 50%;
   }
 }
 
@@ -310,7 +313,8 @@
     &::before {
       display: block;
       content: " ";
-      background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
+      background: url("../../../assets/images/icon_checkbox.png") no-repeat
+        center;
       border: 1px solid transparent;
       background-size: contain;
     }
@@ -350,6 +354,7 @@
     // align-items: center;
   }
 
+  .el-col-5,
   .el-col-6,
   .el-col-8,
   .el-col-11 {

+ 246 - 166
src/views/resetTeaming/modals/subject-preview.vue

@@ -3,7 +3,8 @@
     <tips />
 
     <course-model
-    v-if="mypreViewData&&mypreViewData.isShowMusicCourseForPay"
+      v-if="mypreViewData && mypreViewData.isShowMusicCourseForPay"
+      :isShowSalePrice="isShowSalePrice"
       :courseViewType="courseViewType"
       :courseShowInfo="courseShowInfo"
       :remissionCourseFeeStatus="remissionCourseFeeStatus"
@@ -19,7 +20,13 @@
     />
 
     <member
-      v-if="toolsPackage && toolsPackage.length > 0&&mypreViewData&&mypreViewData.isShowMemberForPay"
+      v-if="
+        toolsPackage &&
+          toolsPackage.length > 0 &&
+          mypreViewData &&
+          mypreViewData.isShowMemberForPay
+      "
+      :isShowSalePrice="isShowSalePrice"
       :toolsPackage="toolsPackage"
       :isGiveAccessories="isGiveAccessories"
       :accessStatus="accessOries.length > 0"
@@ -27,6 +34,7 @@
     />
 
     <instrument-model
+      :isShowSalePrice="isShowSalePrice"
       :instrumentResultList="instrumentResultList"
       :buyMaintenance="buyMaintenance"
       :trainSmallBg="trainSmallBg"
@@ -37,48 +45,87 @@
       @onQuestions="onQuestions"
     />
 
-    <div class="courseModel" style="margin-top: 12px;" v-if="instrumentRepair && instrumentRepair.length > 0&& mypreViewData&&mypreViewData.isShowMusicInsuranceForPay">
+    <div
+      class="courseModel"
+      style="margin-top: 12px;"
+      v-if="
+        instrumentRepair &&
+          instrumentRepair.length > 0 &&
+          mypreViewData &&
+          mypreViewData.isShowMusicInsuranceForPay
+      "
+    >
       <h2 class="titles">
         <img :src="trainSmallBg" />
         <span>乐器保养</span>
       </h2>
-			<!-- 可选课程信息集合 -->
-			<div class="section">
-				<el-row class="title-row">
-					<el-col :span="12">服务项目</el-col>
-					<!-- 原价 -->
-					<el-col :span="5" :offset="1" style="text-align: right;">时间</el-col>
-					<el-col :span="6" style="text-align: right;">价格</el-col>
-				</el-row>
-				<el-row class="option-row" v-for="(item, index) in instrumentRepair" :key="index" @click.native="onCheckItem(item)">
-					<el-col :span="12">
-						<i class="check_default" :class="[item.isStatus ? 'check_active' : '', item.optionalFlag ? 'disabled' : '', item.noSelect ? 'noSelect' : '']"></i>
+      <!-- 可选课程信息集合 -->
+      <div class="section">
+        <el-row class="title-row">
+          <el-col :span="isShowSalePrice ? 9 : 14">服务项目</el-col>
+          <!-- 原价 -->
+          <el-col :span="5" style="text-align: right;">时间</el-col>
+          <el-col :span="5" style="text-align: right;">原价</el-col>
+          <el-col :span="5" style="text-align: right;" v-if="isShowSalePrice"
+            >售价</el-col
+          >
+        </el-row>
+        <el-row
+          class="option-row"
+          v-for="(item, index) in instrumentRepair"
+          :key="index"
+          @click.native="onCheckItem(item)"
+        >
+          <el-col :span="isShowSalePrice ? 9 : 14">
+            <i
+              class="check_default"
+              :class="[
+                item.isStatus ? 'check_active' : '',
+                item.optionalFlag ? 'disabled' : '',
+                item.noSelect ? 'noSelect' : ''
+              ]"
+            ></i>
             {{ item.name }}
-					</el-col>
-					<el-col :span="6">
-						<span style="color: #AAA; font-size: 12px;">{{ item.num }}(年)</span>
-					</el-col>
-					<el-col :span="6">
-						<span style="color: #1A1A1A">¥{{ item.actualAmount | moneyFormat }}</span>
-					</el-col>
-				</el-row>
-			</div>
+          </el-col>
+          <el-col :span="5">
+            <span style="color: #AAA; font-size: 12px;"
+              >{{ item.num }}(年)</span
+            >
+          </el-col>
+          <el-col :span="5">
+            <del style="color: #AAA; font-size: 12px;"
+              >¥{{ item.originalAmount | moneyFormat }}</del
+            >
+          </el-col>
+          <el-col :span="5" v-if="isShowSalePrice">
+            <span style="color: #1A1A1A"
+              >¥{{ item.actualAmount | moneyFormat }}</span
+            >
+          </el-col>
+        </el-row>
+      </div>
     </div>
 
-     <accessories
+    <accessories
+      :isShowSalePrice="isShowSalePrice"
       :trainSmallBg="trainSmallBg"
       :accessOries="accessOries"
       :isGiveAccessories="giveAccessoriesStatus"
       @onAuxiliarie="onCheckItem"
     />
     <activity
-      v-if="activityList && activityList.length > 0&&mypreViewData&&mypreViewData.isShowVipCourseForPay"
+      v-if="
+        activityList &&
+          activityList.length > 0 &&
+          mypreViewData &&
+          mypreViewData.isShowVipCourseForPay
+      "
+      :isShowSalePrice="isShowSalePrice"
       :trainSmallBg="trainSmallBg"
       :activityList="activityList"
       @onCheckItem="onCheckItem"
     />
 
-
     <!-- <div class="buy">
       <div class="price">
         <p class="oldprice">
@@ -104,17 +151,24 @@ import dayjs from "dayjs";
 const paymentPatternType = {
   0: "按月",
   1: "按学期",
-  2: "一次性",
+  2: "一次性"
 };
-import Tips from './tips'
-import courseModel from '@/views/resetTeaming/modals/courseModel'
+import Tips from "./tips";
+import courseModel from "@/views/resetTeaming/modals/courseModel";
 import InstrumentModel from "./instrumentModel";
-import accessories from './accessories'
-import activity from './activity'
-import member from './member'
+import accessories from "./accessories";
+import activity from "./activity";
+import member from "./member";
 export default {
   props: ["subjectId", "calenderId", "preViewData"],
-  components: { Tips, courseModel, InstrumentModel, accessories, activity, member },
+  components: {
+    Tips,
+    courseModel,
+    InstrumentModel,
+    accessories,
+    activity,
+    member
+  },
   data() {
     const query = this.$route.query;
     return {
@@ -145,7 +199,7 @@ export default {
         accessPrice: 0, // 辅件现价
         accessMarketPrice: 0, // 辅件原价
         goodsPrice: 0, // 乐器现价
-        goodsMarketPrice: 0, // 乐器原价
+        goodsMarketPrice: 0 // 乐器原价
       }, // 金额列表,金额计算
       toolsPackage: [], // 学习工具包
       instrumentRepair: [], // 乐保信息
@@ -178,13 +232,14 @@ export default {
       remissionCourseFeeStatus: false,
       isGiveAccessories: false, // 是否赠送辅件
       giveAccessoriesStatus: false,
-      mypreViewData:{
-        isShowMemberForPay:true,
-          isShowMusicInsuranceForPay:true,
-          isShowVipCourseForPay:true,
-          isShowMusicCourseForPay:true,
-      }
-    }
+      mypreViewData: {
+        isShowMemberForPay: true,
+        isShowMusicInsuranceForPay: true,
+        isShowVipCourseForPay: true,
+        isShowMusicCourseForPay: true
+      },
+      isShowSalePrice: true // 是否显示原价
+    };
   },
   mounted() {
     this.__init();
@@ -195,30 +250,35 @@ export default {
       let params = {
         musicGroupId: this.musicGroupId,
         subjectId: this.subjectId,
-        calenderId: this.calenderId,
+        calenderId: this.calenderId
       };
-      await getSubjectGoodsAndInfoPreview(params).then((res) => {
+      await getSubjectGoodsAndInfoPreview(params).then(res => {
         let result = res;
         if (result.code == 200) {
           let tempResult = result.data;
-          this.__dataFormat(tempResult)
+          this.__dataFormat(tempResult);
         }
         // 初始化计算金额
         this.calcPrice();
       });
     },
     __dataFormat(tempResult) {
-      this.mypreViewData = this.preViewData&&this.preViewData.paymentCalender ? JSON.parse(JSON.stringify(this.preViewData)) : {
-          isShowMemberForPay:true,
-          isShowMusicInsuranceForPay:true,
-          isShowVipCourseForPay:true,
-          isShowMusicCourseForPay:true,
-        }
+      this.mypreViewData =
+        this.preViewData && this.preViewData.paymentCalender
+          ? JSON.parse(JSON.stringify(this.preViewData))
+          : {
+              isShowMemberForPay: true,
+              isShowMusicInsuranceForPay: true,
+              isShowVipCourseForPay: true,
+              isShowMusicCourseForPay: true
+            };
 
       this.courseViewType = tempResult.musicGroup.courseViewType || 0;
-      this.isGiveAccessories = tempResult.musicGroup && tempResult.musicGroup.isGiveAccessories || false; // 是否赠送辅件
+      this.isGiveAccessories =
+        (tempResult.musicGroup && tempResult.musicGroup.isGiveAccessories) ||
+        false; // 是否赠送辅件
       this.organId = tempResult.musicGroup.organId;
-      const musicGroupStatus = tempResult.musicGroup.status
+      const musicGroupStatus = tempResult.musicGroup.status;
       this.cloudTeacherFee = tempResult.cloudTeacherFee || 0;
       this.cloudTeacherPlusFee = tempResult.cloudTeacherPlusFee || 0;
 
@@ -226,7 +286,7 @@ export default {
       for (let i in memberCoursePrice) {
         this.memberCoursePrice.push({
           name: coursesType[i],
-          price: memberCoursePrice[i],
+          price: memberCoursePrice[i]
         });
       }
       this.memberCourseShowFlag =
@@ -245,60 +305,72 @@ export default {
             tempResult.musicGroupPaymentCalender.paymentValidEndDate
           ).format("YYYY/MM/DD");
       }
-      const paymentCalender =  this.mypreViewData&&this.mypreViewData.paymentCalender ? this.mypreViewData.paymentCalender : (tempResult.paymentCalender || null)
-      console.log(paymentCalender,'paymentCalender')
-      if(paymentCalender&&paymentCalender.calender&&paymentCalender.calender.paymentItemShowState){
-
-        let obj = JSON.parse(paymentCalender.calender.paymentItemShowState)
-
-        for(let key in obj){
-          this.mypreViewData [key] = obj[key]
+      const paymentCalender =
+        this.mypreViewData && this.mypreViewData.paymentCalender
+          ? this.mypreViewData.paymentCalender
+          : tempResult.paymentCalender || null;
+
+      if (paymentCalender && paymentCalender.calender) {
+        this.isShowSalePrice =
+          paymentCalender.calender.isShowSalePrice || false;
+        if (paymentCalender.calender.paymentItemShowState) {
+          let obj = JSON.parse(paymentCalender.calender.paymentItemShowState);
+
+          for (let key in obj) {
+            this.mypreViewData[key] = obj[key];
+          }
         }
       }
 
-      let tempInfo = paymentCalender && paymentCalender.course ? paymentCalender.course : [];
+      let tempInfo =
+        paymentCalender && paymentCalender.course ? paymentCalender.course : [];
       let memberPrivilegesItemList = tempResult.memberPrivilegesItemList
         ? tempResult.memberPrivilegesItemList
         : [];
       let tempMember = [];
-      memberPrivilegesItemList.forEach((member) => {
+      memberPrivilegesItemList.forEach(member => {
         if (
           member.memberPrivilegesItems &&
           member.memberPrivilegesItems.length > 0
         ) {
-          member.memberPrivilegesItems.forEach((item) => {
+          member.memberPrivilegesItems.forEach(item => {
             tempMember.push(item.name);
           });
         }
       });
       // 云教练
-      const member = paymentCalender && paymentCalender.member ? paymentCalender.member : {}
+      const member =
+        paymentCalender && paymentCalender.member ? paymentCalender.member : {};
 
-      member.isStatus = true
+      member.isStatus = true;
 
-      this.toolsPackage = (member&&!member.memberRankSettingId)? [] : [member]
+      this.toolsPackage = member && !member.memberRankSettingId ? [] : [member];
 
       // 乐器保养
-      const repair = paymentCalender && paymentCalender.repair ? paymentCalender.repair : {}
-      repair.name = '乐器保养'
-      repair.isStatus = true // 默认不选择乐器保养
-      this.instrumentRepair = repair.actualAmount+'' ? [] : [repair]
+      const repair =
+        paymentCalender && paymentCalender.repair ? paymentCalender.repair : {};
+      repair.name = "乐器保养";
+      repair.isStatus = true; // 默认不选择乐器保养
+
+      this.instrumentRepair = Number(repair.actualAmount) ? [repair] : [];
       // 小班课
-      const activity = paymentCalender && paymentCalender.activity ? paymentCalender.activity : []
+      const activity =
+        paymentCalender && paymentCalender.activity
+          ? paymentCalender.activity
+          : [];
       activity.map(i => {
-        i.isStatus = true
-      })
-      this.activityList = [...activity]
+        i.isStatus = true;
+      });
+      this.activityList = [...activity];
 
       // 判断是否有课程
       if (tempInfo && tempInfo.length > 0) {
-
         // 默认课程都选中
-        tempInfo.forEach((item) => {
+        tempInfo.forEach(item => {
           // if (item && item.isStudentOptional) {
-            // item.isStatus = false;
+          // item.isStatus = false;
           // } else {
-            item.isStatus = true;
+          item.isStatus = true;
           // }
         });
         this.courseInfo = tempInfo;
@@ -307,8 +379,12 @@ export default {
       this.musicGroupSubject = tempResult.musicGroupSubjectPlan || [];
       let instrumentInfo = {};
       let tempInstrument = [];
-      let musicGroupSubjectGoodsGroupList = this.preViewData?.payUserType == "SCHOOL" || musicGroupStatus == 'PROGRESS' ? [] : tempResult.musicGroupSubjectGoodsGroupList
-      musicGroupSubjectGoodsGroupList?.forEach((item) => {
+      let musicGroupSubjectGoodsGroupList =
+        this.preViewData?.payUserType == "SCHOOL" ||
+        musicGroupStatus == "PROGRESS"
+          ? []
+          : tempResult.musicGroupSubjectGoodsGroupList;
+      musicGroupSubjectGoodsGroupList?.forEach(item => {
         if (item.type == "INSTRUMENT") {
           // 获取乐器所有提供方式
           let KGPTJ = item.kitGroupPurchaseTypeJson
@@ -319,7 +395,7 @@ export default {
             tempItem.marketPrice = tempItem.goodsList[0].marketPrice;
             tempItem.kitType = single; // 优惠模式
             tempItem.coupon = KGPTJ[single]; // 优惠金额
-            tempItem.discountPrice = tempItem.goodsList[0].discountPrice
+            tempItem.discountPrice = tempItem.goodsList[0].discountPrice;
             if (instrumentInfo.id) {
               tempItem.isStatus = false;
               if (single == "GROUP") {
@@ -330,7 +406,7 @@ export default {
                   instrumentInfo.kitType == "LEASE" ||
                   instrumentInfo.kitType == "FREE"
                 ) {
-                  this.instrumentResult.forEach((instrRes) => {
+                  this.instrumentResult.forEach(instrRes => {
                     instrRes.isStatus = false;
                   });
                   tempItem.isStatus = true;
@@ -347,7 +423,7 @@ export default {
                   instrumentInfo.kitType == "LEASE" &&
                   instrumentInfo.price < tempItem.price
                 ) {
-                  this.instrumentResult.forEach((instrRes) => {
+                  this.instrumentResult.forEach(instrRes => {
                     instrRes.isStatus = false;
                   });
                   tempItem.isStatus = true;
@@ -364,7 +440,7 @@ export default {
                   instrumentInfo.kitType == "FREE" &&
                   instrumentInfo.price < tempItem.price
                 ) {
-                  this.instrumentResult.forEach((instrRes) => {
+                  this.instrumentResult.forEach(instrRes => {
                     instrRes.isStatus = false;
                   });
                   tempItem.isStatus = true;
@@ -386,11 +462,8 @@ export default {
               };
             }
             let childGoodsNameList = [];
-            if (
-              tempItem.childGoodsList &&
-              tempItem.childGoodsList.length > 0
-            ) {
-              tempItem.childGoodsList.forEach((child) => {
+            if (tempItem.childGoodsList && tempItem.childGoodsList.length > 0) {
+              tempItem.childGoodsList.forEach(child => {
                 if (child.type != "INSTRUMENT" && child.type != "OTHER") {
                   childGoodsNameList.push(child.name);
                 }
@@ -408,29 +481,29 @@ export default {
       });
       // 添加自备选项
       if (this.instrumentResult.length > 0) {
-        let sorted = this.groupBy(tempInstrument, (item) => {
+        let sorted = this.groupBy(tempInstrument, item => {
           return [item.kitType];
         });
         this.instrumentResultList = sorted;
 
         // 设置是否有减免金额
-        this.instrumentGetStatus()
-        this.setLeBaoStatus()
+        this.instrumentGetStatus();
+        this.setLeBaoStatus();
       }
       // 如果选择的是乐保,则把所有辅件价格设置为0
-      this.giveAccessoriesSetStatus()
+      this.giveAccessoriesSetStatus();
 
       // 初始化计算金额
       this.calcPrice();
     },
     groupBy(array, f) {
       var groups = {};
-      array.forEach(function (o) {
+      array.forEach(function(o) {
         var group = JSON.stringify(f(o));
         groups[group] = groups[group] || [];
         groups[group].push(o);
       });
-      return Object.keys(groups).map(function (group) {
+      return Object.keys(groups).map(function(group) {
         return groups[group];
       });
     },
@@ -442,7 +515,7 @@ export default {
           {
             confirmButtonText: "确定",
             dangerouslyUseHTMLString: true,
-            callback: (action) => {},
+            callback: action => {}
           }
         );
       } else if (type == "instrument") {
@@ -452,40 +525,43 @@ export default {
           {
             confirmButtonText: "确定",
             dangerouslyUseHTMLString: true,
-            callback: (action) => {},
+            callback: action => {}
           }
         );
       }
     },
-    onCheckItem(item,type) {
+    onCheckItem(item, type) {
       // 默认选中不可改
-      if(item.optionalFlag) return
+      if (item.optionalFlag) return;
       // 判断乐保是否可选
-      if(item.noSelect) return
+      if (item.noSelect) return;
       // 如果选择的是乐器先把所有选中的取消
-      if(type == 'INSTRUMENT') {
+      if (type == "INSTRUMENT") {
         this.instrumentResultList.forEach(group => {
           group.forEach(child => {
-            if(child.id != item.id || (child.id == item.id && child.kitType != item.kitType)) {
-              child.isStatus = false
+            if (
+              child.id != item.id ||
+              (child.id == item.id && child.kitType != item.kitType)
+            ) {
+              child.isStatus = false;
             }
-          })
-        })
+          });
+        });
       }
       item.isStatus = !item.isStatus;
-      if(type == 'train') {
+      if (type == "train") {
         // 如果选择的是乐保,则把所有辅件价格设置为0
-        this.giveAccessoriesSetStatus()
+        this.giveAccessoriesSetStatus();
       }
       // 设置是否有减免金额
-      this.instrumentGetStatus()
+      this.instrumentGetStatus();
       // 重新设置乐保状态
-      this.setLeBaoStatus()
+      this.setLeBaoStatus();
       // 重新计算金额
       this.calcPrice();
     },
     giveAccessoriesSetStatus() {
-      let status = false // 是否有选中云教练
+      let status = false; // 是否有选中云教练
       this.toolsPackage.forEach(item => {
         if (item.isStatus) {
           status = true;
@@ -496,36 +572,42 @@ export default {
       this.giveAccessoriesStatus = this.isGiveAccessories && status;
     },
     instrumentGetStatus() {
-      let childItem = {}
+      let childItem = {};
       this.instrumentResultList.forEach(group => {
         group.forEach(child => {
-          if(child.isStatus) {
-            childItem = child
+          if (child.isStatus) {
+            childItem = child;
           }
-        })
-      })
-      this.remissionCourseFeeStatus = childItem.kitType == 'GROUP' && childItem.groupRemissionCourseFee == 1 ? true : false
+        });
+      });
+      this.remissionCourseFeeStatus =
+        childItem.kitType == "GROUP" && childItem.groupRemissionCourseFee == 1
+          ? true
+          : false;
     },
-    setLeBaoStatus() { // 设置乐保状态
-      let status = false // 是否有选中乐器
+    setLeBaoStatus() {
+      // 设置乐保状态
+      let status = false; // 是否有选中乐器
       this.instrumentResultList.forEach(group => {
         group.forEach(item => {
-          if(item.isStatus) {
-            status = true
+          if (item.isStatus) {
+            status = true;
           }
-        })
-      })
+        });
+      });
+
       this.instrumentRepair.forEach(repair => {
-        if(status) {
-          repair.noSelect = false
+        if (status) {
+          repair.noSelect = false;
         } else {
-          repair.noSelect = true
-          repair.isStatus = false
+          repair.noSelect = true;
+          repair.isStatus = false;
         }
-      })
+      });
+      this.$forceUpdate();
     },
     calcPrice() {
-      let ids = []
+      let ids = [];
       let amount = 0,
         marketPrice = 0,
         goodsPrice = 0, // 乐器两现价
@@ -546,7 +628,7 @@ export default {
       let csi = this.courseInfo;
       // 加上判断是否有课程信息
       if (mgs) {
-        csi.forEach((item) => {
+        csi.forEach(item => {
           if (item.isStatus) {
             musicClassFee += parseFloat(item.courseCurrentPrice);
             // if (this.courseViewType != 2) {
@@ -560,7 +642,7 @@ export default {
                 item.courseCurrentPrice
               );
             }
-            marketPrice += parseFloat(item.courseOriginalPrice)
+            marketPrice += parseFloat(item.courseOriginalPrice);
             //  else {
             //   marketPrice += parseFloat(item.courseCurrentPrice);
             // }
@@ -572,23 +654,23 @@ export default {
       }
 
       // 云教练
-      const toolsPackage = this.toolsPackage
-      if(toolsPackage.length > 0) {
+      const toolsPackage = this.toolsPackage;
+      if (toolsPackage.length > 0) {
         toolsPackage.forEach(item => {
-          if(item.isStatus) {
-            this.buyCloudTeacher = true  // 临时处理,原因一条数据事要使用,如果多条数据会有问题
-            marketPrice += parseFloat(item.originalAmount)
-            amount += parseFloat(item.actualAmount)
+          if (item.isStatus) {
+            this.buyCloudTeacher = true; // 临时处理,原因一条数据事要使用,如果多条数据会有问题
+            marketPrice += parseFloat(item.originalAmount);
+            amount += parseFloat(item.actualAmount);
           } else {
-            this.buyCloudTeacher = false
+            this.buyCloudTeacher = false;
           }
-        })
+        });
       }
 
       // 乐器
       let ir = this.instrumentResult;
       if (ir.length > 0) {
-        ir.forEach((item) => {
+        ir.forEach(item => {
           if (item.isStatus) {
             if (item.name != "自备乐器") {
               contractGoodsIds += item.goodsIdList;
@@ -596,7 +678,6 @@ export default {
             if (item.kitType == "FREE") {
               amount += 0;
               couponPrice = 0; // 优惠金额
-
             } else if (item.kitType == "LEASE") {
               couponPrice = item.coupon; // 优惠金额
               if (item.name != "自备乐器") {
@@ -605,7 +686,6 @@ export default {
               } else {
                 amount += 0;
               }
-
             } else if (item.kitType == "GROUP") {
               // 团购
               if (
@@ -647,51 +727,51 @@ export default {
       }
 
       // 乐器保养
-      const instrumentRepair = this.instrumentRepair
-      if(instrumentRepair.length > 0) {
+      const instrumentRepair = this.instrumentRepair;
+      if (instrumentRepair.length > 0) {
         instrumentRepair.forEach(item => {
-          if(item.isStatus) {
-            this.buyMaintenance = true
-            marketPrice += item.originalAmount
-            amount += parseFloat(item.actualAmount)
+          if (item.isStatus) {
+            this.buyMaintenance = true;
+            marketPrice += item.originalAmount;
+            amount += parseFloat(item.actualAmount);
           } else {
-            this.buyMaintenance = false
+            this.buyMaintenance = false;
           }
-        })
+        });
       }
 
       amount += parseFloat(tempCourseFee + musicClassFee);
 
       // 辅件
-      if (
-        this.accessOries.length > 0) {
-        this.accessOries.forEach((item) => {
+      if (this.accessOries.length > 0) {
+        this.accessOries.forEach(item => {
           //  && this.accessIsShowStatus
           if (item.isStatus) {
-            tempAccessPrice += this.giveAccessoriesStatus ? 0 : parseFloat(item.price);
+            tempAccessPrice += this.giveAccessoriesStatus
+              ? 0
+              : parseFloat(item.price);
             amount += this.giveAccessoriesStatus ? 0 : parseFloat(item.price);
             if (item.goodsList && item.goodsList.length > 0) {
-              item.goodsList.forEach((childGoods) => {
+              item.goodsList.forEach(childGoods => {
                 tempAccessMarketPrice += parseFloat(childGoods.marketPrice);
                 marketPrice += parseFloat(childGoods.marketPrice);
               });
             }
             goodsGroupIds[item.id] = "ACCESSORIES";
-
           }
         });
       }
 
       // 小班课
-      const activityList = this.activityList
-      if(activityList.length > 0) {
+      const activityList = this.activityList;
+      if (activityList.length > 0) {
         activityList.forEach(item => {
-          if(item.isStatus) {
-            buyCalenderActivityId.push(item.id)
-            marketPrice += item.originalAmount
-            amount += parseFloat(item.actualAmount)
+          if (item.isStatus) {
+            buyCalenderActivityId.push(item.id);
+            marketPrice += item.originalAmount;
+            amount += parseFloat(item.actualAmount);
           }
-        })
+        });
       }
 
       let tempGroupPurchasePrice = amount;
@@ -714,13 +794,13 @@ export default {
         accessMarketPrice: tempAccessMarketPrice,
         accessPrice: tempAccessPrice,
         goodsPrice: goodsPrice,
-        goodsMarketPrice: goodsMarketPrice,
+        goodsMarketPrice: goodsMarketPrice
       };
     },
     permission(str) {
       return permission(str);
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="less" scoped>

+ 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({

+ 71 - 13
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"
@@ -40,16 +42,47 @@
               >
             </el-checkbox-group>
           </div>
-          <div class="chioseWrap">
+          <div class="chioseWrap"     v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('GROUP')
+                  : false
+              ">
             <p
               class="title"
+
+            >
+              团购价:
+            </p>
+
+            <div
               v-show="
                 music.type && music.type.length > 0
                   ? music.type.includes('GROUP')
                   : false
               "
+              style="width: 180px;margin-top: 20px;"
             >
-              团购价:
+
+                <el-form-item
+                  :prop="'chioseMusic.'+index+'.groupPrice'"
+                >
+                  <el-input type="number" v-model="music.groupPrice" :disabled="true">
+                    <template slot="append">元</template></el-input
+                  >
+                </el-form-item>
+
+            </div>
+          </div>
+          <div class="chioseWrap"     v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('GROUP')
+                  : false
+              ">
+            <p
+              class="title"
+
+            >
+              分润金额:
             </p>
 
             <div
@@ -58,11 +91,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+'.organShareProfit'"
+                  :rules="[{ validator:(rule, value, callback)=> checkGroupPrice(rule, value, callback,music), trigger: 'blur' }]"
+                >
+                  <el-input type="number" v-model="music.organShareProfit" >
+                    <template slot="append">元</template></el-input
+                  >
+                </el-form-item>
+
             </div>
           </div>
           <div class="chioseWrap">
@@ -100,10 +140,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 +188,12 @@
         >新增可选乐器</el-button
       >
     </div> -->
+  </el-form>
   </div>
 </template>
 <script>
 export default {
-  props: ["item", "basdisabled", "activeSoundList"],
+  props: ["item", "basdisabled", "activeSoundList",'dividend'],
   data() {
     return {
       radio: "",
@@ -164,14 +202,15 @@ 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: [],
         groupPrice: 0,
         borrowPrice: 1500,
         groupRemissionCourseFee: false,
+        organShareProfit:0
       });
     }
   },
@@ -180,6 +219,7 @@ export default {
       this.item.goodsList.map((some, index) => {
         if (some.id == val) {
           music.groupPrice = some.groupPurchasePrice;
+          music.groupPurchasePrice = some.groupPurchasePrice;
         }
       });
     },
@@ -190,6 +230,7 @@ export default {
         groupPrice: null,
         borrowPrice: 1500,
         groupRemissionCourseFee: 0,
+        organShareProfit:0
       });
       this.$emit("lookMusic");
     },
@@ -214,6 +255,19 @@ 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>this.dividend) {
+        callback(new Error(`分润金额不得大于${this.dividend}元`));
+      } else if (value*1 <0 ){
+        console.log(rule, value, this.dividend,music,'团购金额不得小于0元');
+        callback(new Error(`分润金额不得小于${0}元`));
+      }else {
+        callback();
+      }
+    },
   },
   // watch: {
   //   item: {
@@ -278,5 +332,9 @@ p {
   justify-content: flex-start;
   align-items: center;
   margin-bottom: 10px;
+
 }
+:deep(.el-form-item) {
+    margin-bottom: 0!important;
+  }
 </style>

+ 48 - 16
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);
@@ -166,7 +175,8 @@ export default {
       this.teamStatus == "look" ||
       this.teamStatus == "teamAudit" ||
       this.teamStatus == "feeAudit" ||
-      this.teamStatus == "teamCanceled"
+      this.teamStatus == "teamCanceled" ||
+      this.teamStatus == 'FEE_AUDIT_FAILED'
     ) {
       this.basdisabled = true;
     } else {
@@ -197,7 +207,8 @@ export default {
         this.teamStatus == "look" ||
         this.teamStatus == "teamAudit" ||
         this.teamStatus == "feeAudit" ||
-        this.teamStatus == "teamCanceled"
+        this.teamStatus == "teamCanceled"||
+        this.teamStatus == 'FEE_AUDIT_FAILED'
       ) {
         this.basdisabled = true;
       } else {
@@ -252,7 +263,6 @@ export default {
                         // 格式化商品和教辅
                         res.data.musicGroupSubjectGoodsGroups.forEach(
                           (shop) => {
-
                             let index = findIndex(this.activeSoundList, (o) => {
                               return o.id == shop.subjectId;
                             });
@@ -278,6 +288,7 @@ export default {
                                   groupRemissionCourseFee: Boolean(
                                     shop.groupRemissionCourseFee
                                   ),
+                                  organShareProfit:shop.organShareProfit
                                 });
                               }
                             }
@@ -306,17 +317,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 +378,6 @@ export default {
       this.soundVisible = false;
     },
     initSound(item) {
-
       let obj = {
         id: item.id,
         sound: item.name,
@@ -507,6 +528,7 @@ export default {
           expectedStudentNum: active.expectedStudentNum,
           subName: active.sound,
           subjectId: active.id,
+
         };
         obj.musicGroupSubjectPlans.push(item);
         // 格式化商品数据 chioseMusic: [{ musical: '', type: ["GROUP"], groupPrice: 0, borrowPrice: 1500 }],
@@ -515,6 +537,7 @@ export default {
           let goodsItem = null;
           let depositFee = music.borrowPrice;
           let price = music.groupPrice;
+          let organShareProfit = music.organShareProfit;
           let groupRemissionCourseFee;
           if (music.type.indexOf("GROUP") != -1) {
             groupRemissionCourseFee = music.groupRemissionCourseFee * 1;
@@ -554,6 +577,7 @@ export default {
               depositFee,
               price,
               groupRemissionCourseFee,
+              organShareProfit
             };
             obj.musicGroupSubjectGoodsGroups.push(some);
           }
@@ -585,8 +609,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 +623,7 @@ export default {
               noMusic.join(",") +
               "尚未设置乐器,学员报名该声部时将无乐器可购买,是否确认?";
           } else {
-            str = "是否提交审核";
+            str = "是否设置缴费信息";
           }
           this.$confirm(str, "提示", {
             confirmButtonText: "确定",
@@ -609,10 +634,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",
                   });
+                  }
+
                 }
               });
             })

+ 265 - 28
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,147 @@
             </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"
+            >
+            <i slot="suffix" class="el-input__icon" style="padding-right: 5px"
+                >元</i
+              >
+            </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
+            style="width:300px"
+              placeholder="请输入销售活动"
+              :maxlength="100"
+              v-model.trim="topFrom.saleActivityDesc"
+              show-word-limit
+              type="textarea"
+              :rows="3"
+              :disabled="basdisabled"
+            ></el-input>
+          </el-form-item>
+        </div>
         <div class="head">乐团设置:</div>
         <el-form-item
           label="同步群消息"
@@ -467,6 +616,7 @@ import {
   getOrganRole,
   getTeacher,
   createTeam,
+  getGradeList,
 } from "@/api/buildTeam";
 import dayjs from "dayjs";
 import merge from "webpack-merge";
@@ -474,7 +624,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 +676,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 +700,8 @@ export default {
       transactionList: [],
       addList: [], // 教学地点列表
       activeTeam: [],
+      gradeList: [], // 年级
+      gradeListObj: null,
       teamid: "",
       teamStatus: "",
       isInit: false,
@@ -566,6 +738,9 @@ export default {
       qrCodeUrl: null,
       codeTitle: null,
       tenantId: "",
+      coursePlanList: coursePlanList,
+      musicGroupPlanMakingList: [],
+      singleTrainMinutesList: singleTrainMinutesList,
     };
   },
   created() {},
@@ -596,13 +771,14 @@ export default {
       this.$store.dispatch("draftIndex", 0);
     }
     this.teamStatus = this.$route.query.type;
-
+    console.log(this.$route.query.type,'teamStatus')
     if (
       this.teamStatus == "look" ||
       this.teamStatus == "teamAudit" ||
       this.teamStatus == "feeAudit" ||
       this.teamStatus == "APPLY" ||
-      this.teamStatus == "PAY"
+      this.teamStatus == "PAY" ||
+      this.teamStatus == 'FEE_AUDIT_FAILED'
     ) {
       this.basdisabled = true;
     } else {
@@ -703,7 +879,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,13 +887,22 @@ 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 (
         this.teamStatus == "look" ||
         this.teamStatus == "teamAudit" ||
         this.teamStatus == "feeAudit" ||
-        this.teamStatus == "teamCanceled"
+        this.teamStatus == "teamCanceled"||
+        this.teamStatus == 'FEE_AUDIT_FAILED'
       ) {
         this.basdisabled = true;
       } else {
@@ -762,7 +947,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 +981,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 +1004,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 +1046,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 +1158,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 +1191,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 +1318,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 +1564,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 +1792,7 @@ export default {
 </style>
 <style scoped lang="scss">
 .banseLeft {
-  ::v-deep .el-form--inline {
+  :deep(.el-form--inline) {
     .el-form-item__content {
       display: block;
     }

+ 30 - 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,16 @@ 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);
+      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 +152,7 @@ export default {
     },
     approval() {
       // 审核通过 验证商品
-     let flag = this.$refs.soundSetCore.checkSubmit()
+      let flag = this.$refs.soundSetCore.checkSubmit();
       if (!flag) return;
       this.$confirm(`是否审核通过?`, "提示", {
         confirmButtonText: "确定",
@@ -190,6 +199,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
         >

+ 24 - 13
src/views/teamBuild/modals/change-voice.vue

@@ -87,21 +87,28 @@
                     "元"
                   : "免费"
               }`
-            }}</el-radio
-          >
+            }}
+          </el-radio>
         </el-radio-group>
         <span v-else-if="changeInfo && changeInfo.kitGroupPurchaseType">{{
           kitGroupPurchaseTypeFormater[changeInfo.kitGroupPurchaseType]
         }}</span>
       </el-form-item>
+      <!-- <el-form-item label="分部分润金额" prop="musicalGoods" v-if="form.musicalGoods&&musicalGoodsById[form.musicalGoods]&&form.type=='GROUP'">
+        <el-input :value=" musicalGoodsById[form.musicalGoods].organShareProfit" disabled>
+          <template slot="append">元</template>
+        </el-input>
+      </el-form-item> -->
       <template>
         <!--      v-show="
             (courseViewType == 2 && form.musicalGoods == 'OWNED') ||
             courseViewType != 2
           " -->
         <el-form-item
-
-          v-if="(activeAccessories.length || groupList.length || changeInfo)&&form.musicalGoods"
+          v-if="
+            (activeAccessories.length || groupList.length || changeInfo) &&
+            form.musicalGoods
+          "
           label="更换教辅"
         >
           <accessories
@@ -109,7 +116,6 @@
             :list.sync="activeAccessories"
             :groupList.sync="groupList"
             @change="accessoriesChange"
-
             v-if="!changeInfo"
           />
           <span v-else-if="changeInfo">{{ changeAccessoriesGoods }}</span>
@@ -210,16 +216,20 @@ const formatAllGoods = (data, kitGroupPurchaseType) => {
 
   if (data) {
     const { musicGroupSubjectGoodsGroupList } = data;
-
+// 乐器还是辅件
+/**
+ * {
+ * ACCESSORIES:[],
+ * INSTRUMENT:[]
+ * }
+ */
     const types = {};
-
     for (const item of musicGroupSubjectGoodsGroupList) {
       if (!types[item.type]) {
         types[item.type] = [];
       }
       types[item.type].push(item);
     }
-
     const typesKeys = Object.keys(types);
 
     for (const key of typesKeys) {
@@ -246,7 +256,9 @@ const formatAllGoods = (data, kitGroupPurchaseType) => {
                 : kitGroupPurchaseType === "LEASE"
                 ? item.depositFee
                 : item.price,
+
           };
+
           musicalGoods.push(_item);
           musicalGoodsById[item.goodsIdList] = _item;
           if (!types.ACCESSORIES) {
@@ -332,6 +344,7 @@ export default {
       }
     },
     "form.musicalGoods"() {
+      console.log(this.form, "form");
       this.$set(this.form, "type", "");
     },
     "form.type"() {
@@ -351,10 +364,9 @@ export default {
       );
     },
     activeAccessories() {
-
       const { musicalGoods } = this.form || {};
-        let arr = musicalGoods ? this.accessoriesByGoods[musicalGoods] || [] : [];
-      return arr
+      let arr = musicalGoods ? this.accessoriesByGoods[musicalGoods] || [] : [];
+      return arr;
     },
     changeSubjectName() {
       let name = "";
@@ -428,6 +440,7 @@ export default {
       const setRes = (res) => {
         const { data } = res;
         this.item = data || {};
+        console.log(data,'fetchDetail')
         if (data) {
           this.$set(this.form, "type", this.item.kitGroupPurchaseType);
           this.originalAccessoriesPrice = data.originalAccessoriesPrice;
@@ -467,7 +480,6 @@ export default {
           data = res.data;
           this.musicGroupSubjectPlanFee = res.data.musicGroupSubjectPlan.fee;
           // 更改辅件了列表
-
         } catch (e) {
           console.log(e);
         }
@@ -475,7 +487,6 @@ export default {
         this.musicGroupSubjectPlanFee = 0;
       }
 
-
       const items = formatAllGoods(data, this.item.kitGroupPurchaseType);
       for (const key in items) {
         if (items.hasOwnProperty(key)) {

+ 2 - 0
src/views/teamBuild/signupList.vue

@@ -1891,6 +1891,8 @@ export default {
               item.name = "云教练";
             } else if (item.type == "COURSE") {
               item.name = "课程";
+            }else if(item.type == "ORGAN_SHARE_PROFIT"){
+              item.name = "乐器分润";
             }
             if (courseType[item.type]) {
               item.name = courseType[item.type];

+ 1 - 1
src/views/teamDetail/components/modals/classroom-preview.vue

@@ -26,7 +26,7 @@
         prop="surplusTime"
       ></el-table-column>
     </el-table>
-    <div style="color: red;font-weight: bold;margin: 20px 0;">确认排课后剩余时长将被系统删除,不可排课</div>
+    <!-- <div style="color: red;font-weight: bold;margin: 20px 0;">确认排课后剩余时长将被系统删除,不可排课</div> -->
     <el-table
       :header-cell-style="{background:'#EDEEF0',color:'#444'}"
       :data="details"

+ 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>

+ 35 - 7
src/views/teamDetail/teamList.vue

@@ -16,7 +16,7 @@
           type="primary"
           v-if="permission('musicGroup/createGroup')"
           @click="createNewTeam"
-          >新建乐团</el-button
+          >申请乐团</el-button
         >
       </div>
 
@@ -300,7 +300,7 @@
           <el-table-column align="center" width="100px" label="收费标准">
             <template slot-scope="scope">
               <div>
-                {{ scope.row.chargeStandard | moneyFormat(true) }}
+                {{ scope.row.defaultChargeStandard | moneyFormat(true) }}
               </div>
             </template>
           </el-table-column>
@@ -341,13 +341,21 @@
                   @click="lookTeamDetail(scope.row)"
                   >编辑</el-button
                 >
+                <el-button
+                  type="text"
+                  v-if="
+                    scope.row.status == 'FEE_AUDIT_FAILED' &&
+                    permission('musicGroup/update')
+                  "
+                  @click="lookTeamDetail(scope.row)"
+                  >编辑</el-button
+                >
                 <!-- 报名中缴费中筹备中查看乐团 -->
                 <el-button
                   type="text"
                   v-if="
                     (scope.row.status == 'PRE_APPLY' ||
                       scope.row.status == 'PAUSE' ||
-                      scope.row.status == 'PRE_BUILD_FEE' ||
                       scope.row.status == 'PROGRESS' ||
                       scope.row.status == 'CANCELED' ||
                       scope.row.status == 'APPLY' ||
@@ -395,7 +403,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 +827,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 +840,7 @@ export default {
                 type: "look",
                 id: row.id,
                 name: row.name,
-                team_status: "PRE_BUILD_FEE",
+                team_status: "DRAFT",
                 tabrouter: 3,
               },
             },
@@ -880,6 +888,26 @@ export default {
           );
           break;
         }
+        case "FEE_AUDIT_FAILED": {
+          // 审核失败
+          this.$store.dispatch("draftIndex", 3);
+          this.$router.push(
+            {
+              path: "/business/resetTeaming",
+              query: {
+                type: "FEE_AUDIT_FAILED",
+                id: row.id,
+                clear: "true",
+                team_status: row.status,
+                tabrouter: 3,
+              },
+            },
+            (router) => {
+              router.meta.title = "费用审核失败";
+            }
+          );
+          break;
+        }
         case "PRE_APPLY": {
           // 预报名
 

+ 1 - 1
vue.config.js

@@ -18,7 +18,7 @@ const name = defaultSettings.title || "管乐迷后台管理系统"; // page tit
 // let target = 'https://online.dayaedu.com' //线上
 // let target = 'http://192.168.3.251:8000' // 何国威
 // let target = 'http://192.168.3.20:8000' //邹璇
-// let target = 'http://192.168.3.119:8000' //勇哥
+// let target = 'http://192.168.3.161:8000' //勇哥
 // let target = 'http://192.168.3.146:8000' //王昭
 // let target = 'http://dev.dayaedu.com' // 开发环境
 let target = "https://test.dayaedu.com"; //测试环境

Неке датотеке нису приказане због велике количине промена