فهرست منبع

Merge branch '11/24SAAS' into 0709_OA

lex 3 سال پیش
والد
کامیت
40322b7891
56فایلهای تغییر یافته به همراه1773 افزوده شده و 960 حذف شده
  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. 0 1
      dist/static/css/chunk-0d319023.b7efbbfe.css
  5. 1 0
      dist/static/css/chunk-1261e884.6c82a542.css
  6. 0 0
      dist/static/css/chunk-1bc06ad3.7d75b883.css
  7. 1 0
      dist/static/css/chunk-2091d226.3e1dcfbd.css
  8. 0 1
      dist/static/css/chunk-3f629fe0.18e449fa.css
  9. 0 1
      dist/static/css/chunk-665096e5.0dd0ad7d.css
  10. 0 0
      dist/static/css/chunk-6a11f5e4.73566dfc.css
  11. 0 0
      dist/static/css/chunk-77f3bfdc.7515c8b2.css
  12. 1 0
      dist/static/css/chunk-9adedfe6.c128b922.css
  13. 0 1
      dist/static/css/chunk-ccc3bbcc.29fa4faa.css
  14. 0 0
      dist/static/css/chunk-f208cb18.650289d3.css
  15. 1 0
      dist/static/css/chunk-f518c388.4209f4c1.css
  16. 0 0
      dist/static/js/app.2d0b8d42.js
  17. 0 0
      dist/static/js/app.9bbc7676.js
  18. 0 0
      dist/static/js/chunk-013e72b3.39cb40c8.js
  19. 0 0
      dist/static/js/chunk-013e72b3.d37a541a.js
  20. 0 0
      dist/static/js/chunk-0d319023.036e946d.js
  21. 0 0
      dist/static/js/chunk-1261e884.76ee5426.js
  22. 1 1
      dist/static/js/chunk-1bc06ad3.463dcdaf.js
  23. 0 0
      dist/static/js/chunk-2091d226.06ed751e.js
  24. 0 0
      dist/static/js/chunk-2873911e.0591d146.js
  25. 0 0
      dist/static/js/chunk-2d2e5db1.f706084c.js
  26. 0 0
      dist/static/js/chunk-34f534da.5f80c4ea.js
  27. 0 0
      dist/static/js/chunk-355601be.25aa4a36.js
  28. 0 0
      dist/static/js/chunk-36e50c03.5ea5ed93.js
  29. 0 0
      dist/static/js/chunk-3f629fe0.f2987b92.js
  30. 0 0
      dist/static/js/chunk-4324634e.8e9ee371.js
  31. 0 0
      dist/static/js/chunk-598480c1.fe3baf17.js
  32. 0 0
      dist/static/js/chunk-665096e5.fadb9841.js
  33. 0 0
      dist/static/js/chunk-6a11f5e4.6c272a71.js
  34. 0 0
      dist/static/js/chunk-77f3bfdc.6d36505a.js
  35. 0 0
      dist/static/js/chunk-9adedfe6.23f08e73.js
  36. 0 0
      dist/static/js/chunk-ccc3bbcc.c8eacf3a.js
  37. 0 0
      dist/static/js/chunk-e8a49100.4b505478.js
  38. 0 0
      dist/static/js/chunk-f208cb18.21530894.js
  39. 0 0
      dist/static/js/chunk-f518c388.e78486a1.js
  40. 3 0
      src/App.vue
  41. 1 1
      src/main.js
  42. 54 43
      src/store/modules/user.js
  43. 2 2
      src/utils/auth.js
  44. 77 74
      src/utils/request.js
  45. 87 79
      src/utils/request2.js
  46. 405 266
      src/views/adapayAccount/form.vue
  47. 305 221
      src/views/adapayAccount/index.vue
  48. 1 0
      src/views/liveClassManager/newLiveClass.vue
  49. 22 1
      src/views/organManager/api.js
  50. 272 0
      src/views/organManager/components/hfPayCount.vue
  51. 94 42
      src/views/organManager/index.vue
  52. 97 57
      src/views/productService/model/rechargeModel.vue
  53. 139 75
      src/views/productService/model/serviceModel.vue
  54. 104 57
      src/views/resetTeaming/modals/giveMemberModel.vue
  55. 93 26
      src/views/setQuestions/operation.vue
  56. 12 11
      src/views/studentManager/studentList.vue

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/index.html


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.bf8f9066.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.c832216e.css


+ 0 - 1
dist/static/css/chunk-0d319023.b7efbbfe.css

@@ -1 +0,0 @@
-.dialog-footer[data-v-07e9e40c]{display:block;text-align:right;margin-top:20px}.title[data-v-3b09448b]{margin-bottom:30px;font-size:16px;color:#000}.dialog-footer[data-v-4d102b4c]{display:block;text-align:right;margin-top:20px}.newBand[data-v-e4373e10]{display:inline-block;margin-right:10px}.right-code .title[data-v-e4373e10]{font-size:18px;text-align:center;padding-bottom:8px}[data-v-e4373e10] .studentInfo .multiple.el-select{width:185px!important}.red[data-v-e4373e10]{color:red}.demo-table-expand label[data-v-e4373e10]{width:150px;color:#99a9bf}.demo-table-expand .el-form-item[data-v-e4373e10]{margin-right:0;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:10px;position:relative}.demo-table-expand .el-form-item__label[data-v-e4373e10]{z-index:100}[data-v-e4373e10] .el-table__expanded-cell[class*=cell]{padding:20px 0 20px 110px}.schoolWrap[data-v-e4373e10]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

+ 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}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/chunk-1bc06ad3.7d75b883.css


