瀏覽代碼

提交一下

1
mo 3 年之前
父節點
當前提交
8b8e484766

+ 72 - 0
src/views/categroyManager/productSystem/api.js

@@ -12,3 +12,75 @@ export function getAllmemberRank(data) {
     params: data
   })
 }
+
+// 新增会员类型
+export function addMemberRank(data) {
+  return request2({
+    url: api + '/memberRankSetting/add',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getmemberRankList(data) {
+  return request2({
+    url: api + '/memberRankSetting/queryPage',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询会员详情
+export function getmemberRankDetail(data) {
+  return request2({
+    url: api + '/memberRankSetting/get',
+    method: 'get',
+    params: data
+  })
+}
+
+// 修改会员
+export function resetMemberRank(data) {
+  return request2({
+    url: api + '/memberRankSetting/update',
+    method: 'post',
+    data: data,
+
+  })
+}
+
+// 新增会员收费
+export function addMemberOrganizationFeeMapper(data) {
+  return request2({
+    url: api + '/memberRankOrganizationFeeMapper/add',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getmemberRankOrganizationFeeMapper(data) {
+  return request2({
+    url: api + '/memberRankOrganizationFeeMapper/queryPage',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询会员详情
+export function getmemberOrganizationFeeMapperkDetail(data) {
+  return request2({
+    url: api + '/memberRankOrganizationFeeMapper/get',
+    method: 'get',
+    params: data
+  })
+}
+
+// 修改会员
+export function resetMemberOrganizationFeeMapper(data) {
+  return request2({
+    url: api + '/memberRankOrganizationFeeMapper/update',
+    method: 'post',
+    data: data,
+    requestType: 'json'
+  })
+}

+ 442 - 14
src/views/categroyManager/productSystem/memberFeeSet.vue

@@ -3,19 +3,37 @@
     <save-form
       :inline="true"
       class="searchForm"
-      save-key="memberSet"
+      save-key="memberFeeSet"
+      ref="searchForm"
       @submit="search"
       @reset="onReSet"
       :model.sync="searchForm"
     >
       <!-- 状态 指导老师 活动方案-->
-      <el-form-item>
+      <el-form-item prop="search">
         <el-input
           v-model.trim="searchForm.search"
           clearable
           placeholder="会员名称"
         ></el-input>
       </el-form-item>
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          filterable
+          style="width: 180px !important"
+          v-model.trim="searchForm.organId"
+          clearable
+          placeholder="请选择分部"
+        >
+          <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>
         <el-button native-type="submit" type="danger">搜索</el-button>
         <el-button native-type="reset" type="primary">重置</el-button>
@@ -24,8 +42,9 @@
     <el-button
       type="primary"
       style="margin-bottom: 20px"
-      v-permission="'/vipNewActive'"
-      >新增会员等级</el-button
+      v-permission="'memberRankOrganizationFeeMapper/add'"
+      @click="addFee"
+      >新增收费标准</el-button
     >
     <el-table
       :data="tableList"
@@ -33,22 +52,103 @@
     >
       <el-table-column
         align="center"
-        prop="type"
+        prop="organName"
+        label="分部"
+      ></el-table-column>
+      <el-table-column
+        align="center"
+        prop="rankName"
         label="会员名称"
       ></el-table-column>
+      <el-table-column align="center" prop="type" label="1天收费现价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.currentDayFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="1天收费原价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.originalDayFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="1个月收费现价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.currentMonthFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="1个月收费原价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.originalMonthFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="6个月收费现价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.currentHalfYearFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="6个月收费原价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.originalHalfYearFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="12个月收费现价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.currentYearFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="type" label="12个月收费原价(元)">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.memberFeeSetting.originalYearFee | moneyFormat }}元
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column
         align="center"
-        prop="type"
-        label="会员标识"
+        width="100px"
+        prop="updateTime"
+        label="修改时间"
       ></el-table-column>
       <el-table-column
         align="center"
         prop="type"
-        label="是否新用户试用"
+        label="修改人"
       ></el-table-column>
+      <el-table-column align="center" label="操作">
+        <template slot-scope="scope">
+          <div>
+            <!-- memberRankSetting/add -->
+            <auth auths="memberRankOrganizationFeeMapper/get">
+              <el-button type="text" @click="resetFee(scope.row)"
+                >详情</el-button
+              >
+            </auth>
+            <auth
+              :auths="'memberRankOrganizationFeeMapper/update'"
+            >
+              <el-button type="text" @click="resetFee(scope.row, 'update')"
+                >修改</el-button
+              >
+            </auth>
+          </div>
+        </template>
+      </el-table-column>
     </el-table>
     <pagination
-      save-key="memberSet"
+      save-key="memberFeeSet"
       :total.sync="rules.total"
       sync
       :page.sync="rules.page"
@@ -56,17 +156,229 @@
       :page-sizes="rules.page_size"
       @pagination="getList"
     />
+    <el-dialog
+      :title="title"
+      :close-on-click-modal="false"
+      :visible.sync="branchStatus"
+      default-expand-all
+      @close="onFormClose('ruleForm')"
+      width="820px"
+    >
+      <el-form :model="form" :inline="true" ref="ruleForm">
+        <el-form-item
+          label="所属分部"
+          prop="organId"
+          :rules="[{ required: true, message: '请选择分部' }]"
+          :label-width="formLabelWidth"
+        >
+          <el-select
+            :disabled="addDisabled"
+            class="multiple"
+            filterable
+            style="width: 650px !important"
+            v-model.trim="form.organId"
+            clearable
+            placeholder="请选择分部"
+          >
+            <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
+          label="会员名称"
+          prop="memberRankSettingId"
+          :rules="[{ required: true, message: '请选择会员' }]"
+          :label-width="formLabelWidth"
+        >
+          <el-select
+            :disabled="addDisabled"
+            class="multiple"
+            filterable
+            style="width: 650px !important"
+            v-model.trim="form.memberRankSettingId"
+            clearable
+            placeholder="请选择会员"
+          >
+            <el-option
+              v-for="(item, index) in remberList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          prop="currentDayFee"
+          label="1天收费现价"
+          :rules="[
+            {
+              required: true,
+              message: '请输入1天收费现价',
+              trigger: 'blur, change',
+            },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.currentDayFee" :disabled="addDisabled">
+            <template slot="append">元/日</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="originalDayFee"
+          label="1天收费原价"
+          :rules="[
+            { required: true, message: '请输入1天收费原价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.originalDayFee" :disabled="addDisabled">
+            <template slot="append">元/日</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="currentMonthFee"
+          label="1个月收费现价"
+          :rules="[
+            { required: true, message: '请输入1个月收费现价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.currentMonthFee" :disabled="addDisabled">
+            <template slot="append">元/月</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="originalMonthFee"
+          label="1个月收费原价"
+          :rules="[
+            { required: true, message: '请输入1个月收费原价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.originalMonthFee" :disabled="addDisabled">
+            <template slot="append">元/月</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="currentHalfYearFee"
+          label="6个月收费现价"
+          :rules="[
+            { required: true, message: '请输入6个月收费现价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.currentHalfYearFee" :disabled="addDisabled">
+            <template slot="append">元/年</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="originalHalfYearFee"
+          label="6个月收费原价"
+          :rules="[
+            { required: true, message: '请输入6个月收费原价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.originalHalfYearFee" :disabled="addDisabled">
+            <template slot="append">元/年</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="currentYearFee"
+          label="12个月收费现价"
+          :rules="[
+            { required: true, message: '请输入12个月收费现价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.currentYearFee" :disabled="addDisabled">
+            <template slot="append">元/年</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          prop="originalYearFee"
+          label="12个月收费原价"
+          :rules="[
+            { required: true, message: '请输入12个月收费原价' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },
+          ]"
+          :label-width="formLabelWidth"
+        >
+          <el-input v-model="form.originalYearFee" :disabled="addDisabled">
+            <template slot="append">元/年</template>
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="branchStatus = false">取 消</el-button>
+        <el-button @click="onSubmit" type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
+import numeral from "numeral";
+import {
+  getAllmemberRank,
+  addMemberOrganizationFeeMapper,
+  getmemberRankOrganizationFeeMapper,
+  getmemberOrganizationFeeMapperkDetail,
+  resetMemberOrganizationFeeMapper,
+} from "./api";
 import pagination from "@/components/Pagination/index";
+
+// numeral(this.list.form[index].courseTotalMinuties * this.list.form[index].unitPrice).format('0,0.00')
 export default {
   components: { pagination },
-  name: "memberSet",
+  name: "memberFeeSet",
   data() {
     return {
       searchForm: {
         search: null,
+        organId: null,
       },
       rules: {
         // 分页规则
@@ -76,13 +388,129 @@ export default {
         page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       tableList: [],
+      addDisabled: false,
+      title: "新增收费标准",
+      formLabelWidth: "140px",
+      form: {
+        currentDayFee: "",
+        currentHalfYearFee: "",
+        currentMonthFee: "",
+        currentYearFee: "",
+        originalDayFee: "",
+        originalHalfYearFee: "",
+        originalMonthFee: "",
+        originalYearFee: "",
+        organId: "",
+        memberRankSettingId: "",
+      },
+      branchStatus: false,
+      remberList: [],
     };
   },
-  mounted() {},
+  async mounted() {
+    await this.$store.dispatch("setBranchs");
+    // 获取所有的会员
+    try {
+      const res = await getAllmemberRank();
+      this.remberList = res.data;
+    } catch {}
+
+    this.getList();
+  },
   methods: {
-    search() {},
-    onReSet() {},
-    getList() {},
+    search() {
+      this.rules.page = 1;
+      this.getList()
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    async getList() {
+      try {
+        const res = await getmemberRankOrganizationFeeMapper({
+          ...this.searchForm,
+          rows: this.rules.limit,
+          page: this.rules.page,
+        });
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch {}
+    },
+    onFormClose(ruleForm) {
+      (this.form = {
+        currentDayFee: "",
+        currentHalfYearFee: "",
+        currentMonthFee: "",
+        currentYearFee: "",
+        originalDayFee: "",
+        originalHalfYearFee: "",
+        originalMonthFee: "",
+        originalYearFee: "",
+        organId: "",
+        memberRankSettingId: "",
+      }),
+        this.$refs[ruleForm].resetFields();
+    },
+    addFee() {
+      this.title = "新增收费标准";
+      this.addDisabled = false;
+      this.pageType = "create";
+      this.branchStatus = true;
+    },
+    resetFee(row, type) {
+      if (type) {
+        this.title = "修改收费标准";
+        this.pageType = "update";
+        this.addDisabled = false;
+      } else {
+        this.addDisabled = true;
+        this.title = "查看收费标准";
+        this.pageType = "";
+      }
+      this.form = {
+        ...row.memberFeeSetting,
+        organId: row.organId,
+        memberRankSettingId: row.memberRankSettingId,
+        outId:row.id
+      };
+      this.branchStatus = true;
+    },
+    onSubmit() {
+      this.$refs.ruleForm.validate(async (flag) => {
+        if (flag) {
+          if (this.pageType == "update") {
+            try {
+              const res = await resetMemberOrganizationFeeMapper({
+                memberFeeSetting: { ...this.form },
+                organId: this.form.organId,
+                memberRankSettingId: this.form.memberRankSettingId,
+                id:this.form.outId
+
+              });
+              this.$message.success("修改成功");
+              this.branchStatus = false;
+              this.getList();
+            } catch(e) {
+              console.log(e)
+            }
+          } else if (this.pageType == "create") {
+            try {
+              const res = await addMemberOrganizationFeeMapper({
+                memberFeeSetting: { ...this.form },
+                organId: this.form.organId,
+                memberRankSettingId: this.form.memberRankSettingId,
+              });
+              this.$message.success("新建会员成功");
+              this.branchStatus = false;
+              this.getList();
+            } catch {}
+          } else {
+            this.branchStatus = false;
+          }
+        }
+      });
+    },
   },
 };
 </script>

+ 186 - 31
src/views/categroyManager/productSystem/memberSet.vue

@@ -18,13 +18,13 @@
       </el-form-item>
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>
-        <el-button native-type="reset" type="primary">重置</el-button>
+        <!-- <el-button native-type="reset" type="primary">重置</el-button> -->
       </el-form-item>
     </save-form>
     <el-button
       type="primary"
       style="margin-bottom: 20px"
-      v-permission="'/vipNewActive'"
+      v-permission="'memberRankSetting/add'"
       @click="addLeave"
       >新增会员等级</el-button
     >
@@ -34,15 +34,15 @@
     >
       <el-table-column
         align="center"
-        prop="type"
+        prop="name"
         label="会员名称"
       ></el-table-column>
       <el-table-column align="center" prop="type" label="会员标识">
         <template slot-scope="scope">
           <el-image
             style="width: 100px; height: 100px"
-            :src="scope.row.url"
-            :preview-src-list="[scope.row.url]"
+            :src="scope.row.icon"
+            :preview-src-list="[scope.row.icon]"
           >
           </el-image>
         </template>
@@ -54,7 +54,8 @@
       ></el-table-column> -->
       <el-table-column
         align="center"
-        prop="type"
+        prop="updateTime"
+        width="100px"
         label="修改时间"
       ></el-table-column>
       <el-table-column
@@ -65,8 +66,17 @@
       <el-table-column align="center" label="操作">
         <template slot-scope="scope">
           <div>
-            <el-button type="text">详情</el-button>
-            <el-button type="text">修改</el-button>
+            <!-- memberRankSetting/add -->
+            <auth auths="memberRankSetting/get">
+              <el-button type="text" @click="resetMember(scope.row)"
+                >详情</el-button
+              >
+            </auth>
+            <auth   :auths="['memberRankSetting/get','memberRankSetting/update']" mulit>
+              <el-button type="text" @click="resetMember(scope.row, 'update')"
+                >修改</el-button
+              >
+            </auth>
           </div>
         </template>
       </el-table-column>
@@ -79,7 +89,7 @@
       @close="onFormClose('ruleForm')"
       width="800px"
     >
-      <el-form :model="form" :rules="rules" :inline="true" ref="ruleForm">
+      <el-form :model="form" :inline="true" ref="ruleForm">
         <el-alert
           title="会员信息"
           type="info"
@@ -87,12 +97,15 @@
           style="margin-bottom: 20px"
         >
         </el-alert>
+
         <el-form-item
           label="会员名称"
           prop="name"
           :label-width="formLabelWidth"
+          :rules="[{ required: true, message: '请输入会员名称' }]"
         >
           <el-input
+            :disabled="addDisabled"
             v-model.trim="form.name"
             autocomplete="off"
             style="width: 620px"
@@ -100,11 +113,13 @@
         </el-form-item>
         <el-form-item
           label="会员介绍"
-          prop="name"
+          prop="intro"
           :label-width="formLabelWidth"
+          :rules="[{ required: true, message: '请输入会员介绍' }]"
         >
           <el-input
-            v-model.trim="form.name"
+            :disabled="addDisabled"
+            v-model.trim="form.intro"
             autocomplete="off"
             type="textarea"
             :rows="3"
@@ -113,15 +128,18 @@
         </el-form-item>
         <el-form-item
           label="会员标识"
-          prop="name"
+          prop="icon"
           :label-width="formLabelWidth"
+          :rules="[{ required: true, message: '请上传会员标识' }]"
         >
           <upload
-            v-model="form.image"
-            :imageWidthM="400"
+            v-if="!addDisabled"
+            v-model="form.icon"
+            :imageWidthM="200"
             :disabled="addDisabled"
-            :imageHeightM="400"
+            :imageHeightM="200"
           ></upload>
+          <img v-else :src="form.icon" alt="" width="120px" height="120px" />
         </el-form-item>
         <!-- <br />
         <el-form-item
@@ -172,6 +190,7 @@
         <br />
         <el-form-item label="会员功能" :label-width="formLabelWidth">
           <el-checkbox
+            :disabled="addDisabled"
             :indeterminate="isIndeterminate"
             @change="onCheckAll"
             v-model.trim="checkAll"
@@ -186,9 +205,8 @@
               @check="onTreeCheck"
               :filter-node-method="filterNode"
               ref="tree"
-              accordion
               highlight-current
-              :default-checked-keys="result.menuIds"
+              :default-checked-keys="checkList"
               :props="defaultProps"
             >
               <div slot-scope="{ node, data }">
@@ -218,7 +236,13 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import Upload from "@/components/Upload/index";
-import { getAllmemberRank } from "./api";
+
+import {
+  addMemberRank,
+  getmemberRankList,
+  getmemberRankDetail,
+  resetMemberRank,
+} from "./api";
 import { getMemberPrivilegesItem } from "@/views/dictionaryManager/api";
 export default {
   components: { pagination, Upload },
@@ -239,7 +263,11 @@ export default {
       tableList: [],
       title: "新增会员等级",
       branchStatus: false,
-      form: {},
+      form: {
+        name: "",
+        icon: "",
+        into: "",
+      },
       addDisabled: false,
       checkAll: false,
       isIndeterminate: false,
@@ -247,6 +275,7 @@ export default {
       defaultProps: {
         children: "children",
         label: "label",
+        disabled: this.addDisabled,
       },
       result: {
         roleName: null,
@@ -254,7 +283,10 @@ export default {
       },
       seachRoleValue: "",
       silderList: [],
-      slideCount:0
+      slideCount: 0,
+      pageType: "",
+      allChildIds: [],
+      checkList: [],
     };
   },
   async mounted() {
@@ -263,20 +295,77 @@ export default {
       this.silderList = res.data;
       this.treeData = this.setTableData(res.data);
     } catch (e) {}
+
+    this.getList();
   },
   methods: {
-    onFormClose(ruleForm){
-      this.onReSetRole()
-      this.$refs[ruleForm].resetFields()
+    onFormClose(ruleForm) {
+      (this.form = {
+        name: "",
+        icon: "",
+        into: "",
+      }),
+        this.$refs.tree.setCheckedNodes([]);
+      this.onTreeCheck();
+      this.$refs[ruleForm].resetFields();
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
     },
-    search() {},
     onReSet() {},
-    getList() {},
-    addLeave() {
+    async getList() {
+      try {
+        const res = await getmemberRankList({
+          search: this.searchForm.search,
+          rows: this.rules.limit,
+          page: this.rules.page,
+        });
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch {}
+    },
+    async addLeave() {
+
+      this.checkList = [];
       this.title = "新增会员等级";
+       this.addDisabled = false;
+      this.pageType = "create";
+      this.treeData = this.setTableData(this.silderList, this.addDisabled);
       this.branchStatus = true;
     },
-    onSubmit() {},
+    onSubmit() {
+      this.$refs.ruleForm.validate(async (flag) => {
+        if (flag) {
+          let tempIds = this.$refs.tree.getCheckedKeys();
+          let halfIds = this.$refs.tree.getHalfCheckedKeys();
+          let allIds = [...tempIds, ...halfIds];
+          if (this.pageType == "update") {
+            try {
+              const res = await resetMemberRank({
+                ...this.form,
+                memberPrivilegesItemIdList: allIds,
+              });
+              this.$message.success("修改成功");
+              this.branchStatus = false;
+              this.getList();
+            } catch {}
+          } else if (this.pageType == "create") {
+            try {
+              const res = await addMemberRank({
+                ...this.form,
+                memberPrivilegesItemIdList: allIds,
+              });
+              this.$message.success("新建会员成功");
+              this.branchStatus = false;
+              this.getList();
+            } catch {}
+          } else {
+            this.branchStatus = false;
+          }
+        }
+      });
+    },
     onCheckAll(val) {
       if (val) {
         // 先去掉半选
@@ -293,7 +382,6 @@ export default {
         checkTree.length > 0 && checkTree.length < this.slideCount;
     },
     filterNode(value, data) {
-      console.log(data);
       if (!value) return true;
       return data.label.indexOf(value) !== -1;
     },
@@ -302,9 +390,11 @@ export default {
     },
     onReSetRole() {
       this.seachRoleValue = "";
-      this.data = this.setTableData(this.silderList);
+      // this.data = this.setTableData(this.silderList);
+      this.$refs.tree.filter(this.seachRoleValue);
+      // console.log(this.data);
     },
-    setTableData(result) {
+    setTableData(result, disabled) {
       let list = [];
       list = result.map((res) => {
         let tempList = {};
@@ -312,15 +402,80 @@ export default {
           id: res.id,
           name: res.name,
           label: res.name,
+          disabled: disabled ? disabled : false,
         };
         this.slideCount++;
         if (res.memberPrivilegesItems && res.memberPrivilegesItems.length > 0) {
-          tempList.children = this.setTableData(res.memberPrivilegesItems);
+          tempList.children = this.setTableData(
+            res.memberPrivilegesItems,
+            disabled
+          );
         }
         return tempList;
       });
       return list;
     },
+    async resetMember(row, type) {
+      if (type) {
+        this.title = "修改会员等级";
+        this.pageType = "update";
+        this.addDisabled = false;
+        this.treeData = this.setTableData(this.silderList, this.addDisabled);
+      } else {
+        this.addDisabled = true;
+        this.title = "查看会员等级";
+        this.pageType = "";
+        this.treeData = this.setTableData(this.silderList, this.addDisabled);
+      }
+
+      try {
+        const res = await getmemberRankDetail({ memberRankSettingId: row.id });
+        this.form = { ...res.data };
+        this.checkAll =
+          res.data.memberPrivilegesItemIdList.length >= this.slideCount;
+        // 反写树的值
+
+        this.isIndeterminate =
+          res.data.memberPrivilegesItemIdList.length > 0 &&
+          res.data.memberPrivilegesItemIdList.length < this.slideCount;
+
+        this.checkList = res.data.memberPrivilegesItemIdList;
+        let tSplice = this.getParent(
+          res.data.memberPrivilegesItemIdList,
+          this.treeData
+        );
+        this.checkList = tSplice;
+      } catch (e) {
+        console.log(e);
+      }
+
+      this.branchStatus = true;
+    },
+    //递归获取到所有的为子级的ID
+    getParent(checkIds, data) {
+      let removeIds = JSON.parse(JSON.stringify(checkIds));
+      this.getAllChildIds(data);
+      let tempAllChildIds = this.allChildIds;
+      for (let i = checkIds.length; i > 0; i--) {
+        if (!tempAllChildIds.includes(checkIds[i - 1])) {
+          removeIds.splice(i - 1, 1);
+        }
+      }
+      return removeIds;
+    },
+    getAllChildIds(data) {
+      // 获取所有最子集编号
+      let child = this.allChildIds;
+      let tempList = [];
+      data.forEach((item, index) => {
+        let temp = [];
+        if (item.children && item.children.length > 0) {
+          temp = this.getAllChildIds(item.children);
+        } else {
+          child.push(item.id);
+        }
+      });
+    },
   },
 };
 </script>

+ 2 - 1
src/views/dictionaryManager/index.vue

@@ -278,6 +278,7 @@ export default {
       });
     },
     setTableData(result) {
+
       let list = [];
       list = result.map((res) => {
         let tempList = {};
@@ -293,7 +294,7 @@ export default {
         }
         return tempList;
       });
-      return list;
+      return list || [];
     },
     onFormClose(formName) {
       // 关闭弹窗重置验证

+ 17 - 0
src/views/resetTeaming/api.js

@@ -75,3 +75,20 @@ export const queryByOrganIdAndCourseType = data => request2({
   method: 'get',
   requestType: 'form'
 })
+// 根据会员等级查会员价格
+export const getMemberFee = data => request2({
+  url: '/api-web/memberFeeSetting/findByRankId',
+  data: {},
+  params: data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 获取虽有得会员等级
+export const getAllmemberRank = (data) => request2({
+  url: '/api-web/memberRankSetting/findAll',
+  method: 'get',
+  params: data
+})
+
+

+ 50 - 10
src/views/resetTeaming/components/resetPayList.vue

@@ -393,6 +393,27 @@
         :musicGroupId="$route.query.id"
       />
     </el-dialog>
+    <!-- 会员缴费 -->
+    <el-dialog
+      :title="payFormTitle"
+      :visible.sync="memberVisible"
+      width="830px"
+    >
+      <memberPayForm
+        v-if="memberVisible"
+        @close="memberVisible = false"
+        @submited="payedSubmited"
+        @changeActive="changeActive"
+        :organizationCourseUnitPriceSettings="
+          organizationCourseUnitPriceSettings
+        "
+        :rowDetail="activeRow"
+        :type="payFormType"
+        :baseInfo="baseInfo"
+        :paymentType="team_status == 'PRE_BUILD_FEE' ? 0 : undefined"
+        :musicGroupId="$route.query.id"
+      />
+    </el-dialog>
 
     <el-dialog
       title="学员选择"
@@ -464,6 +485,7 @@ import {
 } from "../api";
 import setStudentFee from "./studentPayBase";
 import userPayForm from "../modals/user-pay-form";
+import memberPayForm from "../modals/member-pay-form";
 import payItems from "../modals/pay-items";
 import schoolPayForm from "../modals/school-pay-form";
 import review from "../modals/review";
@@ -478,6 +500,7 @@ export default {
     pagination,
     setStudentFee,
     userPayForm,
+    memberPayForm,
     schoolPayForm,
     QrCode,
     review,
@@ -541,6 +564,7 @@ export default {
       activeName: null,
       dialogCalenderId: null, // 选择编号
       baseInfo: null,
+      memberVisible: false, // 会员缴费
     };
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -578,14 +602,13 @@ export default {
   // },
   methods: {
     async init() {
-
       this.team_status = this.$route.query.team_status;
       try {
         const res = await getMusicGroupStu({
           musicGroupId: this.$route.query.id,
         });
       } catch (error) {}
-      getTeamBaseInfo({ musicGroupId: this.$route.query.id  }).then((res) => {
+      getTeamBaseInfo({ musicGroupId: this.$route.query.id }).then((res) => {
         if (res.code == 200) {
           this.baseInfo = res.data;
         }
@@ -593,10 +616,18 @@ export default {
       this.getList();
     },
     newUserPay() {
-      this.payFormType = "user";
-      this.isNew = true;
-      this.activeRow = null;
-      this.userVisible = true;
+      // 判断一下乐团是课程缴费 还是会员缴费 且乐团状态为创建缴费中
+      if (this.baseInfo?.musicGroup?.courseViewType == 1&&this.team_status == "PRE_BUILD_FEE") {
+        this.payFormType = "user";
+        this.isNew = true;
+        this.activeRow = null;
+        this.memberVisible = true;
+      } else {
+        this.payFormType = "user";
+        this.isNew = true;
+        this.activeRow = null;
+        this.userVisible = true;
+      }
     },
     newSchoolPay() {
       this.payFormType = "school";
@@ -644,10 +675,19 @@ export default {
     },
     resetPay(row) {
       this.diTitle = "修改缴费";
-      this.isNew = false;
-      this.activeRow = row;
-      this.payFormType = row.payUserType === "SCHOOL" ? "school" : "user";
-      this.userVisible = true;
+      if (this.baseInfo?.musicGroup?.courseViewType == 1&&row.paymentType == 'MUSIC_APPLY') {
+        this.payFormType = row.payUserType === "SCHOOL" ? "school" : "user";
+        this.isNew = false;
+        this.activeRow = row;
+        this.memberVisible = true;
+      } else {
+        this.isNew = false;
+        this.activeRow = row;
+        this.payFormType = row.payUserType === "SCHOOL" ? "school" : "user";
+        this.userVisible = true;
+      }
+
+      // 判断一下 是不是云收费团 且是乐团报名缴费
     },
     changeActive(val) {
       if (this.$listeners.changeActive) {

+ 1 - 1
src/views/resetTeaming/components/strudentPayInfo.vue

@@ -622,7 +622,7 @@ export default {
           path: "/business/resetTeaming",
           query: { ...this.$route.query },
         });
-      }else if(query.type == 'PRE_BUILD_FEE'){
+      }else if(query.type == 'PRE_BUILD_FEE' || query.type == 'feeAudit'){
              this.$store.dispatch("delVisitedViews", this.$route);
         this.$router.push({
           path: "/business/resetTeaming",

+ 225 - 0
src/views/resetTeaming/modals/member-pay-form.vue

@@ -0,0 +1,225 @@
+<template>
+  <div>
+    <el-alert title="注意事项" :closable="false" class="alert" type="info">
+    </el-alert>
+    <div class="tilteWrap">
+      <h4>会员团排课规则:</h4>
+      <p>
+        1、会员团每学期赠送3960分钟免费课程时长,该时长可排声部课、集训声部课、合奏课、集训合奏课、综合课,课程时长以上类型课程共享;
+      </p>
+      <p>
+        2、在本学期内声部课、集训声部课总共最多能排课1980分钟;合奏课、集训合奏课最多能排课1980分钟;综合课最多能排课3960分钟;
+      </p>
+      <p>
+        3、赠送课程仅可在该学期内完成排课,且不可将本学期课程调整至学期时间范围之外;
+      </p>
+      <p>4、学期时间段:9月1日至2月28/29日,3月1日至8月31日;</p>
+      <p>
+        5、排课时系统根据【开课日期】计算本学期最大可排课时长,计算方式为开课日期到本学期结束日期周次*4*45分钟,若超过1980分钟,按1980分钟计算。既:若学期中途开始排课,则可能排课时长并不能达到1980分钟。
+      </p>
+    </div>
+    <el-alert title="会员设置" :closable="false" class="alert" type="info">
+    </el-alert>
+    <memberSetting
+      ref="memberSetting"
+      :form="memberForm"
+      :isUserType="isUserType"
+      :organId="baseInfo.musicGroup.organId"
+    />
+    <el-alert title="其它" :closable="false" class="alert" type="info">
+    </el-alert>
+    <otherform :form="other" ref="other" />
+    <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 memberSetting from "./member-setting";
+import otherform from "./other";
+import { getTimes } from "@/utils";
+import {
+  musicGroupPaymentCalenderAdd,
+  musicGroupPaymentCalenderView,
+  musicGroupPaymentCalenderDetailBatchUpdate,
+} from "../api";
+const paymentTypeFormat = {
+  0: "MUSIC_APPLY",
+  1: "MUSIC_RENEW",
+  2: "ADD_COURSE",
+  3: "ADD_STUDENT",
+  4: "SPAN_GROUP_CLASS_ADJUST",
+};
+export default {
+  components: {
+    memberSetting,
+    otherform,
+  },
+  props: [
+    "type",
+    "musicGroupId",
+    "baseInfo",
+    "paymentType",
+    "rowDetail",
+    "organizationCourseUnitPriceSettings",
+  ],
+  data() {
+    return {
+      memberForm: {
+        memberRankSettingId: "",
+        memberValidDate: 6,
+        memberPaymentAmount: "",
+        originalMemberPaymentAmount: "",
+        paymentDate: [],
+      },
+      other: {
+        memo: "",
+      },
+      viewDetail: null,
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  computed: {
+    isUserType() {
+      return this.type === "user";
+    },
+  },
+  methods: {
+    async init() {
+      // musicGroupPaymentCalenderView
+      if (this.rowDetail) {
+        // for (const key in paymentTypeFormat) {
+        //   if (paymentTypeFormat.hasOwnProperty(key)) {
+        //     const item = paymentTypeFormat[key];
+        //     if (item === this.rowDetail.paymentType) {
+        //       this.paymentType = key;
+        //     }
+        //   }
+        // }
+        this.$set(this.other, "memo", this.rowDetail.memo);
+
+        try {
+          const res = await musicGroupPaymentCalenderView({
+            musicGroupId: this.musicGroupId,
+            batchNo: this.rowDetail.batchNo,
+          });
+          this.viewDetail = res.data;
+          let result = this.viewDetail?.musicGroupPaymentCalenders[0];
+          this.$set(
+            this.memberForm,
+            "memberRankSettingId",
+            result.memberRankSettingId
+          );
+          this.$set(this.memberForm, "memberValidDate", result.memberValidDate);
+          this.$set(
+            this.memberForm,
+            "memberPaymentAmount",
+            result.memberPaymentAmount
+          );
+          this.$set(
+            this.memberForm,
+            "originalMemberPaymentAmount",
+            result.originalMemberPaymentAmount
+          );
+          this.$set(this.memberForm, "paymentDate", [
+            result.startPaymentDate,
+            result.deadlinePaymentDate,
+          ]);
+        } catch (e) {
+          console.log(e);
+        }
+      }
+    },
+    getForms() {
+      const { $refs: refs } = this;
+
+      return [refs.memberSetting, refs.other]
+        .filter((item) => !!item)
+        .map((item) => item.$refs.form || item);
+    },
+    async submit() {
+      const forms = this.getForms();
+      const valided = [];
+      for (const form of forms) {
+        form.validate((valid) => {
+          if (valid) {
+            valided.push(form);
+          }
+        });
+      }
+      if (valided.length === forms.length) {
+        let { paymentDate, ...reset } = {
+          musicGroupId: this.musicGroupId,
+          ...this.memberForm,
+          ...this.other,
+          paymentType:
+            paymentTypeFormat[this.paymentType == 0 ? this.paymentType : 0],
+          paymentPattern: 1,
+          payUserType: this.type === "user" ? "STUDENT" : "SCHOOL",
+          musicGroupPaymentDateRangeList: [
+            {
+              ...getTimes(this.memberForm.paymentDate, [
+                "startPaymentDate",
+                "deadlinePaymentDate",
+              ]),
+            },
+          ],
+        };
+        if (!this.rowDetail?.batchNo) {
+          try {
+            const res = await musicGroupPaymentCalenderAdd(reset);
+            if (this.$route.query.team_status == "PRE_BUILD_FEE") {
+              this.$message.success("创建成功");
+              this.$store.dispatch("delVisitedViews", this.$route);
+              this.$router.push({
+                path: "/teamList",
+              });
+            }
+
+            this.$listeners.close();
+            this.$listeners.submited(res.data);
+          } catch (e) {}
+        } else {
+          // 修改\
+          reset.batchNo = this.rowDetail.batchNo;
+          reset.paymentType =
+            this.viewDetail.musicGroupPaymentCalenders[0]?.paymentType;
+            console.log(reset)
+          try {
+            const res = await musicGroupPaymentCalenderDetailBatchUpdate(reset);
+            this.$listeners.close();
+            this.$listeners.submited(res.data);
+            if (this.$route.query.type == "teamDraft") {
+              this.$router.push({
+                query: merge(this.$route.query, { type: "feeAudit" }),
+              });
+            }
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.tilteWrap {
+  padding: 0 16px 16px;
+  line-height: 20px;
+  h4 {
+    margin-bottom: 10px;
+  }
+}
+.alert {
+  margin-bottom: 20px;
+}
+.dialog-footer {
+  margin-top: 20px;
+  display: block;
+  text-align: right;
+}
+</style>

+ 155 - 0
src/views/resetTeaming/modals/member-setting.vue

@@ -0,0 +1,155 @@
+<template>
+  <el-form
+    label-width="160px"
+    :model="form"
+    ref="form"
+    label-suffix=": "
+    :inline="true"
+  >
+    <el-form-item
+      label="会员等级"
+      prop="paymentDate"
+      v-if="isUserType"
+      :rules="[{ required: true, message: '请选择缴费时间', trigger: 'blur' }]"
+    >
+      <el-select
+        placeholder="会员等级"
+        style="width: 620px !important"
+        clearable
+        filterable
+        @change="memberRankSettingIdChange"
+        v-model.trim="form.memberRankSettingId"
+      >
+        <el-option
+          :value="item.id"
+          :label="item.name"
+          v-for="item in memberRankList"
+          :key="item.id"
+        ></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item
+      label="会员有效期"
+      prop="memberValidDate"
+      v-if="isUserType"
+      :rules="[
+        { required: true, message: '请选择会员有效期', trigger: 'blur' },
+      ]"
+    >
+      <el-input
+        :disabled="true"
+        style="width: 596px"
+        v-model="form.memberValidDate"
+      >
+        <template slot="append">个月</template>
+      </el-input>
+       <el-tooltip placement="top" popper-class="mTooltip">
+          <div slot="content">自开课之日起6个月有效。</div>
+          <i
+            class="el-icon-question micon el-tooltip"
+            style="font-size: 18px; color: #f56c6c"
+            v-permission="'export/teacherSalary'"
+          ></i>
+        </el-tooltip>
+    </el-form-item>
+    <el-form-item
+      label="现价"
+      prop="memberPaymentAmount"
+      v-if="isUserType"
+      :rules="[{
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+            },{ required: true, message: '请输入现价', trigger: 'blur' }]"
+    >
+      <el-input style="width:223px" v-model="form.memberPaymentAmount">
+        <template slot="append">元</template>
+      </el-input>
+    </el-form-item>
+    <el-form-item
+      label="原价"
+      prop="originalMemberPaymentAmount"
+      v-if="isUserType"
+      :rules="[{ required: true, message: '请输入原价', trigger: 'blur' }]"
+    >
+      <el-input style="width: 223px" v-model="form.originalMemberPaymentAmount" :disabled='true'>
+        <template slot="append">元</template>
+      </el-input>
+    </el-form-item>
+    <el-form-item
+      label="缴费时间"
+      prop="paymentDate"
+      v-if="isUserType"
+      :rules="[{ required: true, message: '请选择缴费时间', trigger: 'blur' }]"
+    >
+      <el-date-picker
+        v-model="form.paymentDate"
+        type="daterange"
+        style="width: 620px"
+        :picker-options="pickerOptions"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+      >
+      </el-date-picker>
+    </el-form-item>
+  </el-form>
+</template>
+<script>
+import { paymentPatternType } from "@/constant";
+import { objectToOptions } from "@/utils";
+import { getAllmemberRank, getMemberFee } from "../api";
+export default {
+  props: ["form", "isUserType", "organId"],
+  data() {
+    return {
+      paymentPatternTypeOptions: objectToOptions(paymentPatternType),
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() + 86400000 <= new Date().getTime();
+        },
+      },
+      memberRankList: [],
+    };
+  },
+  async mounted() {
+    // 获取所有得会员信息
+    try {
+      const res = await getAllmemberRank();
+      this.memberRankList = res.data;
+    } catch (e) {
+      console.log(e);
+    }
+  },
+  methods: {
+   async memberRankSettingIdChange(val) {
+      if(val){
+        try{
+         const res = await getMemberFee({rankId:val,organId:this.organId})
+         if(res.data?.currentHalfYearFee&&res.data?.originalHalfYearFee){
+             this.$set(this.form,'memberPaymentAmount',res.data?.currentHalfYearFee)
+          this.$set(this.form,'originalMemberPaymentAmount',res.data?.originalHalfYearFee)
+         }else{
+           this.$message.error('请设置该会员得默认价格')
+         }
+
+
+          console.log(this.form.memberPaymentAmount,res.data?.currentHalfYearFee)
+        }catch(e){
+          console.log(e)
+        }
+      }
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.number-input {
+  /deep/ .el-input__inner {
+    text-align: left;
+  }
+
+  width: 100%;
+}
+</style>

+ 136 - 103
src/views/resetTeaming/modals/review-detail.vue

@@ -1,31 +1,37 @@
 <template>
   <div>
-    <el-alert title="学员信息"
+    <el-alert
+      title="学员信息"
       :closable="false"
       class="alert"
       type="info"
-      v-if="musicGroupPaymentCalenders[0] && musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'"
+      v-if="
+        musicGroupPaymentCalenders[0] &&
+        musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'
+      "
     >
     </el-alert>
-    <descriptions :column="2" v-if="musicGroupPaymentCalenders[0] && musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'">
-      <descriptions-item label="学员姓名:">{{
-        username
-      }}</descriptions-item>
-      <descriptions-item label="手机号码:">{{
-        phone
-      }}</descriptions-item>
+    <descriptions
+      :column="2"
+      v-if="
+        musicGroupPaymentCalenders[0] &&
+        musicGroupPaymentCalenders[0].paymentType === 'ADD_STUDENT'
+      "
+    >
+      <descriptions-item label="学员姓名:">{{ username }}</descriptions-item>
+      <descriptions-item label="手机号码:">{{ phone }}</descriptions-item>
     </descriptions>
-    <el-alert title="申请信息"
-              :closable="false"
-              class="alert"
-              type="info">
+    <el-alert title="申请信息" :closable="false" class="alert" type="info">
     </el-alert>
     <descriptions :column="2">
       <descriptions-item label="分部名称:">{{
         auditDto.organName
       }}</descriptions-item>
       <descriptions-item label="乐团名称:">
-        <overflow-text :text="auditDto.musicGroupName" width="100%"></overflow-text>
+        <overflow-text
+          :text="auditDto.musicGroupName"
+          width="100%"
+        ></overflow-text>
       </descriptions-item>
       <descriptions-item label="乐团编号:">
         <copy-text>{{ auditDto.musicGroupId }}</copy-text>
@@ -40,43 +46,49 @@
         auditDto.payUserType | payUserTypeFormat
       }}</descriptions-item>
       <descriptions-item :span="3" label="备注:">
-        <span style="display: inline-block;max-width: 100%;">
-          <overflow-text :text="musicGroupPaymentCalenders[0] ? musicGroupPaymentCalenders[0].memo : null"></overflow-text>
+        <span style="display: inline-block; max-width: 100%">
+          <overflow-text
+            :text="
+              musicGroupPaymentCalenders[0]
+                ? musicGroupPaymentCalenders[0].memo
+                : null
+            "
+          ></overflow-text>
         </span>
       </descriptions-item>
     </descriptions>
-    <el-alert title="课程信息"
-              :closable="false"
-              class="alert"
-              type="info">
+    <el-alert
+      title="课程信息"
+      :closable="false"
+      class="alert"
+      type="info"
+      v-if="musicGroupPaymentCalenderCourseSettingName"
+    >
     </el-alert>
     <descriptions :column="3" v-if="musicGroupPaymentCalenderCourseSettingName">
       <descriptions-item :span="2" label="收费标准:">{{
         musicGroupPaymentCalenderCourseSettingName
       }}</descriptions-item>
     </descriptions>
-    <el-table :data="musicGroupPaymentCalenderCourseSettings"
-              stripe
-              v-if="musicGroupPaymentCalenderCourseSettings.length"
-              style="width: 100%; margin-top: 10px">
-      <el-table-column prop="courseType"
-                       label="课程类型"
-                       width="120">
+    <el-table
+      :data="musicGroupPaymentCalenderCourseSettings"
+      stripe
+      v-if="musicGroupPaymentCalenderCourseSettings.length"
+      style="width: 100%; margin-top: 10px"
+    >
+      <el-table-column prop="courseType" label="课程类型" width="120">
         <template slot-scope="scope">
           {{ scope.row.courseType | courseTypeFormat }}
         </template>
       </el-table-column>
-      <el-table-column prop="isStudentOptional"
-                       label="是否可选"
-                       width="100px">
-                       <template slot-scope="scope">{{scope.row.isStudentOptional ? '是' : '否'}}</template>
+      <el-table-column prop="isStudentOptional" label="是否可选" width="100px">
+        <template slot-scope="scope">{{
+          scope.row.isStudentOptional ? "是" : "否"
+        }}</template>
       </el-table-column>
-      <el-table-column prop="courseTotalMinuties"
-                       label="课程总时长(分钟)">
+      <el-table-column prop="courseTotalMinuties" label="课程总时长(分钟)">
       </el-table-column>
-      <el-table-column prop="courseCurrentPrice"
-                       label="现价(元)">
-
+      <el-table-column prop="courseCurrentPrice" label="现价(元)">
         <template slot="header">
           <p style="position: relative">
             现价(元)
@@ -90,38 +102,30 @@
           </p>
         </template>
       </el-table-column>
-      <el-table-column prop="courseOriginalPrice"
-                       label="原价(元)">
+      <el-table-column prop="courseOriginalPrice" label="原价(元)">
       </el-table-column>
     </el-table>
-    <el-table :data="musicGroupPaymentCalenderStudentDetails"
-              stripe
-              v-if="musicGroupPaymentCalenderStudentDetails.length"
-              style="width: 100%; margin-top: 10px">
-      <el-table-column prop="username"
-                       label="学员姓名">
-      </el-table-column>
-      <el-table-column prop="phone"
-                       label="手机号">
-      </el-table-column>
-      <el-table-column prop="courseType"
-                       label="课程类型"
-                       width="120">
+    <el-table
+      :data="musicGroupPaymentCalenderStudentDetails"
+      stripe
+      v-if="musicGroupPaymentCalenderStudentDetails.length"
+      style="width: 100%; margin-top: 10px"
+    >
+      <el-table-column prop="username" label="学员姓名"> </el-table-column>
+      <el-table-column prop="phone" label="手机号"> </el-table-column>
+      <el-table-column prop="courseType" label="课程类型" width="120">
         <template slot-scope="scope">
           {{ scope.row.courseType | courseTypeFormat }}
         </template>
       </el-table-column>
-      <el-table-column prop="isStudentOptional"
-                       label="是否可选"
-                       width="100px">
-                       <template slot-scope="scope">{{scope.row.isStudentOptional ? '是' : '否'}}</template>
+      <el-table-column prop="isStudentOptional" label="是否可选" width="100px">
+        <template slot-scope="scope">{{
+          scope.row.isStudentOptional ? "是" : "否"
+        }}</template>
       </el-table-column>
-      <el-table-column prop="courseTime"
-                       label="课程总时长(分钟)">
+      <el-table-column prop="courseTime" label="课程总时长(分钟)">
       </el-table-column>
-      <el-table-column prop="courseCurrentPrice"
-                       label="现价(元)">
-
+      <el-table-column prop="courseCurrentPrice" label="现价(元)">
         <template slot="header">
           <p style="position: relative">
             现价(元)
@@ -140,67 +144,96 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="courseOriginalPrice"
-                       label="原价(元)">
-
+      <el-table-column prop="courseOriginalPrice" label="原价(元)">
         <template slot-scope="scope">
           <div>
-            {{ (musicGroupPaymentCalenders[0] && musicGroupPaymentCalenders[0].paymentType === 'SPAN_GROUP_CLASS_ADJUST' ? scope.row.masterSubCoursePrice : scope.row.courseOriginalPrice) | moneyFormat }}
+            {{
+              (musicGroupPaymentCalenders[0] &&
+              musicGroupPaymentCalenders[0].paymentType ===
+                "SPAN_GROUP_CLASS_ADJUST"
+                ? scope.row.masterSubCoursePrice
+                : scope.row.courseOriginalPrice) | moneyFormat
+            }}
           </div>
         </template>
       </el-table-column>
     </el-table>
-    <el-alert title="缴费周期"
-              :closable="false"
-              class="alert"
-              type="info">
+    <el-alert
+      title="会员信息"
+      :closable="false"
+      class="alert"
+      type="info"
+      v-if="!musicGroupPaymentCalenderCourseSettingName"
+    >
     </el-alert>
-    <descriptions v-for="item in musicGroupPaymentCalenders" :key="item.id" :column="2">
+    <!-- 会员信息 -->
+    <descriptions
+      v-for="item in musicGroupPaymentCalenders"
+      :key="item.id+'member'"
+      :column="2"
+    >
+      <descriptions-item label="会员等级:">{{item.memberRankSettingName}}</descriptions-item>
+      <descriptions-item label="会员有效期:">{{item.memberValidDate}}个月</descriptions-item>
+      <descriptions-item label="现价">{{ numeral(item.memberPaymentAmount).format("0,0")}}</descriptions-item>
+      <descriptions-item label="原价">{{ numeral(item.originalMemberPaymentAmount).format("0,0")}}</descriptions-item>
+    </descriptions>
+
+    <el-alert title="缴费周期" :closable="false" class="alert" type="info">
+    </el-alert>
+    <descriptions
+      v-for="item in musicGroupPaymentCalenders"
+      :key="item.id"
+      :column="2"
+    >
       <descriptions-item label="缴费金额:">{{
-        numeral(item.paymentAmount).format('0,0')
+        numeral(item.paymentAmount).format("0,0")
       }}</descriptions-item>
       <descriptions-item label="缴费方式:">{{
         item.paymentPattern | paymentPatternTypeFormat
       }}</descriptions-item>
-      <descriptions-item :span="3" v-if="item.payUserType !== 'SCHOOL'"
-                         label="缴费日期:">{{ item.startPaymentDate|dayjsFormat }} -
-        {{ item.deadlinePaymentDate|dayjsFormat }}</descriptions-item>
-      <descriptions-item :span="3" label="缴费有效期:">{{ item.paymentValidStartDate | dayjsFormat }} -
-        {{ item.paymentValidEndDate | dayjsFormat }}</descriptions-item>
+      <descriptions-item
+        :span="3"
+        v-if="item.payUserType !== 'SCHOOL'"
+        label="缴费日期:"
+        >{{ item.startPaymentDate | dayjsFormat }} -
+         {{ item.deadlinePaymentDate | dayjsFormat }}</descriptions-item
+      >
+      <descriptions-item
+        :span="3"
+        v-if="musicGroupPaymentCalenderCourseSettingName"
+        label="缴费有效期:"
+        >{{ item.paymentValidStartDate | dayjsFormat }} -
+        {{ item.paymentValidEndDate | dayjsFormat }}</descriptions-item
+      >
     </descriptions>
-    <el-dialog :visible.sync="payVisible"
-               :close-on-click-modal="false"
-               append-to-body
-               width="600px"
-               title="查看学员">
+
+    <el-dialog
+      :visible.sync="payVisible"
+      :close-on-click-modal="false"
+      append-to-body
+      width="600px"
+      title="查看学员"
+    >
       <el-table :data="simpleUserDto">
-        <el-table-column prop="userId"
-                         label="用户ID"
-                         width="180">
+        <el-table-column prop="userId" label="用户ID" width="180">
         </el-table-column>
-        <el-table-column prop="userName"
-                         label="姓名"
-                         width="180">
+        <el-table-column prop="userName" label="姓名" width="180">
         </el-table-column>
-        <el-table-column prop="subjectNames"
-                         label="声部"
-                         width="180">
+        <el-table-column prop="subjectNames" label="声部" width="180">
         </el-table-column>
       </el-table>
-      <span slot="footer"
-            class="dialog-footer">
-        <el-button type="primary"
-                   @click="payVisible = false">关 闭</el-button>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="payVisible = false">关 闭</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 <script>
 import Vue from "vue";
-import numeral from 'numeral'
+import numeral from "numeral";
 import { musicGroupPaymentCalenderView } from "../api";
 import descriptions from "@/components/Descriptions";
-import Item from '@/layout/components/Sidebar/Item.vue';
+import Item from "@/layout/components/Sidebar/Item.vue";
 Vue.use(descriptions);
 const initData = {
   auditDto: {},
@@ -209,20 +242,20 @@ const initData = {
   simpleUserDto: [],
   musicGroupPaymentCalenders: [],
   studentNum: 0,
-  phone: '',
-  username: '',
+  phone: "",
+  username: "",
 };
 export default {
   components: { Item },
   props: ["detail"],
-  data () {
+  data() {
     return {
       payVisible: false,
       ...initData,
     };
   },
   computed: {
-    musicGroupPaymentCalenderCourseSettingName () {
+    musicGroupPaymentCalenderCourseSettingName() {
       const active = this.musicGroupPaymentCalenderCourseSettings[0];
       if (active) {
         return active.name;
@@ -230,12 +263,12 @@ export default {
       return "";
     },
   },
-  mounted () {
+  mounted() {
     this.init();
   },
   methods: {
     numeral,
-    async init () {
+    async init() {
       try {
         const res = await musicGroupPaymentCalenderView({
           batchNo: this.detail.batchNo,
@@ -246,9 +279,9 @@ export default {
             this[key] = res.data[key];
           }
         }
-      } catch (error) { }
+      } catch (error) {}
     },
-  }
+  },
 };
 </script>
 <style lang="less" scoped>

+ 108 - 92
src/views/teamBuild/components/soundSetComponents/chioseMusic.vue

@@ -2,105 +2,106 @@
   <div>
     <div v-for="(music, index) in item.chioseMusic" :key="index">
       <div class="chioseMusic">
-        <div class="flexRow">
-          <p class="title">可选乐器{{ index + 1 }}:</p>
-          <el-select
-            style="width: 180px"
-            :disabled="basdisabled"
-            v-model="music.musical"
-            @change="
-              (val) => {
-                chioseMusic(val, music);
-              }
-            "
-          >
-            <el-option
-              v-for="(item, index) in item.goodsList"
-              :key="index"
-              :label="item.name"
-              :value="item.id"
-              :disabled="checkDisabled(item)"
-            >
-            </el-option>
-          </el-select>
-        </div>
-        <div class="flexRow">
-          <p class="title">乐器提供方式:</p>
-          <el-checkbox-group v-model="music.type" class="marginLeft10">
-            <el-checkbox :disabled="basdisabled" label="GROUP"
-              >团购</el-checkbox
+        <div class="flexRow bigFlex">
+          <div class="chioseWrap">
+            <p class="title">可选乐器{{ index + 1 }}:</p>
+            <el-select
+              style="width: 180px"
+              :disabled="basdisabled"
+              v-model="music.musical"
+              @change="
+                (val) => {
+                  chioseMusic(val, music);
+                }
+              "
             >
-            <el-checkbox :disabled="basdisabled" label="LEASE"
-              >租赁</el-checkbox
+              <el-option
+                v-for="(item, index) in item.goodsList"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+                :disabled="checkDisabled(item)"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="chioseWrap">
+            <p class="title">乐器提供方式:</p>
+            <el-checkbox-group v-model="music.type" class="marginLeft10">
+              <el-checkbox :disabled="basdisabled" label="GROUP"
+                >团购</el-checkbox
+              >
+              <el-checkbox :disabled="basdisabled" label="LEASE"
+                >租赁</el-checkbox
+              >
+              <el-checkbox :disabled="basdisabled" label="FREE"
+                >免费</el-checkbox
+              >
+            </el-checkbox-group>
+          </div>
+          <div class="chioseWrap">
+            <p
+              class="title"
+              v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('GROUP')
+                  : false
+              "
             >
-            <el-checkbox :disabled="basdisabled" label="FREE">免费</el-checkbox>
-          </el-checkbox-group>
-        </div>
-        <div class="flexRow">
-          <p
-            class="title"
-            v-show="
-              music.type && music.type.length > 0
-                ? music.type.includes('GROUP')
-                : false
-            "
-          >
-            团购价:
-          </p>
+              团购价:
+            </p>
 
-          <div
-            v-show="
-              music.type && music.type.length > 0
-                ? music.type.includes('GROUP')
-                : false
-            "
-            style="width: 180px"
-          >
-            <el-input type="number" v-model="music.groupPrice" disabled>
-              <template slot="append">元</template></el-input
+            <div
+              v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('GROUP')
+                  : false
+              "
+              style="width: 180px"
             >
+              <el-input type="number" v-model="music.groupPrice" disabled>
+                <template slot="append">元</template></el-input
+              >
+            </div>
           </div>
-          <p
-            class="title"
-            v-show="
-              music.type && music.type.length > 0
-                ? music.type.includes('LEASE')
-                : false
-            "
-          >
-            租赁押金:
-          </p>
-          <div
-            v-show="
-              music.type && music.type.length > 0
-                ? music.type.includes('LEASE')
-                : false
-            "
-            style="width: 180px"
-          >
-            <el-input
-              type="number"
-              v-model="music.borrowPrice"
-              :disabled="basdisabled"
+          <div class="chioseWrap">
+            <p
+              class="title"
+              v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('LEASE')
+                  : false
+              "
             >
-              <template slot="append">元</template></el-input
+              租赁押金:
+            </p>
+            <div
+              v-show="
+                music.type && music.type.length > 0
+                  ? music.type.includes('LEASE')
+                  : false
+              "
+              style="width: 180px"
             >
+              <el-input
+                type="number"
+                v-model="music.borrowPrice"
+                :disabled="basdisabled"
+              >
+                <template slot="append">元</template></el-input
+              >
+            </div>
+            <i
+              class="el-icon-close marginLeft10"
+              v-if="
+                item.chioseMusic.length > 1 &&
+                !basdisabled &&
+                (music.type.includes('LEASE') || music.type.includes('GROUP'))
+              "
+              @click="deleteMusic(music)"
+              style="font-size: 20px; cursor: pointer"
+            ></i>
           </div>
-          <!-- <div v-else
-               style="width:180px">
-            <el-input value="--"
-                      disabled> <template slot="append">元</template></el-input>
-          </div> -->
-          <i
-            class="el-icon-close marginLeft10"
-            v-if="
-              item.chioseMusic.length > 1 &&
-              !basdisabled &&
-              (music.type.includes('LEASE') || music.type.includes('GROUP'))
-            "
-            @click="deleteMusic(music)"
-            style="font-size: 20px; cursor: pointer"
-          ></i>
         </div>
         <div
           style="margin-top: 5px"
@@ -125,6 +126,10 @@
             </el-radio-group>
           </div>
         </div>
+        <!-- <div class="flexRow"></div> -->
+        <!-- <div class="flexRow">
+
+        </div> -->
       </div>
       <el-divider></el-divider>
     </div>
@@ -198,7 +203,7 @@ export default {
 <style lang="scss" scoped>
 .chioseMusic {
   width: 100%;
-  margin: 30px 0 0;
+  // margin: 30px 0 0;
 }
 .coreItemRow {
   padding-left: 20px;
@@ -227,5 +232,16 @@ p {
   padding-left: 20px;
   margin-top: 10px;
   width: 100%;
+  flex-wrap: wrap;
+}
+.bigFlex {
+  margin-bottom: -10px;
+}
+.chioseWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  align-items: center;
+  margin-bottom: 10px;
 }
 </style>

+ 1 - 3
src/views/teamBuild/components/teamBaseInfo.vue

@@ -63,9 +63,7 @@
             clearable
           >
             <el-option label="课程收费" :value="0"></el-option>
-            <el-option label="系统收费" :value="1"></el-option>
-            <el-option label="云教练收费" :value="2"></el-option>
-            <el-option label="云教练收费+" :value="3"></el-option>
+            <el-option label="会员收费" :value="1"></el-option>
           </el-select>
         </el-form-item>
 

+ 2 - 2
vue.config.js

@@ -17,9 +17,9 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // //  https://online.dayaedu.com
 // let target = 'https://online.dayaedu.com' //线上
 // let target = 'http://192.168.3.139:8000' // 箭河
-let target = 'http://192.168.3.148:8000' //邹璇
+// let target = 'http://192.168.3.148:8000' //邹璇
 // let target = 'http://192.168.3.57:8000' //勇哥
-// let target = 'http://dev.dayaedu.com' // 开发环境
+let target = 'http://dev.dayaedu.com' // 开发环境
 // let target = 'https://test.dayaedu.com' //测试环境
 // let target = 'http://192.168.3.134' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/