Tang 1 年之前
父節點
當前提交
82b82a0100
共有 29 個文件被更改,包括 450 次插入344 次删除
  1. 二進制
      src/assets/wechat.png
  2. 20 2
      src/axios.js
  3. 3 2
      src/common/tools.js
  4. 9 7
      src/components/footer1/index.vue
  5. 30 27
      src/components/footer2/index.vue
  6. 5 5
      src/components/header1/index.vue
  7. 4 4
      src/components/header2/index.vue
  8. 1 0
      src/components/search.vue
  9. 37 38
      src/components/toolbar/index.vue
  10. 8 18
      src/pages/home1/index.vue
  11. 6 6
      src/pages/home2/index.vue
  12. 1 1
      src/pages/login/index.vue
  13. 16 9
      src/pages/person-center/handle-order/index.vue
  14. 26 16
      src/pages/person-center/handle-order/invoice.vue
  15. 9 0
      src/pages/person-center/handle-order/order/index.vue
  16. 2 1
      src/pages/person-center/handle-order/order/step-1/goodsCheckBox.vue
  17. 134 125
      src/pages/person-center/handle-order/order/step-1/index.vue
  18. 3 0
      src/pages/person-center/handle-order/order/step-1/studentPage.vue
  19. 4 2
      src/pages/person-center/handle-order/order/step-2/index.vue
  20. 7 8
      src/pages/person-center/handle-order/order/step-2/publicTransfer.vue
  21. 22 13
      src/pages/person-center/handle-order/orderDetail.vue
  22. 40 19
      src/pages/person-center/handle-order/refundFunc.vue
  23. 10 1
      src/pages/person-center/handle-rollCall/importStudent.vue
  24. 10 8
      src/pages/person-center/index.vue
  25. 2 1
      src/pages/person-center/my-info/index.vue
  26. 1 1
      src/pages/person-center/my-invoice/add/index.vue
  27. 1 1
      src/pages/person-center/my-invoice/index/index.vue
  28. 2 1
      src/pages/person-center/my-order/index.vue
  29. 37 28
      src/store/index.js

二進制
src/assets/wechat.png


+ 20 - 2
src/axios.js

@@ -2,7 +2,9 @@ import axios from 'axios'
 import store from './store'
 import { Notification, Message } from 'element-ui'
 export const BASE_URL = process.env.BASE_URL    //测试-外网
-// export const BASE_URL = "http://192.168.1.24:5055"    //测试-外网
+// export const BASE_URL = "https://api.xyyxt.net"    //测试-外网
+export const BASE_IMG_URL = process.env.BASE_IMG_URL
+// export const BASE_IMG_URL = "https://file.xyyxt.net/"
 export const tenantId = process.env.TENANT_ID
 import tools from './common/tools'
 import router from './router'
