소스 검색

添加跨团合班修改

wolyshaw 4 년 전
부모
커밋
118adcd8b8
2개의 변경된 파일195개의 추가작업 그리고 3개의 파일을 삭제
  1. 162 0
      src/views/resetTeaming/modals/extra-class-user.vue
  2. 33 3
      src/views/resetTeaming/modals/user-pay-form.vue

+ 162 - 0
src/views/resetTeaming/modals/extra-class-user.vue

@@ -0,0 +1,162 @@
+<template>
+  <el-form
+    ref="form"
+    :model="list"
+  >
+    <el-table
+      :data="form"
+      style="width: 100%;text-alogn: center;"
+    >
+      <el-table-column
+        label="学员姓名"
+        prop="username"></el-table-column>
+      <el-table-column
+        label="手机号码"
+        prop="phone"></el-table-column>
+      <el-table-column
+        label="课程类型"
+        prop="courseType"
+        key="courseType"
+        width="150">
+        <template slot-scope="scope">
+          {{courseType[list.form[scope.$index].courseType]}}
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="课程时长(分钟)"
+        prop="courseTime"
+        width="130"></el-table-column>
+      <el-table-column
+        label="现价(元)"
+        prop="courseCurrentPrice"
+        key="courseCurrentPrice"
+        width="140">
+        <template slot-scope="scope">
+          <el-form-item
+            :prop="'form.' + scope.$index + '.courseCurrentPrice'"
+            :rules="{ required: true, message: '请输入现价', trigger: 'blur' }"
+          >
+            <!-- $listeners.moneyChange -->
+            <el-input-number
+              size="small"
+              style="width: 90%!important;"
+              class="number-input"
+              v-model="list.form[scope.$index].courseCurrentPrice"
+              :controls="false"
+              :precision="0"
+              :min="0"
+              @change="change"
+              placeholder="请输入现价"
+            />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="courseOriginalPrice"
+        key="courseOriginalPrice"
+        label="原价(元)"
+        width="140">
+        <template slot-scope="scope">
+          <el-form-item
+            :prop="'form.' + scope.$index + '.courseOriginalPrice'"
+            :rules="{ required: true, message: '请输入原价', trigger: 'blur' }"
+          >
+            <el-input-number
+              size="small"
+              style="width: 90%!important;"
+              class="number-input"
+              v-model="list.form[scope.$index].courseOriginalPrice"
+              :controls="false"
+              :precision="0"
+              :min="0"
+              placeholder="请输入原价"
+            />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column
+        v-if="clearable && $listeners.remove"
+        prop="close"
+        key="close"
+        width="60">
+        <template slot-scope="scope">
+          <i
+            v-if="form.length > 1"
+            @click="$listeners.remove && $listeners.remove(scope.$index)"
+            class="el-icon-circle-close"
+            style="margin-bottom: 24px;cursor: pointer;"
+          ></i>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-button
+      icon="el-icon-circle-plus-outline"
+      plain
+      v-if="!isCommon && $listeners.create"
+      type="info"
+      size="small"
+      style="width: 100%;margin: 20px 0;"
+      @click="$listeners.create"
+    >新增课程类型</el-button>
+  </el-form>
+</template>
+<script>
+import { courseType, boolOptions } from '@/constant'
+import { objectToOptions } from '@/utils'
+import { classTimeList, array2object } from '@/utils/searchArray'
+import numeral from 'numeral'
+import MusicStore from '@/views/resetTeaming/store'
+export default {
+  props: ['form', 'isCommon', 'isDisabled', 'isUserType', 'courseUnitPriceSettingsByType', 'clearable'],
+  data() {
+    return {
+      courseType,
+      courseTypeOptions: this.courseUnitPriceSettingsByType,
+      boolOptionsOptions: objectToOptions(boolOptions),
+    }
+  },
+  computed: {
+    list() {
+      return {
+        form: this.form
+      }
+    },
+    classTimeList() {
+      return array2object(classTimeList)
+    },
+  },
+  methods: {
+    change(val) {
+      this.$listeners.moneyChange()
+    },
+    isOptionDisabled(key) {
+      const selected = this.form.map(item => item.courseType)
+      return selected.includes(key)
+    },
+    getOldMoney(index) {
+      return numeral(this.list.form[index].courseTotalMinuties * this.list.form[index].unitPrice).format('0,0.00')
+    },
+    courseItemChange(item, index) {
+      this.$listeners.priceChange(item, index)
+      this.$refs.form.validateField(`form.${index}.courseTotalMinuties`)
+    },
+    validatorCourseTotalMinuties(index) {
+      return (rule, value, callback) => {
+        const { courseType } = this.list.form[index]
+        if (courseType && value > 1 && this.classTimeList[courseType] &&  value < this.classTimeList[courseType]) {
+          callback(new Error(`单节课不得少于${this.classTimeList[courseType]}分钟`))
+          return
+        }
+        callback()
+      }
+    }
+  },
+}
+</script>
+<style lang="less" scoped>
+.number-input{
+  /deep/ .el-input__inner {
+    text-align: left;
+  }
+}
+</style>

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

