Browse Source

流水管理 移动端

natasha 1 week ago
parent
commit
a2fbd6f8f3
2 changed files with 370 additions and 202 deletions
  1. 5 5
      src/components/NavMenu.vue
  2. 365 197
      src/views/finance_manage/FlowManage.vue

+ 5 - 5
src/components/NavMenu.vue

@@ -291,15 +291,15 @@ export default {
 
             node: [
               {
+                title: "流水管理",
+                index: "flow_manage",
+                code: 40001,
+              },
+              {
                 title: "退款管理",
                 index: "refund_manage",
                 code: 40003,
               },
-              {
-                title: "发票管理",
-                index: "invoice_manage",
-                code: 40004,
-              },
             ],
           },
         ];

+ 365 - 197
src/views/finance_manage/FlowManage.vue

@@ -6,15 +6,22 @@
         class="manage-root-contain-left"
         :activeMenuIndex="activeMenuIndex"
       ></nav-menu>
-      <div class="manage-root-contain-right">
+      <div
+        class="manage-root-contain-right"
+        :class="[isPhone ? 'manage-root-contain-right-phone' : '']"
+      >
         <breadcrumb
           :breadcrumbList="breadcrumbList"
           class="breadcrumb-box"
+          :class="[isPhone ? 'breadcrumb-box-phone' : '']"
         ></breadcrumb>
         <div class="personal-inner">
           <div class="common-title-box">
             <h3>交易流水</h3>
-            <div class="btn-box">
+            <span v-if="isPhone" @click="showSearch = !showSearch">{{
+              showSearch ? "收起查询条件" : "展开查询条件"
+            }}</span>
+            <div class="btn-box" v-if="!isPhone">
               <ul class="quick-search">
                 <li v-for="(itemq, indexq) in quickList" :key="indexq">
                   <a
@@ -44,175 +51,233 @@
               >
             </div>
           </div>
-          <div class="proceeds-box">
-            <div>
-              <h6>
-                收款<span>({{ total_count }}单)</span>
-              </h6>
-              <label v-if="proceedsPriceArr.length == 2"
-                >¥{{ proceedsPriceArr[0] }}.<b>{{ proceedsPriceArr[1] }}</b
-                ><span>元</span></label
-              >
-            </div>
-            <div>
-              <h6>退款</h6>
-              <label v-if="refundPriceArr.length == 2"
-                >¥{{ refundPriceArr[0] }}.<b>{{ refundPriceArr[1] }}</b
-                ><span>元</span></label
-              >
-            </div>
-          </div>
-          <div class="search-box">
-            <div class="search-item">
-              <label>搜索</label>
-              <el-input
-                placeholder="商品名称/用户名/单号/手机号"
-                v-model="searchInput"
-                maxlength="200"
-              >
-                <i
-                  slot="suffix"
-                  class="el-input__icon el-icon-search"
-                  @click="getList(1)"
-                  style="cursor: pointer"
-                ></i>
-              </el-input>
-            </div>
-            <div class="search-item">
-              <label>交易时间</label>
-              <el-date-picker
-                v-model="validity"
-                type="daterange"
+          <template v-if="showSearch">
+            <div class="btn-box" v-if="isPhone">
+              <ul class="quick-search">
+                <li v-for="(itemq, indexq) in quickList" :key="indexq">
+                  <a
+                    @click="qucikSearch(itemq, indexq)"
+                    :class="[quickIndex === indexq ? 'active' : '']"
+                    >{{ itemq.name }}</a
+                  >
+                  <span
+                    class="border"
+                    :class="[
+                      indexq !== quickList.length - 1 &&
+                      quickIndex !== indexq &&
+                      quickIndex - 1 !== indexq
+                        ? ''
+                        : 'border-no',
+                    ]"
+                  ></span>
+                </li>
+              </ul>
+              <el-button
+                type="primary"
                 size="small"
-                range-separator="-"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-                value-format="yyyy-MM-dd"
-                @change="
-                  quickIndex = null;
-                  getList(1);
-                "
+                @click="handleExport()"
+                :loading="exportLoading"
+                v-if="exportFlag"
+                >导出报表</el-button
               >
-              </el-date-picker>
             </div>
-            <div class="search-item">
-              <label>学段</label>
-              <el-select
-                v-model="searchStudy"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in $studyTypeAll"
-                  :key="item.study_phase"
-                  :label="item.study_phase_name"
-                  :value="item.study_phase"
+            <div class="proceeds-box">
+              <div>
+                <h6>
+                  收款<span>({{ total_count }}单)</span>
+                </h6>
+                <label v-if="proceedsPriceArr.length == 2"
+                  >¥{{ proceedsPriceArr[0] }}.<b>{{ proceedsPriceArr[1] }}</b
+                  ><span>元</span></label
                 >
