浏览代码

添加搜索条件与首页数据

lex-xin 3 年之前
父节点
当前提交
34206b87e9
共有 4 个文件被更改,包括 111 次插入46 次删除
  1. 23 0
      src/constant/index.js
  2. 1 25
      src/utils/vueFilter.js
  3. 33 5
      src/views/accompaniment/index.vue
  4. 54 16
      src/views/main/baseinfo/management.vue

+ 23 - 0
src/constant/index.js

@@ -302,3 +302,26 @@ export const couponType = {
   FULL_REDUCTION:'满减',
   DISCOUNT:'折扣'
 }
+
+export const orderType = {
+  APPLY: "报名",
+  RENEW: "续费",
+  MEMBER: "会员购买",
+  SMALL_CLASS_TO_BUY: "VIP购买",
+  SPORADIC: '零星收费',
+  LUCK: "福袋活动",
+  PRACTICE: '网管课',
+  PRACTICE_GROUP_BUY: '网管课购买',
+  PRACTICE_GROUP_RENEW: '网管课续费',
+  REPAIR: '乐器维修',
+  OUTORDER: '外部收入',
+  GOODS_SELL: '商品销售',
+  SUBJECT_CHANGE: '声部更换',
+  DOUBLE_ELEVEN2020: '双十一活动',
+  DEGREE: '儿童节活动',
+  DEGREE_REGISTRATION: '考级报名',
+  MAINTENANCE: '乐器保养',
+  REPLACEMENT: '乐器置换',
+  ADD_STUDENT: '进行中乐团加学员',
+  OTHER: "其他",
+}

+ 1 - 25
src/utils/vueFilter.js

@@ -256,31 +256,7 @@ Vue.filter('workType', value => {
   return constant.workType[value]
 })
 // 交易类型
