瀏覽代碼

Merge branch '0709_OA' into 0601Action

mo 2 年之前
父節點
當前提交
10d9a0dce0
共有 54 個文件被更改,包括 2471 次插入988 次删除
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/app.bf8f9066.css
  3. 0 0
      dist/static/css/app.c832216e.css
  4. 1 0
      dist/static/css/chunk-1261e884.6c82a542.css
  5. 1 0
      dist/static/css/chunk-2091d226.3e1dcfbd.css
  6. 0 1
      dist/static/css/chunk-3f629fe0.18e449fa.css
  7. 0 0
      dist/static/css/chunk-67af02b8.0ca6bba6.css
  8. 0 0
      dist/static/css/chunk-78c1e270.b1b4a64b.css
  9. 1 0
      dist/static/css/chunk-7bef8464.7116bec3.css
  10. 0 1
      dist/static/css/chunk-ccc3bbcc.29fa4faa.css
  11. 0 0
      dist/static/css/chunk-commons.a9e310ea.css
  12. 0 0
      dist/static/css/chunk-f208cb18.650289d3.css
  13. 0 0
      dist/static/js/app.2a0d5ed5.js
  14. 0 0
      dist/static/js/app.bcb7121f.js
  15. 0 0
      dist/static/js/chunk-013e72b3.39cb40c8.js
  16. 0 0
      dist/static/js/chunk-013e72b3.d37a541a.js
  17. 0 0
      dist/static/js/chunk-1261e884.76ee5426.js
  18. 0 0
      dist/static/js/chunk-2091d226.06ed751e.js
  19. 0 0
      dist/static/js/chunk-2873911e.0591d146.js
  20. 0 0
      dist/static/js/chunk-2d0b2c7b.2bec3e18.js
  21. 0 1
      dist/static/js/chunk-2d237e94.b0a02073.js
  22. 0 0
      dist/static/js/chunk-2d2e5db1.f706084c.js
  23. 0 0
      dist/static/js/chunk-355601be.25aa4a36.js
  24. 0 0
      dist/static/js/chunk-36e50c03.5ea5ed93.js
  25. 0 0
      dist/static/js/chunk-3f629fe0.f2987b92.js
  26. 0 0
      dist/static/js/chunk-4324634e.8e9ee371.js
  27. 0 0
      dist/static/js/chunk-67af02b8.cf799d03.js
  28. 0 0
      dist/static/js/chunk-6a11f5e4.6c272a71.js
  29. 0 0
      dist/static/js/chunk-6bb6691a.8f85ddeb.js
  30. 0 0
      dist/static/js/chunk-78c1e270.5f3de535.js
  31. 0 0
      dist/static/js/chunk-7bef8464.627b54ec.js
  32. 0 0
      dist/static/js/chunk-ccc3bbcc.c8eacf3a.js
  33. 0 0
      dist/static/js/chunk-commons.4989ad0f.js
  34. 0 0
      dist/static/js/chunk-commons.aa834ea4.js
  35. 0 0
      dist/static/js/chunk-e8a49100.4b505478.js
  36. 0 0
      dist/static/js/chunk-f208cb18.21530894.js
  37. 3 0
      src/App.vue
  38. 94 96
      src/api/studentManager.js
  39. 91 67
      src/components/ImageCropper/index.vue
  40. 1 1
      src/main.js
  41. 54 43
      src/store/modules/user.js
  42. 39 30
      src/utils/auth.js
  43. 77 74
      src/utils/request.js
  44. 87 79
      src/utils/request2.js
  45. 405 266
      src/views/adapayAccount/form.vue
  46. 305 221
      src/views/adapayAccount/index.vue
  47. 431 0
      src/views/contentManager/components/appBottomPage.vue
  48. 26 23
      src/views/contentManager/components/appPage.vue
  49. 405 0
      src/views/contentManager/components/teacherButton.vue
  50. 61 42
      src/views/contentManager/platformIndex.vue
  51. 1 0
      src/views/liveClassManager/newLiveClass.vue
  52. 22 1
      src/views/organManager/api.js
  53. 272 0
      src/views/organManager/components/hfPayCount.vue
  54. 94 42
      src/views/organManager/index.vue

文件差異過大導致無法顯示
+ 0 - 0
dist/index.html


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.bf8f9066.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/app.c832216e.css


+ 1 - 0
dist/static/css/chunk-1261e884.6c82a542.css

