Browse Source

Merge branch '11/24SAAS' of http://git.dayaedu.com/yonge/dy-admin-manager into 11/24SAAS

mo 3 years ago
parent
commit
6d59ff79f4

+ 3 - 0
src/router/index.js

@@ -142,6 +142,7 @@ export const asyncRoutes = {
   main: () => import('@/views/main/index'),
   // 内容管理
   contentManager: () => import('@/views/contentManager/index'),
+  platformIndex: () => import('@/views/contentManager/platformIndex'),
   accompaniment: () => import('@/views/accompaniment'),
   contentOperation: () => import('@/views/contentManager/contentOperation'),
   // 系统日志
@@ -241,6 +242,8 @@ export const asyncRoutes = {
   globalMusicGroup: () => import('@/views/categroyManager/globalMusicGroup'),
   // 全局产品设置
   productSystem: () => import('@/views/categroyManager/productSystem'),
+  memberFeeSet: () => import('@/views/categroyManager/productSystem/memberFeeSet'),
+  memberSet: () => import('@/views/categroyManager/productSystem/memberSet'),
   // 侧边栏管理
   setSilder: () => import('@/views/setSilder/addSilder'),
   // 乐团老师点名记录

+ 12 - 0
src/store/modules/permission.js

@@ -865,6 +865,18 @@ function setDetailRoute(accessedRoutes) {
           activeMenu: '/organManager/organList',
           id: '4652'
         }
+      }, {
+        name: '扣费记录',
+        path: 'chargingRecord',
+        component: () => import('@/views/tenantSetting/chargingRecord.vue'),
+        hidden: true,
+        meta: {
+          noCache: '1',
+          title: '扣费记录',
+          belongTopMenu: "/federationManager",
+          activeMenu: '/productService',
+          id: '4741'
+        }
       }])
     }
   })

+ 5 - 1
src/views/categroyManager/productSystem/memberFeeSet.vue

@@ -1,5 +1,9 @@
 <template>
-  <div>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      会员收费标准
+    </h2>
     <save-form
       :inline="true"
       class="searchForm"

+ 5 - 1
src/views/categroyManager/productSystem/memberSet.vue

@@ -1,5 +1,9 @@
 <template>
-  <div>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      会员设置
+    </h2>
     <save-form
       :inline="true"
       class="searchForm"

+ 4 - 4
src/views/contentManager/index.vue

@@ -19,12 +19,12 @@
                      name="1">
           <information v-if="activeName == 1" />
         </el-tab-pane>
-        <el-tab-pane label="专项训练"
+        <!-- <el-tab-pane label="专项训练"
                      v-if="permissionList.training"
                      lazy
                      name="2">
           <training v-if="activeName == 2" />
-        </el-tab-pane>
+        </el-tab-pane> -->
         <el-tab-pane label="闪页管理"
                      v-if="permissionList.flashPage"
                      lazy
@@ -37,7 +37,7 @@
                      name="4">
           <banner  v-if="activeName == 4" />
         </el-tab-pane>
-        <el-tab-pane label="APP按钮管理"
+        <!-- <el-tab-pane label="APP按钮管理"
                      v-if="permissionList.appPage"
                      lazy
                      name="5">
@@ -48,7 +48,7 @@
                      lazy
                      name="6">
           <knowledge  v-if="activeName == 6" />
-        </el-tab-pane>
+        </el-tab-pane> -->
         <el-tab-pane label="广告管理"
                      v-if="permissionList.advert"
                      lazy

+ 115 - 0
src/views/contentManager/platformIndex.vue

