Commit 840795adeb249ec5e71009cc71e472b85af82cdc
Merge branch 'branch_dev' of http://gitlab.renniting.cn/web_developers/HSpark into branch_dev
# Conflicts: # .env.development
Showing
25 changed files
with
2360 additions
and
728 deletions
.env.production
package.json
| @@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
| 21 | "normalize.css": "7.0.0", | 21 | "normalize.css": "7.0.0", |
| 22 | "nprogress": "^0.2.0", | 22 | "nprogress": "^0.2.0", |
| 23 | "path-to-regexp": "2.4.0", | 23 | "path-to-regexp": "2.4.0", |
| 24 | + "qrcodejs2": "^0.0.2", | ||
| 24 | "vue": "2.6.10", | 25 | "vue": "2.6.10", |
| 25 | "vue-router": "3.0.6", | 26 | "vue-router": "3.0.6", |
| 26 | "vuex": "3.1.0" | 27 | "vuex": "3.1.0" |
src/api/account.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 获取车主账户 | ||
| 5 | + * @param param | ||
| 6 | + */ | ||
| 7 | +export function getAcctPersonGroupByAcctType(param) { | ||
| 8 | + return request({ | ||
| 9 | + url: '/personPc/acct/getAcctPersonGroupByAcctType', | ||
| 10 | + method: 'post', | ||
| 11 | + data:param | ||
| 12 | + }) | ||
| 13 | +} | ||
| 14 | +/** | ||
| 15 | + * 分页查询车主支出详情 | ||
| 16 | + * @param param | ||
| 17 | + */ | ||
| 18 | +export function queryAcctPayOutForPage(param) { | ||
| 19 | + return request({ | ||
| 20 | + url: '/personPc/acct/queryAcctPayOutForPage', | ||
| 21 | + method: 'post', | ||
| 22 | + data:param | ||
| 23 | + }) | ||
| 24 | +} | ||
| 25 | +/** | ||
| 26 | + * 分页查询车主收费端充值的收入详情" | ||
| 27 | + * @param param | ||
| 28 | + */ | ||
| 29 | +export function queryCustRechargeFeeStaticMsg(param) { | ||
| 30 | + return request({ | ||
| 31 | + url: '/personPc/acct/queryCustRechargeFeeStaticMsg', | ||
| 32 | + method: 'post', | ||
| 33 | + data:param | ||
| 34 | + }) | ||
| 35 | +} |
src/api/cardticket.js
0 → 100644
src/api/index.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 获取车主首页卡片信息 | ||
| 5 | + * @param param | ||
| 6 | + */ | ||
| 7 | +export function getCustIndexBaseInfo(param) { | ||
| 8 | + return request({ | ||
| 9 | + url: '/personPc/index/getCustIndexBaseInfo', | ||
| 10 | + method: 'post', | ||
| 11 | + data:param | ||
| 12 | + }) | ||
| 13 | +} | ||
| 14 | +/** | ||
| 15 | + * 获取车主月支出 | ||
| 16 | + * @param param | ||
| 17 | + */ | ||
| 18 | +export function queryOwnerPayOutByMonth(param) { | ||
| 19 | + return request({ | ||
| 20 | + url: '/personPc/index/queryOwnerPayOutByMonth', | ||
| 21 | + method: 'post', | ||
| 22 | + data:param | ||
| 23 | + }) | ||
| 24 | +} | ||
| 25 | +/** | ||
| 26 | + * 获取车主停车记录 | ||
| 27 | + * @param param | ||
| 28 | + */ | ||
| 29 | +export function queryOwnerParkRecord(param) { | ||
| 30 | + return request({ | ||
| 31 | + url: '/personPc/index/queryOwnerParkRecord', | ||
| 32 | + method: 'post', | ||
| 33 | + data:param | ||
| 34 | + }) | ||
| 35 | +} | ||
| 36 | +/** | ||
| 37 | + * 分页查询车主欠费记录 | ||
| 38 | + * @param param | ||
| 39 | + */ | ||
| 40 | +export function pageQueryArrearRecordByCondition(param) { | ||
| 41 | + return request({ | ||
| 42 | + url: '/personPc/index/pageQueryArrearRecordByCondition', | ||
| 43 | + method: 'post', | ||
| 44 | + data:param | ||
| 45 | + }) | ||
| 46 | +} | ||
| 47 | +/** | ||
| 48 | + * 补缴获取二维码 | ||
| 49 | + * @param param | ||
| 50 | + */ | ||
| 51 | +export function personOrderBackWxPay(param) { | ||
| 52 | + return request({ | ||
| 53 | + url: '/personPc/wxPay/personOrderBackWxPay', | ||
| 54 | + method: 'post', | ||
| 55 | + data:param | ||
| 56 | + }) | ||
| 57 | +} | ||
| 58 | +/** | ||
| 59 | + * 获取所有组织下拉框 | ||
| 60 | + * @param param | ||
| 61 | + */ | ||
| 62 | +export function selectAllAppOrg(param) { | ||
| 63 | + return request({ | ||
| 64 | + url: '/personPc/index/selectAllAppOrg', | ||
| 65 | + method: 'post', | ||
| 66 | + data:param | ||
| 67 | + }) | ||
| 68 | +} |
src/api/mycar.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 车主查询自己的车牌信息 | ||
| 5 | + */ | ||
| 6 | +export function getPersonCarNumPC() { | ||
| 7 | + return request({ | ||
| 8 | + url: '/personCarNumPc/getPersonCarNumPC', | ||
| 9 | + method: 'post' | ||
| 10 | + }) | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 绑定车牌 | ||
| 15 | + * @param params | ||
| 16 | + */ | ||
| 17 | +export function boundCarNum(params) { | ||
| 18 | + return request({ | ||
| 19 | + url: '/personCarNumPc/boundCarNum', | ||
| 20 | + method: 'post', | ||
| 21 | + params | ||
| 22 | + }) | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * 解绑车牌 | ||
| 27 | + * @param params | ||
| 28 | + */ | ||
| 29 | +export function unboundCarNum() { | ||
| 30 | + return request({ | ||
| 31 | + url: '/personCarNumPc/unboundCarNum', | ||
| 32 | + method: 'post' | ||
| 33 | + }) | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | + |
src/api/mysuggest.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +/** | ||
| 5 | + * 分页查询-投诉建议 | ||
| 6 | + * @param params | ||
| 7 | + */ | ||
| 8 | +export function queryFeedbackAndSuggestForPage(params){ | ||
| 9 | + return request({ | ||
| 10 | + url: '/personPc/suggest/queryFeedbackAndSuggestForPage', | ||
| 11 | + method: 'post', | ||
| 12 | + data:params | ||
| 13 | + }) | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * 问题类型 | ||
| 19 | + * @param params | ||
| 20 | + */ | ||
| 21 | +export function getFeedbackType(params){ | ||
| 22 | + return request({ | ||
| 23 | + url: '/personPc/suggest/getFeedbackType', | ||
| 24 | + method: 'post', | ||
| 25 | + data:params | ||
| 26 | + }) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * 问题类型 | ||
| 32 | + * @param params | ||
| 33 | + */ | ||
| 34 | +export function saveFeedbackAndSuggest(params){ | ||
| 35 | + return request({ | ||
| 36 | + url: '/personPc/suggest/saveFeedbackAndSuggest', | ||
| 37 | + method: 'post', | ||
| 38 | + data:params | ||
| 39 | + }) | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + | ||
| 46 | + |
src/api/user.js
| @@ -9,7 +9,6 @@ export function login(data) { | @@ -9,7 +9,6 @@ export function login(data) { | ||
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | export function getInfo(token) { | 11 | export function getInfo(token) { |
| 12 | - debugger | ||
| 13 | return request({ | 12 | return request({ |
| 14 | url: '/personPc/getUserInfo', | 13 | url: '/personPc/getUserInfo', |
| 15 | method: 'post', | 14 | method: 'post', |
| @@ -35,3 +34,25 @@ export function logout() { | @@ -35,3 +34,25 @@ export function logout() { | ||
| 35 | method: 'post' | 34 | method: 'post' |
| 36 | }) | 35 | }) |
| 37 | } | 36 | } |
| 37 | + | ||
| 38 | +export function uploadUserPic(file){ | ||
| 39 | + debugger | ||
| 40 | + return request({ | ||
| 41 | + url: '/personPc/uploadUserPic', | ||
| 42 | + method: 'post', | ||
| 43 | + data:file | ||
| 44 | + }) | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +/** | ||
| 48 | + * 更新个人客户信息 | ||
| 49 | + * @param params | ||
| 50 | + */ | ||
| 51 | +export function updatePersonByCustId(params){ | ||
| 52 | + return request({ | ||
| 53 | + url: '/personPc/updatePersonBycustId', | ||
| 54 | + method: 'post', | ||
| 55 | + data:params | ||
| 56 | + }) | ||
| 57 | +} | ||
| 58 | + |
src/filters/index.js
0 → 100644
| 1 | +// import parseTime, formatTime and set to filter | ||
| 2 | +export { parseTime, formatTime } from '@/utils' | ||
| 3 | +let moment = require("moment"); | ||
| 4 | +/** | ||
| 5 | + * Show plural label if time is plural number | ||
| 6 | + * @param {number} time | ||
| 7 | + * @param {string} label | ||
| 8 | + * @return {string} | ||
| 9 | + */ | ||
| 10 | +function pluralize(time, label) { | ||
| 11 | + if (time === 1) { | ||
| 12 | + return time + label | ||
| 13 | + } | ||
| 14 | + return time + label + 's' | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * @param {number} time | ||
| 19 | + */ | ||
| 20 | +export function timeAgo(time) { | ||
| 21 | + const between = Date.now() / 1000 - Number(time) | ||
| 22 | + if (between < 3600) { | ||
| 23 | + return pluralize(~~(between / 60), ' minute') | ||
| 24 | + } else if (between < 86400) { | ||
| 25 | + return pluralize(~~(between / 3600), ' hour') | ||
| 26 | + } else { | ||
| 27 | + return pluralize(~~(between / 86400), ' day') | ||
| 28 | + } | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Number formatting | ||
| 33 | + * like 10000 => 10k | ||
| 34 | + * @param {number} num | ||
| 35 | + * @param {number} digits | ||
| 36 | + */ | ||
| 37 | +export function numberFormatter(num, digits) { | ||
| 38 | + const si = [ | ||
| 39 | + { value: 1E18, symbol: 'E' }, | ||
| 40 | + { value: 1E15, symbol: 'P' }, | ||
| 41 | + { value: 1E12, symbol: 'T' }, | ||
| 42 | + { value: 1E9, symbol: 'G' }, | ||
| 43 | + { value: 1E6, symbol: 'M' }, | ||
| 44 | + { value: 1E3, symbol: 'k' } | ||
| 45 | + ] | ||
| 46 | + for (let i = 0; i < si.length; i++) { | ||
| 47 | + if (num >= si[i].value) { | ||
| 48 | + return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + return num.toString() | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +/** | ||
| 55 | + * 10000 => "10,000" | ||
| 56 | + * @param {number} num | ||
| 57 | + */ | ||
| 58 | +export function toThousandFilter(num) { | ||
| 59 | + return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ',')) | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +/** | ||
| 63 | + * 分转元 | ||
| 64 | + * @param {number} num | ||
| 65 | + */ | ||
| 66 | +export function fen2Yuan(num) { | ||
| 67 | + if(num == undefined || num == null){ | ||
| 68 | + return 0; | ||
| 69 | + } | ||
| 70 | + num = num / 100; | ||
| 71 | + return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ',')) | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +/** | ||
| 75 | + * Upper case first char | ||
| 76 | + * @param {String} string | ||
| 77 | + */ | ||
| 78 | +export function uppercaseFirst(string) { | ||
| 79 | + return string.charAt(0).toUpperCase() + string.slice(1) | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +/** | ||
| 83 | + * 将制定格式的时间字符串转换成long | ||
| 84 | + * <li>0-yyyyMMdd</li> | ||
| 85 | + * <li>1-yyyy-MM-dd</li> | ||
| 86 | + * <li>2-HHmmss</li> | ||
| 87 | + * <li>3-HH:mm:ss</li> | ||
| 88 | + * <li>4-HHmmssSSS</li> | ||
| 89 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 90 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 91 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 92 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 93 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 94 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 95 | + * <li>11-yyyy/MM/dd HH:mm:ss</li> | ||
| 96 | + * </ul> | ||
| 97 | + */ | ||
| 98 | +export function string2Long(str, format) { | ||
| 99 | + if (str == null || str == "") { | ||
| 100 | + return ""; | ||
| 101 | + } | ||
| 102 | + return date2Long(string2Date(str, format)); | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +export function date2Long (date) { | ||
| 106 | + return date.getTime(); | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +/** | ||
| 110 | + * 将字符串转化为相应时间 | ||
| 111 | + * | ||
| 112 | + * @param {} | ||
| 113 | + * dateStr 时间字符串 | ||
| 114 | + * @param {} | ||
| 115 | + * formatType 指定格式: | ||
| 116 | + * <ul> | ||
| 117 | + * <li>0-yyyyMMdd</li> | ||
| 118 | + * <li>1-yyyy-MM-dd</li> | ||
| 119 | + * <li>2-HHmmss</li> | ||
| 120 | + * <li>3-HH:mm:ss</li> | ||
| 121 | + * <li>4-HHmmssSSS</li> | ||
| 122 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 123 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 124 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 125 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 126 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 127 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 128 | + * <li>11-yyyy/MM/dd HH:mm:ss</li> | ||
| 129 | + | ||
| 130 | + * </ul> | ||
| 131 | + * @return 解析后的Date对象 | ||
| 132 | + */ | ||
| 133 | +export function string2Date(date,formatType) { | ||
| 134 | + if(date == null || date == undefined){ | ||
| 135 | + return ""; | ||
| 136 | + } | ||
| 137 | + let dateTime; | ||
| 138 | + switch (formatType) { | ||
| 139 | + case 0 : | ||
| 140 | + dateTime= moment(date).format("YYYYMMDD"); | ||
| 141 | + break; | ||
| 142 | + case 1 : | ||
| 143 | + dateTime= moment(date).format("YYYY-MM-DD"); | ||
| 144 | + break; | ||
| 145 | + case 2 : | ||
| 146 | + dateTime= moment(date).format("HHmmss"); | ||
| 147 | + break; | ||
| 148 | + case 3 : | ||
| 149 | + dateTime= moment(date).format("HH:mm:ss"); | ||
| 150 | + break; | ||
| 151 | + case 4 : | ||
| 152 | + dateTime= moment(date).format("HHmmssSSS"); | ||
| 153 | + break; | ||
| 154 | + case 5 : | ||
| 155 | + dateTime= moment(date).format("HH:mm:ss.SSS"); | ||
| 156 | + break; | ||
| 157 | + case 6 : | ||
| 158 | + dateTime= moment(date).format("YYYY-MM-DDHHmmss"); | ||
| 159 | + break; | ||
| 160 | + case 7 : | ||
| 161 | + dateTime= moment(date).format("YYYY-MM-DD HH:mm:ss"); | ||
| 162 | + | ||
| 163 | + break; | ||
| 164 | + case 8 : | ||
| 165 | + dateTime= moment(date).format("yyyyMMddHHmmssSSS"); | ||
| 166 | + break; | ||
| 167 | + case 9 : | ||
| 168 | + dateTime= moment(date).format("yyyy-MM-dd HH:mm:ss.SSS"); | ||
| 169 | + break; | ||
| 170 | + case 10 ://yyyy/MM/dd HH:mm | ||
| 171 | + dateTime= moment(date).format("yyyy/MM/dd HH:mm"); | ||
| 172 | + break; | ||
| 173 | + case 11 ://yyyy/MM/dd HH:mm:ss | ||
| 174 | + dateTime= moment(date).format("yyyy/MM/dd HH:mm:ss"); | ||
| 175 | + break; | ||
| 176 | + } | ||
| 177 | + return dateTime; | ||
| 178 | +} | ||
| 179 | + | ||
| 180 | +/**类型转换*/ | ||
| 181 | +export function busTypeFomatter(value){ | ||
| 182 | + //业务类型: 1:收入 2:退款 3:支出 | ||
| 183 | + if(value == 1){ | ||
| 184 | + return '交易'; | ||
| 185 | + }else if(value == 2){ | ||
| 186 | + return '退款'; | ||
| 187 | + }else if(value == 3){ | ||
| 188 | + return '支出'; | ||
| 189 | + }else{ | ||
| 190 | + return '未知'; | ||
| 191 | + } | ||
| 192 | +}; | ||
| 193 | +export function payTypeFomatter(value){ | ||
| 194 | + //业务类型: 1:收入 2:退款 3:支出 | ||
| 195 | + if(value == 1){ | ||
| 196 | + return '支付宝'; | ||
| 197 | + }else if(value == 2){ | ||
| 198 | + return '微信'; | ||
| 199 | + }else if(value == 3){ | ||
| 200 | + return '银联'; | ||
| 201 | + }else if(value == 4){ | ||
| 202 | + return '服务号'; | ||
| 203 | + }else{ | ||
| 204 | + return '未知'; | ||
| 205 | + } | ||
| 206 | +}; | ||
| 207 | +export function payOrderTypeFomatter(row,value){ | ||
| 208 | + //101:停车付款单,102:停车预付单,103:停车补缴单,104:共享车位;201:余额充值单,202:押金充值;301:会员卡购买单,302:会员卡续费 | ||
| 209 | + if(value == 101){ | ||
| 210 | + return '交易-临停支付'; | ||
| 211 | + }else if(value == 102){ | ||
| 212 | + return '交易-停车预付'; | ||
| 213 | + }else if(value == 103){ | ||
| 214 | + return '交易-停车补缴'; | ||
| 215 | + }else if(value == 104){ | ||
| 216 | + return '交易-共享车位预定'; | ||
| 217 | + }else if(value == 201){ | ||
| 218 | + if(row.terminalSource!='' ||row.terminalSource!=null ||row.terminalSource!=undefined||row.terminalSource!='null'){ | ||
| 219 | + if(row.terminalSource == 1){ | ||
| 220 | + return '交易-余额充值'; | ||
| 221 | + } else if(row.terminalSource == 2){ | ||
| 222 | + return '交易-收费员充值'; | ||
| 223 | + }else { | ||
| 224 | + return '交易-余额充值'; | ||
| 225 | + } | ||
| 226 | + } | ||
| 227 | + else{ | ||
| 228 | + return '交易-余额充值'; | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + }else if(value == 202){ | ||
| 232 | + return '交易-押金充值'; | ||
| 233 | + }else if(value == 301){ | ||
| 234 | + return '交易-会员卡购买'; | ||
| 235 | + }else if(value == 302){ | ||
| 236 | + return '交易-会员卡续费'; | ||
| 237 | + }else{ | ||
| 238 | + return '未知'; | ||
| 239 | + } | ||
| 240 | +}; | ||
| 241 | + | ||
| 242 | +/** | ||
| 243 | + * 订单状态 | ||
| 244 | + * @param row | ||
| 245 | + * @param value | ||
| 246 | + * @returns {string} | ||
| 247 | + */ | ||
| 248 | +export function inOutStateFormatter(row, value) { | ||
| 249 | + | ||
| 250 | + let orderState = row.orderState; | ||
| 251 | + //停车状态 10:在场 ,20:离场,30:预订 | ||
| 252 | + let parkState = row.parkState; | ||
| 253 | + if (null == parkState) { | ||
| 254 | + if (null != row.parkOutTime) { | ||
| 255 | + parkState = 20; | ||
| 256 | + } else { | ||
| 257 | + parkState = 10; | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + | ||
| 261 | + if (parkState == 10) { | ||
| 262 | + return "在场"; | ||
| 263 | + } | ||
| 264 | + | ||
| 265 | + if (parkState == 20) { | ||
| 266 | + | ||
| 267 | + if (orderState == 52) { | ||
| 268 | + return "欠费"; | ||
| 269 | + }else if (orderState == 53) { | ||
| 270 | + return "欠费已补缴"; | ||
| 271 | + } else { | ||
| 272 | + return "离场"; | ||
| 273 | + } | ||
| 274 | + } | ||
| 275 | +}; | ||
| 276 | + | ||
| 277 | +/** | ||
| 278 | + * 停车时长 | ||
| 279 | + * @param row | ||
| 280 | + * @param value | ||
| 281 | + * @returns {*} | ||
| 282 | + */ | ||
| 283 | +export function parkingDurationFormatter (row, value) { | ||
| 284 | + // | ||
| 285 | + let parkState = row.parkState; | ||
| 286 | + if (null == parkState) { | ||
| 287 | + if (null != row.parkOutTime) { | ||
| 288 | + parkState = 20; | ||
| 289 | + } else { | ||
| 290 | + parkState = 10; | ||
| 291 | + } | ||
| 292 | + } | ||
| 293 | + | ||
| 294 | + let inTime = row.parkInTime; | ||
| 295 | + if (parkState == 10) { | ||
| 296 | + let thisTime = new Date().getTime(); | ||
| 297 | + let parkDuration = (thisTime - inTime) / 1000; | ||
| 298 | + return formatSeconds(parkDuration); | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + | ||
| 302 | + if (value == null) { | ||
| 303 | + return ""; | ||
| 304 | + } else { | ||
| 305 | + return formatSeconds(value); | ||
| 306 | + } | ||
| 307 | +}; | ||
| 308 | +function formatSeconds(value) { | ||
| 309 | + let theTime = parseInt(value);// 秒 | ||
| 310 | + let theTime1 = 0;// 分 | ||
| 311 | + let theTime2 = 0;// 小时 | ||
| 312 | + let theTime3 = 0;//天 | ||
| 313 | + if (theTime < 60) { | ||
| 314 | + return theTime + '秒'; | ||
| 315 | + } | ||
| 316 | + if (theTime > 60) { | ||
| 317 | + theTime1 = parseInt(theTime / 60); | ||
| 318 | + theTime = parseInt(theTime % 60); | ||
| 319 | + | ||
| 320 | + | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + if (theTime1 > 60) { | ||
| 324 | + theTime2 = parseInt(theTime1 / 60); | ||
| 325 | + theTime1 = parseInt(theTime1 % 60); | ||
| 326 | + } | ||
| 327 | + | ||
| 328 | + if (theTime2 > 24) { | ||
| 329 | + theTime3 = parseInt(theTime2 / 24); | ||
| 330 | + theTime2 = parseInt(theTime2 % 24); | ||
| 331 | + } | ||
| 332 | + | ||
| 333 | + let result = ''; | ||
| 334 | + if (theTime1 == 0 && theTime2 == 0 && theTime3 == 0) { | ||
| 335 | + result = parseInt(theTime) + "秒" | ||
| 336 | + } | ||
| 337 | + | ||
| 338 | + if (theTime1 > 0) { | ||
| 339 | + result = "" + parseInt(theTime1) + "分钟" + result; | ||
| 340 | + } | ||
| 341 | + if (theTime2 > 0) { | ||
| 342 | + result = "" + parseInt(theTime2) + "小时" + result; | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + if (theTime3 > 0) { | ||
| 346 | + result = "" + parseInt(theTime3) + "天" + result; | ||
| 347 | + } | ||
| 348 | + return result; | ||
| 349 | +}; |
src/main.js
| @@ -11,6 +11,7 @@ import '@/styles/index.scss' // global css | @@ -11,6 +11,7 @@ import '@/styles/index.scss' // global css | ||
| 11 | import App from './App' | 11 | import App from './App' |
| 12 | import store from './store' | 12 | import store from './store' |
| 13 | import router from './router' | 13 | import router from './router' |
| 14 | +import * as filters from './filters' // global filters | ||
| 14 | 15 | ||
| 15 | import '@/icons' // icon | 16 | import '@/icons' // icon |
| 16 | import '@/permission' // permission control | 17 | import '@/permission' // permission control |
| @@ -28,6 +29,10 @@ import '@/permission' // permission control | @@ -28,6 +29,10 @@ import '@/permission' // permission control | ||
| 28 | // mockXHR() | 29 | // mockXHR() |
| 29 | // } | 30 | // } |
| 30 | 31 | ||
| 32 | +// register global utility filters | ||
| 33 | +Object.keys(filters).forEach(key => { | ||
| 34 | + Vue.filter(key, filters[key]) | ||
| 35 | +}) | ||
| 31 | // set ElementUI lang to EN | 36 | // set ElementUI lang to EN |
| 32 | Vue.use(ElementUI, { locale }) | 37 | Vue.use(ElementUI, { locale }) |
| 33 | 38 |
src/router/index.js
| @@ -123,11 +123,6 @@ export const constantRoutes = [ | @@ -123,11 +123,6 @@ export const constantRoutes = [ | ||
| 123 | meta: { title: '个人资料' } | 123 | meta: { title: '个人资料' } |
| 124 | }, | 124 | }, |
| 125 | { | 125 | { |
| 126 | - path: 'settings', | ||
| 127 | - component: () => import('@/views/settings/index'), | ||
| 128 | - meta: { title: '账户设置' }, | ||
| 129 | - }, | ||
| 130 | - { | ||
| 131 | path: 'myevaluate', | 126 | path: 'myevaluate', |
| 132 | component: () => import('@/views/myevaluate/index'), | 127 | component: () => import('@/views/myevaluate/index'), |
| 133 | meta: { title: '我的评价' } | 128 | meta: { title: '我的评价' } |
src/store/modules/user.js
| @@ -32,7 +32,6 @@ const actions = { | @@ -32,7 +32,6 @@ const actions = { | ||
| 32 | return new Promise((resolve, reject) => { | 32 | return new Promise((resolve, reject) => { |
| 33 | login({ userPhone: phone.trim(), validatorCode: password }).then(response => { | 33 | login({ userPhone: phone.trim(), validatorCode: password }).then(response => { |
| 34 | const { data } = response | 34 | const { data } = response |
| 35 | - debugger; | ||
| 36 | commit('SET_TOKEN', data.token) | 35 | commit('SET_TOKEN', data.token) |
| 37 | setToken(data.token) | 36 | setToken(data.token) |
| 38 | resolve() | 37 | resolve() |
| @@ -45,14 +44,11 @@ const actions = { | @@ -45,14 +44,11 @@ const actions = { | ||
| 45 | // get user info | 44 | // get user info |
| 46 | getInfo({ commit, state }) { | 45 | getInfo({ commit, state }) { |
| 47 | return new Promise((resolve, reject) => { | 46 | return new Promise((resolve, reject) => { |
| 48 | - debugger | ||
| 49 | getInfo(state.token).then(response => { | 47 | getInfo(state.token).then(response => { |
| 50 | const { data } = response | 48 | const { data } = response |
| 51 | - | ||
| 52 | if (!data) { | 49 | if (!data) { |
| 53 | reject('Verification failed, please Login again.') | 50 | reject('Verification failed, please Login again.') |
| 54 | } | 51 | } |
| 55 | - | ||
| 56 | const { custName, headPicUrl } = data | 52 | const { custName, headPicUrl } = data |
| 57 | 53 | ||
| 58 | commit('SET_NAME', custName) | 54 | commit('SET_NAME', custName) |
src/utils/DateUtils.js
0 → 100755
| 1 | +/** | ||
| 2 | + * 时间处理工具 | ||
| 3 | + * | ||
| 4 | + * @type | ||
| 5 | + * @author miaofc | ||
| 6 | + */ | ||
| 7 | +export default { | ||
| 8 | + | ||
| 9 | + /** | ||
| 10 | + * 日期对象转换为毫秒数 | ||
| 11 | + */ | ||
| 12 | + | ||
| 13 | + date2Long: function (date) { | ||
| 14 | + return date.getTime(); | ||
| 15 | + }, | ||
| 16 | + /** | ||
| 17 | + * 毫秒转换为日期对象 | ||
| 18 | + * @param dateVal number 日期的毫秒数 | ||
| 19 | + */ | ||
| 20 | + long2Date: function (dateVal) { | ||
| 21 | + return new Date(dateVal); | ||
| 22 | + }, | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 将制定格式的时间字符串转换成long | ||
| 26 | + * <li>0-yyyyMMdd</li> | ||
| 27 | + * <li>1-yyyy-MM-dd</li> | ||
| 28 | + * <li>2-HHmmss</li> | ||
| 29 | + * <li>3-HH:mm:ss</li> | ||
| 30 | + * <li>4-HHmmssSSS</li> | ||
| 31 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 32 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 33 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 34 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 35 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 36 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 37 | + * <li>11-yyyy/MM/dd HH:mm:ss</li> | ||
| 38 | + * </ul> | ||
| 39 | + */ | ||
| 40 | + string2Long: function (str, format) { | ||
| 41 | + if (str == null || str == "") { | ||
| 42 | + return ""; | ||
| 43 | + } | ||
| 44 | + return this.date2Long(this.string2Date(str, format)); | ||
| 45 | + }, | ||
| 46 | + | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 毫秒转换为日期对象 | ||
| 50 | + * | ||
| 51 | + * @param dateVal | ||
| 52 | + * | ||
| 53 | + | ||
| 54 | + */ | ||
| 55 | + long2String: function (dateVal, formatType) { | ||
| 56 | + if (dateVal == undefined || dateVal == null) { | ||
| 57 | + return '-' | ||
| 58 | + } | ||
| 59 | + return this.date2String(new Date(dateVal), formatType); | ||
| 60 | + }, | ||
| 61 | + | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * 将时间转化为相应字符串 | ||
| 65 | + * | ||
| 66 | + * @param {} | ||
| 67 | + * date 待格式化的Date对象 | ||
| 68 | + * @param {} | ||
| 69 | + * formatType 指定格式: | ||
| 70 | + * <ul> | ||
| 71 | + * <li>0-yyyyMMdd</li> | ||
| 72 | + * <li>1-yyyy-MM-dd</li> | ||
| 73 | + * <li>2-HHmmss</li> | ||
| 74 | + * <li>3-HH:mm:ss</li> | ||
| 75 | + * <li>4-HHmmssSSS</li> | ||
| 76 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 77 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 78 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 79 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 80 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 81 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 82 | + * </ul> | ||
| 83 | + * @return string 格式化后的字符串 | ||
| 84 | + */ | ||
| 85 | + date2String: function (date, formatType) { | ||
| 86 | + if (undefined == date || null == date) { | ||
| 87 | + return '-'; | ||
| 88 | + } | ||
| 89 | + // 格式化字符串数组 | ||
| 90 | + var patterns = ["yyyyMMdd", "yyyy-MM-dd", "HHmmss", "HH:mm:ss", "HHmmssSSS", "HH:mm:ss.SSS", "yyyyMMddHHmmss", "yyyy-MM-dd HH:mm:ss", "yyyyMMddHHmmssSSS", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd", "yyyy-MM", "HH:mm"]; | ||
| 91 | + return this.formatDate(date, patterns[formatType]); | ||
| 92 | + }, | ||
| 93 | + | ||
| 94 | + /** | ||
| 95 | + * 将字符串转化为相应时间 | ||
| 96 | + * | ||
| 97 | + * @param {} | ||
| 98 | + * dateStr 时间字符串 | ||
| 99 | + * @param {} | ||
| 100 | + * formatType 指定格式: | ||
| 101 | + * <ul> | ||
| 102 | + * <li>0-yyyyMMdd</li> | ||
| 103 | + * <li>1-yyyy-MM-dd</li> | ||
| 104 | + * <li>2-HHmmss</li> | ||
| 105 | + * <li>3-HH:mm:ss</li> | ||
| 106 | + * <li>4-HHmmssSSS</li> | ||
| 107 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 108 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 109 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 110 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 111 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 112 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 113 | + * <li>11-yyyy/MM/dd HH:mm:ss</li> | ||
| 114 | + | ||
| 115 | + * </ul> | ||
| 116 | + * @return 解析后的Date对象 | ||
| 117 | + */ | ||
| 118 | + string2Date:function (date,formatType) { | ||
| 119 | + let dateTime; | ||
| 120 | + switch (formatType) { | ||
| 121 | + case 0 : | ||
| 122 | + dateTime= moment(date).format("YYYYMMDD"); | ||
| 123 | + break; | ||
| 124 | + case 1 : | ||
| 125 | + dateTime= moment(date).format("YYYY-MM-DD"); | ||
| 126 | + break; | ||
| 127 | + case 2 : | ||
| 128 | + dateTime= moment(date).format("HHmmss"); | ||
| 129 | + break; | ||
| 130 | + case 3 : | ||
| 131 | + dateTime= moment(date).format("HH:mm:ss"); | ||
| 132 | + break; | ||
| 133 | + case 4 : | ||
| 134 | + dateTime= moment(date).format("HHmmssSSS"); | ||
| 135 | + break; | ||
| 136 | + case 5 : | ||
| 137 | + dateTime= moment(date).format("HH:mm:ss.SSS"); | ||
| 138 | + break; | ||
| 139 | + case 6 : | ||
| 140 | + dateTime= moment(date).format("YYYY-MM-DDHHmmss"); | ||
| 141 | + break; | ||
| 142 | + case 7 : | ||
| 143 | + dateTime= moment(date).format("YYYY-MM-DD HH:mm:ss"); | ||
| 144 | + | ||
| 145 | + break; | ||
| 146 | + case 8 : | ||
| 147 | + dateTime= moment(date).format("yyyyMMddHHmmssSSS"); | ||
| 148 | + break; | ||
| 149 | + case 9 : | ||
| 150 | + dateTime= moment(date).format("yyyy-MM-dd HH:mm:ss.SSS"); | ||
| 151 | + break; | ||
| 152 | + case 10 ://yyyy/MM/dd HH:mm | ||
| 153 | + dateTime= moment(date).format("yyyy/MM/dd HH:mm"); | ||
| 154 | + break; | ||
| 155 | + case 11 ://yyyy/MM/dd HH:mm:ss | ||
| 156 | + dateTime= moment(date).format("yyyy/MM/dd HH:mm:ss"); | ||
| 157 | + break; | ||
| 158 | + } | ||
| 159 | + return dateTime; | ||
| 160 | + }, | ||
| 161 | + /** | ||
| 162 | + * 格式化时间 | ||
| 163 | + * | ||
| 164 | + * @param {} | ||
| 165 | + * date 待格式化的Date对象 | ||
| 166 | + * @param {} | ||
| 167 | + * pattern 格式化模式,可能包含下列字母 | ||
| 168 | + * <ul> | ||
| 169 | + * <li> G 公元前/后 "G":"BC"/"AD" </li> | ||
| 170 | + * <li> y 年份 "yyyy":"1996";"yy":"96" </li> | ||
| 171 | + * <li> M 月份 "MMMM":July;"MMM":Jul;"MM":07 </li> | ||
| 172 | + * <li> d 在某月中的日期 "dd":"10" </li> | ||
| 173 | + * <li> a Am/pm "a":"AM"/"PM" </li> | ||
| 174 | + * <li> H 在某天中的小时(0-23) "HH":"13" </li> | ||
| 175 | + * <li> K 在上午或下午中的小时(0-11) "KK":"03" </li> | ||
| 176 | + * <li> m 分钟 "mm":"10" </li> | ||
| 177 | + * <li> s 秒钟 "ss":"09" </li> | ||
| 178 | + * <li> S 毫秒 "SSS":"978" </li> | ||
| 179 | + * </ul> | ||
| 180 | + * @return 格式化后的字符串 | ||
| 181 | + */ | ||
| 182 | + formatDate: function (date, pattern) { | ||
| 183 | + var dateStr = new String(pattern); | ||
| 184 | + // 格式化公元信息 | ||
| 185 | + dateStr = dateStr.replace("G", date.getFullYear() >= 0 ? "AD" : "BC"); | ||
| 186 | + // 格式化年份信息 | ||
| 187 | + var year = new String(date.getFullYear()); | ||
| 188 | + dateStr = dateStr.replace("yyyy", year); | ||
| 189 | + dateStr = dateStr.replace("yy", year.substring(year.length - 2, year.length)); | ||
| 190 | + // 格式化月份信息 | ||
| 191 | + var month = date.getMonth(); | ||
| 192 | + var monthFullNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; | ||
| 193 | + var monthShortNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; | ||
| 194 | + dateStr = dateStr.replace("MMMM", monthFullNames[month]); | ||
| 195 | + dateStr = dateStr.replace("MMM", monthShortNames[month]); | ||
| 196 | + dateStr = dateStr.replace("MM", month < 9 ? "0" + (month + 1) : month + 1); | ||
| 197 | + // 格式化月份中的日期 | ||
| 198 | + var day = date.getDate(); | ||
| 199 | + dateStr = dateStr.replace("dd", day < 10 ? "0" + day : day); | ||
| 200 | + // 格式化上下午 | ||
| 201 | + dateStr = dateStr.replace("a", date.getHours() < 12 ? "AM" : "PM"); | ||
| 202 | + // 格式化小时 | ||
| 203 | + var hour = date.getHours(); | ||
| 204 | + dateStr = dateStr.replace("HH", hour < 10 ? "0" + hour : hour); | ||
| 205 | + var khour = hour > 11 ? hour - 12 : hour; | ||
| 206 | + dateStr = dateStr.replace("KK", khour < 10 ? "0" + khour : khour); | ||
| 207 | + // 格式化分钟 | ||
| 208 | + var minute = date.getMinutes(); | ||
| 209 | + dateStr = dateStr.replace("mm", minute < 10 ? "0" + minute : minute); | ||
| 210 | + // 格式化秒钟 | ||
| 211 | + var second = date.getSeconds(); | ||
| 212 | + dateStr = dateStr.replace("ss", second < 10 ? "0" + second : second); | ||
| 213 | + // 格式化毫秒 | ||
| 214 | + var millisecond = date.getMilliseconds(); | ||
| 215 | + dateStr = dateStr.replace("SSS", millisecond < 10 ? "00" + millisecond : (millisecond < 100 ? "0" + millisecond : millisecond)); | ||
| 216 | + return dateStr; | ||
| 217 | + }, | ||
| 218 | + | ||
| 219 | + /** | ||
| 220 | + * 取得date在域field上偏移amount后的值 | ||
| 221 | + * | ||
| 222 | + * @param {} | ||
| 223 | + * date 原始时间 | ||
| 224 | + * @param {} | ||
| 225 | + * field 偏移域,可能的取值: | ||
| 226 | + * <ul> | ||
| 227 | + * <li>"year"/"y":年</li> | ||
| 228 | + * <li>"month"/"M":月</li> | ||
| 229 | + * <li>"day"/"d":日</li> | ||
| 230 | + * <li>"hour"/"h":时</li> | ||
| 231 | + * <li>"minute"/"m":分</li> | ||
| 232 | + * <li>"second"/"s":秒</li> | ||
| 233 | + * <li>"millisecond"/"ms"/"S":毫秒</li> | ||
| 234 | + * </ul> | ||
| 235 | + * @param {} | ||
| 236 | + * amount 偏移量 | ||
| 237 | + * @return 偏移后的时间 | ||
| 238 | + */ | ||
| 239 | + dateOffset: function (date, field, amount) { | ||
| 240 | + var mount = 0; | ||
| 241 | + switch (field) { | ||
| 242 | + // 以年为单位位移 | ||
| 243 | + case "year", "y": | ||
| 244 | + mount = 31536000 * 1000; | ||
| 245 | + // newDate.setFullYear(date.getFullYear()+amount); | ||
| 246 | + break; | ||
| 247 | + // 以月份为单位位移 | ||
| 248 | + case "month", "M": | ||
| 249 | + mount = 30 * 24 * 60 * 60 * 1000; | ||
| 250 | + // newDate.setMonth(date.getMonth()+amount); | ||
| 251 | + break; | ||
| 252 | + // 以天为单位位移 | ||
| 253 | + case "day", "d": | ||
| 254 | + mount = 24 * 60 * 60 * 1000; | ||
| 255 | + // newDate.setDate(date.getDate()+amount); | ||
| 256 | + break; | ||
| 257 | + // 以小时为单位位移 | ||
| 258 | + case "hour", "h": | ||
| 259 | + mount = 60 * 60 * 1000; | ||
| 260 | + // newDate.setHours(date.getHours()+amount); | ||
| 261 | + break; | ||
| 262 | + // 以分钟为单位位移 | ||
| 263 | + case "minute", "m": | ||
| 264 | + mount = 60 * 1000; | ||
| 265 | + // newDate.setMinutes(date.getMinutes()+amount); | ||
| 266 | + break; | ||
| 267 | + // 以秒为单位位移 | ||
| 268 | + case "second", "s": | ||
| 269 | + mount = 1000; | ||
| 270 | + // newDate.setSeconds(date.getSeconds+amount); | ||
| 271 | + break; | ||
| 272 | + // 以毫秒为单位位移 | ||
| 273 | + case "millisecond", "ms", "S": | ||
| 274 | + mount = 1; | ||
| 275 | + // newDate.setMilliseconds(date.getMilliseconds+amount); | ||
| 276 | + break; | ||
| 277 | + } | ||
| 278 | + var newDate = new Date(date.getTime() + Number(mount) * Number(amount)); | ||
| 279 | + return newDate; | ||
| 280 | + }, | ||
| 281 | + | ||
| 282 | + /** | ||
| 283 | + * 求两个日期间相差的毫秒数 | ||
| 284 | + * | ||
| 285 | + * @param {} | ||
| 286 | + * date1 时间1 | ||
| 287 | + * @param {} | ||
| 288 | + * date2 时间2 | ||
| 289 | + * @return 两个时间相差的毫秒数 | ||
| 290 | + */ | ||
| 291 | + getDiffMillis: function (date1, date2) { | ||
| 292 | + return date1.getTime() - date2.getTime(); | ||
| 293 | + }, | ||
| 294 | + | ||
| 295 | + /** | ||
| 296 | + * 求两个日期间相差的秒数 | ||
| 297 | + * | ||
| 298 | + * @param {} | ||
| 299 | + * date1 时间1 | ||
| 300 | + * @param {} | ||
| 301 | + * date2 时间2 | ||
| 302 | + * @return 两个时间相差的秒数 | ||
| 303 | + */ | ||
| 304 | + getDiffSeconds: function (date1, date2) { | ||
| 305 | + return Math.floor(this.getDiffMillis(date1, date2) / 1000); | ||
| 306 | + }, | ||
| 307 | + | ||
| 308 | + /** | ||
| 309 | + * 求两个日期间相差的分钟数目 | ||
| 310 | + * | ||
| 311 | + * @param {} | ||
| 312 | + * date1 时间1 | ||
| 313 | + * @param {} | ||
| 314 | + * date2 时间2 | ||
| 315 | + * @return 两个时间相差的分钟数 | ||
| 316 | + */ | ||
| 317 | + getDiffMinutes: function (date1, date2) { | ||
| 318 | + return Math.floor(this.getDiffSeconds(date1, date2) / 60); | ||
| 319 | + }, | ||
| 320 | + | ||
| 321 | + /** | ||
| 322 | + * 求两个日期间相差的小时数目 | ||
| 323 | + * | ||
| 324 | + * @param {} | ||
| 325 | + * date1 时间1 | ||
| 326 | + * @param {} | ||
| 327 | + * date2 时间2 | ||
| 328 | + * @return 两个时间相差的小时数 | ||
| 329 | + */ | ||
| 330 | + getDiffHours: function (date1, date2) { | ||
| 331 | + return Math.floor(this.getDiffMinutes(date1, date2) / 60); | ||
| 332 | + }, | ||
| 333 | + | ||
| 334 | + /** | ||
| 335 | + * 求两个日期间相差的天数 | ||
| 336 | + * | ||
| 337 | + * @param {} | ||
| 338 | + * date1 时间1 | ||
| 339 | + * @param {} | ||
| 340 | + * date2 时间2 | ||
| 341 | + * @return 两个时间相差的天数 | ||
| 342 | + */ | ||
| 343 | + getDiffDays: function (date1, date2) { | ||
| 344 | + return Math.floor(this.getDiffHours(date1, date2) / 24); | ||
| 345 | + }, | ||
| 346 | + | ||
| 347 | + /** | ||
| 348 | + * 求两个日期间相差的月数目。认为每个月均为30天。 | ||
| 349 | + * | ||
| 350 | + * @param {} | ||
| 351 | + * date1 时间1 | ||
| 352 | + * @param {} | ||
| 353 | + * date2 时间2 | ||
| 354 | + * @return 两个时间相差的月树 | ||
| 355 | + */ | ||
| 356 | + getDiffMonths: function (date1, date2) { | ||
| 357 | + return Math.floor(this.getDiffDays(date1, date2) / 30); | ||
| 358 | + }, | ||
| 359 | + | ||
| 360 | + /** | ||
| 361 | + * 求两个日期间相差的自然月数目 | ||
| 362 | + * | ||
| 363 | + * @param {} | ||
| 364 | + * date1 时间1 | ||
| 365 | + * @param {} | ||
| 366 | + * date2 时间2 | ||
| 367 | + * @return 两个时间相差的自然月数 | ||
| 368 | + */ | ||
| 369 | + getDiffNaturalMonth: function (date1, date2) { | ||
| 370 | + var month1 = date1.getMonth(); | ||
| 371 | + var month2 = date2.getMonth(); | ||
| 372 | + return this.getDiffYears(date1, date2) * 12 - (month2 - month1); | ||
| 373 | + }, | ||
| 374 | + | ||
| 375 | + /** | ||
| 376 | + * 求两个日期间相差的年数目 | ||
| 377 | + * | ||
| 378 | + * @param {} | ||
| 379 | + * date1 时间1 | ||
| 380 | + * @param {} | ||
| 381 | + * date2 时间2 | ||
| 382 | + * @return 两个时间相差的年数 | ||
| 383 | + */ | ||
| 384 | + getDiffYears: function (date1, date2) { | ||
| 385 | + return date1.getFullYear() - date2.getFullYear(); | ||
| 386 | + }, | ||
| 387 | + | ||
| 388 | + /** | ||
| 389 | + * 求日期为其所在月份的第几天 | ||
| 390 | + * | ||
| 391 | + * @param {} | ||
| 392 | + * day 目标日 | ||
| 393 | + * @return 目标日是第几天。天数从1开始 | ||
| 394 | + */ | ||
| 395 | + getOrinalOfDayInYear: function (day) { | ||
| 396 | + // 得到一年中的第一天 | ||
| 397 | + var firstDay = new Date(day.getFullYear, 0, 1); | ||
| 398 | + // 计算与第一天的差值 | ||
| 399 | + return this.getDiffDays(day, firstDay) + 1; | ||
| 400 | + }, | ||
| 401 | + | ||
| 402 | + /** | ||
| 403 | + * 求日期为其所在月份的第几天 | ||
| 404 | + * | ||
| 405 | + * @param {} | ||
| 406 | + * day 目标日 | ||
| 407 | + * @return 目标日是第几天。天数从1开始 | ||
| 408 | + */ | ||
| 409 | + getOrinalOfDayInMonth: function (day) { | ||
| 410 | + // 得到一个月中的第一天 | ||
| 411 | + var firstDay = new Date(day.getFullYear, day.getMonth(), 1); | ||
| 412 | + // 计算与第一天的差值 | ||
| 413 | + return this.getDiffDays(day, firstDay) + 1; | ||
| 414 | + }, | ||
| 415 | + | ||
| 416 | + /** | ||
| 417 | + * 求日期为其所在周的第几天 | ||
| 418 | + * | ||
| 419 | + * @param {} | ||
| 420 | + * day 目标日 | ||
| 421 | + * @return 目标日是第几天。天数从1开始 | ||
| 422 | + */ | ||
| 423 | + getOrinalOfDayInWeek: function (day) { | ||
| 424 | + return day.getDay() + 1; | ||
| 425 | + }, | ||
| 426 | + | ||
| 427 | + /** | ||
| 428 | + * 求某年共有多少天 | ||
| 429 | + * | ||
| 430 | + * @param {} | ||
| 431 | + * year 年份 | ||
| 432 | + * @return 该年份共有多少天 | ||
| 433 | + */ | ||
| 434 | + getNumberOfDaysInYear: function (year) { | ||
| 435 | + // 若该年份为闰年,返回366 | ||
| 436 | + if ((year % 100 != 0 && year % 4 == 0) || (year % 400 == 0)) { | ||
| 437 | + return 366; | ||
| 438 | + } | ||
| 439 | + // 普通年份返回365 | ||
| 440 | + return 365; | ||
| 441 | + }, | ||
| 442 | + | ||
| 443 | + /** | ||
| 444 | + * 求某月共有多少天 | ||
| 445 | + * | ||
| 446 | + * @param {} | ||
| 447 | + * year 年份 | ||
| 448 | + * @param {} | ||
| 449 | + * month 月份 | ||
| 450 | + * @return 该月内共有多少天 | ||
| 451 | + */ | ||
| 452 | + getNumberOfDaysInMonth: function (year, month) { | ||
| 453 | + // 得到该月份的第一天 | ||
| 454 | + var date1 = new Date(year, month - 1, 1); | ||
| 455 | + // 得到后一个月份的第一天 | ||
| 456 | + var date2 = ""; | ||
| 457 | + if (month != 11) { | ||
| 458 | + date2 = new Date(year, month, 1); | ||
| 459 | + } else { | ||
| 460 | + date2 = new Date(year - 1, 0, 1); | ||
| 461 | + } | ||
| 462 | + return this.getDiffDays(date1, date2); | ||
| 463 | + }, | ||
| 464 | + | ||
| 465 | + /** | ||
| 466 | + * 得到当前年份一共有多少天 | ||
| 467 | + * | ||
| 468 | + * @return 当前年份共有多少天 | ||
| 469 | + */ | ||
| 470 | + getNumberOfDaysInCurrentYear: function () { | ||
| 471 | + var date = new Date(); | ||
| 472 | + return this.getNumberOfDaysInYear(date.getYear()); | ||
| 473 | + }, | ||
| 474 | + | ||
| 475 | + /** | ||
| 476 | + * 得到当前月份一共有多少天 | ||
| 477 | + * | ||
| 478 | + * @return 当前月份共有多少天 | ||
| 479 | + */ | ||
| 480 | + getNumberOfDaysInCurrentMonth: function () { | ||
| 481 | + var date = new Date(); | ||
| 482 | + return this.getNumberOfDaysInMonth(date.getYear(), date.getMonth() + 1); | ||
| 483 | + }, | ||
| 484 | + | ||
| 485 | +// 金钱格式处理 | ||
| 486 | + moneyFormatter: function (value) { | ||
| 487 | + if (value == '0' || value == undefined || value == null || value === '') { | ||
| 488 | + return '0.00'; | ||
| 489 | + } else { | ||
| 490 | + return (value / 100).toFixed(2); | ||
| 491 | + } | ||
| 492 | + } | ||
| 493 | + | ||
| 494 | +}; |
src/utils/request.js
| @@ -58,7 +58,6 @@ service.interceptors.response.use( | @@ -58,7 +58,6 @@ service.interceptors.response.use( | ||
| 58 | } | 58 | } |
| 59 | }, | 59 | }, |
| 60 | error => { | 60 | error => { |
| 61 | - debugger | ||
| 62 | console.log('err' + error) // for debug | 61 | console.log('err' + error) // for debug |
| 63 | Message({ | 62 | Message({ |
| 64 | message: error.message, | 63 | message: error.message, |
src/utils/utils.js
0 → 100644
| 1 | +import DateUtils from './DateUtils.js'; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 将制定格式的时间字符串转换成long | ||
| 5 | + * <li>0-yyyyMMdd</li> | ||
| 6 | + * <li>1-yyyy-MM-dd</li> | ||
| 7 | + * <li>2-HHmmss</li> | ||
| 8 | + * <li>3-HH:mm:ss</li> | ||
| 9 | + * <li>4-HHmmssSSS</li> | ||
| 10 | + * <li>5-HH:mm:ss.SSS</li> | ||
| 11 | + * <li>6-yyyyMMddHHmmss</li> | ||
| 12 | + * <li>7-yyyy-MM-dd HH:mm:ss</li> | ||
| 13 | + * <li>8-yyyyMMddHHmmssSSS</li> | ||
| 14 | + * <li>9-yyyy-MM-dd HH:mm:ss.SSS</li> | ||
| 15 | + * <li>10-yyyy/MM/dd HH:mm</li> | ||
| 16 | + * <li>11-yyyy/MM/dd HH:mm:ss</li> | ||
| 17 | + */ | ||
| 18 | +// 日期格式处理 精确到时分秒 如:2018-10-24 08:41:33 | ||
| 19 | +export function timeFormatter(value, row, index) { | ||
| 20 | + if (value == null || value == undefined || value == '') { | ||
| 21 | + return "-"; | ||
| 22 | + } else { | ||
| 23 | + return DateUtils.long2String(value, 7); | ||
| 24 | + } | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +// 日期格式处理 精确到年月日 如:2018-10-24 | ||
| 28 | +export function timeOneFormatter(value, row, index) { | ||
| 29 | + if (value == null || value == undefined || value == '') { | ||
| 30 | + return "-"; | ||
| 31 | + } else { | ||
| 32 | + return DateUtils.long2String(value, 1); | ||
| 33 | + } | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// 时间处理,获取日期的当天开始时间:'2019-06-01 00:00:00' | ||
| 37 | +export function getBeginOfTheDay(value) { | ||
| 38 | + if (value == null || value == undefined || value == '') { | ||
| 39 | + return new Date(new Date(new Date().toLocaleDateString()).getTime()); | ||
| 40 | + } else { | ||
| 41 | + return new Date(new Date(value.toLocaleDateString()).getTime()); | ||
| 42 | + } | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +// 时间处理,获取日期的当天开始时间:'2019-06-01 23:59:59 | ||
| 46 | +export function getEndOfTheDay(value) { | ||
| 47 | + if (value == null || value == undefined || value == '') { | ||
| 48 | + return new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60*1000-1); | ||
| 49 | + } else { | ||
| 50 | + return new Date(new Date(value.toLocaleDateString()).getTime()+24*60*60*1000-1); | ||
| 51 | + } | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +// 日期格式处理 精确到年月 如:2018-10 | ||
| 55 | +export function yearMonthFormatter(value, row, index) { | ||
| 56 | + if (value == null || value == undefined || value == '') { | ||
| 57 | + return "-"; | ||
| 58 | + } else { | ||
| 59 | + var str = DateUtils.long2String(value, 1); | ||
| 60 | + return str.substr(0, 7); | ||
| 61 | + } | ||
| 62 | +} | ||
| 63 | + | ||
| 64 | +// 金钱格式处理 | ||
| 65 | +export function moneyFormatter(value) { | ||
| 66 | + if (value == '0' || value == undefined || value == null || value === '') { | ||
| 67 | + return '0.00'; | ||
| 68 | + } else { | ||
| 69 | + return (value / 100).toFixed(2); | ||
| 70 | + } | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | + | ||
| 74 | + | ||
| 75 | + | ||
| 76 | + | ||
| 77 | + | ||
| 78 | + | ||
| 79 | + | ||
| 80 | + | ||
| 81 | + |
src/views/account/index.vue
| @@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
| 10 | </el-col> | 10 | </el-col> |
| 11 | <el-col :span="12" :offset="4"> | 11 | <el-col :span="12" :offset="4"> |
| 12 | <el-row :gutter="16"><el-col :span="24">充值账户(元)</el-col></el-row> | 12 | <el-row :gutter="16"><el-col :span="24">充值账户(元)</el-col></el-row> |
| 13 | - <el-row :gutter="16" class="common-color font-size24" style="margin-top: 4px"><el-col :span="24">240.0</el-col></el-row> | 13 | + <el-row :gutter="16" class="common-color font-size24" style="margin-top: 4px"><el-col :span="24">{{rechargeBalance|fen2Yuan}}</el-col></el-row> |
| 14 | </el-col> | 14 | </el-col> |
| 15 | </el-row> | 15 | </el-row> |
| 16 | </el-card> | 16 | </el-card> |
| @@ -23,7 +23,7 @@ | @@ -23,7 +23,7 @@ | ||
| 23 | </el-col> | 23 | </el-col> |
| 24 | <el-col :span="12" :offset="4"> | 24 | <el-col :span="12" :offset="4"> |
| 25 | <el-row :gutter="16"><el-col :span="24">赠送账户(元)</el-col></el-row> | 25 | <el-row :gutter="16"><el-col :span="24">赠送账户(元)</el-col></el-row> |
| 26 | - <el-row :gutter="16" class="common-color font-size24" style="margin-top: 4px"><el-col :span="24">140.0</el-col></el-row> | 26 | + <el-row :gutter="16" class="common-color font-size24" style="margin-top: 4px"><el-col :span="24">{{presentBalance|fen2Yuan}}</el-col></el-row> |
| 27 | </el-col> | 27 | </el-col> |
| 28 | </el-row> | 28 | </el-row> |
| 29 | </el-card> | 29 | </el-card> |
| @@ -34,70 +34,114 @@ | @@ -34,70 +34,114 @@ | ||
| 34 | <el-tabs :tab-position="tabPosition" > | 34 | <el-tabs :tab-position="tabPosition" > |
| 35 | <el-tab-pane label="充值记录"> | 35 | <el-tab-pane label="充值记录"> |
| 36 | <el-table | 36 | <el-table |
| 37 | - :data="paytableData" | 37 | + :data="rechargeTableData" |
| 38 | style="width: 100%;" | 38 | style="width: 100%;" |
| 39 | :show-overflow-tooltip="true"> | 39 | :show-overflow-tooltip="true"> |
| 40 | <el-table-column | 40 | <el-table-column |
| 41 | - prop="parkName" | 41 | + prop="acctType" |
| 42 | label="账户类型" | 42 | label="账户类型" |
| 43 | :show-overflow-tooltip="true"> | 43 | :show-overflow-tooltip="true"> |
| 44 | + <template slot-scope="scope"> | ||
| 45 | + <span v-if="scope.row.acctType == 1">账户余额</span> | ||
| 46 | + <span v-if="scope.row.acctType == 7">充值赠送</span> | ||
| 47 | + </template> | ||
| 44 | </el-table-column> | 48 | </el-table-column> |
| 45 | <el-table-column | 49 | <el-table-column |
| 46 | - prop="license" | 50 | + prop="rechargeFee" |
| 47 | label="充值金额" | 51 | label="充值金额" |
| 48 | :show-overflow-tooltip="true"> | 52 | :show-overflow-tooltip="true"> |
| 53 | + <template slot-scope="scope"> | ||
| 54 | + <span>{{(scope.row.rechargeFee) |fen2Yuan}} </span> | ||
| 55 | + </template> | ||
| 49 | </el-table-column> | 56 | </el-table-column> |
| 50 | <el-table-column | 57 | <el-table-column |
| 51 | - prop="money" | 58 | + prop="rechargeBalance" |
| 52 | label="充值后余额"> | 59 | label="充值后余额"> |
| 60 | + <template slot-scope="scope"> | ||
| 61 | + <span>{{(scope.row.rechargeBalance) |fen2Yuan}} </span> | ||
| 62 | + </template> | ||
| 53 | </el-table-column> | 63 | </el-table-column> |
| 54 | <el-table-column | 64 | <el-table-column |
| 55 | - prop="inTime" | 65 | + prop="rechargeTime" |
| 56 | label="充值时间" | 66 | label="充值时间" |
| 57 | :show-overflow-tooltip="true"> | 67 | :show-overflow-tooltip="true"> |
| 68 | + <template slot-scope="scope"> | ||
| 69 | + <span>{{(scope.row.rechargeTime) |string2Date(7)}} </span> | ||
| 70 | + </template> | ||
| 58 | </el-table-column> | 71 | </el-table-column> |
| 59 | </el-table> | 72 | </el-table> |
| 60 | <el-pagination | 73 | <el-pagination |
| 61 | :page-size="10" | 74 | :page-size="10" |
| 62 | :pager-count="11" | 75 | :pager-count="11" |
| 63 | layout="prev, pager, next" | 76 | layout="prev, pager, next" |
| 64 | - :total="total"> | 77 | + :total="total" |
| 78 | + @size-change="handleSizeChange" | ||
| 79 | + @current-change="handleSizeChange" | ||
| 80 | + @prev-click="handleSizeChange" | ||
| 81 | + @next-click="handleSizeChange"> | ||
| 65 | </el-pagination> | 82 | </el-pagination> |
| 66 | </el-tab-pane> | 83 | </el-tab-pane> |
| 67 | <el-tab-pane label="支出记录"> | 84 | <el-tab-pane label="支出记录"> |
| 68 | <el-table | 85 | <el-table |
| 69 | - :data="outtableData" | 86 | + :data="payOutTableData" |
| 70 | style="width: 100%;" | 87 | style="width: 100%;" |
| 71 | :show-overflow-tooltip="true"> | 88 | :show-overflow-tooltip="true"> |
| 72 | <el-table-column | 89 | <el-table-column |
| 73 | - prop="parkName" | 90 | + prop="acctType" |
| 74 | label="账户类型" | 91 | label="账户类型" |
| 75 | :show-overflow-tooltip="true"> | 92 | :show-overflow-tooltip="true"> |
| 93 | + <template slot-scope="scope"> | ||
| 94 | + <span v-if="scope.row.acctType == 1">账户余额</span> | ||
| 95 | + <span v-if="scope.row.acctType == 7">充值赠送</span> | ||
| 96 | + </template> | ||
| 76 | </el-table-column> | 97 | </el-table-column> |
| 77 | <el-table-column | 98 | <el-table-column |
| 78 | - prop="license" | 99 | + prop="tradeFee" |
| 79 | label="交易金额" | 100 | label="交易金额" |
| 80 | :show-overflow-tooltip="true"> | 101 | :show-overflow-tooltip="true"> |
| 102 | + <template slot-scope="scope"> | ||
| 103 | + <span>{{(scope.row.tradeFee) |fen2Yuan}} </span> | ||
| 104 | + </template> | ||
| 81 | </el-table-column> | 105 | </el-table-column> |
| 82 | <el-table-column | 106 | <el-table-column |
| 83 | - prop="money" | 107 | + prop="tradeBalance" |
| 84 | label="交易后余额"> | 108 | label="交易后余额"> |
| 109 | + <template slot-scope="scope"> | ||
| 110 | + <span>{{(scope.row.tradeBalance) |fen2Yuan}} </span> | ||
| 111 | + </template> | ||
| 85 | </el-table-column> | 112 | </el-table-column> |
| 86 | <el-table-column | 113 | <el-table-column |
| 87 | - prop="outtype" | 114 | + prop="tradeDetialType" |
| 88 | label="交易类型"> | 115 | label="交易类型"> |
| 116 | + <template slot-scope="scope"> | ||
| 117 | + <span v-if="scope.row.tradeDetialType == 101">停车支付</span> | ||
| 118 | + <span v-if="scope.row.tradeDetialType == 102">停车预付</span> | ||
| 119 | + <span v-if="scope.row.tradeDetialType == 103">停车补缴</span> | ||
| 120 | + <span v-if="scope.row.tradeDetialType == 104">共享车位</span> | ||
| 121 | + <span v-if="scope.row.tradeDetialType == 201">余额充值</span> | ||
| 122 | + <span v-if="scope.row.tradeDetialType == 202">押金充值</span> | ||
| 123 | + <span v-if="scope.row.tradeDetialType == 301">会员卡购买</span> | ||
| 124 | + <span v-if="scope.row.tradeDetialType == 302">会员卡续费</span> | ||
| 125 | + </template> | ||
| 89 | </el-table-column> | 126 | </el-table-column> |
| 90 | <el-table-column | 127 | <el-table-column |
| 91 | - prop="inTime" | 128 | + prop="tradeTime" |
| 92 | label="交易时间" | 129 | label="交易时间" |
| 93 | :show-overflow-tooltip="true"> | 130 | :show-overflow-tooltip="true"> |
| 131 | + <template slot-scope="scope"> | ||
| 132 | + <span>{{(scope.row.tradeTime) |string2Date(7)}} </span> | ||
| 133 | + </template> | ||
| 94 | </el-table-column> | 134 | </el-table-column> |
| 95 | </el-table> | 135 | </el-table> |
| 96 | <el-pagination | 136 | <el-pagination |
| 97 | :page-size="10" | 137 | :page-size="10" |
| 98 | :pager-count="21" | 138 | :pager-count="21" |
| 99 | layout="prev, pager, next" | 139 | layout="prev, pager, next" |
| 100 | - :total="total"> | 140 | + :total="total2" |
| 141 | + @size-change="handleSizeChange2" | ||
| 142 | + @current-change="handleSizeChange2" | ||
| 143 | + @prev-click="handleSizeChange2" | ||
| 144 | + @next-click="handleSizeChange2"> | ||
| 101 | </el-pagination> | 145 | </el-pagination> |
| 102 | </el-tab-pane> | 146 | </el-tab-pane> |
| 103 | </el-tabs> | 147 | </el-tabs> |
| @@ -111,7 +155,8 @@ | @@ -111,7 +155,8 @@ | ||
| 111 | import pagination from '@/components/Pagination/index.vue'; | 155 | import pagination from '@/components/Pagination/index.vue'; |
| 112 | import LoadingBar from 'nprogress' // progress bar | 156 | import LoadingBar from 'nprogress' // progress bar |
| 113 | import 'nprogress/nprogress.css' // progress bar style | 157 | import 'nprogress/nprogress.css' // progress bar style |
| 114 | - | 158 | +import {getAcctPersonGroupByAcctType,queryCustRechargeFeeStaticMsg,queryAcctPayOutForPage} from '@/api/account'; |
| 159 | +import {fen2Yuan,string2Date} from '@/filters/index'; | ||
| 115 | export default { | 160 | export default { |
| 116 | components:{ | 161 | components:{ |
| 117 | 'i-pagination': pagination | 162 | 'i-pagination': pagination |
| @@ -121,101 +166,140 @@ export default { | @@ -121,101 +166,140 @@ export default { | ||
| 121 | }, | 166 | }, |
| 122 | data() { | 167 | data() { |
| 123 | return { | 168 | return { |
| 169 | + rechargeBalance:0, | ||
| 170 | + presentBalance:0, | ||
| 124 | list: null, | 171 | list: null, |
| 125 | tabPosition:'top', | 172 | tabPosition:'top', |
| 126 | listLoading: true, | 173 | listLoading: true, |
| 127 | btnLoading:false, | 174 | btnLoading:false, |
| 128 | loading:false, | 175 | loading:false, |
| 129 | - paytableData: [ | ||
| 130 | - { | ||
| 131 | - parkName: '个人账户', | ||
| 132 | - license: '21', | ||
| 133 | - money: '31', | ||
| 134 | - inTime: '2019-06-02 09:00:00', | ||
| 135 | - }, | ||
| 136 | - { | ||
| 137 | - parkName: '个人账户', | ||
| 138 | - license: '10', | ||
| 139 | - money: '31', | ||
| 140 | - inTime: '2019-06-02 00:23:00', | ||
| 141 | - }, | ||
| 142 | - { | ||
| 143 | - parkName: '个人账户', | ||
| 144 | - license: '21', | ||
| 145 | - money: '31', | ||
| 146 | - inTime: '2019-06-02 09:00:00', | ||
| 147 | - }, | ||
| 148 | - { | ||
| 149 | - parkName: '个人账户', | ||
| 150 | - license: '10', | ||
| 151 | - money: '31', | ||
| 152 | - inTime: '2019-06-02 00:23:00', | ||
| 153 | - },{ | ||
| 154 | - parkName: '个人账户', | ||
| 155 | - license: '10', | ||
| 156 | - money: '31', | ||
| 157 | - inTime: '2019-06-02 00:23:00', | ||
| 158 | - }, | 176 | + rechargeTableData: [ |
| 159 | ], | 177 | ], |
| 160 | - outtableData: [ | ||
| 161 | - { | ||
| 162 | - parkName: '个人账户', | ||
| 163 | - license: '21', | ||
| 164 | - money: '31', | ||
| 165 | - outtype: '停车支付', | ||
| 166 | - inTime: '2019-06-02 09:00:00', | ||
| 167 | - }, | ||
| 168 | - { | ||
| 169 | - parkName: '个人账户', | ||
| 170 | - license: '10', | ||
| 171 | - money: '31', | ||
| 172 | - outtype: '停车支付', | ||
| 173 | - inTime: '2019-06-02 00:23:00', | ||
| 174 | - }, | ||
| 175 | - { | ||
| 176 | - parkName: '个人账户', | ||
| 177 | - license: '21', | ||
| 178 | - money: '31', | ||
| 179 | - outtype: '停车支付', | ||
| 180 | - inTime: '2019-06-02 09:00:00', | ||
| 181 | - }, | ||
| 182 | - { | ||
| 183 | - parkName: '个人账户', | ||
| 184 | - license: '10', | ||
| 185 | - money: '31', | ||
| 186 | - outtype: '停车支付', | ||
| 187 | - inTime: '2019-06-02 00:23:00', | ||
| 188 | - }, | 178 | + payOutTableData: [ |
| 189 | ], | 179 | ], |
| 190 | /** 分页*/ | 180 | /** 分页*/ |
| 191 | - total: 32, | 181 | + total: 0, |
| 192 | currentPage: 1, | 182 | currentPage: 1, |
| 193 | pageSize: 10, | 183 | pageSize: 10, |
| 184 | + total2: 0, | ||
| 185 | + currentPage2: 1, | ||
| 186 | + pageSize2: 10, | ||
| 194 | } | 187 | } |
| 195 | }, | 188 | }, |
| 196 | - computed: { | 189 | + mounted: function() { |
| 190 | + this.getAcctPersonGroupByAcctType(); | ||
| 191 | + this.queryCustRechargeFeeStaticMsg(); | ||
| 192 | + this.queryAcctPayOutForPage(); | ||
| 197 | }, | 193 | }, |
| 198 | - created() { | ||
| 199 | 194 | ||
| 200 | - }, | ||
| 201 | - mounted:function () { | ||
| 202 | - }, | ||
| 203 | methods: { | 195 | methods: { |
| 204 | - queryBtn:function () { | ||
| 205 | - LoadingBar.start(); | ||
| 206 | - this.btnLoading=true; | ||
| 207 | - this.loading = true; | 196 | + /** |
| 197 | + * 获取查询参数 | ||
| 198 | + */ | ||
| 199 | + getQueryParams: function() { | ||
| 200 | + let userInfo = this.$store.state.user.userInfo; | ||
| 201 | + let beginTime = new Date(); | ||
| 202 | + let endTime = new Date(); | ||
| 203 | + beginTime.setFullYear(2017); | ||
| 204 | + | ||
| 205 | + let req = { | ||
| 206 | + beginTime:beginTime, | ||
| 207 | + endTime:endTime, | ||
| 208 | + sysCode:'10003', | ||
| 209 | + custId:userInfo.custId, | ||
| 210 | + // custId:'501519113641649119232',//账户支出 | ||
| 211 | + //custId:'501522943145292840960',//账户充值 | ||
| 212 | + | ||
| 213 | + } | ||
| 214 | + return req; | ||
| 215 | + }, | ||
| 216 | + /** | ||
| 217 | + * 查询车主账户信息 | ||
| 218 | + */ | ||
| 219 | + getAcctPersonGroupByAcctType: function() { | ||
| 220 | + let req = this.getQueryParams(); | ||
| 221 | + getAcctPersonGroupByAcctType(req).then(response =>{ | ||
| 222 | + if(response.code=='8888'){ | ||
| 223 | + let data = response.data; | ||
| 224 | + let rechargeBalance = 0; | ||
| 225 | + let presentBalance = 0; | ||
| 226 | + data.forEach(item=>{ | ||
| 227 | + if(item.acctType == 1){ | ||
| 228 | + rechargeBalance += item.acctBalance; | ||
| 229 | + } | ||
| 230 | + if(item.acctType == 7){ | ||
| 231 | + presentBalance += item.acctBalance; | ||
| 232 | + } | ||
| 233 | + }); | ||
| 234 | + this.rechargeBalance = rechargeBalance; | ||
| 235 | + this.presentBalance = presentBalance; | ||
| 236 | + }else{ | ||
| 237 | + console.log(response); | ||
| 238 | + } | ||
| 208 | 239 | ||
| 240 | + }); | ||
| 209 | }, | 241 | }, |
| 210 | - /**获取子组件页码方法*/ | ||
| 211 | - handleSizeChange: function(pages) { | ||
| 212 | - this.currentPage = pages.page; | ||
| 213 | - this.pageSize = pages.limit; | 242 | + /** |
| 243 | + * 查询车主充值记录 | ||
| 244 | + */ | ||
| 245 | + queryCustRechargeFeeStaticMsg: function() { | ||
| 246 | + let req = this.getQueryParams(); | ||
| 247 | + req.baseRequest={ | ||
| 248 | + pageNum:this.currentPage, | ||
| 249 | + pageSize:this.pageSize, | ||
| 250 | + }, | ||
| 251 | + queryCustRechargeFeeStaticMsg(req).then(response =>{ | ||
| 252 | + if(response.code=='8888'){ | ||
| 253 | + this.rechargeTableData = response.data.rows; | ||
| 254 | + this.total = response.data.total; | ||
| 255 | + }else{ | ||
| 256 | + console.log(response); | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + }); | ||
| 260 | + }, | ||
| 261 | + | ||
| 262 | + /** | ||
| 263 | + * 查询车主支出记录 | ||
| 264 | + */ | ||
| 265 | + queryAcctPayOutForPage: function() { | ||
| 266 | + let req = this.getQueryParams(); | ||
| 267 | + | ||
| 268 | + req.baseRequest={ | ||
| 269 | + pageNum:this.currentPage2, | ||
| 270 | + pageSize:this.pageSize2, | ||
| 271 | + }, | ||
| 272 | + queryAcctPayOutForPage (req).then(response =>{ | ||
| 273 | + if(response.code=='8888'){ | ||
| 274 | + this.payOutTableData = response.data.rows; | ||
| 275 | + this.total2 = response.data.total; | ||
| 276 | + }else{ | ||
| 277 | + console.log(response); | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + }); | ||
| 281 | + }, | ||
| 282 | + // 获取子组件页码方法 | ||
| 283 | + handleSizeChange: function(page) { | ||
| 284 | + console.log(page) | ||
| 285 | + this.currentPage = page; | ||
| 214 | /** 调用表格数据.*/ | 286 | /** 调用表格数据.*/ |
| 215 | - this.queryBtn(); | 287 | + this.queryCustRechargeFeeStaticMsg(); |
| 288 | + | ||
| 216 | }, | 289 | }, |
| 290 | + // 获取子组件页码方法 | ||
| 291 | + handleSizeChange2: function(page) { | ||
| 292 | + console.log(page) | ||
| 293 | + this.currentPage2 = page; | ||
| 294 | + /** 调用表格数据.*/ | ||
| 295 | + this.queryAcctPayOutForPage(); | ||
| 296 | + | ||
| 297 | + }, | ||
| 298 | + | ||
| 299 | + }, | ||
| 300 | + | ||
| 301 | + | ||
| 217 | 302 | ||
| 218 | - } | ||
| 219 | } | 303 | } |
| 220 | </script> | 304 | </script> |
| 221 | <style lang="scss" scoped > | 305 | <style lang="scss" scoped > |
src/views/cardticket/index.vue
| @@ -5,17 +5,18 @@ | @@ -5,17 +5,18 @@ | ||
| 5 | <el-row :gutter="16" class=""> | 5 | <el-row :gutter="16" class=""> |
| 6 | <el-col :span="6" v-for="(ticket,id) in ticketList" :key="id" class="margin-bottom16"> | 6 | <el-col :span="6" v-for="(ticket,id) in ticketList" :key="id" class="margin-bottom16"> |
| 7 | <el-card class="box-card"> | 7 | <el-card class="box-card"> |
| 8 | - <div class="ticket-title boxshadow-4 " :class="ticket.ptype == 1 ?'eff-bgcolor': 'off-bgcolor'"> | ||
| 9 | - <div class=" float-left" :class="ticket.ptype == 1 ?'eff-icon': 'off-icon'"></div> | ||
| 10 | - <div class="ticket-name hs-hidden-nowrap hs-cursor-pointer float-left" >{{ticket.plname}}</div> | ||
| 11 | - <div class="ticket-oper float-right">{{ticket.pname}}</div> | 8 | + <div class="ticket-title boxshadow-4 eff-bgcolor " > |
| 9 | + <div class=" float-left eff-icon"></div> | ||
| 10 | + <div class="ticket-name hs-hidden-nowrap hs-cursor-pointer float-left" >{{ticket.orgName}}-{{ticket.cardName}}</div> | ||
| 11 | + <div class="ticket-oper float-right">有效</div> | ||
| 12 | </div> | 12 | </div> |
| 13 | <div class="ticket-content"> | 13 | <div class="ticket-content"> |
| 14 | - <div class="ticket-main clearfix"> | ||
| 15 | - <div class=" hs-hidden-nowrap hs-cursor-pointer float-left" :class="ticket.ptype == 1 ?'ticket-effmoney': 'ticket-offmoney'">{{ticket.pmoney}}</div> | 14 | + <div class="ticket-main clearfix" > |
| 15 | + <div class=" hs-hidden-nowrap hs-cursor-pointer float-left ticket-effmoney" >{{ticket.fullCutValue | fen2Yuan}}</div> | ||
| 16 | + | ||
| 16 | <div class="ticket-notes float-left">元 优惠券</div> | 17 | <div class="ticket-notes float-left">元 优惠券</div> |
| 17 | </div> | 18 | </div> |
| 18 | - <div class="ticket-time">有效时间:{{ticket.ptime}}</div> | 19 | + <div class="ticket-time">有效时间:{{ticket.endTime | string2Date(1)}}</div> |
| 19 | </div> | 20 | </div> |
| 20 | </el-card> | 21 | </el-card> |
| 21 | </el-col> | 22 | </el-col> |
| @@ -24,82 +25,34 @@ | @@ -24,82 +25,34 @@ | ||
| 24 | </template> | 25 | </template> |
| 25 | 26 | ||
| 26 | <script> | 27 | <script> |
| 28 | + import {getCouponPerson} from '@/api/cardticket.js'; | ||
| 27 | export default { | 29 | export default { |
| 28 | - | ||
| 29 | data() { | 30 | data() { |
| 30 | return { | 31 | return { |
| 31 | ticketList:[ | 32 | ticketList:[ |
| 32 | - { | 33 | + /*{ |
| 33 | id:'123', | 34 | id:'123', |
| 34 | ptype:'1', | 35 | ptype:'1', |
| 35 | plname:'静雅地上停车场', | 36 | plname:'静雅地上停车场', |
| 36 | pname:'有效', | 37 | pname:'有效', |
| 37 | pmoney:'50', | 38 | pmoney:'50', |
| 38 | ptime:'2019/8/30', | 39 | ptime:'2019/8/30', |
| 39 | - }, | ||
| 40 | - { | ||
| 41 | - id:'123', | ||
| 42 | - ptype:'2', | ||
| 43 | - plname:'静雅地上停车场', | ||
| 44 | - pname:'无效', | ||
| 45 | - pmoney:'50', | ||
| 46 | - ptime:'2019/8/30', | ||
| 47 | - }, | ||
| 48 | - { | ||
| 49 | - id:'123', | ||
| 50 | - ptype:'2', | ||
| 51 | - plname:'静雅地上停车场', | ||
| 52 | - pname:'无效', | ||
| 53 | - pmoney:'50', | ||
| 54 | - ptime:'2019/8/30', | ||
| 55 | - }, | ||
| 56 | - { | ||
| 57 | - id:'123', | ||
| 58 | - ptype:'1', | ||
| 59 | - plname:'静雅地上停车场', | ||
| 60 | - pname:'有效', | ||
| 61 | - pmoney:'50', | ||
| 62 | - ptime:'2019/8/30', | ||
| 63 | - }, | ||
| 64 | - { | ||
| 65 | - id:'123', | ||
| 66 | - ptype:'1', | ||
| 67 | - plname:'静雅地上停车场', | ||
| 68 | - pname:'有效', | ||
| 69 | - pmoney:'50', | ||
| 70 | - ptime:'2019/8/30', | ||
| 71 | - }, | ||
| 72 | - { | ||
| 73 | - id:'123', | ||
| 74 | - ptype:'2', | ||
| 75 | - plname:'静雅地上停车场', | ||
| 76 | - pname:'无效', | ||
| 77 | - pmoney:'50', | ||
| 78 | - ptime:'2019/8/30', | ||
| 79 | - }, | ||
| 80 | - { | ||
| 81 | - id:'123', | ||
| 82 | - ptype:'2', | ||
| 83 | - plname:'静雅地上停车场', | ||
| 84 | - pname:'无效', | ||
| 85 | - pmoney:'50', | ||
| 86 | - ptime:'2019/8/30', | ||
| 87 | - }, | ||
| 88 | - { | ||
| 89 | - id:'123', | ||
| 90 | - ptype:'1', | ||
| 91 | - plname:'静雅地上停车场', | ||
| 92 | - pname:'有效', | ||
| 93 | - pmoney:'50', | ||
| 94 | - ptime:'2019/8/30', | ||
| 95 | - }, | 40 | + }*/ |
| 96 | ] | 41 | ] |
| 97 | } | 42 | } |
| 98 | }, | 43 | }, |
| 99 | - | ||
| 100 | - | ||
| 101 | methods: { | 44 | methods: { |
| 102 | - | 45 | + /**查询车主个人卡券*/ |
| 46 | + getCouponPerson:function () { | ||
| 47 | + getCouponPerson().then(response =>{ | ||
| 48 | + if(response.code='8888'){ | ||
| 49 | + this.ticketList=response.data; | ||
| 50 | + } | ||
| 51 | + }); | ||
| 52 | + } | ||
| 53 | + }, | ||
| 54 | + mounted:function () { | ||
| 55 | + this.getCouponPerson(); | ||
| 103 | } | 56 | } |
| 104 | } | 57 | } |
| 105 | </script> | 58 | </script> |
src/views/dashboard/index.vue
| @@ -8,10 +8,10 @@ | @@ -8,10 +8,10 @@ | ||
| 8 | </div> | 8 | </div> |
| 9 | <div class="card-panel-description"> | 9 | <div class="card-panel-description"> |
| 10 | <div class="card-panel-text"> | 10 | <div class="card-panel-text"> |
| 11 | - 本月订单: 21 | 11 | + 本月订单: {{cardData.monthOrderNum}} |
| 12 | </div> | 12 | </div> |
| 13 | <div class="card-panel-text"> | 13 | <div class="card-panel-text"> |
| 14 | - 订单总量: 1231 | 14 | + 订单总量: {{cardData.totalOrderNum}} |
| 15 | </div> | 15 | </div> |
| 16 | </div> | 16 | </div> |
| 17 | </div> | 17 | </div> |
| @@ -23,10 +23,10 @@ | @@ -23,10 +23,10 @@ | ||
| 23 | </div> | 23 | </div> |
| 24 | <div class="card-panel-description"> | 24 | <div class="card-panel-description"> |
| 25 | <div class="card-panel-text"> | 25 | <div class="card-panel-text"> |
| 26 | - 可用卡券: 101 | 26 | + 可用卡券: {{cardData.validCouponNum}} |
| 27 | </div> | 27 | </div> |
| 28 | <div class="card-panel-text"> | 28 | <div class="card-panel-text"> |
| 29 | - 卡券总量: 332 | 29 | + 卡券总量: {{cardData.totalCouponNum}} |
| 30 | </div> | 30 | </div> |
| 31 | </div> | 31 | </div> |
| 32 | </div> | 32 | </div> |
| @@ -38,10 +38,10 @@ | @@ -38,10 +38,10 @@ | ||
| 38 | </div> | 38 | </div> |
| 39 | <div class="card-panel-description"> | 39 | <div class="card-panel-description"> |
| 40 | <div class="card-panel-text"> | 40 | <div class="card-panel-text"> |
| 41 | - 可用积分: 21 | 41 | + 可用积分: {{cardData.validScore}} |
| 42 | </div> | 42 | </div> |
| 43 | <div class="card-panel-text"> | 43 | <div class="card-panel-text"> |
| 44 | - 全部积分: 231 | 44 | + 全部积分: {{cardData.totalScore}} |
| 45 | </div> | 45 | </div> |
| 46 | </div> | 46 | </div> |
| 47 | </div> | 47 | </div> |
| @@ -109,164 +109,243 @@ | @@ -109,164 +109,243 @@ | ||
| 109 | </div> | 109 | </div> |
| 110 | 110 | ||
| 111 | <div class="table-wrap"> | 111 | <div class="table-wrap"> |
| 112 | - <p class="table-title">最新订单</p> | 112 | + <p class="table-title">最新订单(近三个月)</p> |
| 113 | <el-table | 113 | <el-table |
| 114 | :data="orderData" | 114 | :data="orderData" |
| 115 | style="width: 100%;" | 115 | style="width: 100%;" |
| 116 | :show-overflow-tooltip="true"> | 116 | :show-overflow-tooltip="true"> |
| 117 | <el-table-column | 117 | <el-table-column |
| 118 | - prop="parkName" | 118 | + prop="plName" |
| 119 | label="停车场" | 119 | label="停车场" |
| 120 | :show-overflow-tooltip="true"> | 120 | :show-overflow-tooltip="true"> |
| 121 | </el-table-column> | 121 | </el-table-column> |
| 122 | <el-table-column | 122 | <el-table-column |
| 123 | - prop="license" | 123 | + prop="carNumber" |
| 124 | label="车牌" | 124 | label="车牌" |
| 125 | :show-overflow-tooltip="true"> | 125 | :show-overflow-tooltip="true"> |
| 126 | </el-table-column> | 126 | </el-table-column> |
| 127 | <el-table-column | 127 | <el-table-column |
| 128 | - prop="money" | ||
| 129 | - label="停车费"> | 128 | + prop="orderTotalFee" |
| 129 | + label="应收费用"> | ||
| 130 | + <template slot-scope="scope"> | ||
| 131 | + <span>{{(scope.row.orderTotalFee) |fen2Yuan}} </span> | ||
| 132 | + </template> | ||
| 130 | </el-table-column> | 133 | </el-table-column> |
| 131 | <el-table-column | 134 | <el-table-column |
| 132 | - prop="inTime" | 135 | + prop="orderActFee" |
| 136 | + label="实收费用"> | ||
| 137 | + <template slot-scope="scope"> | ||
| 138 | + <span>{{(scope.row.orderActFee) |fen2Yuan}} </span> | ||
| 139 | + </template> | ||
| 140 | + </el-table-column> | ||
| 141 | + <el-table-column | ||
| 142 | + prop="parkInTime" | ||
| 133 | label="入场时间" | 143 | label="入场时间" |
| 134 | :show-overflow-tooltip="true"> | 144 | :show-overflow-tooltip="true"> |
| 145 | + <template slot-scope="scope"> | ||
| 146 | + <span>{{(scope.row.parkInTime) |string2Date(7)}} </span> | ||
| 147 | + </template> | ||
| 135 | </el-table-column> | 148 | </el-table-column> |
| 136 | <el-table-column | 149 | <el-table-column |
| 137 | - prop="outTime" | 150 | + prop="parkOutTime" |
| 138 | label="出场时间" | 151 | label="出场时间" |
| 139 | :show-overflow-tooltip="true"> | 152 | :show-overflow-tooltip="true"> |
| 153 | + <template slot-scope="scope"> | ||
| 154 | + <span>{{(scope.row.parkOutTime) |string2Date(7)}} </span> | ||
| 155 | + </template> | ||
| 140 | </el-table-column> | 156 | </el-table-column> |
| 141 | <el-table-column | 157 | <el-table-column |
| 142 | - prop="duration" | 158 | + prop="parkingDuration" |
| 143 | label="停车时长" | 159 | label="停车时长" |
| 144 | :show-overflow-tooltip="true"> | 160 | :show-overflow-tooltip="true"> |
| 161 | + <template slot-scope="scope"> | ||
| 162 | + <span>{{(scope.row) |parkingDurationFormatter(scope.row.parkingDuration)}} </span> | ||
| 163 | + </template> | ||
| 145 | </el-table-column> | 164 | </el-table-column> |
| 146 | <el-table-column | 165 | <el-table-column |
| 147 | - prop="berthNum" | 166 | + prop="berthNo" |
| 148 | label="泊位编号"> | 167 | label="泊位编号"> |
| 149 | </el-table-column> | 168 | </el-table-column> |
| 150 | <el-table-column | 169 | <el-table-column |
| 151 | - prop="status" | 170 | + prop="orderState" |
| 152 | label="订单状态"> | 171 | label="订单状态"> |
| 172 | + <template slot-scope="scope"> | ||
| 173 | + <span>{{(scope.row) |inOutStateFormatter}} </span> | ||
| 174 | + </template> | ||
| 153 | </el-table-column> | 175 | </el-table-column> |
| 154 | </el-table> | 176 | </el-table> |
| 155 | <el-pagination | 177 | <el-pagination |
| 156 | :page-size="10" | 178 | :page-size="10" |
| 157 | :pager-count="11" | 179 | :pager-count="11" |
| 158 | layout="prev, pager, next" | 180 | layout="prev, pager, next" |
| 159 | - :total="total"> | 181 | + :total="total" |
| 182 | + @size-change="handleSizeChange" | ||
| 183 | + @current-change="handleSizeChange" | ||
| 184 | + @prev-click="handleSizeChange" | ||
| 185 | + @next-click="handleSizeChange" | ||
| 186 | + > | ||
| 160 | </el-pagination> | 187 | </el-pagination> |
| 161 | </div> | 188 | </div> |
| 162 | </div> | 189 | </div> |
| 163 | </template> | 190 | </template> |
| 164 | 191 | ||
| 165 | <script> | 192 | <script> |
| 166 | -import { mapGetters } from 'vuex' | ||
| 167 | - | ||
| 168 | -export default { | ||
| 169 | - name: 'Dashboard', | ||
| 170 | - computed: { | ||
| 171 | - ...mapGetters([ | ||
| 172 | - 'name' | ||
| 173 | - ]) | ||
| 174 | - }, | ||
| 175 | - data() { | ||
| 176 | - return { | ||
| 177 | - total: 15, | ||
| 178 | - currentPage: 1, | ||
| 179 | - pageSize: 10, | ||
| 180 | - moneyData: [{ | ||
| 181 | - name: '消费金额', | ||
| 182 | - january: '123411', | ||
| 183 | - february: '9787162', | ||
| 184 | - march: '123097', | ||
| 185 | - april: '82713', | ||
| 186 | - may: '1239789', | ||
| 187 | - june: '81273', | ||
| 188 | - july: '129387', | ||
| 189 | - august: '1298778', | ||
| 190 | - september: '1239878', | ||
| 191 | - october: '76765', | ||
| 192 | - november: '123124', | ||
| 193 | - december: '12341' | ||
| 194 | - }], | ||
| 195 | - orderData: [ | ||
| 196 | - { | ||
| 197 | - parkName: '承德老二中停车场', | ||
| 198 | - license: '冀H7517732', | ||
| 199 | - money: '31', | ||
| 200 | - inTime: '2019-06-02 00:00:00', | ||
| 201 | - outTime: '2019-06-01 08:00:00', | ||
| 202 | - duration: '2小时28分钟43秒', | ||
| 203 | - berthNum: 'A1212231', | ||
| 204 | - status: '完成' | ||
| 205 | - }, | ||
| 206 | - { | ||
| 207 | - parkName: '承德老二中停车场', | ||
| 208 | - license: '冀H7517732', | ||
| 209 | - money: '31', | ||
| 210 | - inTime: '2019-06-02 00:00:00', | ||
| 211 | - outTime: '2019-06-01 08:00:00', | ||
| 212 | - duration: '2小时28分钟43秒', | ||
| 213 | - berthNum: 'A1212231', | ||
| 214 | - status: '完成' | ||
| 215 | - }, | ||
| 216 | - { | ||
| 217 | - parkName: '承德老二中停车场', | ||
| 218 | - license: '冀H7517732', | ||
| 219 | - money: '31', | ||
| 220 | - inTime: '2019-06-02 00:00:00', | ||
| 221 | - outTime: '2019-06-01 08:00:00', | ||
| 222 | - duration: '2小时28分钟43秒', | ||
| 223 | - berthNum: 'A1212231', | ||
| 224 | - status: '完成' | ||
| 225 | - }, | ||
| 226 | - { | ||
| 227 | - parkName: '承德老二中停车场', | ||
| 228 | - license: '冀H7517732', | ||
| 229 | - money: '31', | ||
| 230 | - inTime: '2019-06-02 00:00:00', | ||
| 231 | - outTime: '2019-06-01 08:00:00', | ||
| 232 | - duration: '2小时28分钟43秒', | ||
| 233 | - berthNum: 'A1212231', | ||
| 234 | - status: '完成' | 193 | + import { mapGetters } from 'vuex' |
| 194 | + import {getCustIndexBaseInfo,queryOwnerPayOutByMonth,queryOwnerParkRecord} from '@/api/index'; | ||
| 195 | + import {fen2Yuan,string2Date,inOutStateFormatter,parkingDurationFormatter} from '@/filters/index'; | ||
| 196 | + export default { | ||
| 197 | + name: 'Dashboard', | ||
| 198 | + computed: { | ||
| 199 | + ...mapGetters([ | ||
| 200 | + 'name' | ||
| 201 | + ]) | ||
| 202 | + }, | ||
| 203 | + data() { | ||
| 204 | + return { | ||
| 205 | + cardData: { | ||
| 206 | + totalOrderNum: 0, | ||
| 207 | + monthOrderNum: 0, | ||
| 208 | + totalCouponNum: 0, | ||
| 209 | + validCouponNum: 0, | ||
| 210 | + totalScore: 0, | ||
| 211 | + validScore: 0, | ||
| 235 | }, | 212 | }, |
| 236 | - { | ||
| 237 | - parkName: '承德老二中停车场', | ||
| 238 | - license: '冀H7517732', | ||
| 239 | - money: '31', | ||
| 240 | - inTime: '2019-06-02 00:00:00', | ||
| 241 | - outTime: '2019-06-01 08:00:00', | ||
| 242 | - duration: '2小时28分钟43秒', | ||
| 243 | - berthNum: 'A1212231', | ||
| 244 | - status: '完成' | ||
| 245 | - }, | ||
| 246 | - { | ||
| 247 | - parkName: '承德老二中停车场', | ||
| 248 | - license: '冀H7517732', | ||
| 249 | - money: '31', | ||
| 250 | - inTime: '2019-06-02 00:00:00', | ||
| 251 | - outTime: '2019-06-01 08:00:00', | ||
| 252 | - duration: '2小时28分钟43秒', | ||
| 253 | - berthNum: 'A1212231', | ||
| 254 | - status: '完成' | ||
| 255 | - }, | ||
| 256 | - { | ||
| 257 | - parkName: '承德老二中停车场', | ||
| 258 | - license: '冀H7517732', | ||
| 259 | - money: '31', | ||
| 260 | - inTime: '2019-06-02 00:00:00', | ||
| 261 | - outTime: '2019-06-01 08:00:00', | ||
| 262 | - duration: '2小时28分钟43秒', | ||
| 263 | - berthNum: 'A1212231', | ||
| 264 | - status: '完成' | 213 | + total: 0, |
| 214 | + currentPage: 1, | ||
| 215 | + pageSize: 10, | ||
| 216 | + moneyData: [{ | ||
| 217 | + name: '消费金额', | ||
| 218 | + january: '0', | ||
| 219 | + february: '0', | ||
| 220 | + march: '0', | ||
| 221 | + april: '0', | ||
| 222 | + may: '0', | ||
| 223 | + june: '0', | ||
| 224 | + july: '0', | ||
| 225 | + august: '0', | ||
| 226 | + september: '0', | ||
| 227 | + october: '0', | ||
| 228 | + november: '0', | ||
| 229 | + december: '0' | ||
| 230 | + }], | ||
| 231 | + orderData: [], | ||
| 232 | + } | ||
| 233 | + }, | ||
| 234 | + | ||
| 235 | + mounted: function() { | ||
| 236 | + this.getCustIndexBaseInfo(); | ||
| 237 | + this.queryOwnerPayOutByMonth(); | ||
| 238 | + this.queryOwnerParkRecord(); | ||
| 239 | + }, | ||
| 240 | + | ||
| 241 | + methods: { | ||
| 242 | + /** | ||
| 243 | + * 获取查询参数 | ||
| 244 | + */ | ||
| 245 | + getQueryParams: function() { | ||
| 246 | + let userInfo = this.$store.state.user.userInfo; | ||
| 247 | + let beginTime = new Date(); | ||
| 248 | + let endTime = new Date(); | ||
| 249 | + beginTime.setMonth(0); | ||
| 250 | + beginTime.setDate(1); | ||
| 251 | + endTime.setMonth(11); | ||
| 252 | + endTime.setDate(31); | ||
| 253 | + | ||
| 254 | + let req = { | ||
| 255 | + custId:userInfo.custId, | ||
| 256 | + //custId:'501519113641649119232', | ||
| 257 | + beginTime:beginTime, | ||
| 258 | + endTime:endTime, | ||
| 259 | + } | ||
| 260 | + return req; | ||
| 261 | + }, | ||
| 262 | + /** | ||
| 263 | + * 查询首页卡片信息 | ||
| 264 | + */ | ||
| 265 | + getCustIndexBaseInfo: function() { | ||
| 266 | + let req = this.getQueryParams(); | ||
| 267 | + getCustIndexBaseInfo(req).then(response =>{ | ||
| 268 | + if(response.code=='8888'){ | ||
| 269 | + let data = response.data; | ||
| 270 | + this.cardData.totalOrderNum = data.totalOrderNum == null ? 0: data.totalOrderNum; | ||
| 271 | + this.cardData.monthOrderNum = data.monthOrderNum == null ? 0: data.monthOrderNum; | ||
| 272 | + this.cardData.totalCouponNum = data.totalCouponNum == null ? 0: data.totalCouponNum; | ||
| 273 | + this.cardData.validCouponNum = data.validCouponNum == null ? 0: data.validCouponNum; | ||
| 274 | + this.cardData.totalScore = data.totalScore == null ? 0: data.totalScore; | ||
| 275 | + this.cardData.validScore = data.validScore == null ? 0: data.validScore; | ||
| 276 | + }else{ | ||
| 277 | + console.log(response); | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + }); | ||
| 281 | + }, | ||
| 282 | + /** | ||
| 283 | + * 查询首页月支出信息 | ||
| 284 | + */ | ||
| 285 | + queryOwnerPayOutByMonth: function() { | ||
| 286 | + let req = this.getQueryParams(); | ||
| 287 | + | ||
| 288 | + queryOwnerPayOutByMonth(req).then(response =>{ | ||
| 289 | + if(response.code=='8888'){ | ||
| 290 | + let data = response.data; | ||
| 291 | + this.moneyData[0].january = fen2Yuan(data[0].fee); | ||
| 292 | + this.moneyData[0]. february = fen2Yuan(data[1].fee); | ||
| 293 | + this.moneyData[0]. march = fen2Yuan(data[2].fee); | ||
| 294 | + this.moneyData[0]. april = fen2Yuan(data[3].fee); | ||
| 295 | + this.moneyData[0]. may = fen2Yuan(data[4].fee); | ||
| 296 | + this.moneyData[0]. june = fen2Yuan(data[5].fee); | ||
| 297 | + this.moneyData[0]. july = fen2Yuan(data[6].fee); | ||
| 298 | + this.moneyData[0]. august = fen2Yuan(data[7].fee); | ||
| 299 | + this.moneyData[0]. september = fen2Yuan(data[8].fee); | ||
| 300 | + this.moneyData[0]. october = fen2Yuan(data[9].fee); | ||
| 301 | + this.moneyData[0]. november =fen2Yuan( data[10].fee); | ||
| 302 | + this.moneyData[0]. december = fen2Yuan(data[11].fee); | ||
| 303 | + | ||
| 304 | + }else{ | ||
| 305 | + console.log(response); | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + }); | ||
| 309 | + }, | ||
| 310 | + | ||
| 311 | + /** | ||
| 312 | + * 查询首页订单信息 | ||
| 313 | + */ | ||
| 314 | + queryOwnerParkRecord: function() { | ||
| 315 | + let req = this.getQueryParams(); | ||
| 316 | + //查询最近三个月的 | ||
| 317 | + let beginTime = new Date(); | ||
| 318 | + let endTime = new Date(); | ||
| 319 | + beginTime.setMonth(beginTime.getMonth() - 3); | ||
| 320 | + req.beginTime = beginTime; | ||
| 321 | + req.endTime = endTime; | ||
| 322 | + req.baseRequest={ | ||
| 323 | + pageNum:this.currentPage, | ||
| 324 | + pageSize:this.pageSize, | ||
| 265 | }, | 325 | }, |
| 266 | - ] | ||
| 267 | - } | 326 | + queryOwnerParkRecord (req).then(response =>{ |
| 327 | + if(response.code=='8888'){ | ||
| 328 | + this.orderData = response.data.dataList; | ||
| 329 | + this.total = response.data.pageTotals; | ||
| 330 | + }else{ | ||
| 331 | + console.log(response); | ||
| 332 | + } | ||
| 333 | + | ||
| 334 | + }); | ||
| 335 | + }, | ||
| 336 | + // 获取子组件页码方法 | ||
| 337 | + handleSizeChange: function(page) { | ||
| 338 | + console.log(page) | ||
| 339 | + this.currentPage = page; | ||
| 340 | + /** 调用表格数据.*/ | ||
| 341 | + this.queryOwnerParkRecord(); | ||
| 342 | + | ||
| 343 | + }, | ||
| 344 | + | ||
| 345 | + | ||
| 346 | + }, | ||
| 347 | + | ||
| 268 | } | 348 | } |
| 269 | -} | ||
| 270 | </script> | 349 | </script> |
| 271 | 350 | ||
| 272 | <style lang="scss" scoped> | 351 | <style lang="scss" scoped> |
src/views/information/index.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class=""> | 2 | <div class=""> |
| 3 | - <!--卡片--> | ||
| 4 | - <el-row :gutter="16" class=""> | ||
| 5 | - <el-col :span="8"> | ||
| 6 | - <el-card class="box-card"> | ||
| 7 | - <el-upload | ||
| 8 | - class="avatar-uploader text-center" | ||
| 9 | - action="https://jsonplaceholder.typicode.com/posts/" | ||
| 10 | - :show-file-list="false" | ||
| 11 | - :on-success="handleAvatarSuccess" | ||
| 12 | - :on-remove="handleRemove" | ||
| 13 | - :before-upload="beforeAvatarUpload"> | ||
| 14 | - <img v-if="imageUrl" :src="imageUrl" class="avatar"> | ||
| 15 | - <i v-else class="el-icon-plus avatar-uploader-icon"></i> | ||
| 16 | - </el-upload> | ||
| 17 | - <!--<el-button class="text-center" size="small" type="primary">点击上传</el-button>--> | ||
| 18 | - <!--<div slot="tip" class="el-upload__tip"></div>--> | ||
| 19 | - <div class="common-color text-center" style="line-height: 30px">15143234323</div> | ||
| 20 | - | ||
| 21 | - <div class="font-size12 text-center" style="line-height: 30px">支持JPG格式且小于5MB</div> | ||
| 22 | - <div class="font-size12 text-center" style="height: 146px"> </div> | ||
| 23 | - </el-card> | ||
| 24 | - </el-col> | ||
| 25 | - <el-col :span="16"> | ||
| 26 | - <el-card class="box-card"> | ||
| 27 | - <!-- <div slot="header" class="clearfix" style="line-height: 32px;"> | ||
| 28 | - <span>个人资料</span> | ||
| 29 | - </div>--> | ||
| 30 | - <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px"> | ||
| 31 | - <el-form-item label="姓名" class="margin-bottom30" prop="username"> | ||
| 32 | - <el-input v-model="ruleForm.username" style="width: 300px"></el-input> | ||
| 33 | - </el-form-item> | ||
| 34 | - <el-form-item label="性别" class="margin-bottom30" prop="sex"> | ||
| 35 | - <el-select v-model="ruleForm.sex" style="width: 300px"> | ||
| 36 | - <el-option label="男" value="1"/> | ||
| 37 | - <el-option label="女" value="2"/> | ||
| 38 | - </el-select> | ||
| 39 | - </el-form-item> | ||
| 40 | - <el-form-item label="生日" class="margin-bottom30" prop="birthday"> | ||
| 41 | - <el-date-picker | ||
| 42 | - v-model="ruleForm.birthday" | ||
| 43 | - type="date" | ||
| 44 | - placeholder="选择日期" style="width: 300px"> | ||
| 45 | - </el-date-picker> | ||
| 46 | - </el-form-item> | ||
| 47 | - <el-form-item label="年龄" class="margin-bottom30" prop="num"> | ||
| 48 | - <el-input-number v-model="ruleForm.num" @change="handleChange" :min="1" :max="150" style="width: 300px"></el-input-number> | ||
| 49 | - </el-form-item> | ||
| 50 | - <el-form-item label="位置" class="margin-bottom30" prop="address"> | ||
| 51 | - <el-input type="text" v-model="ruleForm.address" style="width: 300px"></el-input> | ||
| 52 | - </el-form-item> | ||
| 53 | - | ||
| 54 | - <el-form-item> | ||
| 55 | - <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button> | ||
| 56 | - <el-button @click="resetForm('ruleForm')">取消</el-button> | ||
| 57 | - </el-form-item> | ||
| 58 | - </el-form> | ||
| 59 | - </el-card> | ||
| 60 | - </el-col> | ||
| 61 | - </el-row> | 3 | + <!--卡片--> |
| 4 | + <el-row :gutter="16" class=""> | ||
| 5 | + <el-col :span="8"> | ||
| 6 | + <el-card class="box-card" style="height: 364px"> | ||
| 7 | + <el-form status-icon :rules="rules" ref="fileUploadForm"> | ||
| 8 | + <el-upload | ||
| 9 | + class="avatar-uploader text-center" | ||
| 10 | + action="#" | ||
| 11 | + :show-file-list="false" | ||
| 12 | + :on-success="handleAvatarSuccess" | ||
| 13 | + :on-remove="handleRemove" | ||
| 14 | + :before-upload="beforeAvatarUpload"> | ||
| 15 | + <img v-if="imageUrl" :src="imageUrl" class="avatar"> | ||
| 16 | + <i v-else class="el-icon-plus avatar-uploader-icon"></i> | ||
| 17 | + </el-upload> | ||
| 18 | + </el-form> | ||
| 19 | + <!--<el-button class="text-center" size="small" type="primary">点击上传</el-button>--> | ||
| 20 | + <!--<div slot="tip" class="el-upload__tip"></div>--> | ||
| 21 | + <div class="common-color text-center" style="line-height: 60px;font-size: 24px">{{userPhone}}</div> | ||
| 22 | + | ||
| 23 | + <div class="font-size12 text-center" style="line-height: 30px">支持JPG格式且小于5MB</div> | ||
| 24 | + <div class="font-size12 text-center" style="height: 146px"></div> | ||
| 25 | + </el-card> | ||
| 26 | + </el-col> | ||
| 27 | + <el-col :span="16"> | ||
| 28 | + <el-card class="box-card"> | ||
| 29 | + <!-- <div slot="header" class="clearfix" style="line-height: 32px;"> | ||
| 30 | + <span>个人资料</span> | ||
| 31 | + </div>--> | ||
| 32 | + <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px"> | ||
| 33 | + <el-form-item label="姓名" class="margin-bottom30" prop="username"> | ||
| 34 | + <el-input v-model="ruleForm.username" style="width: 300px"></el-input> | ||
| 35 | + </el-form-item> | ||
| 36 | + <el-form-item label="性别" class="margin-bottom30" prop="sex"> | ||
| 37 | + <el-select v-model="ruleForm.sex" style="width: 300px"> | ||
| 38 | + <el-option label="男" value="1"/> | ||
| 39 | + <el-option label="女" value="2"/> | ||
| 40 | + <el-option label="未知" value="3"/> | ||
| 41 | + </el-select> | ||
| 42 | + </el-form-item> | ||
| 43 | + <el-form-item label="生日" class="margin-bottom30" prop="birthday"> | ||
| 44 | + <el-date-picker | ||
| 45 | + v-model="ruleForm.birthday" | ||
| 46 | + type="date" | ||
| 47 | + placeholder="选择日期" style="width: 300px"> | ||
| 48 | + </el-date-picker> | ||
| 49 | + </el-form-item> | ||
| 50 | + <el-form-item label="位置" class="margin-bottom30" prop="address"> | ||
| 51 | + <el-input type="text" v-model="ruleForm.address" style="width: 300px"></el-input> | ||
| 52 | + </el-form-item> | ||
| 53 | + | ||
| 54 | + <el-form-item> | ||
| 55 | + <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button> | ||
| 56 | + </el-form-item> | ||
| 57 | + </el-form> | ||
| 58 | + </el-card> | ||
| 59 | + </el-col> | ||
| 60 | + </el-row> | ||
| 62 | </div> | 61 | </div> |
| 63 | </template> | 62 | </template> |
| 64 | 63 | ||
| 65 | <script> | 64 | <script> |
| 65 | + import {uploadUserPic,updatePersonByCustId} from '@/api/user.js'; | ||
| 66 | + | ||
| 66 | export default { | 67 | export default { |
| 67 | data() { | 68 | data() { |
| 68 | return { | 69 | return { |
| 69 | imageUrl: '', | 70 | imageUrl: '', |
| 70 | ruleForm: { | 71 | ruleForm: { |
| 71 | - username: '万八', | ||
| 72 | - num: '23', | ||
| 73 | - sex:'男', | ||
| 74 | - birthday: '2019-08-17', | ||
| 75 | - address: '北京海淀区上地五街1003号' | 72 | + username: '', |
| 73 | + num: '', | ||
| 74 | + sex: '', | ||
| 75 | + birthday: '', | ||
| 76 | + address: '', | ||
| 77 | + custId: '', | ||
| 76 | }, | 78 | }, |
| 79 | + userPhone:'', | ||
| 77 | rules: { | 80 | rules: { |
| 78 | username: [ | 81 | username: [ |
| 79 | - { required: true, message: '请输入活动名称', trigger: 'blur' }, | ||
| 80 | - { min: 1, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' } | 82 | + {required: true, message: '请输入用户名', trigger: 'blur'}, |
| 83 | + {min: 1, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'} | ||
| 81 | ], | 84 | ], |
| 82 | birthday: [ | 85 | birthday: [ |
| 83 | - { required: true, message: '请输入日期', trigger: 'blur' }, | ||
| 84 | - { type: 'email', message: '请输入正确的日期', trigger: ['blur', 'change'] } | 86 | + {required: true, message: '请输入日期', trigger: 'blur'} |
| 85 | ], | 87 | ], |
| 86 | address: [ | 88 | address: [ |
| 87 | - { required: true, message: '请输入活动名称', trigger: 'blur' }, | ||
| 88 | - { min: 1, max: 30, message: '长度在 1 到 30 个字符', trigger: 'blur' } | 89 | + {required: true, message: '请输入地址信息', trigger: 'blur'}, |
| 90 | + {min: 1, max: 30, message: '长度在 1 到 30 个字符', trigger: 'blur'} | ||
| 89 | ], | 91 | ], |
| 90 | } | 92 | } |
| 91 | }; | 93 | }; |
| @@ -96,8 +98,10 @@ | @@ -96,8 +98,10 @@ | ||
| 96 | }, | 98 | }, |
| 97 | handleAvatarSuccess(res, file) { | 99 | handleAvatarSuccess(res, file) { |
| 98 | this.imageUrl = URL.createObjectURL(file.raw); | 100 | this.imageUrl = URL.createObjectURL(file.raw); |
| 101 | + debugger | ||
| 99 | }, | 102 | }, |
| 100 | beforeAvatarUpload(file) { | 103 | beforeAvatarUpload(file) { |
| 104 | + let that = this; | ||
| 101 | const isJPG = file.type === 'image/jpeg'; | 105 | const isJPG = file.type === 'image/jpeg'; |
| 102 | const isLt5M = file.size / 1024 / 1024 < 5; | 106 | const isLt5M = file.size / 1024 / 1024 < 5; |
| 103 | 107 | ||
| @@ -107,15 +111,76 @@ | @@ -107,15 +111,76 @@ | ||
| 107 | if (!isLt5M) { | 111 | if (!isLt5M) { |
| 108 | this.$message.error('上传头像图片大小不能超过 5MB!'); | 112 | this.$message.error('上传头像图片大小不能超过 5MB!'); |
| 109 | } | 113 | } |
| 114 | + let userInfo = this.$store.state.user.userInfo; | ||
| 115 | + let fd = new FormData(); | ||
| 116 | + fd.append('custId', userInfo.custId) | ||
| 117 | + fd.append('file', file) | ||
| 118 | + uploadUserPic(fd).then(response => { | ||
| 119 | + if(response.code ='8888'){ | ||
| 120 | + that.imageUrl=response.data; | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + | ||
| 124 | + }); | ||
| 125 | + | ||
| 126 | + | ||
| 110 | return isJPG && isLt5M; | 127 | return isJPG && isLt5M; |
| 111 | }, | 128 | }, |
| 129 | + submitForm: function (formName) { | ||
| 130 | + let username = this.ruleForm.username; | ||
| 131 | + let sex = this.ruleForm.sex; | ||
| 132 | + let birthday = this.ruleForm.birthday | ||
| 133 | + let address = this.ruleForm.address; | ||
| 134 | + let custId = this.ruleForm.custId; | ||
| 135 | + | ||
| 136 | + this.$refs[formName].validate((valid) => { | ||
| 137 | + if (valid) { | ||
| 138 | + let req ={ | ||
| 139 | + custName:username, | ||
| 140 | + sex:sex, | ||
| 141 | + birthDate:birthday, | ||
| 142 | + address:address, | ||
| 143 | + custId:custId | ||
| 144 | + }; | ||
| 145 | + updatePersonByCustId(req).then(response =>{ | ||
| 146 | + if(response.code ='8888'){ | ||
| 147 | + debugger | ||
| 148 | + let userInfo = this.$store.state.user.userInfo; | ||
| 149 | + userInfo.custName=username; | ||
| 150 | + userInfo.sex=sex; | ||
| 151 | + userInfo.birthDate=birthday; | ||
| 152 | + userInfo.address=address; | ||
| 153 | + this.$message({ | ||
| 154 | + type: 'success', | ||
| 155 | + message: '更新用户信息成功!' | ||
| 156 | + }); | ||
| 157 | + } | ||
| 158 | + }); | ||
| 159 | + } | ||
| 160 | + }); | ||
| 161 | + }, | ||
| 112 | resetForm(formName) { | 162 | resetForm(formName) { |
| 113 | this.$refs[formName].resetFields(); | 163 | this.$refs[formName].resetFields(); |
| 164 | + }, | ||
| 165 | + queryUserInfo: function () { | ||
| 166 | + let userInfo = this.$store.state.user.userInfo; | ||
| 167 | + this.userPhone=userInfo.userPhone; | ||
| 168 | + this.ruleForm = { | ||
| 169 | + username: userInfo.custName, | ||
| 170 | + //num: '', | ||
| 171 | + sex: userInfo.sex + "", | ||
| 172 | + birthday: userInfo.birthDate, | ||
| 173 | + address: userInfo.address, | ||
| 174 | + custId: userInfo.custId | ||
| 175 | + } | ||
| 114 | } | 176 | } |
| 177 | + }, | ||
| 178 | + mounted: function () { | ||
| 179 | + this.queryUserInfo(); | ||
| 115 | } | 180 | } |
| 116 | } | 181 | } |
| 117 | </script> | 182 | </script> |
| 118 | -<style lang="scss" > | 183 | +<style lang="scss"> |
| 119 | 184 | ||
| 120 | .avatar-uploader .el-upload { | 185 | .avatar-uploader .el-upload { |
| 121 | border: 1px dashed #d9d9d9; | 186 | border: 1px dashed #d9d9d9; |
| @@ -124,9 +189,11 @@ | @@ -124,9 +189,11 @@ | ||
| 124 | position: relative; | 189 | position: relative; |
| 125 | overflow: hidden; | 190 | overflow: hidden; |
| 126 | } | 191 | } |
| 192 | + | ||
| 127 | .avatar-uploader .el-upload:hover { | 193 | .avatar-uploader .el-upload:hover { |
| 128 | border-color: #409EFF; | 194 | border-color: #409EFF; |
| 129 | } | 195 | } |
| 196 | + | ||
| 130 | .avatar-uploader-icon { | 197 | .avatar-uploader-icon { |
| 131 | font-size: 28px; | 198 | font-size: 28px; |
| 132 | color: #8c939d; | 199 | color: #8c939d; |
| @@ -135,12 +202,14 @@ | @@ -135,12 +202,14 @@ | ||
| 135 | line-height: 178px; | 202 | line-height: 178px; |
| 136 | text-align: center; | 203 | text-align: center; |
| 137 | } | 204 | } |
| 205 | + | ||
| 138 | .avatar { | 206 | .avatar { |
| 139 | width: 178px; | 207 | width: 178px; |
| 140 | height: 178px; | 208 | height: 178px; |
| 141 | display: block; | 209 | display: block; |
| 142 | } | 210 | } |
| 143 | - .margin-bottom30{ | 211 | + |
| 212 | + .margin-bottom30 { | ||
| 144 | margin-bottom: 30px; | 213 | margin-bottom: 30px; |
| 145 | } | 214 | } |
| 146 | </style> | 215 | </style> |
src/views/login/index.vue
| @@ -109,14 +109,16 @@ export default { | @@ -109,14 +109,16 @@ export default { | ||
| 109 | //获取验证码 | 109 | //获取验证码 |
| 110 | else { | 110 | else { |
| 111 | sendValidatorCode(phone).then(response =>{ | 111 | sendValidatorCode(phone).then(response =>{ |
| 112 | - if(response.code=='8888'){ | 112 | + let data = response.data; |
| 113 | + if(data.code=='8888'){ | ||
| 113 | this.$message({ | 114 | this.$message({ |
| 114 | type: 'success', | 115 | type: 'success', |
| 115 | message: '验证码发送成功!' | 116 | message: '验证码发送成功!' |
| 116 | }); | 117 | }); |
| 117 | } | 118 | } |
| 118 | }); | 119 | }); |
| 119 | - this.validateBtn(); | 120 | + //this.validateBtn(); |
| 121 | + | ||
| 120 | } | 122 | } |
| 121 | }, | 123 | }, |
| 122 | validateBtn(){ | 124 | validateBtn(){ |
| @@ -136,7 +138,6 @@ export default { | @@ -136,7 +138,6 @@ export default { | ||
| 136 | }, | 138 | }, |
| 137 | handleLogin() { | 139 | handleLogin() { |
| 138 | this.$refs.loginForm.validate(valid => { | 140 | this.$refs.loginForm.validate(valid => { |
| 139 | - debugger | ||
| 140 | if (valid) { | 141 | if (valid) { |
| 141 | this.loading = true | 142 | this.loading = true |
| 142 | this.$store.dispatch('user/login', this.loginForm).then(() => { | 143 | this.$store.dispatch('user/login', this.loginForm).then(() => { |
src/views/mycar/index.vue
| @@ -5,113 +5,208 @@ | @@ -5,113 +5,208 @@ | ||
| 5 | <el-row :gutter="20"> | 5 | <el-row :gutter="20"> |
| 6 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> | 6 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> |
| 7 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | 7 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> |
| 8 | - <el-form-item label="我的账户"> | ||
| 9 | - <el-input v-model="form.email" maxlength="20" readonly /> | 8 | + <el-form-item label="账户ID"> |
| 9 | + <el-input v-model="form.custId" maxlength="20" :disabled="true"/> | ||
| 10 | + </el-form-item> | ||
| 11 | + </el-col> | ||
| 12 | + <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1" :offset="8"> | ||
| 13 | + <el-form-item label="手机号"> | ||
| 14 | + <el-input v-model="form.phone" maxlength="20" :disabled="true"/> | ||
| 10 | </el-form-item> | 15 | </el-form-item> |
| 11 | </el-col> | 16 | </el-col> |
| 12 | </el-form> | 17 | </el-form> |
| 13 | </el-row> | 18 | </el-row> |
| 14 | </div> | 19 | </div> |
| 20 | + <el-row :gutter="20" style="margin-top: 8px"> | ||
| 21 | + <el-col :span="12"> | ||
| 22 | + <el-card class="box-card" style="height: 300px"> | ||
| 23 | + <div slot="header" class="clearfix"> | ||
| 24 | + <span>车牌绑定</span> | ||
| 25 | + </div> | ||
| 26 | + <el-form ref="bondform" :model="bondform" label-width="60px" label-position="left" :rules="rules"> | ||
| 27 | + <el-row :gutter="20"> | ||
| 28 | + <el-col :span="12"> | ||
| 29 | + <el-form-item label="车牌号" prop="carNum"> | ||
| 30 | + <el-input type="text" v-model="bondform.carNum"/> | ||
| 31 | + </el-form-item> | ||
| 32 | + </el-col> | ||
| 33 | + <el-col :span="12"> | ||
| 34 | + <el-button type="primary" :loading="bondformBtnVisible" @click="bondCarNum('bondform')">绑定车牌</el-button> | ||
| 35 | + </el-col> | ||
| 36 | + </el-row> | ||
| 37 | + | ||
| 38 | + </el-form> | ||
| 39 | + | ||
| 40 | + </el-card> | ||
| 41 | + </el-col> | ||
| 42 | + <el-col :span="12"> | ||
| 43 | + <el-card class="box-card" style="height: 300px"> | ||
| 44 | + <div slot="header" class="clearfix"> | ||
| 45 | + <span>解绑车牌</span> | ||
| 46 | + </div> | ||
| 47 | + <el-form ref="form" :model="form" label-width="60px" label-position="left"> | ||
| 48 | + <el-row :gutter="20" v-for="item in alredyBoundCar" style="margin-top: 4px"> | ||
| 49 | + <el-col :span="12"> | ||
| 50 | + <el-form-item label="已绑车牌"> | ||
| 51 | + <el-input :value="item.carNumber"/> | ||
| 52 | + </el-form-item> | ||
| 53 | + </el-col> | ||
| 54 | + <el-col :span="12"> | ||
| 55 | + <el-button type="primary" @click="alredyBoundCarBtn(item.carNumber)">解绑车牌</el-button> | ||
| 56 | + </el-col> | ||
| 57 | + </el-row> | ||
| 58 | + | ||
| 59 | + </el-form> | ||
| 60 | + | ||
| 61 | + </el-card> | ||
| 62 | + </el-col> | ||
| 63 | + </el-row> | ||
| 64 | + | ||
| 15 | 65 | ||
| 16 | - <el-card shadow="always" class="card-second-top"> | ||
| 17 | - <div slot="header" class="clearfix" style="line-height: 32px;"> | ||
| 18 | - <span>我的车牌</span> | ||
| 19 | - <el-button type="primary" size="small" style="float: right" @click="dialogFormVisible = true">绑定车牌</el-button> | ||
| 20 | - </div> | ||
| 21 | - <el-form label-width="60px" style="margin-bottom: 55px;" label-position="left"> | ||
| 22 | - <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | ||
| 23 | - <el-form-item label=""> | ||
| 24 | - <el-select v-model="value" > | ||
| 25 | - <el-option | ||
| 26 | - v-for="item in region" | ||
| 27 | - :key="item.value" | ||
| 28 | - :label="item.label" | ||
| 29 | - :value="item.value" | ||
| 30 | - > | ||
| 31 | - </el-option> | ||
| 32 | - </el-select> | ||
| 33 | - </el-form-item> | ||
| 34 | - </el-col> | ||
| 35 | - <el-col :xs="8" :sm="6" :md="3" :lg="3" :xl="1"> | ||
| 36 | - <el-button type="primary" @click="onSubmit">解绑</el-button> | ||
| 37 | - </el-col> | ||
| 38 | - </el-form> | ||
| 39 | - </el-card> | ||
| 40 | - | ||
| 41 | - <el-dialog title="绑定车牌" :visible.sync="dialogFormVisible"> | ||
| 42 | - <el-form :model="problemform" label-width="60px" label-position="left"> | ||
| 43 | - <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | ||
| 44 | - <el-form-item label="车牌"> | ||
| 45 | - <el-input v-model="problemform.carnum" maxlength="20" /> | ||
| 46 | - </el-form-item> | ||
| 47 | - </el-col> | ||
| 48 | - </el-form> | ||
| 49 | - <div slot="footer" class="dialog-footer"> | ||
| 50 | - <el-button @click="dialogFormVisible = false">取 消</el-button> | ||
| 51 | - <el-button type="primary" @click="dialogFormVisible = false">绑定</el-button> | ||
| 52 | - </div> | ||
| 53 | - </el-dialog> | ||
| 54 | </div> | 66 | </div> |
| 55 | </template> | 67 | </template> |
| 56 | 68 | ||
| 57 | <script> | 69 | <script> |
| 70 | + import {getPersonCarNumPC,boundCarNum,unboundCarNum} from '@/api/mycar.js'; | ||
| 58 | export default { | 71 | export default { |
| 59 | data() { | 72 | data() { |
| 73 | + var carNumValidator = (rule, value, callback) => { | ||
| 74 | + if (value === '') { | ||
| 75 | + callback(new Error('请输入车牌号')); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + if (!/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test(this.bondform.carNum)||this.bondform.carNum.length<7) { | ||
| 79 | + callback(new Error('请输入正确的车牌号')); | ||
| 80 | + } | ||
| 81 | + callback(); | ||
| 82 | + | ||
| 83 | + }; | ||
| 60 | return { | 84 | return { |
| 61 | form: { | 85 | form: { |
| 62 | - email: '13133415312', | 86 | + custId: '', |
| 87 | + phone: '', | ||
| 63 | }, | 88 | }, |
| 64 | - value:'京A32323', | ||
| 65 | - region: [ | ||
| 66 | - { | ||
| 67 | - value: '京A32323', | ||
| 68 | - label: '京A32323', | ||
| 69 | - },{ | ||
| 70 | - value: '京A93323', | ||
| 71 | - label: '京A93323', | ||
| 72 | - }, | ||
| 73 | - ], | ||
| 74 | - dialogFormVisible:false, | ||
| 75 | - problemform:{ | ||
| 76 | - carnum:'', | ||
| 77 | - } | 89 | + /**绑定车牌.*/ |
| 90 | + bondform: { | ||
| 91 | + carNum: '' | ||
| 92 | + }, | ||
| 93 | + | ||
| 94 | + /**已绑定车牌.*/ | ||
| 95 | + alredyBoundCar:[], | ||
| 96 | + bondformBtnVisible: false, | ||
| 97 | + dialogFormVisible: false, | ||
| 98 | + problemform: { | ||
| 99 | + carnum: '', | ||
| 100 | + }, | ||
| 101 | + rules:{ | ||
| 102 | + carNum:[{ validator: carNumValidator, trigger: 'blur' }] | ||
| 103 | + } | ||
| 78 | } | 104 | } |
| 105 | + | ||
| 106 | + | ||
| 79 | }, | 107 | }, |
| 80 | methods: { | 108 | methods: { |
| 81 | - onSubmit() { | ||
| 82 | - this.$message({ | ||
| 83 | - message: '解绑成功!', | ||
| 84 | - type: 'success' | 109 | + /**绑定车牌*/ |
| 110 | + bondCarNum:function(formName){ | ||
| 111 | + let that = this; | ||
| 112 | + let custId = this.form.custId; | ||
| 113 | + let carNum = this.bondform.carNum; | ||
| 114 | + this.$refs[formName].validate((valid) => { | ||
| 115 | + if (valid) { | ||
| 116 | + let req ={ | ||
| 117 | + custId:custId, | ||
| 118 | + carNumber:carNum, | ||
| 119 | + sysCode:'1001', | ||
| 120 | + carBindingStatus:1, //绑定 | ||
| 121 | + }; | ||
| 122 | + boundCarNum(req).then(response =>{ | ||
| 123 | + if(response.code='8888'){ | ||
| 124 | + that.bondform.carNum=''; | ||
| 125 | + this.$message({ | ||
| 126 | + type: 'success', | ||
| 127 | + message: '车牌绑定成功!' | ||
| 128 | + }); | ||
| 129 | + | ||
| 130 | + } | ||
| 131 | + }); | ||
| 132 | + } else { | ||
| 133 | + console.log('error submit!!'); | ||
| 134 | + return false; | ||
| 135 | + } | ||
| 85 | }); | 136 | }); |
| 86 | }, | 137 | }, |
| 87 | - problemonSubmit() { | ||
| 88 | - this.$message('提交成功!') | ||
| 89 | - }, | ||
| 90 | - onCancel() { | ||
| 91 | - this.$message({ | ||
| 92 | - message: 'cancel!', | ||
| 93 | - type: 'warning' | ||
| 94 | - }) | 138 | + /**获取车牌.*/ |
| 139 | + getPersonCarNumPC:function () { | ||
| 140 | + let that =this; | ||
| 141 | + getPersonCarNumPC().then(response =>{ | ||
| 142 | + | ||
| 143 | + if(response.code ='8888'){ | ||
| 144 | + that.alredyBoundCar=response.data; | ||
| 145 | + } | ||
| 146 | + }); | ||
| 95 | }, | 147 | }, |
| 148 | + /**解绑车牌.*/ | ||
| 149 | + alredyBoundCarBtn:function (carNum) { | ||
| 150 | + if("" == carNum || null ==carNum || undefined == carNum){ | ||
| 151 | + this.$message({ | ||
| 152 | + type: 'error', | ||
| 153 | + message: '解绑的车牌不能为空' | ||
| 154 | + }); | ||
| 155 | + } | ||
| 156 | + let that =this; | ||
| 157 | + let custId = this.form.custId; | ||
| 158 | + let req ={ | ||
| 159 | + custId:custId, | ||
| 160 | + carNumber:carNum, | ||
| 161 | + sysCode:'1001', | ||
| 162 | + carBindingStatus:2, //解绑 | ||
| 163 | + }; | ||
| 164 | + unboundCarNum(req).then(response =>{ | ||
| 165 | + if(response.code ='8888'){ | ||
| 166 | + this.$message({ | ||
| 167 | + type: 'success', | ||
| 168 | + message: '车牌解绑成功!' | ||
| 169 | + }); | ||
| 170 | + this.getPersonCarNumPC(); | ||
| 171 | + }else{ | ||
| 172 | + this.$message({ | ||
| 173 | + type: 'error', | ||
| 174 | + message: '车牌解绑失败!' | ||
| 175 | + }); | ||
| 176 | + } | ||
| 177 | + }); | ||
| 178 | + } | ||
| 179 | + }, | ||
| 180 | + mounted:function(){ | ||
| 181 | + let userInfo = this.$store.state.user.userInfo; | ||
| 182 | + this.form={ | ||
| 183 | + custId: userInfo.custId, | ||
| 184 | + phone: userInfo.userPhone | ||
| 185 | + }; | ||
| 186 | + this.getPersonCarNumPC(); | ||
| 96 | } | 187 | } |
| 97 | } | 188 | } |
| 98 | </script> | 189 | </script> |
| 99 | 190 | ||
| 100 | <style lang="scss"> | 191 | <style lang="scss"> |
| 101 | - .search-wrap{ | 192 | + .search-wrap { |
| 102 | background-color: #FFF; | 193 | background-color: #FFF; |
| 103 | padding: 15px; | 194 | padding: 15px; |
| 104 | } | 195 | } |
| 105 | - .card-second-top{ | 196 | + |
| 197 | + .card-second-top { | ||
| 106 | margin-top: 15px; | 198 | margin-top: 15px; |
| 107 | } | 199 | } |
| 108 | - .el-card__header{ | 200 | + |
| 201 | + .el-card__header { | ||
| 109 | padding: 10px 20px; | 202 | padding: 10px 20px; |
| 110 | } | 203 | } |
| 111 | - .el-radio{ | 204 | + |
| 205 | + .el-radio { | ||
| 112 | margin-right: 80px; | 206 | margin-right: 80px; |
| 113 | } | 207 | } |
| 114 | - .el-radio.is-bordered+.el-radio.is-bordered{ | 208 | + |
| 209 | + .el-radio.is-bordered + .el-radio.is-bordered { | ||
| 115 | margin-left: 0px; | 210 | margin-left: 0px; |
| 116 | margin-top: 15px; | 211 | margin-top: 15px; |
| 117 | } | 212 | } |
src/views/myevaluate/index.vue
| @@ -5,22 +5,14 @@ | @@ -5,22 +5,14 @@ | ||
| 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> | 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> |
| 6 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | 6 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> |
| 7 | <el-form-item label="问题类型"> | 7 | <el-form-item label="问题类型"> |
| 8 | - <el-select v-model="form.region" placeholder="请选择问题类型"> | ||
| 9 | - <el-option label="问题类型1" value="1"/> | ||
| 10 | - <el-option label="问题类型2" value="2"/> | ||
| 11 | - </el-select> | ||
| 12 | - </el-form-item> | ||
| 13 | - </el-col> | ||
| 14 | - <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | ||
| 15 | - <el-form-item label="状态"> | ||
| 16 | - <el-select v-model="form.region" placeholder="请选择状态"> | ||
| 17 | - <el-option label="状态1" value="11"/> | ||
| 18 | - <el-option label="状态2" value="22"/> | 8 | + <el-select v-model="form.feedbackId" placeholder="请选择问题类型"> |
| 9 | + <el-option v-for="item in problemTpyeSelectData" :label="item.name" :value="item.code"/> | ||
| 10 | + | ||
| 19 | </el-select> | 11 | </el-select> |
| 20 | </el-form-item> | 12 | </el-form-item> |
| 21 | </el-col> | 13 | </el-col> |
| 22 | - <el-col :xs="16" :sm="6" :md="3" :lg="3" :xl="1"> | ||
| 23 | - <el-button type="primary" @click="onSubmit">查询</el-button> | 14 | + <el-col :xs="16" :sm="6" :md="3" :lg="3" :xl="1" :offset="12"> |
| 15 | + <el-button type="primary" @click="queryBtn">查询</el-button> | ||
| 24 | </el-col> | 16 | </el-col> |
| 25 | </el-form> | 17 | </el-form> |
| 26 | </el-row> | 18 | </el-row> |
| @@ -29,120 +21,195 @@ | @@ -29,120 +21,195 @@ | ||
| 29 | <el-card shadow="always" class="card-second-top"> | 21 | <el-card shadow="always" class="card-second-top"> |
| 30 | <div slot="header" class="clearfix" style="line-height: 32px;"> | 22 | <div slot="header" class="clearfix" style="line-height: 32px;"> |
| 31 | <span>详细记录</span> | 23 | <span>详细记录</span> |
| 32 | - <el-button type="primary" size="small" style="float: right" @click="dialogFormVisible = true">评价</el-button> | 24 | + <el-button type="primary" size="small" style="float: right" @click="dialogOpen">评价</el-button> |
| 33 | </div> | 25 | </div> |
| 34 | <el-table | 26 | <el-table |
| 35 | :data="orderData" | 27 | :data="orderData" |
| 36 | style="width: 100%;" | 28 | style="width: 100%;" |
| 37 | :show-overflow-tooltip="true"> | 29 | :show-overflow-tooltip="true"> |
| 38 | <el-table-column | 30 | <el-table-column |
| 39 | - prop="parkName" | 31 | + prop="feedbackCode" |
| 40 | label="问题类型" | 32 | label="问题类型" |
| 33 | + :formatter="formatProblemType" | ||
| 41 | :show-overflow-tooltip="true"> | 34 | :show-overflow-tooltip="true"> |
| 42 | </el-table-column> | 35 | </el-table-column> |
| 43 | <el-table-column | 36 | <el-table-column |
| 44 | - prop="license" | 37 | + prop="suggestDesc" |
| 45 | label="问题内容" | 38 | label="问题内容" |
| 46 | :show-overflow-tooltip="true"> | 39 | :show-overflow-tooltip="true"> |
| 47 | </el-table-column> | 40 | </el-table-column> |
| 48 | <el-table-column | 41 | <el-table-column |
| 49 | - prop="inTime" | 42 | + prop="createDate" |
| 50 | label="提交时间" | 43 | label="提交时间" |
| 44 | + :formatter="formatCreateDate" | ||
| 51 | :show-overflow-tooltip="true"> | 45 | :show-overflow-tooltip="true"> |
| 52 | </el-table-column> | 46 | </el-table-column> |
| 53 | <el-table-column | 47 | <el-table-column |
| 54 | - prop="status" | ||
| 55 | - label="状态"> | 48 | + prop="userPhone" |
| 49 | + :formatter="formatserPhone" | ||
| 50 | + label="用户手机号"> | ||
| 56 | </el-table-column> | 51 | </el-table-column> |
| 57 | </el-table> | 52 | </el-table> |
| 58 | <el-pagination | 53 | <el-pagination |
| 59 | - :page-size="10" | ||
| 60 | - :pager-count="11" | 54 | + :page-size="pageSize" |
| 55 | + :pager-count="currentPage" | ||
| 61 | layout="prev, pager, next" | 56 | layout="prev, pager, next" |
| 57 | + @current-change="handleCurrentChange" | ||
| 62 | :total="total"> | 58 | :total="total"> |
| 63 | </el-pagination> | 59 | </el-pagination> |
| 64 | </el-card> | 60 | </el-card> |
| 65 | 61 | ||
| 66 | <el-dialog title="提交问题" :visible.sync="dialogFormVisible"> | 62 | <el-dialog title="提交问题" :visible.sync="dialogFormVisible"> |
| 67 | - <el-form :model="problemform"> | 63 | + <el-form :model="problemform" :rules="rules" ref="problemform"> |
| 68 | <el-form-item label=""> | 64 | <el-form-item label=""> |
| 69 | <el-radio-group v-model="problemform.resource" size=""> | 65 | <el-radio-group v-model="problemform.resource" size=""> |
| 70 | - <el-radio border label="APP问题"></el-radio> | ||
| 71 | - <el-radio border label="支付问题"></el-radio> | ||
| 72 | - <el-radio border label="车场问题"></el-radio> | ||
| 73 | - <el-radio border label="服务投诉"></el-radio> | ||
| 74 | - <el-radio border label="改进建议"></el-radio> | ||
| 75 | - <el-radio border label="其他问题"></el-radio> | 66 | + <el-radio border v-for="item in problemTpyeSelectData" :label="item.code">{{item.name}}</el-radio> |
| 76 | </el-radio-group> | 67 | </el-radio-group> |
| 77 | </el-form-item> | 68 | </el-form-item> |
| 78 | - <el-form-item label="问题内容"> | ||
| 79 | - <el-input type="textarea" v-model="problemform.desc"></el-input> | 69 | + <el-form-item label="问题内容" style="margin-top: 16px" prop="desc"> |
| 70 | + <el-input type="textarea" v-model="problemform.desc" style="width:400px"></el-input> | ||
| 80 | </el-form-item> | 71 | </el-form-item> |
| 81 | </el-form> | 72 | </el-form> |
| 82 | <div slot="footer" class="dialog-footer"> | 73 | <div slot="footer" class="dialog-footer"> |
| 83 | <el-button @click="dialogFormVisible = false">取 消</el-button> | 74 | <el-button @click="dialogFormVisible = false">取 消</el-button> |
| 84 | - <el-button type="primary" @click="dialogFormVisible = false">提交</el-button> | 75 | + <el-button type="primary" @click="executeDialog('problemform')">提交</el-button> |
| 85 | </div> | 76 | </div> |
| 86 | </el-dialog> | 77 | </el-dialog> |
| 87 | </div> | 78 | </div> |
| 88 | </template> | 79 | </template> |
| 89 | 80 | ||
| 90 | <script> | 81 | <script> |
| 82 | + import {queryFeedbackAndSuggestForPage,getFeedbackType,saveFeedbackAndSuggest} from '@/api/mysuggest.js'; | ||
| 83 | + import {timeFormatter} from '@/utils/utils.js' | ||
| 91 | export default { | 84 | export default { |
| 92 | data() { | 85 | data() { |
| 93 | return { | 86 | return { |
| 94 | form: { | 87 | form: { |
| 95 | - name: '', | ||
| 96 | - region: '', | ||
| 97 | - date1: '', | ||
| 98 | - date2: '', | ||
| 99 | - delivery: false, | ||
| 100 | - type: [], | ||
| 101 | - resource: '', | ||
| 102 | - desc: '' | 88 | + feedbackId:'' |
| 103 | }, | 89 | }, |
| 90 | + problemTpyeSelectData:[], | ||
| 104 | problemform: { | 91 | problemform: { |
| 105 | - desc: '' | 92 | + resource: '1', |
| 93 | + desc:'' | ||
| 106 | }, | 94 | }, |
| 107 | dialogFormVisible: false, | 95 | dialogFormVisible: false, |
| 108 | - total: 55, | 96 | + total: 10, |
| 109 | currentPage: 1, | 97 | currentPage: 1, |
| 110 | pageSize: 10, | 98 | pageSize: 10, |
| 111 | - orderData: [ | ||
| 112 | - { | ||
| 113 | - parkName: 'APP问题', | ||
| 114 | - license: '任你停APP闪退', | ||
| 115 | - inTime: '2019/03/07', | ||
| 116 | - status: '已受理' | ||
| 117 | - }, | ||
| 118 | - { | ||
| 119 | - parkName: '支付问题', | ||
| 120 | - license: '建议开通银联支付', | ||
| 121 | - inTime: '2019/06/02', | ||
| 122 | - status: '已受理' | ||
| 123 | - }, | ||
| 124 | - { | ||
| 125 | - parkName: '改进建议', | ||
| 126 | - license: '建议减免电动车停车费', | ||
| 127 | - inTime: '2019/06/02', | ||
| 128 | - status: '未受理' | ||
| 129 | - }, | ||
| 130 | - ] | 99 | + orderData: [], |
| 100 | + rules:{ | ||
| 101 | + desc:[ | ||
| 102 | + {required: true, message: '请输入问题内容', trigger: 'blur'}, | ||
| 103 | + {min: 1, max: 10, message: '长度在 3 到 128 个字符', trigger: 'blur'} | ||
| 104 | + ] | ||
| 105 | + } | ||
| 131 | } | 106 | } |
| 132 | }, | 107 | }, |
| 133 | methods: { | 108 | methods: { |
| 134 | - onSubmit() { | ||
| 135 | - this.$message('提交!') | 109 | + queryBtn() { |
| 110 | + let that =this; | ||
| 111 | + let userInfo = this.$store.state.user.userInfo; | ||
| 112 | + let req ={ | ||
| 113 | + baseRequest:{ | ||
| 114 | + pageNum:that.currentPage, | ||
| 115 | + pageSize:that.pageSize | ||
| 116 | + }, | ||
| 117 | + feedbackCode:this.form.feedbackId, | ||
| 118 | + custId:userInfo.custId, | ||
| 119 | + sysCode:'1000' | ||
| 120 | + }; | ||
| 121 | + queryFeedbackAndSuggestForPage(req).then(response =>{ | ||
| 122 | + if(response.code='8888'){ | ||
| 123 | + that.orderData=response.data.rows; | ||
| 124 | + that.total=response.data.total; | ||
| 125 | + } | ||
| 126 | + }); | ||
| 127 | + }, | ||
| 128 | + /**格式化问题类型.*/ | ||
| 129 | + formatProblemType:function(row, column, cellValue, index){ | ||
| 130 | + let value=""; | ||
| 131 | + if(cellValue == null || cellValue == '' ){ | ||
| 132 | + return value; | ||
| 133 | + }else{ | ||
| 134 | + this.problemTpyeSelectData.forEach(item =>{ | ||
| 135 | + if(cellValue ==item.code){ | ||
| 136 | + value =item.name; | ||
| 137 | + } | ||
| 138 | + }); | ||
| 139 | + } | ||
| 140 | + return value; | ||
| 141 | + }, | ||
| 142 | + /**格式化时间*/ | ||
| 143 | + formatCreateDate:function (row, column, cellValue, index) { | ||
| 144 | + return timeFormatter(cellValue,7) | ||
| 136 | }, | 145 | }, |
| 137 | - problemonSubmit() { | ||
| 138 | - this.$message('提交成功!') | 146 | + /**问题类型查询*/ |
| 147 | + getFeedbackType:function(){ | ||
| 148 | + getFeedbackType().then(response =>{ | ||
| 149 | + if(response.code='8888'){ | ||
| 150 | + this.problemTpyeSelectData = response.data; | ||
| 151 | + } | ||
| 152 | + }); | ||
| 139 | }, | 153 | }, |
| 140 | - onCancel() { | ||
| 141 | - this.$message({ | ||
| 142 | - message: 'cancel!', | ||
| 143 | - type: 'warning' | ||
| 144 | - }) | 154 | + /**格式化手机号*/ |
| 155 | + formatserPhone:function (row, column, cellValue, index) { | ||
| 156 | + if(cellValue == null || cellValue == undefined || cellValue == ''){ | ||
| 157 | + return "-" | ||
| 158 | + }else{ | ||
| 159 | + return cellValue.substr(0, 3)+"****"+cellValue.substr(7, 4) | ||
| 160 | + } | ||
| 145 | }, | 161 | }, |
| 162 | + /**页面改变.*/ | ||
| 163 | + handleCurrentChange:function (value) { | ||
| 164 | + this.currentPage=value; | ||
| 165 | + this.queryBtn(); | ||
| 166 | + }, | ||
| 167 | + | ||
| 168 | + dialogOpen:function(){ | ||
| 169 | + let problemform= { | ||
| 170 | + resource: '1', | ||
| 171 | + desc:'' | ||
| 172 | + }; | ||
| 173 | + this.dialogFormVisible=true; | ||
| 174 | + }, | ||
| 175 | + /**提交.*/ | ||
| 176 | + executeDialog:function(formName){ | ||
| 177 | + let that =this; | ||
| 178 | + let userInfo = this.$store.state.user.userInfo; | ||
| 179 | + let feedbackCode=that.problemform.resource; | ||
| 180 | + let suggestDesc =that.problemform.desc; | ||
| 181 | + | ||
| 182 | + this.$refs[formName].validate((valid) => { | ||
| 183 | + if (valid) { | ||
| 184 | + let req ={ | ||
| 185 | + custId:userInfo.custId, | ||
| 186 | + userPhone:userInfo.userPhone, | ||
| 187 | + feedbackCode:feedbackCode, | ||
| 188 | + suggestDesc:suggestDesc, | ||
| 189 | + sysCode:'1001' | ||
| 190 | + } | ||
| 191 | + saveFeedbackAndSuggest(req).then(response =>{ | ||
| 192 | + if(response.code='8888'){ | ||
| 193 | + this.dialogFormVisible=false; | ||
| 194 | + this.$message({ | ||
| 195 | + type: 'success', | ||
| 196 | + message: '问题提交成功!' | ||
| 197 | + }); | ||
| 198 | + that.queryBtn(); | ||
| 199 | + }else{ | ||
| 200 | + this.$message({ | ||
| 201 | + type: 'error', | ||
| 202 | + message: '问题提交失败!' | ||
| 203 | + }); | ||
| 204 | + } | ||
| 205 | + }); | ||
| 206 | + } | ||
| 207 | + }); | ||
| 208 | + } | ||
| 209 | + }, | ||
| 210 | + mounted:function () { | ||
| 211 | + this.queryBtn(); | ||
| 212 | + this.getFeedbackType(); | ||
| 146 | } | 213 | } |
| 147 | } | 214 | } |
| 148 | </script> | 215 | </script> |
src/views/order/index.vue
| @@ -3,30 +3,30 @@ | @@ -3,30 +3,30 @@ | ||
| 3 | <div class="serch-wrap"> | 3 | <div class="serch-wrap"> |
| 4 | <el-row :gutter="20"> | 4 | <el-row :gutter="20"> |
| 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> | 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> |
| 6 | - <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | 6 | + <!--<el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1">--> |
| 7 | 7 | ||
| 8 | - <el-form-item label="停车场"> | ||
| 9 | - <el-select v-model="form.region" placeholder="请选择停车场"> | ||
| 10 | - <el-option label="停车场BA" value="shanghai"/> | ||
| 11 | - <el-option label="停车场" value="beijing"/> | ||
| 12 | - </el-select> | ||
| 13 | - </el-form-item> | 8 | + <!--<el-form-item label="停车场">--> |
| 9 | + <!--<el-select v-model="form.plNos" placeholder="请选择停车场">--> | ||
| 10 | + <!--<el-option label="停车场BA" value="shanghai"/>--> | ||
| 11 | + <!--<el-option label="停车场" value="beijing"/>--> | ||
| 12 | + <!--</el-select>--> | ||
| 13 | + <!--</el-form-item>--> | ||
| 14 | 14 | ||
| 15 | - </el-col> | 15 | + <!--</el-col>--> |
| 16 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | 16 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> |
| 17 | <el-form-item label="车牌"> | 17 | <el-form-item label="车牌"> |
| 18 | - <el-input v-model="form.name" maxlength="10" /> | ||
| 19 | - </el-form-item> | ||
| 20 | - </el-col> | ||
| 21 | - <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | ||
| 22 | - <el-form-item label="类型"> | ||
| 23 | - <el-select v-model="form.region" placeholder="请选择类型"> | ||
| 24 | - <el-option label="室内停车场" value="shanghai"/> | ||
| 25 | - <el-option label="路侧停车场" value="beijing"/> | ||
| 26 | - </el-select> | 18 | + <el-input v-model="form.carNum" maxlength="10" /> |
| 27 | </el-form-item> | 19 | </el-form-item> |
| 28 | </el-col> | 20 | </el-col> |
| 29 | - <el-col :xs="8" :sm="6" :md="3" :lg="3" :xl="1"> | 21 | + <!--<el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1">--> |
| 22 | + <!--<el-form-item label="类型">--> | ||
| 23 | + <!--<el-select v-model="form.region" placeholder="请选择类型">--> | ||
| 24 | + <!--<el-option label="室内停车场" value="shanghai"/>--> | ||
| 25 | + <!--<el-option label="路侧停车场" value="beijing"/>--> | ||
| 26 | + <!--</el-select>--> | ||
| 27 | + <!--</el-form-item>--> | ||
| 28 | + <!--</el-col>--> | ||
| 29 | + <el-col :xs="8" :sm="6" :md="3" :lg="3" :xl="1" > | ||
| 30 | <el-button type="primary" @click="onSubmit">查询</el-button> | 30 | <el-button type="primary" @click="onSubmit">查询</el-button> |
| 31 | </el-col> | 31 | </el-col> |
| 32 | </el-form> | 32 | </el-form> |
| @@ -40,147 +40,151 @@ | @@ -40,147 +40,151 @@ | ||
| 40 | style="width: 100%;" | 40 | style="width: 100%;" |
| 41 | :show-overflow-tooltip="true"> | 41 | :show-overflow-tooltip="true"> |
| 42 | <el-table-column | 42 | <el-table-column |
| 43 | - prop="parkName" | 43 | + prop="plName" |
| 44 | label="停车场" | 44 | label="停车场" |
| 45 | :show-overflow-tooltip="true"> | 45 | :show-overflow-tooltip="true"> |
| 46 | </el-table-column> | 46 | </el-table-column> |
| 47 | <el-table-column | 47 | <el-table-column |
| 48 | - prop="license" | 48 | + prop="carNumber" |
| 49 | label="车牌" | 49 | label="车牌" |
| 50 | :show-overflow-tooltip="true"> | 50 | :show-overflow-tooltip="true"> |
| 51 | </el-table-column> | 51 | </el-table-column> |
| 52 | <el-table-column | 52 | <el-table-column |
| 53 | - prop="money" | ||
| 54 | - label="停车费"> | 53 | + prop="orderTotalFee" |
| 54 | + label="应收费用"> | ||
| 55 | + <template slot-scope="scope"> | ||
| 56 | + <span>{{(scope.row.orderTotalFee) |fen2Yuan}} </span> | ||
| 57 | + </template> | ||
| 58 | + </el-table-column> | ||
| 59 | + <el-table-column | ||
| 60 | + prop="orderActFee" | ||
| 61 | + label="实收费用"> | ||
| 62 | + <template slot-scope="scope"> | ||
| 63 | + <span>{{(scope.row.orderActFee) |fen2Yuan}} </span> | ||
| 64 | + </template> | ||
| 55 | </el-table-column> | 65 | </el-table-column> |
| 56 | <el-table-column | 66 | <el-table-column |
| 57 | - prop="inTime" | ||
| 58 | - label="进场时间" | 67 | + prop="parkInTime" |
| 68 | + label="入场时间" | ||
| 59 | :show-overflow-tooltip="true"> | 69 | :show-overflow-tooltip="true"> |
| 70 | + <template slot-scope="scope"> | ||
| 71 | + <span>{{(scope.row.parkInTime) |string2Date(7)}} </span> | ||
| 72 | + </template> | ||
| 60 | </el-table-column> | 73 | </el-table-column> |
| 61 | <el-table-column | 74 | <el-table-column |
| 62 | - prop="outTime" | 75 | + prop="parkOutTime" |
| 63 | label="出场时间" | 76 | label="出场时间" |
| 64 | :show-overflow-tooltip="true"> | 77 | :show-overflow-tooltip="true"> |
| 78 | + <template slot-scope="scope"> | ||
| 79 | + <span>{{(scope.row.parkOutTime) |string2Date(7)}} </span> | ||
| 80 | + </template> | ||
| 65 | </el-table-column> | 81 | </el-table-column> |
| 66 | <el-table-column | 82 | <el-table-column |
| 67 | - prop="duration" | 83 | + prop="parkingDuration" |
| 68 | label="停车时长" | 84 | label="停车时长" |
| 69 | :show-overflow-tooltip="true"> | 85 | :show-overflow-tooltip="true"> |
| 86 | + <template slot-scope="scope"> | ||
| 87 | + <span>{{(scope.row) |parkingDurationFormatter(scope.row.parkingDuration)}} </span> | ||
| 88 | + </template> | ||
| 70 | </el-table-column> | 89 | </el-table-column> |
| 71 | <el-table-column | 90 | <el-table-column |
| 72 | - prop="berthNum" | 91 | + prop="berthNo" |
| 73 | label="泊位编号"> | 92 | label="泊位编号"> |
| 74 | </el-table-column> | 93 | </el-table-column> |
| 75 | <el-table-column | 94 | <el-table-column |
| 76 | - prop="status" | 95 | + prop="orderState" |
| 77 | label="订单状态"> | 96 | label="订单状态"> |
| 97 | + <template slot-scope="scope"> | ||
| 98 | + <span>{{(scope.row) |inOutStateFormatter}} </span> | ||
| 99 | + </template> | ||
| 78 | </el-table-column> | 100 | </el-table-column> |
| 79 | </el-table> | 101 | </el-table> |
| 80 | <el-pagination | 102 | <el-pagination |
| 81 | :page-size="10" | 103 | :page-size="10" |
| 82 | :pager-count="11" | 104 | :pager-count="11" |
| 83 | layout="prev, pager, next" | 105 | layout="prev, pager, next" |
| 84 | - :total="total"> | 106 | + :total="total" |
| 107 | + @size-change="handleSizeChange" | ||
| 108 | + @current-change="handleSizeChange" | ||
| 109 | + @prev-click="handleSizeChange" | ||
| 110 | + @next-click="handleSizeChange" | ||
| 111 | + > | ||
| 85 | </el-pagination> | 112 | </el-pagination> |
| 86 | </div> | 113 | </div> |
| 87 | </div> | 114 | </div> |
| 88 | </template> | 115 | </template> |
| 89 | 116 | ||
| 90 | <script> | 117 | <script> |
| 118 | + import {queryOwnerParkRecord} from '@/api/index'; | ||
| 119 | + import {fen2Yuan,string2Date,inOutStateFormatter,parkingDurationFormatter} from '@/filters/index'; | ||
| 91 | export default { | 120 | export default { |
| 92 | data() { | 121 | data() { |
| 93 | return { | 122 | return { |
| 94 | form: { | 123 | form: { |
| 95 | - name: '', | ||
| 96 | - region: '', | ||
| 97 | - date1: '', | ||
| 98 | - date2: '', | ||
| 99 | - delivery: false, | ||
| 100 | - type: [], | ||
| 101 | - resource: '', | ||
| 102 | - desc: '' | 124 | + plNos: null, |
| 125 | + carNum: null, | ||
| 126 | + | ||
| 103 | }, | 127 | }, |
| 104 | - total: 55, | 128 | + total: 0, |
| 105 | currentPage: 1, | 129 | currentPage: 1, |
| 106 | pageSize: 10, | 130 | pageSize: 10, |
| 107 | orderData: [ | 131 | orderData: [ |
| 108 | - { | ||
| 109 | - parkName: '承德老二中停车场', | ||
| 110 | - license: '冀H7517732', | ||
| 111 | - money: '31', | ||
| 112 | - inTime: '2019-06-02 00:00:00', | ||
| 113 | - outTime: '2019-06-01 08:00:00', | ||
| 114 | - duration: '2小时28分钟43秒', | ||
| 115 | - berthNum: 'A1212231', | ||
| 116 | - status: '完成' | ||
| 117 | - }, | ||
| 118 | - { | ||
| 119 | - parkName: '承德老二中停车场', | ||
| 120 | - license: '冀H7517732', | ||
| 121 | - money: '31', | ||
| 122 | - inTime: '2019-06-02 00:00:00', | ||
| 123 | - outTime: '2019-06-01 08:00:00', | ||
| 124 | - duration: '2小时28分钟43秒', | ||
| 125 | - berthNum: 'A1212231', | ||
| 126 | - status: '完成' | ||
| 127 | - }, | ||
| 128 | - { | ||
| 129 | - parkName: '承德老二中停车场', | ||
| 130 | - license: '冀H7517732', | ||
| 131 | - money: '31', | ||
| 132 | - inTime: '2019-06-02 00:00:00', | ||
| 133 | - outTime: '2019-06-01 08:00:00', | ||
| 134 | - duration: '2小时28分钟43秒', | ||
| 135 | - berthNum: 'A1212231', | ||
| 136 | - status: '完成' | ||
| 137 | - }, | ||
| 138 | - { | ||
| 139 | - parkName: '承德老二中停车场', | ||
| 140 | - license: '冀H7517732', | ||
| 141 | - money: '31', | ||
| 142 | - inTime: '2019-06-02 00:00:00', | ||
| 143 | - outTime: '2019-06-01 08:00:00', | ||
| 144 | - duration: '2小时28分钟43秒', | ||
| 145 | - berthNum: 'A1212231', | ||
| 146 | - status: '完成' | ||
| 147 | - }, | ||
| 148 | - { | ||
| 149 | - parkName: '承德老二中停车场', | ||
| 150 | - license: '冀H7517732', | ||
| 151 | - money: '31', | ||
| 152 | - inTime: '2019-06-02 00:00:00', | ||
| 153 | - outTime: '2019-06-01 08:00:00', | ||
| 154 | - duration: '2小时28分钟43秒', | ||
| 155 | - berthNum: 'A1212231', | ||
| 156 | - status: '完成' | ||
| 157 | - }, | ||
| 158 | - { | ||
| 159 | - parkName: '承德老二中停车场', | ||
| 160 | - license: '冀H7517732', | ||
| 161 | - money: '31', | ||
| 162 | - inTime: '2019-06-02 00:00:00', | ||
| 163 | - outTime: '2019-06-01 08:00:00', | ||
| 164 | - duration: '2小时28分钟43秒', | ||
| 165 | - berthNum: 'A1212231', | ||
| 166 | - status: '完成' | ||
| 167 | - }, | ||
| 168 | - { | ||
| 169 | - parkName: '承德老二中停车场', | ||
| 170 | - license: '冀H7517732', | ||
| 171 | - money: '31', | ||
| 172 | - inTime: '2019-06-02 00:00:00', | ||
| 173 | - outTime: '2019-06-01 08:00:00', | ||
| 174 | - duration: '2小时28分钟43秒', | ||
| 175 | - berthNum: 'A1212231', | ||
| 176 | - status: '完成' | ||
| 177 | - }, | ||
| 178 | ] | 132 | ] |
| 179 | } | 133 | } |
| 180 | }, | 134 | }, |
| 135 | + mounted: function() { | ||
| 136 | + | ||
| 137 | + this.queryOwnerParkRecord(); | ||
| 138 | + }, | ||
| 181 | methods: { | 139 | methods: { |
| 140 | + /** | ||
| 141 | + * 获取查询参数 | ||
| 142 | + */ | ||
| 143 | + getQueryParams: function() { | ||
| 144 | + let userInfo = this.$store.state.user.userInfo; | ||
| 145 | + let plNos = []; | ||
| 146 | + if(this.form.plNos != null && this.form.plNos != ''){ | ||
| 147 | + plNos.push(this.form.plNos); | ||
| 148 | + } | ||
| 149 | + let req = { | ||
| 150 | + custId:userInfo.custId, | ||
| 151 | + // custId:'501519113641649119232', | ||
| 152 | + plNos:plNos, | ||
| 153 | + carNum:this.form.carNum, | ||
| 154 | + } | ||
| 155 | + return req; | ||
| 156 | + }, | ||
| 157 | + /** | ||
| 158 | + * 查询订单信息 | ||
| 159 | + */ | ||
| 160 | + queryOwnerParkRecord: function() { | ||
| 161 | + let req = this.getQueryParams(); | ||
| 162 | + | ||
| 163 | + req.baseRequest={ | ||
| 164 | + pageNum:this.currentPage, | ||
| 165 | + pageSize:this.pageSize, | ||
| 166 | + }, | ||
| 167 | + queryOwnerParkRecord (req).then(response =>{ | ||
| 168 | + if(response.code=='8888'){ | ||
| 169 | + this.orderData = response.data.dataList; | ||
| 170 | + this.total = response.data.pageTotals; | ||
| 171 | + }else{ | ||
| 172 | + console.log(response); | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + }); | ||
| 176 | + }, | ||
| 177 | + // 获取子组件页码方法 | ||
| 178 | + handleSizeChange: function(page) { | ||
| 179 | + console.log(page) | ||
| 180 | + this.currentPage = page; | ||
| 181 | + /** 调用表格数据.*/ | ||
| 182 | + this.queryOwnerParkRecord(); | ||
| 183 | + | ||
| 184 | + }, | ||
| 185 | + | ||
| 182 | onSubmit() { | 186 | onSubmit() { |
| 183 | - this.$message('submit!') | 187 | + this.queryOwnerParkRecord(); |
| 184 | }, | 188 | }, |
| 185 | onCancel() { | 189 | onCancel() { |
| 186 | this.$message({ | 190 | this.$message({ |
src/views/payback/index.vue
| @@ -4,6 +4,16 @@ | @@ -4,6 +4,16 @@ | ||
| 4 | <el-row :gutter="20"> | 4 | <el-row :gutter="20"> |
| 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> | 5 | <el-form ref="form" :model="form" label-width="60px" label-position="left"> |
| 6 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | 6 | <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> |
| 7 | + | ||
| 8 | + <el-form-item label="公司"> | ||
| 9 | + <el-select v-model="form.orgId" placeholder="请选择公司"> | ||
| 10 | + <el-option v-for="item in orgs" :label="item.orgName" :value="item.orgId"/> | ||
| 11 | + | ||
| 12 | + </el-select> | ||
| 13 | + </el-form-item> | ||
| 14 | + | ||
| 15 | + </el-col> | ||
| 16 | + <el-col :xs="8" :sm="6" :md="7" :lg="7" :xl="1"> | ||
| 7 | <el-form-item label="车牌"> | 17 | <el-form-item label="车牌"> |
| 8 | <el-input v-model="form.name" maxlength="10" /> | 18 | <el-input v-model="form.name" maxlength="10" /> |
| 9 | </el-form-item> | 19 | </el-form-item> |
| @@ -16,162 +26,295 @@ | @@ -16,162 +26,295 @@ | ||
| 16 | </div> | 26 | </div> |
| 17 | 27 | ||
| 18 | <div class="table-wrap"> | 28 | <div class="table-wrap"> |
| 19 | - <p class="table-title">订单详情</p> | 29 | + <el-row :gutter="20"> |
| 30 | + <el-col :xs="8" :sm="6" :md="3" :lg="22" :xl="1"> | ||
| 31 | + <p class="table-title">订单详情</p> | ||
| 32 | + </el-col> | ||
| 33 | + <el-col :xs="8" :sm="3" :md="3" :lg="2" :xl="1"> | ||
| 34 | + <el-button style="margin-top: 8px" size="small" type="primary" @click="toBackSubmit">补缴</el-button> | ||
| 35 | + </el-col> | ||
| 36 | + </el-row> | ||
| 20 | <el-table | 37 | <el-table |
| 21 | :data="orderData" | 38 | :data="orderData" |
| 22 | style="width: 100%;" | 39 | style="width: 100%;" |
| 23 | - :show-overflow-tooltip="true"> | 40 | + :show-overflow-tooltip="true" |
| 41 | + @selection-change="handleSelectionChange"> | ||
| 42 | + <el-table-column | ||
| 43 | + type="selection"> | ||
| 44 | + </el-table-column> | ||
| 24 | <el-table-column | 45 | <el-table-column |
| 25 | - prop="parkName" | 46 | + prop="plName" |
| 26 | label="停车场" | 47 | label="停车场" |
| 27 | :show-overflow-tooltip="true"> | 48 | :show-overflow-tooltip="true"> |
| 28 | </el-table-column> | 49 | </el-table-column> |
| 29 | <el-table-column | 50 | <el-table-column |
| 30 | - prop="license" | 51 | + prop="carNumber" |
| 31 | label="车牌" | 52 | label="车牌" |
| 32 | :show-overflow-tooltip="true"> | 53 | :show-overflow-tooltip="true"> |
| 33 | </el-table-column> | 54 | </el-table-column> |
| 34 | <el-table-column | 55 | <el-table-column |
| 35 | - prop="money" | ||
| 36 | - label="停车费"> | 56 | + prop="arrearageFee" |
| 57 | + label="欠费金额"> | ||
| 58 | + <template slot-scope="scope"> | ||
| 59 | + <span>{{(scope.row.arrearageFee) |fen2Yuan}} </span> | ||
| 60 | + </template> | ||
| 37 | </el-table-column> | 61 | </el-table-column> |
| 38 | <el-table-column | 62 | <el-table-column |
| 39 | - prop="inTime" | ||
| 40 | - label="进场时间" | 63 | + prop="parkInTime" |
| 64 | + label="入场时间" | ||
| 41 | :show-overflow-tooltip="true"> | 65 | :show-overflow-tooltip="true"> |
| 66 | + <template slot-scope="scope"> | ||
| 67 | + <span>{{(scope.row.parkInTime) |string2Date(7)}} </span> | ||
| 68 | + </template> | ||
| 42 | </el-table-column> | 69 | </el-table-column> |
| 43 | <el-table-column | 70 | <el-table-column |
| 44 | - prop="outTime" | 71 | + prop="parkOutTime" |
| 45 | label="出场时间" | 72 | label="出场时间" |
| 46 | :show-overflow-tooltip="true"> | 73 | :show-overflow-tooltip="true"> |
| 74 | + <template slot-scope="scope"> | ||
| 75 | + <span>{{(scope.row.parkOutTime) |string2Date(7)}} </span> | ||
| 76 | + </template> | ||
| 47 | </el-table-column> | 77 | </el-table-column> |
| 48 | <el-table-column | 78 | <el-table-column |
| 49 | - prop="duration" | 79 | + prop="parkingDuration" |
| 50 | label="停车时长" | 80 | label="停车时长" |
| 51 | :show-overflow-tooltip="true"> | 81 | :show-overflow-tooltip="true"> |
| 82 | + <template slot-scope="scope"> | ||
| 83 | + <span>{{(scope.row) |parkingDurationFormatter(scope.row.parkingDuration)}} </span> | ||
| 84 | + </template> | ||
| 52 | </el-table-column> | 85 | </el-table-column> |
| 53 | <el-table-column | 86 | <el-table-column |
| 54 | - prop="berthNum" | 87 | + prop="berthNo" |
| 55 | label="泊位编号"> | 88 | label="泊位编号"> |
| 56 | </el-table-column> | 89 | </el-table-column> |
| 57 | <el-table-column | 90 | <el-table-column |
| 58 | - prop="status" | 91 | + prop="orderState" |
| 59 | label="订单状态"> | 92 | label="订单状态"> |
| 93 | + <template slot-scope="scope"> | ||
| 94 | + <span>{{(scope.row) |inOutStateFormatter}} </span> | ||
| 95 | + </template> | ||
| 60 | </el-table-column> | 96 | </el-table-column> |
| 61 | </el-table> | 97 | </el-table> |
| 62 | <el-pagination | 98 | <el-pagination |
| 63 | :page-size="10" | 99 | :page-size="10" |
| 64 | :pager-count="11" | 100 | :pager-count="11" |
| 65 | layout="prev, pager, next" | 101 | layout="prev, pager, next" |
| 66 | - :total="total"> | 102 | + :total="total" |
| 103 | + @size-change="handleSizeChange" | ||
| 104 | + @current-change="handleSizeChange" | ||
| 105 | + @prev-click="handleSizeChange" | ||
| 106 | + @next-click="handleSizeChange" | ||
| 107 | + > | ||
| 67 | </el-pagination> | 108 | </el-pagination> |
| 68 | </div> | 109 | </div> |
| 110 | + <!--补缴对话框--> | ||
| 111 | + <el-dialog | ||
| 112 | + title="补缴" | ||
| 113 | + :visible.sync="dialogVisible" | ||
| 114 | + width="30%" | ||
| 115 | + :close-on-click-modal="false"> | ||
| 116 | + <!--<div>--> | ||
| 117 | + <!--<img style="display: block;width: 100%" :src="url" >--> | ||
| 118 | + | ||
| 119 | + <!--</div>--> | ||
| 120 | + <div> | ||
| 121 | + <div id="qrcode"></div> | ||
| 122 | + </div> | ||
| 123 | + <span slot="footer" class="dialog-footer"> | ||
| 124 | + <el-button type="primary" @click="onBack">确 定</el-button> | ||
| 125 | + </span> | ||
| 126 | + </el-dialog> | ||
| 127 | + | ||
| 69 | </div> | 128 | </div> |
| 70 | </template> | 129 | </template> |
| 71 | 130 | ||
| 72 | <script> | 131 | <script> |
| 73 | -export default { | ||
| 74 | - data() { | ||
| 75 | - return { | ||
| 76 | - form: { | ||
| 77 | - name: '', | ||
| 78 | - region: '', | ||
| 79 | - date1: '', | ||
| 80 | - date2: '', | ||
| 81 | - delivery: false, | ||
| 82 | - type: [], | ||
| 83 | - resource: '', | ||
| 84 | - desc: '' | ||
| 85 | - }, | ||
| 86 | - total: 55, | ||
| 87 | - currentPage: 1, | ||
| 88 | - pageSize: 10, | ||
| 89 | - orderData: [ | ||
| 90 | - { | ||
| 91 | - parkName: '承德老二中停车场', | ||
| 92 | - license: '冀H7517732', | ||
| 93 | - money: '31', | ||
| 94 | - inTime: '2019-06-02 00:00:00', | ||
| 95 | - outTime: '2019-06-01 08:00:00', | ||
| 96 | - duration: '2小时28分钟43秒', | ||
| 97 | - berthNum: 'A1212231', | ||
| 98 | - status: '完成' | ||
| 99 | - }, | ||
| 100 | - { | ||
| 101 | - parkName: '承德老二中停车场', | ||
| 102 | - license: '冀H7517732', | ||
| 103 | - money: '31', | ||
| 104 | - inTime: '2019-06-02 00:00:00', | ||
| 105 | - outTime: '2019-06-01 08:00:00', | ||
| 106 | - duration: '2小时28分钟43秒', | ||
| 107 | - berthNum: 'A1212231', | ||
| 108 | - status: '完成' | ||
| 109 | - }, | ||
| 110 | - { | ||
| 111 | - parkName: '承德老二中停车场', | ||
| 112 | - license: '冀H7517732', | ||
| 113 | - money: '31', | ||
| 114 | - inTime: '2019-06-02 00:00:00', | ||
| 115 | - outTime: '2019-06-01 08:00:00', | ||
| 116 | - duration: '2小时28分钟43秒', | ||
| 117 | - berthNum: 'A1212231', | ||
| 118 | - status: '完成' | ||
| 119 | - }, | ||
| 120 | - { | ||
| 121 | - parkName: '承德老二中停车场', | ||
| 122 | - license: '冀H7517732', | ||
| 123 | - money: '31', | ||
| 124 | - inTime: '2019-06-02 00:00:00', | ||
| 125 | - outTime: '2019-06-01 08:00:00', | ||
| 126 | - duration: '2小时28分钟43秒', | ||
| 127 | - berthNum: 'A1212231', | ||
| 128 | - status: '完成' | ||
| 129 | - }, | ||
| 130 | - { | ||
| 131 | - parkName: '承德老二中停车场', | ||
| 132 | - license: '冀H7517732', | ||
| 133 | - money: '31', | ||
| 134 | - inTime: '2019-06-02 00:00:00', | ||
| 135 | - outTime: '2019-06-01 08:00:00', | ||
| 136 | - duration: '2小时28分钟43秒', | ||
| 137 | - berthNum: 'A1212231', | ||
| 138 | - status: '完成' | ||
| 139 | - }, | ||
| 140 | - { | ||
| 141 | - parkName: '承德老二中停车场', | ||
| 142 | - license: '冀H7517732', | ||
| 143 | - money: '31', | ||
| 144 | - inTime: '2019-06-02 00:00:00', | ||
| 145 | - outTime: '2019-06-01 08:00:00', | ||
| 146 | - duration: '2小时28分钟43秒', | ||
| 147 | - berthNum: 'A1212231', | ||
| 148 | - status: '完成' | ||
| 149 | - }, | ||
| 150 | - { | ||
| 151 | - parkName: '承德老二中停车场', | ||
| 152 | - license: '冀H7517732', | ||
| 153 | - money: '31', | ||
| 154 | - inTime: '2019-06-02 00:00:00', | ||
| 155 | - outTime: '2019-06-01 08:00:00', | ||
| 156 | - duration: '2小时28分钟43秒', | ||
| 157 | - berthNum: 'A1212231', | ||
| 158 | - status: '完成' | 132 | + import {pageQueryArrearRecordByCondition,selectAllAppOrg,personOrderBackWxPay } from '@/api/index'; |
| 133 | + import {fen2Yuan,string2Date,inOutStateFormatter,parkingDurationFormatter} from '@/filters/index'; | ||
| 134 | + import QRCode from 'qrcodejs2' // 引入qrcode | ||
| 135 | + export default { | ||
| 136 | + data() { | ||
| 137 | + return { | ||
| 138 | + form: { | ||
| 139 | + orgId:null, | ||
| 140 | + plNos: null, | ||
| 141 | + carNum: null, | ||
| 142 | + | ||
| 159 | }, | 143 | }, |
| 160 | - ] | ||
| 161 | - } | ||
| 162 | - }, | ||
| 163 | - methods: { | ||
| 164 | - onSubmit() { | ||
| 165 | - this.$message('submit!') | 144 | + orgs:[], |
| 145 | + total: 0, | ||
| 146 | + currentPage: 1, | ||
| 147 | + pageSize: 10, | ||
| 148 | + orderData: [ | ||
| 149 | + ], | ||
| 150 | + multipleSelection:[], | ||
| 151 | + dialogVisible:false, | ||
| 152 | + url:'http://img.renniting.cn/group1/M00/35/07/rBABHF0fHpOAGw2BAAF_F0CXpIA340.png', | ||
| 153 | + } | ||
| 154 | + }, | ||
| 155 | + mounted: function() { | ||
| 156 | + this.selectAllAppOrg(); | ||
| 157 | + | ||
| 166 | }, | 158 | }, |
| 167 | - onCancel() { | ||
| 168 | - this.$message({ | ||
| 169 | - message: 'cancel!', | ||
| 170 | - type: 'warning' | ||
| 171 | - }) | 159 | + methods: { |
| 160 | + qrcode :function(url) { | ||
| 161 | + let qrcode = new QRCode('qrcode', { | ||
| 162 | + width: 100, | ||
| 163 | + height: 100, // 高度 | ||
| 164 | + text: url,// 二维码内容 | ||
| 165 | + // render: 'canvas' // 设置渲染方式(有两种方式 table和canvas,默认是canvas) | ||
| 166 | + // background: '#f0f' | ||
| 167 | + // foreground: '#ff0' | ||
| 168 | + }) | ||
| 169 | + console.log(qrcode) | ||
| 170 | + }, | ||
| 171 | + clearCode:function(){ | ||
| 172 | + | ||
| 173 | + var qrcodes=document.getElementById('qrcode'); | ||
| 174 | + if(qrcodes != null && qrcodes.innerHTML != '' && qrcodes.innerHTML!= null){ | ||
| 175 | + qrcodes.innerHTML = ''; | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + }, | ||
| 179 | + /** | ||
| 180 | + *获取所有组织下拉框 | ||
| 181 | + */ | ||
| 182 | + selectAllAppOrg:function(){ | ||
| 183 | + let req = {}; | ||
| 184 | + selectAllAppOrg (req).then(response =>{ | ||
| 185 | + if(response.code=='8888'){ | ||
| 186 | + this.orgs = response.data; | ||
| 187 | + this.form.orgId = response.data[0].orgId; | ||
| 188 | + this.pageQueryArrearRecordByCondition(); | ||
| 189 | + }else{ | ||
| 190 | + console.log(response); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + }); | ||
| 194 | + }, | ||
| 195 | + /** | ||
| 196 | + * 获取查询参数 | ||
| 197 | + */ | ||
| 198 | + getQueryParams: function() { | ||
| 199 | + if(this.form.orgId == undefined || this.form.orgId == null){ | ||
| 200 | + console.log("orgId为空"); | ||
| 201 | + return; | ||
| 202 | + } | ||
| 203 | + let userInfo = this.$store.state.user.userInfo; | ||
| 204 | + let plNos = []; | ||
| 205 | + if(this.form.plNos != null && this.form.plNos != ''){ | ||
| 206 | + plNos.push(this.form.plNos); | ||
| 207 | + } | ||
| 208 | + let req = { | ||
| 209 | + //custId:userInfo.custId, | ||
| 210 | + custId:'501519113641649119232', | ||
| 211 | + orderStates:[52], | ||
| 212 | + plNos:plNos, | ||
| 213 | + orgId:this.form.orgId, | ||
| 214 | + carNum:this.form.carNum, | ||
| 215 | + } | ||
| 216 | + return req; | ||
| 217 | + }, | ||
| 218 | + /** | ||
| 219 | + * 查询订单信息 | ||
| 220 | + */ | ||
| 221 | + pageQueryArrearRecordByCondition: function() { | ||
| 222 | + let req = this.getQueryParams(); | ||
| 223 | + | ||
| 224 | + req.baseRequest={ | ||
| 225 | + pageNum:this.currentPage, | ||
| 226 | + pageSize:this.pageSize, | ||
| 227 | + }, | ||
| 228 | + pageQueryArrearRecordByCondition (req).then(response =>{ | ||
| 229 | + if(response.code=='8888'){ | ||
| 230 | + this.orderData = response.data.dataList; | ||
| 231 | + this.total = response.data.pageTotals; | ||
| 232 | + }else{ | ||
| 233 | + console.log(response); | ||
| 234 | + } | ||
| 235 | + | ||
| 236 | + }); | ||
| 237 | + }, | ||
| 238 | + // 获取子组件页码方法 | ||
| 239 | + handleSizeChange: function(page) { | ||
| 240 | + console.log(page) | ||
| 241 | + this.currentPage = page; | ||
| 242 | + /** 调用表格数据.*/ | ||
| 243 | + this.pageQueryArrearRecordByCondition(); | ||
| 244 | + | ||
| 245 | + }, | ||
| 246 | + //多选 | ||
| 247 | + handleSelectionChange:function(val) { | ||
| 248 | + this.multipleSelection = val; | ||
| 249 | + | ||
| 250 | + }, | ||
| 251 | + toBackSubmit:function(){ | ||
| 252 | + this.clearCode(); | ||
| 253 | + let selects = this.multipleSelection; | ||
| 254 | + if(selects == null || selects.length < 1){ | ||
| 255 | + this.$message({ | ||
| 256 | + message: '请至少选择一行数据!', | ||
| 257 | + type: 'warning' | ||
| 258 | + }); | ||
| 259 | + return; | ||
| 260 | + } | ||
| 261 | + let orders = []; | ||
| 262 | + let orgIds = []; | ||
| 263 | + selects.forEach(item=>{ | ||
| 264 | + orders.push({orderId:item.orderId,parkId:item.plNo,orderNotPayFee:item.arrearageFee,sourceType:1}); | ||
| 265 | + orgIds.push(item.orgId); | ||
| 266 | + }); | ||
| 267 | + if(orders == null || orders.length < 1){ | ||
| 268 | + this.$message({ | ||
| 269 | + message: '请至少选择一行数据!', | ||
| 270 | + type: 'warning' | ||
| 271 | + }); | ||
| 272 | + return; | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + let req ={ | ||
| 276 | + sysCode:'10003', | ||
| 277 | + payType:2, | ||
| 278 | + paySrcType:103, | ||
| 279 | + terminalSource:9, | ||
| 280 | + carNumber:'京A11111', | ||
| 281 | + recordArreaInfos:JSON.stringify(orders) | ||
| 282 | + }; | ||
| 283 | + // req = JSON.stringify(req); | ||
| 284 | + //调用后台接口获取二维码信息 | ||
| 285 | + personOrderBackWxPay(req).then(response =>{ | ||
| 286 | + if(response.code=='8888'){ | ||
| 287 | + let data = response.data; | ||
| 288 | + data = JSON.parse(data); | ||
| 289 | + let url = data.data.code_url; | ||
| 290 | + console.log(url); | ||
| 291 | + //this.url = url; | ||
| 292 | + this.qrcode(url); | ||
| 293 | + }else{ | ||
| 294 | + console.log(response); | ||
| 295 | + | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + }); | ||
| 299 | + this.dialogVisible = true; | ||
| 300 | + }, | ||
| 301 | + | ||
| 302 | + onSubmit:function() { | ||
| 303 | + this.pageQueryArrearRecordByCondition(); | ||
| 304 | + }, | ||
| 305 | + onBack:function() { | ||
| 306 | + this.dialogVisible = false; | ||
| 307 | + this.pageQueryArrearRecordByCondition(); | ||
| 308 | + this.clearCode(); | ||
| 309 | + }, | ||
| 310 | + onCancel:function() { | ||
| 311 | + this.$message({ | ||
| 312 | + message: 'cancel!', | ||
| 313 | + type: 'warning' | ||
| 314 | + }) | ||
| 315 | + } | ||
| 172 | } | 316 | } |
| 173 | } | 317 | } |
| 174 | -} | ||
| 175 | </script> | 318 | </script> |
| 176 | 319 | ||
| 177 | <style scoped> | 320 | <style scoped> |
vue.config.js
| @@ -21,7 +21,7 @@ module.exports = { | @@ -21,7 +21,7 @@ module.exports = { | ||
| 21 | * In most cases please use '/' !!! | 21 | * In most cases please use '/' !!! |
| 22 | * Detail: https://cli.vuejs.org/config/#publicpath | 22 | * Detail: https://cli.vuejs.org/config/#publicpath |
| 23 | */ | 23 | */ |
| 24 | - publicPath: '/', | 24 | + publicPath: './', |
| 25 | outputDir: 'dist', | 25 | outputDir: 'dist', |
| 26 | assetsDir: 'static', | 26 | assetsDir: 'static', |
| 27 | lintOnSave: process.env.NODE_ENV === 'development', | 27 | lintOnSave: process.env.NODE_ENV === 'development', |