mo 2 năm trước cách đây
mục cha
commit
99977b1963

+ 3 - 3
src/constant/index.js

@@ -334,9 +334,9 @@ export const vipResetType = {
 };
 //   1: 'AMR收费',
 export const courseViewType = {
-  0: "课程收费",
-
-  2: "会员收费"
+  'COURSE_FEE': "课程收费",
+'MEMBER_FEE': "会员收费",
+  'FREE':"免费"
 };
 
 export const couponType = {

+ 7 - 17
src/views/baseRulesClassSetting/index.vue

@@ -7,12 +7,7 @@
     <div class="m-core">
       <!-- navMenu -->
       <tab-router v-model.trim="activeIndex" @tab-click="handleClick">
-        <el-tab-pane
-          label="乐团收费标准"
-          lazy
-          name="3"
-          v-if="permissionList.chargesList"
-        >
+        <el-tab-pane label="乐团收费标准" lazy name="3" v-if="permissionList.chargesList">
           <chargesList v-if="activeIndex == 3" />
         </el-tab-pane>
         <el-tab-pane
@@ -48,12 +43,7 @@
           <musicCourseFee v-if="activeIndex == 2" />
         </el-tab-pane>
 
-        <el-tab-pane
-          label="VIP课设置"
-          lazy
-          name="4"
-          v-if="permissionList.vipCourseType"
-        >
+        <el-tab-pane label="VIP课设置" lazy name="4" v-if="permissionList.vipCourseType">
           <vipCourseType v-if="activeIndex == '4'" />
         </el-tab-pane>
         <el-tab-pane
@@ -85,7 +75,7 @@ import vipCourseType from "@/views/categroyManager/generalSettings/vipCourseType
 import discountManage from "@/views/categroyManager/specialSetup/discountManage";
 import vipChargeSeting from "@/views/categroyManager/vipChargeSeting";
 import auditionSetting from "./audition";
-import practiceRules from './practiceRules'
+import practiceRules from "./practiceRules";
 import { permission } from "@/utils/directivePage";
 export default {
   components: {
@@ -97,7 +87,7 @@ export default {
     typesManager,
     discountManage,
     vipChargeSeting,
-    practiceRules
+    practiceRules,
   },
   name: "baseRulersManager",
   data() {
@@ -109,9 +99,9 @@ export default {
         chargesList: permission("/globalConfig/chargesList"),
         vipCourseType: permission("/vipCourseType"),
         typesManager: permission("/globalConfig/typesManager"),
-        discountManage:permission("/specialSetup/discountManage"),
-        vipChargeSeting:permission("/vipChargeSeting"),
-         practiceRules:permission("/practiceRules"),
+        discountManage: permission("/specialSetup/discountManage"),
+        vipChargeSeting: permission("/vipChargeSeting"),
+        practiceRules: permission("/practiceRules"),
       },
     };
   },

+ 26 - 24
src/views/categroyManager/specialSetup/chargesList.vue

@@ -33,7 +33,7 @@
             filterable
           >
             <el-option
-              v-for="(item, index) in typesList"
+              v-for="(item, index) in courseViewTypeList"
               :label="item.label"
               :value="item.value"
               :key="index"
@@ -61,12 +61,12 @@
         >
           <el-table-column prop="organId" label="所属分部">
             <template slot-scope="scope">
-              {{ branchById[scope.row.organId] }}
+              {{ scope.row.organName }}
             </template>
           </el-table-column>
           <el-table-column prop="chargeTypeId" label="乐团模式">
             <template slot-scope="scope">
-              {{ typesById[scope.row.chargeTypeId] }}
+              {{ scope.row.courseViewType | courseViewType }}
             </template>
           </el-table-column>
           <el-table-column prop="name" label="收费方式名称"> </el-table-column>
@@ -134,7 +134,7 @@
     >
       <chargesForm
         v-if="chargeStatus"
-        :typesList="typesList"
+        :typesList="courseViewTypeList"
         :branchList.sync="branchList"
         :rowDetail="rowDetail"
         @close="closeModal"
@@ -158,6 +158,7 @@ import { getType } from "@/api/buildTeam";
 import chargesForm from "./modals/chargesForm";
 import numeral from "numeral";
 import emptyPage from "@/components/emptyPage";
+import { courseViewTypeList } from "@/utils/searchArray";
 export default {
   components: {
     pagination,
@@ -204,32 +205,33 @@ export default {
       context:
         "此处用于设置乐团训练的标准课程组合包,可根据不同分部不同的乐团模式创建不同的课程组合包及组合包的标准价格,创建完成后,在设置乐团报名、续费时可直接选择收费标准快速创建乐团课程缴费。",
       contextFlag: false,
+      courseViewTypeList,
     };
   },
   async mounted() {
     this.getList();
 
     // 收费类型
-    getType({
-      rows: 9999,
-      page: 1,
-    }).then((res) => {
-      if (res.code == 200) {
-        const typesById = {};
-        res.data.forEach((item) => {
-          typesById[item.id] = item.name;
-          this.typesList.push({
-            label: item.name,
-            value: item.id,
-          });
-        });
-        this.typesById = typesById;
-        if (res.data.length <= 0) {
-          this.$bus.$emit("showguide", ["teamPayType"]);
-          return;
-        }
-      }
-    });
+    // getType({
+    //   rows: 9999,
+    //   page: 1,
+    // }).then((res) => {
+    //   if (res.code == 200) {
+    //     const typesById = {};
+    //     res.data.forEach((item) => {
+    //       typesById[item.id] = item.name;
+    //       this.typesList.push({
+    //         label: item.name,
+    //         value: item.id,
+    //       });
+    //     });
+    //     this.typesById = typesById;
+    //     if (res.data.length <= 0) {
+    //       this.$bus.$emit("showguide", ["teamPayType"]);
+    //       return;
+    //     }
+    //   }
+    // });
 
     // 分部列表
     branchQueryPage({

+ 235 - 201
src/views/categroyManager/specialSetup/modals/chargesForm.vue

@@ -1,46 +1,60 @@
 <template>
   <div>
-    <el-form :model="form"
-             label-suffix=": "
-
-             ref="form">
-      <el-form-item label="所属分部"
-                    prop="organId"
-                    :rules="[{required: true, message: '请选择所属分部', trigger: 'change'}]"
-                    :label-width="formLabelWidth">
-        <el-select v-model.trim="form.organId"
-                   clearable
-                   placeholder="请选择所属分部"
-                   filterable>
-          <el-option v-for="(item, index) in branchList"
-                     :key="index"
-                     :label="item.label"
-                     :value="item.value">
+    <el-form :model="form" label-suffix=": " ref="form">
+      <el-form-item
+        label="所属分部"
+        prop="organId"
+        :rules="[{ required: true, message: '请选择所属分部', trigger: 'change' }]"
+        :label-width="formLabelWidth"
+      >
+        <el-select
+          v-model.trim="form.organId"
+          clearable
+          placeholder="请选择所属分部"
+          filterable
+        >
+          <el-option
+            v-for="(item, index) in branchList"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          >
           </el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="乐团模式"
-                    prop="chargeTypeId"
-                    :rules="[{required: true, message: '请选择乐团模式', trigger: 'change'}]"
-                    :label-width="formLabelWidth">
-        <el-select v-model.trim="form.chargeTypeId"
-                   clearable
-                   placeholder="请选择乐团模式"
-                   filterable>
-          <el-option v-for="(item, index) in typesList"
-                     :key="index"
-                     :label="item.label"
-                     :value="item.value">
+      <el-form-item
+        label="乐团模式"
+        prop="courseViewType"
+        :rules="[{ required: true, message: '请选择乐团模式', trigger: 'change' }]"
+        :label-width="formLabelWidth"
+      >
+        <el-select
+          v-model.trim="form.courseViewType"
+          clearable
+          placeholder="请选择乐团模式"
+          filterable
+        >
+          <el-option
+            v-for="(item, index) in typesList"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          >
           </el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="收费方式名称"
-                    prop="name"
-                    :rules="[{required: true, message: '请输入收费方式名称', trigger: 'blur'}]"
-                    :label-width="formLabelWidth">
-        <el-input v-model.trim="form.name" style="width: 98% !important;"
-                  placeholder="请输入收费方式名称"
-                  clearable>
+      <el-form-item
+        label="收费方式名称"
+        prop="name"
+        :rules="[{ required: true, message: '请输入收费方式名称', trigger: 'blur' }]"
+        :label-width="formLabelWidth"
+      >
+        <el-input
+          v-model.trim="form.name"
+          style="width: 98% !important"
+          placeholder="请输入收费方式名称"
+          clearable
+        >
         </el-input>
       </el-form-item>
       <div class="class-items">
@@ -53,21 +67,24 @@
             <span class="name">原价(元)</span>
             <span class="ctrl"></span>
           </div>
-          <div class="item"
-               v-for="(item, index) in form.details"
-               :key="index">
-            <el-form-item :prop="`details.${index}.courseType`"
-                          :rules="[{required: true, message: '请选择课程类型', trigger: 'change'}]">
-              <el-select v-model.trim="item.courseType"
-
-                         clearable
-                         @change="() => courseItemChange(item, index)"
-                         filterable>
-                <el-option v-for="(item, i) in courseTypes"
-                           :key="i"
-                           :label="courseType[item.courseType]"
-                           :disabled="isOptionDisabled(item.courseType)"
-                           :value="item.courseType">
+          <div class="item" v-for="(item, index) in form.details" :key="index">
+            <el-form-item
+              :prop="`details.${index}.courseType`"
+              :rules="[{ required: true, message: '请选择课程类型', trigger: 'change' }]"
+            >
+              <el-select
+                v-model.trim="item.courseType"
+                clearable
+                @change="() => courseItemChange(item, index)"
+                filterable
+              >
+                <el-option
+                  v-for="(item, i) in courseTypes"
+                  :key="i"
+                  :label="courseType[item.courseType]"
+                  :disabled="isOptionDisabled(item.courseType)"
+                  :value="item.courseType"
+                >
                 </el-option>
               </el-select>
             </el-form-item>
@@ -86,263 +103,280 @@
             </el-form-item> -->
             <el-form-item
               :prop="`details.${index}.courseTotalMinuties`"
-              :rules="[
-                { required: true, message: '请输入课程时长', trigger: 'blur' },
-              ]">
+              :rules="[{ required: true, message: '请输入课程时长', trigger: 'blur' }]"
+            >
               <el-input-number
-                               style="width: 90%!important;"
-                               class="number-input"
-                               v-model="item.courseTotalMinuties"
-                               :controls="false"
-                               :precision="0"
-                               :min="0"
-                               @change="() => courseItemChange(item, index)"
-                               placeholder="课程总时长" />
+                style="width: 90% !important"
+                class="number-input"
+                v-model="item.courseTotalMinuties"
+                :controls="false"
+                :precision="0"
+                :min="0"
+                @change="() => courseItemChange(item, index)"
+                placeholder="课程总时长"
+              />
             </el-form-item>
-            <el-form-item :prop="`details.${index}.courseCurrentPrice`"
-                          :rules="[{required: true, message: '请输入课程现价', trigger: 'blur'}]">
+            <el-form-item
+              :prop="`details.${index}.courseCurrentPrice`"
+              :rules="[{ required: true, message: '请输入课程现价', trigger: 'blur' }]"
+            >
               <el-input-number
-                               style="width: 90%!important;"
-                               class="number-input"
-                               v-model="item.courseCurrentPrice"
-                               :controls="false"
-                               :min="0"
-                               placeholder="课程现价" />
+                style="width: 90% !important"
+                class="number-input"
+                v-model="item.courseCurrentPrice"
+                :controls="false"
+                :min="0"
+                placeholder="课程现价"
+              />
             </el-form-item>
-            <el-form-item :prop="`details.${index}.courseOriginalPrice`"
-                          :rules="[{required: true, message: '请输入课程原价', trigger: 'blur'}]">
+            <el-form-item
+              :prop="`details.${index}.courseOriginalPrice`"
+              :rules="[{ required: true, message: '请输入课程原价', trigger: 'blur' }]"
+            >
               <el-input-number
-                               style="width: 90%!important;"
-                               class="number-input"
-                               v-model="item.courseOriginalPrice"
-                               :controls="false"
-                               :min="0"
-                               placeholder="课程原价" />
+                style="width: 90% !important"
+                class="number-input"
+                v-model="item.courseOriginalPrice"
+                :controls="false"
+                :min="0"
+                placeholder="课程原价"
+              />
             </el-form-item>
             <span class="ctrl">
-              <i @click="removeItem(index)"
-                 v-if="form.details.length > 1"
-                 class="el-icon-circle-close" />
+              <i
+                @click="removeItem(index)"
+                v-if="form.details.length > 1"
+                class="el-icon-circle-close"
+              />
             </span>
           </div>
         </div>
-        <el-button icon="el-icon-circle-plus-outline"
-                   plain
-                   class="create-type-button"
-                   type="info"
-
-                   @click="addItem">新增课程类型</el-button>
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          plain
+          class="create-type-button"
+          type="info"
+          @click="addItem"
+          >新增课程类型</el-button
+        >
       </div>
       <el-row>
         <el-col :span="6">
-          <el-form-item label="原价"
-                        prop="totalOriginalPrice"
-                        label-width="50px">
-            {{ totalOriginalPrice | moneyFormat}}元
+          <el-form-item label="原价" prop="totalOriginalPrice" label-width="50px">
+            {{ totalOriginalPrice | moneyFormat }}元
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item label="现价"
-                        prop="totalCurrentPrice"
-                        label-width="50px">
-            {{ totalCurrentPrice | moneyFormat}}元
+          <el-form-item label="现价" prop="totalCurrentPrice" label-width="50px">
+            {{ totalCurrentPrice | moneyFormat }}元
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
-    <span slot="footer"
-          class="dialog-footer">
-      <el-button @click="$listeners.close" >取 消</el-button>
-      <el-button @click="submit"  type="primary">确 定</el-button>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="$listeners.close">取 消</el-button>
+      <el-button @click="submit" type="primary">确 定</el-button>
     </span>
   </div>
 </template>
 <script>
 const initItem = {
-  courseType: '',
-  isStudentOptional: '',
-  courseTotalMinuties: '',
-  courseOriginalPrice: '',
-  courseCurrentPrice: '',
-}
+  courseType: "",
+  isStudentOptional: "",
+  courseTotalMinuties: "",
+  courseOriginalPrice: "",
+  courseCurrentPrice: "",
+};
 import {
   musicGroupOrganizationCourseSettingsAdd,
   musicGroupOrganizationCourseSettingsUpdate,
-  getOrganizationCourseUnitPriceSettings
-} from '@/api/specialSetting'
-import { classTimeList, array2object } from '@/utils/searchArray'
-import { queryByMusicGroupOrganizationCourseSettingsId } from '../../../resetTeaming/api'
-import { courseType, boolOptions } from '@/constant'
-import { objectToOptions } from '@/utils'
-import numeral from 'numeral'
+  getOrganizationCourseUnitPriceSettings,
+} from "@/api/specialSetting";
+import { classTimeList, array2object } from "@/utils/searchArray";
+import { queryByMusicGroupOrganizationCourseSettingsId } from "../../../resetTeaming/api";
+import { courseType, boolOptions } from "@/constant";
+import { objectToOptions } from "@/utils";
+import numeral from "numeral";
 
 const plusNum = (items = [], key) => {
-  let money = 0
+  let money = 0;
   for (const item of items) {
     if (item) {
-      money += item[key] || 0
+      money += item[key] || 0;
     }
   }
-  return money
-}
+  return money;
+};
 
 const initForm = {
-  organId: '',
-  classTimeList: '',
-  chargeTypeId: '',
-  name: '',
+  organId: "",
+  classTimeList: "",
+  chargeTypeId: "",
+  name: "",
   details: [{}],
-}
+};
 
 export default {
-  name: 'modal-chargesForm',
-  props: ['branchList', 'typesList', 'rowDetail'],
-  data () {
+  name: "modal-chargesForm",
+  props: ["branchList", "typesList", "rowDetail"],
+  data() {
     return {
       form: { ...initForm },
-      formLabelWidth: '120px',
+      formLabelWidth: "120px",
       courseType,
       courseTypeOptions: objectToOptions(courseType),
       boolOptions: objectToOptions(boolOptions),
       courseTypes: [],
       courseTypesByType: {},
       loading: false,
-    }
+    };
   },
   computed: {
-    totalOriginalPrice () {
-      return plusNum(this.form.details, 'courseOriginalPrice')
+    totalOriginalPrice() {
+      return plusNum(this.form.details, "courseOriginalPrice");
     },
-    totalCurrentPrice () {
-      return plusNum(this.form.details, 'courseCurrentPrice')
+    totalCurrentPrice() {
+      return plusNum(this.form.details, "courseCurrentPrice");
     },
     classTimeList() {
-      return array2object(classTimeList)
-    }
+      return array2object(classTimeList);
+    },
   },
   watch: {
     rowDetail: {
       deep: true,
-      handler () {
-        this.updateForm()
+      handler() {
+        this.updateForm();
       },
     },
-    async 'form.organId' () {
-      this.FetchOrganizationCourseUnitPriceSettings()
+    async "form.organId"() {
+      this.FetchOrganizationCourseUnitPriceSettings();
     },
-    async 'form.chargeTypeId' () {
-      this.FetchOrganizationCourseUnitPriceSettings()
+    async "form.chargeTypeId"() {
+      this.FetchOrganizationCourseUnitPriceSettings();
     },
   },
-  mounted () {
-    this.updateForm()
+  mounted() {
+    this.updateForm();
   },
   methods: {
-    async FetchOrganizationCourseUnitPriceSettings () {
+    async FetchOrganizationCourseUnitPriceSettings() {
       if (this.loading) {
-        return
+        return;
       }
-      this.loading = true
+      this.loading = true;
       try {
-        if (this.form.organId && this.form.chargeTypeId) {
-          this.$set(this.form, 'details', [{}])
+        if (this.form.organId && this.form.courseViewType) {
+          this.$set(this.form, "details", [{}]);
           const res = await getOrganizationCourseUnitPriceSettings({
-            chargeTypeId: this.form.chargeTypeId,
+            courseViewType: this.form.courseViewType,
             organId: this.form.organId,
-            rows: 9999
-          })
-          const d = {}
-          this.courseTypes = res.data.rows
+            rows: 9999,
+          });
+          const d = {};
+          this.courseTypes = res.data.rows;
           for (const item of this.courseTypes) {
-            d[item.courseType] = item
+            d[item.courseType] = item;
           }
-          this.courseTypesByType = d
-
+          this.courseTypesByType = d;
         }
-      } catch (error) { }
-      this.loading = false
+      } catch (error) {}
+      this.loading = false;
     },
-    courseItemChange (item, index) {
+    courseItemChange(item, index) {
       if (item.courseType) {
-        const active = this.courseTypesByType[item.courseType] || {}
-        const _list = this.form.details
-        const price = Math.round(numeral((active.unitPrice || 1)).multiply((item.courseTotalMinuties || 0)).value())
+        const active = this.courseTypesByType[item.courseType] || {};
+        const _list = this.form.details;
+        const price = Math.round(
+          numeral(active.unitPrice || 1)
+            .multiply(item.courseTotalMinuties || 0)
+            .value()
+        );
         _list[index] = {
           ...item,
           courseCurrentPrice: price,
-          courseOriginalPrice: price
-        }
-        this.$refs.form.validateField(`details.${index}.courseTotalMinuties`)
-        this.$set(this.form, `details`, [..._list])
+          courseOriginalPrice: price,
+        };
+        this.$refs.form.validateField(`details.${index}.courseTotalMinuties`);
+        this.$set(this.form, `details`, [..._list]);
       }
     },
-    async updateForm () {
+    async updateForm() {
       if (this.rowDetail) {
-        const { organId, classTimeList, chargeTypeId, name } = this.rowDetail
+        const { organId, classTimeList, chargeTypeId, name } = this.rowDetail;
         this.form = {
           organId,
           classTimeList,
           chargeTypeId,
           name,
-        }
+        };
         try {
           const res = await queryByMusicGroupOrganizationCourseSettingsId({
-            id: this.rowDetail.id
-          })
-          this.$set(this.form, 'details', res.data.map(item => ({
-            ...item,
-            isStudentOptional: String(item.isStudentOptional)
-          })))
-        } catch (error) { }
+            id: this.rowDetail.id,
+          });
+          this.$set(
+            this.form,
+            "details",
+            res.data.map((item) => ({
+              ...item,
+              isStudentOptional: String(item.isStudentOptional),
+            }))
+          );
+        } catch (error) {}
       } else {
-        this.form = { ...initForm }
+        this.form = { ...initForm };
       }
     },
-    isOptionDisabled (key) {
-      const selected = this.form.details.map(item => item.courseType)
-      return selected.includes(key)
+    isOptionDisabled(key) {
+      const selected = this.form.details.map((item) => item.courseType);
+      return selected.includes(key);
     },
-    addItem () {
-      const _items = [...this.form.details, {}]
-      this.form.details = _items
+    addItem() {
+      const _items = [...this.form.details, {}];
+      this.form.details = _items;
     },
-    removeItem (index) {
-      const _items = [...this.form.details]
-      _items[index] = null
-      this.form.details = _items.filter(item => !!item)
+    removeItem(index) {
+      const _items = [...this.form.details];
+      _items[index] = null;
+      this.form.details = _items.filter((item) => !!item);
     },
-    submit () {
+    submit() {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
           try {
             if (this.rowDetail) {
               const res = await musicGroupOrganizationCourseSettingsUpdate({
                 id: this.rowDetail.id,
-                ...this.form
-              })
-              this.$message.success('更新成功')
+                ...this.form,
+              });
+              this.$message.success("更新成功");
             } else {
-              const res = await musicGroupOrganizationCourseSettingsAdd(this.form)
-              this.$message.success('提交成功')
+              const res = await musicGroupOrganizationCourseSettingsAdd(this.form);
+              this.$message.success("提交成功");
             }
-            this.$listeners.close()
-            this.$listeners.submited()
-          } catch (error) { }
+            this.$listeners.close();
+            this.$listeners.submited();
+          } catch (error) {}
         }
-      })
+      });
     },
     validatorCourseTotalMinuties(index, item) {
       return (rule, value, callback) => {
-        const { courseType } = item
-        if (courseType && value && this.classTimeList[courseType] &&  value < this.classTimeList[courseType]) {
-          callback(new Error(`单节课不得少于${this.classTimeList[courseType]}分钟`))
-          return
+        const { courseType } = item;
+        if (
+          courseType &&
+          value &&
+          this.classTimeList[courseType] &&
+          value < this.classTimeList[courseType]
+        ) {
+          callback(new Error(`单节课不得少于${this.classTimeList[courseType]}分钟`));
+          return;
         }
-        callback()
-      }
-    }
+        callback();
+      };
+    },
   },
-}
+};
 </script>
 <style lang="less" scoped>
 .dialog-footer {