@@ -0,0 +1,115 @@
+<template>
+  <div class='m-container'>
+    <h2>
+      <div class="squrt"></div>平台内容管理
+    </h2>
+    <div class="m-core">
+      <tab-router v-model.trim="activeName"
+               type="card"
+               @tab-click="handleClick">
+        <!-- <el-tab-pane label="精彩活动"
+                     v-if="permissionList.activity"
+                     lazy
+                     name="0">
+          <activity v-if="activeName == 0" />
+        </el-tab-pane>
+        <el-tab-pane label="热门资讯"
+                     v-if="permissionList.information"
+                     lazy
+                     name="1">
+          <information v-if="activeName == 1" />
+        </el-tab-pane> -->
+        <el-tab-pane label="专项训练"
+                     v-if="permissionList.training"
+                     lazy
+                     name="2">
+          <training v-if="activeName == 2" />
+        </el-tab-pane>
+        <!-- <el-tab-pane label="闪页管理"
+                     v-if="permissionList.flashPage"
+                     lazy
+                     name="3">
+          <flashPage v-if="activeName == 3" />
+        </el-tab-pane>
+        <el-tab-pane label="BANNER管理"
+                     v-if="permissionList.banner"
+                     lazy
+                     name="4">
+          <banner  v-if="activeName == 4" />
+        </el-tab-pane> -->
+        <el-tab-pane label="APP按钮管理"
+                     v-if="permissionList.appPage"
+                     lazy
+                     name="5">
+          <appPage v-if="activeName == 5" />
+        </el-tab-pane>
+        <el-tab-pane label="知识库管理"
+                     v-if="permissionList.knowledge"
+                     lazy
+                     name="6">
+          <knowledge  v-if="activeName == 6" />
+        </el-tab-pane>
+        <!-- <el-tab-pane label="广告管理"
+                     v-if="permissionList.advert"
+                     lazy
+                     name="7">
+          <advert v-if="activeName == 7" />
+        </el-tab-pane>
+        <el-tab-pane label="系统通知"
+                     v-if="permissionList.systemNotify"
+                     lazy
+                     name="8">
+          <systemNotify v-if="activeName == 8" />
+        </el-tab-pane> -->
+      </tab-router>
+    </div>
+  </div>
+</template>
+<script>
+import banner from './components/banner'
+import activity from './components/activity'
+import information from './components/information'
+import training from './components/training'
+import flashPage from './components/flashPage'
+import appPage from './components/appPage'
+import knowledge from './components/knowledge'
+import advert from './components/advert'
+import systemNotify from './components/systemNotify'
+import { permission } from '@/utils/directivePage'
+// 精彩活动 1 0
+// 热门资讯 2 1
+// 专项训练 4 2
+// 闪页管理 5  3
+// BANNER管理 3 4
+// APP按钮管理 6 5
+// 知识库管理 7 6
+// 广告管理 8 7
+// 系统通知 19 8
+export default {
+  components: { banner, activity, information, training, flashPage, appPage, knowledge, advert, systemNotify },
+  name: 'contentManager',
+  data () {
+    return {
+      activeName: "0",
+      permissionList: {
+        banner: permission('/contentManager/banner'),
+        activity: permission('/contentManager/activity'),
+        information: permission('/contentManager/information'),
+        training: permission('/contentManager/training'),
+        flashPage: permission('/contentManager/flashPage'),
+        appPage: permission('/contentManager/appPage'),
+        knowledge: permission('/contentManager/knowledge'),
+        advert: permission('/contentManager/advert'),
+        systemNotify: permission('/contentManager/systemNotify'),
+      }
+    }
+  },
+  methods: {
+    handleClick (val, event) {
+      this.activeName = val.name
+    }
+  }
+}
+</script>
+<style lang="scss">
+</style>

+ 6 - 0
src/views/productService/api.js

@@ -9,4 +9,10 @@ export const rechargeCheck = (data) => request2({
   url: '/api-web/tenantInfo/rechargeCheck/' + data.orderNo,
   method: 'get',
   hideLoading: true,
+})
+
+export const queryTenantInfoSumm = (data) => request2({
+  url: `/api-web/tenantInfo/queryTenantInfoSumm`,
+  method: 'get',
+  params: data
 })

+ 1 - 1
src/views/productService/components/cloudRecharge.vue

@@ -5,7 +5,7 @@
       <div class="tips_container">
         1.系统根据线上课课程人数(含老师)进行扣费;<br />
         2.用户人数2人(含老师)每分钟0.2元;用户人数3人(含老师)每分钟0.5元;<br />
