瀏覽代碼

“fix”

wolyshaw 4 年之前
父節點
當前提交
8e9a182e46

+ 15 - 3
src/views/resetTeaming/components/resetPayList.vue

@@ -221,13 +221,15 @@
       </div>
     </el-dialog>
     <el-dialog
-      title="新增学员缴费"
+      :title="payFormTitle"
       :visible.sync="userVisible"
-      width="600px"
+      width="800px"
+      destroy-on-close
     >
       <userPayForm
         @close="userVisible = false"
         @submited="getList"
+        :type="payFormType"
       />
     </el-dialog>
 
@@ -280,6 +282,7 @@ export default {
   },
   data () {
     return {
+      payFormType: 'user',
       userVisible: false,
       schoolVisible: false,
       searchForm: {
@@ -331,6 +334,11 @@ export default {
     this.init();
 
   },
+  computed: {
+    payFormTitle() {
+      return this.payFormType === 'user' ? '新增学员缴费' : '新增学校缴费'
+    }
+  },
   activated () {
     this.init();
   },
@@ -339,9 +347,13 @@ export default {
       this.getList()
     },
     newUserPay() {
+      this.payFormType = 'user'
+      this.userVisible = true
+    },
+    newSchoolPay() {
+      this.payFormType = 'school'
       this.userVisible = true
     },
-    newSchoolPay() {},
     getList () {
       getMusicGroupPaymentCalender({ page: this.rules.page, rows: this.rules.limit, musicGroupId: this.$route.query.id }).then(res => {
         if (res.code == 200) {

+ 50 - 0
src/views/resetTeaming/modals/classrooms.vue

@@ -0,0 +1,50 @@
+<template>
+  <div>
+    <el-table
+      :data="list"
+      style="width: 100%">
+      <el-table-column
+        prop="date"
+        label="班级名称">
+      </el-table-column>
+      <el-table-column
+        prop="date"
+        label="班级类型"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="date"
+        label="班级人数"
+        width="180">
+      </el-table-column>
+    </el-table>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="$listeners.close">取 消</el-button>
+      <el-button
+        type="primary"
+        @click="submit"
+      >确 定</el-button>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      list: []
+    }
+  },
+  methods: {
+    submit() {
+
+    }
+  },
+}
+</script>
+<style lang="less" scoped>
+  .dialog-footer{
+    margin-top: 20px;
+    display: block;
+    text-align: right;
+  }
+</style>

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

@@ -0,0 +1,114 @@
+<template>
+  <el-form
+    ref="form"
+    :model="list"
+  >
+    <el-table
+      :data="form"
+      style="width: 100%;text-alogn: center;"
+    >
+      <el-table-column
+        label="加课类型"
+        width="150">
+        <template slot-scope="scope">
+          <el-form-item
+            :prop="'form.' + scope.$index + '.ke1'"
+            :rules="{ required: true, message: '请选择加课类型', trigger: 'change' }"
+          >
+            <el-select
+              style="width: 90%!important;"
+              size="small"
+              v-model="scope.row.ke1"
+              placeholder="加课类型"
+              clearable
+            >
+              <el-option label="1" value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="是否免费"
+        width="150">
+        <template slot-scope="scope">
+          <el-form-item
+            :prop="'form.' + scope.$index + '.ke2'"
+            :rules="{ required: true, message: '请选择是否免费', trigger: 'change' }"
+          >
+            <el-select
+              style="width: 90%!important;"
+              size="small"
+              v-model="scope.row.ke2"
+              placeholder="是否免费"
+              clearable
+            >
+              <el-option label="1" value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="加课时长(分钟)"
+        width="150">
+        <template slot-scope="scope">
+          <el-form-item
+            :prop="'form.' + scope.$index + '.num'"
+            :rules="{ required: true, message: '请输入加课时长', trigger: 'blur' }"
+          >
+            <el-input-number
+              size="small"
+              style="width: 90%!important;"
+              class="number-input"
+              v-model="scope.row.num"
+              :controls="false"
+              :precision="0"
+              :min="1"
+              placeholder="加课时长"
+            />
+          </el-form-item>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="每分钟费用(元)"
+        width="120">
+      </el-table-column>
+      <el-table-column
+        label="课程费用(元)"
+        width="100">
+      </el-table-column>
+      <el-table-column
+        width="60">
+        <template slot-scope="scope">
+          <i v-if="scope.$index !== 0" @click="$listeners.remove(scope.$index)" class="el-icon-circle-close"></i>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-button
+      icon="el-icon-circle-plus-outline"
+      plain
+      type="info"
+      size="small"
+      style="width: 100%;margin: 20px 0;"
+      @click="$listeners.create"
+    >新增课程类型</el-button>
+  </el-form>
+</template>
+<script>
+export default {
+  props: ['form'],
+  data() {
+    return {
+      list: {
+        form: this.form
+      }
+    }
+  },
+}
+</script>
+<style lang="less" scoped>
+.number-input{
+  /deep/ .el-input__inner {
+    text-align: left;
+  }
+}
+</style>

+ 52 - 12
src/views/resetTeaming/modals/payment-cycle.vue

@@ -1,30 +1,70 @@
 <template>
-  <div>
+  <el-form
+    label-width="160px"
+    ref="form"
+    :model="form"
+    label-suffix=": "
+  >
     <el-form-item
-      label="缴费金额"
+      label="缴费金额(元)"
       prop="money"
       :rules="[{required: true, message: '请输入缴费金额', trigger: 'blur'}]"
     >
-      <el-input placeholder="请输入缴费金额" v-model="form.money">
-        <template slot="append">元</template>
-      </el-input>
+      <el-input-number
+        class="number-input"
+        v-model="form.money"
+        :controls="false"
+        :precision="2"
+        :min="1"
+        placeholder="请输入缴费金额"
+      />
     </el-form-item>
     <el-form-item
       label="缴费时间"
-      prop="money"
-      :rules="[{required: true, message: '请输入缴费金额', trigger: 'blur'}]"
+      prop="value1"
+      :rules="[{required: true, message: '请选择缴费时间', trigger: 'blur'}]"
     >
-      <el-input placeholder="请输入缴费金额" v-model="form.money">
-        <template slot="append">元</template>
-      </el-input>
+      <el-date-picker
+        v-model="form.value1"
+        type="daterange"
+        style="width: 100%;"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期">
+      </el-date-picker>
     </el-form-item>
-  </div>
+    <el-form-item
+      label="缴费有效期"
+      prop="value2"
+      :rules="[{required: true, message: '请选择缴费有效期', trigger: 'blur'}]"
+    >
+      <el-date-picker
+        v-model="form.value2"
+        type="daterange"
+        style="width: 100%;"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期">
+      </el-date-picker>
+    </el-form-item>
+  </el-form>
 </template>
 <script>
 export default {
-  props: ['form']
+  props: ['form'],
+  data() {
+    return {
+
+    }
+  },
 }
 </script>
 <style lang="less" scoped>
+.number-input{
+  /deep/ .el-input__inner {
+    text-align: left;
+  }
 
+  width: 100%;
+}
 </style>

+ 58 - 11
src/views/resetTeaming/modals/user-baseinfo.vue

@@ -1,21 +1,27 @@
 <template>
-  <div>
+  <el-form
+    label-width="160px"
+    :model="form"
+    ref="form"
+    label-suffix=": "
+  >
     <el-form-item
       label="缴费类型"
       prop="leixing"
       :rules="[{required: true, message: '请选择缴费类型', trigger: 'change'}]"
     >
-      <el-radio-group v-model="form.leixing">
-        <el-radio label="3">乐团课程</el-radio>
-        <el-radio label="6">临时加课</el-radio>
+      <el-radio-group style="width: 100%" v-model="form.leixing">
+        <el-radio label="0">乐团课程</el-radio>
+        <el-radio label="1">临时加课</el-radio>
       </el-radio-group>
     </el-form-item>
     <el-form-item
       label="乐团模式"
       prop="moshi"
+      v-if="isCommon"
       :rules="[{required: true, message: '请选择乐团模式', trigger: 'change'}]"
     >
-      <el-select v-model="form.moshi" placeholder="请选择乐团模式">
+      <el-select style="width: 100%!important;" v-model="form.moshi" placeholder="请选择乐团模式">
         <el-option
           v-for="item in options"
           :key="item.value"
@@ -27,9 +33,10 @@
     <el-form-item
       label="收费标准"
       prop="shoufei"
+      v-if="isCommon"
       :rules="[{required: true, message: '请选择收费标准', trigger: 'change'}]"
     >
-      <el-select v-model="form.shoufei" placeholder="请选择收费标准">
+      <el-select style="width: 100%!important;" v-model="form.shoufei" placeholder="请选择收费标准">
         <el-option
           v-for="item in options"
           :key="item.value"
@@ -43,7 +50,7 @@
       prop="jiaofei"
       :rules="[{required: true, message: '请选择缴费方式', trigger: 'change'}]"
     >
-      <el-select v-model="form.jiaofei" placeholder="请选择缴费方式">
+      <el-select style="width: 100%!important;" v-model="form.jiaofei" placeholder="请选择缴费方式">
         <el-option
           v-for="item in options"
           :key="item.value"
@@ -57,7 +64,7 @@
       prop="zengsong"
       :rules="[{required: true, message: '请选择是否赠送乐团网管课', trigger: 'change'}]"
     >
-      <el-radio-group v-model="form.zengsong">
+      <el-radio-group style="width: 100%" v-model="form.zengsong">
         <el-radio label="3">是</el-radio>
         <el-radio label="6">否</el-radio>
       </el-radio-group>
@@ -69,14 +76,48 @@
     >
       <el-input type="textarea" v-model="form.desc"></el-input>
     </el-form-item>
-  </div>
+    <el-form-item
+      label="缴费金额(元)"
+      prop="money"
+      :rules="[{required: true, message: '请输入缴费金额', trigger: 'blur'}]"
+    >
+      <el-input-number
+        class="number-input"
+        v-model="form.money"
+        :controls="false"
+        :precision="2"
+        :min="1"
+        placeholder="请输入缴费金额"
+      />
+    </el-form-item>
+    <el-form-item
+      label="缴费有效期"
+      prop="value2"
+      v-if="!isUserType"
+      :rules="[{required: true, message: '请选择缴费有效期', trigger: 'blur'}]"
+    >
+      <el-date-picker
+        v-model="form.value2"
+        type="daterange"
+        style="width: 100%;"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期">
+      </el-date-picker>
+    </el-form-item>
+  </el-form>
 </template>
 <script>
 export default {
-  props: ['form'],
+  props: ['form', 'isCommon', 'isUserType'],
   data() {
     return {
-      options: []
+      options: [
+        {
+          value: 1,
+          label: 1
+        }
+      ],
     }
   },
   mounted() {
@@ -85,5 +126,11 @@ export default {
 }
 </script>
 <style lang="less" scoped>
+.number-input{
+  /deep/ .el-input__inner {
+    text-align: left;
+  }
 
+  width: 100%;
+}
 </style>

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

@@ -1,67 +1,187 @@
 <template>
   <div>
-    <el-form
-      label-width="160px"
-      ref="form"
-      :model="form"
-      label-suffix=": "
-    >
+    <el-alert
+      title="基础信息设置"
+      :closable="false"
+      class="alert"
+      type="info">
+    </el-alert>
+    <userBaseinfo
+      :form.sync="form"
+      :isCommon="isCommon"
+      :isUserType="isUserType"
+      ref="base"
+    />
+    <template v-if="!isCommon">
       <el-alert
-        title="基础信息设置"
+        title="加课信息设置"
         :closable="false"
         class="alert"
         type="info">
       </el-alert>
-      <userBaseinfo
-        :form.sync="form"
+      <extraClass
+        :form="eclass"
+        ref="eclass"
+        @create="addExtraClass"
+        @remove="removeExtraClass"
       />
+    </template>
+    <template v-if="isUserType">
       <el-alert
         title="缴费周期设置"
         :closable="false"
         class="alert"
         type="info">
       </el-alert>
+      <template v-if="isCommon">
+        <el-collapse :value="collapse" @change="collapseChange" >
+          <el-collapse-item
+            v-for="(item, index) in cycles"
+            :key="index"
+            :name="index"
+          >
+            <template slot="title">
+              <div class="collapse-title">
+                <span>缴费周期 {{index + 1}}</span>
+                <i v-if="index !== 0" class="el-icon-circle-close" @click.stop="removeCycle(index)"></i>
+              </div>
+            </template>
+            <paymentCycle
+              ref="cycles"
+              :form="item"
+            />
+          </el-collapse-item>
+        </el-collapse>
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          plain
+          type="info"
+          size="small"
+          style="width: 100%;margin: 20px 0;"
+          @click="addCycle"
+        >新增缴费周期</el-button>
+      </template>
       <paymentCycle
-        :form.sync="form"
+        ref="cycle"
+        :form.sync="cycle"
+        v-else
       />
-    </el-form>
+    </template>
     <div slot="footer" class="dialog-footer">
       <el-button @click="$listeners.close">取 消</el-button>
       <el-button
         type="primary"
         @click="submit"
-        >确 定</el-button>
+        >下一步</el-button>
     </div>
+    <el-dialog
+      :title="nextTitle"
+      :visible.sync="nextVisible"
+      width="600px"
+      append-to-body
+    >
+      <classrooms
+        @close="closeNext"
+      />
+    </el-dialog>
   </div>
 </template>
 <script>
 import userBaseinfo from './user-baseinfo'
 import paymentCycle from './payment-cycle'
+import extraClass from './extra-class'
+import classrooms from './classrooms'
+
 export default {
+  props: ['type'],
   components: {
     userBaseinfo,
     paymentCycle,
+    extraClass,
+    classrooms,
   },
   data() {
     return {
       options: [],
       form: {
-
-      }
+        leixing: '0',
+      },
+      cycles: [{}],
+      cycle: {},
+      eclass: [{}],
+      collapse: [],
+      nextVisible: false,
     }
   },
+  computed: {
+    isCommon() {
+      console.log(this.form.leixing)
+      return this.form.leixing === '0'
+    },
+    isUserType() {
+      return this.type === 'user'
+    },
+    nextTitle() {
+      return this.isCommon ? '乐团课程-班级选择' : '临时加课-班级选择'
+    },
+  },
+  watch: {
+    eclass() {
+      console.log([...this.eclass])
+    },
+    'form.leixing'() {
+      this.cycles = [{}]
+      this.collapse = [0]
+      this.cycle = {}
+    },
+  },
   mounted() {
-
+    console.log(this.refs)
   },
   methods: {
+    addExtraClass() {
+      this.eclass.push({})
+    },
+    removeExtraClass(index) {
+      this.eclass[index] = null
+      this.eclass = this.eclass.filter(item => !!item)
+    },
+    addCycle() {
+      this.cycles.push({})
+      this.collapse.push(this.collapse.length)
+    },
+    removeCycle(index) {
+      this.cycles[index] = null
+      this.cycles = this.cycles.filter(item => !!item)
+      this.collapse.pop()
+    },
+    collapseChange(val) {
+      this.collapse = val
+    },
+    closeNext() {
+      this.nextVisible = false
+    },
+    getForms() {
+      const { $refs: refs } = this
+      return [...refs.cycles, refs.base, refs.eclass, refs.cycle]
+        .filter(item => !!item)
+        .map(item => item.$refs.form)
+    },
     async submit() {
-      console.log({...this.form}, this.$refs)
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          // this.$listeners.submited()
-          // this.$listeners.close()
-        }
-      })
+      const forms = this.getForms()
+      console.log(forms)
+      const valided = []
+      for (const form of forms) {
+        form.validate(valid => {
+          if (valid) {
+            valided.push(form)
+          }
+        })
+      }
+      if (valided.length === forms.length) {
+        console.log({...this.form}, this.cycle, this.cycles, this.eclass)
+        this.nextVisible = true
+      }
     }
   },
 };
@@ -75,4 +195,17 @@ export default {
   .alert{
     margin-bottom: 10px;
   }
+  .collapse-title{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 100%;
+    .el-icon-circle-close{
+      font-size: 16px;
+      margin-right: 10px;
+    }
+  }
+  /deep/ .el-collapse-item__wrap{
+    padding-top: 20px;
+  }
 </style>