wolyshaw 4 年之前
父節點
當前提交
052b17848f

+ 1 - 1
src/api/specialSetting.js

@@ -207,7 +207,7 @@ export function updateChargeTypeSubjectMapper (data) {
   return request2({
     url: api + '/chargeTypeSubjectMapper/update',
     method: 'post',
-    params: data,
+    data,
   })
 }
 

+ 36 - 13
src/views/categroyManager/specialSetup/discountManage.vue

@@ -3,7 +3,7 @@
     <!-- <h2>折扣设置</h2> -->
     <div class="m-core">
       <div class='newBand' v-permission="'chargeType/upSet'"
-           @click="openTypes('create')">添加</div>
+           @click="createVisible = true">添加</div>
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table :data='tableList'
@@ -11,10 +11,12 @@
           <el-table-column align='center'
                            prop="chargeTypeId"
                            label="收费类型">
+                           <template slot-scope="scope">{{ typesListById[scope.row.chargeTypeId] }}</template>
           </el-table-column>
           <el-table-column align='center'
                            prop="subjectId"
                            label="声部组合">
+                           <template slot-scope="scope">{{ subjectListById[scope.row.subjectId] }}</template>
           </el-table-column>
           <el-table-column align='center'
                   prop="goodsDiscountRate"
@@ -78,11 +80,11 @@
           </el-select>
         </el-form-item>
         <el-form-item label="折扣(%)"
-                      prop="discount"
+                      prop="goodsDiscountRate"
                       :label-width="formLabelWidth">
-          <el-input-number v-model.trim="form.discount"
+          <el-input-number v-model.trim="form.goodsDiscountRate"
             autocomplete="off"
-            placeholder="请输入折扣 1-100"
+            placeholder="请输入折扣 1%-100%"
             controls-position="right"
             class="number-input"
             :min="1"
@@ -98,35 +100,50 @@
                    @click="onTypesSubmit('ruleForm')">确 定</el-button>
       </span>
     </el-dialog>
+    <el-dialog
+      :visible.sync="createVisible"
+      title="添加折扣"
+      width="400px"
+    >
+      <createDiscount
+        @close="createVisible = false"
+        :typesList="typesList"
+        :subjectList="subjectList"
+      />
+    </el-dialog>
   </div>
 </template>
 <script>
 import pagination from '@/components/Pagination/index'
 import { chargeTypeList, subjectListTree, insertChargeTypeSubjectMapper, updateChargeTypeSubjectMapper, delChargeTypeSubjectMapper, chargeTypeSubjectMapper } from '@/api/specialSetting'