+ 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 - 1
dist/static/css/chunk-665096e5.0dd0ad7d.css

@@ -1 +0,0 @@
-.chioseWrap[data-v-368e77bc]{text-align:center;font-size:16px}.chioseWrap>p[data-v-368e77bc]{font-weight:600;padding-bottom:15px;line-height:1.5}.chioseWrap>p span[data-v-368e77bc]{color:red;padding:0 3px}.dialog-footer[data-v-368e77bc]{text-align:right;display:block;padding-top:15px}.chioseWrap[data-v-20fbc19e]{font-size:16px}.chioseWrap>p[data-v-20fbc19e]{font-weight:500;padding-bottom:15px}.chioseWrap>p span[data-v-20fbc19e]{color:red;padding:0 3px}.dialog-footer[data-v-20fbc19e]{text-align:right;display:block;padding-top:15px}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/chunk-6a11f5e4.73566dfc.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/chunk-77f3bfdc.7515c8b2.css


+ 1 - 0
dist/static/css/chunk-9adedfe6.c128b922.css

@@ -0,0 +1 @@
+.dialog-footer[data-v-07e9e40c]{display:block;text-align:right;margin-top:20px}.title[data-v-3b09448b]{margin-bottom:30px;font-size:16px;color:#000}.dialog-footer[data-v-4d102b4c]{display:block;text-align:right;margin-top:20px}.newBand[data-v-06126804]{display:inline-block;margin-right:10px}.right-code .title[data-v-06126804]{font-size:18px;text-align:center;padding-bottom:8px}[data-v-06126804] .studentInfo .multiple.el-select{width:185px!important}.red[data-v-06126804]{color:red}.demo-table-expand label[data-v-06126804]{width:150px;color:#99a9bf}.demo-table-expand .el-form-item[data-v-06126804]{margin-right:0;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:10px;position:relative}.demo-table-expand .el-form-item__label[data-v-06126804]{z-index:100}[data-v-06126804] .el-table__expanded-cell[class*=cell]{padding:20px 0 20px 110px}.schoolWrap[data-v-06126804]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

+ 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-f208cb18.650289d3.css


+ 1 - 0
dist/static/css/chunk-f518c388.4209f4c1.css

@@ -0,0 +1 @@
+.chioseWrap[data-v-368e77bc]{text-align:center;font-size:16px}.chioseWrap>p[data-v-368e77bc]{font-weight:600;padding-bottom:15px;line-height:1.5}.chioseWrap>p span[data-v-368e77bc]{color:red;padding:0 3px}.dialog-footer[data-v-368e77bc]{text-align:right;display:block;padding-top:15px}.chioseWrap[data-v-36506a1d]{font-size:16px}.chioseWrap>p[data-v-36506a1d]{font-weight:500;padding-bottom:15px}.chioseWrap>p span[data-v-36506a1d]{color:red;padding:0 3px}.dialog-footer[data-v-36506a1d]{text-align:right;display:block;padding-top:15px}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/app.2d0b8d42.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/app.9bbc7676.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-0d319023.036e946d.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-1261e884.76ee5426.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
dist/static/js/chunk-1bc06ad3.463dcdaf.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-2d2e5db1.f706084c.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-34f534da.5f80c4ea.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-598480c1.fe3baf17.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-665096e5.fadb9841.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-6a11f5e4.6c272a71.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-77f3bfdc.6d36505a.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-9adedfe6.23f08e73.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-ccc3bbcc.c8eacf3a.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-e8a49100.4b505478.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-f208cb18.21530894.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/chunk-f518c388.e78486a1.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;

+ 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('')
     })
   }
 }

+ 2 - 2
src/utils/auth.js

@@ -43,8 +43,8 @@ export function setToken(token) {
 }
 
 export function removeToken() {
-  Cookies.remove(TokenKey);
-  return Cookies.remove(TokenKey, { domain: getCookieDomain() });
+  Cookies.set(TokenKey, "");
+  return Cookies.remove(TokenKey);
 }
 
 export function removeTenant() {

+ 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>

+ 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>

+ 97 - 57
src/views/productService/model/rechargeModel.vue

@@ -1,7 +1,12 @@
 <template>
   <div class="chioseWrap">
     <el-form :inline="true" ref="payForm" :model="payForm">
-      <el-form-item prop="payType" :rules="[{required: true, message: '请选择支付方式', trigger: 'change'}]">
+      <el-form-item
+        prop="payType"
+        :rules="[
+          { required: true, message: '请选择支付方式', trigger: 'change' }
+        ]"
+      >
         <el-select
           v-model.trim="payForm.payType"
           style="width: 180px"
@@ -21,26 +26,22 @@
     >
       <el-table-column align="center" prop="name" label="产品名称">
       </el-table-column>