-                </el-option>
-              </el-select>
-            </div>
-            <div class="search-item">
-              <label>商品类型</label>
-              <el-select
-                v-model="searchGoodsType"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in goodsTypeList"
-                  :key="item.value"
-                  :label="item.goods_name"
-                  :value="item.value"
+              </div>
+              <div>
+                <h6>退款</h6>
+                <label v-if="refundPriceArr.length == 2"
+                  >¥{{ refundPriceArr[0] }}.<b>{{ refundPriceArr[1] }}</b
+                  ><span>元</span></label
                 >
-                </el-option>
-              </el-select>
+              </div>
             </div>
-            <div class="search-item">
-              <label>是否使用兑换码</label>
-              <el-select
-                v-model="searchIsCDKEY"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in isCDKEYList"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
+            <div class="search-box">
+              <div class="search-item">
+                <label>搜索</label>
+                <el-input
+                  placeholder="商品名称/用户名/单号/手机号"
+                  v-model="searchInput"
+                  maxlength="200"
                 >
-                </el-option>
-              </el-select>
-            </div>
-            <div class="search-item">
-              <label>交易状态</label>
-              <el-select
-                v-model="searchStatus"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in transactionList"
-                  :key="item.status"
-                  :label="item.status_name"
-                  :value="item.status"
+                  <i
+                    slot="suffix"
+                    class="el-input__icon el-icon-search"
+                    @click="getList(1)"
+                    style="cursor: pointer"
+                  ></i>
+                </el-input>
+              </div>
+              <div class="search-item" v-if="isPhone">
+                <label>交易时间</label>
+                <el-date-picker
+                  v-model="validityStart"
+                  type="date"
+                  size="small"
+                  placeholder="开始日期"
+                  value-format="yyyy-MM-dd"
+                  @change="
+                    quickIndex = null;
+                    getList(1);
+                  "
                 >
-                </el-option>
-              </el-select>
-            </div>
-            <div class="search-item">
-              <label>客户所在机构</label>
-              <el-select
-                v-model="searchOrgid"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in orgList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
+                </el-date-picker>
+                <el-date-picker
+                  v-model="validityEnd"
+                  type="date"
+                  size="small"
+                  placeholder="结束日期"
+                  value-format="yyyy-MM-dd"
+                  @change="
+                    quickIndex = null;
+                    getList(1);
+                  "
                 >
-                </el-option>
-              </el-select>
-            </div>
-            <div class="search-item">
-              <label>客户所在省市</label>
-              <el-cascader
-                size="medium"
-                :options="$provinceCityListAll"
-                v-model="searchArea"
-                :props="props"
-                collapse-tags
-                clearable
-                @change="getList(1)"
-              >
-              </el-cascader>
-            </div>
-            <div class="search-item">
-              <label>支付渠道</label>
-              <el-select
-                v-model="searchChannel"
-                @change="getList(1)"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in channelList"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
+                </el-date-picker>
+              </div>
+              <div class="search-item" v-else>
+                <label>交易时间</label>
+                <el-date-picker
+                  v-model="validity"
+                  type="daterange"
+                  size="small"
+                  range-separator="-"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期"
+                  value-format="yyyy-MM-dd"
+                  @change="
+                    quickIndex = null;
+                    getList(1);
+                  "
+                >
+                </el-date-picker>
+              </div>
+              <div class="search-item">
+                <label>学段</label>
+                <el-select
+                  v-model="searchStudy"
+                  @change="getList(1)"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in $studyTypeAll"
+                    :key="item.study_phase"
+                    :label="item.study_phase_name"
+                    :value="item.study_phase"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
+              <div class="search-item">
+                <label>商品类型</label>
+                <el-select
+                  v-model="searchGoodsType"
+                  @change="getList(1)"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in goodsTypeList"
+                    :key="item.value"
+                    :label="item.goods_name"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
+              <div class="search-item">
+                <label>是否使用兑换码</label>
+                <el-select
+                  v-model="searchIsCDKEY"
+                  @change="getList(1)"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in isCDKEYList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
+              <div class="search-item">
+                <label>交易状态</label>
+                <el-select
+                  v-model="searchStatus"
+                  @change="getList(1)"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in transactionList"
+                    :key="item.status"
+                    :label="item.status_name"
+                    :value="item.status"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
+              <div class="search-item">
+                <label>客户所在机构</label>
+                <el-select
+                  v-model="searchOrgid"
+                  @change="getList(1)"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in orgList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
+              <div class="search-item">
+                <label>客户所在省市</label>
+                <el-cascader
+                  size="medium"
+                  :options="$provinceCityListAll"
+                  v-model="searchArea"
+                  :props="props"
+                  collapse-tags
+                  clearable
+                  @change="getList(1)"
+                >
+                </el-cascader>
+              </div>
+              <div class="search-item">
+                <label>支付渠道</label>
+                <el-select
+                  v-model="searchChannel"
+                  @change="getList(1)"
+                  placeholder="请选择"
                 >