+import createDiscount from './modals/create-discount'
 export default {
   name: 'typesManager',
-  components: { pagination },
+  components: { pagination, createDiscount },
   data () {
     return {
       tableList: [],
       typesList: [],
+      typesListById: {},
       subjectList: [], // 声部列表
+      subjectListById: {}, // 声部列表
       formActionTitle: 'create',
       formTitle: {
-        create: '添加收费类型',
-        update: '修改收费类型'
+        create: '添加折扣',
+        update: '修改折扣'
       },
+      createVisible: false,
       typeStatus: false, // 添加教学点
       formLabelWidth: '100px',
       form: {
         name: null, //
         subjectId: null,
-        discount: null,
+        goodsDiscountRate: null,
       },
       rules: {
         chargeTypeId: [{ required: true, message: '请选择收费类型', trigger: 'blur' }],
         subjectId: [{ required: true, message: '请选择声部组合', trigger: 'change' }],
-        discount: [{ required: true, message: '请输入折扣', trigger: 'blur' }],
+        goodsDiscountRate: [{ required: true, message: '请输入折扣', trigger: 'blur' }],
       },
       pageInfo: {
         // 分页规则
@@ -154,7 +171,7 @@ export default {
               this.messageTips('添加', res)
             })
           } else if (this.formActionTitle == 'update') {
-            updateChargeTypeSubjectMapper(this.form).then(res => {
+            updateChargeTypeSubjectMapper([this.form]).then(res => {
               this.messageTips('修改', res)
             })
           }
@@ -183,12 +200,15 @@ export default {
         page: 1
       }).then(res => {
         if (res.code == 200) {
+          const typesListById = {}
           res.data.rows.forEach(item => {
+            typesListById[item.id] = item.name
             this.typesList.push({
               label: item.name,
               value: item.id
             })
           })
+          this.typesListById = typesListById
         }
       })
     },
@@ -222,9 +242,9 @@ export default {
       if (type == 'update') {
         this.form = {
           id: row.id,
-          name: row.name,
+          chargeTypeId: row.chargeTypeId,
           subjectId: row.subjectId,
-          discount: row.discount,
+          goodsDiscountRate: row.goodsDiscountRate,
         }
       }
     },
@@ -232,7 +252,7 @@ export default {
       this.form = {
         name: null, // 作业模块名称
         subjectId: null,
-        discount: null,
+        goodsDiscountRate: null,
       }
       this.$refs[formName].resetFields()
     },
@@ -241,6 +261,7 @@ export default {
         delFlag: 0,
         rows: 9999
       }).then(res => {
+        const subjectListById = {}
         let result = res.data
         if (res.code == 200) {
           let tempArray = []
@@ -248,6 +269,7 @@ export default {
             let subject = []
             if (item.subjects) {
               item.subjects.forEach(s => {
+                subjectListById[s.id] = s.name
                 subject.push({
                   value: s.id,
                   label: s.name
@@ -260,6 +282,7 @@ export default {
               options: subject
             }
           })
+          this.subjectListById = subjectListById
           this.subjectList = tempArray
         }
       })

+ 108 - 0
src/views/categroyManager/specialSetup/modals/create-discount.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <el-form :model="form" ref="form">
+      <el-form-item
+        label="声部选择"
+        prop="subjectId"
+        :label-width="formLabelWidth"
+        :rules="[{ required: true, message: '请选择声部', trigger: 'change' }]"
+      >
+        <el-select
+          v-model.trim="form.subjectId"
+          filterable
+          style="width: 100%!important;"
+          placeholder="请选择声部组合"
+          clearable
+        >
+          <el-option-group
+            v-for="group in subjectList"
+            :key="group.label"
+            :label="group.label"
+          >
+            <el-option
+              v-for="item in group.options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-option-group>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        v-for="item in typesList"
+        :key="item.value"
+        :label="item.label + '模式折扣(%)'"
+        :prop="`types.${item.value}`"
+        :label-width="formLabelWidth"
+        :rules="[{ required: true, message: '请输入折扣', trigger: 'blur' }]"
+      >
+        <el-input-number v-model.trim="form.types[item.value]"
+          autocomplete="off"
+          placeholder="请输入折扣 1%-100%"
+          controls-position="right"
+          class="number-input"
+          :min="1"
+          :max="100"
+          :precision="0"
+        ></el-input-number>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="$listeners.close">取 消</el-button>
+      <el-button type="primary" @click="submit">确 定</el-button>
+    </span>
+  </div>
+</template>
+<script>
+import { insertChargeTypeSubjectMapper } from '@/api/specialSetting'
+export default {
+  props: ['typesList', 'subjectList'],
+  data() {
+    return {
+      formLabelWidth: '130px',
+      form: {
+        subjectId: '',
+        types: {},
+      }
+    }
+  },
+  methods: {
+    submit() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          const data = []
+          for (const key in this.form.types) {
+            if (this.form.types.hasOwnProperty(key)) {
+              const item = this.form.types[key];
+              data.push({
+                chargeTypeId: key,
+                subjectId: this.form.subjectId,
+                goodsDiscountRate: item
+              })
+            }
+          }
+          try {
+            await insertChargeTypeSubjectMapper(data)
+            this.$message.success('创建成功')
+            this.$listeners.close()
+          } catch (error) {}
+        }
+      })
+    }
+  },
+};
+</script>
+<style lang="less" scoped>
+  .dialog-footer{
+    display: block;
+    text-align: right;
+  }
+  .number-input{
+    /deep/ .el-input__inner {
+      text-align: left;
+    }
+
+    width: 100%;
+  }
+</style>

+ 0 - 0
src/views/teamDetail/components/modals/classroom-setting.vue


+ 88 - 50
src/views/teamDetail/components/modals/select-student.vue

@@ -1,57 +1,76 @@
 <template>
-  <el-form :model="form" label-suffix=": " inline>
-    <el-row>
-      <el-col :span="10">
-        <el-form-item
-          label="班级名称"
-          :rules="[{required: true, message: '请输入班级名称', trigger: 'blur'}]"
-        >
-          <el-input style="width: 100%;" placeholder="请输入班级名称" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="10" :offset="4">
-        <el-form-item label="声部" prop="sound">
-          <el-select style="width: 100%;" clearable filterable placeholder="请选择声部">
-            <el-option
-              v-for="(item, index) in soundList"
-              :key="index"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-transfer
-      filterable
-      :titles="['所有学员', '已选学员']"
-      filter-placeholder="请输入学生姓名"
-      :filter-method="filterStudent"
-      v-model="value"
-      :render-content="renderFunc"
-      :data="data"
-    >
-      <template #left-footer>
-        <div class="footer line">
-          <span>姓名</span>
-          <span>性别</span>
-          <span>专业</span>
-        </div>
-      </template>
-      <template #right-footer>
-        <div class="footer line">
-          <span>姓名</span>
-          <span>性别</span>
-          <span>专业</span>
-        </div>
-      </template>
-    </el-transfer>
-  </el-form>
+  <div>
+    <el-form :model="form" ref="form" label-suffix=": " inline>
+      <el-row>
+        <el-col :span="10">
+          <el-form-item
+            label="班级名称"
+            prop="name"
+            :rules="[
+              { required: true, message: '请输入班级名称', trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model="form.name"
+              style="width: 100%"
+              placeholder="请输入班级名称"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="10" :offset="4">
+          <el-form-item label="声部">
+            <el-select
+              v-model="sound"
+              style="width: 100%"
+              clearable
+              filterable
+              placeholder="请选择声部"
+            >
+              <el-option
+                v-for="(item, index) in soundList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-transfer
+        filterable
+        :titles="['所有学员', '已选学员']"
+        filter-placeholder="请输入学生姓名"
+        :filter-method="filterStudent"
+        v-model="seleched"
+        :render-content="renderFunc"
+        :data="data"
+      >
+        <template #left-footer>
+          <div class="footer line">
+            <span>姓名</span>
+            <span>性别</span>
+            <span>专业</span>
+          </div>
+        </template>
+        <template #right-footer>
+          <div class="footer line">
+            <span>姓名</span>
+            <span>性别</span>
+            <span>专业</span>
+          </div>
+        </template>
+      </el-transfer>
+    </el-form>
+    <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>
 import { genderType } from "@/constant";
 export default {
-  props: ["studentList", "soundList"],
+  props: ["studentList", "soundList", "activeType"],
   computed: {
     data() {
       return this.studentList.map((item) => ({
@@ -65,10 +84,11 @@ export default {
   },
   data() {
     return {
+      sound: [],
       form: {
-        selected: [],
         name: '',
       },
+      seleched: [],
     };
   },
   methods: {
@@ -88,6 +108,19 @@ export default {
         </div>
       );
     },
+    submit() {
+      if (this.activeType == 'HIGH_ONLINE' && (this.seleched.length < 3 || this.seleched.length > 5)) {
+        return this.$message.error('线上技能班必须为3-5人')
+      }
+      if (this.seleched.length < 1) {
+        return this.$message.error('请至少选择一名学生')
+      }
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.$listeners.close()
+        }
+      })
+    }
   },
 };
 </script>
@@ -120,4 +153,9 @@ export default {
   display: flex;
   justify-content: space-around;
 }
+/deep/ .dialog-footer{
+  margin-top: 20px;
+  display: block;
+  text-align: right;
+}
 </style>

+ 1 - 0
src/views/teamDetail/components/resetClass.vue

@@ -159,6 +159,7 @@
       <selectStudent
         :studentList="studentList"
         :soundList="soundList"
+        :activeType="activeType"
         @close="studentVisible = false"
       />
     </el-dialog>