-      <el-table-column
-        align="center"
-        label="充值金额(元)"
-      >
+      <el-table-column align="center" label="充值金额(元)">
         <template slot-scope="scope">
           {{ scope.row.rechargeAmount | hasMoneyFormat }}
         </template>
       </el-table-column>
-      <el-table-column
-        align="center"
-        label="支付价格(元)"
-      >
+      <el-table-column align="center" label="支付价格(元)">
         <template slot-scope="scope">
-          <span style="color: red;">{{ scope.row.amount | hasMoneyFormat }}</span>
+          <span style="color: red;">{{
+            scope.row.amount | hasMoneyFormat
+          }}</span>
         </template>
       </el-table-column>
     </el-table>
 
     <span slot="footer" class="dialog-footer">
-      <el-button @click="$listeners.close();">取 消</el-button>
+      <el-button @click="$listeners.close()">取 消</el-button>
       <el-button @click="onMemberPay" type="primary">确 定</el-button>
     </span>
 
@@ -52,21 +53,27 @@
       width="500px"
       append-to-body
     >
-      <payment :tableList="tableList" :orderNo="orderNo" v-on="$listeners" :codeUrl="codeUrl" @close="onPaymentClose" />
+      <payment
+        :tableList="tableList"
+        :orderNo="orderNo"
+        v-on="$listeners"
+        :codeUrl="codeUrl"
+        @close="onPaymentClose"
+      />
     </el-dialog>
   </div>
 </template>
 <script>
-import { recharge } from '../api'
-import { vaildStudentUrl } from '@/utils/validate'
-import payment from '@/views/productService/model/payment'
+import { recharge } from "../api";
+import { vaildStudentUrl } from "@/utils/validate";
+import payment from "@/views/productService/model/payment";
 export default {
   props: ["amount"],
   components: { payment },
   data() {
     return {
       payForm: {
-        payType: null,
+        payType: null
       },
       pay_channel: null, //支付渠道
       selectStudentMoney: 0, // 选中学生金额
@@ -77,64 +84,97 @@ export default {
     };
   },
   async mounted() {
-    if(this.amount) {
-      this.tableList = [{
-        name: '云教室充值',
-        rechargeAmount: this.amount,
-        amount: this.amount
-      }]
+    if (this.amount) {
+      this.tableList = [
+        {
+          name: "云教室充值",
+          rechargeAmount: this.amount,
+          amount: this.amount
+        }
+      ];
     }
   },
   methods: {
     onMemberPay() {
-      this.$refs.payForm.validate(async (_) => {
-        if(_) {
+      this.$refs.payForm.validate(async _ => {
+        if (_) {
           try {
-            const res = await recharge({ amount: this.amount })
-            console.log(res.data.amount, res.data.orderNo)
-            if(res.data.amount == 0 && res.data.orderNo) {
-              this.$message.success('您已成功缴费')
-              this.onPaymentClose(true)
-              this.$listeners.getList()
-              return
+            const res = await recharge({ amount: this.amount });
+            console.log(res.data.amount, res.data.orderNo);
+            if (res.data.amount == 0 && res.data.orderNo) {
+              this.$message.success("您已成功缴费");
+              this.onPaymentClose(true);
+              this.$listeners.getList();
+              return;
             }
-            const payForm = this.payForm
+            const payForm = this.payForm;
             // // 二维码页面, 唤起支付页面
-            const { orderNo, sign, amount, orderBody, orderSubject } = res.data.payMap
-            this.orderNo = orderNo
-            this.codeUrl = vaildStudentUrl() + '/#/payCenter?orderNo=' + orderNo + '&sign=' + sign + '&amount=' + amount + '&payType=' + payForm.payType + '&orderBody=' + orderBody + '&orderSubject=' + orderSubject + '&platform=tenantRecharge'
-            console.log(this.codeUrl, 'codeUrl')
-            this.payMentVisible = true
-          } catch(e) {}
+            const {
+              orderNo,
+              sign,
+              amount,
+              orderBody,
+              orderSubject,
+              tenantId,
+              returnUrl,
+              notifyUrl
+            } = res.data.payMap;
+            this.orderNo = orderNo;
+            this.codeUrl =
+              vaildStudentUrl() +
+              "/#/payCenter?orderNo=" +
+              orderNo +
+              "&sign=" +
+              sign +
+              "&amount=" +
+              amount +
+              "&payType=" +
+              payForm.payType +
+              "&orderBody=" +
+              orderBody +
+              "&orderSubject=" +
+              orderSubject +
+              "&platform=tenantRecharge" +
+              "&tenantId" +
+              tenantId +
+              "&returnUrl=" +
+              returnUrl +
+              "&notifyUrl=" +
+              notifyUrl;
+            console.log(this.codeUrl, "codeUrl");
+            this.payMentVisible = true;
+          } catch (e) {}
         }
-      })
+      });
     },
     onClose(done) {
-      this.onPaymentClose(false, done)
+      this.onPaymentClose(false, done);
     },
     onPaymentClose(hideTip = false, callBack) {
-      if(hideTip) {
-        this.payMentVisible = false
-        this.$emit('close')
-        return
+      if (hideTip) {
+        this.payMentVisible = false;
+        this.$emit("close");
+        return;
       }
       this.$confirm(`是否支付完成?`, "提示", {
         confirmButtonText: "已完成支付",
         cancelButtonText: "未完成支付",
-        type: "warning",
-      }).then(async (res) => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      }).catch(e => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      });
+        type: "warning"
+      })
+        .then(async res => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        })
+        .catch(e => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        });
     }
