mo 4 лет назад
Родитель
Сommit
3aab8ba35d

+ 1 - 0
debug.log

@@ -9,3 +9,4 @@
 [1224/093236.399:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
 [1224/093236.399:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
 [1225/094724.194:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
 [1225/094724.194:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
 [1230/094024.562:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
 [1230/094024.562:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
+[1231/093553.846:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)

+ 300 - 316
src/views/studentManager/components/studentOrder.vue

@@ -4,343 +4,318 @@
       <statistic-item>
       <statistic-item>
         <span>账户余额</span>
         <span>账户余额</span>
         <span>
         <span>
-          {{ dataInfo.balance | moneyFormat}}
-          <i class="el-icon-edit" v-permission="'userCashAccount/updateBalance'" @click="onMoneyOperation('recharge')"></i>
+          {{ dataInfo.balance | moneyFormat }}
+          <i
+            class="el-icon-edit"
+            v-permission="'userCashAccount/updateBalance'"
+            @click="onMoneyOperation('recharge')"
+          ></i>
         </span>
         </span>
       </statistic-item>
       </statistic-item>
       <statistic-item>
       <statistic-item>
         <span>课程余额</span>
         <span>课程余额</span>
         <span>
         <span>
-          {{ dataInfo.courseBalance | moneyFormat}}
-          <i class="el-icon-edit" v-permission="'userCashAccount/updateCourseBalance'" @click="onMoneyOperation('account')"></i>
+          {{ dataInfo.courseBalance | moneyFormat }}
+          <i
+            class="el-icon-edit"
+            v-permission="'userCashAccount/updateCourseBalance'"
+            @click="onMoneyOperation('account')"
+          ></i>
         </span>
         </span>
       </statistic-item>
       </statistic-item>
       <statistic-item>
       <statistic-item>
         <span>银行卡</span>
         <span>银行卡</span>
-        <span>{{ dataInfo.cardNo || '--' }}</span>
+        <span>{{ dataInfo.cardNo || "--" }}</span>
       </statistic-item>
       </statistic-item>
       <statistic-item>
       <statistic-item>
-        <el-button @click="onCashAccount"
-                    v-permission="'userCashAccountDetail/queryPage'"
-                    type="primary">交易明细</el-button>
+        <el-button
+          @click="onCashAccount"
+          v-permission="'userCashAccountDetail/queryPage'"
+          type="primary"
+          >交易明细</el-button
+        >
       </statistic-item>
       </statistic-item>
     </statistic>
     </statistic>
-    <!-- <el-row class="header-items">
-      <el-col :span="5">
-        <span>账户余额</span>
-        <span>
-          {{ dataInfo.balance | moneyFormat}}
-          <i class="el-icon-edit" v-permission="'userCashAccount/updateBalance'" @click="onMoneyOperation('recharge')"></i>
-        </span>
-      </el-col>
-      <el-col :span="1">
-        <el-divider direction="vertical"></el-divider>
-      </el-col>
-      <el-col :span="5">
-        <span>课程余额</span>
-        <span>
-          {{ dataInfo.courseBalance | moneyFormat}}
-          <i class="el-icon-edit" v-permission="'userCashAccount/updateCourseBalance'" @click="onMoneyOperation('account')"></i>
-        </span>
-      </el-col>
-      <el-col :span="1">
-        <el-divider direction="vertical"></el-divider>
-      </el-col>
-      <el-col :span="5">
-        <span>银行卡</span>
-        <span>{{ dataInfo.cardNo || '--' }}</span>
-      </el-col>
-      <el-col :span="1">
-        <el-divider direction="vertical"></el-divider>
-      </el-col>
-      <el-col :span="6" style="text-align: right;">
-        <el-button @click="onCashAccount"
-                    v-permission="'userCashAccountDetail/queryPage'"
-                    type="primary">交易明细</el-button>
-      </el-col>
-    </el-row> -->
-    <!-- <div class="headWrap">
-      <div class="left">
-        <div class="headItem">
-          <p>
-            账户余额:
-            <span>{{ dataInfo.balance | moneyFormat}}</span>
-          </p>
-          <el-button type="text"
-                     v-permission="'userCashAccount/updateBalance'"
-                     @click="onMoneyOperation('recharge')">修改</el-button>
-        </div>
-        <div class="headItem">
-          <p>
-            课程余额:
-            <span>{{ dataInfo.courseBalance| moneyFormat }}</span>
-          </p>
-
-          <el-button v-permission="'userCashAccount/updateCourseBalance'"
-                     @click="onMoneyOperation('account')"
-                     type="text">修改</el-button>
-        </div>
-        <div class="headItem">
-          <p>
-            银行卡:
-            <span>{{ dataInfo.cardNo }}</span>
-          </p>
-        </div>
-      </div>
-      <el-button @click="onCashAccount"
-                 v-permission="'userCashAccountDetail/queryPage'"
-                 type="primary">交易明细</el-button>
-    </div> -->
     <!-- 搜索类型 -->
     <!-- 搜索类型 -->
-    <el-form :inline="true"
-             class="searchForm"
-             v-model.trim="searchForm">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      :model="searchForm"
+      save-key="studentDetail-studentOrder"
+      @submit="search"
+      @reset="onReSet"
+    >
       <el-form-item>
       <el-form-item>
-        <el-date-picker style="width: 400px;"
-                        v-model.trim="orderDate"
-                        type="daterange"
-                        value-format="yyyy-MM-dd"
-                        @change="searchCourseDate"
-                        range-separator="至"
-                        start-placeholder="订单开始日期"
-                        end-placeholder="订单结束日期"
-                        :picker-options="{
-        firstDayOfWeek: 1
-    }"></el-date-picker>
+        <el-date-picker
+          style="width: 400px"
+          v-model.trim="searchForm.orderDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="至"
+          start-placeholder="订单开始日期"
+          end-placeholder="订单结束日期"
+          :picker-options="{
+            firstDayOfWeek: 1,
+          }"
+        ></el-date-picker>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-select v-model.trim="searchForm.paymentType"
-                   filterable
-                   clearable
-                   @clear="onClear('paymentType')"
-                   placeholder="交易类型">
-          <el-option v-for="(item, index) in orderStatus"
-                     :key="index"
-                     :label="item.label"
-                     :value="item.value"></el-option>
+        <el-select
+          v-model.trim="searchForm.paymentType"
+          filterable
+          clearable
+          @clear="onClear('paymentType')"
+          placeholder="交易类型"
+        >
+          <el-option
+            v-for="(item, index) in orderStatus"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-input type="text"
-                  @keyup.enter.native="search"
-                  v-model.trim="searchForm.remark"
-                  placeholder="订单说明"></el-input>
+        <el-input
+          type="text"
+          @keyup.enter.native="search"
+          v-model.trim="searchForm.remark"
+          placeholder="订单说明"
+        ></el-input>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-button @click="search"
-                   type="danger">搜索</el-button>
-        <el-button @click="onReSet"
-                   type="primary">重置</el-button>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
       </el-form-item>
       </el-form-item>
-    </el-form>
+    </save-form>
     <div class="tableWrap">
     <div class="tableWrap">
-      <el-table :data="tableList"
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column label="订单日期"
-                         prop="createTime"
-                         align="center"
-                         width="150px">
-          <template slot-scope="scope">{{ scope.row.createTime | dateForMinFormat }}</template>
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column
+          label="订单日期"
+          prop="createTime"
+          align="center"
+          width="150px"
+        >
+          <template slot-scope="scope">{{
+            scope.row.createTime | dateForMinFormat
+          }}</template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="交易类型"
-                         align="center"
-                         width="180px">
-          <template slot-scope="scope">{{ scope.row.type | orderType }}</template>
+        <el-table-column label="交易类型" align="center" width="180px">
+          <template slot-scope="scope">{{
+            scope.row.type | orderType
+          }}</template>
         </el-table-column>
         </el-table-column>
-        <el-table-column width="180px"
-                         align="center"
-                         label="应付金额"
-                         prop="expectAmount">
+        <el-table-column
+          width="180px"
+          align="center"
+          label="应付金额"
+          prop="expectAmount"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               {{ scope.row.expectAmount | moneyFormat }}
               {{ scope.row.expectAmount | moneyFormat }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column width="180px"
-                         align="center"
-                         label="余额支付"
-                         prop="balancePaymentAmount">
+        <el-table-column
+          width="180px"
+          align="center"
+          label="余额支付"
+          prop="balancePaymentAmount"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               {{ scope.row.balancePaymentAmount | moneyFormat }}
               {{ scope.row.balancePaymentAmount | moneyFormat }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column width="180px"
-                         align="center"
-                         label="实际金额"
-                         prop="actualAmount">
+        <el-table-column
+          width="180px"
+          align="center"
+          label="实际金额"
+          prop="actualAmount"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               {{ scope.row.actualAmount | moneyFormat }}
               {{ scope.row.actualAmount | moneyFormat }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column width="180px"
-                         align="center"
-                         label="订单状态"
-                         prop="status">
+        <el-table-column
+          width="180px"
+          align="center"
+          label="订单状态"
+          prop="status"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{scope.row.status | payStatus}}</div>
+            <div>{{ scope.row.status | payStatus }}</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="订单说明"
-                         align="center"
-                         prop="memo"></el-table-column>
+        <el-table-column
+          label="订单说明"
+          align="center"
+          prop="memo"
+        ></el-table-column>
       </el-table>
       </el-table>
-      <pagination :total="pageInfo.total"
-                  :page.sync="pageInfo.page"
-                  :limit.sync="pageInfo.limit"
-                  :page-sizes="pageInfo.page_size"
-                  @pagination="getList" />
+      <pagination
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
     </div>
     </div>
-    <el-dialog title="交易明细"
-               width="850px"
-               :visible.sync="cashStatus">
+    <el-dialog title="交易明细" width="850px" :visible.sync="cashStatus">
       <el-row>
       <el-row>
         <el-col :span="24">
         <el-col :span="24">
-          <el-tabs v-model="activeName"
-                   type="border-card">
-            <el-tab-pane label="账户余额明细"
-                         name="first">
+          <el-tabs v-model="activeName" type="border-card">
+            <el-tab-pane label="账户余额明细" name="first">
               <el-table :data="cashAccount.gridData">
               <el-table :data="cashAccount.gridData">
                 <!-- 交易金额,账户可用余额,交易状态,交易类型,操作时间,备注 -->
                 <!-- 交易金额,账户可用余额,交易状态,交易类型,操作时间,备注 -->
-                <el-table-column align="center"
-                                 property="amount"
-                                 label="交易金额"></el-table-column>
-                <el-table-column align="center"
-                                 property="balance"
-                                 label="账户可用余额"></el-table-column>
-                <el-table-column align="center"
-                                 label="交易状态">
-                  <template slot-scope="scope">{{ scope.row.status | payStatus }}</template>
+                <el-table-column
+                  align="center"
+                  property="amount"
+                  label="交易金额"
+                ></el-table-column>
+                <el-table-column
+                  align="center"
+                  property="balance"
+                  label="账户可用余额"
+                ></el-table-column>
+                <el-table-column align="center" label="交易状态">
+                  <template slot-scope="scope">{{
+                    scope.row.status | payStatus
+                  }}</template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center"
-                                 label="交易类型">
-                  <template slot-scope="scope">{{ scope.row.type | payType }}</template>
+                <el-table-column align="center" label="交易类型">
+                  <template slot-scope="scope">{{
+                    scope.row.type | payType
+                  }}</template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center"
-                                 width="160px"
-                                 property="createTime"
-                                 label="交易时间"></el-table-column>
-                <el-table-column align="center"
-                                 width="140px"
-                                 label="备注">
+                <el-table-column
+                  align="center"
+                  width="160px"
+                  property="createTime"
+                  label="交易时间"
+                ></el-table-column>
+                <el-table-column align="center" width="140px" label="备注">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
-                    <span :title="scope.row.comment">{{ scope.row.comment }}</span>
+                    <span :title="scope.row.comment">{{
+                      scope.row.comment
+                    }}</span>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
               </el-table>
               </el-table>
-              <pagination :total="cashAccount.total"
-                          :page.sync="cashAccount.page"
-                          :limit.sync="cashAccount.limit"
-                          :page-sizes="cashAccount.page_size"
-                          @pagination="getCashAccount" />
+              <pagination
+                :total="cashAccount.total"
+                :page.sync="cashAccount.page"
+                :limit.sync="cashAccount.limit"
+                :page-sizes="cashAccount.page_size"
+                @pagination="getCashAccount"
+              />
             </el-tab-pane>
             </el-tab-pane>
-            <el-tab-pane label="课程余额明细"
-                         name="second">
+            <el-tab-pane label="课程余额明细" name="second">
               <el-table :data="courseAccount.gridData">
               <el-table :data="courseAccount.gridData">
                 <!-- 交易金额,账户可用余额,交易状态,交易类型,操作时间,备注 -->
                 <!-- 交易金额,账户可用余额,交易状态,交易类型,操作时间,备注 -->
-                <el-table-column align="center"
-                                 property="amount"
-                                 label="交易金额"></el-table-column>
-                <el-table-column align="center"
-                                 property="balance"
-                                 label="课程可用余额"></el-table-column>
-                <el-table-column align="center"
-                                 label="交易状态">
-                  <template slot-scope="scope">{{ scope.row.status | payStatus }}</template>
+                <el-table-column
+                  align="center"
+                  property="amount"
+                  label="交易金额"
+                ></el-table-column>
+                <el-table-column
+                  align="center"
+                  property="balance"
+                  label="课程可用余额"
+                ></el-table-column>
+                <el-table-column align="center" label="交易状态">
+                  <template slot-scope="scope">{{
+                    scope.row.status | payStatus
+                  }}</template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center"
-                                 label="交易类型">
-                  <template slot-scope="scope">{{ scope.row.type | payType }}</template>
+                <el-table-column align="center" label="交易类型">
+                  <template slot-scope="scope">{{
+                    scope.row.type | payType
+                  }}</template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center"
-                                 width="160px"
-                                 property="createTime"
-                                 label="交易时间"></el-table-column>
-                <el-table-column align="center"
-                                 width="140px"
-                                 label="备注">
+                <el-table-column
+                  align="center"
+                  width="160px"
+                  property="createTime"
+                  label="交易时间"
+                ></el-table-column>
+                <el-table-column align="center" width="140px" label="备注">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
-                    <span :title="scope.row.comment">{{ scope.row.comment }}</span>
+                    <span :title="scope.row.comment">{{
+                      scope.row.comment
+                    }}</span>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
               </el-table>
               </el-table>
-              <pagination :total="courseAccount.total"
-                          :page.sync="courseAccount.page"
-                          :limit.sync="courseAccount.limit"
-                          :page-sizes="courseAccount.page_size"
-                          @pagination="getCourseAccount" />
+              <pagination
+                :total="courseAccount.total"
+                :page.sync="courseAccount.page"
+                :limit.sync="courseAccount.limit"
+                :page-sizes="courseAccount.page_size"
+                @pagination="getCourseAccount"
+              />
             </el-tab-pane>
             </el-tab-pane>
           </el-tabs>
           </el-tabs>
         </el-col>
         </el-col>
       </el-row>
       </el-row>
     </el-dialog>
     </el-dialog>
-    <el-dialog :title="moneyForm.title"
-               width="450px"
-               @close="onFormClose('moneyForm')"
-               :visible.sync="moneyVisible">
-      <el-form ref="moneyForm"
-               :rules="moneyRule"
-               :model="moneyForm"
-               label-width="80px">
-        <el-form-item label="操作选择"
-                      prop="type">
+    <el-dialog
+      :title="moneyForm.title"
+      width="450px"
+      @close="onFormClose('moneyForm')"
+      :visible.sync="moneyVisible"
+    >
+      <el-form
+        ref="moneyForm"
+        :rules="moneyRule"
+        :model="moneyForm"
+        label-width="80px"
+      >
+        <el-form-item label="操作选择" prop="type">
           <el-radio-group v-model="moneyForm.type">
           <el-radio-group v-model="moneyForm.type">
             <el-radio :label="1">充值</el-radio>
             <el-radio :label="1">充值</el-radio>
             <el-radio :label="2">扣除</el-radio>
             <el-radio :label="2">扣除</el-radio>
           </el-radio-group>
           </el-radio-group>
         </el-form-item>
         </el-form-item>
-        <el-form-item :label="moneyForm.titleType == 'account' ? '课程余额' : '账户余额'">
-          <el-input type="number"
-                    disabled
-                    :value="moneyForm.titleType == 'account' ? dataInfo.courseBalance : dataInfo.balance"></el-input>
+        <el-form-item
+          :label="moneyForm.titleType == 'account' ? '课程余额' : '账户余额'"
+        >
+          <el-input
+            type="number"
+            disabled
+            :value="
+              moneyForm.titleType == 'account'
+                ? dataInfo.courseBalance
+                : dataInfo.balance
+            "
+          ></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="金额"
-                      prop="money">
-          <el-input type="number"
-                    @mousewheel.native.prevent
-                    v-model="moneyForm.money"></el-input>
+        <el-form-item label="金额" prop="money">
+          <el-input
+            type="number"
+            @mousewheel.native.prevent
+            v-model="moneyForm.money"
+          ></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="备注"
-                      prop="remark">
-          <el-input type="textarea"
-                    v-model="moneyForm.remark"></el-input>
+        <el-form-item label="备注" prop="remark">
+          <el-input type="textarea" v-model="moneyForm.remark"></el-input>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
-      <div slot="footer"
-           class="dialog-footer">
+      <div slot="footer" class="dialog-footer">
         <el-button @click="moneyVisible = false">取 消</el-button>
         <el-button @click="moneyVisible = false">取 消</el-button>
-        <el-button type="primary"
-                   @click="submitMoney('moneyForm')">确 定</el-button>
+        <el-button type="primary" @click="submitMoney('moneyForm')"
+          >确 定</el-button
+        >
       </div>
       </div>
     </el-dialog>
     </el-dialog>
-    <!-- 充值弹窗 -->
-    <!-- <el-dialog
-      title="课程余额转账户余额"
-      width="400px"
-      :visible.sync="rechargeVisible">
-      <el-form
-        :model="rechargeForm"
-        ref="rechargeForm"
-        label-position="right"
-        label-width="80px;"
-        :inline="true"
-      >
-        <el-form-item label="课程余额" >
-          ¥{{ dataInfo.courseBalance}}
-        </el-form-item>
-        <el-form-item label="本次充值" prop="money">
-          <el-input type="number"  @mousewheel.native.prevent v-model.trim="rechargeForm.money"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="rechargeVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submitRecharge">确 定</el-button>
-      </div>
-    </el-dialog>-->
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
@@ -352,9 +327,10 @@ import {
   transferCourseBalanceToBalance,
   transferCourseBalanceToBalance,
   userCashAccountDetail,
   userCashAccountDetail,
   userCoursesAccount,
   userCoursesAccount,
-  updateBalance
+  updateBalance,
 } from "@/api/studentManager";
 } from "@/api/studentManager";
 import { orderStatus } from "@/utils/searchArray";
 import { orderStatus } from "@/utils/searchArray";
+import { getTimes } from "@/utils";
 import store from "@/store";
 import store from "@/store";
 let validPrice = (rule, value, callback) => {
 let validPrice = (rule, value, callback) => {
   if ((value == "" && typeof value == "string") || value == null) {
   if ((value == "" && typeof value == "string") || value == null) {
@@ -370,17 +346,17 @@ let validPrice = (rule, value, callback) => {
 export default {
 export default {
   name: "studentOrder",
   name: "studentOrder",
   components: { pagination },
   components: { pagination },
-  data () {
+  data() {
     return {
     return {
       rechargeVisible: false,
       rechargeVisible: false,
       organId: null,
       organId: null,
-      orderDate: null,
       searchForm: {
       searchForm: {
         studentId: null,
         studentId: null,
         orderStartDate: null,
         orderStartDate: null,
         orderEndDate: null,
         orderEndDate: null,
         paymentType: null,
         paymentType: null,
-        remark: null
+        remark: null,
+        orderDate: [],
       },
       },
       orderStatus: orderStatus,
       orderStatus: orderStatus,
       pageInfo: {
       pageInfo: {
@@ -388,13 +364,13 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
       tableList: [],
       tableList: [],
       dataInfo: {},
       dataInfo: {},
       amountStatus: true, // 账户余额状态
       amountStatus: true, // 账户余额状态
       rechargeForm: {
       rechargeForm: {
-        money: null
+        money: null,
       },
       },
       moneyVisible: false, //
       moneyVisible: false, //
       moneyForm: {
       moneyForm: {
@@ -402,14 +378,14 @@ export default {
         titleType: "recharge",
         titleType: "recharge",
         type: 1, //
         type: 1, //
         money: null,
         money: null,
-        remark: null //备注
+        remark: null, //备注
       },
       },
       moneyRule: {
       moneyRule: {
         type: [
         type: [
-          { required: true, message: "请选择操作类型", trigger: "change" }
+          { required: true, message: "请选择操作类型", trigger: "change" },
         ],
         ],
         money: [{ required: true, validator: validPrice, trigger: "blur" }],
         money: [{ required: true, validator: validPrice, trigger: "blur" }],
-        remark: [{ required: true, message: "请输入备注", trigger: "blur" }]
+        remark: [{ required: true, message: "请输入备注", trigger: "blur" }],
       },
       },
       cashStatus: false,
       cashStatus: false,
       cashAccount: {
       cashAccount: {
@@ -419,7 +395,7 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
       activeName: "first",
       activeName: "first",
       courseAccount: {
       courseAccount: {
@@ -429,46 +405,46 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      }
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
     };
     };
   },
   },
-  mounted () {
+  mounted() {
     this.searchForm.studentId = this.$route.query.userId;
     this.searchForm.studentId = this.$route.query.userId;
     this.getList();
     this.getList();
     this.__init();
     this.__init();
   },
   },
-  activated () {
+  activated() {
     this.searchForm.studentId = this.$route.query.userId;
     this.searchForm.studentId = this.$route.query.userId;
     this.getList();
     this.getList();
     this.__init();
     this.__init();
   },
   },
   methods: {
   methods: {
-    onClear (type) {
+    onClear(type) {
       if (type == "paymentType") {
       if (type == "paymentType") {
         this.searchForm.paymentType = null;
         this.searchForm.paymentType = null;
       }
       }
     },
     },
-    __init () {
+    __init() {
       getUserCashAccountBaseInfo({ userId: this.$route.query.userId }).then(
       getUserCashAccountBaseInfo({ userId: this.$route.query.userId }).then(
-        res => {
+        (res) => {
           if (res.code == 200) {
           if (res.code == 200) {
             this.dataInfo = {
             this.dataInfo = {
               balance: res.data.balance,
               balance: res.data.balance,
               courseBalance: res.data.courseBalance,
               courseBalance: res.data.courseBalance,
               wxBalance: 0,
               wxBalance: 0,
               cardNo: res.data.cardNo,
               cardNo: res.data.cardNo,
-              zfb: null
+              zfb: null,
             };
             };
           }
           }
         }
         }
       );
       );
     },
     },
-    onFormClose (formName) {
+    onFormClose(formName) {
       // 关闭弹窗重置验证
       // 关闭弹窗重置验证
       this.$refs[formName].resetFields();
       this.$refs[formName].resetFields();
     },
     },
-    onMoneyOperation (type) {
+    onMoneyOperation(type) {
       let moneyForm = this.moneyForm;
       let moneyForm = this.moneyForm;
       if (type == "recharge") {
       if (type == "recharge") {
         moneyForm.title = "账户余额修改";
         moneyForm.title = "账户余额修改";
@@ -479,22 +455,22 @@ export default {
       }
       }
       this.moneyVisible = true;
       this.moneyVisible = true;
     },
     },
-    onCashAccount (item) {
+    onCashAccount(item) {
       // 点名表
       // 点名表
       this.cashAccount.page = 1;
       this.cashAccount.page = 1;
       this.getCashAccount();
       this.getCashAccount();
       this.courseAccount.page = 1;
       this.courseAccount.page = 1;
       this.getCourseAccount();
       this.getCourseAccount();
-      this.cashStatus = true
+      this.cashStatus = true;
     },
     },
-    getCashAccount () {
+    getCashAccount() {
       let cashAccount = this.cashAccount;
       let cashAccount = this.cashAccount;
       let params = {
       let params = {
         page: cashAccount.page,
         page: cashAccount.page,
         rows: cashAccount.limit,
         rows: cashAccount.limit,
-        userId: this.searchForm.studentId
+        userId: this.searchForm.studentId,
       };
       };
-      userCashAccountDetail(params).then(res => {
+      userCashAccountDetail(params).then((res) => {
         let result = res.data;
         let result = res.data;
         cashAccount.status = true;
         cashAccount.status = true;
         if (res.code == 200) {
         if (res.code == 200) {
@@ -503,14 +479,14 @@ export default {
         }
         }
       });
       });
     },
     },
-    getCourseAccount () {
+    getCourseAccount() {
       let courseAccount = this.courseAccount;
       let courseAccount = this.courseAccount;
       let params = {
       let params = {
         page: courseAccount.page,
         page: courseAccount.page,
         rows: courseAccount.limit,
         rows: courseAccount.limit,
-        userId: this.searchForm.studentId
+        userId: this.searchForm.studentId,
       };
       };
-      userCoursesAccount(params).then(res => {
+      userCoursesAccount(params).then((res) => {
         let result = res.data;
         let result = res.data;
         courseAccount.status = true;
         courseAccount.status = true;
         if (res.code == 200) {
         if (res.code == 200) {
@@ -519,8 +495,8 @@ export default {
         }
         }
       });
       });
     },
     },
-    submitMoney (formName) {
-      this.$refs[formName].validate(valid => {
+    submitMoney(formName) {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
         if (valid) {
           let moneyForm = this.moneyForm;
           let moneyForm = this.moneyForm;
           let dataInfo = this.dataInfo;
           let dataInfo = this.dataInfo;
@@ -543,15 +519,15 @@ export default {
               } else {
               } else {
                 courseBalance = Number(
                 courseBalance = Number(
                   Number(dataInfo.courseBalance) -
                   Number(dataInfo.courseBalance) -
-                  Number(moneyForm.money).toFixed(2)
+                    Number(moneyForm.money).toFixed(2)
                 );
                 );
               }
               }
             }
             }
             updateCourseBalance({
             updateCourseBalance({
               userId: this.searchForm.studentId,
               userId: this.searchForm.studentId,
               decimal: courseBalance,
               decimal: courseBalance,
-              memo: moneyForm.remark
-            }).then(res => {
+              memo: moneyForm.remark,
+            }).then((res) => {
               let result = res.data;
               let result = res.data;
               if (res.code == 200) {
               if (res.code == 200) {
                 this.$message.success("保存成功");
                 this.$message.success("保存成功");
@@ -578,8 +554,8 @@ export default {
             updateBalance({
             updateBalance({
               userId: this.searchForm.studentId,
               userId: this.searchForm.studentId,
               decimal: balance,
               decimal: balance,
-              memo: moneyForm.remark
-            }).then(res => {
+              memo: moneyForm.remark,
+            }).then((res) => {
               let result = res.data;
               let result = res.data;
               if (res.code == 200) {
               if (res.code == 200) {
                 this.$message.success("保存成功");
                 this.$message.success("保存成功");
@@ -595,7 +571,7 @@ export default {
         }
         }
       });
       });
     },
     },
-    onUpdateCourse () {
+    onUpdateCourse() {
       if (!this.dataInfo.courseBalance) {
       if (!this.dataInfo.courseBalance) {
         this.$message.error("请输入课程余额");
         this.$message.error("请输入课程余额");
         return;
         return;
@@ -603,13 +579,13 @@ export default {
       this.$confirm(`确定是否修改该学生课程余额?`, "提示", {
       this.$confirm(`确定是否修改该学生课程余额?`, "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       })
       })
         .then(() => {
         .then(() => {
           updateCourseBalance({
           updateCourseBalance({
             userId: this.searchForm.studentId,
             userId: this.searchForm.studentId,
-            decimal: this.dataInfo.courseBalance
-          }).then(res => {
+            decimal: this.dataInfo.courseBalance,
+          }).then((res) => {
             let result = res.data;
             let result = res.data;
             if (res.code == 200) {
             if (res.code == 200) {
               this.$message.success("保存成功");
               this.$message.success("保存成功");
@@ -624,25 +600,33 @@ export default {
           this.amountStatus = true;
           this.amountStatus = true;
         });
         });
     },
     },
-    search () {
+    search() {
       this.pageInfo.page = 1;
       this.pageInfo.page = 1;
       this.getList();
       this.getList();
     },
     },
-    getList () {
-      let params = this.searchForm;
-      params.rows = this.pageInfo.limit;
-      params.page = this.pageInfo.page;
-      if (params.remark == "" || !params.remark) {
-        params.remark = null;
-      }
-      studentPaymentOrderList(params).then(res => {
+    getList() {
+      // let params = this.searchForm;
+      // params.rows = this.pageInfo.limit;
+      // params.page = this.pageInfo.page;
+      // if (params.remark == "" || !params.remark) {
+      //   params.remark = null;
+      // }
+
+      const { orderDate, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        ...getTimes(orderDate, ["orderStartDate", "orderEndDate"]),
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit,
+      };
+      studentPaymentOrderList(params).then((res) => {
         if (res.code == 200) {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
           this.pageInfo.total = res.data.total;
         }
         }
       });
       });
     },
     },
-    searchCourseDate (value) {
+    searchCourseDate(value) {
       if (value) {
       if (value) {
         this.searchForm.orderStartDate = value[0];
         this.searchForm.orderStartDate = value[0];
         this.searchForm.orderEndDate = value[1];
         this.searchForm.orderEndDate = value[1];
@@ -651,7 +635,7 @@ export default {
         this.searchForm.orderEndDate = null;
         this.searchForm.orderEndDate = null;
       }
       }
     },
     },
-    onReSet () {
+    onReSet() {
       // 重置搜索
       // 重置搜索
       this.orderDate = null;
       this.orderDate = null;
       this.searchForm = {
       this.searchForm = {
@@ -659,10 +643,10 @@ export default {
         orderStartDate: null,
         orderStartDate: null,
         orderEndDate: null,
         orderEndDate: null,
         paymentType: null,
         paymentType: null,
-        remark: null
+        remark: null,
       };
       };
     },
     },
-    submitRecharge () {
+    submitRecharge() {
       let money = parseFloat(
       let money = parseFloat(
         this.dataInfo.courseBalance - this.rechargeForm.money
         this.dataInfo.courseBalance - this.rechargeForm.money
       ).toFixed(2);
       ).toFixed(2);
@@ -677,16 +661,16 @@ export default {
       }
       }
       transferCourseBalanceToBalance({
       transferCourseBalanceToBalance({
         userId: this.searchForm.studentId,
         userId: this.searchForm.studentId,
-        money: this.rechargeForm.money
-      }).then(res => {
+        money: this.rechargeForm.money,
+      }).then((res) => {
         if (res.code == 200) {
         if (res.code == 200) {
           this.$message.success("充值成功");
           this.$message.success("充值成功");
           this.rechargeVisible = false;
           this.rechargeVisible = false;
           this.__init();
           this.__init();
         }
         }
       });
       });
-    }
-  }
+    },
+  },
 };
 };
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>
@@ -698,12 +682,12 @@ export default {
     right: 20px;
     right: 20px;
   }
   }
 }
 }
-.header-items{
+.header-items {
   padding: 20px 0;
   padding: 20px 0;
   text-align: center;
   text-align: center;
-  /deep/ .el-icon-edit{
+  /deep/ .el-icon-edit {
     cursor: pointer;
     cursor: pointer;
-    color: #14928A;
+    color: #14928a;
     font-size: 20px;
     font-size: 20px;
   }
   }
   /deep/ .el-col {
   /deep/ .el-col {
@@ -715,18 +699,18 @@ export default {
     align-items: center;
     align-items: center;
     flex-direction: column;
     flex-direction: column;
   }
   }
-  /deep/ .el-col-1{
+  /deep/ .el-col-1 {
     font-size: 60px;
     font-size: 60px;
   }
   }
-  span{
+  span {
     display: block;
     display: block;
     line-height: 1.8;
     line-height: 1.8;
-    color: rgba(0, 0, 0, .85);
+    color: rgba(0, 0, 0, 0.85);
     font-size: 24px;
     font-size: 24px;
-    &:first-child{
+    &:first-child {
       font-size: 14px;
       font-size: 14px;
       font-weight: normal;
       font-weight: normal;
-      color: rgba(0, 0, 0, .45);
+      color: rgba(0, 0, 0, 0.45);
     }
     }
   }
   }
 }
 }

+ 84 - 73
src/views/studentManager/components/studentOutList.vue

@@ -1,59 +1,67 @@
 
 
 <template>
 <template>
-  <div class='studentOut'>
+  <div class="studentOut">
     <!-- 搜索类型 -->
     <!-- 搜索类型 -->
-    <el-form :inline="true"
-             class="searchForm"
-             v-model.trim="searchForm">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      :model="searchForm"
+      @submit="onSearch"
+      save-key="studentDetail-studentOutList"
+    >
       <el-form-item>
       <el-form-item>
-        <el-input placeholder="课程名称"
-                  @keyup.enter.native='onSearch'
-                  v-model.trim="searchForm.search"></el-input>
+        <el-input
+          placeholder="课程名称"
+          clearable
+          @keyup.enter.native="onSearch"
+          v-model.trim="searchForm.search"
+        ></el-input>
       </el-form-item>
       </el-form-item>
       <el-form-item label="课程状态">
       <el-form-item label="课程状态">
-        <el-select v-model.trim="searchForm.groupStatus"
-                   clearable>
-          <el-option v-for="(item,index) in commGroupStatus"
-                     :key="index"
-                     :value="item.value"
-                     :label="item.label"></el-option>
+        <el-select v-model.trim="searchForm.groupStatus" clearable>
+          <el-option
+            v-for="(item, index) in commGroupStatus"
+            :key="index"
+            :value="item.value"
+            :label="item.label"
+          ></el-option>
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-button @click="onSearch"
-                   type="danger">搜索</el-button>
+        <el-button native-type="submit" type="danger">搜索</el-button>
       </el-form-item>
       </el-form-item>
-    </el-form>
+    </save-form>
 
 
     <div class="tableWrap">
     <div class="tableWrap">
-      <el-table :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                :data='tableList'>
-        <el-table-column label="编号"
-                         align='center'
-                         prop='id'>
+      <el-table
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column label="编号" align="center" prop="id">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.id }}</copy-text>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="课程组名称"
-                         align='center'
-                         prop="name">
+        <el-table-column label="课程组名称" align="center" prop="name">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.name }}</copy-text>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="课程组状态"
-                         align='center'>
+        <el-table-column label="课程组状态" align="center">
           <template slot-scope="scope">
           <template slot-scope="scope">
             {{ scope.row.status | courseGroup }}
             {{ scope.row.status | courseGroup }}
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="老师"
-                         align='center'
-                         prop="teacherName">
+        <el-table-column label="老师" align="center" prop="teacherName">
         </el-table-column>
         </el-table-column>
-        <el-table-column label="班级人数"
-                         align='center'
-                         prop="studentNum">
+        <el-table-column label="班级人数" align="center" prop="studentNum">
         </el-table-column>
         </el-table-column>
 
 
-        <el-table-column label="开课时间"
-                         align='center'
-                         prop="firstClassesStartTime">
+        <el-table-column
+          label="开课时间"
+          align="center"
+          prop="firstClassesStartTime"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             {{ scope.row.firstClassesStartTime | dateForMinFormat }}
             {{ scope.row.firstClassesStartTime | dateForMinFormat }}
           </template>
           </template>
@@ -66,11 +74,14 @@
           </template>
           </template>
         </el-table-column> -->
         </el-table-column> -->
       </el-table>
       </el-table>
-      <pagination :total="pageInfo.total"
-                  :page.sync="pageInfo.page"
-                  :limit.sync="pageInfo.limit"
-                  :page-sizes="pageInfo.page_size"
-                  @pagination="getCourseList" />
+      <pagination
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getCourseList"
+      />
 
 
       <!-- <el-dialog :title="dialogTitle"
       <!-- <el-dialog :title="dialogTitle"
                  :visible.sync="dialogTableVisible">
                  :visible.sync="dialogTableVisible">
@@ -102,18 +113,18 @@
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
-import pagination from '@/components/Pagination/index'
+import pagination from "@/components/Pagination/index";
 import { commGroupStatus } from "@/utils/searchArray";
 import { commGroupStatus } from "@/utils/searchArray";
-import { findStudentCourseGroupsWithWeb } from '@/api/studentManager'
+import { findStudentCourseGroupsWithWeb } from "@/api/studentManager";
 export default {
 export default {
-  name: 'studentvip',
+  name: "studentvip",
   components: { pagination },
   components: { pagination },
-  data () {
+  data() {
     return {
     return {
       searchForm: {
       searchForm: {
         studentId: null,
         studentId: null,
         search: null,
         search: null,
-        groupStatus: null
+        groupStatus: null,
       },
       },
       checkIndex: null, // 选中的课程
       checkIndex: null, // 选中的课程
       dialogTableVisible: false,
       dialogTableVisible: false,
@@ -125,46 +136,46 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
-      dialogTitle: '',
+      dialogTitle: "",
       gridData: [],
       gridData: [],
-      userId: ''
-    }
+      userId: "",
+    };
   },
   },
-  created () {
+  created() {
     this.userId = this.$route.query.userId || null;
     this.userId = this.$route.query.userId || null;
   },
   },
-  mounted () {
-    this.userId = this.$route.query.userId || null
-    this.searchForm.studentId = this.$route.query.userId
-    this.getCourseList()
+  mounted() {
+    this.userId = this.$route.query.userId || null;
+    this.searchForm.studentId = this.$route.query.userId;
+    this.getCourseList();
   },
   },
-  activated () {
-    this.userId = this.$route.query.userId || null
-    this.searchForm.studentId = this.$route.query.userId
-    this.getCourseList()
+  activated() {
+    this.userId = this.$route.query.userId || null;
+    this.searchForm.studentId = this.$route.query.userId;
+    this.getCourseList();
   },
   },
   methods: {
   methods: {
     // onCheckCourse(item) {
     // onCheckCourse(item) {
     //   this.checkIndex = item.id
     //   this.checkIndex = item.id
     //   this.getList()
     //   this.getList()
     // },
     // },
-    getCourseList () {
-      let params = this.searchForm
-      params.rows = this.pageInfo.limit
-      params.page = this.pageInfo.page
-      findStudentCourseGroupsWithWeb(params).then(res => {
+    getCourseList() {
+      let params = this.searchForm;
+      params.rows = this.pageInfo.limit;
+      params.page = this.pageInfo.page;
+      findStudentCourseGroupsWithWeb(params).then((res) => {
         if (res.code == 200) {
         if (res.code == 200) {
-          this.tableList = res.data.rows
-          this.pageInfo.total = res.data.total
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
         }
         }
-      })
+      });
+    },
+    onSearch() {
+      this.pageInfo.page = 1;
+      this.getCourseList();
     },
     },
-    onSearch () {
-      this.pageInfo.page = 1
-      this.getCourseList()
-    }
     // getList() {
     // getList() {
     //   findStudentCourses({
     //   findStudentCourses({
     //     vipGroupId: this.checkIndex,
     //     vipGroupId: this.checkIndex,
@@ -177,8 +188,8 @@ export default {
     //     }
     //     }
     //   })
     //   })
     // }
     // }
-  }
-}
+  },
+};
 </script>
 </script>
 <style lang="scss">
 <style lang="scss">
 .studentOut {
 .studentOut {
@@ -247,4 +258,4 @@ export default {
     }
     }
   }
   }
 }
 }
-</style>
+</style>

+ 85 - 76
src/views/studentManager/components/studentPayList.vue

@@ -1,98 +1,106 @@
 <template>
 <template>
   <div>
   <div>
     <!-- 搜索类型 -->
     <!-- 搜索类型 -->
-    <el-form :inline="true"
-             class="searchForm"
-             v-model.trim="searchForm">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      :model="searchForm"
+      @submit="search"
+      @reset="onReSet"
+      save-key="studentDetail-studentPayList"
+    >
       <el-form-item>
       <el-form-item>
-        <el-select v-model.trim="searchForm.attendanceStatus"
-                   filterable
-                   clearable
-                   placeholder="考勤状态">
-          <el-option v-for="(item, index) in attendanceStatus"
-                     :key="index"
-                     :label="item.label"
-                     :value="item.value"></el-option>
+        <el-select
+          v-model.trim="searchForm.attendanceStatus"
+          filterable
+          clearable
+          placeholder="考勤状态"
+        >
+          <el-option
+            v-for="(item, index) in attendanceStatus"
+            :key="index"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-button @click="search"
-                   type="danger">搜索</el-button>
-        <el-button @click="onReSet"
-                   type="primary">重置</el-button>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
       </el-form-item>
       </el-form-item>
-    </el-form>
+    </save-form>
     <!-- 列表 -->
     <!-- 列表 -->
     <div class="tableWrap">
     <div class="tableWrap">
-      <el-table :data='tableList'
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column align='center'
-                         label="上课时间">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" label="上课时间">
           <template slot-scope="scope">
           <template slot-scope="scope">
-            {{ scope.row.classDate }} {{ scope.row.startClassTime | timerForMinFormat}}
+            {{ scope.row.classDate }}
+            {{ scope.row.startClassTime | timerForMinFormat }}
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         label="课程类型">
+        <el-table-column align="center" label="课程类型">
           <template slot-scope="scope">
           <template slot-scope="scope">
             {{ scope.row.classGroupType | coursesType }}
             {{ scope.row.classGroupType | coursesType }}
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="classGroupName"
-                         label="班级名称">
+        <el-table-column align="center" prop="classGroupName" label="班级名称">
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="currentClassTimes"
-                         label="当前课次">
+        <el-table-column
+          align="center"
+          prop="currentClassTimes"
+          label="当前课次"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
-              {{ scope.row.currentClassTimes + '/'+scope.row.totalClassTimes }}
+              {{
+                scope.row.currentClassTimes + "/" + scope.row.totalClassTimes
+              }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         label="考勤状态">
+        <el-table-column align="center" label="考勤状态">
           <template slot-scope="scope">
           <template slot-scope="scope">
             {{ scope.row.status | clockingIn }}
             {{ scope.row.status | clockingIn }}
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="expectPrice"
-                         label="预计扣费">
+        <el-table-column align="center" prop="expectPrice" label="预计扣费">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
-              {{scope.row.expectPrice | moneyFormat}}
+              {{ scope.row.expectPrice | moneyFormat }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="actualPrice"
-                         label="实际扣费">
+        <el-table-column align="center" prop="actualPrice" label="实际扣费">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
-              {{scope.row.actualPrice | moneyFormat}}
+              {{ scope.row.actualPrice | moneyFormat }}
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
-      <pagination :total="pageInfo.total"
-                  :page.sync="pageInfo.page"
-                  :limit.sync="pageInfo.limit"
-                  :page-sizes="pageInfo.page_size"
-                  @pagination="getList" />
+      <pagination
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
-import pagination from '@/components/Pagination/index'
-import { queryStudentPayment } from '@/api/studentManager'
-import { attendanceStatus } from '@/utils/searchArray'
-import store from '@/store'
+import pagination from "@/components/Pagination/index";
+import { queryStudentPayment } from "@/api/studentManager";
+import { attendanceStatus } from "@/utils/searchArray";
+import store from "@/store";
 export default {
 export default {
-  name: 'studentPayList',
+  name: "studentPayList",
   components: { pagination },
   components: { pagination },
-  data () {
+  data() {
     return {
     return {
       organId: null,
       organId: null,
       searchForm: {
       searchForm: {
@@ -105,43 +113,44 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
-      tableList: []
-    }
+      tableList: [],
+    };
   },
   },
-  mounted () {
-    this.searchForm.studentId = this.$route.query.userId
-    this.getList()
+  mounted() {
+    this.searchForm.studentId = this.$route.query.userId;
+    this.getList();
   },
   },
-  activated () {
-    this.searchForm.studentId = this.$route.query.userId
-    this.getList()
+  activated() {
+    this.searchForm.studentId = this.$route.query.userId;
+    this.getList();
   },
   },
   methods: {
   methods: {
-    search () {
+    search() {
       this.pageInfo.page = 1;
       this.pageInfo.page = 1;
-      this.getList()
+      this.getList();
     },
     },
-    getList () {
-      let params = this.searchForm
-      params.rows = this.pageInfo.limit
-      params.page = this.pageInfo.page
-      queryStudentPayment(params).then(res => {
+    getList() {
+      let params = this.searchForm;
+      params.rows = this.pageInfo.limit;
+      params.page = this.pageInfo.page;
+      queryStudentPayment(params).then((res) => {
         if (res.code == 200) {
         if (res.code == 200) {
-          this.tableList = res.data.rows
-          this.pageInfo.total = res.data.total
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
         }
         }
-      })
+      });
     },
     },
-    onReSet () { // 重置搜索
+    onReSet() {
+      // 重置搜索
       this.searchForm = {
       this.searchForm = {
         studentId: this.$route.query.userId,
         studentId: this.$route.query.userId,
-        attendanceStatus: null
-      }
+        attendanceStatus: null,
+      };
     },
     },
-  }
-}
+  },
+};
 </script>
 </script>
 <style lang="scss">
 <style lang="scss">
-</style>
+</style>

+ 1 - 0
src/views/studentManager/components/studentRecord.vue

@@ -7,6 +7,7 @@
         :model="searchForm"
         :model="searchForm"
         @submit="search"
         @submit="search"
         @reset="onReSet"
         @reset="onReSet"
+        save-key='studentDetail-studentRecord'
       >
       >
         <el-form-item prop="teacherId">
         <el-form-item prop="teacherId">
           <remote-search :commit='"setTeachers"' v-model='searchForm.teacherId' />
           <remote-search :commit='"setTeachers"' v-model='searchForm.teacherId' />

+ 131 - 108
src/views/studentManager/components/studentVip.vue

@@ -1,116 +1,139 @@
 
 
 <template>
 <template>
   <div class="studentvip">
   <div class="studentvip">
-    <!-- <div class="topCard">
-      <div class="cardItem" @click="onCheckCourse(item)" :class="[item.id == checkIndex ? 'active' : '']"
-       v-for="(item, index) in courseList" :key="index">
-        <div class="top">
-          <p class='name'>{{ item.name }}</p>
-          <p class="type">{{ item.giveTeachMode == 'ONLINE' ? '线上' : '线下' }}</p>
-        </div>
-        <div class="bottom">
-          <div>
-            <p class="title">指导老师</p>
-            <p>{{ item.userName }}</p>
-          </div>
-          <div>
-            <p class="title">学员数量</p>
-            <p>{{ item.studentNum }}</p>
-          </div>
-          <div>
-            <p class="title">剩余课时</p>
-            <p>{{ item.totalClassTimes - item.currentClassTimes }}</p>
-          </div>
-        </div>
-      </div>
-    </div>-->
     <!-- 搜索类型 -->
     <!-- 搜索类型 -->
-    <el-form :inline="true"
-             class="searchForm"
-             v-model.trim="searchForm">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      :model="searchForm"
+      @submit="onSearch"
+      save-key="studentDetail-studentVip"
+    >
       <el-form-item>
       <el-form-item>
-        <el-input placeholder="课程名称"
-                  @keyup.enter.native="onSearch"
-                  v-model.trim="searchForm.classGroupName"></el-input>
+        <el-input
+          placeholder="课程名称"
+          clearable
+          @keyup.enter.native="onSearch"
+          v-model.trim="searchForm.classGroupName"
+        ></el-input>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
-        <el-button @click="onSearch"
-                   type="danger">搜索</el-button>
+        <el-button native-type="submit" type="danger">搜索</el-button>
       </el-form-item>
       </el-form-item>
-    </el-form>
+    </save-form>
 
 
     <div class="tableWrap">
     <div class="tableWrap">
-      <el-table :header-cell-style="{background:'#EDEEF0',color:'#444'}"
-                :data="tableList">
-        <el-table-column label="VIP编号"
-                         align="center"
-                         prop="vipGroupId"></el-table-column>
-        <el-table-column label="VIP课名称"
-                         align="center"
-                         prop="vipGroupName"></el-table-column>
-        <el-table-column label="VIP课状态"
-                         align="center">
-          <template slot-scope="scope">{{ scope.row.vipGroupStatus | vipCourseStatus }}</template>
+      <el-table
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column label="VIP编号" align="center" prop="vipGroupId">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.vipGroupId }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="VIP课名称"
+          align="center"
+          prop="vipGroupName"
+        >
+         <template slot-scope="scope">
+            <copy-text>{{ scope.row.vipGroupName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column label="VIP课状态" align="center">
+          <template slot-scope="scope">{{
+            scope.row.vipGroupStatus | vipCourseStatus
+          }}</template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="指导老师"
-                         align="center"
-                         prop="teacherName"></el-table-column>
-        <el-table-column label="乐团主管"
-                         align="center"
-                         prop="eduTeacherName"></el-table-column>
-        <el-table-column label="班级人数"
-                         align="center"
-                         prop="studentNum"></el-table-column>
-        <el-table-column label="活动方案"
-                         align="center"
-                         prop="activeName"></el-table-column>
-        <el-table-column label="开课时间"
-                         width="150"
-                         align="center"
-                         prop="courseStartDate">
-          <template slot-scope="scope">{{ scope.row.courseStartDate | dateForMinFormat }}</template>
+        <el-table-column
+          label="指导老师"
+          align="center"
+          prop="teacherName"
+        ></el-table-column>
+        <el-table-column
+          label="乐团主管"
+          align="center"
+          prop="eduTeacherName"
+        ></el-table-column>
+        <el-table-column
+          label="班级人数"
+          align="center"
+          prop="studentNum"
+        ></el-table-column>
+        <el-table-column
+          label="活动方案"
+          align="center"
+          prop="activeName"
+        ></el-table-column>
+        <el-table-column
+          label="开课时间"
+          width="150"
+          align="center"
+          prop="courseStartDate"
+        >
+          <template slot-scope="scope">{{
+            scope.row.courseStartDate | dateForMinFormat
+          }}</template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="当前课次"
-                         align="center"
-                         prop="currentClassTimes">
-          <template slot-scope="scope">{{ scope.row.currentClassTimes }}/{{ scope.row.totalClassTimes }}</template>
+        <el-table-column
+          label="当前课次"
+          align="center"
+          prop="currentClassTimes"
+        >
+          <template slot-scope="scope"
+            >{{ scope.row.currentClassTimes }}/{{
+              scope.row.totalClassTimes
+            }}</template
+          >
         </el-table-column>
         </el-table-column>
-        <el-table-column label="操作"
-                         align="center">
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <el-button @click="onCourse(scope.row)"
-                       v-permission="'studentManage/findStudentVipGroups'"
-                       type="text">课表</el-button>
+            <el-button
+              @click="onCourse(scope.row)"
+              v-permission="'studentManage/findStudentVipGroups'"
+              type="text"
+              >课表</el-button
+            >
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
-      <pagination :total="pageInfo.total"
-                  :page.sync="pageInfo.page"
-                  :limit.sync="pageInfo.limit"
-                  :page-sizes="pageInfo.page_size"
-                  @pagination="getCourseList" />
+      <pagination
+      sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getCourseList"
+      />
 
 
-      <el-dialog :title="dialogTitle"
-                 :visible.sync="dialogTableVisible">
+      <el-dialog :title="dialogTitle" :visible.sync="dialogTableVisible">
         <el-table :data="gridData">
         <el-table :data="gridData">
-          <el-table-column prop="courseDate"
-                           label="时间"
-                           align="center"
-                           width="150">
-            <template slot-scope="scope">{{ scope.row.courseDate | dateForMinFormat }}</template>
+          <el-table-column
+            prop="courseDate"
+            label="时间"
+            align="center"
+            width="150"
+          >
+            <template slot-scope="scope">{{
+              scope.row.courseDate | dateForMinFormat
+            }}</template>
           </el-table-column>
           </el-table-column>
-          <el-table-column prop="classGroupName"
-                           label="课程名称"
-                           align="center"
-                           width="200"></el-table-column>
-          <el-table-column label="课程类型"
-                           align="center">
-            <template slot-scope="scope">{{ scope.row.teachMode == 'ONLINE' ? '线上' : '线下' }}</template>
+          <el-table-column
+            prop="classGroupName"
+            label="课程名称"
+            align="center"
+            width="200"
+          ></el-table-column>
+          <el-table-column label="课程类型" align="center">
+            <template slot-scope="scope">{{
+              scope.row.teachMode == "ONLINE" ? "线上" : "线下"
+            }}</template>
           </el-table-column>
           </el-table-column>
-          <el-table-column prop="courseStatus"
-                           align="center"
-                           label="课程状态">
-            <template slot-scope="scope">{{ scope.row.courseStatus |coursesStatus }}</template>
+          <el-table-column prop="courseStatus" align="center" label="课程状态">
+            <template slot-scope="scope">{{
+              scope.row.courseStatus | coursesStatus
+            }}</template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
       </el-dialog>
       </el-dialog>
@@ -122,16 +145,16 @@ import pagination from "@/components/Pagination/index";
 import {
 import {
   findStudentVipGroups,
   findStudentVipGroups,
   findStudentVipGroupClass,
   findStudentVipGroupClass,
-  findStudentCourses
+  findStudentCourses,
 } from "@/api/studentManager";
 } from "@/api/studentManager";
 export default {
 export default {
   name: "studentvip",
   name: "studentvip",
   components: { pagination },
   components: { pagination },
-  data () {
+  data() {
     return {
     return {
       searchForm: {
       searchForm: {
         studentId: null,
         studentId: null,
-        classGroupName: null
+        classGroupName: null,
       },
       },
       checkIndex: null, // 选中的课程
       checkIndex: null, // 选中的课程
       dialogTableVisible: false,
       dialogTableVisible: false,
@@ -143,22 +166,22 @@ export default {
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
         total: 0, // 总条数
         total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
       },
       dialogTitle: "",
       dialogTitle: "",
       gridData: [],
       gridData: [],
-      userId: ""
+      userId: "",
     };
     };
   },
   },
-  created () {
+  created() {
     this.userId = this.$route.query.userId || null;
     this.userId = this.$route.query.userId || null;
   },
   },
-  mounted () {
+  mounted() {
     this.userId = this.$route.query.userId || null;
     this.userId = this.$route.query.userId || null;
     this.searchForm.studentId = this.$route.query.userId;
     this.searchForm.studentId = this.$route.query.userId;
     this.getCourseList();
     this.getCourseList();
   },
   },
-  activated () {
+  activated() {
     this.userId = this.$route.query.userId || null;
     this.userId = this.$route.query.userId || null;
     this.searchForm.studentId = this.$route.query.userId;
     this.searchForm.studentId = this.$route.query.userId;
     this.getCourseList();
     this.getCourseList();
@@ -168,22 +191,22 @@ export default {
     //   this.checkIndex = item.id
     //   this.checkIndex = item.id
     //   this.getList()
     //   this.getList()
     // },
     // },
-    getCourseList () {
+    getCourseList() {
       let params = this.searchForm;
       let params = this.searchForm;
       params.rows = this.pageInfo.limit;
       params.rows = this.pageInfo.limit;
       params.page = this.pageInfo.page;
       params.page = this.pageInfo.page;
-      findStudentVipGroupClass(params).then(res => {
+      findStudentVipGroupClass(params).then((res) => {
         if (res.code == 200) {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
           this.pageInfo.total = res.data.total;
         }
         }
       });
       });
     },
     },
-    onCourse (row) {
+    onCourse(row) {
       findStudentVipGroups({
       findStudentVipGroups({
         vipGroupId: row.vipGroupId,
         vipGroupId: row.vipGroupId,
-        studentId: this.userId
-      }).then(res => {
+        studentId: this.userId,
+      }).then((res) => {
         this.dialogTitle = row.vipGroupName;
         this.dialogTitle = row.vipGroupName;
         if (res.code == 200) {
         if (res.code == 200) {
           this.gridData = res.data.rows;
           this.gridData = res.data.rows;
@@ -191,10 +214,10 @@ export default {
         }
         }
       });
       });
     },
     },
-    onSearch () {
+    onSearch() {
       this.pageInfo.page = 1;
       this.pageInfo.page = 1;
       this.getCourseList();
       this.getCourseList();
-    }
+    },
     // getList() {
     // getList() {
     //   findStudentCourses({
     //   findStudentCourses({
     //     vipGroupId: this.checkIndex,
     //     vipGroupId: this.checkIndex,
@@ -207,7 +230,7 @@ export default {
     //     }
     //     }
     //   })
     //   })
     // }
     // }
-  }
+  },
 };
 };
 </script>
 </script>
 <style lang="scss">
 <style lang="scss">

+ 20 - 4
src/views/studentManager/studentList.vue

@@ -114,17 +114,29 @@
             align="center"
             align="center"
             prop="userId"
             prop="userId"
             label="学员编号"
             label="学员编号"
-          ></el-table-column>
+          >
+             <template slot-scope="scope">
+              <copy-text>{{ scope.row.userId }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             prop="username"
             prop="username"
             label="学员姓名"
             label="学员姓名"
-          ></el-table-column>
+          >
+           <template slot-scope="scope">
+              <copy-text>{{ scope.row.username }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             prop="organName"
             prop="organName"
             label="所属分部"
             label="所属分部"
-          ></el-table-column>
+          >
+          <template slot-scope="scope">
+              <copy-text>{{ scope.row.organName }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             prop="subjectName"
             prop="subjectName"
@@ -134,7 +146,11 @@
             align="center"
             align="center"
             prop="teacherName"
             prop="teacherName"
             label="指导老师"
             label="指导老师"
-          ></el-table-column>
+          >
+             <template slot-scope="scope">
+              <copy-text>{{ scope.row.teacherName }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="性别">
           <el-table-column align="center" label="性别">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.gender ? "男" : "女"
               scope.row.gender ? "男" : "女"

+ 46 - 31
src/views/vipClass/vipList.vue

@@ -31,11 +31,12 @@
         class="searchForm"
         class="searchForm"
         :model="searchForm"
         :model="searchForm"
       >
       >
+        <!--             @keyup.enter.native="search" -->
         <!-- 状态 指导老师 活动方案-->
         <!-- 状态 指导老师 活动方案-->
         <el-form-item>
         <el-form-item>
           <el-input
           <el-input
             v-model.trim="searchForm.search"
             v-model.trim="searchForm.search"
-            @keyup.enter.native="search"
+            clearable
             placeholder="课程名称"
             placeholder="课程名称"
           ></el-input>
           ></el-input>
         </el-form-item>
         </el-form-item>
@@ -104,15 +105,15 @@
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
         <el-form-item prop="status">
         <el-form-item prop="status">
-          <el-select class="multiple"
-                     v-model.trim="searchForm.hasEducationalTeacherId"
-                     filterable
-                     clearable
-                     placeholder="是否有乐团主管">
-            <el-option label="是"
-                       value="true"></el-option>
-            <el-option label="否"
-                       value="false"></el-option>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.hasEducationalTeacherId"
+            filterable
+            clearable
+            placeholder="是否有乐团主管"
+          >
+            <el-option label="是" value="true"></el-option>
+            <el-option label="否" value="false"></el-option>
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
 
 
@@ -134,21 +135,35 @@
             width="120px"
             width="120px"
             prop="id"
             prop="id"
             label="课程组编号"
             label="课程组编号"
-          ></el-table-column>
+          >
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.id }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             width="200px"
             width="200px"
             prop="name"
             prop="name"
             label="课程名称"
             label="课程名称"
           >
           >
-            <!-- <template slot-scope="scope">
-              <el-tooltip placement="top-start">
-                  <div slot="content">{{ scope.row.name }}</div>
-                  <div style="overflow: hidden; text-overflow: ellipsis;  white-space: nowrap;">
-                    <span>{{ scope.row.name }}</span>
-                  </div>
-              </el-tooltip>
-            </template> -->
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.name }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="name" label="分部名称">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.organName }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="userName"
+            label="指导老师"
+            width="100px"
+          >
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.userName }}</copy-text>
+            </template>
           </el-table-column>
           </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
@@ -160,18 +175,18 @@
               <div>{{ scope.row.status | formatterStatus }}</div>
               <div>{{ scope.row.status | formatterStatus }}</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center"
-                           prop="userName"
-                           label="指导老师"
-                           width='100px'></el-table-column>
-          <el-table-column align="center"
-                           prop="educationalTeacherName"
-                           label="乐团主管"></el-table-column>
-          <el-table-column align="center"
-                           prop="studentNum"
-                           label="班级人数"></el-table-column>
-          <el-table-column align="center"
-                           label="课程单价">
+
+          <el-table-column
+            align="center"
+            prop="educationalTeacherName"
+            label="乐团主管"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentNum"
+            label="班级人数"
+          ></el-table-column>
+          <el-table-column align="center" label="课程单价">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <div>
               <div>
                 <p>{{ scope.row.courseUnitPrice | moneyFormat }} 元</p>
                 <p>{{ scope.row.courseUnitPrice | moneyFormat }} 元</p>