@@ -0,0 +1 @@
+.box-card[data-v-2c3cc7fe]{margin-bottom:20px;padding-bottom:20px}.el-input[data-v-2c3cc7fe],.el-select[data-v-2c3cc7fe],.el-textarea[data-v-2c3cc7fe]{width:100%!important}.el-button--primary[data-v-2c3cc7fe],.el-button--primary[data-v-2c3cc7fe]:active,.el-button--primary[data-v-2c3cc7fe]:focus,.el-button--primary[data-v-2c3cc7fe]:hover{color:#fff}[data-v-2c3cc7fe] .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}[data-v-2c3cc7fe] .avatar-uploader .el-upload:hover{border-color:#409eff}.uploadFile[data-v-2c3cc7fe] .el-input__inner{padding:0;height:40px;line-height:32px}.avatar-uploader-icon[data-v-2c3cc7fe]{font-size:28px;color:#8c939d;width:178px;height:178px;line-height:178px;text-align:center}.avatar[data-v-2c3cc7fe]{width:178px;height:178px;display:block}.w1200[data-v-2c3cc7fe]{width:1000px;margin:0 auto}

+ 1 - 0
dist/static/css/chunk-2091d226.3e1dcfbd.css

@@ -0,0 +1 @@
+.dialog-footer[data-v-07e9e40c]{display:block;text-align:right;margin-top:20px}.courseMask .el-dialog__body[data-v-1588ef02]{padding-bottom:0}

+ 0 - 1
dist/static/css/chunk-3f629fe0.18e449fa.css

@@ -1 +0,0 @@
-.el-input[data-v-7465404b],.el-select[data-v-7465404b],.el-textarea[data-v-7465404b]{width:100%!important}.el-button--primary[data-v-7465404b],.el-button--primary[data-v-7465404b]:active,.el-button--primary[data-v-7465404b]:focus,.el-button--primary[data-v-7465404b]:hover{color:#fff}[data-v-7465404b] .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}[data-v-7465404b] .avatar-uploader .el-upload:hover{border-color:#409eff}.uploadFile[data-v-7465404b] .el-input__inner{padding:0;height:40px;line-height:32px}.avatar-uploader-icon[data-v-7465404b]{font-size:28px;color:#8c939d;width:178px;height:178px;line-height:178px;text-align:center}.avatar[data-v-7465404b]{width:178px;height:178px;display:block}

+ 0 - 0
dist/static/css/chunk-688494cc.0ca6bba6.css → dist/static/css/chunk-67af02b8.0ca6bba6.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-78c1e270.b1b4a64b.css


+ 1 - 0
dist/static/css/chunk-7bef8464.7116bec3.css

@@ -0,0 +1 @@
+.bannerImg[data-v-04e2c680],.bannerImg[data-v-5e8f6f49],.bannerImg[data-v-88681570],.bannerImg[data-v-b3af20ce]{height:60px}

+ 0 - 1
dist/static/css/chunk-ccc3bbcc.29fa4faa.css

@@ -1 +0,0 @@
-.dialog-footer[data-v-07e9e40c]{display:block;text-align:right;margin-top:20px}.courseMask .el-dialog__body[data-v-8079aa36]{padding-bottom:0}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-commons.a9e310ea.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-f208cb18.650289d3.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.2a0d5ed5.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.bcb7121f.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-013e72b3.39cb40c8.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-013e72b3.d37a541a.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-1261e884.76ee5426.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2091d226.06ed751e.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2873911e.0591d146.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2d0b2c7b.2bec3e18.js


+ 0 - 1
dist/static/js/chunk-2d237e94.b0a02073.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d237e94"],{fcab:function(a,e,t){"use strict";t.r(e);var n=function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("div",{staticClass:"m-container"},[a._m(0),a._v(" "),t("div",{staticClass:"m-core"},[t("tab-router",{attrs:{type:"card"},on:{"tab-click":a.handleClick},model:{value:a.activeName,callback:function(e){a.activeName="string"===typeof e?e.trim():e},expression:"activeName"}},[a.permissionList.training?t("el-tab-pane",{attrs:{label:"专项训练",lazy:"",name:"2"}},[2==a.activeName?t("training"):a._e()],1):a._e(),a._v(" "),a.permissionList.appPage?t("el-tab-pane",{attrs:{label:"APP按钮管理",lazy:"",name:"5"}},[5==a.activeName?t("appPage"):a._e()],1):a._e()],1)],1)])},i=[function(){var a=this,e=a.$createElement,t=a._self._c||e;return t("h2",[t("div",{staticClass:"squrt"}),a._v("平台内容管理\n  ")])}],c=(t("7f7f"),t("4a2b")),r=t("682c"),s=t("d685"),o=t("b3fe"),l=t("7e19"),m=t("490a"),g=t("224c"),b=t("8ad8"),p=t("2ad2"),f=t("ec8a"),v={components:{banner:c["a"],activity:r["a"],information:s["a"],training:o["a"],flashPage:l["a"],appPage:m["a"],knowledge:g["a"],advert:b["a"],systemNotify:p["a"]},name:"contentManager",data:function(){return{activeName:"0",permissionList:{banner:Object(f["a"])("/contentManager/banner"),activity:Object(f["a"])("/contentManager/activity"),information:Object(f["a"])("/contentManager/information"),training:Object(f["a"])("/contentManager/training"),flashPage:Object(f["a"])("/contentManager/flashPage"),appPage:Object(f["a"])("/contentManager/appPage"),knowledge:Object(f["a"])("/contentManager/knowledge"),advert:Object(f["a"])("/contentManager/advert"),systemNotify:Object(f["a"])("/contentManager/systemNotify")}}},methods:{handleClick:function(a,e){this.activeName=a.name}}},d=v,u=t("2877"),y=Object(u["a"])(d,n,i,!1,null,null,null);e["default"]=y.exports}}]);

文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2d2e5db1.f706084c.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-355601be.25aa4a36.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-36e50c03.5ea5ed93.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3f629fe0.f2987b92.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-4324634e.8e9ee371.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-67af02b8.cf799d03.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-6a11f5e4.6c272a71.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-6bb6691a.8f85ddeb.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-78c1e270.5f3de535.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-7bef8464.627b54ec.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-ccc3bbcc.c8eacf3a.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-commons.4989ad0f.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-commons.aa834ea4.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-e8a49100.4b505478.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-f208cb18.21530894.js


+ 3 - 0
src/App.vue

@@ -31,6 +31,9 @@ export default {
 };
 </script>
 <style lang="scss">
+.el-message {
+  top:120px!important;
+}
 * {
   margin: 0;
   padding: 0;

+ 94 - 96
src/api/studentManager.js

@@ -1,69 +1,68 @@
 // 系统专项设置api文件
-import request from '@/utils/request'
-import qs from 'qs'
-let api = '/api-web'
+import request from "@/utils/request";
+import qs from "qs";
+let api = "/api-web";
 
 // 获取学生列表
-export function queryStudentList (data) {
+export function queryStudentList(data) {
   return request({
-    url: api + '/studentManage/queryStudentList',
-    method: 'get',
-    params: data
-  })
+    url: api + "/studentManage/queryStudentList",
+    method: "post",
+    data
+  });
 }
 
 // 获取分部学生列表
-export function queryOrganStudentList (data) {
+export function queryOrganStudentList(data) {
   return request({
-    url: api + '/studentManage/queryOrganStudentList',
-    method: 'get',
+    url: api + "/studentManage/queryOrganStudentList",
+    method: "get",
     params: data
-  })
+  });
 }
 // 获取学生vip课
-export function findStudentVipGroupClass (data) {
+export function findStudentVipGroupClass(data) {
   return request({
     url: api + `/studentManage/findStudentVipGroupClass`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
-
 // 根据学生ID获取学生基本报名信息
-export function findStudentBaseInfo (data) {
+export function findStudentBaseInfo(data) {
   return request({
-    url: api + '/studentManage/findStudentBaseInfo',
-    method: 'get',
+    url: api + "/studentManage/findStudentBaseInfo",
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 根据学生ID获取其所在的乐团
-export function findStudentMusicGroups (data) {
+export function findStudentMusicGroups(data) {
   return request({
     url: api + `/studentManage/findStudentMusicGroups`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 根据乐团获取排课列表
-export function findStudentCourses (data) {
+export function findStudentCourses(data) {
   return request({
     url: api + `/studentManage/findStudentCourses`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 获取学生vip课
-export function findStudentVipGroups (data) {
+export function findStudentVipGroups(data) {
   return request({
     url: api + `/studentManage/findStudentVipGroups`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // // 获取学生签到列表
@@ -76,202 +75,201 @@ export function findStudentVipGroups (data) {
 // }
 
 // 提现分页查询
-export function studentWithdraw (data) {
+export function studentWithdraw(data) {
   return request({
     url: api + `/studentWithdraw/queryPage`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 获取学员扣费记录列表
-export function queryStudentPayment (data) {
+export function queryStudentPayment(data) {
   return request({
     url: api + `/studentManage/queryStudentPayment`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 获取学员订单列表
-export function studentPaymentOrderList (data) {
+export function studentPaymentOrderList(data) {
   return request({
     url: api + `/order/queryPage`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 获取用户默认账户基本信息
-export function getUserCashAccountBaseInfo (data) {
+export function getUserCashAccountBaseInfo(data) {
   return request({
     url: api + `/studentManage/getUserCashAccountBaseInfo`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 修改学生报名专业
-export function resetStudentSubject (data) {
+export function resetStudentSubject(data) {
   return request({
     url: api + `/studentRegistration/batchUpdateSubject`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
 //学生报名缴费金额详情
-export function getStudentFeeDetail (data) {
+export function getStudentFeeDetail(data) {
   return request({
     url: api + `/studentRegistration/queryFeeDetail`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 根据学生id获取
 
 // 获取学生点名总览
-export function getStudentRecord (data) {
+export function getStudentRecord(data) {
   return request({
     url: api + `/studentManage/queryMusicGroupStudentsSign`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 添加学员
-export function addStudent (data) {
+export function addStudent(data) {
   return request({
     url: api + `/studentRegistration/insertStudent`,
-    method: 'POST',
+    method: "POST",
     data: data
-  })
+  });
 }
 
 // 根据班级id获取班级内所有学生
-export function getClassAllStudent (data) {
+export function getClassAllStudent(data) {
   return request({
     url: api + `/classGroupStudent/findAllStudent`,
-    method: 'POST',
+    method: "POST",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 添加学生 addStudents
-export function addStudents (data) {
+export function addStudents(data) {
   return request({
     url: api + `/classGroupStudent/addStudents`,
-    method: 'POST',
+    method: "POST",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 删除学生
-export function removeStudents (data) {
+export function removeStudents(data) {
   return request({
     url: api + `/classGroupStudent/del`,
-    method: 'POST',
+    method: "POST",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 根据学生id查看学生班级
-export function getStudentClass (data) {
+export function getStudentClass(data) {
   return request({
     url: api + `/studentManage/queryStudentClassGroup`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 更新指定用户的账户课程余额
-export function updateCourseBalance (data) {
+export function updateCourseBalance(data) {
   return request({
     url: api + `/userCashAccount/updateCourseBalance`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 更新指定用户的账户可用余额
-export function updateBalance (data) {
+export function updateBalance(data) {
   return request({
     url: api + `/userCashAccount/updateBalance`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 根据手机号获取学生信息
-export function getStudentInfoByPhone (data) {
+export function getStudentInfoByPhone(data) {
   return request({
     url: api + `/studentManage/queryUserByPhone`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 添加学生 studentManage/register
-export function registerStudent (data) {
+export function registerStudent(data) {
   return request({
     url: api + `/studentManage/register`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 更新学生信息
-export function updateStudent (data) {
+export function updateStudent(data) {
   return request({
     url: api + `/studentManage/studentUpdate`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
 // 账户余额充值
-export function transferCourseBalanceToBalance (data) {
+export function transferCourseBalanceToBalance(data) {
   return request({
     url: api + `/userCashAccount/transferCourseBalanceToBalance`,
-    method: 'post',
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
 
-
 // 学生对外课 findStudentCourseGroupsWithWeb
-export function findStudentCourseGroupsWithWeb (data) {
+export function findStudentCourseGroupsWithWeb(data) {
   return request({
     url: api + `/coursesGroupController/findStudentCourseGroupsWithWeb`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 账户流水列表
-export function userCashAccountDetail (data) {
+export function userCashAccountDetail(data) {
   return request({
     url: api + `/userCashAccountDetail/queryPage`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 课程余额流水列表
-export function userCoursesAccount (data) {
+export function userCoursesAccount(data) {
   return request({
     url: api + `/userCoursesAccount/queryPage`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 查看学员协议
-export function getLatest (data) {
+export function getLatest(data) {
   return request({
     url: api + `/sysUserContracts/getLatest`,
-    method: 'get',
+    method: "get",
     params: data
-  })
+  });
 }

+ 91 - 67
src/components/ImageCropper/index.vue

@@ -1,24 +1,50 @@
 <template>
-    <div class="ant-upload-preview">
-        <div style="width: 100%">
-            <el-upload class="avatar-uploader" :class="[disabled ? 'uploadDisabled' : null]" :disabled="disabled" :accept="accept" :show-file-list="false" action :before-upload="beforeUpload" :http-request="handleChange">
-                <i v-if="isDelete && imageUrl" class="el-icon-error" @click.stop="onDelete" style="position: absolute;right: -14px;font-size: 24px;top: -14px;color: #787878;background: #fff;"></i>
-                <img v-if="imageUrl" :src="imageUrl" class="avatar" :style="showBox" />
-                <span v-else>
-                    <i v-if="loading" class="el-icon-loading avatar-uploader-icon" :style="showBox"></i>
-                    <i v-else class="el-icon-plus avatar-uploader-icon" :style="showBox"></i>
-                    <span class="upload-desc">添加上传图片</span>
-                </span>
-            </el-upload>
-        </div>
-        <!-- modal -->
-        <cropper-modal ref="CropperModal" @cropper-no="handleCropperClose" @cropper-ok="handleCropperSuccess"></cropper-modal>
+  <div class="ant-upload-preview">
+    <div style="width: 100%">
+      <el-upload
+        class="avatar-uploader"
+        :class="[disabled ? 'uploadDisabled' : null]"
+        :disabled="disabled"
+        :accept="accept"
+        :show-file-list="false"
+        action
+        :before-upload="beforeUpload"
+        :http-request="handleChange"
+      >
+        <i
+          v-if="isDelete && imageUrl"
+          class="el-icon-error"
+          @click.stop="onDelete"
+          style="position: absolute;right: -14px;font-size: 24px;top: -14px;color: #787878;background: #fff;"
+        ></i>
+        <img v-if="imageUrl" :src="imageUrl" class="avatar" :style="showBox" />
+        <span v-else>
+          <i
+            v-if="loading"
+            class="el-icon-loading avatar-uploader-icon"
+            :style="showBox"
+          ></i>
+          <i
+            v-else
+            class="el-icon-plus avatar-uploader-icon"
+            :style="showBox"
+          ></i>
+          <span class="upload-desc">添加上传图片</span>
+        </span>
+      </el-upload>
     </div>
+    <!-- modal -->
+    <cropper-modal
+      ref="CropperModal"
+      @cropper-no="handleCropperClose"
+      @cropper-ok="handleCropperSuccess"
+    ></cropper-modal>
+  </div>
 </template>
 <script>
-import CropperModal from './CropperModal'
+import CropperModal from "./CropperModal";
 export default {
-  name: 'ImageCropper',
+  name: "ImageCropper",
   components: {
     CropperModal
   },
@@ -34,14 +60,14 @@ export default {
           autoCropHeight: 200, //默认生成截图框高度
           fixedBox: false, //是否固定截图框大小 不允许改变
           previewsCircle: true, //预览图是否是原圆形
-          title: '上传图片'
-        }
+          title: "上传图片"
+        };
       }
     },
     // 显示图片原始图片
     showSize: {
       type: Boolean,
-      default: false,
+      default: false
     },
     // 上传图片的大小,单位M
     imgSize: {
@@ -55,17 +81,17 @@ export default {
     // 图片地址
     imageUrl: {
       type: String,
-      default: ''
+      default: ""
     },
     // 默认图片格式
     accept: {
       type: String,
-      default: '.png,.jpg,.jpeg,.gif'
+      default: ".png,.jpg,.jpeg,.gif"
     },
     acceptArray: {
       type: [Array, Object],
       default() {
-        return ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']
+        return ["image/jpeg", "image/png", "image/jpg", "image/gif"];
       }
     },
     disabled: {
@@ -77,84 +103,85 @@ export default {
     return {
       loading: false,
       isStopRun: false
-    }
+    };
   },
   computed: {
     showBox() {
-      let styleList = {}
-      if(this.showSize) {
+      let styleList = {};
+      if (this.showSize) {
         styleList = {
-          width: this.options.autoCropWidth + 'px',
-          height: this.options.autoCropHeight + 'px',
-          lineHeight: this.options.autoCropHeight + 'px',
-        }
+          width: this.options.autoCropWidth + "px",
+          height: this.options.autoCropHeight + "px",
+          lineHeight: this.options.autoCropHeight + "px"
+        };
       }
-      console.log(styleList)
-      return styleList
+      // console.log(styleList)
+      return styleList;
     }
   },
   methods: {
-    onDelete() { // 删除图片
-      this.$emit('update:imageUrl', '')
+    onDelete() {
+      // 删除图片
+      this.$emit("update:imageUrl", "");
     },
     //从本地选择文件
     handleChange(info) {
       if (this.isStopRun) {
-        return
+        return;
       }
-      this.loading = true
-      const { options } = this
-      console.log(info)
+      this.loading = true;
+      const { options } = this;
+      console.log(info);
       this.getBase64(info.file, imageUrl => {
         const target = Object.assign({}, options, {
           img: imageUrl,
           name: info.file.name // 上传文件名
-        })
-        this.$refs.CropperModal.edit(target)
-      })
+        });
+        this.$refs.CropperModal.edit(target);
+      });
     },
     // 上传之前 格式与大小校验
     beforeUpload(file) {
-      this.isStopRun = false
-      var fileType = file.type
-      if (fileType.indexOf('image') < 0) {
-        this.$message.warning('请上传图片')
-        this.isStopRun = true
-        return false
+      this.isStopRun = false;
+      var fileType = file.type;
+      if (fileType.indexOf("image") < 0) {
+        this.$message.warning("请上传图片");
+        this.isStopRun = true;
+        return false;
       }
-      const isJpgOrPng = this.acceptArray.includes(file.type)
-        // file.type === 'image/jpeg' ||
-        // file.type === 'image/png' ||
-        // file.type === 'image/jpg'
+      const isJpgOrPng = this.acceptArray.includes(file.type);
+      // file.type === 'image/jpeg' ||
+      // file.type === 'image/png' ||
+      // file.type === 'image/jpg'
       if (!isJpgOrPng) {
-        this.$message.error('你上传图片格式不正确!')
-        this.isStopRun = true
+        this.$message.error("你上传图片格式不正确!");
+        this.isStopRun = true;
       }
-      const isLtSize = file.size < this.imgSize * 1024 * 1024
+      const isLtSize = file.size < this.imgSize * 1024 * 1024;
       if (!isLtSize) {
-        this.$message.error('图片大小不能超过' + this.imgSize + 'MB!')
-        this.isStopRun = true
+        this.$message.error("图片大小不能超过" + this.imgSize + "MB!");
+        this.isStopRun = true;
       }
-      return isJpgOrPng && isLtSize
+      return isJpgOrPng && isLtSize;
     },
     //获取服务器返回的地址
     handleCropperSuccess(data) {
       //将返回的数据回显
-      this.loading = false
-      this.$emit('crop-upload-success', data)
+      this.loading = false;
+      this.$emit("crop-upload-success", data);
     },
     // 取消上传
     handleCropperClose() {
-      this.loading = false
-      this.$emit('crop-upload-close')
+      this.loading = false;
+      this.$emit("crop-upload-close");
     },
     getBase64(img, callback) {
-      const reader = new FileReader()
-      reader.addEventListener('load', () => callback(reader.result))
-      reader.readAsDataURL(img)
+      const reader = new FileReader();
+      reader.addEventListener("load", () => callback(reader.result));
+      reader.readAsDataURL(img);
     }
   }
-}
+};
 </script>
 
 <style lang="scss" scoped>
@@ -204,7 +231,4 @@ export default {
   height: 108px;
   display: block;
 }
-
 </style>
-
-

+ 1 - 1
src/main.js

@@ -64,7 +64,7 @@ class DonMessage {
     // console.log(type, options, Message)
     let params = {
       message: options,
-      offset: 90
+      offset: 90,
     }
     if (single) {
       // 判断是否已存在Message

+ 54 - 43
src/store/modules/user.js

@@ -119,63 +119,73 @@ const actions = {
   },
   // get 获取用户信息
  async getInfo ({ commit, state }) {
-    return await new Promise((resolve, reject) => {
-      getInfo(state.token).then(async (response) => {
-        if (response.code == 200) {
-          const data = response
-          if (!data.data) {
-            reject('获取用户信息错误,请重新登录')
-          }
-          const username = data.data.realName || data.data.username;
-          const avatar = data.data.avatar;
-          const organ = data.data.organId;
-          const organName = data.data.organName;
-          const phone = data.data.phone
-          const isSuperAdmin = data.data.isSuperAdmin
-          const roles = data.data?.positions?.split(',')||[]
-          const tenantId = data.data.tenantId
-          const positionName = data.data.positionName
-          sessionStorage.setItem('baseTenantId', tenantId)
-          commit('SET_BASETENANTID', tenantId)
-          let tenantConfig = sessionStorage.getItem('tenantConfig')
-          tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
-          if(tenantConfig.tenantStatus != 'on') {
-            await tenantQueryPage(tenantId)
-            // 会重置数据
-            tenantConfig = sessionStorage.getItem('tenantConfig')
+    return  new Promise(async (resolve, reject) => {
+      try{
+        await getInfo(state.token).then(async (response) => {
+          if (response.code == 200) {
+            const data = response
+            if (!data.data) {
+              reject('获取用户信息错误,请重新登录')
+            }
+            const username = data.data.realName || data.data.username;
+            const avatar = data.data.avatar;
+            const organ = data.data.organId;
+            const organName = data.data.organName;
+            const phone = data.data.phone
+            const isSuperAdmin = data.data.isSuperAdmin
+            const roles = data.data?.positions?.split(',')||[]
+            const tenantId = data.data.tenantId
+            const positionName = data.data.positionName
+            sessionStorage.setItem('baseTenantId', tenantId)
+            commit('SET_BASETENANTID', tenantId)
+            let tenantConfig = sessionStorage.getItem('tenantConfig')
             tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
+            if(tenantConfig.tenantStatus != 'on') {
+              await tenantQueryPage(tenantId)
+              // 会重置数据
+              tenantConfig = sessionStorage.getItem('tenantConfig')
+              tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
+            }
+            if(tenantId > 0) { // 判断是机构才会根据主题去设置
+              const themeColor = tenantConfig.themeColor
+              const theme = tenantConfig.theme
+              setTheme({ theme, themeColor })
+            }
+            commit('SET_TENANTID', stateTenantId)
+            commit('SET_NAME', username)
+            commit('SET_AVATAR', avatar)
+            commit('SET_ORGAN', organ)
+            commit('SET_ORGANNAME', organName)
+            commit('SET_PHONE', phone)
+            commit('SET_SUPERADMIN',isSuperAdmin)
+            commit('SET_ROLES',roles)
+            commit('SET_POSITIONNAME',positionName)
+            resolve(data)
+          }else {
+            reject('获取用户信息错误,请重新登录')
           }
-          if(tenantId > 0) { // 判断是机构才会根据主题去设置
-            const themeColor = tenantConfig.themeColor
-            const theme = tenantConfig.theme
-            setTheme({ theme, themeColor })
-          }
-          commit('SET_TENANTID', stateTenantId)
-          commit('SET_NAME', username)
-          commit('SET_AVATAR', avatar)
-          commit('SET_ORGAN', organ)
-          commit('SET_ORGANNAME', organName)
-          commit('SET_PHONE', phone)
-          commit('SET_SUPERADMIN',isSuperAdmin)
-          commit('SET_ROLES',roles)
-          commit('SET_POSITIONNAME',positionName)
-          resolve(data)
-        }
-      }).catch(error => {
+        }).catch(error => {
+          reject('获取用户信息错误,请重新登录')
+        })
+      }catch(e){
         reject('获取用户信息错误,请重新登录')
+      }
       })
-    })
+
+
   },
   // 登出
   logout ({ commit }) {
-    return new Promise((resolve, reject) => {
+    return  new Promise((resolve, reject) => {
       logout().then(() => {
         commit('SET_TOKEN', '')
         removeToken()
+        setToken('')
         removeCrossToken()
         resetRouter()
         removeTenant() // 移除机构信息
         commit('SET_NAME', '')
+        console.log(getToken)
         resolve()
       }).catch(error => {
         reject(error)
@@ -191,6 +201,7 @@ const actions = {
       removeCrossToken()
       removeTenant() // 移除机构信息
       resolve()
+      setToken('')
     })
   }
 }

+ 39 - 30
src/utils/auth.js

@@ -1,54 +1,63 @@
-import Cookies from 'js-cookie'
+import Cookies from "js-cookie";
 
-const TokenKey = 'dy_admin_token'
+const TokenKey = getKeyWordKey();
 // const CrossTokenKey = 'Admin-Token'
-const CrossTokenKey = 'Admin-Token'
+const CrossTokenKey = "Admin-Token";
 
 function getCookieDomain() {
-  let host = location.hostname
-  const ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
-  if (ip.test(host) === true || host === 'localhost') return host
-  const regex = /([^]*).*/
-  const match = host.match(regex)
-  if (typeof match !== 'undefined' && match !== null) host = match[1]
-  if (typeof host !== 'undefined' && host !== null) {
-    const strAry = host.split('.')
+  let host = location.hostname;
+  const ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
+  if (ip.test(host) === true || host === "localhost") return host;
+  const regex = /([^]*).*/;
+  const match = host.match(regex);
+  if (typeof match !== "undefined" && match !== null) host = match[1];
+  if (typeof host !== "undefined" && host !== null) {
+    const strAry = host.split(".");
     if (strAry.length > 1) {
-      host = strAry[strAry.length - 2] + '.' + strAry[strAry.length - 1]
+      host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1];
     }
   }
-  return '.' + host
+  return "." + host;
 }
 
-export function getToken () {
-  return Cookies.get(TokenKey)
+// 获取token关键字
+function getKeyWordKey() {
+  const origin = window.location.origin;
+  return origin.indexOf("online.") >= 0
+    ? "dy_admin_token"
+    : "dy_admin_token_test";
+}
+
+export function getToken() {
+  return Cookies.get(TokenKey, { domain: getCookieDomain() });
 }
 
 export function getTenantId() {
-  const tenantConfig = sessionStorage.getItem('tenantConfig')
-  const tmp = tenantConfig ? JSON.parse(tenantConfig) : null
-  return tmp ? tmp.tenantId : 0
+  const tenantConfig = sessionStorage.getItem("tenantConfig");
+  const tmp = tenantConfig ? JSON.parse(tenantConfig) : null;
+  return tmp ? tmp.tenantId : 0;
 }
 
-export function setToken (token) {
-  return Cookies.set(TokenKey, token)
+export function setToken(token) {
+  return Cookies.set(TokenKey, token, { domain: getCookieDomain() });
 }
 
-export function removeToken () {
-  return Cookies.remove(TokenKey)
+export function removeToken() {
+  Cookies.set(TokenKey, "");
+  return Cookies.remove(TokenKey);
 }
 
 export function removeTenant() {
   // 移除跟机构相关信息
-  sessionStorage.removeItem('tenantRenewStatus')
-  sessionStorage.removeItem('tenantConfig')
-  sessionStorage.removeItem('baseTenantId')
+  sessionStorage.removeItem("tenantRenewStatus");
+  sessionStorage.removeItem("tenantConfig");
+  sessionStorage.removeItem("baseTenantId");
 }
 
-export function setCrossToken (token) {
-  return Cookies.set(CrossTokenKey, token, { domain: getCookieDomain() })
+export function setCrossToken(token) {
+  return Cookies.set(CrossTokenKey, token, { domain: getCookieDomain() });
 }
 
-export function removeCrossToken () {
-  return Cookies.remove(CrossTokenKey, { domain: getCookieDomain() })
-}
+export function removeCrossToken() {
+  return Cookies.remove(CrossTokenKey, { domain: getCookieDomain() });
+}

+ 77 - 74
src/utils/request.js

@@ -1,45 +1,48 @@
-import ElementUI from 'element-ui'
-import axios from 'axios'
-import { Message } from 'element-ui'
-import store from '@/store'
-import { getToken } from '@/utils/auth'
-import cleanDeep from 'clean-deep'
-import qs from 'querystring'
+import ElementUI from "element-ui";
+import axios from "axios";
+import { Message } from "element-ui";
+import store from "@/store";
+import { getToken, removeToken, setToken } from "@/utils/auth";
+import cleanDeep from "clean-deep";
+import qs from "querystring";
 // import { Loading } from 'element-ui'
-import { showFullScreenLoading, tryHideFullScreenLoading } from './request-loading'
-import router from '@/router/index'
-import Vue from 'vue'
-const showMessage = Symbol('showMessage')
+import {
+  showFullScreenLoading,
+  tryHideFullScreenLoading
+} from "./request-loading";
+import router from "@/router/index";
+import Vue from "vue";
+const showMessage = Symbol("showMessage");
 class DonMessage {
-  success (options, single = true) {
-    this[showMessage]('success', options, single)
+  success(options, single = true) {
+    this[showMessage]("success", options, single);
   }
-  warning (options, single = true) {
-    this[showMessage]('warning', options, single)
+  warning(options, single = true) {
+    this[showMessage]("warning", options, single);
   }
-  info (options, single = true) {
-    this[showMessage]('info', options, single)
+  info(options, single = true) {
+    this[showMessage]("info", options, single);
   }
-  error (options, single = true) {
-    this[showMessage]('error', options, single)
+  error(options, single = true) {
+    this[showMessage]("error", options, single);
   }
-  [showMessage] (type, options, single) {
+  [showMessage](type, options, single) {
     if (single) {
       // 判断是否已存在Message
-      if (document.getElementsByClassName('el-message').length === 0) {
-        Message[type](options)
+      if (document.getElementsByClassName("el-message").length === 0) {
+        Message[type](options);
       }
     } else {
-      Message[type](options)
+      Message[type](options);
     }
   }
 }
 
-Vue.use(ElementUI)
+Vue.use(ElementUI);
 // 命名根据需要,DonMessage只是在文章中使用
-Vue.prototype.$message = new DonMessage()
+Vue.prototype.$message = new DonMessage();
 
-let vue = new Vue()
+let vue = new Vue();
 
 // let loading        //定义loading变量
 
@@ -60,52 +63,49 @@ let vue = new Vue()
 //调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。
 // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
 
-
 // create an axios instance
 const service = axios.create({
-  baseURL: '', // url = base url + request url
+  baseURL: "", // url = base url + request url
   // withCredentials: true, // send cookies when cross-domain requests
-  timeout: 180000, // request timeout
-})
+  timeout: 180000 // request timeout
+});
 // { fullscreen: true, text: '努力加载中', spinner: 'el-icon-loading' }
 // request interceptor
 service.interceptors.request.use(
- async config => {
+  async config => {
     // do something before request is sent
-  await  showFullScreenLoading(store)
+    await showFullScreenLoading(store);
     if (store.getters.token) {
       // let each request carry token
       // ['X-Token'] is a custom headers key
       // please modify it according to the actual situation
-      config.headers['Authorization'] = getToken()
+      config.headers["Authorization"] = getToken();
       // config.headers['content-type'] = "application/x-www-form-urlencoded"
     }
-    let tenantConfig = sessionStorage.getItem('tenantConfig')
-    tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
-    if(tenantConfig.tenantId && tenantConfig.tenantId != 'undefined') {
-      config.headers['tenantId'] = tenantConfig.tenantId
+    let tenantConfig = sessionStorage.getItem("tenantConfig");
+    tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {};
+    if (tenantConfig.tenantId && tenantConfig.tenantId != "undefined") {
+      config.headers["tenantId"] = tenantConfig.tenantId;
     }
-    config.params = cleanDeep(config.params)
+    config.params = cleanDeep(config.params);
     //  params: cleanDeep(options.params),
     //  (config)
-    return config
+    return config;
   },
   error => {
     // do something with request error
-    return Promise.reject(error)
-
+    return Promise.reject(error);
   }
-)
+);
 
 // response interceptor
 service.interceptors.response.use(
- async res => {
-    //res.code !== 200
-  await tryHideFullScreenLoading(store)
-    if (res.data) {
-
-
-      let data = JSON.parse(JSON.stringify(res.data))
+  async res => {
+    //res.code !==
+    console.log(res.data.code)
+    await tryHideFullScreenLoading(store);
+    if (res.data.code) {
+      let data = JSON.parse(JSON.stringify(res.data));
       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
       if (data.code == 401 || data.code == 403) {
         // Message({
@@ -113,48 +113,51 @@ service.interceptors.response.use(
         //   type: 'error',
         //   duration: 5 * 1000
         // })
-        vue.$message.error(`登录过期,请重新登录!`)
-        setTimeout(() => {
+        console.log('进入403')
+        console.log('进入403token',getToken())
+        vue.$message.error(`登录过期,请重新登录!`);
+        removeToken();
+        console.log('清空之后的tocken',getToken())
+        await store.dispatch("user/resetToken").then(() => {
+          setTimeout(async () => {
+          location.reload();
+          }, 1000);
+        });
 
-          store.dispatch('user/resetToken').then(() => {
-            location.reload()
-          })
-        }, 1000);
         return;
       }
       if (data.code == 404) {
-        router.push('/404')
+        router.push("/404");
       }
-      if (data.code < 200&&data.code != 100||data.code >= 300&&data.code != 100) {
+      if (
+        (data.code < 200 && data.code != 100) ||
+        (data.code >= 300 && data.code != 100)
+      ) {
         // Message({
         //   message: data.msg || `请求失败code码为${ data.code }`,
         //   type: 'error',
         //   duration: 5 * 1000
         // })
-        let str = data.msg || `请求失败code码为${data.code}`
+        let str = data.msg || `请求失败code码为${data.code}`;
 
-        vue.$message.error(str)
+        vue.$message.error(str);
 
-        return Promise.reject(new Error(data.msg || 'Error'))
+        return Promise.reject(new Error(data.msg || "Error"));
       } else {
-
-        return data
-
+        return data;
       }
     } else {
-
-
-      return Promise.reject()
+      return Promise.reject();
     }
   },
- async error => {
-    if (error.message == 'Network Error') {
-      vue.$message.error('网络异常,请检查网络连接')
+  async error => {
+    if (error.message == "Network Error") {
+      vue.$message.error("网络异常,请检查网络连接");
     } else {
-      vue.$message.error(error.message)
+      vue.$message.error(error.message);
     }
-  await  tryHideFullScreenLoading(store)
-    return Promise.reject(error)
+    await tryHideFullScreenLoading(store);
+    return Promise.reject(error);
   }
-)
-export default service
+);
+export default service;

+ 87 - 79
src/utils/request2.js

@@ -1,45 +1,48 @@
-import ElementUI from 'element-ui'
-import axios from 'axios'
-import { Message } from 'element-ui'
-import store from '@/store'
-import qs from 'querystring'
-import { getToken } from '@/utils/auth'
-import cleanDeep from 'clean-deep'
+import ElementUI from "element-ui";
+import axios from "axios";
+import { Message } from "element-ui";
+import store from "@/store";
+import qs from "querystring";
+import { getToken, removeToken,setToken } from "@/utils/auth";
+import cleanDeep from "clean-deep";
 // import { Loading } from 'element-ui'
-import { showFullScreenLoading, tryHideFullScreenLoading } from './request-loading'
-import router from '@/router/index'
-import Vue from 'vue'
-const showMessage = Symbol('showMessage')
+import {
+  showFullScreenLoading,
+  tryHideFullScreenLoading
+} from "./request-loading";
+import router from "@/router/index";
+import Vue from "vue";
+const showMessage = Symbol("showMessage");
 class DonMessage {
-  success (options, single = true) {
-    this[showMessage]('success', options, single)
+  success(options, single = true) {
+    this[showMessage]("success", options, single);
   }
-  warning (options, single = true) {
-    this[showMessage]('warning', options, single)
+  warning(options, single = true) {
+    this[showMessage]("warning", options, single);
   }
-  info (options, single = true) {
-    this[showMessage]('info', options, single)
+  info(options, single = true) {
+    this[showMessage]("info", options, single);
   }
-  error (options, single = true) {
-    this[showMessage]('error', options, single)
+  error(options, single = true) {
+    this[showMessage]("error", options, single);
   }
-  [showMessage] (type, options, single) {
+  [showMessage](type, options, single) {
     if (single) {
       // 判断是否已存在Message
-      if (document.getElementsByClassName('el-message').length === 0) {
-        Message[type](options)
+      if (document.getElementsByClassName("el-message").length === 0) {
+        Message[type](options);
       }
     } else {
-      Message[type](options)
+      Message[type](options);
     }
   }
 }
 
-Vue.use(ElementUI)
+Vue.use(ElementUI);
 // 命名根据需要,DonMessage只是在文章中使用
-Vue.prototype.$message = new DonMessage()
+Vue.prototype.$message = new DonMessage();
 
-let vue = new Vue()
+let vue = new Vue();
 
 // let loading        //定义loading变量
 
@@ -59,63 +62,63 @@ let vue = new Vue()
 //声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。
 //调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。
 
-
 // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
 
-
 // create an axios instance
 const service = axios.create({
-  baseURL: '', // url = base url + request url
+  baseURL: "", // url = base url + request url
   // withCredentials: true, // send cookies when cross-domain requests
-  timeout: 180000, // request timeout
-})
+  timeout: 180000 // request timeout
+});
 // { fullscreen: true, text: '努力加载中', spinner: 'el-icon-loading' }
 // request interceptor
 service.interceptors.request.use(
- async config => {
+  async config => {
     // do something before request is sent
-    let hideLoading = config.hideLoading || false
-    if(!hideLoading) {
-      await showFullScreenLoading(store)
+    let hideLoading = config.hideLoading || false;
+    if (!hideLoading) {
+      await showFullScreenLoading(store);
     }
     if (store.getters.token) {
       // let each request carry token
       // ['X-Token'] is a custom headers key
       // please modify it according to the actual situation
-      config.headers['Authorization'] = getToken()
+      config.headers["Authorization"] = getToken();
     }
     // const tenantStatus = config.data?.tenantStatus || config.params?.tenantStatus || null
-    let tenantConfig = sessionStorage.getItem('tenantConfig')
-    tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
-    if(tenantConfig.tenantId && tenantConfig.tenantId != 'undefined') {
-      config.headers['tenantId'] = tenantConfig.tenantId
+    let tenantConfig = sessionStorage.getItem("tenantConfig");
+    tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {};
+    if (tenantConfig.tenantId && tenantConfig.tenantId != "undefined") {
+      config.headers["tenantId"] = tenantConfig.tenantId;
     }
     // 是否进行数据过滤
-    const noCleanDeep = config.noCleanDeep || false
-    if (config.requestType === 'form') {
-      config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
-      config.data = qs.stringify(noCleanDeep ? config.data : cleanDeep(config.data))
+    const noCleanDeep = config.noCleanDeep || false;
+    if (config.requestType === "form") {
+      config.headers["Content-Type"] = "application/x-www-form-urlencoded";
+      config.data = qs.stringify(
+        noCleanDeep ? config.data : cleanDeep(config.data)
+      );
     } else {
-      config.data = noCleanDeep ? config.data : cleanDeep(config.data)
+      config.data = noCleanDeep ? config.data : cleanDeep(config.data);
     }
-    config.params = noCleanDeep ? config.data : cleanDeep(config.params)
-    return config
+    config.params = noCleanDeep ? config.data : cleanDeep(config.params);
+    return config;
   },
-async  error => {
+  async error => {
     // do something with request error
-  await  tryHideFullScreenLoading(store)
-    return Promise.reject(error)
-
+    await tryHideFullScreenLoading(store);
+    return Promise.reject(error);
   }
-)
+);
 
 // response interceptor
 service.interceptors.response.use(
-async  res => {
+  async res => {
     //res.code !== 200
-  await  tryHideFullScreenLoading(store)
-    if (res.data) {
-      let data = JSON.parse(JSON.stringify(res.data))
+    await tryHideFullScreenLoading(store);
+    console.log(res.data.code)
+    if (res.data.code) {
+      let data = JSON.parse(JSON.stringify(res.data));
       // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
       if (data.code == 401 || data.code == 403) {
         // Message({
@@ -123,47 +126,52 @@ async  res => {
         //   type: 'error',
         //   duration: 5 * 1000
         // })
-        vue.$message.error(`登录过期,请重新登录!`)
-        setTimeout(() => {
+        console.log('进入403')
+        console.log('进入403token',getToken())
+        vue.$message.error(`登录过期,请重新登录!`);
+        removeToken();
+        console.log('清空之后的tocken',getToken())
+        await store.dispatch("user/resetToken").then(() => {
+          setTimeout(async () => {
+          location.reload();
+          }, 1000);
+        });
 
-          store.dispatch('user/resetToken').then(() => {
-            location.reload()
-          })
-        }, 1000);
         return;
       }
       if (data.code == 404) {
-        router.push('/404')
+        router.push("/404");
       }
-      if (data.code < 200&&data.code != 100||data.code >= 300&&data.code != 100) {
+      if (
+        (data.code < 200 && data.code != 100) ||
+        (data.code >= 300 && data.code != 100)
+      ) {
         // Message({
         //   message: data.msg || `请求失败code码为${ data.code }`,
         //   type: 'error',
         //   duration: 5 * 1000
         // })
-        let str = data.msg || `请求失败code码为${data.code}`
+        let str = data.msg || `请求失败code码为${data.code}`;
         if (res.config.hint !== true) {
-          vue.$message.error(str)
+          vue.$message.error(str);
         }
 
-        return Promise.reject(data)
+        return Promise.reject(data);
       } else {
-        return data
-
+        return data;
       }
     } else {
-
-      return Promise.reject()
+      return Promise.reject();
     }
   },
- async error => {
-    if (error.message == 'Network Error') {
-      vue.$message.error('网络异常,请检查网络连接')
+  async error => {
+    if (error.message == "Network Error") {
+      vue.$message.error("网络异常,请检查网络连接");
     } else {
-      vue.$message.error(error.message)
+      vue.$message.error(error.message);
     }
-   await tryHideFullScreenLoading(store)
-    return Promise.reject(error)
+    await tryHideFullScreenLoading(store);
+    return Promise.reject(error);
   }
-)
-export default service
+);
+export default service;

+ 405 - 266
src/views/adapayAccount/form.vue

@@ -2,130 +2,112 @@
 <template>
   <div class="m-container">
     <h2>
-      <el-page-header @back="onCancel"
-                      :content="(payType == 'create' ? '创建账号' : '修改账号')"></el-page-header>
+      <el-page-header
+        @back="onCancel"
+        :content="payType == 'create' ? '创建账号' : '修改账号'"
+      ></el-page-header>
     </h2>
-    <div class="m-core"
-         style="overflow: hidden">
-      <el-col :span="12" :lg="14" :md="20" :sm="20" :xs="24">
-        <el-form :model="form"
-                 :rules="rules"
-                 ref="accountForm"
-                 label-position="right"
-                 label-width="180px">
-          <el-form-item label="商户号"
-                        prop="memberId">
-            <el-input v-model="form.memberId"
-                      :disabled="payType == 'update' ? true : false"
-                      placeholder="请输入商户号"></el-input>
-          </el-form-item>
-          <el-form-item label="公司名称"
-                        prop="name">
-            <el-input v-model="form.name"
-                      placeholder="请输入公司名称"></el-input>
-          </el-form-item>
-          <el-form-item label="公司法人"
-                        prop="legalPerson">
-            <el-input v-model="form.legalPerson"
-                      placeholder="请输入公司法人"></el-input>
-          </el-form-item>
-          <el-form-item label="公司法人手机号"
-                        prop="legalMp">
-            <el-input v-model="form.legalMp" maxlength="11"
-                      placeholder="请输入公司法人手机号"></el-input>
-          </el-form-item>
-          <el-form-item label="法人身份证号"
-                        prop="legalCertId">
-            <el-input v-model="form.legalCertId"
-                      placeholder="请输入法人身份证号"></el-input>
-          </el-form-item>
-          <el-form-item label="身份证有效期"
-                        prop="legalCertIdExpires">
-            <el-date-picker v-model="form.legalCertIdExpires"
-                            :picker-options="{ firstDayOfWeek:1 }"
-                            value-format="yyyyMMdd"
-                            type="date"
-                            placeholder="请选择身份证有效期">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="银行卡号"
-                        prop="cardNo">
-            <el-input v-model="form.cardNo"
-                      placeholder="请输入银行卡号"></el-input>
-          </el-form-item>
-          <el-form-item label="所属银行"
-                        prop="bankCode">
-            <el-select v-model="form.bankCode"
-                       placeholder="请选择所属银行">
-              <el-option v-for="(item, index) in backList"
-                         :key="index"
-                         :label="item.title"
-                         :value="item.value"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="省市" required>
-            <el-row>
-              <el-col :span="12">
-                <el-form-item prop="provCode" style="margin-bottom: 0;">
-                  <el-select v-model="form.provCode"
-                             style="width: 98% !important"
-                             @change="onProvChange"
-                             placeholder="请选择省份">
-                    <el-option v-for="(item, index) in cityList"
-                               :key="index"
-                               :label="item.title"
-                               :value="item.value"></el-option>
-                  </el-select>
-                </el-form-item>
-              </el-col>
-              <el-col :span="12">
-                <el-form-item prop="areaCode" style="margin-bottom: 0;">
-                  <el-select v-model="form.areaCode"
-                             style="width: 100% !important"
-                             placeholder="请选择城市">
-                    <el-option v-for="(item, index) in selectListCity"
-                               :key="index"
-                               :label="item.title"
-                               :value="item.value"></el-option>
-                  </el-select>
-                </el-form-item>
-              </el-col>
-            </el-row>
-          </el-form-item>
-          <el-form-item label="统一社会信用码"
-                        prop="socialCreditCode">
-            <el-input v-model="form.socialCreditCode"
-                      placeholder="请输入统一社会信用码"></el-input>
-          </el-form-item>
-          <el-form-item label="统一社会信用码有效期"
-                        prop="socialCreditCodeExpires">
-            <el-date-picker v-model="form.socialCreditCodeExpires"
-                            :picker-options="{ firstDayOfWeek:1 }"
-                            value-format="yyyyMMdd"
-                            type="date"
-                            placeholder="请选择统一社会信用码有效期">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="经营范围"
-                        prop="businessScope">
-            <!-- <el-input v-model="form.businessScope" placeholder="请输入经营范围"></el-input> -->
-            <el-input type="textarea"
-                      :rows="3"
-                      v-model="form.businessScope"
-                      placeholder="请输入经营范围"></el-input>
-          </el-form-item>
-          <el-form-item label="公司地址"
-                        prop="address">
-            <el-input v-model="form.address"
-                      placeholder="请输入公司地址"></el-input>
-          </el-form-item>
-          <el-form-item label="证照文件"
-                        prop="multipartFile">
-            <template slot="label">
-              证照文件
-              <el-tooltip placement="top" popper-class="mTooltip">
+    <!-- m-core -->
+    <div class="w1200" style="overflow: hidden">
+      <el-form
+        :model="form"
+        :rules="rules"
+        ref="accountForm"
+        label-position="right"
+        label-width="180px"
+      >
+        <el-card class="box-card">
+          <el-alert
+            title="企业信息"
+            :closable="false"
+            type="info"
+            style="margin: 20px 0"
+          >
+          </el-alert>
+          <el-col :span="12" :lg="14" :md="20" :sm="20" :xs="24">
+            <el-form-item label="商户号" prop="memberId">
+              <el-input
+                v-model="form.memberId"
+                :disabled="payType == 'update' ? true : false"
+                placeholder="请输入商户号"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="公司名称" prop="name">
+              <el-input
+                v-model="form.name"
+                placeholder="请输入公司名称"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="统一社会信用码" prop="socialCreditCode">
+              <el-input
+                v-model="form.socialCreditCode"
+                placeholder="请输入统一社会信用码"
+              ></el-input>
+            </el-form-item>
+            <el-form-item
+              label="统一社会信用码有效期"
+              prop="socialCreditCodeExpires"
+            >
+              <el-date-picker
+                v-model="form.socialCreditCodeExpires"
+                :picker-options="{ firstDayOfWeek: 1 }"
+                value-format="yyyyMMdd"
+                type="date"
+                placeholder="请选择统一社会信用码有效期"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="公司法人" prop="legalPerson">
+              <el-input
+                v-model="form.legalPerson"
+                placeholder="请输入公司法人"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="公司法人手机号" prop="legalMp">
+              <el-input
+                v-model="form.legalMp"
+                maxlength="11"
+                placeholder="请输入公司法人手机号"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="法人身份证号" prop="legalCertId">
+              <el-input
+                v-model="form.legalCertId"
+                placeholder="请输入法人身份证号"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="身份证有效期" prop="legalCertIdExpires">
+              <el-date-picker
+                v-model="form.legalCertIdExpires"
+                :picker-options="{ firstDayOfWeek: 1 }"
+                value-format="yyyyMMdd"
+                type="date"
+                placeholder="请选择身份证有效期"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="经营范围" prop="businessScope">
+              <!-- <el-input v-model="form.businessScope" placeholder="请输入经营范围"></el-input> -->
+              <el-input
+                type="textarea"
+                :rows="3"
+                v-model="form.businessScope"
+                placeholder="请输入经营范围"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="公司地址" prop="address">
+              <el-input
+                v-model="form.address"
+                placeholder="请输入公司地址"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="证照文件" prop="multipartFile">
+              <template slot="label">
+                证照文件
+                <el-tooltip placement="top" popper-class="mTooltip">
                   <div slot="content">
-                    内容须包含三证合一证件照、法人身份证正面照、法人身份证反面照、开户银行许可证照。 压缩 zip包后上传。最大限制为 9 M。
+                    内容须包含三证合一证件照、法人身份证正面照、法人身份证反面照、开户银行许可证照。
+                    压缩 zip包后上传。最大限制为 9 M。
                     <!-- 最大限制为 9 M。 -->
                   </div>
                   <i
@@ -138,28 +120,33 @@
                     "
                   ></i>
                 </el-tooltip>
-            </template>
-            <!-- <el-input type="file" class="uploadFile" v-model="form.multipartFile"></el-input> -->
-            <el-upload class="avatar-upload"
-                       ref="upload"
-                       action="/api-web/uploadFile"
-                       :headers="headers"
-                       :on-preview="handlePreview"
-                       :on-remove="handleRemove"
-                       :on-change="handleChange"
-                       :file-list="fileList"
-                       accept=".zip"
-                       :multiple="false"
-                       :limit="1"
-                       :auto-upload="false">
-              <el-button slot="trigger"
-                         type="primary">选取文件</el-button>
-              <!-- ,且不超过500kb -->
-              <div slot="tip"
-                   style="display: inline; padding-left: 20px;"
-                   class="el-upload__tip">只能上传一个文件</div>
-            </el-upload>
-            <!-- <el-upload class="avatar-uploader"
+              </template>
+              <!-- <el-input type="file" class="uploadFile" v-model="form.multipartFile"></el-input> -->
+              <el-upload
+                class="avatar-upload"
+                ref="upload"
+                action="/api-web/uploadFile"
+                :headers="headers"
+                :on-preview="handlePreview"
+                :on-remove="handleRemove"
+                :on-change="handleChange"
+                :file-list="fileList"
+                accept=".zip"
+                :multiple="false"
+                :limit="1"
+                :auto-upload="false"
+              >
+                <el-button slot="trigger" type="primary">选取文件</el-button>
+                <!-- ,且不超过500kb -->
+                <div
+                  slot="tip"
+                  style="display: inline; padding-left: 20px"
+                  class="el-upload__tip"
+                >
+                  只能上传一个文件
+                </div>
+              </el-upload>
+              <!-- <el-upload class="avatar-uploader"
                             action="/api-web/uploadFile"
                             :headers="headers"
                             :show-file-list="false"
@@ -171,19 +158,103 @@
                             <i v-else
                             class="el-icon-plus avatar-uploader-icon"></i>
                         </el-upload> -->
-          </el-form-item>
-          <el-form-item label="邮编"
-                        prop="zipCode">
-            <el-input v-model="form.zipCode"
-                      placeholder="请输入邮编"></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" 
-                       @click="onSubmit('accountForm')">确 定</el-button>
-            <el-button @click="onCancel" >取 消</el-button>
-          </el-form-item>
-        </el-form>
-      </el-col>
+            </el-form-item>
+            <el-form-item label="邮编" prop="zipCode">
+              <el-input
+                v-model="form.zipCode"
+                placeholder="请输入邮编"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-card>
+        <el-card class="box-card">
+          <el-alert
+            title="账户设置"
+            :closable="false"
+            type="info"
+            style="margin: 20px 0"
+          >
+          </el-alert>
+          <el-col :span="12" :lg="14" :md="20" :sm="20" :xs="24">
+            <el-form-item label="银行卡号" prop="cardNo">
+              <el-input
+                v-model="form.cardNo"
+                placeholder="请输入银行卡号"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="所属银行" prop="bankCode">
+              <el-select v-model="form.bankCode" placeholder="请选择所属银行">
+                <el-option
+                  v-for="(item, index) in backList"
+                  :key="index"
+                  :label="item.title"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="银行账户类型" prop="bankAcctType">
+              <el-select
+                v-model="form.bankAcctType"
+                placeholder="请选择银行账户类型"
+              >
+                <el-option label="对公" value="1"></el-option>
+                <el-option label="对私" value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="银行卡对应的户名" prop="cardName">
+              <el-input
+                v-model="form.cardName"
+                placeholder="请输入银行卡对应的户名"
+              ></el-input>
+            </el-form-item>
+
+            <el-form-item label="省市" required>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item prop="provCode" style="margin-bottom: 0">
+                    <el-select
+                      v-model="form.provCode"
+                      style="width: 98% !important"
+                      @change="onProvChange"
+                      placeholder="请选择省份"
+                    >
+                      <el-option
+                        v-for="(item, index) in cityList"
+                        :key="index"
+                        :label="item.title"
+                        :value="item.value"
+                      ></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item prop="areaCode" style="margin-bottom: 0">
+                    <el-select
+                      v-model="form.areaCode"
+                      style="width: 100% !important"
+                      placeholder="请选择城市"
+                    >
+                      <el-option
+                        v-for="(item, index) in selectListCity"
+                        :key="index"
+                        :label="item.title"
+                        :value="item.value"
+                      ></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form-item>
+
+            <el-form-item>
+              <el-button type="primary" @click="onSubmit('accountForm')"
+                >确 定</el-button
+              >
+              <el-button @click="onCancel">取 消</el-button>
+            </el-form-item>
+          </el-col>
+        </el-card>
+      </el-form>
     </div>
   </div>
 </template>
@@ -192,22 +263,22 @@
 import { cityJson } from "../../utils/cityJson";
 import { bankJson } from "../../utils/bankJson";
 import { getToken } from "@/utils/auth";
-import load from '@/utils/loading'
-import { createMember, updateMember } from './api.js'
-import { isvalidPhone } from '@/utils/validate'
+import load from "@/utils/loading";
+import { createMember, updateMember } from "./api.js";
+import { isvalidPhone } from "@/utils/validate";
 let validPhone = (rule, value, callback) => {
   if (!value) {
-    callback(new Error('请输入公司法人手机号'))
+    callback(new Error("请输入公司法人手机号"));
   } else if (!isvalidPhone(value)) {
-    callback(new Error('请输入正确的11位手机号码'))
+    callback(new Error("请输入正确的11位手机号码"));
   } else {
-    callback()
+    callback();
   }
-}
+};
 export default {
-  name: 'ADaPayAccount',
-  data () {
-    const query = this.$route.query
+  name: "ADaPayAccount",
+  data() {
+    const query = this.$route.query;
     return {
       payType: query.type,
       row: query.row ? JSON.parse(query.row) : {},
@@ -215,7 +286,7 @@ export default {
       cityList: cityJson,
       selectListCity: [],
       headers: {
-        Authorization: getToken()
+        Authorization: getToken(),
       },
       fileList: [],
       files: null, // 上传对象
@@ -236,42 +307,95 @@ export default {
         businessScope: null,
         address: null,
         multipartFile: null,
-        zipCode: null
+        zipCode: null,
+        bankAcctType: null,
+        cardName: null,
       },
       rules: {
-        memberId: [{ required: true, message: '请输入商户号', trigger: 'blur' }],
-        name: [{ required: true, message: '请输入公司名称', trigger: 'blur' }],
-        legalPerson: [{ required: true, message: '请输入公司法人', trigger: 'blur' }],
-        legalMp: [{ type: 'number', required: true, validator: validPhone, trigger: 'blur' }],
-        legalCertId: [{ required: true, message: '请输入法人身份证号', trigger: 'blur' }],
-        legalCertIdExpires: [{ required: true, message: '请选择身份证有效期', trigger: 'change' }],
-        cardNo: [{ required: true, message: '请输入银行卡号', trigger: 'blur' }],
-        bankCode: [{ required: true, message: '请选择所属银行', trigger: 'change' }],
-        provCode: [{ required: true, message: '请选择省份', trigger: 'change' }],
-        areaCode: [{ required: true, message: '请选择城市', trigger: 'change' }],
-        socialCreditCode: [{ required: true, message: '请输入统一社会信用码', trigger: 'blur' }],
-        socialCreditCodeExpires: [{ required: true, message: '请选择统一社会信用码有效期', trigger: 'change' }],
-        businessScope: [{ required: true, message: '请输入经营范围', trigger: 'blur' }],
-        address: [{ required: true, message: '请输入公司地址', trigger: 'blur' }],
-        multipartFile: [{ required: true, message: '请上传证照文件', trigger: 'change' }],
-        zipCode: [{ required: true, message: '请输入邮编', trigger: 'blur' }]
-      }
+        memberId: [
+          { required: true, message: "请输入商户号", trigger: "blur" },
+        ],
+        name: [{ required: true, message: "请输入公司名称", trigger: "blur" }],
+        legalPerson: [
+          { required: true, message: "请输入公司法人", trigger: "blur" },
+        ],
+        legalMp: [
+          {
+            type: "number",
+            required: true,
+            validator: validPhone,
+            trigger: "blur",
+          },
+        ],
+        legalCertId: [
+          { required: true, message: "请输入法人身份证号", trigger: "blur" },
+        ],
+        legalCertIdExpires: [
+          { required: true, message: "请选择身份证有效期", trigger: "change" },
+        ],
+        cardNo: [
+          { required: true, message: "请输入银行卡号", trigger: "blur" },
+        ],
+        bankCode: [
+          { required: true, message: "请选择所属银行", trigger: "change" },
+        ],
+        provCode: [
+          { required: true, message: "请选择省份", trigger: "change" },
+        ],
+        areaCode: [
+          { required: true, message: "请选择城市", trigger: "change" },
+        ],
+        socialCreditCode: [
+          { required: true, message: "请输入统一社会信用码", trigger: "blur" },
+        ],
+        socialCreditCodeExpires: [
+          {
+            required: true,
+            message: "请选择统一社会信用码有效期",
+            trigger: "change",
+          },
+        ],
+        businessScope: [
+          { required: true, message: "请输入经营范围", trigger: "blur" },
+        ],
+        address: [
+          { required: true, message: "请输入公司地址", trigger: "blur" },
+        ],
+        multipartFile: [
+          { required: true, message: "请上传证照文件", trigger: "change" },
+        ],
+        zipCode: [{ required: true, message: "请输入邮编", trigger: "blur" }],
+        cardName: [
+          {
+            required: true,
+            message: "请输入银行卡对应的户名",
+            trigger: "blur",
+          },
+        ],
+        bankAcctType: [
+          {
+            required: true,
+            message: "银行账户类型",
+            trigger: "blur",
+          },
+        ],
+      },
     };
   },
-  mounted () {
-    this.__init()
+  mounted() {
+    this.__init();
   },
   methods: {
-    __init () {
-      const query = this.$route.query
-      this.payType = query.type
-      this.row = query.row ? JSON.parse(query.row) : {}
-      this.files = null
-      this.fileList = []
-      this.form.multipartFile = null
-      if (this.payType == 'update') {
-        const row = this.row
-        this.id = row.id
+    __init() {
+      const query = this.$route.query;
+      this.payType = query.type;
+      this.row = query.row ? JSON.parse(query.row) : {};
+      this.files = null;
+      this.fileList = [];
+      this.form.multipartFile = null;
+      if (this.payType == "update") {
+        const row = this.row;
+        this.id = row.id;
         this.form = {
           memberId: row.memberId,
           name: row.name,
@@ -288,14 +412,16 @@ export default {
           businessScope: row.businessScope,
           address: row.address,
           multipartFile: row.multipartFile,
-          zipCode: row.zipCode
-        }
-        this.cityList.forEach(item => {
+          zipCode: row.zipCode,
+          bankAcctType: row.bankAcctType,
+          cardName: row.cardName,
+        };
+        this.cityList.forEach((item) => {
           if (item.value == row.provCode) {
-            this.selectListCity = item.cities
+            this.selectListCity = item.cities;
           }
-        })
-      } else if (this.payType == 'create') {
+        });
+      } else if (this.payType == "create") {
         // this.form = {
         //     memberId: null,
         //     name: null,
@@ -314,102 +440,111 @@ export default {
         //     multipartFile: null,
         //     zipCode: null
         // }
-        this.$refs["accountForm"].resetFields()
+        this.$refs["accountForm"].resetFields();
       }
     },
-    async onSubmit (formName) {
-      this.$refs[formName].validate(valid => {
+    async onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
-          const form = this.form
-          let formData = new FormData()
-          formData.append("memberId", form.memberId)
-          formData.append("name", form.name)
-          formData.append("legalPerson", form.legalPerson)
-          formData.append("legalMp", form.legalMp)
-          formData.append("legalCertId", form.legalCertId)
-          formData.append("legalCertIdExpires", form.legalCertIdExpires)
-          formData.append("cardNo", form.cardNo)
-          formData.append("bankCode", form.bankCode)
-          formData.append("provCode", form.provCode)
-          formData.append("areaCode", form.areaCode)
-          formData.append("socialCreditCode", form.socialCreditCode)
-          formData.append("socialCreditCodeExpires", form.socialCreditCodeExpires)
-          formData.append("businessScope", form.businessScope)
-          formData.append("address", form.address)
-          formData.append("multipartFile", form.multipartFile)
-          formData.append("zipCode", form.zipCode)
-          if (this.payType == 'create') {
-            createMember(formData).then(res => {
+          const form = this.form;
+          let formData = new FormData();
+          formData.append("memberId", form.memberId);
+          formData.append("name", form.name);
+          formData.append("legalPerson", form.legalPerson);
+          formData.append("legalMp", form.legalMp);
+          formData.append("legalCertId", form.legalCertId);
+          formData.append("legalCertIdExpires", form.legalCertIdExpires);
+          formData.append("cardNo", form.cardNo);
+          formData.append("bankCode", form.bankCode);
+          formData.append("provCode", form.provCode);
+          formData.append("areaCode", form.areaCode);
+          formData.append("socialCreditCode", form.socialCreditCode);
+          formData.append(
+            "socialCreditCodeExpires",
+            form.socialCreditCodeExpires
+          );
+          formData.append("businessScope", form.businessScope);
+          formData.append("address", form.address);
+          formData.append("multipartFile", form.multipartFile);
+          formData.append("zipCode", form.zipCode);
+          formData.append("bankAcctType", form.bankAcctType);
+          formData.append("cardName", form.cardName);
+          if (this.payType == "create") {
+            createMember(formData).then((res) => {
               if (res.code == 200) {
-                this.$message.success('保存成功')
-                this.onCancel()
+                this.$message.success("保存成功");
+                this.onCancel();
               } else {
-                this.$message.error(res.msg)
+                this.$message.error(res.msg);
               }
-            })
-          } else if (this.payType == 'update') {
-            formData.append('id', this.id)
-            updateMember(formData).then(res => {
+            });
+          } else if (this.payType == "update") {
+            formData.append("id", this.id);
+            updateMember(formData).then((res) => {
               if (res.code == 200) {
-                this.$message.success('保存成功')
-                this.onCancel()
+                this.$message.success("保存成功");
+                this.onCancel();
               } else {
-                this.$message.error(res.msg)
+                this.$message.error(res.msg);
               }
-            })
+            });
           }
         } else {
           this.$nextTick(() => {
-            let isError = document.getElementsByClassName('is-error')
+            let isError = document.getElementsByClassName("is-error");
             isError[0].scrollIntoView({
-              block: 'center',
-              behavior: 'smooth',
-            })
-          })
+              block: "center",
+              behavior: "smooth",
+            });
+          });
           return false;
         }
       });
     },
-    handleChange (file) {
-      console.log(file)
+    handleChange(file) {
+      console.log(file);
       const isLt2M = file.size / 1024 / 1024 < 9;
       if (!isLt2M) {
         this.$message.error(`上传文件大小不能超过 ${9}MB!`);
-        this.fileList = []
-        return
+        this.fileList = [];
+        return;
       }
-      this.files = file
-      this.form.multipartFile = file.raw
-      this.$refs["accountForm"].validateField('multipartFile')
+      this.files = file;
+      this.form.multipartFile = file.raw;
+      this.$refs["accountForm"].validateField("multipartFile");
     },
-    handleRemove (file, fileList) {
-      this.files = null
-      this.form.multipartFile = null
+    handleRemove(file, fileList) {
+      this.files = null;
+      this.form.multipartFile = null;
     },
-    handlePreview (file) {
+    handlePreview(file) {
       //  (file);
     },
-    onProvChange (value) {
-      this.form.areaCode = null
-      this.cityList.forEach(item => {
+    onProvChange(value) {
+      this.form.areaCode = null;
+      this.cityList.forEach((item) => {
         if (item.value == value) {
-          this.selectListCity = item.cities
+          this.selectListCity = item.cities;
         }
-      })
+      });
     },
-    onCancel () {
-      this.files = null
-      this.fileList = []
-      this.form.multipartFile = null
-      this.$store.dispatch('delVisitedViews', this.$route)
+    onCancel() {
+      this.files = null;
+      this.fileList = [];
+      this.form.multipartFile = null;
+      this.$store.dispatch("delVisitedViews", this.$route);
       this.$router.push({
-        path: "/sysBasics/adapayManager"
+        path: "/sysBasics/adapayManager",
       });
-    }
+    },
   },
 };
 </script>
 <style lang='scss' scoped>
+.box-card {
+  margin-bottom: 20px;
+  padding-bottom: 20px;
+}
 .el-input,
 .el-textarea,
 .el-select {
@@ -455,4 +590,8 @@ export default {
   height: 178px;
   display: block;
 }
+.w1200 {
+  width: 1000px;
+  margin: 0 auto;
+}
 </style>

+ 305 - 221
src/views/adapayAccount/index.vue

@@ -2,34 +2,43 @@
 <template>
   <div class="m-container">
     <h2>
-      <div class="squrt"></div>汇付账号管理
+      <div class="squrt"></div>
+      汇付账号管理
     </h2>
     <div class="m-core">
-      <save-form :inline="true"
-               class="searchForm"
-               @submit="search"
-               @reset="reset"
-               
-               :model="searchForm">
+      <save-form
+        :inline="true"
+        class="searchForm"
+        @submit="search"
+        @reset="reset"
+        :model="searchForm"
+      >
+
+
         <el-form-item prop="memberId">
-          <el-input v-model.trim="searchForm.memberId" clearable
-                    placeholder="请输入商户号"></el-input>
+          <el-input
+            v-model.trim="searchForm.memberId"
+            clearable
+            placeholder="请输入商户号"
+          ></el-input>
         </el-form-item>
         <el-form-item prop="name">
-          <el-input v-model.trim="searchForm.name" clearable
-                    placeholder="请输入公司名称"></el-input>
+          <el-input
+            v-model.trim="searchForm.name"
+            clearable
+            placeholder="请输入公司名称"
+          ></el-input>
         </el-form-item>
         <el-form-item prop="status">
-          <el-select v-model.trim="searchForm.status"
-                     filterable
-                     clearable
-                     placeholder="请选择审核状态">
-            <el-option label="处理中"
-                       value="pending"></el-option>
-            <el-option label="成功"
-                       value="succeeded"></el-option>
-            <el-option label="失败"
-                       value="failed"></el-option>
+          <el-select
+            v-model.trim="searchForm.status"
+            filterable
+            clearable
+            placeholder="请选择审核状态"
+          >
+            <el-option label="处理中" value="pending"></el-option>
+            <el-option label="成功" value="succeeded"></el-option>
+            <el-option label="失败" value="failed"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -37,157 +46,213 @@
           <el-button native-type="reset" type="primary">重置</el-button>
         </el-form-item>
       </save-form>
-      <el-button  style="margin-bottom: 20px;" type="primary" v-permission="'adapay/createMember'" @click="onOperationAccount('create')" icon="el-icon-plus">创建账号</el-button>
+      <el-button
+        style="margin-bottom: 20px"
+        type="primary"
+        v-permission="'adapay/createMember'"
+        @click="onOperationAccount('create')"
+        icon="el-icon-plus"
+        >创建账号</el-button
+      >
       <div class="tableWrap">
-        <el-table :data="tableList"
-                  :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column label="商户号"
-                           align="center"
-                           prop="memberId"></el-table-column>
-          <el-table-column label="法人"
-                           align="center"
-                           prop="legalPerson"></el-table-column>
-          <el-table-column label="法人手机号"
-                           align="center"
-                           prop="legalMp"></el-table-column>
-          <el-table-column label="法人身份证号"
-                           align="center"
-                           prop="legalCertId"></el-table-column>
-          <el-table-column label="公司名称"
-                           align="center"
-                           prop="name"></el-table-column>
-          <el-table-column label="统一社会信用码"
-                           align="center"
-                           prop="socialCreditCode"></el-table-column>
-          <el-table-column label="银行卡号"
-                           align="center"
-                           prop="cardNo"></el-table-column>
-          <el-table-column label="审核状态"
-                           align="center"
-                           prop="status">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column
+            label="商户号"
+            align="center"
+            prop="memberId"
+          ></el-table-column>
+          <el-table-column
+            label="法人"
+            align="center"
+            prop="legalPerson"
+          ></el-table-column>
+          <el-table-column
+            label="法人手机号"
+            align="center"
+            prop="legalMp"
+          ></el-table-column>
+          <el-table-column
+            label="法人身份证号"
+            align="center"
+            prop="legalCertId"
+          ></el-table-column>
+          <el-table-column
+            label="公司名称"
+            align="center"
+            prop="name"
+          ></el-table-column>
+          <el-table-column
+            label="统一社会信用码"
+            align="center"
+            prop="socialCreditCode"
+          ></el-table-column>
+          <el-table-column
+            label="银行卡号"
+            align="center"
+            prop="cardNo"
+          ></el-table-column>
+          <el-table-column label="审核状态" align="center" prop="status">
             <template slot-scope="scope">
               {{ scope.row.status | formatStatus }}
             </template>
           </el-table-column>
-          <el-table-column label="备注"
-                           align="center"
-                           prop="memo"></el-table-column>
-          <el-table-column label="操作"
-                           width="250px"
-                           align="center"
-                           fixed="right">
+          <el-table-column
+            label="备注"
+            align="center"
+            prop="memo"
+          ></el-table-column>
+          <el-table-column
+            label="操作"
+            width="250px"
+            align="center"
+            fixed="right"
+          >
             <template slot-scope="scope">
-              <el-button v-if="scope.row.status === 'failed'"
-                         v-permission="'adapay/updateMember'"
-                         @click="onOperationAccount('update', scope.row)"
-                         type="text" >修改</el-button>
-              <el-button v-if="scope.row.status === 'succeeded'"
-                         v-permission="'adapay/createSettleAccount'"
-                         @click="onUpdateAccount(scope.row)"
-                         type="text" >修改结算账户</el-button>
-              <el-button v-if="scope.row.status === 'succeeded'"
-                         v-permission="'adapay/updateMonthMaxReceipt'"
-                         @click="onMoneyAccount(scope.row)"
-                         type="text" >设置金额</el-button>
+              <!--  v-if="scope.row.status === 'failed'" -->
+              <el-button
+                v-permission="'adapay/updateMember'"
+                @click="onOperationAccount('update', scope.row)"
+                type="text"
+                >修改</el-button
+              >
+              <el-button
+                v-if="scope.row.status === 'succeeded'"
+                v-permission="'adapay/createSettleAccount'"
+                @click="onUpdateAccount(scope.row)"
+                type="text"
+                >修改结算账户</el-button
+              >
+              <el-button
+                v-if="scope.row.status === 'succeeded'"
+                v-permission="'adapay/updateMonthMaxReceipt'"
+                @click="onMoneyAccount(scope.row)"
+                type="text"
+                >设置金额</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
-        <pagination sync :total.sync="rules.total"
-                    :page.sync="rules.page"
-                    :limit.sync="rules.limit"
-                    :page-sizes="rules.page_size"
-                    @pagination="getList" />
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
       </div>
     </div>
 
-    <el-dialog title="绑定结算账户"
-               :visible.sync="zeroVisible"
-               width="400px"
-               @close="onFormClose('maskForm')">
-      <el-form :model='maskForm'
-               :rules="maskRules"
-               label-width="100px"
-               label-position="right"
-               
-               ref="maskForm">
-        <el-form-item label="银行卡号"
-                      prop="cardNo">
-          <el-input v-model="maskForm.cardNo"
-                    placeholder="请输入银行卡号"></el-input>
+    <el-dialog
+      title="绑定结算账户"
+      :visible.sync="zeroVisible"
+      width="400px"
+      @close="onFormClose('maskForm')"
+    >
+      <el-form
+        :model="maskForm"
+        :rules="maskRules"
+        label-width="100px"
+        label-position="right"
+        ref="maskForm"
+      >
+        <el-form-item label="银行卡号" prop="cardNo">
+          <el-input
+            v-model="maskForm.cardNo"
+            placeholder="请输入银行卡号"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="所属银行"
-                      prop="bankCode">
-          <el-select v-model="maskForm.bankCode"
-                     style="width: 100% !important"
-                     placeholder="请选择所属银行">
-            <el-option v-for="(item, index) in backList"
-                       :key="index"
-                       :label="item.title"
-                       :value="item.value"></el-option>
+        <el-form-item label="所属银行" prop="bankCode">
+          <el-select
+            v-model="maskForm.bankCode"
+            style="width: 100% !important"
+            placeholder="请选择所属银行"
+          >
+            <el-option
+              v-for="(item, index) in backList"
+              :key="index"
+              :label="item.title"
+              :value="item.value"
+            ></el-option>
           </el-select>
         </el-form-item>
       </el-form>
-      <span slot="footer"
-            class="dialog-footer">
-        <el-button  @click="zeroVisible = false">取 消</el-button>
-        <el-button  type="primary"
-                   @click="addZero('maskForm')">确 定</el-button>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="zeroVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addZero('maskForm')">确 定</el-button>
       </span>
     </el-dialog>
 
-    <el-dialog title="设置金额"
-               :visible.sync="moneyVisible"
-               width="500px"
-               @close="onFormClose('moneyForm')">
-      <el-form :model='moneyForm'
-               :rules="moneyRules"
-               label-width="160px"
-               label-position="right"
-               
-               ref="moneyForm">
-        <el-form-item label="每日最大收款金额"
-                      prop="monthMaxReceipt">
+    <el-dialog
+      title="设置金额"
+      :visible.sync="moneyVisible"
+      width="500px"
+      @close="onFormClose('moneyForm')"
+    >
+      <el-form
+        :model="moneyForm"
+        :rules="moneyRules"
+        label-width="160px"
+        label-position="right"
+        ref="moneyForm"
+      >
+        <el-form-item label="每日最大收款金额" prop="monthMaxReceipt">
           <template #label>
             每日最大收款金额
-            <el-tooltip placement="top"
-                    popper-class="mTooltip">
-            <div slot="content">
-              每日最大收款金额,0不限制
-            </div>
-            <i class="el-icon-question micon el-tooltip"
-              style="font-size: 18px; color: #F56C6C"
-              v-permission="'export/teacherSalary'"></i>
-          </el-tooltip>
+            <el-tooltip placement="top" popper-class="mTooltip">
+              <div slot="content">每日最大收款金额,0不限制</div>
+              <i
+                class="el-icon-question micon el-tooltip"
+                style="font-size: 18px; color: #f56c6c"
+                v-permission="'export/teacherSalary'"
+              ></i>
+            </el-tooltip>
           </template>
-          <el-input v-model="moneyForm.monthMaxReceipt" type="number"
-                    placeholder="请输入每日最大收款金额">
+          <el-input
+            v-model="moneyForm.monthMaxReceipt"
+            type="number"
+            placeholder="请输入每日最大收款金额"
+          >
             <template slot="append">元</template>
           </el-input>
         </el-form-item>
-        <el-form-item label="满额转到收款账户"
-                      prop="organId">
-          <el-select v-model="moneyForm.organId"
-                     style="width: 100% !important"
-                     clearable
-                     filterable
-                     @change="onBranchChange"
-                     placeholder="请选择满额转到收款账户">
-            <el-option v-for="(item, index) in calcBranchList"
-                       :key="index"
-                       :label="item.label"
-                       :value="item.value"></el-option>
+        <el-form-item label="满额转到收款账户" prop="organId">
+          <el-select
+            v-model="moneyForm.organId"
+            style="width: 100% !important"
+            clearable
+            filterable
+            @change="onBranchChange"
+            placeholder="请选择满额转到收款账户"
+          >
+            <el-option
+              v-for="(item, index) in calcBranchList"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="满额转到收款账户" prop="routeMemberId" v-show="false">
-          <el-input v-model="moneyForm.routeMemberId" disabled
-                    placeholder="请输入满额转到收款账户"></el-input>
+        <el-form-item
+          label="满额转到收款账户"
+          prop="routeMemberId"
+          v-show="false"
+        >
+          <el-input
+            v-model="moneyForm.routeMemberId"
+            disabled
+            placeholder="请输入满额转到收款账户"
+          ></el-input>
         </el-form-item>
       </el-form>
-      <span slot="footer"
-            class="dialog-footer">
-        <el-button  @click="moneyVisible = false">取 消</el-button>
-        <el-button  type="primary"
-                   @click="addMaxMoney('moneyForm')">确 定</el-button>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="moneyVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addMaxMoney('moneyForm')"
+          >确 定</el-button
+        >
       </span>
     </el-dialog>
   </div>
@@ -195,12 +260,16 @@
 
 <script>
 import pagination from "@/components/Pagination/index";
-import AccountForm from './form'
-import { queryPageList, createSettleAccount, updateMonthMaxReceipt } from './api.js'
+import AccountForm from "./form";
+import {
+  queryPageList,
+  createSettleAccount,
+  updateMonthMaxReceipt,
+} from "./api.js";
 import { getPaymentConfigs } from "../chargeManager/api";
 import { cityJson } from "../../utils/cityJson";
 import { bankJson } from "../../utils/bankJson";
-import cleanDeep from 'clean-deep'
+import cleanDeep from "clean-deep";
 const initSearch = {
   memberId: null,
   name: null,
@@ -209,9 +278,9 @@ const initSearch = {
 export default {
   components: {
     pagination,
-    AccountForm
+    AccountForm,
   },
-  data () {
+  data() {
     return {
       zeroVisible: false,
       backList: bankJson,
@@ -220,165 +289,180 @@ export default {
         limit: 20, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
-        page_size: [10, 20, 50, 100] // 选择限制显示条数
+        page_size: [10, 20, 50, 100], // 选择限制显示条数
       },
       tableList: [],
       searchForm: { ...initSearch },
       maskRules: {
-        cardNo: [{ required: true, message: '请输入银行卡号', trigger: 'blur' }],
-        bankCode: [{ required: true, message: '请选择所属银行', trigger: 'change' }]
+        cardNo: [
+          { required: true, message: "请输入银行卡号", trigger: "blur" },
+        ],
+        bankCode: [
+          { required: true, message: "请选择所属银行", trigger: "change" },
+        ],
       },
       maskForm: {
         memberId: null,
         cardNo: null,
-        bankCode: null
+        bankCode: null,
       },
       moneyVisible: false,
       moneyForm: {
         monthMaxReceipt: null,
         organId: null,
-        routeMemberId: null
+        routeMemberId: null,
       },
       moneyRules: {
-        monthMaxReceipt: [{ required: true, message: '请输入每日最大收款金额', trigger: 'blur' }],
-        organId: [{ required: true, message: '请选择满额转分部', trigger: 'change' }]
+        monthMaxReceipt: [
+          {
+            required: true,
+            message: "请输入每日最大收款金额",
+            trigger: "blur",
+          },
+        ],
+        organId: [
+          { required: true, message: "请选择满额转分部", trigger: "change" },
+        ],
       },
-      calcBranchList: []
+      calcBranchList: [],
     };
   },
-  mounted () {
-    this.getList()
+  mounted() {
+    this.getList();
   },
   methods: {
-    async getList () {
+    async getList() {
       try {
-        let obj = this.searchForm
-        obj.page = this.rules.page
-        obj.rows = this.rules.limit
-        await queryPageList(cleanDeep(obj)).then(res => {
+        let obj = this.searchForm;
+        obj.page = this.rules.page;
+        obj.rows = this.rules.limit;
+        await queryPageList(cleanDeep(obj)).then((res) => {
           if (res.code == 200) {
-            this.tableList = res.data.rows
-            this.rules.total = res.data.total
+            this.tableList = res.data.rows;
+            this.rules.total = res.data.total;
           }
-        })
+        });
       } catch {
         //
       }
     },
     async getCalcBranchList() {
-      await getPaymentConfigs({ payType: 'ADAPAY' }).then(res => {
-        this.calcBranchList = []
+      await getPaymentConfigs({ payType: "ADAPAY" }).then((res) => {
+        this.calcBranchList = [];
         if (res.code == 200 && res.data) {
-          res.data.forEach(item => {
+          res.data.forEach((item) => {
             this.calcBranchList.push({
               label: item.hfMerNo,
               value: item.organId,
-              hfMerNo: item.hfMerNo
+              hfMerNo: item.hfMerNo,
             });
           });
         }
       });
     },
     search() {
-      this.rules.page = 1
-      this.getList()
+      this.rules.page = 1;
+      this.getList();
     },
     reset() {
       this.searchForm = { ...initSearch };
       this.search();
     },
-    onFormClose (formName) {
-      this.$refs[formName].resetFields()
+    onFormClose(formName) {
+      this.$refs[formName].resetFields();
     },
-    onOperationAccount (type, row) {
-      let tagTitle = '创建'
-      if(type == 'update') {
-        tagTitle = '修改'
+    onOperationAccount(type, row) {
+      let tagTitle = "创建";
+      if (type == "update") {
+        tagTitle = "修改";
       }
-      this.$router.push({
-        path: '/systemManager/adapayOperation',
-        query: {
-          type: type,
-          row: JSON.stringify(row)
+      this.$router.push(
+        {
+          path: "/systemManager/adapayOperation",
+          query: {
+            type: type,
+            row: JSON.stringify(row),
+          },
+        },
+        (route) => {
+          route.meta.title = tagTitle + "汇付账号";
         }
-      }, (route) => {
-        route.meta.title = tagTitle + '汇付账号'
-      })
+      );
     },
-    onUpdateAccount (row) {
-      this.zeroVisible = true
+    onUpdateAccount(row) {
+      this.zeroVisible = true;
       this.$nextTick(() => {
         this.maskForm = {
           memberId: row.memberId,
           cardNo: row.cardNo,
-          bankCode: row.bankCode
-        }
-      })
+          bankCode: row.bankCode,
+        };
+      });
     },
-    addZero (formName) {
-      this.$refs[formName].validate(valid => {
+    addZero(formName) {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
-          createSettleAccount(cleanDeep(this.maskForm)).then(res => {
+          createSettleAccount(cleanDeep(this.maskForm)).then((res) => {
             if (res.code == 200) {
-              this.$message.success('修改结算账户成功')
-              this.zeroVisible = false
-              this.getList()
+              this.$message.success("修改结算账户成功");
+              this.zeroVisible = false;
+              this.getList();
             } else {
-              this.$message.error(res.msg)
+              this.$message.error(res.msg);
             }
-          })
+          });
         } else {
           return false;
         }
       });
     },
     onBranchChange(val) {
-      this.calcBranchList.forEach(item => {
-        if(item.value == val) {
-          this.moneyForm.routeMemberId = item.hfMerNo
+      this.calcBranchList.forEach((item) => {
+        if (item.value == val) {
+          this.moneyForm.routeMemberId = item.hfMerNo;
         }
-      })
+      });
     },
     onMoneyAccount(row) {
-      this.moneyVisible = true
+      this.moneyVisible = true;
       this.$nextTick(() => {
         this.moneyForm = {
           id: row.id,
           organId: row.routeOrganId || null,
           monthMaxReceipt: row.monthMaxReceipt,
-          routeMemberId: row.routeMemberId
-        }
-      })
-      this.getCalcBranchList()
+          routeMemberId: row.routeMemberId,
+        };
+      });
+      this.getCalcBranchList();
     },
     addMaxMoney(formName) {
       this.$refs[formName].validate(async (valid) => {
         if (valid) {
-          await updateMonthMaxReceipt(cleanDeep(this.moneyForm)).then(res => {
+          await updateMonthMaxReceipt(cleanDeep(this.moneyForm)).then((res) => {
             if (res.code == 200) {
-              this.$message.success('设置金额成功')
-              this.moneyVisible = false
-              this.getList()
+              this.$message.success("设置金额成功");
+              this.moneyVisible = false;
+              this.getList();
             } else {
-              this.$message.error(res.msg)
+              this.$message.error(res.msg);
             }
-          })
+          });
         } else {
           return false;
         }
       });
-    }
+    },
   },
   filters: {
-    formatStatus (val) {
+    formatStatus(val) {
       const templateList = {
         pending: "处理中",
         succeeded: "成功",
-        failed: "失败"
-      }
-      return templateList[val]
-    }
-  }
+        failed: "失败",
+      };
+      return templateList[val];
+    },
+  },
 };
 </script>
 <style lang='scss' scoped>

+ 431 - 0
src/views/contentManager/components/appBottomPage.vue

@@ -0,0 +1,431 @@
+<template>
+  <div>
+    <!-- 搜索标题 -->
+    <auth auths="news/add">
+      <el-button
+        @click="openTeaching('create')"
+        type="primary"
+        style="margin-bottom:20px"
+      >
+        新建
+      </el-button>
+    </auth>
+    <!-- 搜索标题 -->
+    <save-form
+      :inline="true"
+      class="searchForm"
+      saveKey="contentKnowledge"
+      @submit="search"
+      :model="searchForm"
+    >
+      <el-form-item prop="subType">
+        <el-select
+          v-model="searchForm.subType"
+          clearable
+          placeholder="请选择分类"
+        >
+          <el-option
+            v-for="item in typeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+      </el-form-item>
+    </save-form>
+    <!-- 列表 -->
+    <div class="tableWrap">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" label="默认图">
+          <template slot-scope="scope">
+            <img class="bannerImg" :src="scope.row.coverImage" alt="" />
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="选中图">
+          <template slot-scope="scope">
+            <img class="bannerImg" :src="scope.row.attribute1" alt="" />
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="title" label="标题">
+        </el-table-column>
+        <el-table-column align="center" label="跳转链接">
+          <template slot-scope="scope">
+            <overflow-text
+              width="100%"
+              :text="scope.row.linkUrl"
+            ></overflow-text>
+            <!-- {{ scope.row.linkUrl + '/' + scope.row.id }} -->
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="remark" label="是否使用">
+          <template slot-scope="scope">
+            {{ scope.row.status == 1 ? "是" : "否" }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="subType" label="分类">
+          <template slot-scope="scope">
+            {{ formatSubType(scope.row.subType) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column align="center" prop="memo" label="版本号">
+        </el-table-column>
+
+        <el-table-column align="center" prop="order" label="排序">
+        </el-table-column>
+
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <div>
+              <auth auths="news/update" style="margin-left: 10px">
+                <el-button
+                  @click="openTeaching('update', scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >修改</el-button
+                >
+                <div
+                  style="display: inline-block"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                >
+                  <el-button
+                    v-if="scope.row.status == 1"
+                    @click="onStop(scope.row, 0)"
+                    type="text"
+                    >停用</el-button
+                  >
+                  <el-button v-else @click="onStop(scope.row, 1)" type="text"
+                    >启用</el-button
+                  >
+                </div>
+              </auth>
+              <auth auths="news/del">
+                <el-button
+                  @click="onDel(scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >删除</el-button
+                >
+              </auth>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        saveKey="contentKnowledge"
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog
+      :title="formTitle[pageType]"
+      :visible.sync="teacherStatus"
+      width="500px"
+    >
+      <el-form :model="form" ref="form" label-width="80px">
+        <el-form-item
+          label="标题"
+          prop="title"
+          :rules="[
+            {
+              required: true,
+              message: '请输入标题',
+              trigger: 'blur'
+            }
+          ]"
+        >
+          <el-input
+            v-model.trim="form.title"
+            placeholder="请输入标题"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="排序值" prop="order">
+          <el-input
+            v-model.trim="form.order"
+            placeholder="请输入排序值"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="版本号" prop="memo">
+          <el-input v-model="form.memo" placeholder="请输入版本号"></el-input>
+        </el-form-item>
+        <el-form-item label="链接地址" prop="linkUrl">
+          <el-input
+            v-model.trim="form.linkUrl"
+            placeholder="请输入链接地址"
+          ></el-input>
+        </el-form-item>
+        <el-form-item
+          label="分类"
+          prop="subType"
+          :rules="[
+            { required: true, message: '请选择分类', trigger: 'change' }
+          ]"
+        >
+          <el-select
+            v-model="form.subType"
+            style="width: 100% !important"
+            placeholder="请选择分类"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="默认图"
+          prop="coverImage"
+          :rules="[
+            { required: true, message: '请上传默认图', trigger: 'blur' }
+          ]"
+        >
+          <image-cropper
+            :options="cropperOptions"
+            :imgSize="2"
+            showSize
+            :imageUrl="form.coverImage"
+            @crop-upload-success="cropSuccess"
+          />
+          <p class="imageSize">图片不能超过 2M;图片尺寸:76*76;</p>
+        </el-form-item>
+        <el-form-item
+          label="选中图"
+          prop="attribute1"
+          :rules="[
+            { required: true, message: '请上传选中图', trigger: 'blur' }
+          ]"
+        >
+          <image-cropper
+            :options="cropperOptions"
+            :imgSize="2"
+            showSize
+            :imageUrl="form.attribute1"
+            @crop-upload-success="cropSuccess2"
+          />
+          <p class="imageSize">图片不能超过 2M;图片尺寸:76*76;</p>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="teacherStatus = false">取 消</el-button>
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {
+  newsList,
+  newsUpdate,
+  newsDel,
+  newsTypeList,
+  newsAdd
+} from "@/api/contentManager";
+import ImageCropper from "@/components/ImageCropper";
+import pagination from "@/components/Pagination/index";
+import cleanDeep from "clean-deep";
+import { permission } from "@/utils/directivePage";
+export default {
+  name: "appButtonPage",
+  components: {
+    pagination,
+    ImageCropper
+  },
+  data() {
+    return {
+      teacherStatus: false,
+      formTitle: {
+        create: "新建老师端按钮",
+        update: "修改老师端按钮"
+      },
+      pageType: "create",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 76, //默认生成截图框宽度
+        autoCropHeight: 76, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        full: true, // 是否输出原图比例的截图
+        title: "上传图片" //模态框上显示的标题
+      },
+      form: {
+        title: "",
+        order: null,
+        linkUrl: "",
+        coverImage: "",
+        attribute1: "",
+        subType: null,
+        memo: "",
+        type: 20,
+        status: 1,
+        content: ""
+      },
+      searchForm: {
+        subType: null
+      },
+      tableList: [],
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      typeList: [] // 子分类
+    };
+  },
+  async mounted() {
+    await newsTypeList({ parentId: 20 }).then(res => {
+      if (res.code == 200) {
+        this.typeList = res.data;
+      }
+    });
+    this.getList();
+  },
+  methods: {
+    //上传图片成功
+    cropSuccess(data) {
+      this.form.coverImage = data.data.url;
+    },
+    cropSuccess2(data) {
+      this.form.attribute1 = data.data.url;
+    },
+    onSubmit() {
+      this.$refs["form"].validate(async valid => {
+        if (valid) {
+          let form = {
+            ...this.form
+          };
+          if (this.pageType == "create") {
+            if (form.id) {
+              // 判断有没有Id,如果有则删除
+              delete form.id;
+            }
+            await newsAdd(form).then(res => {
+              this.messageTips("添加", res);
+            });
+          } else if (this.pageType == "update") {
+            await newsUpdate(form).then(res => {
+              this.messageTips("修改", res);
+            });
+          }
+        }
+      });
+    },
+    messageTips(title, res) {
+      if (res.code == 200) {
+        this.$message.success(title + "成功");
+        this.getList();
+        this.teacherStatus = false;
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    permission(str) {
+      return permission(str);
+    },
+    getList() {
+      let params = {
+        clientName: "manage",
+        subType: this.searchForm.subType,
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        type: 20
+      };
+      newsList(cleanDeep(params)).then(res => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
+        }
+      });
+    },
+    openTeaching(type, rows) {
+      this.teacherStatus = true;
+      this.$nextTick(() => {
+        if (this.$refs["form"]) {
+          this.$refs["form"].resetFields();
+        }
+        this.pageType = type;
+        if (type == "update") {
+          this.form.id = rows.id;
+          this.form.title = rows.title;
+          this.form.order = rows.order;
+          this.form.linkUrl = rows.linkUrl;
+          this.form.coverImage = rows.coverImage;
+          this.form.subType = rows.subType;
+          this.form.memo = rows.memo;
+          this.form.attribute1 = rows.attribute1;
+          this.form.status = rows.status;
+        }
+      });
+    },
+    onDel(row) {
+      // 删除
+      this.$confirm("确定是否删除?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          newsDel({ id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    onStop(row, status) {
+      // 停止
+      // newsUpdate
+      let tempStr = ["停用", "启用"];
+      newsUpdate({
+        id: row.id,
+        status: status
+      }).then(res => {
+        if (res.code == 200) {
+          this.$message.success(tempStr[status] + "成功");
+          this.getList();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+
+    formatSubType(val) {
+      let tempName = null;
+      this.typeList.forEach(item => {
+        if (item.id == val) {
+          tempName = item.name;
+        }
+      });
+      return tempName;
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.bannerImg {
+  height: 60px;
+}
+</style>

+ 26 - 23
src/views/contentManager/components/appPage.vue

@@ -46,7 +46,7 @@
         :data="tableList"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
-        <el-table-column align="center" label="轮播图">
+        <el-table-column align="center" label="封面图">
           <template slot-scope="scope">
             <img class="bannerImg" :src="scope.row.coverImage" alt="" />
           </template>
@@ -122,12 +122,12 @@ import pagination from "@/components/Pagination/index";
 export default {
   name: "training",
   components: {
-    pagination,
+    pagination
   },
   data() {
     return {
       searchForm: {
-        organIdList: [],
+        organIdList: []
       },
       tableList: [],
       teacherId: this.$route.query.teacherId,
@@ -136,8 +136,8 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 1, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
-      },
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      }
     };
   },
   mounted() {
@@ -157,9 +157,9 @@ export default {
           : null,
         rows: this.pageInfo.limit,
         page: this.pageInfo.page,
-        type: 6,
+        type: 6
       };
-      newsList(params).then((res) => {
+      newsList(params).then(res => {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
@@ -173,28 +173,31 @@ export default {
       }
       params.type = 6;
       params.pageType = type;
-      this.$router.push({
-        path: "/contentManager/contentOperation",
-        query: params,
-      }, (route) => {
-        // 处理默认选中的菜单
-        const matched = route.matched || []
-        for(let i in matched) {
-          if(matched[i].path == '/contentManager/contentOperation') {
-            route.matched[i].meta.activeMenu = '/platformIndex'
+      this.$router.push(
+        {
+          path: "/contentManager/contentOperation",
+          query: params
+        },
+        route => {
+          // 处理默认选中的菜单
+          const matched = route.matched || [];
+          for (let i in matched) {
+            if (matched[i].path == "/contentManager/contentOperation") {
+              route.matched[i].meta.activeMenu = "/platformIndex";
+            }
           }
         }
-      });
+      );
     },
     onDel(row) {
       // 删除
       this.$confirm("确定是否删除?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning",
+        type: "warning"
       })
         .then(() => {
-          newsDel({ id: row.id }).then((res) => {
+          newsDel({ id: row.id }).then(res => {
             if (res.code == 200) {
               this.$message.success("删除成功");
               this.getList();
@@ -211,8 +214,8 @@ export default {
       let tempStr = ["停用", "启用"];
       newsUpdate({
         id: row.id,
-        status: status,
-      }).then((res) => {
+        status: status
+      }).then(res => {
         if (res.code == 200) {
           this.$message.success(tempStr[status] + "成功");
           this.getList();
@@ -220,8 +223,8 @@ export default {
           this.$message.error(res.msg);
         }
       });
-    },
-  },
+    }
+  }
 };
 </script>
 <style lang="scss" scoped>

+ 405 - 0
src/views/contentManager/components/teacherButton.vue

@@ -0,0 +1,405 @@
+<template>
+  <div>
+    <!-- 搜索标题 -->
+    <auth auths="news/add">
+      <el-button
+        @click="openTeaching('create')"
+        type="primary"
+        style="margin-bottom:20px"
+      >
+        新建
+      </el-button>
+    </auth>
+    <!-- 搜索标题 -->
+    <save-form
+      :inline="true"
+      class="searchForm"
+      saveKey="contentKnowledge"
+      @submit="search"
+      :model="searchForm"
+    >
+      <el-form-item prop="subType">
+        <el-select
+          v-model="searchForm.subType"
+          clearable
+          placeholder="请选择分类"
+        >
+          <el-option
+            v-for="item in typeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+      </el-form-item>
+    </save-form>
+    <!-- 列表 -->
+    <div class="tableWrap">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" label="封面图">
+          <template slot-scope="scope">
+            <img class="bannerImg" :src="scope.row.coverImage" alt="" />
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="title" label="标题">
+        </el-table-column>
+        <el-table-column align="center" label="跳转链接">
+          <template slot-scope="scope">
+            <overflow-text
+              width="100%"
+              :text="scope.row.linkUrl"
+            ></overflow-text>
+            <!-- {{ scope.row.linkUrl + '/' + scope.row.id }} -->
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="remark" label="是否使用">
+          <template slot-scope="scope">
+            {{ scope.row.status == 1 ? "是" : "否" }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="subType" label="分类">
+          <template slot-scope="scope">
+            {{ formatSubType(scope.row.subType) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column align="center" prop="memo" label="版本号">
+        </el-table-column>
+
+        <el-table-column align="center" prop="order" label="排序">
+        </el-table-column>
+
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <div>
+              <auth auths="news/update" style="margin-left: 10px">
+                <el-button
+                  @click="openTeaching('update', scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >修改</el-button
+                >
+                <div
+                  style="display: inline-block"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                >
+                  <el-button
+                    v-if="scope.row.status == 1"
+                    @click="onStop(scope.row, 0)"
+                    type="text"
+                    >停用</el-button
+                  >
+                  <el-button v-else @click="onStop(scope.row, 1)" type="text"
+                    >启用</el-button
+                  >
+                </div>
+              </auth>
+              <auth auths="news/del">
+                <el-button
+                  @click="onDel(scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >删除</el-button
+                >
+              </auth>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        saveKey="contentKnowledge"
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog
+      :title="formTitle[pageType]"
+      :visible.sync="teacherStatus"
+      width="500px"
+    >
+      <el-form :model="form" ref="form" label-width="80px">
+        <el-form-item
+          label="标题"
+          prop="title"
+          :rules="[
+            {
+              required: true,
+              message: '请输入标题',
+              trigger: 'blur'
+            }
+          ]"
+        >
+          <el-input
+            v-model.trim="form.title"
+            placeholder="请输入标题"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="排序值" prop="order">
+          <el-input
+            v-model.trim="form.order"
+            placeholder="请输入排序值"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="链接地址" prop="linkUrl">
+          <el-input
+            v-model.trim="form.linkUrl"
+            placeholder="请输入链接地址"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="版本号" prop="memo">
+          <el-input v-model="form.memo" placeholder="请输入版本号"></el-input>
+        </el-form-item>
+        <el-form-item
+          label="分类"
+          prop="subType"
+          :rules="[
+            { required: true, message: '请选择分类', trigger: 'change' }
+          ]"
+        >
+          <el-select
+            v-model="form.subType"
+            style="width: 100% !important"
+            placeholder="请选择分类"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="封面图"
+          prop="coverImage"
+          :rules="[
+            { required: true, message: '请上传封面图', trigger: 'blur' }
+          ]"
+        >
+          <image-cropper
+            :options="cropperOptions"
+            :imgSize="2"
+            showSize
+            :imageUrl="form.coverImage"
+            @crop-upload-success="cropSuccess"
+          />
+          <p class="imageSize">图片不能超过 2M;图片尺寸:88*88;</p>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="teacherStatus = false">取 消</el-button>
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {
+  newsList,
+  newsUpdate,
+  newsDel,
+  newsTypeList,
+  newsAdd
+} from "@/api/contentManager";
+import ImageCropper from "@/components/ImageCropper";
+import pagination from "@/components/Pagination/index";
+import cleanDeep from "clean-deep";
+import { permission } from "@/utils/directivePage";
+export default {
+  name: "teacherButton",
+  components: {
+    pagination,
+    ImageCropper
+  },
+  data() {
+    return {
+      teacherStatus: false,
+      formTitle: {
+        create: "新建老师端按钮",
+        update: "修改老师端按钮"
+      },
+      pageType: "create",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 88, //默认生成截图框宽度
+        autoCropHeight: 88, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        full: true, // 是否输出原图比例的截图
+        title: "上传图片" //模态框上显示的标题
+      },
+      form: {
+        title: "",
+        order: null,
+        linkUrl: "",
+        coverImage: "",
+        subType: null,
+        type: 23,
+        memo: "",
+        status: 1,
+        content: ""
+      },
+      searchForm: {
+        subType: null
+      },
+      tableList: [],
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      typeList: [] // 子分类
+    };
+  },
+  async mounted() {
+    await newsTypeList({ parentId: 23 }).then(res => {
+      if (res.code == 200) {
+        this.typeList = res.data;
+      }
+    });
+    this.getList();
+  },
+  methods: {
+    //上传图片成功
+    cropSuccess(data) {
+      this.form.coverImage = data.data.url;
+    },
+    onSubmit() {
+      this.$refs["form"].validate(async valid => {
+        if (valid) {
+          let form = {
+            ...this.form
+          };
+          if (this.pageType == "create") {
+            if (form.id) {
+              // 判断有没有Id,如果有则删除
+              delete form.id;
+            }
+            await newsAdd(form).then(res => {
+              this.messageTips("添加", res);
+            });
+          } else if (this.pageType == "update") {
+            await newsUpdate(form).then(res => {
+              this.messageTips("修改", res);
+            });
+          }
+        }
+      });
+    },
+    messageTips(title, res) {
+      if (res.code == 200) {
+        this.$message.success(title + "成功");
+        this.getList();
+        this.teacherStatus = false;
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    permission(str) {
+      return permission(str);
+    },
+    getList() {
+      let params = {
+        clientName: "manage",
+        subType: this.searchForm.subType,
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        type: 23
+      };
+      newsList(cleanDeep(params)).then(res => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
+        }
+      });
+    },
+    openTeaching(type, rows) {
+      this.teacherStatus = true;
+      this.$nextTick(() => {
+        if (this.$refs["form"]) {
+          this.$refs["form"].resetFields();
+        }
+        this.pageType = type;
+        if (type == "update") {
+          this.form.id = rows.id;
+          this.form.title = rows.title;
+          this.form.order = rows.order;
+          this.form.linkUrl = rows.linkUrl;
+          this.form.coverImage = rows.coverImage;
+          this.form.subType = rows.subType;
+          this.form.memo = rows.memo;
+          this.form.status = rows.status;
+        }
+      });
+    },
+    onDel(row) {
+      // 删除
+      this.$confirm("确定是否删除?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          newsDel({ id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    onStop(row, status) {
+      // 停止
+      // newsUpdate
+      let tempStr = ["停用", "启用"];
+      newsUpdate({
+        id: row.id,
+        status: status
+      }).then(res => {
+        if (res.code == 200) {
+          this.$message.success(tempStr[status] + "成功");
+          this.getList();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+
+    formatSubType(val) {
+      let tempName = null;
+      this.typeList.forEach(item => {
+        if (item.id == val) {
+          tempName = item.name;
+        }
+      });
+      return tempName;
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.bannerImg {
+  height: 60px;
+}
+</style>

+ 61 - 42
src/views/contentManager/platformIndex.vue

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

+ 1 - 0
src/views/liveClassManager/newLiveClass.vue

@@ -540,6 +540,7 @@ export default {
           params: {
             rows: 9999,
             search: query,
+            lockFlag:0
           },
           url,
         };

+ 22 - 1
src/views/organManager/api.js

@@ -53,4 +53,25 @@ export const tenantContractRecordList = (data) => request2({
   url: '/api-web/tenantContractRecord/queryPage',
   method: 'post',
   data
-})
+})
+
+// 获取汇付信息
+export const getHfMerchantConfig = (data) => request2({
+  url: `/api-web/hfMerchantConfig/queryByTenantId/${data}`,
+  method: 'get',
+})
+
+
+// 创建汇付商户配置
+export const addHfMerchantConfig = (data) => request2({
+  url: '/api-web/hfMerchantConfig/add',
+  method: 'post',
+  data
+})
+
+// 修改汇付神户配置
+export const resetHfMerchantConfig = (data) => request2({
+  url: '/api-web/hfMerchantConfig/update',
+  method: 'post',
+  data
+})

+ 272 - 0
src/views/organManager/components/hfPayCount.vue

@@ -0,0 +1,272 @@
+<template>
+  <div>
+    <el-dialog
+      title="汇付账号设置"
+      :visible.sync="nextVisible"
+      width="650px"
+      append-to-body
+    >
+      <el-form :model="form" ref="form" label-width="170px">
+        <el-form-item
+          label="汇付ApiKey"
+          prop="apiKey"
+          :rules="[
+            {
+              required: true,
+              message: '请输入汇付ApiKey',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.apiKey"
+            placeholder="请输入汇付ApiKey"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="汇付AppId"
+          prop="appId"
+          :rules="[
+            {
+              required: true,
+              message: '请输入汇付AppId',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.appId"
+            placeholder="请输入汇付AppId"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="商户Key"
+          prop="merKey"
+          :rules="[
+            {
+              required: true,
+              message: '请输入商户Key',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.merKey"
+            placeholder="请输入商户Key"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="汇付MockApiKey"
+          prop="mockApiKey"
+          :rules="[
+            {
+              required: true,
+              message: '请输入汇付MockApiKey',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.mockApiKey"
+            placeholder="请输入汇付MockApiKey"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="平台收款子账户号"
+          prop="platformPayeeMemberId"
+          :rules="[
+            {
+              required: true,
+              message: '请输入平台收款子账户号',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.platformPayeeMemberId"
+            placeholder="请输入平台收款子账户号"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="商户私钥"
+          prop="rsaPrivateKey"
+          :rules="[
+            {
+              required: true,
+              message: '请输入商户私钥',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.rsaPrivateKey"
+            placeholder="请输入商户私钥"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="汇付公钥"
+          prop="rsaPublicKey"
+          :rules="[
+            {
+              required: true,
+              message: '请输入汇付公钥',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.rsaPublicKey"
+            placeholder="请输入汇付公钥"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="微信公众号开发者ID"
+          prop="wxAppId"
+          :rules="[
+            {
+              required: true,
+              message: '请输入微信公众号开发者ID',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.wxAppId"
+            placeholder="请输入微信公众号开发者ID"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item
+          label="微信公众号开发者密码"
+          prop="wxAppSecret"
+          :rules="[
+            {
+              required: true,
+              message: '请输入微信公众号开发者密码',
+            },
+          ]"
+        >
+          <el-input
+            style="width: 400px"
+            v-model="form.wxAppSecret"
+            placeholder="请输入微信公众号开发者密码"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="nextVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitInfo">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import load from "@/utils/loading";
+import { getTimes } from "@/utils";
+import {
+  getHfMerchantConfig,
+  addHfMerchantConfig,
+  resetHfMerchantConfig,
+} from "../api";
+export default {
+  data() {
+    return {
+      form: {
+        apiKey: "",
+        appId: "",
+        createTime: "",
+        expendParams: "",
+        id: 0,
+        merKey: "",
+        mockApiKey: "",
+        platformPayeeMemberId: "",
+        rsaPrivateKey: "",
+        rsaPublicKey: "",
+        tenantId: 0,
+        updateTime: "",
+        wxAppId: "",
+        wxAppSecret: "",
+      },
+      nextVisible: false,
+      isNew: false,
+      activeId:''
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+  },
+  methods: {
+    init(row) {
+      this.form.tenantId = row.id;
+      this.activeId = row.id
+      this.gethfInfo();
+      this.nextVisible = true;
+    },
+    async gethfInfo() {
+      try {
+        const res = await getHfMerchantConfig(this.form.tenantId);
+        if (res.data) {
+          this.form = { ...this.form, ...res.data };
+          this.isNew = false;
+        } else {
+          this.form = {
+            apiKey: "",
+            appId: "",
+            createTime: "",
+            expendParams: "",
+            id: 0,
+            merKey: "",
+            mockApiKey: "",
+            platformPayeeMemberId: "",
+            rsaPrivateKey: "",
+            rsaPublicKey: "",
+            tenantId: 0,
+            updateTime: "",
+            wxAppId: "",
+            wxAppSecret: "",
+          };
+          this.$refs.form.resetFields();
+          this.form.tenantId = this.activeId;
+          this.isNew = true;
+        }
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    submitInfo() {
+      this.$refs.form.validate(async (res) => {
+        if (res) {
+          // 提交
+          try {
+            if (this.isNew) {
+              const res = await addHfMerchantConfig({ ...this.form });
+              this.$message.success("新增成功");
+            } else {
+              const res = await resetHfMerchantConfig({ ...this.form });
+              this.$message.success("修改成功");
+            }
+            this.nextVisible = false;
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 94 - 42
src/views/organManager/index.vue

@@ -15,7 +15,10 @@
         :model.sync="searchForm"
       >
         <el-form-item :rules="[]">
-          <el-input v-model="searchForm.search" placeholder="机构编号/名称/电话"></el-input>
+          <el-input
+            v-model="searchForm.search"
+            placeholder="机构编号/名称/电话"
+          ></el-input>
         </el-form-item>
         <el-form-item prop="createTimer">
           <el-date-picker
@@ -29,7 +32,10 @@
           ></el-date-picker>
         </el-form-item>
         <el-form-item prop="createdName">
-          <el-input v-model="searchForm.createdName" placeholder="请输入添加人"></el-input>
+          <el-input
+            v-model="searchForm.createdName"
+            placeholder="请输入添加人"
+          ></el-input>
         </el-form-item>
         <el-form-item prop="payState">
           <el-select
@@ -59,7 +65,14 @@
           <el-button native-type="reset" type="primary">重置</el-button>
         </el-form-item>
       </save-form>
-      <el-button  style="margin-bottom: 20px;" type="primary" v-permission="'tenantInfo/add'" @click="openService('create')" icon="el-icon-plus">新增机构</el-button>
+      <el-button
+        style="margin-bottom: 20px"
+        type="primary"
+        v-permission="'tenantInfo/add'"
+        @click="openService('create')"
+        icon="el-icon-plus"
+        >新增机构</el-button
+      >
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table
@@ -81,7 +94,11 @@
               {{ scope.row.studentCount }}/{{ scope.row.studentUpLimit }}
             </template>
           </el-table-column>
-          <el-table-column align="center" label="有效期到期时间" prop="expireDate">
+          <el-table-column
+            align="center"
+            label="有效期到期时间"
+            prop="expireDate"
+          >
             <template slot-scope="scope">
               {{ scope.row.expireDate | formatTimer }}
             </template>
@@ -106,32 +123,50 @@
                 @click="openService('look', scope.row)"
                 v-permission="'tenantInfo/info'"
                 type="text"
-                >查看</el-button>
+                >查看</el-button
+              >
               <el-button
                 @click="openService('update', scope.row)"
                 v-permission="'tenantInfo/update'"
                 type="text"
-                >修改</el-button>
+                >修改</el-button
+              >
               <el-button
                 @click="changeOrgan(scope.row)"
-                v-permission="scope.row.state == 1 ? 'tenantInfo/opsState/stop' : 'tenantInfo/opsState/open'"
+                v-permission="
+                  scope.row.state == 1
+                    ? 'tenantInfo/opsState/stop'
+                    : 'tenantInfo/opsState/open'
+                "
                 type="text"
-                >{{ scope.row.state == 1 ? '停用' : '启用' }}</el-button>
+                >{{ scope.row.state == 1 ? "停用" : "启用" }}</el-button
+              >
               <el-button
                 v-if="scope.row.payState != 1"
                 @click="onQrCode(scope.row)"
                 type="text"
-                >缴费二维码</el-button>
+                >缴费二维码</el-button
+              >
+              <el-button
+                v-if="
+                  scope.row.payState === 1 &&
+                  $helpers.permission('tenantContractRecord/queryPage')
+                "
+                @click="onDownloadProtocol(scope.row)"
+                type="text"
+                >下载协议</el-button
+              >
               <el-button
-                v-if="scope.row.payState === 1 && $helpers.permission('tenantContractRecord/queryPage')"
-                 @click="onDownloadProtocol(scope.row)"
+                @click="setHfMerchant(scope.row)"
                 type="text"
-                >下载协议</el-button>
+                v-if="$helpers.permission('hfMerchantConfig/queryByTenantId')"
+                >汇付账号设置</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
         <pagination
-        :saveKey="'platformServiceManager'"
+          :saveKey="'platformServiceManager'"
           sync
           :total.sync="pageInfo.total"
           :page.sync="pageInfo.page"
@@ -144,15 +179,25 @@
     <qr-code v-model="qrcodeStatus" title="机构缴费二维码" :codeUrl="codeUrl" />
 
     <el-dialog title="协议下载" :visible.sync="protocolVisible" width="650px">
-      <protocol-model v-if="protocolVisible" @close="protocolVisible = false" :protocolVersions="protocolVersions" />
+      <protocol-model
+        v-if="protocolVisible"
+        @close="protocolVisible = false"
+        :protocolVersions="protocolVersions"
+      />
     </el-dialog>
+    <hfPayCount ref="hfPayCount" />
   </div>
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
 import QrCode from "@/components/QrCode/index";
-import protocolModel from '@/views/studentManager/modals/protocolModel';
-import { tenantInfoQueryPage , tenantInfoOpsState, tenantContractRecordList } from "./api";
+import hfPayCount from "./components/hfPayCount";
+import protocolModel from "@/views/studentManager/modals/protocolModel";
+import {
+  tenantInfoQueryPage,
+  tenantInfoOpsState,
+  tenantContractRecordList,
+} from "./api";
 import { getTimes } from "@/utils";
 import { vaildTeachingUrl } from "@/utils/validate";
 const initSearch = {
@@ -163,7 +208,7 @@ const initSearch = {
   createdName: null,
 };
 export default {
-  components: { pagination, QrCode, protocolModel },
+  components: { pagination, QrCode, protocolModel, hfPayCount },
   data() {
     return {
       tableList: [],
@@ -210,13 +255,13 @@ export default {
     },
     async onDownloadProtocol(item) {
       try {
-        const res = await tenantContractRecordList({ tenantId: item.id })
-        console.log(res)
+        const res = await tenantContractRecordList({ tenantId: item.id });
+        console.log(res);
         this.protocolVersions = res.data?.rows || [];
         this.protocolVisible = true;
-      } catch(e) {
+      } catch (e) {
         //
-        console.log(e)
+        console.log(e);
       }
       // window.location.href = item.url;
     },
@@ -226,37 +271,40 @@ export default {
       this.codeUrl = vaildTeachingUrl() + "/#/tenantPay/" + row.id;
     },
     changeOrgan(row) {
-      const stateStr = row.state == 1 ? '停用' : '启用'
-      const state = row.state == 1 ? 2 : 1
+      const stateStr = row.state == 1 ? "停用" : "启用";
+      const state = row.state == 1 ? 2 : 1;
       this.$confirm(`是否${stateStr}?`, "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
-      }).then( async() => {
-        try{
-         await tenantInfoOpsState({ id: row.id, state})
-         this.$message.success(stateStr + '成功')
-         this.getList()
-        }catch{}
+      }).then(async () => {
+        try {
+          await tenantInfoOpsState({ id: row.id, state });
+          this.$message.success(stateStr + "成功");
+          this.getList();
+        } catch {}
       });
     },
     openService(type, row) {
-      let tagTitle = '创建'
-      if(type == 'update') {
-        tagTitle ='修改'
-      } else if(type == 'look') {
-        tagTitle = '查看'
+      let tagTitle = "创建";
+      if (type == "update") {
+        tagTitle = "修改";
+      } else if (type == "look") {
+        tagTitle = "查看";
       }
 
-      this.$router.push({
-        path: '/platformManager/organOperation',
-        query: {
-          type: type,
-          id: row?.id || null
+      this.$router.push(
+        {
+          path: "/platformManager/organOperation",
+          query: {
+            type: type,
+            id: row?.id || null,
+          },
+        },
+        (route) => {
+          route.meta.title = tagTitle + "机构";
         }
-      }, (route) => {
-        route.meta.title = tagTitle + '机构'
-      })
+      );
     },
     // async delService(row) {
     //   this.$confirm("是否删除?", "提示", {
@@ -271,6 +319,10 @@ export default {
     //     }catch{}
     //   });
     // },
+    setHfMerchant(row) {
+      console.log("setHfMerchant", row);
+      this.$refs.hfPayCount.init(row);
+    },
   },
 };
 </script>

部分文件因文件數量過多而無法顯示