-                </el-option>
-              </el-select>
+                  <el-option
+                    v-for="item in channelList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </div>
             </div>
-          </div>
+          </template>
           <el-table
             class="search-table"
             :data="tableData"
             style="width: 100%"
             @sort-change="handleSort"
             :default-sort="dataSort"
-            :max-height="tableHeight"
             v-loading="tableLoading"
+            :max-height="isPhone ? 'auto' : tableHeight"
           >
             <el-table-column
               type="index"
@@ -415,42 +480,72 @@
               width="260"
             >
             </el-table-column>
-            <el-table-column fixed="right" label="操作" width="110">
+            <el-table-column
+              fixed="right"
+              label="操作"
+              :width="isPhone ? '50' : '110'"
+            >
               <template slot-scope="scope">
-                <el-button
-                  type="text"
-                  size="small"
-                  class="red-btn"
-                  @click.native.prevent="handleRefund(scope.row, scope.$index)"
-                  v-if="scope.row.is_use_discount_code == 'false'"
-                >
-                  退款
-                </el-button>
-                <el-button
-                  @click.native.prevent="handleUp(scope.row, scope.$index)"
-                  type="text"
-                  size="small"
-                  class="red-btn"
-                  v-if="scope.row.order_status === 2"
-                >
-                  撤回
-                </el-button>
-                <el-button
-                  type="text"
-                  size="small"
-                  class="gray-btn"
-                  v-if="scope.row.order_status === 3"
-                >
-                  已退款
-                </el-button>
-                <el-button
-                  type="text"
-                  size="small"
-                  class="gray-btn"
-                  v-if="scope.row.order_status === 4"
-                >
-                  已撤回
-                </el-button>
+                <el-dropdown trigger="click" v-if="isPhone">
+                  <span class="el-dropdown-link">
+                    <svg-icon
+                      icon-class="operate"
+                      class="el-dropdown-link"
+                    ></svg-icon>
+                  </span>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item
+                      @click.native.prevent="
+                        handleRefund(scope.row, scope.$index)
+                      "
+                      v-if="scope.row.is_use_discount_code == 'false'"
+                      >退款</el-dropdown-item
+                    >
+                    <el-dropdown-item
+                      @click.native.prevent="handleUp(scope.row, scope.$index)"
+                      v-if="scope.row.order_status === 2"
+                      >撤回</el-dropdown-item
+                    >
+                  </el-dropdown-menu>
+                </el-dropdown>
+                <template v-else>
+                  <el-button
+                    type="text"
+                    size="small"
+                    class="red-btn"
+                    @click.native.prevent="
+                      handleRefund(scope.row, scope.$index)
+                    "
+                    v-if="scope.row.is_use_discount_code == 'false'"
+                  >
+                    退款
+                  </el-button>
+                  <el-button
+                    @click.native.prevent="handleUp(scope.row, scope.$index)"
+                    type="text"
+                    size="small"
+                    class="red-btn"
+                    v-if="scope.row.order_status === 2"
+                  >
+                    撤回
+                  </el-button>
+                  <el-button
+                    type="text"
+                    size="small"
+                    class="gray-btn"
+                    v-if="scope.row.order_status === 3"
+                  >
+                    已退款
+                  </el-button>
+                  <el-button
+                    type="text"
+                    size="small"
+                    class="gray-btn"
+                    v-if="scope.row.order_status === 4"
+                  >
+                    已撤回
+                  </el-button>
+                </template>
               </template>
             </el-table-column>
           </el-table>
@@ -461,17 +556,27 @@
             :current-page="pageNumber"
             :page-sizes="[10, 20, 30, 40]"
             :page-size="pageSize"
-            layout="total, prev, pager, next, sizes, jumper"
+            :layout="
+              isPhone
+                ? 'total, prev, pager, next'
+                : 'total, prev, pager, next, sizes, jumper'
+            "
             :total="total_count"