-        3.每节线上课平台赠送10分钟免费时长分别为课前5分钟及课后5分钟,总送时长不计算费用;<br />
+        3.每节线上课平台赠送10分钟免费时长分别为课前5分钟及课后5分钟,总送时长不计算费用;<br />
         4.扣费金额按排课人数计算,无论实际到课人数是否为排课人数,都会按照排课人数扣费<br />
         5.课程结束后费用立即结算。
       </div>

+ 104 - 4
src/views/productService/index.vue

@@ -5,6 +5,50 @@
     </h2>
     <div class="m-core">
       <!-- navMenu    -->
+      <div class="descriptions-container">
+        <div class="descriptions">
+          <div class="title">服务信息</div>
+          <el-row>
+            <el-col :span="15">当前版本:<span class="color">{{ dataInfo.serverName }}</span></el-col>
+            <el-col :span="9">学员上限:<span class="color">{{ dataInfo.studentNum }}</span> / {{ dataInfo.studentUpLimit }}人</el-col>
+            <el-col :span="15">服务有效期:<span class="color" v-if="dataInfo.expiryDate && dataInfo.expiryDateEnd">{{ dataInfo.expiryDate }} ~ {{ dataInfo.expiryDateEnd }}</span></el-col>
+            <el-col :span="9">有效期剩余:<span class="color">{{ dataInfo.validRemaining }}天</span></el-col>
+          </el-row>
+        </div>
+
+        <div class="descriptions small">
+          <div class="title">云教室余额 <el-button type="text" size="small" @click="onDetail">扣费记录 >></el-button></div>
+          <el-row>
+            <el-col :span="24">云教室总余额:<span class="color">{{ dataInfo.sumBalance | hasMoneyFormat }}</span></el-col>
+            <!-- <el-col :span="24">冻结余额<el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">已排线上课预计服务费用总和,课程结束后扣减</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>:<span class="color">{{ dataInfo.frozenAmount | hasMoneyFormat }}</span></el-col>
+            <el-col :span="24">可用余额<el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">排线上课时系统计算预计服务费用,从该余额中进行冻结,若预计服务费用大于该余额则不可排线上课</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>:<span class="color">{{ dataInfo.balance | hasMoneyFormat }}</span></el-col> -->
+          </el-row>
+        </div>
+      </div>
+
+
       <tab-router
         v-model="activeIndex"
         ref="tab"
@@ -31,16 +75,28 @@
 <script>
 import cloudRecharge from '@/views/productService/components/cloudRecharge'
 import { permission } from "@/utils/directivePage";