-Vue.filter('orderType', value => {
-  let template = {
-    APPLY: "报名",
-    RENEW: "续费",
-    MEMBER: "会员购买",
-    SMALL_CLASS_TO_BUY: "VIP购买",
-    SPORADIC: '零星收费',
-    LUCK: "福袋活动",
-    PRACTICE: '网管课',
-    PRACTICE_GROUP_BUY: '网管课购买',
-    PRACTICE_GROUP_RENEW: '网管课续费',
-    REPAIR: '乐器维修',
-    OUTORDER: '外部收入',
-    GOODS_SELL: '商品销售',
-    SUBJECT_CHANGE: '声部更换',
-    DOUBLE_ELEVEN2020: '双十一活动',
-    DEGREE: '儿童节活动',
-    DEGREE_REGISTRATION: '考级报名',
-    MAINTENANCE: '乐器保养',
-    REPLACEMENT: '乐器置换',
-    ADD_STUDENT: '进行中乐团加学员',
-    OTHER: "其他",
-  }
-  return template[value]
-})
+Vue.filter('orderType', value => constant.orderType[value])
 
 //
 Vue.filter('paymentChannelType', value => {

+ 33 - 5
src/views/accompaniment/index.vue

@@ -45,6 +45,15 @@
             <el-option value="SMART_PRACTICE" label="智能陪练" ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item prop="categoriesId">
+          <el-cascader v-model="searchForm.categoriesId"
+                    style="width:100%"
+                    :options="tree"
+                    placeholder="请选择分类"
+                    clearable
+                    :show-all-levels="false"
+                    :props="treeProps"></el-cascader>
+        </el-form-item>
         <el-form-item prop="rankType">
           <el-select v-model="searchForm.rankType" clearable filterable placeholder="请选择是否收费">
             <el-option :value="0" label="免费"></el-option>
@@ -176,7 +185,7 @@
             <el-button
               type="text"
               @click="edit(scope.row)"
-              :disabled="scope.row.showFlag"
+              :disabled="!!scope.row.showFlag"
               v-permission="'sysMusicScore/update'"
               >修改</el-button
             >
@@ -237,10 +246,11 @@
 import saveform from "@/components/save-form";
 import pagination from "@/components/Pagination/index";
 import { songUseType } from "@/constant";
-import { QueryPage, Del, Show } from "./api";
+import { QueryPage, Del, Show, queryTree } from "./api";
 import form from "./modals/form";
 import { vaildStudentUrl } from '@/utils/validate'
 import { getToken } from '@/utils/auth'
+import deepClone from '@/helpers/deep-clone/'
 export default {
   name: "accompaniment",
   components: {
@@ -261,6 +271,7 @@ export default {
         search: "",
         type: "",
         subjectId: "",
+        categoriesId: null,
         clientType:'',
         rankType: null,
         showFlag: null
@@ -274,6 +285,12 @@ export default {
       },
       detail: null,
       visible: false,
+      tree: [],
+      treeProps: {
+        value: 'id',
+        label: 'name',
+        children: 'sysMusicScoreCategoriesList',
+      }
     };
   },
   computed: {
@@ -286,15 +303,26 @@ export default {
       return t1 + t2 + "伴奏";
     },
   },
-  mounted() {
+  async mounted() {
     this.$store.dispatch("setSubjects");
-    this.FetchList();
+    await this.FetchTree()
+    await this.FetchList();
   },
   methods: {
+    async FetchTree() {
+      try {
+        const res = await queryTree()
+        this.tree = res.data
+      } catch (error) {
+
+      }
+    },
     async FetchList() {
       try {
+        let { categoriesId, ...search } = deepClone(this.searchForm)
         const res = await QueryPage({
-          ...this.searchForm,
+          ...search,
+          categoriesId: categoriesId && categoriesId.length > 0 ? categoriesId.pop() : null,
           page: this.rules.page,
           rows: this.rules.limit,
         });

+ 54 - 16
src/views/main/baseinfo/management.vue

@@ -81,22 +81,54 @@
           :class="{ active: active === key }"
           @click="active = key"
         >
-          <span>
-            {{ item.title + "(元)" }}
-            <el-tooltip
-              v-if="item.desc"
-              :content="item.desc"
-              :open-delay="0.3"
-              placement="top"
-            >
-              <i
-                style="margin-left: 5px; cursor: pointer"
-                class="el-icon-warning-outline"
-              />
-            </el-tooltip>
-          </span>
-          <!--  12345678901.23 -->
-          <span> <count-to :endVal="item.percent" :decimals="2" /></span>
+          <template v-if="item.dataType != 'OTHER_AMOUNT'">
+            <span>
+              {{ item.title + "(元)" }}
+              <!-- {{ item.dataType == 'OTHER_AMOUNT' ? 'other' : null }} -->
+              <el-tooltip
+                v-if="item.desc"
+                :content="item.desc"
+                :open-delay="0.3"
+                placement="top"
+              >
+                <i
+                  style="margin-left: 5px; cursor: pointer"
+                  class="el-icon-warning-outline"
+                />
+              </el-tooltip>
+            </span>
+            <!--  12345678901.23 -->
+            <span> <count-to :endVal="item.percent" :decimals="2" /></span>
+          </template>
+          <el-popover
+            placement="top"
+            width="400"
+            v-else
+            trigger="hover">
+            <descriptions :column="1" v-if="(item.indexMonthDataDetail || []).length > 0">
+              <template v-for="(item, index) in item.indexMonthDataDetail || []">
+                <descriptions-item :key="index" :label="orderType[item.orderType]">{{ item.totalNum | moneyFormat }}元
+                </descriptions-item>
+              </template>
+            </descriptions>
+            <div slot="reference">
+              <span>
+                {{ item.title + "(元)" }}
+                <el-tooltip
+                  v-if="item.desc"
+                  :content="item.desc"
+                  :open-delay="0.3"
+                  placement="top"
+                >
+                  <i
+                    style="margin-left: 5px; cursor: pointer"
+                    class="el-icon-warning-outline"
+                  />
+                </el-tooltip>
+              </span>
+              <span style="font-size: 18px; display: block; color: rgba(0, 0, 0, 0.85);"> <count-to :endVal="item.percent" :decimals="2" /></span>
+            </div>
+          </el-popover>
         </statistic-item>
       </statistic>
     </div>
@@ -143,6 +175,7 @@ import searchHeader from "./modals/searchHeader";
 import { getIndex } from "../api";
 import { getTimes } from "@/utils";
 import { descs, chioseNum } from "../constant";
+import { orderType } from '@/constant'
 
 export default {
   props: ["data", "search"],
@@ -317,6 +350,7 @@ export default {
     //   stack: { 总收入: [`现金收入`, `余额收入`] },
     // };
     return {
+      orderType,
       active: "SHOULD_INCOME_MONEY",
       timer: "day",
       mdate: [],
@@ -326,6 +360,7 @@ export default {
     };
   },
   mounted() {
+    console.log(this.orderType)
     this.init();
   },
   methods: {
@@ -397,6 +432,9 @@ export default {
 };
 </script>
 <style lang="less" scoped>
+/deep/.description-title {
+  margin-bottom: 0;
+}
 #management .statistic .statistic-content > span {
   &:first-child {
     font-size: 14px !important;