+            :small="isPhone"
+            :pager-count="isPhone ? 5 : 7"
           >
           </el-pagination>
         </div>
       </div>
     </div>
-    <el-dialog title="退款信息" :visible.sync="dialogVisible" width="500px">
+    <el-dialog
+      title="退款信息"
+      :visible.sync="dialogVisible"
+      :width="isPhone ? '100%' : '500px'"
+    >
       <template v-if="ktjeInfo">
         <span style="margin-right: 5px">退款金额:</span>
-        <el-input v-model="ktje"></el-input>
+        <el-input v-model="ktje" style="width: 150px"></el-input>
         <p>商品信息</p>
         <div class="item-info">
           <label>物品类型:</label><span>{{ ktjeInfo.goods_type_name }}</span>
@@ -632,6 +737,8 @@ export default {
       refundPriceArr: [],
       searchType: -1,
       validity: "",
+      validityStart: "",
+      validityEnd: "",
       searchStudy: -1,
       searchStatus: -1,
       searchGoodsType: -1,
@@ -837,6 +944,8 @@ export default {
       ktje: 0,
       refundId: "",
       ktjeInfo: null,
+      isPhone: false,
+      showSearch: true,
     };
   },
   //计算属性 类似于data概念
@@ -848,8 +957,14 @@ export default {
   //方法集合
   methods: {
     qucikSearch(value, index) {
-      (this.validity = [value.date_begin, value.date_end]),
-        (this.quickIndex = index);
+      if (this.isPhone) {
+        this.validityStart = value.date_begin;
+        this.validityEnd = value.date_end;
+      } else {
+        this.validity = [value.date_begin, value.date_end];
+      }
+      this.quickIndex = index;
+
       this.getList();
     },
     handleSort(value) {
@@ -902,8 +1017,16 @@ export default {
         order_column_list: order_column_list,
         pay_status: 1,
         order_status: this.searchStatus,
-        pay_date_begin: this.validity ? this.validity[0] : "",
-        pay_date_end: this.validity ? this.validity[1] : "",
+        pay_date_begin: this.isPhone
+          ? this.validityStart
+          : this.validity
+          ? this.validity[0]
+          : "",
+        pay_date_end: this.isPhone
+          ? this.validityEnd
+          : this.validity
+          ? this.validity[1]
+          : "",
         goods_study_phase: this.searchStudy,
         goods_type: this.searchGoodsType,
         discount_code_use_status: this.searchIsCDKEY,
@@ -970,8 +1093,16 @@ export default {
         order_column_list: order_column_list,
         pay_status: 1,
         order_status: this.searchStatus,
-        pay_date_begin: this.validity ? this.validity[0] : "",
-        pay_date_end: this.validity ? this.validity[1] : "",
+        pay_date_begin: this.isPhone
+          ? this.validityStart
+          : this.validity
+          ? this.validity[0]
+          : "",
+        pay_date_end: this.isPhone
+          ? this.validityEnd
+          : this.validity
+          ? this.validity[1]
+          : "",
         goods_study_phase: this.searchStudy,
         goods_type: this.searchGoodsType,
         discount_code_use_status: this.searchIsCDKEY,
@@ -1140,6 +1271,11 @@ export default {
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
+    const regExp = /Android|webOS|iPhone|BlackBerry|IEMobile|Opera Mini/i;
+    this.isPhone = regExp.test(navigator.userAgent) && window.innerWidth < 860;
+    if (this.isPhone) {
+      this.showSearch = false;
+    }
     this.getTableHeight();
     this.getQuickList();
     this.getOrgList();
@@ -1175,6 +1311,38 @@ export default {
 </script>
 <style lang="scss" scoped>
 /* @import url(); 引入css类 */
+.manage-root-contain-right-phone {
+  .personal-inner {
+    min-height: calc(100vh - 124px);
+    height: auto;
+    .common-title-box {
+      align-items: center;
+      span {
+        font-size: 14px;
+      }
+    }
+    .btn-box {
+      flex-flow: wrap;
+      gap: 5px;
+      margin-top: 10px;
+    }
+    .quick-search {
+      margin: 0 10px 0 0;
+      flex-flow: wrap;
+    }
+    .proceeds-box {
+      gap: 10px;
+      margin-top: 10px;
+      flex-flow: wrap;
+    }
+    .search-table {
+      margin-top: 10px;
+    }
+    .el-date-editor--date {
+      width: 50%;
+    }
+  }
+}
 </style>
 <style lang="scss">
 .btn-box {