@@ -10,11 +12,12 @@ import router from './router'
 // 创建 axios 实例
 const request = axios.create({
   baseURL: BASE_URL,
-  timeout: 10000 // 请求超时时间
+  timeout: 30000 // 请求超时时间
 })
 
 // 错误处理函数
 const err = (error) => {
+  let { message } = error;
   if (axios.isCancel(error)) {
     console.log('Request canceled', error.message);
   } else {
@@ -28,6 +31,21 @@ const err = (error) => {
       if (error.response.status === 401) {
 
       }
+    }else if (message == "Network Error") {
+      message = "后端接口连接异常";
+      Message({
+        message: message,
+        type: 'error',
+        duration: 5 * 1000
+      })
+    }
+    else if (message.includes("timeout")) {
+      message = "系统接口请求超时";
+      Message({
+        message: message,
+        type: 'error',
+        duration: 5 * 1000
+      })
     }
     return Promise.reject(error)
   }

+ 3 - 2
src/common/tools.js

@@ -1,5 +1,6 @@
 import store from '@/store/index.js'
 import router from '@/router/index.js'
+import {BASE_IMG_URL} from '@/axios.js'
 
 import { JSEncrypt } from "jsencrypt";
 
@@ -21,7 +22,7 @@ export default {
 		} else if (url.indexOf("http") != -1 || url.indexOf("https") != -1 || url.indexOf("wxfile") != -1) {
 
 		} else {
-			url = process.env.BASE_IMG_URL + url
+			url = BASE_IMG_URL + url
 		}
 		if (scale) {
 			url = url + "?x-oss-process=image/resize,w_" + width
@@ -35,7 +36,7 @@ export default {
 			this.$message.warning("地址获取错误,请联系开发人员处理")
 			return
 		}
-		var baseUrl = process.env.BASE_IMG_URL + '/'
+		var baseUrl = BASE_IMG_URL + '/'
 		let url =
 			baseUrl + msg;
 		let link = document.createElement("a");

+ 9 - 7
src/components/footer1/index.vue

@@ -15,14 +15,14 @@
       </div>
 
       <div class="footer__body">
-        <p v-for="(item, index) in footer" :key="index">{{ item.name }}</p>
+        <p v-for="(item, index) in footer.tableData" :key="index">{{ item.name }}</p>
       </div>
 
       <div class="footer__footer">
-        <p v-html="footerRecord.footerRecordNo"></p>
-        <p v-html="footerRecord.footerTip"></p>
-        <p v-if="footerRecord.tips1">{{ footerRecord.tips1 }}</p>
-        <p v-if="footerRecord.tips2">{{ footerRecord.tips2 }}</p>
+        <a style="color:#e1e1e1;" target="_blank" :href="footer.miit">{{footer.icp}}</a>
+        <p v-if="footer.technologyStatus == 1">技术支持:{{ footer.technology }}</p>
+        <p v-if="footer.copyrightStatus == 1">版权所有:{{ footer.copyright }}</p>
+        <div v-html="footer.otherHtml"></div>
       </div>
     </div>
   </div>
@@ -38,7 +38,7 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(["footer", "links","footerRecord"]),
+    ...mapGetters(["footer", "links"]),
     showList: function() {
       return function(list) {
         let showList = [];
@@ -110,7 +110,9 @@ export default {
     }
 
     a {
-      color: #999999;
+      width: 100%;
+      display: inline-block;
+      text-align: center;
     }
   }
 }

+ 30 - 27
src/components/footer2/index.vue

@@ -1,48 +1,48 @@
 <template>
   <div id="footer_main">
-    <div class="width_1200 headers" v-if="footerRecord.footerHeightStatus != 0">
+    <div class="width_1200 headers">
       <div class="lf">
-        <h2>为什么选择{{ header.companyName }}?</h2>
+        <h2 v-if="footer.sloganStatus == 1">{{ footer.slogan }}</h2>
         <div class="botm">
-          <div class="li" v-if="header.rensha">
+          <div class="li" v-if="footer.sub1Status == 1">
             <img src="@/assets/new1/rspz.png" alt="" />
             <div class="r_li">
-              <p>人社批准</p>
-              <p>{{ header.rensha }}</p>
+              <p>{{ footer.sub1Title }}</p>
+              <p>{{ footer.sub1Description }}</p>
             </div>
           </div>
-          <div class="li" v-if="header.focus">
+          <div class="li" v-if="footer.sub2Status == 1">
             <img src="@/assets/new1/tenzz.png" alt="" />
             <div class="r_li">
-              <p>十年专注</p>
-              <p>{{ header.focus }}</p>
+              <p>{{ footer.sub2Title }}</p>
+              <p>{{ footer.sub2Description }}</p>
             </div>
           </div>
-          <div class="li" v-if="header.strength">
+          <div class="li" v-if="footer.sub3Status == 1">
             <img src="@/assets/new1/jxsl.png" alt="" />
             <div class="r_li">
-              <p>教学实力</p>
-              <p>{{ header.strength }}</p>
+              <p>{{ footer.sub3Title }}</p>
+              <p>{{ footer.sub3Description }}</p>
             </div>
           </div>
         </div>
       </div>
-      <div class="rg" v-if="mobile.smallQrCodeShow">
-        <div v-if="mobile.h5Image">
+      <div class="rg">
+        <div v-if="consultPc.h5Status == 1 && consultPc.h5Sync.includes(1)">
           <p>扫码移动端</p>
-          <img :src="$tools.splitImgHost(mobile.h5Image)" alt="" />
+          <img :src="$tools.splitImgHost(consultPc.h5Img)" alt="" />
         </div>
-        <div v-if="mobile.mobileImage">
+        <div v-if="consultPc.appletStatus == 1 && consultPc.appletSync.includes(1)">
           <p>扫码小程序</p>
-          <img :src="$tools.splitImgHost(mobile.mobileImage)" alt="" />
+          <img :src="$tools.splitImgHost(consultPc.appletImg)" alt="" />
         </div>
-        <div v-if="mobile.gzhImage">
+        <div v-if="consultPc.accountsStatus == 1 && consultPc.accountsSync.includes(1)">
           <p>关注公众号</p>
-          <img :src="$tools.splitImgHost(mobile.gzhImage)" alt="" />
+          <img :src="$tools.splitImgHost(consultPc.accountsImg)" alt="" />
         </div>
       </div>
     </div>
-    <div class="fgx" v-if="footerRecord.footerHeightStatus != 0"></div>
+    <div class="fgx"></div>
     <div class="width_1200 yq" v-if="showList(links).length > 0">
       <div class="lf">友情链接:</div>
       <div class="rg">
@@ -63,11 +63,11 @@
     ></div>
     <div class="width_1200 ftend">
       <div class="f1">
-        <p v-for="(item, index) in footer" :key="index">{{ item.name }}</p>
-        <p v-html="footerRecord.footerRecordNo"></p>
-        <p v-html="sty(footerRecord.footerTip)"></p>
-        <p v-if="footerRecord.tips1">{{ footerRecord.tips1 }}</p>
-        <p v-if="footerRecord.tips2">{{ footerRecord.tips2 }}</p>
+        <p v-for="(item, index) in footer.tableData" :key="index">{{ item.name }}</p>
+        <a style="color:#e1e1e1;" target="_blank" :href="footer.miit">{{footer.icp}}</a>
+        <p v-if="footer.technologyStatus == 1">技术支持:{{ footer.technology }}</p>
+        <p v-if="footer.copyrightStatus == 1">版权所有:{{ footer.copyright }}</p>
+        <div v-html="footer.otherHtml"></div>
       </div>
     </div>
   </div>
@@ -77,11 +77,10 @@
 import { mapGetters } from "vuex";
 export default {
   data() {
-    return {
-    };
+    return {};
   },
   computed: {
-    ...mapGetters(["header", "footer", "links", "footerRecord", "mobile"]),
+    ...mapGetters(["footer", "links", "consultPc"]),
     showList: function() {
       return function(list) {
         let showList = [];
@@ -202,6 +201,10 @@ export default {
         display: inline-block;
         margin: 0px 24px 18px 0px;
       }
+      & > a {
+        display: inline-block;
+        margin: 0px 24px 18px 0px;
+      }
     }
   }
 }

+ 5 - 5
src/components/header1/index.vue

@@ -1,10 +1,10 @@
 <template>
   <header class="header">
     <div class="container clearfix dis_play">
-      <div class="logo logo--no" v-if="header.companyLogo">
+      <div class="logo logo--no" v-if="header.routinelogo">
         <img
           style="cursor: pointer; max-width: 100%; max-height: 100%"
-          :src="$tools.splitImgHost(header.companyLogo)"
+          :src="$tools.splitImgHost(header.routinelogo)"
           alt=""
           @click="go('/')"
         />
@@ -12,7 +12,7 @@
       <h1 class="logo" v-else @click="go('/')"></h1>
       <nav class="nav">
         <ul class="list">
-          <li v-for="(item, index) in showNav(header.Nav)" :key="index">
+          <li v-for="(item, index) in showNav(nav)" :key="index">
             <a v-if="item.name == '首页'" @click="go('/index')">首页</a>
             <a
               v-if="item.name == '关于我们'"
@@ -168,7 +168,7 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(["header", "userInfo", "msgCount"]),
+    ...mapGetters(["header", "nav", "userInfo", "msgCount"]),
     showNav: function() {
       return function(list) {
         var newList = [];
@@ -587,7 +587,7 @@ export default {
           });
         }
       }
-      this.searchKey = ''
+      this.searchKey = "";
     },
 
     mouseover() {

+ 4 - 4
src/components/header2/index.vue

@@ -11,7 +11,7 @@
         <div class="right_end">
           <ul class="nav_ul">
             <li
-              v-for="(item, index) in showNav(header.Nav)"
+              v-for="(item, index) in showNav(nav)"
               :key="index"
               @click="go(item.url)"
               :class="item.url == $route.path ? 'active' : ''"
@@ -132,7 +132,7 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(["header", "userInfo", "msgCount"]),
+    ...mapGetters(["header","nav", "userInfo", "msgCount"]),
 
     showNav: function() {
       return function(list) {
@@ -203,9 +203,9 @@ export default {
     beauf_imgUrl: function() {
       return function(collapse, nav_beauf) {
         if (!collapse && nav_beauf) {
-          return this.header.undertone || "";
+          return this.header.whitelogo || "";
         } else {
-          return this.header.companyLogo || "";
+          return this.header.routinelogo || "";
         }
       };
     },

+ 1 - 0
src/components/search.vue

@@ -6,6 +6,7 @@
       :model="formData"
       ref="ruleForm"
       class="demo-form-inline"
+      @submit.native.prevent
     >
       <el-form-item
         v-for="(item, index) in formSet"

+ 37 - 38
src/components/toolbar/index.vue

@@ -1,11 +1,12 @@
 <template>
-  <div class="toolBar">
-    <div class="item phs" v-if="mobile.smallQrCodeShow">
-      <div class="modu" :style="computedNums(mobile)">
-        <div v-if="mobile.h5Image">
+  <div class="toolBar" v-if="consultPc.consultationStatus == 1">
+    <div class="item phs" v-if="consultPc.h5Status == 1 || consultPc.appletStatus == 1 || consultPc.accountsStatus == 1 ">
+      
+      <div class="modu" :style="computedNums(consultPc)">
+        <div v-if="consultPc.h5Status == 1">
           <img
             style="width: 90px; height: 90px"
-            :src="$tools.splitImgHost(mobile.h5Image)"
+            :src="$tools.splitImgHost(consultPc.h5Img)"
             alt=""
           />
           <div
@@ -15,10 +16,10 @@
             扫码移动端
           </div>
         </div>
-        <div v-if="mobile.mobileImage">
+        <div v-if="consultPc.appletStatus == 1">
           <img
             style="width: 90px; height: 90px"
-            :src="$tools.splitImgHost(mobile.mobileImage)"
+            :src="$tools.splitImgHost(consultPc.appletImg)"
             alt=""
           />
           <div
@@ -28,10 +29,10 @@
             扫码小程序
           </div>
         </div>
-        <div v-if="mobile.gzhImage">
+        <div v-if="consultPc.accountsStatus == 1">
           <img
             style="width: 90px; height: 90px"
-            :src="$tools.splitImgHost(mobile.gzhImage)"
+            :src="$tools.splitImgHost(consultPc.accountsImg)"
             alt=""
           />
           <div
@@ -45,36 +46,43 @@
       <img src="@/assets/new1/xcx.png" class="img" alt="" />
       <div class="text">移动端</div>
     </div>
-    <div class="item" v-if="userInfo" @click="go('/cart')">
-      <el-badge :value="cartCount || ''">
-        <i class="img el-icon-shopping-cart-2"></i>
-        <div class="text">购物车</div>
-      </el-badge>
-    </div>
-    <div class="item">
+    <div class="item" v-if="consultPc.serviceHotlineStatus == 1">
       <el-popover placement="left" width="180" trigger="hover">
         <div>
           <h2 style="font-size: 14px; color: #333;font-weight: 400;">
             服务时间
           </h2>
           <p style="font-size: 12px;color: #999;margin-top: 4px">
-            {{ header.serviceTel.time }}
+            {{ consultPc.servicingTime }}
           </p>
-          <div
-            v-for="(item, index) in getTel(header.serviceTel.tel)"
-            :key="index"
-            style="font-size: 14px;margin-top: 6px"
-          >
-            {{ item }}
-          </div>
-          <!-- {{header.serviceTel}} -->
+          <pre style="margin:6px 0px;font-weight:bold">{{consultPc.serviceNumber}}</pre>
         </div>
         <div slot="reference">
           <img src="@/assets/contact.png" class="img" alt="" />
-          <div class="text">咨询热线</div>
+          <div class="text">服务热线</div>
+        </div>
+      </el-popover>
+    </div>
+    <div class="item" v-if="consultPc.serviceWechatStatus == 1">
+      <el-popover placement="left" width="170" trigger="hover">
+        <div>
+          <img style="width: 140px; height: 140px" :src="$tools.splitImgHost(consultPc.serviceWechatImg)" alt="">
+          <p style="text-align:center;margin-top:6px;">
+            微信号:{{ consultPc.serviceWechatNumber }}
+          </p>
+        </div>
+        <div slot="reference">
+          <img src="@/assets/wechat.png" class="img" alt="" />
+          <div class="text">客服微信</div>
         </div>
       </el-popover>
     </div>
+    <div class="item" v-if="userInfo && consultPc.shoppingCarStatus == 1" @click="go('/cart')">
+      <el-badge :value="cartCount || ''">
+        <i class="img el-icon-shopping-cart-2"></i>
+        <div class="text">购物车</div>
+      </el-badge>
+    </div>
     <div v-if="false" class="item">
       <el-popover placement="left" width="180" trigger="hover">
         <div style="height: 100px; text-align: center">
@@ -125,19 +133,10 @@ import { mapGetters, mapMutations } from "vuex";
 export default {
   name: "ToolBar",
   computed: {
-    ...mapGetters(["userInfo", "cartCount", "header", "mobile"]),
-    getTel: function() {
-      return function(tel) {
-        if (tel) {
-          return tel.split(";");
-        } else {
-          return [];
-        }
-      };
-    },
+    ...mapGetters(["userInfo", "cartCount", "consultPc"]),
     computedNums: function() {
       return function(obj) {
-        let ary = ["h5Image", "mobileImage", "gzhImage"];
+        let ary = ["h5Status", "appletStatus", "accountsStatus"];
         let num = 0;
         for (let i = 0; i < ary.length; i++) {
           if (obj[ary[i]]) {
@@ -146,7 +145,7 @@ export default {
         }
         let left = 126 + 100 * (num - 1);
         return {
-          left: `-${left}px`
+          left: `-${left}px!important`
         };
       };
     }

+ 8 - 18
src/pages/home1/index.vue

@@ -63,8 +63,8 @@
         <div class="container clearfix topBoxy">
           <a class="logo">
             <img
-              v-if="header.companyLogo"
-              :src="$tools.splitImgHost(header.companyLogo)"
+              v-if="header.routinelogo"
+              :src="$tools.splitImgHost(header.routinelogo)"
               alt=""
             />
             <h1 v-else></h1>
@@ -88,16 +88,6 @@
               >搜索</el-button
             >
           </div>
-          <div
-            class="contact"
-            v-show="false"
-            v-if="header.serviceTel.status == 1"
-          >
-            <div class="contact__phone">{{ header.serviceTel.tel }}</div>
-            <div class="contact__time">
-              {{ header.serviceTel.time }}
-            </div>
-          </div>
         </div>
       </div>
     </header>
@@ -105,7 +95,7 @@
     <section class="section">
       <div class="container">
         <div class="tabs">
-          <template v-for="(item, index) in showNav(header.Nav)">
+          <template v-for="(item, index) in showNav(nav)">
             <a v-if="item.name === '首页'" :key="index" class="tab active"
               >首页</a
             >
@@ -311,7 +301,7 @@
                     <a class="text" @click="loginType = 2">手机验证码登录</a>
                     <a class="text" @click="go('/login?state=2')">注册</a>
                   </div>
-                  <div class="dis_flex" v-if="mobile.smallQrCodeShow && false">
+                  <div class="dis_flex" v-if="false">
                     <div class="dis_flex_wxloginImg">
                       <img src="@/assets/wx.png" alt="" @click="wxLoginFunc" />
                     </div>
@@ -365,7 +355,7 @@
                     <a class="text" @click="loginType = 1">账号密码登录</a>
                     <a class="text" @click="go('/login?state=2')">注册</a>
                   </div>
-                  <div class="dis_flex" v-if="mobile.smallQrCodeShow && false">
+                  <div class="dis_flex" v-if="false">
                     <div class="dis_flex_wxloginImg">
                       <img src="@/assets/wx.png" alt="" @click="wxLoginFunc" />
                     </div>
@@ -440,7 +430,7 @@
       </div>
     </section>
 
-    <section class="course">
+    <section class="course" v-if="$store.state.other.course == 1 &&courseName.length > 0">
       <div class="container">
         <div class="course__header">
           <div class="lefts">
@@ -525,7 +515,7 @@
       </div>
     </section>
 
-    <section class="bank">
+    <section class="bank" v-if="$store.state.other.bank == 1 &&bankName.length > 0">
       <div class="container">
         <div class="bank__header">
           <div class="lefts">
@@ -697,7 +687,7 @@ export default {
     RebuildModal
   },
   computed: {
-    ...mapGetters(["userInfo", "token", "header", "msgCount", "mobile"]),
+    ...mapGetters(["userInfo", "token", "header","nav", "msgCount", "mobile"]),
 
     showNav: function() {
       return function(list) {

+ 6 - 6
src/pages/home2/index.vue

@@ -2,7 +2,7 @@
   <div id="home_new">
     <Header id="header" :nav_beauf="nav_beauf" :collapse="false"></Header>
     <top></top>
-    <ul class="content_main ul_first">
+    <ul class="content_main ul_first" v-if="$store.state.other.tag == 1">
       <li class="main_li" v-for="(item, index) in workMsg" :key="index">
         <img :src="item.imgUrl" alt="" />
         <div class="r_r">
@@ -11,7 +11,7 @@
         </div>
       </li>
     </ul>
-    <div class="content_main div_second">
+    <div class="content_main div_second" v-if="$store.state.other.entrance == 1">
       <div class="first">
         <div>
           <img src="@/assets/new1/kcst.png" alt="" />
@@ -59,7 +59,7 @@
         <img src="@/assets/new1/zlps.png" alt="" />
       </div>
     </div>
-    <div class="content_main tj_main">
+    <div class="content_main tj_main" v-if="$store.state.other.course == 1 && courseName.length > 0">
       <div class="header_main">
         <div class="hbox">
           <img src="@/assets/new1/tjkc.png" alt="" />
@@ -90,7 +90,7 @@
         ></GoodsItemNew>
       </ul>
     </div>
-    <div class="content_main tj_main">
+    <div class="content_main tj_main" v-if="$store.state.other.bank == 1 && bankName.length > 0">
       <div class="header_main">
         <div class="hbox">
           <img src="@/assets/new1/tjbank.png" alt="" />
@@ -123,7 +123,7 @@
     </div>
     <div
       class="content_main tj_main"
-      v-if="$store.state.TENANT_NANE == '867735392558919680'"
+      v-if="$store.state.other.team == 1"
     >
       <div class="header_main">
         <div class="hbox">
@@ -153,7 +153,7 @@
     <div
       class="content_main tj_main"
       style="margin-bottom: 20px!important;"
-      v-if="$store.state.TENANT_NANE == '867735392558919680'"
+      v-if="$store.state.other.certificate == 1"
     >
       <div class="header_main">
         <div class="hbox">

+ 1 - 1
src/pages/login/index.vue

@@ -195,7 +195,7 @@
                   </el-form>
                 </div>
 
-                <div class="dis_flex" v-if="mobile.smallQrCodeShow && false">
+                <div class="dis_flex" v-if="false">
                   <div class="dis_flex_wxloginImg">
                     <img src="@/assets/wx.png" alt="" @click="wxLoginFunc" />
                   </div>

+ 16 - 9
src/pages/person-center/handle-order/index.vue

@@ -92,26 +92,28 @@
               scope.row.projectName + " - " + scope.row.businessName
             }}
           </p>
-          <p>订购人数:{{ scope.row.userNum || 0 }}位</p>
-          <p>订购数量:{{ scope.row.goodsNum || 0 }}个</p>
+          <!-- <p>订购人数:{{ scope.row.userNum || 0 }}位</p>
+          <p>订购数量:{{ scope.row.goodsNum || 0 }}个</p> -->
         </template>
       </el-table-column>
       <el-table-column label="订单金额" width="200" header-align="center">
         <template slot-scope="scope">
           <p>下单金额:¥{{ scope.row.orderPrice | formatPrice }}</p>
           <p>退款金额:¥{{ scope.row.goodsRefund | formatPrice }}</p>
-          <p>实际金额:¥{{ scope.row.payPrice | formatPrice }}</p>
+          <p>实际金额:¥{{ scope.row.realPrice | formatPrice }}</p>
         </template>
       </el-table-column>
       <el-table-column align="center" label="发票状态" width="120px">
         <template slot-scope="scope">
+          <span v-if="!scope.row.invoiceStatus">未开票</span>
           <span v-if="scope.row.invoiceStatus == 1">待审核</span>
           <span v-if="scope.row.invoiceStatus == 2">已开票</span>
           <span v-if="scope.row.invoiceStatus == 3">不通过</span>
-          <span v-if="scope.row.invoiceUrl"
+          <span v-if="scope.row.invoiceStatus == 4">已失效</span>
+          <span v-if="scope.row.invoiceUrl && scope.row.invoiceStatus == 2"
             >({{ scope.row.invoiceUrl.split(",").length }}张)
           </span>
-          <div v-if="scope.row.invoiceUrl">
+          <div v-if="scope.row.invoiceUrl && scope.row.invoiceStatus == 2">
             <el-button
               type="text"
               @click="downinvoice(scope.row.invoiceUrl.split(','))"
@@ -168,8 +170,8 @@
             @click="refundFunc(scope.row)"
             :disabled="
               !(
-                (scope.row.payStatus == 1 || scope.row.payPrice == -2) &&
-                scope.row.goodsRefund < scope.row.payPrice
+                (scope.row.payStatus == 1 && scope.row.refundStatus != 0) &&
+                scope.row.realPrice != 0
               )
             "
             >退款</el-button
@@ -181,9 +183,10 @@
             :disabled="
               !(
                 scope.row.payStatus == 1 &&
-                scope.row.invoiceStatus != 2 &&
                 scope.row.invoiceStatus != 1 &&
-                scope.row.payPrice > 0
+                scope.row.invoiceStatus != 2 &&
+                scope.row.refundStatus != 0 &&
+                scope.row.realPrice > 0
               )
             "
             >发票</el-button
@@ -316,6 +319,10 @@ export default {
             {
               label: "不通过",
               value: 3
+            },
+            {
+              label: "已失效",
+              value: 4
             }
           ]
         },

+ 26 - 16
src/pages/person-center/handle-order/invoice.vue

@@ -64,7 +64,11 @@
             ></el-input>
           </el-form-item>
           <el-form-item label="收票方式" prop="invoiceMode">
-            <el-checkbox-group v-model="formData.invoiceMode" :max="2" @change="changeInvoiceMode">
+            <el-checkbox-group
+              v-model="formData.invoiceMode"
+              :max="2"
+              @change="changeInvoiceMode"
+            >
               <el-checkbox :label="1" disabled>在线下载</el-checkbox>
               <el-checkbox :label="2">邮件接收</el-checkbox>
               <el-checkbox :label="3">纸质快递</el-checkbox>
@@ -105,7 +109,7 @@
         <el-main style="padding:0px 14px;">
           <h2>
             <span>订单详情</span>
-            <el-button type="text">查看</el-button>
+            <el-button type="text" @click="orderDetail">查看</el-button>
           </h2>
           <ul class="ul_">
             <li>
@@ -121,17 +125,17 @@
                 >{{ orderInfo.projectName }}-{{ orderInfo.businessName }}</span
               >
             </li>
-            <li>
+            <!-- <li>
               订购人数:<span>{{ orderInfo.userNum || 0 }}位</span
               >订购数量:<span>{{ orderInfo.goodsNum || 0 }}个</span>
-            </li>
+            </li> -->
             <li>
               下单金额:<span>¥{{ orderInfo.orderPrice | formatPrice }}</span
               >退款金额:<span
                 >¥{{ orderInfo.goodsRefund | formatPrice }}</span
               >
               实际金额:<span style="color:red;"
-                >¥{{ orderInfo.payPrice | formatPrice }}</span
+                >¥{{ orderInfo.realPrice | formatPrice }}</span
               >
             </li>
           </ul>
@@ -139,10 +143,8 @@
         <p style="padding-left:20px;margin-top:20px;">
           本次申请开票金额:<span
             style="color:red;font-size:16px;"
-            v-if="orderInfo.payPrice - orderInfo.goodsRefund > 0"
-            >¥{{
-              (orderInfo.payPrice - orderInfo.goodsRefund) | formatPrice
-            }}</span
+            v-if="orderInfo.realPrice > 0"
+            >¥{{ orderInfo.realPrice | formatPrice }}</span
           ><span v-else style="color:red;font-size:16px;">¥0.00</span>
         </p>
       </div>
@@ -150,11 +152,14 @@
         <el-button @click="submitForm" type="primary">提交</el-button>
       </div></el-dialog
     >
+    <order-detail ref="orderDetail" />
   </div>
 </template>
 
 <script>
+import orderDetail from "./orderDetail.vue";
 export default {
+  components: { orderDetail },
   data() {
     return {
       visible: false,
@@ -201,6 +206,9 @@ export default {
     };
   },
   methods: {
+    orderDetail() {
+      this.$refs.orderDetail.openBoxs(this.handleOrderSn);
+    },
     openBoxs(sn) {
       this.visible = true;
       this.orderInfo = {};
@@ -223,11 +231,11 @@ export default {
         this.$refs.formData.clearValidate();
       });
     },
-    changeInvoiceMode(){
-        this.formData.email = ""
-        this.formData.consignee = ""
-        this.formData.collectionTelephone = ""
-        this.formData.shippingAddress = ""
+    changeInvoiceMode() {
+      this.formData.email = "";
+      this.formData.consignee = "";
+      this.formData.collectionTelephone = "";
+      this.formData.shippingAddress = "";
     },
     getOrderDetail() {
       this.$request
@@ -254,8 +262,10 @@ export default {
               obj.invoiceMode = obj.invoiceMode.join();
               obj.orderSn = this.handleOrderSn;
               obj.amount =
-                this.orderInfo.payPrice - this.orderInfo.goodsRefund >= 0
-                  ? parseFloat(this.orderInfo.payPrice - this.orderInfo.goodsRefund)
+                this.orderInfo.realPrice >= 0
+                  ? parseFloat(
+                      this.orderInfo.realPrice
+                    )
                   : 0;
               this.$request
                 .orderinvoice(obj)

+ 9 - 0
src/pages/person-center/handle-order/order/index.vue

@@ -99,6 +99,15 @@ export default {
       this.visible = true;
       this.active = 0;
       this.title = "新增";
+      this.apiData = {
+        goodsType: "",
+        educationTypeId: "",
+        projectId: "",
+        businessId: "",
+        inputFrom: 1,
+        payType: 1,
+        userGoodsList: []
+      };
       if (index == 2) {
         this.title = "支付";
         this.active = index;

+ 2 - 1
src/pages/person-center/handle-order/order/step-1/goodsCheckBox.vue

@@ -119,7 +119,8 @@ export default {
         businessId: apiData.businessId,
         subjectId: "",
         showStatus: 1,
-        goodsStatus: 1
+        goodsStatus: 1,
+        withNotSpec:1
       };
       this.index = index;
       if (row && row.length > 0) {

+ 134 - 125
src/pages/person-center/handle-order/order/step-1/index.vue

@@ -10,49 +10,51 @@
       <span
         >人数:<i>{{ apiData.userGoodsList.length || 0 }}位</i></span
       >
-      <span
+      <!-- <span
         >数量:<i>{{ getTotal(apiData.userGoodsList) }}个</i></span
-      >
+      > -->
       <span
         >总金额:<i
-          ><span style="color:red;">¥{{ getTotalPrice(apiData.userGoodsList) | formatPrice }}</span> </i
-        ></span
+          ><span style="color:red;"
+            >¥{{ getTotalPrice(apiData.userGoodsList) | formatPrice }}</span
+          >
+        </i></span
       >
     </header>
-    <header class="header_t">
-      <div>
-        <el-input
-          v-model="searchData.searchKey"
-          :size="size"
-          placeholder="输入姓名/身份证号"
-          style="margin-right:10px;"
-        ></el-input>
-        <el-button :size="size" @click="searchData.searchKey = ''"
-          >重置</el-button
-        >
-      </div>
-      <div>
-        <el-button :size="size" type="primary" @click="studentPage(-1)"
-          >新增学员</el-button
-        >
-        <el-button :size="size" type="primary" @click="importStudentFunc"
-          >导入学员</el-button
-        >
-        <el-button :size="size" type="primary" @click="goodsCheckBox(-1)"
-          >匹配商品</el-button
-        >
-        <el-button :size="size" type="primary" @click="del(-1)"
-          >批量删除</el-button
-        >
-        <el-button :size="size" type="primary" @click="backFunc"
-          >上一步</el-button
-        >
-        <el-button :size="size" type="warning" @click="submit"
-          >提交支付</el-button
-        >
-      </div>
-    </header>
-    <el-main>
+    <el-main v-loading="loading">
+      <header class="header_t" style="margin-bottom:14px;">
+        <div>
+          <el-input
+            v-model="searchData.searchKey"
+            :size="size"
+            placeholder="输入姓名/身份证号"
+            style="margin-right:10px;"
+          ></el-input>
+          <el-button :size="size" @click="searchData.searchKey = ''"
+            >重置</el-button
+          >
+        </div>
+        <div>
+          <el-button :size="size" type="primary" @click="studentPage(-1)"
+            >新增学员</el-button
+          >
+          <el-button :size="size" type="primary" @click="importStudentFunc"
+            >导入学员</el-button
+          >
+          <el-button :size="size" type="primary" @click="goodsCheckBox(-1)"
+            >匹配商品</el-button
+          >
+          <el-button :size="size" type="primary" @click="del(-1)"
+            >批量删除</el-button
+          >
+          <el-button :size="size" type="primary" @click="backFunc"
+            >上一步</el-button
+          >
+          <el-button :size="size" type="warning" @click="submit"
+            >提交支付</el-button
+          >
+        </div>
+      </header>
       <el-form :model="apiData" :rules="rules" ref="ruleForm">
         <el-table
           max-height="520px"
@@ -92,7 +94,10 @@
                 :prop="'userGoodsList.' + scope.$index + '.' + item.prop"
                 :rules="rules[item.prop]"
               >
-                <el-input v-model="scope.row[item.prop]"></el-input>
+                <el-input
+                  v-model="scope.row[item.prop]"
+                  @change="changeInput(item.prop)"
+                ></el-input>
               </el-form-item>
 
               <el-select
@@ -143,10 +148,10 @@
               <el-button
                 type="text"
                 :size="size"
-                @click="goodsCheckBox(scope.$index, scope.row.goodsList)"
+                @click="goodsCheckBox(scope.row.code, scope.row.goodsList)"
                 >匹配商品</el-button
               >
-              <el-button type="text" :size="size" @click="del(scope.$index)"
+              <el-button type="text" :size="size" @click="del(scope.row.code)"
                 >删除</el-button
               >
             </template>
@@ -192,7 +197,20 @@ export default {
       } else if (this.checkTel == value) {
         return callback(new Error("当前手机号码已被创建"));
       } else {
-        callback();
+        let num = 0;
+        for (let i = 0; i < this.apiData.userGoodsList.length; i++) {
+          if (num > 1) {
+            break;
+          }
+          if (this.apiData.userGoodsList[i].telphone == value) {
+            num++;
+          }
+        }
+        if (num > 1) {
+          return callback(new Error("提示:手机号码重复"));
+        } else {
+          callback();
+        }
       }
     };
     const validateIdcard = (rule, value, callback) => {
@@ -201,10 +219,24 @@ export default {
       if (!_IDRe18.test(value) && !_IDre15.test(value)) {
         return callback(new Error("请输入正确身份证号码"));
       } else {
-        callback();
+        let num = 0;
+        for (let i = 0; i < this.apiData.userGoodsList.length; i++) {
+          if (num > 1) {
+            break;
+          }
+          if (this.apiData.userGoodsList[i].idCard == value) {
+            num++;
+          }
+        }
+        if (num > 1) {
+          return callback(new Error("提示:身份证重复"));
+        } else {
+          callback();
+        }
       }
     };
     return {
+      loading: false,
       rules: {
         realname: [{ required: true, message: "请输入姓名", trigger: "blur" }],
         idCard: [
@@ -220,6 +252,9 @@ export default {
             trigger: "blur",
             validator: validateTel
           }
+        ],
+        companyName: [
+          { required: true, message: "请输入所属公司", trigger: "blur" }
         ]
       },
       size: "small",
@@ -264,8 +299,7 @@ export default {
         },
         {
           label: "金额",
-          scope: "price",
-          width: "180px"
+          scope: "price"
         }
       ]
     };
@@ -331,83 +365,7 @@ export default {
       };
     }
   },
-  mounted() {
-    const apiData = {
-      goodsType: 1,
-      educationTypeId: 107,
-      projectId: 3665,
-      businessId: 34355,
-      inputFrom: 1,
-      payType: 1,
-      userGoodsList: [
-        {
-          realname: "唐",
-          sex: "男",
-          idCard: "445224199901043000",
-          telphone: "13602712680",
-          eduLevel: "小学",
-          companyName: "中正",
-          goodsList: [
-            {
-              goodsId: 303723,
-              goodsName: "2023年一级建造师-选修1",
-              year: 2023,
-              subjectNames: "市政,必修,矿业,建筑,机电,水利水电,公路",
-              standPrice: 3433523
-            },
-            {
-              goodsId: 303724,
-              goodsName: "2023年一级建造师-选修2",
-              year: 2023,
-              subjectNames: "市政,必修,矿业,建筑,机电,水利水电,公路",
-              standPrice: 34424
-            }
-          ]
-        },
-        {
-          realname: "连",
-          sex: "男",
-          idCard: "445224199901013055",
-          telphone: "13602711111",
-          eduLevel: "初中",
-          companyName: "中正",
-          goodsList: [
-            {
-              goodsId: 303723,
-              goodsName: "2023年一级建造师-选修1",
-              year: 2023,
-              subjectNames: "市政,必修,矿业,建筑,机电,水利水电,公路",
-              standPrice: 3433523
-            }
-          ]
-        },
-        {
-          realname: "锋",
-          sex: "男",
-          idCard: "445224199901013056",
-          telphone: "13602711112",
-          eduLevel: "初中",
-          companyName: "中正",
-          goodsList: [
-            {
-              goodsId: 303723,
-              goodsName: "2023年一级建造师-选修1",
-              year: 2023,
-              subjectNames: "市政,必修,矿业,建筑,机电,水利水电,公路",
-              standPrice: 3433523
-            },
-            {
-              goodsId: 303722,
-              goodsName: "2023年一级建造师-必修",
-              year: 2023,
-              subjectNames: "市政,必修,矿业,建筑,机电,水利水电,公路",
-              standPrice: 15641651
-            }
-          ]
-        }
-      ]
-    };
-  },
+  mounted() {},
   methods: {
     submit() {
       if (this.apiData.userGoodsList.length == 0) {
@@ -430,6 +388,7 @@ export default {
             type: "warning"
           })
             .then(() => {
+              this.loading = true;
               let ary = JSON.parse(JSON.stringify(this.apiData));
               ary.userGoodsList.forEach(i => {
                 i.user = {
@@ -460,6 +419,9 @@ export default {
                   } else {
                     this.$message.error(err.msg);
                   }
+                })
+                .finally(() => {
+                  this.loading = false;
                 });
             })
             .catch(() => {});
@@ -468,6 +430,30 @@ export default {
         }
       });
     },
+    changeInput(item) {
+      if (item == "idCard") {
+        this.apiData.userGoodsList.forEach((i, k) => {
+          this.$refs["ruleForm"].validateField(
+            "userGoodsList." + k + ".idCard"
+          );
+        });
+      }
+      if (item == "telphone") {
+        this.apiData.userGoodsList.forEach((i, k) => {
+          this.$refs["ruleForm"].validateField(
+            "userGoodsList." + k + ".telphone"
+          );
+        });
+      }
+    },
+    getCode() {
+      var code = "";
+      for (var i = 1; i <= 10; i++) {
+        const num = Math.floor(Math.random() * 10);
+        code += num;
+      }
+      return code;
+    },
     //学员编辑
     studentPage(index, row) {
       this.$refs.studentPage.openBoxs(index, row);
@@ -495,9 +481,15 @@ export default {
       this.$refs.importStudent.openBoxs(true);
     },
     backStudentFunc(row) {
+      row.forEach(i => {
+        i.goodsList = [];
+        i.code = this.getCode();
+      });
       this.apiData.userGoodsList.push(...row);
     },
     backStudentData(index, row) {
+      row.goodsList = [];
+      row.code = this.getCode();
       if (index == -1) {
         this.apiData.userGoodsList.push(row);
       } else {
@@ -535,8 +527,16 @@ export default {
           type: "warning"
         })
           .then(() => {
-            this.apiData.userGoodsList.splice(index, 1);
-            this.$message.success("操作成功");
+            const findIndex = this.apiData.userGoodsList.findIndex(
+              i => i.code == index
+            );
+            if (findIndex == -1) {
+              this.$message.error("数据异常,删除失败");
+              return;
+            } else {
+              this.apiData.userGoodsList.splice(findIndex, 1);
+              this.$message.success("操作成功");
+            }
           })
           .catch(() => {});
       }
@@ -548,7 +548,16 @@ export default {
         });
         this.$refs.table.clearSelection();
       } else {
-        this.$set(this.apiData.userGoodsList[index], "goodsList", ary);
+        const findIndex = this.apiData.userGoodsList.findIndex(
+          i => i.code == index
+        );
+        if (findIndex == -1) {
+          this.$message.error("数据异常,删除失败");
+          return;
+        } else {
+          this.$set(this.apiData.userGoodsList[findIndex], "goodsList", ary);
+          this.$message.success("操作成功");
+        }
       }
       this.$message.success("操作成功");
     },

+ 3 - 0
src/pages/person-center/handle-order/order/step-1/studentPage.vue

@@ -162,6 +162,9 @@ export default {
       this.index = index;
       this.ruleForm = Object.assign({}, row);
       this.visible = true;
+      this.$nextTick(()=>{
+        this.$refs["ruleForm"].clearValidate();
+      })
     },
     close() {
       this.$refs["ruleForm"].resetFields();

+ 4 - 2
src/pages/person-center/handle-order/order/step-2/index.vue

@@ -19,9 +19,11 @@
           教育类型:<span>{{ orderInfo.educationName }}</span
           >项目类型:<span
             >{{ orderInfo.projectName }}-{{ orderInfo.businessName }}</span
-          >订购人数:<span>{{ orderInfo.userNum || 0 }}位</span>订购数量:<span
-            >{{ orderInfo.goodsNum || 0 }}个</span
           >
+          订购人数:<span>{{ orderInfo.userNum || 0 }}位</span>
+          <!-- 订购数量:<span
+            >{{ orderInfo.goodsNum || 0 }}个</span
+          > -->
         </li>
         <li>
           订购金额:<span style="color:red;"

+ 7 - 8
src/pages/person-center/handle-order/order/step-2/publicTransfer.vue

@@ -31,8 +31,8 @@
             <p>
               <span>转账备注:</span>
               {{
-                orderInfo.recCompanyAccount &&
-                  orderInfo.recCompanyAccount.slice(0, 6)
+                handleOrderSn &&
+                handleOrderSn.slice(handleOrderSn.length-6, handleOrderSn.length)
               }}(打款时请备注此信息)
             </p>
             <p>
@@ -131,7 +131,7 @@ export default {
         ],
         companyPayImg: [
           {
-            required: true,
+            required: false,
             message: "请上传转账凭证",
             trigger: ["change", "blur"]
           }
@@ -266,11 +266,10 @@ export default {
       func(
         `企业全称:${this.orderInfo.recCompanyName},开户银行:${
           this.orderInfo.recCompanyBank
-        },银行账号:${this.orderInfo.recCompanyAccount},转账备注:${this
-          .orderInfo.recCompanyAccount &&
-          this.orderInfo.recCompanyAccount.slice(
-            0,
-            6
+        },银行账号:${this.orderInfo.recCompanyAccount},转账备注:${this.handleOrderSn &&
+          this.handleOrderSn.slice(
+            this.handleOrderSn.length-6,
+            this.handleOrderSn.length
           )}(打款时请备注此信息),转账金额:¥${this.orderInfo.payPrice &&
           this.orderInfo.payPrice.toLocaleString(
             "zh-CN",

+ 22 - 13
src/pages/person-center/handle-order/orderDetail.vue

@@ -22,12 +22,14 @@
       </div>
 
       <p style="font-size:14px;color:#333;font-weight:bold;">
-        订单编号:<span style="margin-right:14px;color:#007aff;font-weight:400;">{{
-          orderInfo.handleOrderSn
-        }}</span
-        >订单状态:<span style="margin-right:14px;color:#007aff;font-weight:400;">{{
-          getPayStatus(orderInfo.payStatus)
-        }}</span>
+        订单编号:<span
+          style="margin-right:14px;color:#007aff;font-weight:400;"
+          >{{ orderInfo.handleOrderSn }}</span
+        >订单状态:<span
+          style="margin-right:14px;color:#007aff;font-weight:400;"
+          >{{ getPayStatus(orderInfo.payStatus) }}</span
+        >
+        密码说明: <strong style="font-weight:400;">第一次开通学员,密码则为身份证后六位数</strong>
       </p>
       <el-main v-loading="loading" style="padding:20px 0px;">
         <el-descriptions class="margin-top" :column="3" border>
@@ -52,12 +54,12 @@
           <el-descriptions-item label="培训项目">
             {{ orderInfo.projectName + " - " + orderInfo.businessName }}
           </el-descriptions-item>
-          <el-descriptions-item label="订购人数">
+          <!-- <el-descriptions-item label="订购人数">
             {{ orderInfo.userNum || 0 }}位
           </el-descriptions-item>
           <el-descriptions-item label="订购数量">
             {{ orderInfo.goodsNum || 0 }}个
-          </el-descriptions-item>
+          </el-descriptions-item> -->
           <el-descriptions-item label="下单金额">
             ¥{{ orderInfo.orderPrice | formatPrice }}
           </el-descriptions-item>
@@ -65,7 +67,7 @@
             ¥{{ orderInfo.goodsRefund | formatPrice }}
           </el-descriptions-item>
           <el-descriptions-item label="实际金额">
-            ¥{{ orderInfo.payPrice | formatPrice }}
+            ¥{{ orderInfo.realPrice | formatPrice }}
           </el-descriptions-item>
           <el-descriptions-item label="支付方式">
             {{ orderInfo.payType == 1 ? "微信" : "对公转账" }}
@@ -85,7 +87,7 @@
           </el-descriptions-item>
           <el-descriptions-item label="发票状态">
             {{ showInvoice(orderInfo.invoiceStatus) }}
-            <span v-if="orderInfo.invoiceUrl"
+            <span v-if="orderInfo.invoiceUrl && orderInfo.invoiceStatus == 2"
               >({{ orderInfo.invoiceUrl.split(",").length }}张)<el-button
                 type="text"
                 @click="downinvoice(orderInfo.invoiceUrl.split(','))"
@@ -127,8 +129,11 @@
           >
             <template slot-scope="scope">
               <span v-if="item.scope == 'progress'">
-                {{ scope.row.stuAllNum + scope.row.recordNum }} /
-                {{ scope.row.secAllNum + scope.row.examNum }}
+                <span v-if="scope.row.refundStatus == 1">已关闭</span>
+                <span v-else>
+                  {{ scope.row.stuAllNum + scope.row.recordNum }} /
+                  {{ scope.row.secAllNum + scope.row.examNum }}</span
+                >
               </span>
               <div v-else-if="item.scope == 'isOptions'">
                 <span v-for="(items, indexs) in item.options" :key="indexs"
@@ -220,7 +225,11 @@ export default {
         case 3:
           str = "不通过";
           break;
+        case 4:
+          str = "已失效";
+          break;
         default:
+          str = "未开票";
           break;
       }
       return str;
@@ -340,7 +349,7 @@ export default {
 /deep/.el-button {
   border-radius: 8px;
 }
-/deep/ .el-descriptions-item__label.is-bordered-label{
+/deep/ .el-descriptions-item__label.is-bordered-label {
   color: #333;
   font-weight: bold;
 }

+ 40 - 19
src/pages/person-center/handle-order/refundFunc.vue

@@ -47,7 +47,12 @@
           fontSize: '14px'
         }"
       >
-        <el-table-column align="center" type="selection" width="55" :selectable="selectable">
+        <el-table-column
+          align="center"
+          type="selection"
+          width="55"
+          :selectable="selectable"
+        >
         </el-table-column>
         <el-table-column align="center" type="index" width="50" label="序号">
         </el-table-column>
@@ -60,8 +65,11 @@
         >
           <template slot-scope="scope">
             <span v-if="item.scope == 'progress'">
-              {{ scope.row.stuAllNum + scope.row.recordNum }} /
-              {{ scope.row.secAllNum + scope.row.examNum }}
+              <span v-if="scope.row.refundStatus == 1">已关闭</span>
+              <span v-else>
+                {{ scope.row.stuAllNum + scope.row.recordNum }} /
+                {{ scope.row.secAllNum + scope.row.examNum }}</span
+              >
             </span>
 
             <div v-else-if="item.scope == 'isOptions'">
@@ -83,7 +91,7 @@
         <el-button type="text" @click="orderDetail">订单详情</el-button>
         <p>订单金额:¥{{ orderInfo.orderPrice | formatPrice }}</p>
         <p>已退金额:¥{{ orderInfo.goodsRefund | formatPrice }}</p>
-        <p>实际金额:¥{{ orderInfo.payPrice | formatPrice }}</p>
+        <p>实际金额:¥{{ orderInfo.realPrice | formatPrice }}</p>
         <p>本次关闭学员:{{ activeData.length || 0 }}个</p>
         <p style="font-weight:bold;">
           本次退款金额:<strong style="color:red;"
@@ -99,8 +107,9 @@
         ref="formData"
         label-width="100px"
         class="demo-ruleForm"
+        @submit.native.prevent
       >
-        <el-form-item label="收款信息:" prop="payee">
+        <el-form-item label="收款信息:" :prop="orderInfo.payType == 1 ? '' :'payee'">
           <el-input
             :readonly="orderInfo.payType == 1"
             v-model="formData.payee"
@@ -211,15 +220,18 @@ export default {
       this.$request.orderhandlegoodsList({ handleOrderSn: sn }).then(res => {
         this.tableData = res.rows || [];
       });
+      this.$nextTick(()=>{
+        this.$refs["formData"].clearValidate();
+      })
     },
     selectionChange(row) {
       this.activeData = row;
     },
-    selectable(row){
-      if(row.refundStatus == 0 || row.refundStatus == 1){
-        return false
-      }else{
-        return true
+    selectable(row) {
+      if (row.refundStatus == 0 || row.refundStatus == 1) {
+        return false;
+      } else {
+        return true;
       }
     },
     submitForm() {
@@ -235,16 +247,25 @@ export default {
             handleOrderSn: this.orderInfo.handleOrderSn,
             ...this.formData
           };
-          this.$request
-            .orderhandlerefundapply(obj)
-            .then(res => {
-              this.$message.success("提交成功");
-              this.visible = false;
-              this.$parent.search();
+
+          this.$confirm("确定提交申请吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          })
+            .then(() => {
+              this.$request
+                .orderhandlerefundapply(obj)
+                .then(res => {
+                  this.$message.success("提交成功");
+                  this.visible = false;
+                  this.$parent.search();
+                })
+                .catch(err => {
+                  this.$message.error(err.msg);
+                });
             })
-            .catch(err => {
-              this.$message.error(err.msg);
-            });
+            .catch(() => {});
         } else {
           console.log("error submit!!");
           return false;

+ 10 - 1
src/pages/person-center/handle-rollCall/importStudent.vue

@@ -189,6 +189,7 @@
       </div>
       <div>
         <el-table
+          row-key="id"
           max-height="520px"
           ref="table_3"
           size="small"
@@ -201,7 +202,12 @@
             fontSize: '14px'
           }"
         >
-          <el-table-column align="center" type="selection" width="55">
+          <el-table-column
+            align="center"
+            type="selection"
+            width="55"
+            reserve-selection
+          >
           </el-table-column>
           <el-table-column align="center" type="index" width="50" label="序号">
           </el-table-column>
@@ -356,6 +362,9 @@ export default {
       this.total = 0;
       this.visible3 = true;
       this.search();
+      this.$nextTick(()=>{
+        this.$refs.table_3.clearSelection()
+      })
     },
     search() {
       this.loading = true;

+ 10 - 8
src/pages/person-center/index.vue

@@ -20,23 +20,25 @@
           </div>
           <div
             class="float_right_top"
-            v-if="
-              mobile.smallQrCodeShow && (mobile.h5Image || mobile.mobileImage)
-            "
+            v-if="consultPc.h5Status == 1 || consultPc.appletStatus == 1 || consultPc.accountsStatus == 1"
           >
             <!-- <img src="@/assets/xcxqrcode.jpg" alt="" /> -->
             <div class="cla_s">
               <h2>手机刷题学习</h2>
               <h2 class="link_two">随时随地提升分数</h2>
             </div>
-            <div class="img_x" v-if="mobile.h5Image">
-              <img :src="$tools.splitImgHost(mobile.h5Image)" alt="" />
+            <div class="img_x" v-if="consultPc.h5Status == 1 && consultPc.h5Sync.includes(2)">
+              <img :src="$tools.splitImgHost(consultPc.h5Img)" alt="" />
               <p>扫码移动端</p>
             </div>
-            <div class="img_x" v-if="mobile.mobileImage">
-              <img :src="$tools.splitImgHost(mobile.mobileImage)" alt="" />
+            <div class="img_x" v-if="consultPc.appletStatus == 1 && consultPc.appletSync.includes(2)">
+              <img :src="$tools.splitImgHost(consultPc.appletImg)" alt="" />
               <p>扫码小程序</p>
             </div>
+            <div class="img_x" v-if="consultPc.accountsStatus == 1 && consultPc.accountsSync.includes(2)">
+              <img :src="$tools.splitImgHost(consultPc.accountsImg)" alt="" />
+              <p>扫码公众号</p>
+            </div>
           </div>
         </div>
 
@@ -218,7 +220,7 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(["userInfo", "businessList", "businessItem", "mobile"])
+    ...mapGetters(["userInfo", "businessList", "businessItem", "consultPc"])
   },
   mounted() {
     this.$request.coursespecialquestioncount().then(res => {

+ 2 - 1
src/pages/person-center/my-info/index.vue

@@ -3,7 +3,8 @@
     <div class="my-info__header">我的资料</div>
 
     <div class="my-info__body">
-      <el-form label-width="100px">
+      <el-form label-width="100px"
+        @submit.native.prevent>
         <el-form-item>
           <div class="avatar-wrap">
             <div class="avatar">

+ 1 - 1
src/pages/person-center/my-invoice/add/index.vue

@@ -57,7 +57,7 @@
           <el-form-item label="发票类型:" required prop="type">
             <el-radio-group v-model="form.type" @change="changeType">
               <el-radio label="1">普通发票</el-radio>
-              <el-radio label="2">增值税发票</el-radio>
+              <el-radio label="2" v-if="$store.state.other.invoice == 1">增值税发票</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="申请主体:" required prop="type">

+ 1 - 1
src/pages/person-center/my-invoice/index/index.vue

@@ -132,7 +132,7 @@
     </div>
 
     <el-dialog
-      width="800px"
+      width="1100px"
       :title="$tools.timestampToTime(invoiceDetail.applyTime, false, false)"
       :visible.sync="invoiceDetailModal"
       custom-class="invoice-modal"

+ 2 - 1
src/pages/person-center/my-order/index.vue

@@ -77,7 +77,7 @@
                   >
                     申请退款
                   </div>
-                  <div class="state" v-if="items.periodStatus > -3">
+                  <div class="state" v-if="items.periodStatus > -3 && item.orderFrom != 11">
                     {{ periodStatusName(items.periodStatus) }}
                   </div>
                 </div>
@@ -360,6 +360,7 @@ export default {
       this.$prompt("确定要退款吗?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
+        inputPattern: /^.{1,10000}$/,
         inputErrorMessage: "请输入退款原因"
       })
         .then(({ value }) => {

+ 37 - 28
src/store/index.js

@@ -22,13 +22,6 @@ export default new Vuex.Store({
     userInfo: null,
     examResult: {},
     dictList: {},//字典数据
-    header: {
-      serviceTel: {}
-    },//页头配置
-    footer: [],//页尾配置
-    footerRecord: null,//底部说明
-    links: null,//友情链接
-    mobile: null,//移动端设置
     sysTime: 0,
     businessItem: null,
     educationType: null,
@@ -37,7 +30,16 @@ export default new Vuex.Store({
     packPageStatus: true,
     isDesktop: !navigator.userAgent.match(
       /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i
-    )
+    ),
+    //--------------------------------
+    header: {},//页头配置
+    footer: {},//页尾配置
+    nav: [],//底部说明
+    links: [],//友情链接
+    consultPc: {},//移动端设置
+    consultMobile: {},//移动端设置
+    other: {},//移动端设置
+    //--------------------------------
   },
 
   getters: {
@@ -62,11 +64,14 @@ export default new Vuex.Store({
     sysTime: state => state.sysTime,
     userInfo: state => state.userInfo,
     token: state => state.token,
+
     header: state => state.header,
     footer: state => state.footer,
-    footerRecord: state => state.footerRecord,
+    nav: state => state.nav,
     links: state => state.links,
-    mobile: state => state.mobile,
+    consultPc: state => state.consultPc,
+    other: state => state.other,
+
     getApplyData: state => state.applyData,
     examResult: state => state.examResult,
     currentRouter: state => state.currentRouter,
@@ -104,26 +109,30 @@ export default new Vuex.Store({
       state.userInfo = data;
     },
     setHomeSetList(state, data) {
+      console.log(data,'data')
       data.forEach(item => {
-        if (item.configKey === 'home.header') {
-          state.header = JSON.parse(item.configValue)
-          console.log(state.header)
-        }
-        if (item.configKey === 'home.footer') {
-          state.footer = JSON.parse(item.configValue)
-          console.log(state.footer)
-        }
-        if (item.configKey === 'home.footer.record') {
-          state.footerRecord = JSON.parse(item.configValue) || {}
-        }
+        // if (item.configKey === 'home.header') {
+        //   state.header = JSON.parse(item.configValue)
+        // }
+        // if (item.configKey === 'home.footer') {
+        //   state.footer = JSON.parse(item.configValue)
+        // }
+        // if (item.configKey === 'home.footer.record') {
+        //   state.footerRecord = JSON.parse(item.configValue) || {}
+        // }
 
-        if (item.configKey === 'home.links') {
-          state.links = JSON.parse(item.configValue)
-          console.log(state.links)
-        }
-        if (item.configKey === 'home.mobile') {
-          state.mobile = JSON.parse(item.configValue)
-          console.log(state.mobile)
+        // if (item.configKey === 'home.links') {
+        //   state.links = JSON.parse(item.configValue)
+        // }
+        // if (item.configKey === 'home.mobile') {
+        //   state.mobile = JSON.parse(item.configValue)
+        // }
+        if (item.configKey === 'client.config') {
+          let configValue = JSON.parse(item.configValue) || {}
+          for(let k in configValue){
+            state[k] = configValue[k]
+            console.log(k,configValue[k],'k')
+          }
         }
       })
     },