-  },
+  }
 };
 </script>
 <style lang="less" scoped>

+ 139 - 75
src/views/productService/model/serviceModel.vue

@@ -1,7 +1,12 @@
 <template>
   <div class="chioseWrap">
     <el-form :inline="true" ref="payForm" :model="payForm">
-      <el-form-item prop="payType" :rules="[{required: true, message: '请选择支付方式', trigger: 'change'}]">
+      <el-form-item
+        prop="payType"
+        :rules="[
+          { required: true, message: '请选择支付方式', trigger: 'change' }
+        ]"
+      >
         <el-select
           v-model.trim="payForm.payType"
           style="width: 180px"
@@ -18,7 +23,11 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         :data="tableList"
       >
-        <el-table-column align="center" prop="platformServeName" label="产品名称">
+        <el-table-column
+          align="center"
+          prop="platformServeName"
+          label="产品名称"
+        >
         </el-table-column>
         <el-table-column align="center" label="学员上限">
           <template slot-scope="scope">
@@ -32,34 +41,43 @@
         </el-table-column>
         <el-table-column align="center" prop="num" label="数量">
         </el-table-column>
-        <el-table-column
-          align="center"
-          label="原价(元)"
-        >
+        <el-table-column align="center" label="原价(元)">
           <template slot-scope="scope">
             {{ scope.row.rechargeAmount | hasMoneyFormat }}
           </template>
         </el-table-column>
-        <el-table-column
-          align="center"
-          label="支付价格(元)"
-        >
+        <el-table-column align="center" label="支付价格(元)">
           <template slot-scope="scope">
-            <span style="color: red;">{{ scope.row.value | hasMoneyFormat }}</span>
+            <span style="color: red;">{{
+              scope.row.value | hasMoneyFormat
+            }}</span>
           </template>
         </el-table-column>
       </el-table>
 
-      <el-form-item prop="checked" :rules="[{required: true, message: '请阅读并同意协议', trigger: 'change'}]">
+      <el-form-item
+        prop="checked"
+        :rules="[
+          { required: true, message: '请阅读并同意协议', trigger: 'change' }
+        ]"
+      >
         <el-checkbox v-model="payForm.checked" @change="onCheckChange">
         </el-checkbox>
-          <span style="color: #606266; padding-left: 5px;cursor: pointer;" @click="onCheckBox">我已阅读并同意</span>
-          <span @click.stop="onLookContract" style="color: #01C1B5;cursor: pointer;">《产品及服务协议》</span>
+        <span
+          style="color: #606266; padding-left: 5px;cursor: pointer;"
+          @click="onCheckBox"
+          >我已阅读并同意</span
+        >
+        <span
+          @click.stop="onLookContract"
+          style="color: #01C1B5;cursor: pointer;"
+          >《产品及服务协议》</span
+        >
       </el-form-item>
     </el-form>
 
     <span slot="footer" class="dialog-footer">
-      <el-button @click="$listeners.close();">取 消</el-button>
+      <el-button @click="$listeners.close()">取 消</el-button>
       <el-button @click="onMemberPay" type="primary">确 定</el-button>
     </span>
 
@@ -85,17 +103,23 @@
       width="500px"
       append-to-body
     >
-      <payment :tableList="tableList" :orderNo="orderNo" v-on="$listeners" :codeUrl="codeUrl" @close="onPaymentClose" />
+      <payment
+        :tableList="tableList"
+        :orderNo="orderNo"
+        v-on="$listeners"
+        :codeUrl="codeUrl"
+        @close="onPaymentClose"
+      />
     </el-dialog>
   </div>
 </template>
 <script>
 // import { recharge } from '../api'
-import { vaildStudentUrl } from '@/utils/validate'
-import payment from '@/views/productService/model/payment'
+import { vaildStudentUrl } from "@/utils/validate";
+import payment from "@/views/productService/model/payment";
 import previewProtocol from "@/views/tenantSetting/model/previewProtocol";
