Browse Source

Merge branch 'master' of http://47.100.3.209:3000/gongdecai/wangluohuoyun-htqd

zhongtianhaoyuan 2 years ago
parent
commit
0823551ca9

+ 1 - 1
.env.production

@@ -2,6 +2,6 @@
 ENV = 'production'
 ENV = 'production'
 
 
 # base api
 # base api
-VUE_APP_BASE_API = 'https://apitest.eliangeyun.com'
+VUE_APP_BASE_API = 'https://api.changyuntong56.com'
 # VUE_APP_BASE_API = 'http://192.168.1.114:8091'
 # VUE_APP_BASE_API = 'http://192.168.1.114:8091'
 
 

+ 1 - 1
public/index.html

@@ -4,7 +4,7 @@
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    
+    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
   <meta http-equiv="Content-Security-Policy" >
   <meta http-equiv="Content-Security-Policy" >
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= webpackConfig.name %></title>
     <title><%= webpackConfig.name %></title>

+ 32 - 0
src/api/settlementManagement.js

@@ -15,6 +15,22 @@ export function getListaccountstatement(data) {
      params: data,
      params: data,
   })
   })
 }
 }
+// 司机运费结算列表
+export function getListdriverfreight(data) {
+  return request({
+    url: '/hyFreightSettlementInfo/selectFreightSettlement',
+    method: 'get',
+     params: data,
+  })
+}
+// 垫付还款结算列表
+export function getListpadsettleaccounts(data) {
+  return request({
+    url: '/repaymentInfo/selectAdvanceRepayment',
+    method: 'get',
+     params: data,
+  })
+}
 // 货主提现批量审核
 // 货主提现批量审核
 export function batchAduit(data) {
 export function batchAduit(data) {
   return request({
   return request({
@@ -22,4 +38,20 @@ export function batchAduit(data) {
     method: 'post',
     method: 'post',
      data: data,
      data: data,
   })
   })
+}
+// 司机运费结算暂缓支付
+export function deferpay(data) {
+  return request({
+    url: '/hyFreightSettlementInfo/api/deferredPayment',
+    method: 'post',
+     data: data,
+  })
+}
+// 司机运费结算批量付款
+export function batchpay(data) {
+  return request({
+    url: '/hyFreightSettlementInfo/api/paymentList',
+    method: 'post',
+     data: data,
+  })
 }
 }

+ 14 - 1
src/api/user.js

@@ -15,7 +15,20 @@ export function getInfo() {
     // params: { token }
     // params: { token }
   })
   })
 }
 }