-import { musicGroupType } from "@/constant";
+import { queryTenantInfoSumm } from "./api";
+import dayjs from 'dayjs'
 //    forecastName,
 export default {
   components: {
-    cloudRecharge,
+    cloudRecharge
   },
   name: "productService",
   data() {
     return {
       activeIndex: "2",
+      dataInfo: {
+        serverName: null,
+        expiryDate: null,
+        expiryDateEnd: null,
+        studentNum: 0,
+        studentUpLimit: 0,
+        validRemaining: 0,
+        sumBalance: 0,
+        frozenAmount: 0,
+        balance: 0
+      }
     };
   },
   mounted() {
@@ -48,13 +104,57 @@ export default {
   },
   methods: {
     permission,
-    __init() {
+    async __init() {
+      try {
+        const res = await queryTenantInfoSumm()
+        console.log(res)
+        this.dataInfo = res.data || {}
+        this.dataInfo.expiryDate = res.data.expiryDate ? dayjs(res.data.expiryDate).format('YYYY-MM-DD') : null
+        this.dataInfo.expiryDateEnd = res.data.expiryDateEnd ? dayjs(res.data.expiryDateEnd).format('YYYY-MM-DD') : null
+        this.dataInfo.validRemaining = res.data.validRemaining || 0
+      } catch(e) { }
     },
-
+    onDetail() {
+      this.$router.push('/federationManager/chargingRecord')
+    }
   }
 };
 </script>
 <style lang="scss" scoped>
+.descriptions-container {
+  display: flex;
+  align-items: center;
+  .descriptions {
+    width: 600px;
+    min-height: 170px;
+    background-color: #f7f7f7;
+    border-radius: 5px;
+    &.small {
+      margin-left: 15px;
+      width: 300px;
+    }
 
+    .title {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 12px 15px;
+      line-height: 1.5;
+      font-size: 18px;
+      font-weight: bold;
+    }
+  }
+  .el-row {
+    padding: 0 12px;
+  }
+  .el-col {
+    height: 30px;
+    line-height: 30px;
+  }
+  .color {
+    color: var(--color-primary);
+    font-weight: bold;
+  }
+}
 </style>
 

+ 10 - 1
src/views/tenantSetting/chargingRecord.vue

@@ -1,8 +1,11 @@
 <template>
   <div class="m-container">
-    <h2>
+    <!-- <h2>
       <div class="squrt"></div>
       扣费记录
+    </h2> -->
+    <h2>
+      <el-page-header @back="onCancel" content="扣费记录"></el-page-header>
     </h2>
     <save-form
       :inline="true"
@@ -243,6 +246,12 @@ export default {
         this.tableList = rows;
       } catch (e) {}
     },
+    onCancel () {
+      this.$store.dispatch('delVisitedViews', this.$route)
+      this.$router.push({
+        path: "/productService"
+      });
+    },
     search() {
       this.pageInfo.page = 1;
       this.$refs.searchForm.save(this.searchForm);

+ 1 - 25
src/views/tenantSetting/tenantTradeManager.vue

@@ -29,19 +29,6 @@
           v-model.trim="searchForm.orderNo"
         ></el-input>
       </el-form-item>
-      <el-form-item prop="tenantId" v-if="baseTenantId < 0">
-        <!-- 小于0则是平台 -->
-        <el-select
-          v-model.trim="searchForm.tenantId"
-          filterable
-          multiple
-          collapse-tags
-          placeholder="机构名称"
-          clearable
-        >
-          <el-option v-for="(item, index) in  tenantList" :key="index" :label="item.name" :value="item.id"></el-option>
-        </el-select>
-      </el-form-item>
       <el-form-item prop="orderType">
         <el-select
           v-model.trim="searchForm.orderType"
@@ -153,7 +140,6 @@
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import { tenantInfoQueryPage } from "../organManager/api";
 import { tenantOrderRecordQueryPage } from "./api";
 import { tenantStatus } from '@/constant'
 import { dealStatus } from "@/utils/searchArray";
@@ -162,7 +148,6 @@ import { getTimes } from "@/utils";
 const initSearch = {
   transNo: null,
   orderNo: null,
-  tenantId: [],
   orderType: null,
   orderState: null,
   createTimer: [],
@@ -185,26 +170,17 @@ export default {
         page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       searchForm: { ...initSearch },
-      tenantList: []
     };
   },
   async mounted() {
-    await this.getTenant()
     this.getList();
   },
   methods: {
-    async getTenant() {
-      try {
-        const res = await tenantInfoQueryPage({ page: 1, rows: 999 }, )
-        this.tenantList = res.data?.rows || []
-      } catch(e) {}
-    },
     async getList() {
       try {
-        let { createTimer, tenantId, ...reset } = this.searchForm;
+        let { createTimer, ...reset } = this.searchForm;
         const res = await tenantOrderRecordQueryPage({
           ...reset,
-          tenantId: tenantId.join(','),
           ...getTimes(createTimer, ["startDate", "endDate"], "YYYY-MM-DD"),
           page: this.pageInfo.page,
           rows: this.pageInfo.limit,

+ 1 - 1
src/views/vipClass/vipList.vue

@@ -2,7 +2,7 @@
   <div class="m-container">
     <h2>
       <div class="squrt"></div>
-      VIP/乐理课管理
+      VIP管理
     </h2>
     <div class="m-core">
       <!-- 搜索类型 -->