-import { tenantInfoRePay, getContract } from '../api'
-import { getTenantId } from '@/utils/auth'
+import { tenantInfoRePay, getContract } from "../api";
+import { getTenantId } from "@/utils/auth";
 export default {
   props: ["value", "tenantInfo"],
   components: { payment, previewProtocol },
@@ -103,7 +127,7 @@ export default {
     return {
       payForm: {
         payType: null,
-        checked: null,
+        checked: null
       },
       fileContent: null,
       lookVisible: false,
@@ -116,90 +140,130 @@ export default {
     };
   },
   async mounted() {
-    if(this.value) {
-      const { contractPrice, originalPrice, ...res } = this.tenantInfo
-      this.tableList = [{
-        ...res,
-        num: this.value,
-        rechargeAmount: this.value * originalPrice,
-        value: this.value * contractPrice
-      }]
+    if (this.value) {
+      const { contractPrice, originalPrice, ...res } = this.tenantInfo;
+      this.tableList = [
+        {
+          ...res,
+          num: this.value,
+          rechargeAmount: this.value * originalPrice,
+          value: this.value * contractPrice
+        }
+      ];
     }
   },
   methods: {
     onCheckChange() {
-      if(!this.payForm.checked) {
-        this.payForm.checked = null
+      if (!this.payForm.checked) {
+        this.payForm.checked = null;
       }
     },
     onCheckBox() {
-      if(this.payForm.checked) {
-        this.payForm.checked = null
+      if (this.payForm.checked) {
+        this.payForm.checked = null;
       } else {
-        this.payForm.checked = true
+        this.payForm.checked = true;
       }
     },
     onMemberPay() {
-      this.$refs.payForm.validate(async (_) => {
-        if(_) {
+      this.$refs.payForm.validate(async _ => {
+        if (_) {
           try {
-            console.log(this.value, 'this.value')
-            const res = await tenantInfoRePay({ id: getTenantId(), val: this.value })
+            console.log(this.value, "this.value");
+            const res = await tenantInfoRePay({
+              id: getTenantId(),
+              val: this.value
+            });
             // console.log(res)
-            if(res.data.amount == 0 && res.data.orderNo) {
-              this.$message.success('您已成功缴费')
-              this.onPaymentClose(true)
-              this.$listeners.getList()
-              return
+            if (res.data.amount == 0 && res.data.orderNo) {
+              this.$message.success("您已成功缴费");
+              this.onPaymentClose(true);
+              this.$listeners.getList();
+              return;
             }
-            const payForm = this.payForm
+            const payForm = this.payForm;
             // 二维码页面, 唤起支付页面
-            const { orderNo, sign, amount, orderBody, orderSubject } = res.data.payMap
-            this.orderNo = orderNo
-            this.codeUrl = vaildStudentUrl() + '/#/payCenter?orderNo=' + orderNo + '&sign=' + sign + '&amount=' + amount + '&payType=' + payForm.payType + '&orderBody=' + orderBody + '&orderSubject=' + orderSubject + '&platform=tenant'
-            console.log(this.codeUrl, 'codeUrl')
-            this.payMentVisible = true
-          } catch(e) {}
+            const {
+              orderNo,
+              sign,
+              amount,
+              orderBody,
+              orderSubject,
+              tenantId,
+              returnUrl,
+              notifyUrl
+            } = res.data.payMap;
+            this.orderNo = orderNo;
+            this.codeUrl =
+              vaildStudentUrl() +
+              "/#/payCenter?orderNo=" +
+              orderNo +
+              "&sign=" +
+              sign +
+              "&amount=" +
+              amount +
+              "&payType=" +
+              payForm.payType +
+              "&orderBody=" +
+              orderBody +
+              "&orderSubject=" +
+              orderSubject +
+              "&platform=tenant" +
+              "&tenantId=" +
+              tenantId +
+              "&returnUrl=" +
+              returnUrl +
+              "&notifyUrl=" +
+              notifyUrl;
+            console.log(this.codeUrl, "codeUrl");
+            this.payMentVisible = true;
+          } catch (e) {}
         }
-      })
+      });
     },
     onClose(done) {
-      this.onPaymentClose(false, done)
+      this.onPaymentClose(false, done);
     },
     async onLookContract() {
       // 如果有协议则不需要重新请求
-      if(!this.fileContent) {
+      if (!this.fileContent) {
         try {
-          const tenantId = this.$helpers.tenantId
-          const res = await getContract({ id: tenantId, type: 1, renewCount: this.value })
-          this.fileContent = res.data
-        } catch(e) {}
+          const tenantId = this.$helpers.tenantId;
+          const res = await getContract({
+            id: tenantId,
+            type: 1,
+            renewCount: this.value
+          });
+          this.fileContent = res.data;
+        } catch (e) {}
       }
-      this.lookVisible = true
+      this.lookVisible = true;
     },
     onPaymentClose(hideTip = false, callBack) {
-      if(hideTip) {
-        this.payMentVisible = false
-        this.$emit('close')
-        return
+      if (hideTip) {
+        this.payMentVisible = false;
+        this.$emit("close");
+        return;
       }
       this.$confirm(`是否支付完成?`, "提示", {
         confirmButtonText: "已完成支付",
         cancelButtonText: "未完成支付",
-        type: "warning",
-      }).then(async (res) => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      }).catch(e => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      });
+        type: "warning"
+      })
+        .then(async res => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        })
+        .catch(e => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        });
     }
-  },
+  }
 };
 </script>
 <style lang="less" scoped>

+ 104 - 57
src/views/resetTeaming/modals/giveMemberModel.vue

@@ -1,8 +1,19 @@
 <template>
   <div class="chioseWrap">
-    <p>您将为以下<span>{{tableList.length}}</span>位学员激活云教练,激活金额<span>{{ selectStudentMoney | moneyFormat }}</span>元</p>
+    <p>
+      您将为以下<span>{{ tableList.length }}</span
+      >位学员激活云教练,激活金额<span>{{
+        selectStudentMoney | moneyFormat
+      }}</span
+      >元
+    </p>
     <el-form :inline="true" ref="payForm" :model="payForm">