-
+export function isLandBased() {
+  return request({
+    url: '/system/query/isLandBased',
+    method: 'get'
+    // params: { token }
+  })
+}
+export function companyInfo() {
+  return request({
+    url: '/company/query/companyInfo',
+    method: 'get'
+    // params: { token }
+  })
+}
 export function logout() {
 export function logout() {
   return request({
   return request({
     url: '/auth/api/logout',
     url: '/auth/api/logout',

+ 30 - 0
src/global/directive.js

@@ -1,3 +1,32 @@
+// bind 只调用一次,指令第一次绑定到元素时候调用,用这个钩子可以定义一个绑定时执行一次的初始化动作。
+// inserted:被绑定的元素插入父节点的时候调用(父节点存在即可调用,不必存在document中)
+// update: 被绑定与元素所在模板更新时调用,而且无论绑定值是否有变化,通过比较更新前后的绑定值,忽略不必要的模板更新
+// componentUpdate :被绑定的元素所在模板完成一次更新更新周期的时候调用
+// unbind: 只调用一次,指令月元素解绑的时候调用
+// demo
+// Vue.directive("hello",{
+//   bind:function(el,bingind,vnode){
+//     el.style["color"] = bingind.value;
+//     console.log("1-bind");
+// },
+// inserted:function(){
+//     console.log("2-insert");
+// },
+// update:function(){
+//     console.log("3-update");
+// },
+// componentUpdated:function(){
+//     console.log('4 - componentUpdated');
+// },
+// unbind:function(){
+//     console.log('5 - unbind');
+// }
+// })
+// 输入框只允许输入数字  v-number-input.float
+
+/**
+ * 拖动
+ */
 const drag = {
 const drag = {
   install(Vue, options = {}) {
   install(Vue, options = {}) {
     Vue.directive('drag', {
     Vue.directive('drag', {
@@ -151,6 +180,7 @@ const loadmore = {
   }
   }
 }
 }
 const permission = (el, binding, vnode) => {
 const permission = (el, binding, vnode) => {
+  // debugger
   const roles = vnode.context.$store.getters.roles;
   const roles = vnode.context.$store.getters.roles;
   if (!roles) {
   if (!roles) {
     return;
     return;

+ 2 - 1
src/global/index.js

@@ -1,7 +1,8 @@
-import './prototypes'
+// import './prototypes'
 import directive from './directive'
 import directive from './directive'
 import Vue from 'vue'
 import Vue from 'vue'
 // import filters from '@/global/filters';
 // import filters from '@/global/filters';
+// debugger
 Object.values(directive).forEach(value => Vue.use(value))
 Object.values(directive).forEach(value => Vue.use(value))
 // const install = () => {
 // const install = () => {
 
 

+ 4 - 1
src/main.js

@@ -21,6 +21,7 @@ import 'quill/dist/quill.core.css'
 import 'quill/dist/quill.snow.css'
 import 'quill/dist/quill.snow.css'
 import 'quill/dist/quill.bubble.css'
 import 'quill/dist/quill.bubble.css'
 Vue.use(VueQuillEditor)
 Vue.use(VueQuillEditor)
+import './global/index'
 /**
 /**
  * If you don't want to use mock-server
  * If you don't want to use mock-server
  * you want to use MockJs for mock api
  * you want to use MockJs for mock api
@@ -35,7 +36,9 @@ Vue.use(VueQuillEditor)
 // }
 // }
 
 
 // set ElementUI lang to EN
 // set ElementUI lang to EN
-Vue.use(ElementUI, { locale })
+Vue.use(ElementUI, {
+  locale
+})
 // 如果想要中文版 element-ui,按如下方式声明
 // 如果想要中文版 element-ui,按如下方式声明
 // Vue.use(ElementUI)
 // Vue.use(ElementUI)
 
 

+ 3 - 3
src/permission.js

@@ -41,9 +41,9 @@ router.beforeEach(async (to, from, next) => {
           // get user info
           // get user info
           const accessRoutes = await store.dispatch('permission/generateRoutes');
           const accessRoutes = await store.dispatch('permission/generateRoutes');
           router.addRoutes(accessRoutes);
           router.addRoutes(accessRoutes);
-          const {
-            roles
-          } = await store.dispatch('user/getInfo')
+          // const {
+          //   roles
+          // } = await store.dispatch('user/getInfo')
 
 
           next()
           next()
         } catch (error) {
         } catch (error) {

+ 11 - 3
src/store/modules/permission.js

@@ -7,7 +7,8 @@ import {
   getRoule
   getRoule
 } from '@/api/user'
 } from '@/api/user'
 import {
 import {
-  clearStorage
+  clearStorage,
+  removeToken
 } from '../../utils/auth'
 } from '../../utils/auth'
 /**
 /**
  * 递归过滤异步路由表,返回符合用户角色权限的路由表
  * 递归过滤异步路由表,返回符合用户角色权限的路由表
@@ -130,14 +131,21 @@ const actions = {
       getRoule().then(response => {
       getRoule().then(response => {
         const roles = []
         const roles = []
         handleRoles(response.data, roles, '')
         handleRoles(response.data, roles, '')
-        // console.log(roles)
+        console.log('roles', roles)
         const accessedRoutes = filterAsyncRoutes(constantRoutes, roles)
         const accessedRoutes = filterAsyncRoutes(constantRoutes, roles)
+
         commit('user/SET_ROLES', roles, {
         commit('user/SET_ROLES', roles, {
           root: true
           root: true
         })
         })
         commit('SET_ROUTES', accessedRoutes)
         commit('SET_ROUTES', accessedRoutes)
         resolve(accessedRoutes)
         resolve(accessedRoutes)
-      })
+      }).catch((err) => {
+        console.error('获取角色错误')
+        clearStorage()
+        resetRouter()
+        removeToken()
+        window.location.href='https://admin.changyuntong56.com/#/login'
+      })
     })
     })
   }
   }
 }
 }

+ 4 - 0
src/utils/auth.js

@@ -13,3 +13,7 @@ export function setToken(token) {
 export function removeToken() {
 export function removeToken() {
   return Cookies.remove(TokenKey)
   return Cookies.remove(TokenKey)
 }
 }
+
+export function clearStorage() {
+  return localStorage.clear();
+}

+ 36 - 22
src/views/driverManagement/identityExamine.vue

@@ -9,7 +9,8 @@
           </el-col>
           </el-col>
           <el-col :span="10">
           <el-col :span="10">
             <div class="screen">
             <div class="screen">
-              <el-input class='find' placeholder="可按司机姓名、账号、身份证号查找" @keyup.enter.native="find" v-model="searchkeyWord" clearable @change="find"></el-input>
+              <el-input class='find' placeholder="可按司机姓名、账号、身份证号查找" @keyup.enter.native="find" v-model="searchkeyWord"
+                clearable @change="find"></el-input>
               <el-button class="search" @click="find"><img width="16" height="16" style="margin-left: -8px"
               <el-button class="search" @click="find"><img width="16" height="16" style="margin-left: -8px"
                   src="../../../public/img/sousuo.png" /></el-button><span
                   src="../../../public/img/sousuo.png" /></el-button><span
                 class="count_css">共{{ deptBudgetTotal }}条</span>
                 class="count_css">共{{ deptBudgetTotal }}条</span>
@@ -51,7 +52,8 @@
           </el-col>
           </el-col>
         </el-row>
         </el-row>
       </div>
       </div>
-      <el-table :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border highlight-current-row>
+      <el-table :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border
+        highlight-current-row>
         <el-table-column prop="driverName" label="司机姓名" min-width="130"></el-table-column>
         <el-table-column prop="driverName" label="司机姓名" min-width="130"></el-table-column>
         <el-table-column prop="driverPhone" label="账号" min-width="110"></el-table-column>
         <el-table-column prop="driverPhone" label="账号" min-width="110"></el-table-column>
         <el-table-column prop="numberCard" label="身份证号" min-width="165"></el-table-column>
         <el-table-column prop="numberCard" label="身份证号" min-width="165"></el-table-column>
@@ -94,7 +96,8 @@
         </el-table-column>
         </el-table-column>
         <el-table-column label="车辆">
         <el-table-column label="车辆">
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <span @click="carLook(scope.row)" class="btn_css">查看</span>
+            <span @click="carLook(scope.row)" class="btn_css"
+              v-hasPermission="`changyuntong.changyuntongquanxian.audit.chakan`">查看</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column prop="payee" label="账户">
         <el-table-column prop="payee" label="账户">
@@ -165,7 +168,8 @@
       style="text-align: center; margin-top: 10px" :page-size="deptCircularPage.pageSize"
       style="text-align: center; margin-top: 10px" :page-size="deptCircularPage.pageSize"
       layout="total, sizes, prev, pager, next, jumper" :total="deptBudgetTotal">
       layout="total, sizes, prev, pager, next, jumper" :total="deptBudgetTotal">
     </el-pagination>
     </el-pagination>
-    <el-dialog :close-on-click-modal='false' title="车辆信息" :visible.sync="carInfo" width="500px" :before-close="carClose">
+    <el-dialog :close-on-click-modal='false' title="车辆信息" :visible.sync="carInfo" width="500px"
+      :before-close="carClose">
       <!-- <span v-if="carSee.length == 0">暂无车辆</span> -->
       <!-- <span v-if="carSee.length == 0">暂无车辆</span> -->
       <span class="tips">注:车辆信息不在本页面审核,仅供查看</span>
       <span class="tips">注:车辆信息不在本页面审核,仅供查看</span>
       <div class="car_css" v-for="(item, index) in carSee" :key="index">
       <div class="car_css" v-for="(item, index) in carSee" :key="index">
@@ -185,7 +189,8 @@
         <div class="carborder_css"></div>
         <div class="carborder_css"></div>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
-    <el-dialog :close-on-click-modal='false' title="账户信息" :visible.sync="userInfo" width="500px" :before-close="userClose">
+    <el-dialog :close-on-click-modal='false' title="账户信息" :visible.sync="userInfo" width="500px"
+      :before-close="userClose">
       <div class="user" v-for="(item, index) in paySee" :key="index">
       <div class="user" v-for="(item, index) in paySee" :key="index">
         <div class="name_css">{{ item.payeeName }}</div>
         <div class="name_css">{{ item.payeeName }}</div>
         <div class="id_css">{{ item.bankCard }}</div>
         <div class="id_css">{{ item.bankCard }}</div>
@@ -196,7 +201,8 @@
       <div v-if="paySee.length == 0">暂无账户信息</div>
       <div v-if="paySee.length == 0">暂无账户信息</div>
     </el-dialog>
     </el-dialog>
     <!-- 账单 -->
     <!-- 账单 -->
-    <el-dialog :close-on-click-modal='false' title="账单" :visible.sync="billShow" width="500px" :before-close="billClose">
+    <el-dialog :close-on-click-modal='false' title="账单" :visible.sync="billShow" width="500px"
+      :before-close="billClose">
       <div style="height: 450px" class="bill_css">
       <div style="height: 450px" class="bill_css">
         <div class="user" v-for="(item, index) in billInfo" :key="index">
         <div class="user" v-for="(item, index) in billInfo" :key="index">
           <div class="flex">
           <div class="flex">
@@ -211,7 +217,8 @@
         <div v-show="billInfo.length == 0">暂无账单信息</div>
         <div v-show="billInfo.length == 0">暂无账单信息</div>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
-    <el-dialog :close-on-click-modal='false' title="附件" :visible.sync="fujianInfo" width="830px" :before-close="fujianClose">
+    <el-dialog :close-on-click-modal='false' title="附件" :visible.sync="fujianInfo" width="830px"
+      :before-close="fujianClose">
       <div class="file">
       <div class="file">
         <div class="fujian_css">
         <div class="fujian_css">
           <div class="fujian_item" :class="count == 1 ? 'file_btn' : ''" @click="btnChange(1)">
           <div class="fujian_item" :class="count == 1 ? 'file_btn' : ''" @click="btnChange(1)">
@@ -237,10 +244,12 @@
           </div> -->
           </div> -->
         </div>
         </div>
         <div class="file_tips">
         <div class="file_tips">
-          <span v-if="count == 1">有效期:{{file.cardValidityDate}} </span><span v-if="count == 2"> 准驾车型:{{file.quasiDrivingVehicle}} </span> <span v-if="count == 2"> 发证机关:{{file.lssuingAuthority}} </span> <span v-if="count == 4"> 从业资格证号:{{file.qualificationCertificateNumber}}</span>
+          <span v-if="count == 1">有效期:{{file.cardValidityDate}} </span><span v-if="count == 2">
+            准驾车型:{{file.quasiDrivingVehicle}} </span> <span v-if="count == 2"> 发证机关:{{file.lssuingAuthority}} </span>
+          <span v-if="count == 4"> 从业资格证号:{{file.qualificationCertificateNumber}}</span>
         </div>
         </div>
         <div class="file_img">
         <div class="file_img">
-          <img :src="img[index]" class="img_css" @click="enlarge(img[index])"/>
+          <img :src="img[index]" class="img_css" @click="enlarge(img[index])" />
         </div>
         </div>
         <div class="btn">
         <div class="btn">
           <el-button style="margin-right: 120px" @click="index = 0"
           <el-button style="margin-right: 120px" @click="index = 0"
@@ -250,7 +259,8 @@
         </div>
         </div>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
-    <el-dialog :close-on-click-modal='false' title="驳回认证" :visible.sync="rejectInfo" width="400px" :before-close="rejectClose">
+    <el-dialog :close-on-click-modal='false' title="驳回认证" :visible.sync="rejectInfo" width="400px"
+      :before-close="rejectClose">
       <div>
       <div>
         <div><span class="sign">*</span>选择驳回原因</div>
         <div><span class="sign">*</span>选择驳回原因</div>
         <div class="form_css">
         <div class="form_css">
@@ -274,7 +284,8 @@
       </div>
       </div>
     </el-dialog>
     </el-dialog>
     <!-- //消息 -->
     <!-- //消息 -->
-    <el-dialog title="发送信息" :close-on-click-modal='false' :visible.sync="sendInfo" width="400px" :before-close="sendInfoClose">
+    <el-dialog title="发送信息" :close-on-click-modal='false' :visible.sync="sendInfo" width="400px"
+      :before-close="sendInfoClose">
       <div class="Info_css">
       <div class="Info_css">
         <div class="Info_title">标题</div>
         <div class="Info_title">标题</div>
         <div class="Info_item">
         <div class="Info_item">
@@ -352,14 +363,14 @@
     },
     },
     methods: {
     methods: {
       closeImgViewer() {
       closeImgViewer() {
-         this.srcList = []
+        this.srcList = []
         this.imgsVisible = false;
         this.imgsVisible = false;
       },
       },
       enlarge(url) {
       enlarge(url) {
         this.imgsVisible = true;
         this.imgsVisible = true;
         this.srcList.push(url)
         this.srcList.push(url)
       },
       },
-            editNumber(item) {
+      editNumber(item) {
         //   // item.iconShow = false
         //   // item.iconShow = false
         //   this.$set(item,"iconShow",false)
         //   this.$set(item,"iconShow",false)
         for (let i = 0; i < this.tableData.length; i++) {
         for (let i = 0; i < this.tableData.length; i++) {
@@ -378,7 +389,7 @@
           type: "warning",
           type: "warning",
         }).then(() => {
         }).then(() => {
           this.listLoading = true;
           this.listLoading = true;
-          val.advancePayment = val.advancePayment/100
+          val.advancePayment = val.advancePayment / 100
           editInfo(val)
           editInfo(val)
             .then((response) => {
             .then((response) => {
               if (response.code == 200) {
               if (response.code == 200) {
@@ -424,8 +435,8 @@
             this.tableData = response.data.records;
             this.tableData = response.data.records;
             for (let i = 0; i < this.tableData.length; i++) {
             for (let i = 0; i < this.tableData.length; i++) {
               this.tableData[i].iconShow = true;
               this.tableData[i].iconShow = true;
-              if(this.tableData[i].advancePayment){
-                this.tableData[i].advancePayment*=100
+              if (this.tableData[i].advancePayment) {
+                this.tableData[i].advancePayment *= 100
               }
               }
             }
             }
             this.deptBudgetTotal = response.data.total;
             this.deptBudgetTotal = response.data.total;
@@ -739,7 +750,7 @@
         background: #2f53eb;
         background: #2f53eb;
         border-radius: 0px 2px 2px 0px;
         border-radius: 0px 2px 2px 0px;
         border: 1px solid #DCDFE6;
         border: 1px solid #DCDFE6;
-        margin-left:-1px;
+        margin-left: -1px;
       }
       }
 
 
       .count_css {
       .count_css {
@@ -937,9 +948,10 @@
         background-color: #cfdbfe;
         background-color: #cfdbfe;
       }
       }
     }
     }
-    .file_tips{
-        margin: 10px auto;
-       width: 50%;
+
+    .file_tips {
+      margin: 10px auto;
+      width: 50%;
     }
     }
 
 
     .file_img {
     .file_img {
@@ -974,9 +986,11 @@
   ::v-deep .input_css .el-input__inner {
   ::v-deep .input_css .el-input__inner {
     height: 30px;
     height: 30px;
   }
   }
-  .find::v-deep input.el-input__inner{
-    border-radius:0;
+
+  .find::v-deep input.el-input__inner {
+    border-radius: 0;
   }
   }
+
   // .tupian{
   // .tupian{
   //   width: 100%;
   //   width: 100%;
   //   height: 100%;
   //   height: 100%;

+ 6 - 0
src/views/driverManagement/vehicleExamine.vue

@@ -141,6 +141,9 @@
           <div class="fujian_item" :class="count == 8 ? 'file_btn' : ''" @click="btnChange(8)">
           <div class="fujian_item" :class="count == 8 ? 'file_btn' : ''" @click="btnChange(8)">
             人车合影
             人车合影
           </div>
           </div>
+          <div class="fujian_item" :class="count == 9 ? 'file_btn' : ''" @click="btnChange(9)">
+            人和挂车合影
+          </div>
         </div>
         </div>
         <div class="file_tips">
         <div class="file_tips">
           <span v-if="count == 3">有效期:{{file.drivingLicenseValidityDate}} </span><span v-if="count == 3"> 注册日期:{{file.drivingLicenseRegistrationDate}} </span> <span v-if="count == 3"> 发证日期:{{file.drivingLicenseIssueDate}} </span> <span v-if="count == 3"> 发证机关:{{file.lssuingAuthority}}</span>
           <span v-if="count == 3">有效期:{{file.drivingLicenseValidityDate}} </span><span v-if="count == 3"> 注册日期:{{file.drivingLicenseRegistrationDate}} </span> <span v-if="count == 3"> 发证日期:{{file.drivingLicenseIssueDate}} </span> <span v-if="count == 3"> 发证机关:{{file.lssuingAuthority}}</span>
@@ -280,6 +283,9 @@
         } else if (num == 8) {
         } else if (num == 8) {
           this.index = 0;
           this.index = 0;
           this.img[0] = this.file.addressUrl;
           this.img[0] = this.file.addressUrl;
+        } else if (num == 9) {
+          this.index = 0;
+          this.img[0] = this.file.guaAddressUrl;
         }
         }
       },
       },
 
 

+ 1 - 0
src/views/feedbackManagement/userFeedback.vue

@@ -35,6 +35,7 @@
       </div>
       </div>
       <el-table :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border highlight-current-row>
       <el-table :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border highlight-current-row>
         <el-table-column prop="number" label="工单编号"></el-table-column>
         <el-table-column prop="number" label="工单编号"></el-table-column>
+        <el-table-column prop="orderNo" label="关联订单"></el-table-column>
         <el-table-column prop="initiator" label="发起方"></el-table-column>
         <el-table-column prop="initiator" label="发起方"></el-table-column>
         <el-table-column prop="initiatorNumber" label="发起方账号"></el-table-column>
         <el-table-column prop="initiatorNumber" label="发起方账号"></el-table-column>
         <el-table-column prop="passive" label="被动方"></el-table-column>
         <el-table-column prop="passive" label="被动方"></el-table-column>

+ 117 - 12
src/views/login/index.vue

@@ -24,7 +24,20 @@
           <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
           <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
         </span>
         </span>
       </el-form-item>
       </el-form-item>
-
+      <el-form-item prop="code">
+        <el-row :span="24" style="display: flex;align-items: center;">
+          <el-col :span="12">
+            <el-input v-model="loginForm.code" auto-complete="off" placeholder="请输入验证码" size=""
+              @keyup.enter.native="submitForm('loginForm')"></el-input>
+          </el-col>
+          <el-col :span="12" style="display: flex;justify-content: flex-end;">
+            <div class="login-code" @click="refreshCode">
+              <!--验证码组件-->
+              <s-identify :identifyCode="identifyCode"></s-identify>
+            </div>
+          </el-col>
+        </el-row>
+      </el-form-item>
       <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
       <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
         @click.native.prevent="handleLogin">进入</el-button>
         @click.native.prevent="handleLogin">进入</el-button>
 
 
@@ -38,11 +51,15 @@
 
 
 <script>
 <script>
   import {
   import {
-    validUsername
+    validUsername,
+    isLoginName
   } from '@/utils/validate'
   } from '@/utils/validate'
-
+  import SIdentify from './sidentify'
   export default {
   export default {
     name: 'Login',
     name: 'Login',
+    components: {
+      SIdentify
+    },
     data() {
     data() {
       const validateUsername = (rule, value, callback) => {
       const validateUsername = (rule, value, callback) => {
         if (!validUsername(value)) {
         if (!validUsername(value)) {
@@ -58,19 +75,63 @@
           callback()
           callback()
         }
         }
       }
       }
+      const validateCode = (rule, value, callback) => {
+        if (this.identifyCode !== value) {
+          this.loginForm.code = ''
+          this.refreshCode()
+          callback(new Error('请输入正确的验证码'))
+        } else {
+          callback()
+        }
+      }
       return {
       return {
-        loginForm: {},
+        isDebugLogin: false,
+        loginForm: {
+          username: '',
+          password: '',
+          code: ''
+        },
+        identifyCodes: '1234567890',
+        identifyCode: '',
         loginRules: {
         loginRules: {
           username: [{
           username: [{
-            required: true,
-            trigger: 'blur',
-            validator: validateUsername
-          }],
+              required: true,
+              trigger: 'blur',
+              message: '请输入用户名'
+            },
+            {
+              min: 1,
+              max: 200,
+              message: '长度在1-200字符之间',
+              trigger: 'blur'
+            },
+            {
+              validator: isLoginName,
+              trigger: 'blur'
+            }
+          ],
           password: [{
           password: [{
-            required: true,
-            trigger: 'blur',
-            validator: validatePassword
-          }]
+              required: true,
+              message: '请输入密码',
+              trigger: 'blur'
+            },
+            {
+              min: 1,
+              max: 100,
+              message: '长度在1-100字符之间',
+              trigger: 'blur'
+            }
+          ],
+          code: [{
+              required: true,
+              message: '请输入验证码',
+              trigger: 'blur'
+            },
+            {
+              validator: validateCode,
+              trigger: 'blur'
+            }
+          ]
         },
         },
         loading: false,
         loading: false,
         passwordType: 'password',
         passwordType: 'password',
@@ -83,9 +144,32 @@
           this.redirect = route.query && route.query.redirect
           this.redirect = route.query && route.query.redirect
         },
         },
         immediate: true
         immediate: true
+      },
+      isDebugLogin(v) {
+        if (v) {
+          this.loginForm.password = '123'
+          this.refreshCode()
+        }
+      },
+      identifyCode(v) {
+        this.isDebugLogin && (this.loginForm.code = v)
       }
       }
     },
     },
     methods: {
     methods: {
+      randomNum(min, max) {
+        return Math.floor(Math.random() * (max - min) + min)
+      },
+      refreshCode() {
+        this.identifyCode = ''
+        this.makeCode(this.identifyCodes, 4)
+      },
+      makeCode(o, l) {
+        for (let i = 0; i < l; i++) {
+          this.identifyCode += this.identifyCodes[
+            this.randomNum(0, this.identifyCodes.length)
+          ]
+        }
+      },
       showPwd() {
       showPwd() {
         if (this.passwordType === 'password') {
         if (this.passwordType === 'password') {
           this.passwordType = ''
           this.passwordType = ''
@@ -118,6 +202,9 @@
           }
           }
         })
         })
       }
       }
+    },
+    created() {
+      this.refreshCode()
     }
     }
   }
   }
 </script>
 </script>
@@ -231,4 +318,22 @@
       user-select: none;
       user-select: none;
     }
     }
   }
   }
+
+  .login-code {
+    cursor: pointer;
+    margin-right: 5px;
+
+    .login-code-img {
+      width: 100px;
+      height: 38px;
+      background-color: #eee;
+      border: 1px solid #f0f0f0;
+      color: #333;
+      font-size: 18px;
+      font-weight: bold;
+      letter-spacing: 2px;
+      text-indent: 2px;
+      text-align: center;
+    }
+  }
 </style>
 </style>

+ 142 - 0
src/views/login/sidentify.vue

@@ -0,0 +1,142 @@
+<template>
+  <div class="s-canvas">
+    <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'SIdentify',
+    props: {
+      identifyCode: {
+        type: String,
+        default: '1234'
+      },
+      fontSizeMin: {
+        type: Number,
+        default: 24
+      },
+      fontSizeMax: {
+        type: Number,
+        default: 36
+      },
+      backgroundColorMin: {
+        type: Number,
+        default: 180
+      },
+      backgroundColorMax: {
+        type: Number,
+        default: 240
+      },
+      colorMin: {
+        type: Number,
+        default: 50
+      },
+      colorMax: {
+        type: Number,
+        default: 160
+      },
+      lineColorMin: {
+        type: Number,
+        default: 40
+      },
+      lineColorMax: {
+        type: Number,
+        default: 180
+      },
+      dotColorMin: {
+        type: Number,
+        default: 0
+      },
+      dotColorMax: {
+        type: Number,
+        default: 255
+      },
+      contentWidth: {
+        type: Number,
+        default: 112
+      },
+      contentHeight: {
+        type: Number,
+        default: 38
+      }
+    },
+    methods: {
+      // 生成一个随机数
+      randomNum(min, max) {
+        return Math.floor(Math.random() * (max - min) + min)
+      },
+      // 生成一个随机的颜色
+      randomColor(min, max) {
+        let r = this.randomNum(min, max)
+        let g = this.randomNum(min, max)
+        let b = this.randomNum(min, max)
+        return 'rgb(' + r + ',' + g + ',' + b + ')'
+      },
+      drawPic() {
+        let canvas = document.getElementById('s-canvas')
+        let ctx = canvas.getContext('2d')
+        ctx.textBaseline = 'bottom'
+        // 绘制背景
+        ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
+        ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
+        // 绘制文字
+        for (let i = 0; i < this.identifyCode.length; i++) {
+          this.drawText(ctx, this.identifyCode[i], i)
+        }
+        // this.drawLine(ctx)
+        this.drawDot(ctx)
+      },
+      drawText(ctx, txt, i) {
+        ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
+        ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
+        let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
+        let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
+        var deg = this.randomNum(-45, 45)
+        // 修改坐标原点和旋转角度
+        ctx.translate(x, y)
+        ctx.rotate(deg * Math.PI / 180)
+        ctx.fillText(txt, 0, 0)
+        // 恢复坐标原点和旋转角度
+        ctx.rotate(-deg * Math.PI / 180)
+        ctx.translate(-x, -y)
+      },
+      drawLine(ctx) {
+        // 绘制干扰线
+        for (let i = 0; i < 8; i++) {
+          ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
+          ctx.beginPath()
+          ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
+          ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
+          ctx.stroke()
+        }
+      },
+      drawDot(ctx) {
+        // 绘制干扰点
+        for (let i = 0; i < 100; i++) {
+          ctx.fillStyle = this.randomColor(0, 255)
+          ctx.beginPath()
+          ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
+          ctx.fill()
+        }
+      }
+    },
+    watch: {
+      identifyCode() {
+        this.drawPic()
+      }
+    },
+    mounted() {
+      this.drawPic()
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  .s-canvas {
+    height: 38px;
+
+    canvas {
+      margin-top: 1px;
+      margin-left: 8px;
+    }
+  }
+</style>

+ 98 - 96
src/views/orderManagement/orderAudit.vue

@@ -49,13 +49,13 @@
         @row-click="handleRowClick" @selection-change="handleSelectionChange" highlight-current-row>
         @row-click="handleRowClick" @selection-change="handleSelectionChange" highlight-current-row>
         <el-table-column type="selection" width="55" :selectable="selectInit">
         <el-table-column type="selection" width="55" :selectable="selectInit">
         </el-table-column>
         </el-table-column>
-        <el-table-column type="index" label="序号" width="50">
+        <el-table-column fixed="left" type="index" label="序号" width="50">
           <template scope="scope">
           <template scope="scope">
             <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
             <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
             <span v-else>{{ scope.$index + 1 }}</span>
             <span v-else>{{ scope.$index + 1 }}</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="orderNo" label="订单编号" min-width="182">
+        <el-table-column fixed="left" prop="orderNo" label="订单编号" min-width="182">
           <template scope="scope">
           <template scope="scope">
             <div>{{scope.row.orderNo}} <span class="pad_css" v-if="scope.row.freightAdvance == '垫付'">垫</span></div>
             <div>{{scope.row.orderNo}} <span class="pad_css" v-if="scope.row.freightAdvance == '垫付'">垫</span></div>
           </template>
           </template>
@@ -111,7 +111,7 @@
               width="200"
               width="200"
               trigger="hover">
               trigger="hover">
               <div v-html='scope.row.content'></div>
               <div v-html='scope.row.content'></div>
-              <i v-if='scope.row.cargoOwnerStatus=="已终止"' slot="reference" class="el-icon-question"></i>
+              <i v-if='scope.row.cargoOwnerStatus=="已终止"&&scope.row.terminator' slot="reference" class="el-icon-question"></i>
             </el-popover>
             </el-popover>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
@@ -212,105 +212,107 @@
 
 
     <el-drawer title="订单详情" :visible.sync="rightSee" style="overflow-y: auto !important">
     <el-drawer title="订单详情" :visible.sync="rightSee" style="overflow-y: auto !important">
       <div class="right_css">
       <div class="right_css">
-        <div class="title_name">基本信息</div>
-        <div class="right_item">订单编号:{{costData.orderNo}}</div>
-        <div class="right_title">货主</div>
-        <div class="right_item">{{costData.cargoOwner}}</div>
-        <div class="right_title">司机</div>
-        <div class="right_item">{{costData.driverName}}</div>
-        <div class="right_title">发货单位</div>
-        <div class="right_item">{{costData.compName}}</div>
-        <div class="right_title">发货地</div>
-        <div class="right_item">
-          {{costData.sendPrivate}}{{costData.sendCity}}{{costData.sendArea}}{{costData.sendDetailedAddress}}
-        </div>
-        <div class="right_title">卸货地</div>
-        <div class="right_item">
-          {{costData.unloadPrivate}}{{costData.unloadCity}}{{costData.unloadArea}}{{costData.unloadDetailedAddress}}
-        </div>
-         <div class="right_title">货物类别</div>
-        <div class="right_item">{{costData.goodsType}}</div>
-        <div class="right_title">货名</div>
-        <div class="right_item">{{costData.goodsName}}</div>
-        <div class="right_title">发货联系人</div>
-        <div class="right_item">{{costData.publishTaskInfo.sender}}</div>
-         <div class="right_title">发货联系人电话</div>
-        <div class="right_item">{{costData.publishTaskInfo.senderPhone}}</div>
-
-         <div class="right_title">收货联系人</div>
-        <div class="right_item">{{costData.publishTaskInfo.receiver}}</div>
-         <div class="right_title">收货联系人电话</div>
-        <div class="right_item">{{costData.publishTaskInfo.receiverPhone}}</div>
-         <div class="right_title">收货人身份证号</div>
-        <div class="right_item">{{costData.publishTaskInfo.receiverIdcard}}</div>
-          <div class="right_title">收货方信用代码(选填)</div>
-        <div class="right_item">{{costData.publishTaskInfo.receiverCreditCode?costData.publishTaskInfo.receiverCreditCode:'暂无'}}</div>
-
-
-        <div class="right_title">距离</div>
-        <div class="right_item">约{{costData.distance ? costData.distance : 0}}km</div>
-        <div class="right_title">预计运费</div>
-        <div class="right_item">{{costData.freight}}</div>
-        <el-divider v-if="costData.hyCarrierInfo"></el-divider>
-        <div v-if="costData.hyCarrierInfo">
-          <div class="title_name">承运信息</div>
-          <div class="right_title">承运合同编号</div>
-          <div class="right_item">{{costData.contractNo}}</div>
-          <div class="right_title">委托合同编号</div>
-          <div class="right_item">{{costData.wtContractNo}}</div>
-          <div class="right_title">车牌号</div>
-          <div class="right_item">{{costData.hyCarrierInfo.carNo}}</div>
-          <!-- <div class="right_title">预计运费</div>
-          <div class="right_item">{{costData.hyCarrierInfo.estimatedFreight}}</div> -->
-          <div class="right_title">装车时间</div>
-          <div class="right_item">{{costData.hyCarrierInfo.loadingDate}}</div>
-          <div class="right_title">装车定位</div>
-          <div class="right_item">{{costData.hyCarrierInfo.loadingCity}}{{costData.hyCarrierInfo.loadingArea}}</div>
-          <div class="right_title">装车照片</div>
-          <div style="display: flex;" v-if="costData.hyCarrierInfo.loadingImg">
-            <div v-for="(item,index) in costData.hyCarrierInfo.loadingImg.split(',')" :key="index">
-              <img :src="item" class="img_css" @click="enlarge(item)">
+        <div style='height:80vh;overflow-y:scroll;'>
+          <div class="title_name">基本信息</div>
+          <div class="right_item">订单编号:{{costData.orderNo}}</div>
+          <div class="right_title">货主</div>
+          <div class="right_item">{{costData.cargoOwner}}</div>
+          <div class="right_title">司机</div>
+          <div class="right_item">{{costData.driverName}}</div>
+          <div class="right_title">发货单位</div>
+          <div class="right_item">{{costData.compName}}</div>
+          <div class="right_title">发货地</div>
+          <div class="right_item">
+            {{costData.sendPrivate}}{{costData.sendCity}}{{costData.sendArea}}{{costData.sendDetailedAddress}}
+          </div>
+          <div class="right_title">卸货地</div>
+          <div class="right_item">
+            {{costData.unloadPrivate}}{{costData.unloadCity}}{{costData.unloadArea}}{{costData.unloadDetailedAddress}}
+          </div>
+          <div class="right_title">货物类别</div>
+          <div class="right_item">{{costData.goodsType}}</div>
+          <div class="right_title">货名</div>
+          <div class="right_item">{{costData.goodsName}}</div>
+          <div class="right_title">发货联系人</div>
+          <div class="right_item">{{costData.publishTaskInfo.sender}}</div>
+          <div class="right_title">发货联系人电话</div>
+          <div class="right_item">{{costData.publishTaskInfo.senderPhone}}</div>
+
+          <div class="right_title">收货联系人</div>
+          <div class="right_item">{{costData.publishTaskInfo.receiver}}</div>
+          <div class="right_title">收货联系人电话</div>
+          <div class="right_item">{{costData.publishTaskInfo.receiverPhone}}</div>
+          <div class="right_title">收货人身份证号</div>
+          <div class="right_item">{{costData.publishTaskInfo.receiverIdcard}}</div>
+            <div class="right_title">收货方信用代码(选填)</div>
+          <div class="right_item">{{costData.publishTaskInfo.receiverCreditCode?costData.publishTaskInfo.receiverCreditCode:'暂无'}}</div>
+
+
+          <div class="right_title">距离</div>
+          <div class="right_item">约{{costData.distance ? costData.distance : 0}}km</div>
+          <div class="right_title">运费</div>
+          <div class="right_item">{{costData.freight}}</div>
+          <el-divider v-if="costData.hyCarrierInfo"></el-divider>
+          <div v-if="costData.hyCarrierInfo">
+            <div class="title_name">承运信息</div>
+            <div class="right_title">承运合同编号</div>
+            <div class="right_item">{{costData.contractNo}}</div>
+            <div class="right_title">委托合同编号</div>
+            <div class="right_item">{{costData.wtContractNo}}</div>
+            <div class="right_title">车牌号</div>
+            <div class="right_item">{{costData.hyCarrierInfo.carNo}}</div>
+            <div class="right_title">预计运费</div>
+            <div class="right_item">{{costData.hyCarrierInfo.estimatedFreight}}</div>
+            <div class="right_title">装车时间</div>
+            <div class="right_item">{{costData.hyCarrierInfo.loadingDate}}</div>
+            <div class="right_title">装车定位</div>
+            <div class="right_item">{{costData.hyCarrierInfo.loadingCity}}{{costData.hyCarrierInfo.loadingArea}}</div>
+            <div class="right_title">装车照片</div>
+            <div style="display: flex;" v-if="costData.hyCarrierInfo.loadingImg">
+              <div v-for="(item,index) in costData.hyCarrierInfo.loadingImg.split(',')" :key="index">
+                <img :src="item" class="img_css" @click="enlarge(item)">
+              </div>
+            </div>
+            <div class="right_title" v-if="costData.hyCarrierInfo.totalFreight">合计应付运费</div>
+            <div class="right_item">{{costData.hyCarrierInfo.totalFreight}}</div>
+            <div class="right_title" v-if="costData.hyCarrierInfo.unloadingDate">卸车时间</div>
+            <div class="right_item">{{costData.hyCarrierInfo.unloadingDate}}</div>
+            <div class="right_title">卸车定位</div>
+            <div class="right_item">{{costData.hyCarrierInfo.unloadingCity}}{{costData.hyCarrierInfo.unloadingArea}}</div>
+            <div class="right_title" v-if="costData.hyCarrierInfo.unloadingImg">卸车照片</div>
+            <div style="display: flex;" v-if="costData.hyCarrierInfo.unloadingImg">
+              <div v-for="(item,index) in costData.hyCarrierInfo.unloadingImg.split(',')" :key="index">
+                <img :src="item" class="img_css" @click="enlarge(item)">
+              </div>
             </div>
             </div>
           </div>
           </div>
-          <div class="right_title" v-if="costData.hyCarrierInfo.totalFreight">合计应付运费</div>
-          <div class="right_item">{{costData.hyCarrierInfo.totalFreight}}</div>
-          <div class="right_title" v-if="costData.hyCarrierInfo.unloadingDate">卸车时间</div>
-          <div class="right_item">{{costData.hyCarrierInfo.unloadingDate}}</div>
-          <div class="right_title">卸车定位</div>
-          <div class="right_item">{{costData.hyCarrierInfo.unloadingCity}}{{costData.hyCarrierInfo.unloadingArea}}</div>
-          <div class="right_title" v-if="costData.hyCarrierInfo.unloadingImg">卸车照片</div>
-          <div style="display: flex;" v-if="costData.hyCarrierInfo.unloadingImg">
-            <div v-for="(item,index) in costData.hyCarrierInfo.unloadingImg.split(',')" :key="index">
-              <img :src="item" class="img_css" @click="enlarge(item)">
+          <el-divider v-if="costData.freightInfo"></el-divider>
+          <div v-if="costData.freightInfo">
+            <div class="title_name">运费信息(单位:元)</div>
+            <div class="right_title">预付运费</div>
+            <div class="right_item">{{costData.freightInfo.prepaidFreight}} <span
+                style="margin-left: 100px;">{{costData.freightInfo.prepaidFreightDate}}</span></div>
+            <div class="right_title">运费尾款</div>
+            <div class="right_item">{{costData.freightInfo.freightBalance?costData.freightInfo.freightBalance:'未支付'}}
+              <span style="margin-left: 100px;">{{costData.freightInfo.freightBalanceDate}}</span></div>
+            <div class="right_title" v-if="costData.freightInfo.freightBalance">明细</div>
+            <div class="right_item" v-if="costData.freightInfo.freightBalance">
+              预付{{costData.freightInfo.prepaidFreight ? costData.freightInfo.prepaidFreight : 0}}元,服务费{{costData.freightInfo.driverServiceCharge ? costData.freightInfo.driverServiceCharge:0}}元,尾款{{costData.freightInfo.freightBalance ? costData.freightInfo.freightBalance:0}}元,合计收款{{costData.freightInfo.totalCollection ? costData.freightInfo.totalCollection:0}}元。
             </div>
             </div>
           </div>
           </div>
-        </div>
-        <el-divider v-if="costData.freightInfo"></el-divider>
-        <div v-if="costData.freightInfo">
-          <div class="title_name">运费信息(单位:元)</div>
-          <div class="right_title">预付运费</div>
-          <div class="right_item">{{costData.freightInfo.prepaidFreight}} <span
-              style="margin-left: 100px;">{{costData.freightInfo.prepaidFreightDate}}</span></div>
-          <div class="right_title">运费尾款</div>
-          <div class="right_item">{{costData.freightInfo.freightBalance?costData.freightInfo.freightBalance:'未支付'}}
-            <span style="margin-left: 100px;">{{costData.freightInfo.freightBalanceDate}}</span></div>
-          <div class="right_title" v-if="costData.freightInfo.freightBalance">明细</div>
-          <div class="right_item" v-if="costData.freightInfo.freightBalance">
-            预付{{costData.freightInfo.prepaidFreight ? costData.freightInfo.prepaidFreight : 0}}元,服务费{{costData.freightInfo.driverServiceCharge ? costData.freightInfo.driverServiceCharge:0}}元,尾款{{costData.freightInfo.freightBalance ? costData.freightInfo.freightBalance:0}}元,合计收款{{costData.freightInfo.totalCollection ? costData.freightInfo.totalCollection:0}}元。
+          <el-divider v-if="costData.repaymentInfo"></el-divider>
+          <div v-if="costData.repaymentInfo">
+            <div class="title_name">还款信息</div>
+            <div class="right_title">运费</div>
+            <div class="right_item">{{costData.freight}}</div>
+            <div class="right_title">超期费(每天3%)</div>
+            <div class="right_item">{{costData.repaymentInfo.overdueFee}}</div>
+            <div class="right_title">合计应还</div>
+            <div class="right_item">{{costData.repaymentInfo.totalRepayable}}</div>
+            <div class="right_title">还款(尾号6666)</div>
+            <div class="right_item">{{costData.repaymentInfo.alreadyRepaid}}</div>
           </div>
           </div>
         </div>
         </div>
-        <el-divider v-if="costData.repaymentInfo"></el-divider>
-        <div v-if="costData.repaymentInfo">
-          <div class="title_name">还款信息</div>
-          <div class="right_title">运费</div>
-          <div class="right_item">{{costData.freight}}</div>
-          <div class="right_title">超期费(每天3%)</div>
-          <div class="right_item">{{costData.repaymentInfo.overdueFee}}</div>
-          <div class="right_title">合计应还</div>
-          <div class="right_item">{{costData.repaymentInfo.totalRepayable}}</div>
-          <div class="right_title">还款(尾号6666)</div>
-          <div class="right_item">{{costData.repaymentInfo.alreadyRepaid}}</div>
-        </div>
         <div class="right_btn">
         <div class="right_btn">
           <el-button @click="submit(1)" v-if="costData.orderStatusKey == 9 || costData.orderStatusKey == 19">
           <el-button @click="submit(1)" v-if="costData.orderStatusKey == 9 || costData.orderStatusKey == 19">
             确认</el-button>
             确认</el-button>

+ 35 - 34
src/views/permissionSetting/permissionSetting.vue

@@ -83,11 +83,11 @@
     getRoleInfo,
     getRoleInfo,
     getTenantlist,
     getTenantlist,
     bindResources
     bindResources
-  } from "@/api/permissionSettingManagement";
+  } from '@/api/permissionSettingManagement';
   export default {
   export default {
     components: {
     components: {
-      "el-image-viewer": () =>
-        import("element-ui/packages/image/src/image-viewer"),
+      'el-image-viewer': () =>
+        import('element-ui/packages/image/src/image-viewer'),
     },
     },
     data() {
     data() {
       return {
       return {
@@ -121,8 +121,8 @@
       async initDict() {
       async initDict() {
         // 获取部门
         // 获取部门
         const resp2 = await getDeptPageByCompId({
         const resp2 = await getDeptPageByCompId({
-          compId: localStorage.getItem("enterprise-front-companyId"),
-          vesselBankFlag: "V"
+          compId: localStorage.getItem('enterprise-front-companyId'),
+          vesselBankFlag: 'V'
         });
         });
         this.deptList = resp2.records;
         this.deptList = resp2.records;
         await this.getList();
         await this.getList();
@@ -173,13 +173,13 @@
                 _defaultOpeneds.push(value2.serviceId);
                 _defaultOpeneds.push(value2.serviceId);
                 _defaultOpeneds.push(value.pluginId);
                 _defaultOpeneds.push(value.pluginId);
               }
               }
-              this.$set(value2, "featureCheckeds", _featureCheckeds);
+              this.$set(value2, 'featureCheckeds', _featureCheckeds);
             });
             });
           });
           });
-          this.$set(this, "defaultOpeneds", _defaultOpeneds);
+          this.$set(this, 'defaultOpeneds', _defaultOpeneds);
           this.loadingRoleRan = false;
           this.loadingRoleRan = false;
         } catch (error) {
         } catch (error) {
-          if (error.code && error.code !== "200") this.$message(error.message);
+          if (error.code && error.code !== '200') this.$message(error.message);
         }
         }
       },
       },
       // 初始化插件树
       // 初始化插件树
@@ -196,11 +196,11 @@
                 value2.featureCheckeds = [];
                 value2.featureCheckeds = [];
               });
               });
             });
             });
-            this.$set(this, "queryList", resp4.data);
+            this.$set(this, 'queryList', resp4.data);
             console.log('lsit', this.queryList)
             console.log('lsit', this.queryList)
           }
           }
         } catch (error) {
         } catch (error) {
-          if (error.code && error.code !== "200") this.$message(error.message);
+          if (error.code && error.code !== '200') this.$message(error.message);
         }
         }
       },
       },
       submit() {
       submit() {
@@ -211,18 +211,18 @@
 
 
         if (this.deptTitle == '添加') {
         if (this.deptTitle == '添加') {
           let _obj = {
           let _obj = {
-            compId: "2710b21efc1e4393930c5dc800010dc4",
-            deptId: "3d7dbdc962ca4a96a48522c9ee528bc3",
+            compId: '2710b21efc1e4393930c5dc800010dc4',
+            deptId: '3d7dbdc962ca4a96a48522c9ee528bc3',
             roleName: this.Info.newsTitle,
             roleName: this.Info.newsTitle,
-            underCompId: "2710b21efc1e4393930c5dc800010dc4",
-            underCompName: "黑龙江中天昊元贸易有限公司",
-            vesselBankFlag: "B"
+            underCompId: '2710b21efc1e4393930c5dc800010dc4',
+            underCompName: '黑龙江中天昊元贸易有限公司',
+            vesselBankFlag: 'B'
           }
           }
           create(_obj).then((response) => {
           create(_obj).then((response) => {
               this.$notify({
               this.$notify({
-                title: "成功",
-                message: "添加成功!",
-                type: "success",
+                title: '成功',
+                message: '添加成功!',
+                type: 'success',
               });
               });
               this.sendInfoClose();
               this.sendInfoClose();
               this.listLoading = false;
               this.listLoading = false;
@@ -230,9 +230,9 @@
             })
             })
             .catch((error) => {
             .catch((error) => {
               this.$notify({
               this.$notify({
-                title: "失败",
+                title: '失败',
                 message: error,
                 message: error,
-                type: "error",
+                type: 'error',
               });
               });
               this.sendInfoClose();
               this.sendInfoClose();
             });
             });
@@ -240,9 +240,9 @@
           this.selectRow.roleName = this.Info.newsTitle
           this.selectRow.roleName = this.Info.newsTitle
           changeInfo(this.selectRow).then((response) => {
           changeInfo(this.selectRow).then((response) => {
               this.$notify({
               this.$notify({
-                title: "成功",
-                message: "编辑成功!",
-                type: "success",
+                title: '成功',
+                message: '编辑成功!',
+                type: 'success',
               });
               });
               this.sendInfoClose();
               this.sendInfoClose();
               this.listLoading = false;
               this.listLoading = false;
@@ -250,9 +250,9 @@
             })
             })
             .catch((error) => {
             .catch((error) => {
               this.$notify({
               this.$notify({
-                title: "失败",
+                title: '失败',
                 message: error,
                 message: error,
-                type: "error",
+                type: 'error',
               });
               });
               this.sendInfoClose();
               this.sendInfoClose();
             });
             });
@@ -275,10 +275,10 @@
       },
       },
       getList() {
       getList() {
         let _data = {
         let _data = {
-          compId: "2710b21efc1e4393930c5dc800010dc4",
+          compId: '2710b21efc1e4393930c5dc800010dc4',
           pageSize: 10,
           pageSize: 10,
           currentPage: 1,
           currentPage: 1,
-          vesselBankFlag: "B"
+          vesselBankFlag: 'B'
         }
         }
         getList(_data)
         getList(_data)
           .then((res) => {
           .then((res) => {
@@ -289,17 +289,18 @@
           });
           });
       },
       },
       addJump() {
       addJump() {
-        this.deptTitle = "添加";
+        this.deptTitle = '添加';
         this.sendInfo = true
         this.sendInfo = true
       },
       },
       editInfo(val) {
       editInfo(val) {
-        this.deptTitle = "编辑";
+        this.deptTitle = '编辑';
         this.Info.newsTitle = val.roleName
         this.Info.newsTitle = val.roleName
         this.sendInfo = true
         this.sendInfo = true
         this.selectRow = val
         this.selectRow = val
 
 
       },
       },
       setInfo(val) {
       setInfo(val) {
+        // debugger
         this.showRoleRan(val)
         this.showRoleRan(val)
       },
       },
       // 保存权限范围
       // 保存权限范围
@@ -325,13 +326,13 @@
           };
           };
           await bindResources(data);
           await bindResources(data);
           this.$message({
           this.$message({
-            message: "保存成功!",
-            type: "success"
+            message: '保存成功!',
+            type: 'success'
           });
           });
           this.addRoleRanFlag = false;
           this.addRoleRanFlag = false;
           this.getList();
           this.getList();
         } catch (error) {
         } catch (error) {
-          if (error.code && error.code !== "200") this.$message(error.message);
+          if (error.code && error.code !== '200') this.$message(error.message);
         }
         }
       },
       },
       allSelect(data) {
       allSelect(data) {
@@ -342,9 +343,9 @@
           sour.forEach((value, index) => {
           sour.forEach((value, index) => {
             _selected.push(value.featureId);
             _selected.push(value.featureId);
           });
           });
-          this.$set(data, "featureCheckeds", _selected);
+          this.$set(data, 'featureCheckeds', _selected);
         } else {
         } else {
-          this.$set(data, "featureCheckeds", []);
+          this.$set(data, 'featureCheckeds', []);
         }
         }
       }
       }
     },
     },

+ 6 - 3
src/views/settlementManagement/CashOwner.vue

@@ -161,12 +161,15 @@ import {
       },
       },
       batchaduit(){
       batchaduit(){
         var money=0
         var money=0
+        var name=[]
         for (let i = 0; i < this.multipleSelection.length; i++) {
         for (let i = 0; i < this.multipleSelection.length; i++) {
           money+=this.multipleSelection[i].amountMoney
           money+=this.multipleSelection[i].amountMoney
-          
+          if(name.indexOf(this.multipleSelection[i].driverName)==-1){
+              name.push(this.multipleSelection[i].driverName)
+            }
         }
         }
         if(this.multipleSelection.length>0){
         if(this.multipleSelection.length>0){
-          this.$confirm(`确定给${this.multipleSelection[0].cargoOwnerName}等${this.multipleSelection.length}人打款合计${money}元?`, '提示', {
+          this.$confirm(`确定给${this.multipleSelection[0].cargoOwnerName}等${name.length}人打款合计${money}元?`, '提示', {
             confirmButtonText: '确定',
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             cancelButtonText: '取消',
             type: 'warning'
             type: 'warning'
@@ -197,7 +200,7 @@ import {
         }
         }
       },
       },
       aduit(row){
       aduit(row){
-        this.$confirm(`确定给${row.cargoOwnerName}打款${row.amountMoney}元?`, '提示', {
+        this.$confirm(`确定给${row.cargoOwnerName}打款${row.amountMoney}元?`,'提示', {
             confirmButtonText: '确定',
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             cancelButtonText: '取消',
             type: 'warning'
             type: 'warning'

+ 19 - 13
src/views/settlementManagement/advancePaymentAndRepaymentSettlement.vue

@@ -46,16 +46,16 @@
                 <!-- <span v-else>{{scope.$index}}</span> -->
                 <!-- <span v-else>{{scope.$index}}</span> -->
             </template>
             </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="number" label="订单编号" />
-        <el-table-column prop="title" label="货主" />
-         <el-table-column prop="issuingDate" label="账号" />
-        <el-table-column prop="issuingAgency" label="所属企业" />
+        <el-table-column prop="orderNo" label="订单编号" />
+        <el-table-column prop="cargoOwnerName" label="货主" />
+         <el-table-column prop="accountNumber" label="账号" />
+        <el-table-column prop="affiliatedEnterprise" label="所属企业" />
         <el-table-column prop="updateDate" label="垫付金额(元)" />
         <el-table-column prop="updateDate" label="垫付金额(元)" />
-        <el-table-column prop="updateDate" label="超期金额(元)" />
-        <el-table-column prop="updateDate" label="合计应还(元)" />
-        <el-table-column prop="updateDate" label="已还金额(元)" />
-        <el-table-column prop="updateDate" label="未还金额(元)" />
-        <el-table-column prop="updateDate" label="还款时间" />
+        <el-table-column prop="overdueFee" label="超期金额(元)" />
+        <el-table-column prop="totalRepayable" label="合计应还(元)" />
+        <el-table-column prop="alreadyRepaid" label="已还金额(元)" />
+        <el-table-column prop="notRepaid" label="未还金额(元)" />
+        <el-table-column prop="repaymentDate" label="还款时间" />
         <el-table-column prop="status" label="状态" >
         <el-table-column prop="status" label="状态" >
           <template scope="scope">
           <template scope="scope">
             <span>{{scope.row.status}}</span>
             <span>{{scope.row.status}}</span>
@@ -70,7 +70,7 @@
 </template>
 </template>
 <script>
 <script>
 import {
 import {
-  getListwithdrawal
+  getListpadsettleaccounts
 } from '@/api/settlementManagement'
 } from '@/api/settlementManagement'
   export default {
   export default {
     data() {
     data() {
@@ -85,7 +85,7 @@ import {
         pageSize: 10,
         pageSize: 10,
         deptBudgetTotal: 0,
         deptBudgetTotal: 0,
         deptCircularPage: {},
         deptCircularPage: {},
-        search: 1,
+        search: '',
         disabled: false,
         disabled: false,
       }
       }
     },
     },
@@ -134,8 +134,14 @@ import {
         _obj.searchKeyWord = this.searchkeyWord
         _obj.searchKeyWord = this.searchkeyWord
         _obj.startDate =  this.startDate
         _obj.startDate =  this.startDate
         _obj.endDate= this.endDate
         _obj.endDate= this.endDate
-        _obj.searchType = '公告'
-        getList(_obj).then(response => {
+        _obj.searchType = this.scarch
+        getListpadsettleaccounts(_obj).then(response => {
+          if(response.data.records.length>0){
+            for (let i = 0; i < response.data.records.length; i++) {
+              response.data.records[i].padmoney=response.data.records[i].serviceCharge+response.data.records[i].freight
+              
+            }
+          }
             this.tableData = response.data.records
             this.tableData = response.data.records
             this.deptBudgetTotal = response.data.total
             this.deptBudgetTotal = response.data.total
             this.listLoading = false
             this.listLoading = false

+ 63 - 25
src/views/settlementManagement/driverFeeSettlement.vue

@@ -21,17 +21,17 @@
         <el-row>
         <el-row>
           <el-col>
           <el-col>
             <div class="search_btn">
             <div class="search_btn">
-              <div :class="search == '' ? 'search' : 'searchNo'" class="search_item search_block"
+              <div :class="searchType == '' ? 'search' : 'searchNo'" class="search_item search_block"
                 @click="searchBtn('')">
                 @click="searchBtn('')">
                 全部
                 全部
               </div>
               </div>
-              <div :class="search == 1 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(1)">
+              <div :class="searchType == 1 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(1)">
                 待支付
                 待支付
               </div>
               </div>
-              <div :class="search == 2 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(2)">
+              <div :class="searchType == 2 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(2)">
                 已支付
                 已支付
               </div>
               </div>
-              <div :class="search == 3 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(3)">
+              <div :class="searchType == 3 ? 'search' : 'searchNo'" class="search_item" @click="searchBtn(3)">
                 暂缓中
                 暂缓中
               </div>
               </div>
             </div>
             </div>
@@ -39,7 +39,7 @@
         </el-row>
         </el-row>
       </div>
       </div>
       <el-table @selection-change="handleSelectionChange" :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border highlight-current-row>
       <el-table @selection-change="handleSelectionChange" :data="tableData" style="width: 98%; margin: 0 auto; border-radius: 10px" height="55.8vh" border highlight-current-row>
-        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column type="selection" :selectable="checkSelectable" width="55"></el-table-column>
         <!-- <el-table-column prop="index" label="序号" >
         <!-- <el-table-column prop="index" label="序号" >
           <template slot-scope="scope">
           <template slot-scope="scope">
             {{scope.row.$index}}
             {{scope.row.$index}}
@@ -51,11 +51,22 @@
                 <!-- <span v-else>{{scope.$index}}</span> -->
                 <!-- <span v-else>{{scope.$index}}</span> -->
             </template>
             </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="number" label="订单编号" />
-        <el-table-column prop="title" label="司机姓名" />
-         <el-table-column prop="issuingDate" label="开户行" />
-        <el-table-column prop="issuingAgency" label="银行卡号" />
-        <el-table-column prop="updateDate" label="付款类型" />
+        <el-table-column prop="orderNo" label="订单编号" >
+          <template scope="scope">
+              <span>{{scope.row.orderNo}}</span>
+              <span class="pad_css" v-if="scope.row.freightAdvance == '1'">垫</span>
+            </template>
+        </el-table-column>
+        <el-table-column prop="driverName" label="司机姓名" />
+         <el-table-column prop="issuingDate" label="开户行" >
+            <template scope="scope">
+              <span>{{scope.row.bankDeposit}}-{{scope.row.bankDepositBranch}}</span>
+            </template>
+        </el-table-column>
+        <el-table-column prop="bankCard" label="银行卡号" />
+        <el-table-column prop="paymentType" label="付款类型" />
+        <el-table-column prop="amountMoney" label="金额(元)" />
+        <el-table-column prop="paymentDate" label="付款时间" />
         <el-table-column prop="status" label="状态" >
         <el-table-column prop="status" label="状态" >
           <template scope="scope">
           <template scope="scope">
             <span>{{scope.row.status}}</span>
             <span>{{scope.row.status}}</span>
@@ -64,7 +75,6 @@
         <el-table-column label="操作" min-width="300">
         <el-table-column label="操作" min-width="300">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <el-link v-if='scope.row.status!="已付款"' target="_blank" type="primary" :underline="false" @click="payment(scope.row)">付款</el-link>
             <el-link v-if='scope.row.status!="已付款"' target="_blank" type="primary" :underline="false" @click="payment(scope.row)">付款</el-link>
-           
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
@@ -76,7 +86,9 @@
 </template>
 </template>
 <script>
 <script>
 import {
 import {
-  getListwithdrawal
+  getListdriverfreight,
+  deferpay,
+  batchpay
 } from '@/api/settlementManagement'
 } from '@/api/settlementManagement'
   export default {
   export default {
     data() {
     data() {
@@ -93,6 +105,7 @@ import {
         deptCircularPage: {},
         deptCircularPage: {},
         multipleSelection:[],
         multipleSelection:[],
         search: 1,
         search: 1,
+        searchType:'1',
         disabled: false,
         disabled: false,
       }
       }
     },
     },
@@ -101,6 +114,17 @@ import {
       this.getList()
       this.getList()
     },
     },
     methods: {
     methods: {
+      checkSelectable(row) {
+        if(row.status!='已付款'){
+          return true
+        }else{
+          return false
+        }
+      },
+      searchBtn(status){
+        this.searchType=status
+        this.getList()
+      },
       dateChange(e) {
       dateChange(e) {
         this.startDate = e[0]
         this.startDate = e[0]
         this.endDate = e[1]
         this.endDate = e[1]
@@ -142,9 +166,9 @@ import {
           })
           })
           .then(() => {
           .then(() => {
             this.listLoading = true
             this.listLoading = true
-            var _del = {}
-            _del.id = row.id
-            delFormData(_del).then(response => {
+            var _obj = {}
+            _obj.hyFreightSettlementInfos=this.multipleSelection
+            deferpay(_obj).then(response => {
                 this.$notify({
                 this.$notify({
                   title: '成功',
                   title: '成功',
                   message: '操作成功!',
                   message: '操作成功!',
@@ -168,16 +192,24 @@ import {
       },
       },
       batchpayment(){
       batchpayment(){
         if(this.multipleSelection.length>0){
         if(this.multipleSelection.length>0){
-          this.$confirm('确定支付张三等5人运费合计6000.000元?', '提示', {
+          var money=0
+          var name=[]
+          for (let i = 0; i < this.multipleSelection.length; i++) {
+            money+=this.multipleSelection[i].amountMoney
+            if(name.indexOf(this.multipleSelection[i].driverName)==-1){
+              name.push(this.multipleSelection[i].driverName)
+            }
+          }
+          this.$confirm(`确定支付${this.multipleSelection[0].driverName}等${name.length}人运费合计${money}元?`, '提示', {
             confirmButtonText: '确定',
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             cancelButtonText: '取消',
             type: 'warning'
             type: 'warning'
           })
           })
           .then(() => {
           .then(() => {
             this.listLoading = true
             this.listLoading = true
-            var _del = {}
-            _del.id = row.id
-            delFormData(_del).then(response => {
+            var _obj = {}
+            _obj.hyFreightSettlementInfos = this.multipleSelection
+            batchpay(_obj).then(response => {
                 this.$notify({
                 this.$notify({
                   title: '成功',
                   title: '成功',
                   message: '支付成功!',
                   message: '支付成功!',
@@ -199,16 +231,16 @@ import {
         }
         }
       },
       },
       payment(row){
       payment(row){
-        this.$confirm('确定支付张三等5人运费合计6000.000元?', '提示', {
+        this.$confirm(`确定支付${row.driverName}运费${row.amountMoney}元?`, '提示', {
             confirmButtonText: '确定',
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             cancelButtonText: '取消',
             type: 'warning'
             type: 'warning'
           })
           })
           .then(() => {
           .then(() => {
             this.listLoading = true
             this.listLoading = true
-            var _del = {}
-            _del.id = row.id
-            delFormData(_del).then(response => {
+            var _obj = {}
+            _obj.hyFreightSettlementInfos = [row]
+            batchpay(_obj).then(response => {
                 this.$notify({
                 this.$notify({
                   title: '成功',
                   title: '成功',
                   message: '支付成功!',
                   message: '支付成功!',
@@ -233,8 +265,8 @@ import {
         _obj.searchKeyWord = this.searchkeyWord
         _obj.searchKeyWord = this.searchkeyWord
         _obj.startDate =  this.startDate
         _obj.startDate =  this.startDate
         _obj.endDate= this.endDate
         _obj.endDate= this.endDate
-        _obj.searchType = '公告'
-        getList(_obj).then(response => {
+        _obj.searchType = this.searchType
+        getListdriverfreight(_obj).then(response => {
             this.tableData = response.data.records
             this.tableData = response.data.records
             this.deptBudgetTotal = response.data.total
             this.deptBudgetTotal = response.data.total
             this.listLoading = false
             this.listLoading = false
@@ -544,4 +576,10 @@ import {
   .find::v-deep input.el-input__inner{
   .find::v-deep input.el-input__inner{
     border-radius:0;
     border-radius:0;
   }
   }
+  .pad_css {
+    background: #F0F4FF;
+    color: #2F53EB;
+    padding: 2px;
+    margin-left: 10px;
+  }
 </style>
 </style>

+ 2 - 2
vue.config.js

@@ -55,8 +55,8 @@ module.exports = {
         },
         },
         proxy: {
         proxy: {
             '/pb': {
             '/pb': {
-                // target: 'http://192.168.110.67:8099/', 
-                target: 'http://192.168.110.9:8099/',       
+                target: 'http://192.168.110.67:8999/', 
+                // target: 'http://192.168.110.9:8099/',       
                 // target: 'https://apitest.eliangeyun.com',
                 // target: 'https://apitest.eliangeyun.com',
                 changeOrigin: true, // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
                 changeOrigin: true, // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
                 pathRewrite: {
                 pathRewrite: {