@@ -3,10 +3,12 @@
     <el-alert title="课程信息设置"
               :closable="false"
               class="alert"
+              v-if="paymentTypeString !== 'SPAN_GROUP_CLASS_ADJUST'"
               type="info">
     </el-alert>
     <userBaseinfo :form.sync="form"
                   :isCommon="isCommon"
+                  v-if="paymentTypeString !== 'SPAN_GROUP_CLASS_ADJUST'"
                   :isUserType="isUserType"
                   @getCharges="getCharges"
                   @changeActive="changeActive"
@@ -16,7 +18,21 @@
                   :chargeTypeName="chargeTypeName"
                   :paymentType="paymentType"
                   ref="base" />
-    <template v-if="!isCommon">
+    <template v-if="paymentTypeString === 'SPAN_GROUP_CLASS_ADJUST'">
+      <el-alert title="加课信息设置"
+                :closable="false"
+                class="alert"
+                type="info">
+      </el-alert>
+      <extraClassUser :form.sync="eclassuser"
+                  ref="eclass"
+                  :isUserType="isUserType"
+                  :courseUnitPriceSettingsByType="organizationCourseUnitPriceSettingsByType"
+                  @priceChange="priceChange"
+                  :clearable="true"
+                  @moneyChange="syncAllMoney" />
+    </template>
+    <template v-else-if="!isCommon">
       <el-alert title="加课信息设置"
                 :closable="false"
                 class="alert"
@@ -65,7 +81,7 @@
           </el-select>
         </el-form-item>
       </el-form>
-      <template v-if="isMulticycle">
+      <template v-if="isMulticycle && paymentTypeString !== 'SPAN_GROUP_CLASS_ADJUST'">
         <el-collapse :value="collapse" @change="collapseChange" >
           <el-collapse-item
             v-for="(item, index) in cycles"
@@ -145,6 +161,7 @@ import { getTimes, objectToOptions } from "@/utils";
 import userBaseinfo from "./user-baseinfo";
 import paymentCycle from "./payment-cycle";
 import extraClass from "./extra-class";
+import extraClassUser from "./extra-class-user";
 import classrooms from "./classrooms";
 import otherform from "./other";
 import baseInfoVue from '../../teamDetail/components/baseInfo.vue';
@@ -156,6 +173,7 @@ const paymentTypeFormat = {
   1: "MUSIC_RENEW",
   2: "ADD_COURSE",
   3: "ADD_STUDENT",
+  4: "SPAN_GROUP_CLASS_ADJUST",
 };
 
 export default {
@@ -164,6 +182,7 @@ export default {
     userBaseinfo,
     paymentCycle,
     extraClass,
+    extraClassUser,
     classrooms,
     otherform,
   },
@@ -180,6 +199,7 @@ export default {
       cycles: [{}],
       cycle: {},
       eclass: [],
+      eclassuser: [],
       collapse: [0],
       nextVisible: false,
       typeList: [],
@@ -235,6 +255,14 @@ export default {
         }
       }
       return (this.payment.paymentPattern == 0 && this.form.leixing !== '2' && paymentType !== 'ADD_COURSE') || (this.payment.paymentPattern == 0 && editMulticycle)
+    },
+    paymentTypeString() {
+      let paymentType = ''
+      if (this.viewDetail) {
+        const { musicGroupPaymentCalenders } = this.viewDetail
+        paymentType = musicGroupPaymentCalenders[0]?.paymentType
+      }
+      return paymentType
     }
   },
   watch: {
@@ -317,6 +345,7 @@ export default {
           this.eclass = (res.data.musicGroupPaymentCalenderCourseSettings || []).filter(item => {
             return !item.isStudentOptional || this.paymentType !== undefined
           })
+          this.eclassuser = res.data.musicGroupPaymentCalenderStudentDetails
           const firstPayment = res.data.musicGroupPaymentCalenders[0] || {}
           this.$set(this.payment, 'paymentPattern', String(this.viewDetail.auditDto?.paymentPattern))
           if (this.$refs.cycle) {
@@ -365,7 +394,8 @@ export default {
       let money = 0;
       let first = 0
       let other = 0
-      for (const item of this.eclass) {
+      let classs = this.paymentTypeString === 'SPAN_GROUP_CLASS_ADJUST' ? this.eclassuser : this.eclass
+      for (const item of classs) {
         money += item.courseCurrentPrice;
         if (this.cycles && this.cycles.length) {
           if (item.isStudentOptional) {