Browse Source

Merge branch '0601Action' into 11/24SAAS

mo 3 năm trước cách đây
mục cha
commit
1bf9873d36

+ 2 - 3
src/main.js

@@ -104,13 +104,12 @@ document.addEventListener('mousewheel', function () {
     document.activeElement.blur()
   }
 })
+// 费用审核输入框回车之后失去焦点有问题,所以注释
 // document.addEventListener('keydown', function (event) {
-//   //  (document.activeElement,event.keyCode)
 //   if (event.keyCode == 13) {
-//     setTimeout(res => {
+//     setTimeout(() => {
 //       document.activeElement.blur()
 //     }, 300)
-
 //   }
 // })
 /**

+ 7 - 0
src/views/auditList/api.js

@@ -0,0 +1,7 @@
+import request2 from '@/utils/request2'
+
+export const cloudCoachPaymentProgramAudit = data => request2({
+  url: '/api-web/cloudCoachPaymentProgram/audit',
+  data,
+  method: 'post',
+})

+ 26 - 371
src/views/auditList/index.vue

@@ -1,393 +1,48 @@
-
 <template>
   <div class="m-container">
     <h2>
       <div class="squrt"></div>
-      费用审核列表
+      费用审核
     </h2>
     <div class="m-core">
-      <!-- 搜索标题 -->
-      <save-form
-        :inline="true"
-        class="searchForm"
-        ref="searchForm"
-        :model.sync="searchForm"
-      >
-        <el-form-item>
-          <el-input
-            v-model.trim="searchForm.search"
-            clearable
-            @keyup.enter.native="search"
-            placeholder="乐团名称、编号"
-          ></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            class="multiple"
-            v-model.trim="searchForm.organId"
-            filterable
-            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-select
-            class="multiple"
-            v-model.trim="searchForm.paymentType"
-            filterable
-            clearable
-            placeholder="申请类型"
-          >
-            <el-option
-              v-for="(item, index) in paymentTypeList"
-              :key="index"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-select
-            class="multiple"
-            v-model.trim="searchForm.status"
-            filterable
-            clearable
-            placeholder="审核状态"
-          >
-            <el-option
-              v-for="(item, index) in statusList"
-              :key="index"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button @click="search" type="primary">搜索</el-button>
-          <el-button @click="reset" type="danger">重置</el-button>
-          <auth
-            auths="musicGroupPaymentCalender/batchAuditing"
-            style="margin-left: 10px"
-          >
-            <el-button
-              @click="typesStatus = true"
-              :disabled="!selList.length > 0"
-              type="primary"
-              >批量审核</el-button
-            >
-          </auth>
-        </el-form-item>
-      </save-form>
-      <div class="tableWrap">
-        <el-table
-          :data="tableList"
-          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-          @selection-change="handleSelectionChange"
-        >
-          <el-table-column
-            fixed="left"
-            type="selection"
-            width="55"
-            :selectable="selectable"
-          ></el-table-column>
-          <el-table-column align="center" prop="organName" label="分部名称">
-            <template slot-scope="scope">
-              <copy-text>{{ scope.row.organName }}</copy-text>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            width="200px"
-            prop="musicGroupName"
-            label="乐团名称"
-          >
-            <template slot-scope="scope">
-              <div>
-                <Tooltip :content="scope.row.musicGroupName" />
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            width="100px"
-            prop="musicGroupId"
-            label="乐团编号"
-          >
-            <template slot-scope="scope">
-              <copy-text>{{ scope.row.musicGroupId }}</copy-text>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="paymentType" label="收费模式">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.paymentType | auditPaymentType }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="paymentType" label="申请类型">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.paymentType | auditPaymentType }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="payUserType" label="订单类型">
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.payUserType | payOrderType }}
-              </div>
-            </template>
-          </el-table-column>
-          <!-- <el-table-column
-            align="center"
-            prop="addCourseTotalTime"
-            label="加课总时长(分钟)"
-          ></el-table-column> -->
-          <el-table-column
-            align="center"
-            prop="originalTotalAmount"
-            label="总原价(元)"
-          >
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="currentTotalAmount"
-            label="申请价格(元)"
-          >
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="memo"
-            width="100px"
-            label="备注"
-          >
-            <template slot-scope="scope">
-              <overflow-text width="80px" :text="scope.row.memo" />
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="auditMemo"
-            width="100px"
-            label="审核意见"
-          >
-            <template slot-scope="scope">
-              <overflow-text width="80px" :text="scope.row.auditMemo" />
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="operatorName"
-            label="申请人"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="status"
-            label="状态"
-            width="100px"
-          >
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.status | auditType }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="createTime"
-            label="申请时间"
-            width="140px"
-          >
-            <template slot-scope="scope">
-              <div>
-                {{ scope.row.createTime | dateForMinFormat }}
-              </div>
-            </template>
-          </el-table-column>
-          <!--  -->
-          <el-table-column align="center" label="操作" fixed="right">
-            <template slot-scope="scope">
-              <!--     'musicGroupPaymentCalender/auditListDetail/update'
-                       'musicGroupPaymentCalender/auditListDetail/look' -->
-              <el-button
-                @click="lookDetail(scope.row)"
-                type="text"
-                v-if="scope.row.status == 'AUDITING' && $helpers.permission('musicGroupPaymentCalender/auditListDetail/update')"
-              >
-                审核
-              </el-button>
-              <el-button
-                @click="lookDetail(scope.row)"
-                type="text"
-                v-if="scope.row.status != 'AUDITING' && $helpers.permission('musicGroupPaymentCalender/getDetail/look')"
-              >
-                查看
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <pagination
-          :total.sync="pageInfo.total"
-          sync
-          :page.sync="pageInfo.page"
-          :limit.sync="pageInfo.limit"
-          :page-sizes="pageInfo.page_size"
-          @pagination="getList"
-        />
-      </div>
+      <tab-router v-model.trim="activeIndex"
+               type="card">
+        <el-tab-pane label="乐团缴费"
+                     name="1"
+                     v-if="permission('/auditList/music')">
+          <musicGroup v-if="activeIndex === '1'" />
+        </el-tab-pane>
+        <el-tab-pane label="团练宝缴费"
+                     name="2"
+                     v-if="permission('cloudCoachPaymentProgram/queryPage/home')">
+          <member v-if="activeIndex === '2'" />
+        </el-tab-pane>
+      </tab-router>
     </div>
-    <el-dialog
-      title="申请详情"
-      width="900px"
-      :visible.sync="typeStatus"
-      v-if="typeStatus"
-    >
-      <review :detail="detail" @close="close" />
-    </el-dialog>
-    <el-dialog
-      title="批量审核"
-      width="700px"
-      :visible.sync="typesStatus"
-      v-if="typesStatus"
-    >
-      <audit
-        :selList="selList"
-        @close="typesStatus = false"
-        @submited="submited"
-      />
-    </el-dialog>
   </div>
 </template>
 <script>
-import pagination from "@/components/Pagination/index";
-import review from "@/views/resetTeaming/modals/review.vue";
-import audit from "./audit.vue";
-// import store from '@/store'
-import { getAuditList, getAuditListDetail } from "@/api/auditManager";
-import { getEmployeeOrgan } from "@/api/buildTeam";
-import Tooltip from "@/components/Tooltip/index";
-import { auditTypeList, auditPaymentTypeList } from "@/utils/searchArray";
-
-const initSearch = {
-  search: null,
-  paymentType: null,
-  status: "AUDITING",
-  organId: null,
-};
+import { permission } from "@/utils/directivePage";
+import musicGroup from "./musicGroup";
+import member from "./member";
 export default {
-  components: { pagination, Tooltip, review, audit },
-  name: "helpCategory",
+  name: "Main",
+  components: {
+    musicGroup,
+    member
+  },
   data() {
     return {
-      typesStatus: false,
-      selList: [],
-      paymentTypeList: auditPaymentTypeList,
-      organList: [],
-      statusList: auditTypeList,
-      searchForm: { ...initSearch },
-      tableList: [],
-
-      pageInfo: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
-      },
-      detail: null,
-      typeStatus: false,
+      activeIndex: null,
     };
   },
   mounted() {
-    this.$store.dispatch("setBranchs");
-    this.getList();
+    // console.log(permission('/main/main/allData/826'))
   },
   methods: {
-    selectable(row, index) {
-      return row.status == "AUDITING";
-    },
-    search() {
-      this.pageInfo.page = 1;
-      this.$refs.searchForm.save(this.searchForm);
-      this.$refs.searchForm.save(this.pageInfo, "page");
-      this.getList();
-    },
-    reset() {
-      this.searchForm = { ...initSearch };
-      this.search();
-    },
-    handleSelectionChange(arr) {
-      this.selList = arr;
-    },
-    getList() {
-      let params = {
-        page: this.pageInfo.page,
-        rows: this.pageInfo.limit,
-        ...this.searchForm,
-      };
-      getAuditList(params).then((res) => {
-        let result = res.data;
-        if (res.code == 200) {
-          this.tableList = result.rows;
-          this.pageInfo.total = result.total;
-        }
-      });
-    },
-
-    lookDetail(row) {
-      // this.detail = res.data
-      this.detail = {
-        id: row.id,
-        musicGroupId: row.musicGroupId,
-        status: row.status,
-        batchNo: row.batchNo,
-      };
-      this.typeStatus = true;
-    },
-    submited() {
-      this.pageInfo.page = 1;
-      this.getList();
-    },
-    close() {
-      this.typeStatus = false;
-      this.getList();
-    },
-  },
-  watch: {
-    typeStatus(val) {
-      if (!val) {
-        this.detail = null;
-      }
-    },
+    permission,
   },
 };
 </script>
-<style lang="scss" scoped>
-/deep/.el-date-editor.el-input {
-  width: 100% !important;
-}
-/deep/.el-select {
-  width: 100% !important;
-}
-/deep/.el-table .cell {
-  display: -webkit-box;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  -webkit-line-clamp: 3;
-  -webkit-box-orient: vertical;
-}
-/deep/.el-dialog__body {
-  padding: 10px 20px;
-}
-.newBand {
-  display: inline-block;
-
-}
+<style lang="scss" scope>
 </style>

+ 255 - 0
src/views/auditList/member.vue

@@ -0,0 +1,255 @@
+<template>
+  <div>
+    <div>
+      <el-form :inline="true" :model="searchForm">
+        <el-form-item prop="period">
+          <el-select
+            placeholder="团练宝单位"
+            clearable
+            v-model.trim="searchForm.period"
+            style="width: 100% !important"
+          >
+            <el-option label="月度" value="MONTH"></el-option>
+            <el-option label="季度" value="QUARTERLY"></el-option>
+            <el-option label="半年" value="YEAR_HALF"></el-option>
+            <el-option label="年度" value="YEAR"></el-option>
+            <!-- <el-option label="固定天数" value="DAY"></el-option> -->
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            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 prop="visitTime">
+            <el-date-picker
+              v-model.trim="searchForm.visitTime"
+              style="width: 410px"
+              type="daterange"
+              :picker-options="{
+                firstDayOfWeek: 1,
+              }"
+              :default-time="['00:00:00', '23:59:59']"
+              range-separator="至"
+              start-placeholder="创建开始日期"
+              end-placeholder="创建结束日期"
+            ></el-date-picker>
+          </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.status"
+            filterable
+            clearable
+            placeholder="审核状态"
+          >
+            <el-option label="审核中" value="AUDITING"></el-option>
+            <el-option label="拒绝" value="REJECT"></el-option>
+            <el-option label="开启缴费" value="OPEN"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="danger">搜索</el-button>
+          <el-button @click="onReSet" type="primary">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="id"
+            label="续费编号"
+          ></el-table-column>
+          <el-table-column align="center" prop="organName" label="分部名称">
+          </el-table-column>
+          <el-table-column align="center" prop="name" label="团练宝单位">
+            <template slot-scope="scope">
+              {{ scope.row.period | memberEnumType }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="memberNum" label="周期数">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="subjectName"
+            label="缴费金额(元)"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.actualAmount | moneyFormat(true) }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="type"
+            label="已缴费人数/总人数"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.paymentUserNum }}/{{ scope.row.userNum }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            label="创建人"
+            prop="operatorName"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="remark"
+            label="备注"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="memo"
+            width="100px"
+            label="审核意见"
+          >
+            <template slot-scope="scope">
+              <overflow-text width="80px" :text="scope.row.memo" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="operatorName"
+            label="申请人"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="status"
+            label="状态"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.status | auditType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="createTime"
+            label="创建时间"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="createTime"
+            label="审核时间"
+            width="140px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.auditTime | dateForMinFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                          label="操作">
+            <template slot-scope="scope">
+              <el-button type="text" v-if="scope.row.status == 'AUDITING' && $helpers.permission('cloudCoachPaymentProgram/audit')" @click="onDetail(scope.row)">审核</el-button>
+              <el-button type="text" v-if="scope.row.status != 'AUDITING' && $helpers.permission('studentCloudCoachPaymentDetails/queryPage')" @click="onDetail(scope.row)">详情</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+
+    <el-dialog
+      title="审核详情"
+      :visible.sync="recordVisible"
+      width="800px"
+      v-if="recordVisible"
+      append-to-body
+    >
+      <member-model :detail="selectDetail" @getList="getList" @close="recordVisible = false" />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import memberModel from './memberModel'
+import { cloudCoachPaymentProgramQueryPage } from '../studentManager/api'
+import { getTimes } from "@/utils";
+import { auditTypeList } from "@/utils/searchArray";
+export default {
+  components: { pagination, memberModel },
+  data() {
+    return {
+      recordVisible: false,
+      searchForm: {
+        visitTime: [],
+        period: null,
+        organId: null,
+        status: 'AUDITING',
+      },
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      selectDetail: null,
+      statusList: auditTypeList,
+    };
+  },
+  async mounted() {
+    await this.$store.dispatch("setBranchs");
+    this.getList()
+  },
+  methods: {
+    async getList() {
+      try {
+        const { visitTime, ...search } = this.searchForm
+        const res = await cloudCoachPaymentProgramQueryPage({
+          ...search,
+          ...getTimes(visitTime, ["startTime", "endTime"]),
+          page: this.rules.page,
+          rows: this.rules.limit,
+        });
+        this.rules.total = res.data.total;
+        this.tableList = res.data.rows;
+      } catch (e) { }
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm = {
+        visitTime: [],
+        period: null,
+      }
+      this.search()
+    },
+    onDetail(row) {
+      this.selectDetail = row
+      this.recordVisible = true
+    }
+  },
+};
+</script>

+ 91 - 0
src/views/auditList/memberModel.vue

@@ -0,0 +1,91 @@
+<template>
+  <div>
+    <descriptions :column="2" style="margin-bottom: 20px;">
+      <descriptions-item label="团练宝单位">{{ detail.period | memberEnumType }}</descriptions-item>
+      <descriptions-item label="周期数">{{ detail.memberNum }}</descriptions-item>
+      <descriptions-item label="缴费金额(元)">{{ detail.actualAmount | moneyFormat(true) }}</descriptions-item>
+      <descriptions-item label="已缴费人数/总人数">{{ detail.paymentUserNum }}/{{ detail.userNum }}</descriptions-item>
+      <descriptions-item label="创建人">{{ detail.operatorName }}</descriptions-item>
+      <descriptions-item label="创建时间">{{ detail.createTime }}</descriptions-item>
+      <descriptions-item label="备注">{{ detail.remark }}</descriptions-item>
+    </descriptions>
+
+    <template v-if="detail.status === 'AUDITING'">
+      <el-alert style="margin: 20px 0;"
+                title="审核意见"
+                :closable="false"
+                class="alert"
+                type="info">
+      </el-alert>
+      <el-form :model="form" ref="form">
+        <el-form-item prop="memo" :rules="[{ required: true, message: '请输入审核意见', trigger: 'blur' }]">
+          <el-input type="textarea"
+                :autosize="{ minRows: 2, maxRows: 4 }"
+                placeholder="请输入审核意见"
+                v-model="form.memo">
+      </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer"
+          class="dialog-footer">
+        <el-button type="primary"
+                  @click="submit(1)"
+                  v-if="permission('musicGroupPaymentCalender/auditPass/batchAuditing')">审核通过</el-button>
+        <el-button type="danger"
+                  @click="submit(0)"
+                  v-if="permission('musicGroupPaymentCalender/auditRefuse/batchAuditing')">驳回</el-button>
+        <el-button @click="$emit('close')">关 闭</el-button>
+      </div>
+    </template>
+  </div>
+</template>
+<script>
+import { permission } from '@/utils/directivePage'
+import { cloudCoachPaymentProgramAudit } from './api'
+export default {
+  props: ["detail"],
+  data () {
+    return {
+      form: {
+        memo: "",
+      }
+    };
+  },
+  mounted () {
+    console.log(this.detail, "detail");
+  },
+  methods: {
+    async submit (val) {
+      this.$refs.form.validate(async(_) => {
+        if(_) {
+          try {
+            const detail = this.detail
+            const str = val ? '通过' : '驳回'
+            await this.$confirm(`是否确认审核${str}`, '提示', {
+              type: 'warning'
+            })
+            await cloudCoachPaymentProgramAudit({
+              id: detail.id,
+              memo: this.form.memo,
+              status: val ? 'OPEN' : 'REJECT',
+            });
+            this.$message.success(`${str}成功`)
+            this.$emit('close')
+            this.$emit('getList')
+          } catch(error) {}
+        }
+      })
+    },
+    permission (str) {
+      return permission(str)
+    }
+  },
+};
+</script>
+<style lang="less" scoped>
+.dialog-footer {
+  margin-top: 20px;
+  display: block;
+  text-align: right;
+}
+</style>

+ 393 - 0
src/views/auditList/musicGroup.vue

@@ -0,0 +1,393 @@
+
+<template>
+  <div>
+    <!-- <h2>
+      <div class="squrt"></div>
+      费用审核列表
+    </h2> -->
+    <div>
+      <!-- 搜索标题 -->
+      <save-form
+        :inline="true"
+        class="searchForm"
+        ref="searchForm"
+        :model.sync="searchForm"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="乐团名称、编号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            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-select
+            class="multiple"
+            v-model.trim="searchForm.paymentType"
+            filterable
+            clearable
+            placeholder="申请类型"
+          >
+            <el-option
+              v-for="(item, index) in paymentTypeList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.status"
+            filterable
+            clearable
+            placeholder="审核状态"
+          >
+            <el-option
+              v-for="(item, index) in statusList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="primary">搜索</el-button>
+          <el-button @click="reset" type="danger">重置</el-button>
+          <auth
+            auths="musicGroupPaymentCalender/batchAuditing"
+            style="margin-left: 10px"
+          >
+            <el-button
+              @click="typesStatus = true"
+              :disabled="!selList.length > 0"
+              type="primary"
+              >批量审核</el-button
+            >
+          </auth>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column
+            fixed="left"
+            type="selection"
+            width="55"
+            :selectable="selectable"
+          ></el-table-column>
+          <el-table-column align="center" prop="organName" label="分部名称">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.organName }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            width="200px"
+            prop="musicGroupName"
+            label="乐团名称"
+          >
+            <template slot-scope="scope">
+              <div>
+                <Tooltip :content="scope.row.musicGroupName" />
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            width="100px"
+            prop="musicGroupId"
+            label="乐团编号"
+          >
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.musicGroupId }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="paymentType" label="收费模式">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.paymentType | auditPaymentType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="paymentType" label="申请类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.paymentType | auditPaymentType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="payUserType" label="订单类型">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.payUserType | payOrderType }}
+              </div>
+            </template>
+          </el-table-column>
+          <!-- <el-table-column
+            align="center"
+            prop="addCourseTotalTime"
+            label="加课总时长(分钟)"
+          ></el-table-column> -->
+          <el-table-column
+            align="center"
+            prop="originalTotalAmount"
+            label="总原价(元)"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="currentTotalAmount"
+            label="申请价格(元)"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="memo"
+            width="100px"
+            label="备注"
+          >
+            <template slot-scope="scope">
+              <overflow-text width="80px" :text="scope.row.memo" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="auditMemo"
+            width="100px"
+            label="审核意见"
+          >
+            <template slot-scope="scope">
+              <overflow-text width="80px" :text="scope.row.auditMemo" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="operatorName"
+            label="申请人"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="status"
+            label="状态"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.status | auditType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="createTime"
+            label="申请时间"
+            width="140px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.createTime | dateForMinFormat }}
+              </div>
+            </template>
+          </el-table-column>
+          <!--  -->
+          <el-table-column align="center" label="操作" fixed="right">
+            <template slot-scope="scope">
+              <!--     'musicGroupPaymentCalender/auditListDetail/update'
+                       'musicGroupPaymentCalender/auditListDetail/look' -->
+              <el-button
+                @click="lookDetail(scope.row)"
+                type="text"
+                v-if="scope.row.status == 'AUDITING' && $helpers.permission('musicGroupPaymentCalender/auditListDetail/update')"
+              >
+                审核
+              </el-button>
+              <el-button
+                @click="lookDetail(scope.row)"
+                type="text"
+                v-if="scope.row.status != 'AUDITING' && $helpers.permission('musicGroupPaymentCalender/getDetail/look')"
+              >
+                查看
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          :total.sync="pageInfo.total"
+          sync
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      title="审核详情"
+      width="900px"
+      :visible.sync="typeStatus"
+      v-if="typeStatus"
+    >
+      <review :detail="detail" @close="close" />
+    </el-dialog>
+    <el-dialog
+      title="批量审核"
+      width="700px"
+      :visible.sync="typesStatus"
+      v-if="typesStatus"
+    >
+      <audit
+        :selList="selList"
+        @close="typesStatus = false"
+        @submited="submited"
+      />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import review from "@/views/resetTeaming/modals/review.vue";
+import audit from "./audit.vue";
+// import store from '@/store'
+import { getAuditList, getAuditListDetail } from "@/api/auditManager";
+import { getEmployeeOrgan } from "@/api/buildTeam";
+import Tooltip from "@/components/Tooltip/index";
+import { auditTypeList, auditPaymentTypeList } from "@/utils/searchArray";
+
+const initSearch = {
+  search: null,
+  paymentType: null,
+  status: "AUDITING",
+  organId: null,
+};
+export default {
+  components: { pagination, Tooltip, review, audit },
+  name: "helpCategory",
+  data() {
+    return {
+      typesStatus: false,
+      selList: [],
+      paymentTypeList: auditPaymentTypeList,
+      organList: [],
+      statusList: auditTypeList,
+      searchForm: { ...initSearch },
+      tableList: [],
+
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      detail: null,
+      typeStatus: false,
+    };
+  },
+  mounted() {
+    this.$store.dispatch("setBranchs");
+    this.getList();
+  },
+  methods: {
+    selectable(row, index) {
+      return row.status == "AUDITING";
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.$refs.searchForm.save(this.searchForm);
+      this.$refs.searchForm.save(this.pageInfo, "page");
+      this.getList();
+    },
+    reset() {
+      this.searchForm = { ...initSearch };
+      this.search();
+    },
+    handleSelectionChange(arr) {
+      this.selList = arr;
+    },
+    getList() {
+      let params = {
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit,
+        ...this.searchForm,
+      };
+      getAuditList(params).then((res) => {
+        let result = res.data;
+        if (res.code == 200) {
+          this.tableList = result.rows;
+          this.pageInfo.total = result.total;
+        }
+      });
+    },
+
+    lookDetail(row) {
+      // this.detail = res.data
+      this.detail = {
+        id: row.id,
+        musicGroupId: row.musicGroupId,
+        status: row.status,
+        batchNo: row.batchNo,
+      };
+      this.typeStatus = true;
+    },
+    submited() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    close() {
+      this.typeStatus = false;
+      this.getList();
+    },
+  },
+  watch: {
+    typeStatus(val) {
+      if (!val) {
+        this.detail = null;
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-date-editor.el-input {
+  width: 100% !important;
+}
+/deep/.el-select {
+  width: 100% !important;
+}
+/deep/.el-table .cell {
+  display: -webkit-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+}
+/deep/.el-dialog__body {
+  padding: 10px 20px;
+}
+.newBand {
+  display: inline-block;
+
+}
+</style>

+ 7 - 1
src/views/studentManager/api.js

@@ -7,7 +7,6 @@ export const getMusicMemberList = data => request2({
   method: 'get',
 })
 
-
 // 添加
 export const add = (data) => request2({
   url: '/api-web/cloudCoachPaymentProgram/add',
@@ -15,6 +14,13 @@ export const add = (data) => request2({
   data
 })
 
+// 修改
+export const update = (data) => request2({
+  url: '/api-web/cloudCoachPaymentProgram/update',
+  method: 'post',
+  data
+})
+
 //
 export const cloudCoachPaymentProgramQueryPage = (data) => request2({
   url: '/api-web/cloudCoachPaymentProgram/queryPage',

+ 66 - 54
src/views/studentManager/modals/createMember.vue

@@ -13,6 +13,7 @@
           placeholder="团练宝单位"
           clearable
           v-model.trim="memberForm.period"
+          @change="getMemberList"
           style="width: 100% !important"
         >
           <el-option label="月度" value="MONTH"></el-option>
@@ -31,6 +32,7 @@
       >
         <el-input
           type="number"
+          @input="getMemberList"
           onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"
           v-model="memberForm.memberNum"
           placeholder="请输入团练宝周期"
@@ -39,18 +41,6 @@
       </el-form-item>
       <el-form-item
         label="缴费金额"
-        prop="amount"
-        v-show="false"
-      >
-        <el-input
-          type="number"
-          v-model="amount"
-          placeholder="请输入缴费金额"
-        >
-        </el-input>
-      </el-form-item>
-      <el-form-item
-        label="缴费金额"
         prop="actualAmount"
         :rules="[
           { required: true, message: '请输入缴费金额', trigger: 'blur' },
@@ -67,7 +57,7 @@
           <div slot="append">元/人</div>
         </el-input>
       </el-form-item>
-      <p style="color: red; padding: 0 0 20px 100px">若修改为0元则无需学员缴费,创建后即可进行激活操作</p>
+      <p style="color: red; padding: 0 0 20px 100px">若修改默认金额需审核通过后生效</p>
       <el-form-item label="备注" prop="remark"
         :rules="[
           { required: true, message: '请输入备注', trigger: 'blur' },
@@ -84,11 +74,11 @@
   </div>
 </template>
 <script>
-import { add } from "../api";
+import { add, update } from "../api";
 import { getmemberRankOrganizationFeeMapper } from '@/views/categroyManager/productSystem/api'
 import { sysConfigList } from "@/api/generalSettings"; // 平台的修改和查
 export default {
-  props: ["multipleSelection"],
+  props: ["multipleSelection", 'type'],
   data() {
     return {
       memberForm: {
@@ -104,41 +94,26 @@ export default {
     };
   },
   mounted() {
-    this.userIds = this.multipleSelection
-      .map((stu) => {
-        return stu.userId;
-      });
-    this.organId = this.multipleSelection[0].organId //
-    this.__init()
-  },
-  computed: {
-    amount() {
-      let money = 0
-      const memberForm = this.memberForm
-      const memberFeeSetting = this.memberFeeSetting
-      switch (memberForm?.period) {
-        case "MONTH": {
-          money = Number(memberFeeSetting.groupPurchaseMonthFee * memberForm.memberNum)
-          break;
-        }
-        case "QUARTERLY": {
-          money = Number(memberFeeSetting.groupPurchaseQuarterlyFee * memberForm.memberNum)
-          break;
-        }
-        case "YEAR_HALF": {
-          money = Number(memberFeeSetting.groupPurchaseHalfYearFee * memberForm.memberNum)
-          break;
-        }
-        case "YEAR": {
-          money = Number(memberFeeSetting.groupPurchaseYearFee * memberForm.memberNum)
-          break;
-        }
-      }
-      if(memberForm.memberNum && memberForm.period) {
-        this.memberForm.actualAmount = money
+    console.log(this.multipleSelection)
+    if(this.type == 'update') {
+      const { memberNum, actualAmount, period, remark, organId, id } = this.multipleSelection
+      this.memberForm = {
+        memberNum,
+        period,
+        actualAmount,
+        remark,
+        id
       }
-      return money
+      this.organId = organId
+    } else {
+      this.userIds = this.multipleSelection
+        .map((stu) => {
+          return stu.userId;
+        });
+      this.organId = this.multipleSelection[0].organId //
     }
+
+    this.__init()
   },
   methods: {
     async __init() {
@@ -165,16 +140,53 @@ export default {
 
       }
     },
+    getMemberList() {
+      let money = 0
+      const memberForm = this.memberForm
+      const memberFeeSetting = this.memberFeeSetting
+      if(memberFeeSetting) {
+        switch (memberForm?.period) {
+          case "MONTH": {
+            money = Number(memberFeeSetting.groupPurchaseMonthFee * memberForm.memberNum)
+            break;
+          }
+          case "QUARTERLY": {
+            money = Number(memberFeeSetting.groupPurchaseQuarterlyFee * memberForm.memberNum)
+            break;
+          }
+          case "YEAR_HALF": {
+            money = Number(memberFeeSetting.groupPurchaseHalfYearFee * memberForm.memberNum)
+            break;
+          }
+          case "YEAR": {
+            money = Number(memberFeeSetting.groupPurchaseYearFee * memberForm.memberNum)
+            break;
+          }
+        }
+      }
+      if(memberForm.memberNum && memberForm.period) {
+        this.memberForm.actualAmount = money
+      }
+    },
     submit() {
       this.$refs.memberForm.validate(async (res) => {
+        console.log(res, this.type, 'res')
         if (res) {
           try {
-            await add({
-              ...this.memberForm,
-              userIds: this.userIds,
-              organId: this.organId
-            });
-            this.$message.success('创建团练宝成功')
+            if(this.type == 'update') {
+              await update({
+                ...this.memberForm,
+                organId: this.organId
+              });
+              this.$message.success('创建团练宝成功')
+            } else {
+              await add({
+                ...this.memberForm,
+                userIds: this.userIds,
+                organId: this.organId
+              });
+              this.$message.success('创建团练宝成功')
+            }
             this.$emit("close");
             this.$emit("submited");
           } catch (e) {

+ 0 - 0
src/views/studentManager/modals/js.js


+ 65 - 5
src/views/studentManager/studentGroupRecord.vue

@@ -20,6 +20,22 @@
             <!-- <el-option label="固定天数" value="DAY"></el-option> -->
           </el-select>
         </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            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 prop="visitTime">
             <el-date-picker
               v-model.trim="searchForm.visitTime"
@@ -51,6 +67,8 @@
             prop="id"
             label="续费编号"
           ></el-table-column>
+          <el-table-column align="center" prop="organName" label="分部名称">
+          </el-table-column>
           <el-table-column align="center" prop="name" label="团练宝单位">
             <template slot-scope="scope">
               {{ scope.row.period | memberEnumType }}
@@ -78,6 +96,18 @@
           </el-table-column>
           <el-table-column
             align="center"
+            prop="status"
+            label="审核状态"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.status | auditType }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
             label="创建人"
             prop="operatorName"
           >
@@ -95,7 +125,8 @@
           <el-table-column align="center"
                           label="操作">
             <template slot-scope="scope">
-              <el-button type="text" v-if="$helpers.permission('studentCloudCoachPaymentDetails/queryPage')" @click="onDetail(scope.row)">详情</el-button>
+              <el-button type="text" v-if="scope.row.status == 'REJECT' && $helpers.permission('cloudCoachPaymentProgram/update')" @click="onUpdate(scope.row)">修改</el-button>
+              <el-button type="text" v-if="scope.row.status != 'REJECT' && $helpers.permission('studentCloudCoachPaymentDetails/queryPage')" @click="onDetail(scope.row)">详情</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -119,22 +150,43 @@
     >
       <recordDetail :detail="selectDetail"  @close="recordVisible = false" />
     </el-dialog>
+
+    <el-dialog
+      title="修改团练宝缴费"
+      width="500px"
+      :visible.sync="memberVisible"
+    >
+      <createMember
+        ref="addMember"
+        v-if="memberVisible"
+        type='update'
+        :multipleSelection="selectDetail"
+        @close="memberVisible = false"
+        @submited="getList"
+      />
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="memberVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitAddMember">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import { queryInactive } from '@/views/resetTeaming/api'
 import recordDetail from '@/views/studentManager/modals/recordDetail'
 import { cloudCoachPaymentProgramQueryPage } from './api'
+import createMember from "./modals/createMember";
 import { getTimes } from "@/utils";
 export default {
-  components: { pagination, recordDetail },
+  components: { pagination, recordDetail, createMember },
   data() {
     return {
       recordVisible: false,
+      memberVisible: false,
       searchForm: {
         visitTime: [],
         period: null,
+        organId: null,
       },
       tableList: [],
       rules: {
@@ -147,7 +199,8 @@ export default {
       selectDetail: null,
     };
   },
-  mounted() {
+  async mounted() {
+    await this.$store.dispatch("setBranchs");
     this.getList()
   },
   methods: {
@@ -178,7 +231,14 @@ export default {
     onDetail(row) {
       this.selectDetail = row
       this.recordVisible = true
-    }
+    },
+    onUpdate(row) {
+      this.memberVisible = true
+      this.selectDetail = row
+    },
+    submitAddMember() {
+      this.$refs.addMember.submit();
+    },
   },
 };
 </script>