-      <el-form-item prop="payType" :rules="[{required: true, message: '请选择支付方式', trigger: 'change'}]">
+      <el-form-item
+        prop="payType"
+        :rules="[
+          { required: true, message: '请选择支付方式', trigger: 'change' }
+        ]"
+      >
         <el-select
           v-model.trim="payForm.payType"
           style="width: 180px"
@@ -24,11 +35,7 @@
       </el-table-column>
       <el-table-column align="center" prop="phone" label="手机号">
       </el-table-column>
-      <el-table-column
-        align="center"
-        prop="type"
-        label="云教练类型"
-      >
+      <el-table-column align="center" prop="type" label="云教练类型">
         <template slot-scope="scope">
           {{ scope.row.type | memberEnumType }}
         </template>
@@ -38,10 +45,7 @@
         prop="time"
         label="数量"
       ></el-table-column>
-      <el-table-column
-        align="center"
-        label="缴费金额(元)"
-      >
+      <el-table-column align="center" label="缴费金额(元)">
         <template slot-scope="scope">
           {{ scope.row.amount | hasMoneyFormat }}
         </template>
@@ -49,7 +53,13 @@
     </el-table>
 
     <span slot="footer" class="dialog-footer">
-      <el-button @click="$listeners.close();$listeners.getList()">取 消</el-button>
+      <el-button
+        @click="
+          $listeners.close();
+          $listeners.getList();
+        "
+        >取 消</el-button
+      >
       <el-button @click="onMemberPay" type="primary">确 定</el-button>
     </span>
 
@@ -61,86 +71,123 @@
       width="500px"
       append-to-body
     >
-      <giveMemberPayment :tableList="tableList" v-on="$listeners" :orderNo="orderNo" :codeUrl="codeUrl" @close="onPaymentClose" />
+      <giveMemberPayment
+        :tableList="tableList"
+        v-on="$listeners"
+        :orderNo="orderNo"
+        :codeUrl="codeUrl"
+        @close="onPaymentClose"
+      />
     </el-dialog>
   </div>
 </template>
 <script>
-import { cloudPay } from '../api'
-import { vaildStudentUrl } from '@/utils/validate'
-import giveMemberPayment from '@/views/resetTeaming/modals/giveMemberPayment'
+import { cloudPay } from "../api";
+import { vaildStudentUrl } from "@/utils/validate";
+import giveMemberPayment from "@/views/resetTeaming/modals/giveMemberPayment";
 export default {
   props: ["tableList"],
   components: { giveMemberPayment },
   data() {
     return {
       payForm: {
-        payType: null,
+        payType: null
       },
       pay_channel: null, //支付渠道
       selectStudentMoney: 0, // 选中学生金额
       payMentVisible: false,
       codeUrl: null,
-      orderNo: null,
+      orderNo: null
     };
   },
   async mounted() {
-    let tableList = this.tableList || []
-    for(let i of tableList) {
-      this.selectStudentMoney += parseFloat(i.amount)
+    let tableList = this.tableList || [];
+    for (let i of tableList) {
+      this.selectStudentMoney += parseFloat(i.amount);
     }
   },
   methods: {
     onMemberPay() {
-      this.$refs.payForm.validate(async (_) => {
-        if(_) {
+      this.$refs.payForm.validate(async _ => {
+        if (_) {
           try {
-            const res = await cloudPay(this.tableList)
-            console.log(res)
-            if(res.data.amount == 0 && res.data.orderNo) {
-              this.$message.success('您已成功缴费')
-              this.onPaymentClose(true)
-              this.$listeners.getList()
-              return
+            const res = await cloudPay(this.tableList);
+            console.log(res);
+            if (res.data.amount == 0 && res.data.orderNo) {
+              this.$message.success("您已成功缴费");
+              this.onPaymentClose(true);
+              this.$listeners.getList();
+              return;
             }
-            const payForm = this.payForm
+            const payForm = this.payForm;
             // // 二维码页面, 唤起支付页面
-            const { orderNo, sign, amount, orderBody, orderSubject } = res.data.payMap
-            this.orderNo = orderNo
-            this.codeUrl = vaildStudentUrl() + '/#/payCenter?orderNo=' + orderNo + '&sign=' + sign + '&amount=' + amount + '&payType=' + payForm.payType + '&orderBody=' + orderBody + '&orderSubject=' + orderSubject + '&platform=cloudTeacherOrder'
-            console.log(this.codeUrl, 'codeUrl')
-            this.payMentVisible = true
-          } catch(e) {}
+            const {
+              orderNo,
+              sign,
+              amount,
+              orderBody,
+              orderSubject,
+              tenantId,
+              returnUrl,
+              notifyUrl
+            } = res.data.payMap;
+            this.orderNo = orderNo;
+            this.codeUrl =
+              vaildStudentUrl() +
+              "/#/payCenter?orderNo=" +
+              orderNo +
+              "&sign=" +
+              sign +
+              "&amount=" +
+              amount +
+              "&payType=" +
+              payForm.payType +
+              "&orderBody=" +
+              orderBody +
+              "&orderSubject=" +
+              orderSubject +
+              "&platform=cloudTeacherOrder" +
+              "&tenantId=" +
+              tenantId +
+              "&returnUrl=" +
+              returnUrl +
+              "&notifyUrl=" +
+              notifyUrl;
+            console.log(this.codeUrl, "codeUrl");
+            this.payMentVisible = true;
+          } catch (e) {}
         }
-      })
+      });
     },
     onClose(done) {
-      this.onPaymentClose(false, done)
+      this.onPaymentClose(false, done);
     },
     onPaymentClose(hideTip = false, callBack) {
-      if(hideTip) {
-        this.payMentVisible = false
-        this.$emit('close')
-        this.$emit('getList')
-        return
+      if (hideTip) {
+        this.payMentVisible = false;
+        this.$emit("close");
+        this.$emit("getList");
+        return;
       }
       this.$confirm(`是否支付完成?`, "提示", {
         confirmButtonText: "已完成支付",
         cancelButtonText: "未完成支付",
-        type: "warning",
-      }).then(async (res) => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      }).catch(e => {
-        if(typeof callBack == 'function') {
-          callBack()
-        }
-        this.payMentVisible = false
-      });
+        type: "warning"
+      })
+        .then(async res => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        })
+        .catch(e => {
+          if (typeof callBack == "function") {
+            callBack();
+          }
+          this.payMentVisible = false;
+        });
     }
-  },
+  }
 };
 </script>
 <style lang="less" scoped>

+ 93 - 26
src/views/setQuestions/operation.vue

@@ -90,7 +90,7 @@
             >
               <template slot="label">
                 <p style="position: relative" class="titleCell">
-                  <span style="color: #f56c6c; margin-right: 4px">*</span>
+                  <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
                   是否逐题提交
                   <el-tooltip placement="top" popper-class="mTooltip">
                     <div slot="content">逐题模式下,所有问题默认必填</div>
@@ -119,6 +119,80 @@
           </el-col>
         </el-row>
         <el-row>
+          <el-col :xs="24" :sm="24" :md="24" :lg="18" :xl="18">
+            <el-form-item
+              label="分享标题"
+              prop="shareTitle"
+              :rules="[
+                { required: true, message: '请输入分享标题', trigger: 'blur' },
+              ]"
+            >
+              <template slot="label">
+                <p style="position: relative" class="titleCell">
+                  <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
+                  分享标题
+                  <el-tooltip placement="top" popper-class="mTooltip">
+                    <div slot="content">
+                      问卷链接分享到微信时,显示的链接标题
+                    </div>
+                    <i
+                      class="el-icon-question"
+                      style="
+                        font-size: 18px;
+                        color: #f56c6c;
+                        position: relative;
+                        top: 2px;
+                      "
+                    ></i>
+                  </el-tooltip>
+                </p>
+              </template>
+              <el-input
+                v-model="form.shareTitle"
+                placeholder="请输入分享标题"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :xs="24" :sm="24" :md="24" :lg="18" :xl="18">
+            <el-form-item
+              label="分享描述"
+              prop="shareDescribe"
+              :rules="[
+                { required: true, message: '请输入分享描述', trigger: 'blur' },
+              ]"
+            >
+              <template slot="label">
+                <p style="position: relative" class="titleCell">
+                  <!-- <span style="color: #f56c6c; margin-right: 4px">*</span> -->
+                  分享描述
+                  <el-tooltip placement="top" popper-class="mTooltip">
+                    <div slot="content">
+                      问卷链接分享到微信时,显示的链接描述
+                    </div>
+                    <i
+                      class="el-icon-question"
+                      style="
+                        font-size: 18px;
+                        color: #f56c6c;
+                        position: relative;
+                        top: 2px;
+                      "
+                    ></i>
+                  </el-tooltip>
+                </p>
+              </template>
+              <el-input
+                v-model="form.shareDescribe"
+                placeholder="请输入分享描述"
+                :disabled="disabled"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
           <el-form-item
             label="问卷模板"
             prop="templateType"
@@ -236,7 +310,7 @@
             </el-col>
             <el-col :span="12" style="text-align: right; padding-right: 15px">
               <el-tooltip
-              key="moveDown"
+                key="moveDown"
                 class="item"
                 effect="dark"
                 content="向下移动"
@@ -250,7 +324,7 @@
                 ></el-button>
               </el-tooltip>
               <el-tooltip
-              key="moveUp"
+                key="moveUp"
                 class="item"
                 effect="dark"
                 content="向上移动"
@@ -338,21 +412,16 @@
         </el-col>
       </el-row>
       <el-row>
-        <el-col :xs="24"
-          :sm="24"
-          :md="24"
-          :lg="18"
-          :xl="18">
-                            <el-alert
-        v-if="disabled"
-        style="margin: 10px 0"
-        title="该问卷已存在提交数据,不可修改"
-        :closable="false"
-        type="error"
-      >
-      </el-alert>
-          </el-col>
-
+        <el-col :xs="24" :sm="24" :md="24" :lg="18" :xl="18">
+          <el-alert
+            v-if="disabled"
+            style="margin: 10px 0"
+            title="该问卷已存在提交数据,不可修改"
+            :closable="false"
+            type="error"
+          >
+          </el-alert>
+        </el-col>
       </el-row>
 
       <el-button type="primary" :disabled="disabled" @click="onSubmit">{{
@@ -414,7 +483,7 @@ export default {
         title: null,
         againCommitFlag: 1,
         questionnaireQuestionList: [{ questionnaireQuestionItemList: [{}] }],
-        commitType:null
+        commitType: null,
       },
       disabled: false,
       questionStatus: false,
@@ -467,7 +536,7 @@ export default {
         console.log(validateResult);
         if (validateResult) {
           this.setResultSort();
-          console.log(this.form)
+          console.log(this.form);
           try {
             if (this.type == "create") {
               await questionnaireTopicAdd(this.form);
@@ -528,24 +597,23 @@ export default {
     },
     // 向上移动
     moveUp(arr, index) {
-      console.log('向上移动')
+      console.log("向上移动");
       arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
     },
     // 向下移动
     moveDown(arr, index) {
-      console.log('向下移动')
+      console.log("向下移动");
       arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
     },
     // 删除选项
     onDelete(arr, index) {
       if (!this.disabled) {
         if (this.form.delQuestionnaireQuestionIdList) {
-
           this.form.delQuestionnaireQuestionIdList.push(arr[index].id);
-             console.log( this.form.delQuestionnaireQuestionIdList)
+          console.log(this.form.delQuestionnaireQuestionIdList);
         } else {
           this.form.delQuestionnaireQuestionIdList = [arr[index].id];
-            console.log( this.form.delQuestionnaireQuestionIdList)
+          console.log(this.form.delQuestionnaireQuestionIdList);
         }
       }
       arr.splice(index, 1);
@@ -586,7 +654,6 @@ export default {
       if (!val) {
         this.form.commitType = 0;
       }
-
     },
   },
 };

+ 12 - 11
src/views/studentManager/studentList.vue

@@ -11,6 +11,7 @@
         class="searchForm"
         @submit="onSearch"
         @reset="onReSet"
+        ref="saveForm"
         :model.sync="searchForm"
       >
         <el-form-item>
@@ -20,6 +21,7 @@
             @keydown.enter.native="
               (e) => {
                 e.target.blur();
+                $refs.saveForm.save();
                 onSearch();
               }
             "
@@ -173,7 +175,7 @@
           <el-button native-type="reset" type="primary">重置</el-button>
           <el-button
             type="primary"
-            v-permission="'export/studentHasCourse'"
+            v-if="$helpers.permission('export/studentHasCourse')"
             @click="downLoadStudent"
             >导出名单</el-button
           >
@@ -187,7 +189,7 @@
         >创建云教练缴费</el-button
       >
       <el-button
-        v-permission="'studentManage/register'"
+        v-if="$helpers.permission('studentManage/register')"
         @click="addStudent"
         type="primary"
         icon="el-icon-plus"
@@ -540,7 +542,7 @@
           <el-table-column align="center" width="180px" label="操作">
             <template slot-scope="scope">
               <router-link
-                v-permission="'/studentDetail'"
+               v-if="$helpers.permission('/studentDetail')"
                 class="el-button--text"
                 :to="{
                   path: `/business/studentDetail`,
@@ -560,22 +562,24 @@
               <el-button
                 type="text"
                 style="padding-left: 10px"
-                v-permission="'studentManage/studentUpdate'"
+                v-if="$helpers.permission('studentManage/studentUpdate')"
                 @click="resetStudent(scope.row)"
                 >修改</el-button
               >
               <!-- api-auth/user/updatePassword2 -->
               <el-button
-                v-permission="'api-auth/user/updatePassword2'"
+                v-if="$helpers.permission('api-auth/user/updatePassword2')"
                 @click="resetPassWrod(scope.row)"
                 type="text"
                 >修改密码</el-button
               >
               <el-button
-                v-if="scope.row.isSignedContract"
+                v-if="
+                  scope.row.isSignedContract &&
+                  $helpers.permission('sysUserContracts/getLatest')
+                "
                 type="text"
                 @click="lookContracts(scope.row)"
-                v-permission="'sysUserContracts/getLatest'"
                 >下载协议</el-button
               >
             </template>
@@ -702,7 +706,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-          <el-form-item prop="school" label="所属学校">
+        <el-form-item prop="school" label="所属学校">
           <el-select
             v-model.trim="studentForm.school"
             filterable
@@ -735,7 +739,6 @@
           </el-select>
         </el-form-item>
         <el-form-item label="学员班级" prop="currentClass">
-
           <el-select
             placeholder="班级"
             filterable
@@ -783,7 +786,6 @@
             <el-option label="38班" value="38班"></el-option>
             <el-option label="39班" value="39班"></el-option>
             <el-option label="40班" value="40班"></el-option>
-
           </el-select>
           <!-- <el-input
             v-model.trim="maskForm.course"
@@ -791,7 +793,6 @@
           ></el-input> -->
         </el-form-item>
 
-
         <el-form-item label="指导老师" prop="teacherId">
           <el-select
             class="multiple"

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است