Commit fe11c22eec6dcc86a43bb55d60fdc8beeee7493a

Authored by 刘淇
1 parent dcf54a32

开票

src/api/invoice/invoice.js
... ... @@ -65,6 +65,16 @@ export function queryCustInvoiceHistoryList(params) {
65 65 })
66 66 }
67 67  
  68 +// 重发电子邮箱
  69 +export function resendInvoiceMail(params) {
  70 + return request({
  71 + url: 'invoice/resendInvoiceMail',
  72 + method: 'post',
  73 + data: params
  74 + })
  75 +}
  76 +
  77 +
68 78  
69 79  
70 80  
... ...
src/main.js
... ... @@ -66,7 +66,8 @@ import {
66 66 Divider,
67 67 TransferDom,
68 68 Confirm,
69   - Toast
  69 + Toast,
  70 + dateFormat
70 71 }from 'vux'
71 72  
72 73  
... ...
src/utils/utils.js
1   -import md5 from './md5.min.js';
  1 +import md5 from "./md5.min.js";
2 2 export default {
3   - myCommonSalt: function (val) { // 获取盐值
  3 + myCommonSalt: function(val) { // 获取盐值
4 4 let len = parseInt(val);
5   - let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  5 + let $chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
6 6 let maxPos = $chars.length;
7   - var pwd = '';
  7 + var pwd = "";
8 8 for (var i = 0; i < len; i++) {
9 9 pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
10 10 }
11 11 console.log(pwd);
12 12 return pwd;
13 13 },
14   -
15   - formatDate: function(secs, type=0){ //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日
16   - var t = new Date(secs)
17   - var year = t.getFullYear()
18   - var month = t.getMonth() + 1
19   - if(month < 10){ month = '0' + month }
20   - var date = t.getDate()
21   - if(date < 10){ date = '0' + date }
22   - var hour = t.getHours()
23   - if(hour < 10){ hour = '0' + hour }
24   - var minute = t.getMinutes()
25   - if(minute < 10){ minute = '0' + minute }
26   - var second = t.getSeconds()
27   - if(second < 10){ second = '0' + second }
28   - if(type==0){
29   - return year + '年' + month + '月' + date + '日'
30   - }else{
31   - return year + '-'+month+'-'+date
32   - }},
33   -
34   - timestampToTime: function (timestamp) {
  14 + formatDate: function(secs, type = 0) { //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日
  15 + var t = new Date(secs);
  16 + var year = t.getFullYear();
  17 + var month = t.getMonth() + 1;
  18 + if (month < 10) {
  19 + month = "0" + month;
  20 + }
  21 + var date = t.getDate();
  22 + if (date < 10) {
  23 + date = "0" + date;
  24 + }
  25 + var hour = t.getHours();
  26 + if (hour < 10) {
  27 + hour = "0" + hour;
  28 + }
  29 + var minute = t.getMinutes();
  30 + if (minute < 10) {
  31 + minute = "0" + minute;
  32 + }
  33 + var second = t.getSeconds();
  34 + if (second < 10) {
  35 + second = "0" + second;
  36 + }
  37 + if (type == 0) {
  38 + return year + "年" + month + "月" + date + "日";
  39 + } else {
  40 + return year + "-" + month + "-" + date;
  41 + }
  42 + },
  43 + timestampToTime: function(timestamp) {
35 44 var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
36   - var youWant=d.getFullYear() + '-' + this.completedString(d.getMonth() + 1) + '-' + this.completedString(d.getDate()) ;
37   - return youWant
  45 + var youWant = d.getFullYear() + "-" + this.completedString(d.getMonth() + 1) + "-" + this.completedString(d.getDate());
  46 + return youWant;
38 47 },
39   - timestampTransformTime: function (timestamp) {
  48 + timestampTransformTime: function(timestamp) {
40 49 var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
41   - var youWant=d.getFullYear() + '/' + this.completedString(d.getMonth() + 1) + '/' + this.completedString(d.getDate()) ;
42   - return youWant
  50 + var youWant = d.getFullYear() + "/" + this.completedString(d.getMonth() + 1) + "/" + this.completedString(d.getDate());
  51 + return youWant;
43 52 },
44   - completedString:function(s) {
45   - return s < 10 ? '0' + s : s
  53 + getLocalTime: function(value) {
  54 + if (value == null) {
  55 + return '';
  56 + } else {
  57 + let date = new Date(value);
  58 + let y = date.getFullYear();// 年
  59 + let MM = date.getMonth() + 1;// 月
  60 + MM = MM < 10 ? ('0' + MM) : MM;
  61 + let d = date.getDate();// 日
  62 + d = d < 10 ? ('0' + d) : d;
  63 + let h = date.getHours();// 时
  64 + h = h < 10 ? ('0' + h) : h;
  65 + let m = date.getMinutes();// 分
  66 + m = m < 10 ? ('0' + m) : m;
  67 + let s = date.getSeconds();// 秒
  68 + s = s < 10 ? ('0' + s) : s;
  69 + let timer = y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
  70 + return timer
  71 + }
  72 + },
  73 + completedString: function(s) {
  74 + return s < 10 ? "0" + s : s;
46 75 },
47   -
48   -
49   -
50   - dateFormat: function (msd) { // 时间转换
51   - var time = msd
52   -
  76 + dateFormat: function(msd) { // 时间转换
  77 + var time = msd;
53 78 if (null != time && "" != time) {
54   -
55 79 if (time > 60 && time < 60 * 60) {
56   -
57 80 time = parseInt(time / 60.0) + "分钟" + parseInt((parseFloat(time / 60.0) -
58   -
59 81 parseInt(time / 60.0)) * 60) + "秒";
60   -
61 82 }
62   -
63 83 else if (time >= 60 * 60 && time < 60 * 60 * 24) {
64   -
65 84 time = parseInt(time / 3600.0) + "小时" + parseInt((parseFloat(time / 3600.0) -
66   -
67 85 parseInt(time / 3600.0)) * 60) + "分钟" +
68   -
69 86 parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
70   -
71 87 parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
72   -
73 88 } else if (time >= 60 * 60 * 24) {
74   -
75 89 time = parseInt(time / 3600.0 / 24) + "天" + parseInt((parseFloat(time / 3600.0 / 24) -
76   -
77 90 parseInt(time / 3600.0 / 24)) * 24) + "小时" + parseInt((parseFloat(time / 3600.0) -
78   -
79 91 parseInt(time / 3600.0)) * 60) + "分钟" +
80   -
81 92 parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
82   -
83 93 parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
84   -
85 94 }
86   -
87 95 else {
88   -
89 96 time = parseInt(time) + "秒";
90   -
91 97 }
92   -
93 98 }
94   -
95 99 return time;
96 100 },
97   -
98   - signObject: function (jsonObj){ //签名字段
99   - let sort = []
100   - for(let k in jsonObj){
  101 + signObject: function(jsonObj) { //签名字段
  102 + let sort = [];
  103 + for (let k in jsonObj) {
101 104 sort.push({
102 105 keyname: k,
103 106 value: jsonObj[k]
104   - })
  107 + });
105 108 }
106   - return this.myGetSign(sort)
  109 + return this.myGetSign(sort);
107 110 },
108   -
109   - clientBrowser: function () { // 判断客户端
  111 + clientBrowser: function() { // 判断客户端
110 112 if (/MicroMessenger/.test(window.navigator.userAgent)) {
111 113 console.log("微信客户端");
112   - return '微信'
  114 + return "微信";
113 115 } else if (/AlipayClient/.test(window.navigator.userAgent)) {
114 116 console.log("支付宝客户端");
115   - return '支付宝'
  117 + return "支付宝";
116 118 } else if (/BankabciPhone/.test(window.navigator.userAgent)) {
117 119 console.log("农行客户端");
118   - return '立即'
119   - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
  120 + return "立即";
  121 + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
120 122 console.log("农行客户端");
121   - return '立即'
122   - }else {
  123 + return "立即";
  124 + } else {
123 125 console.log("其他浏览器");
124   - return '支付宝'
  126 + return "支付宝";
125 127 }
126 128 },
127   -
128 129 // 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 34 农行
129   - clientBrowsePayType: function () { // 判断客户端
  130 + clientBrowsePayType: function() { // 判断客户端
130 131 if (/MicroMessenger/.test(window.navigator.userAgent)) {
131 132 console.log("微信客户端");
132   - return '4'
  133 + return "4";
133 134 } else if (/AlipayClient/.test(window.navigator.userAgent)) {
134 135 console.log("支付宝客户端");
135   - return '1'
  136 + return "1";
136 137 } else if (/BankabciPhone/.test(window.navigator.userAgent)) {
137 138 console.log("农行客户端");
138   - return '34'
139   - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
  139 + return "34";
  140 + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
140 141 console.log("农行客户端");
141   - return '34'
142   - }else {
  142 + return "34";
  143 + } else {
143 144 console.log("其他浏览器");
144   - return '1'
  145 + return "1";
145 146 }
146 147 },
147 148 // 0eca8f5373ca4866aec2f8e9d9367104 老的id
148 149 // 14318527b13840c2a4af63fef52c2d6e 老的签名
149   -
150 150 // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id
151 151 // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名
152   -
153   - myVarAppid:'65grtq5tv0wewec05xfeau39jyghhjm',// 公共请求Appid
154   -
155   - myDeviceInfo: 'BC0703A4-AFB0-4B51-9089-9B7487C0CC6E', // 公共请求设备信息
156   -
157   - myVxAppId: 'wxdfb0276f85514ea3',
  152 + myVarAppid: "65grtq5tv0wewec05xfeau39jyghhjm",// 公共请求Appid
  153 + myDeviceInfo: "BC0703A4-AFB0-4B51-9089-9B7487C0CC6E", // 公共请求设备信息
  154 + myVxAppId: "wxdfb0276f85514ea3",
158 155 // 测试环境 微信赤峰 appid wxff4cebaedbf4f886
159 156 // 微信赤峰 appid wx2af2bab90d433c86
160 157 // 黄石 appid wxa1a66cc7d263afe6
161 158 // 阳明 wxdfb0276f85514ea3
162   -
163   - myOrgId: '10193', // 归属地 赤峰id 10003 黄石 10079 无锡10005
164   -
165   - myGetSign: function (objb) { // 获取签名
166   - var compare = function (obj1, obj2) {
  159 + myOrgId: "10193", // 归属地 赤峰id 10003 黄石 10079 无锡10005
  160 + myGetSign: function(objb) { // 获取签名
  161 + var compare = function(obj1, obj2) {
167 162 var val1 = obj1.keyname;
168 163 var val2 = obj2.keyname;
169 164 if (val1 < val2) {
... ... @@ -173,35 +168,34 @@ export default {
173 168 } else {
174 169 return 0;
175 170 }
176   - }
  171 + };
177 172 objb.sort(compare);
178   - var strmd5 = 'dfdf2b6k37r5y79z0kqjgfxe2wet3434';
179   - for(var i=0;i<objb.length;i++){
180   - if(objb[i].value != null&&objb[i].value != ''){
181   - strmd5 += objb[i].keyname+objb[i].value;
  173 + var strmd5 = "dfdf2b6k37r5y79z0kqjgfxe2wet3434";
  174 + for (var i = 0; i < objb.length; i++) {
  175 + if (objb[i].value != null && objb[i].value != "") {
  176 + strmd5 += objb[i].keyname + objb[i].value;
182 177 }
183 178 }
184   - strmd5 += 'dfdf2b6k37r5y79z0kqjgfxe2wet3434';
  179 + strmd5 += "dfdf2b6k37r5y79z0kqjgfxe2wet3434";
185 180 // console.log('strmd5-------->'+strmd5);
186 181 strmd5 = md5(strmd5);
187   - strmd5=strmd5.toUpperCase();
  182 + strmd5 = strmd5.toUpperCase();
188 183 return strmd5;
189 184 },
190   - parseParams: function (data) {
  185 + parseParams: function(data) {
191 186 try {
192 187 var tempArr = [];
193 188 for (var i in data) {
194 189 var key = (i);
195 190 var value = encodeURIComponent(data[i]);//decodeURIComponent
196   - tempArr.push(key + '=' + value);
  191 + tempArr.push(key + "=" + value);
197 192 }
198   - var urlParamsStr = tempArr.join('&');
  193 + var urlParamsStr = tempArr.join("&");
199 194 return urlParamsStr;
200 195 } catch (err) {
201   - return '';
  196 + return "";
202 197 }
203 198 },
204   -
205 199 commonParams: function() {
206 200 let salt = this.myCommonSalt(32);
207 201 let reqData = {
... ... @@ -209,10 +203,9 @@ export default {
209 203 deviceInfo: this.myDeviceInfo,
210 204 salt: salt,
211 205 sign_type: "md5",
212   - token:'b4bbab7dd63140b5b66cc962496b34f7',
  206 + token: sessionStorage.getItem('urlToken'),
213 207 orgId: this.myOrgId
214 208 };
215   - return reqData
  209 + return reqData;
216 210 }
217   -
218   -}
  211 +};
... ...
src/views/eInvoice/eInvoiceWrap.vue
... ... @@ -33,7 +33,11 @@
33 33  
34 34 <script>
35 35 export default {
36   - name: "eInvoiceWrap"
  36 + name: "eInvoiceWrap",
  37 + mounted(){
  38 + let _token = this.$route.query.token;
  39 + sessionStorage.setItem('urlToken',_token)
  40 + }
37 41 };
38 42 </script>
39 43  
... ...
src/views/eInvoice/invoiceRecord/exchange.vue
1 1 <template>
2 2 <div>
3 3 <group>
4   - <cell align-items="left" class="inovice-list" value="¥0.10">
  4 + <cell v-for="(i, index) in list" align-items="left" class="inovice-list" :value="'¥'+ (i.orderTotalFee/100).toFixed(2)">
5 5 <div slot="title">
6   - <span>苏A1231</span>
  6 + <span>{{i.carNumber}}</span>
7 7 </div>
8 8 <div slot="title">
9   - <span>杭州路段</span>
  9 + <span>{{i.plName}}</span>
10 10 </div>
11 11 <div slot="title">
12   - <span>2021/06/01 13:13:13</span>
13   - </div>
14   - </cell>
15   - <cell align-items="left" class="inovice-list" value="¥0.10">
16   - <div slot="title">
17   - <span>苏A1231</span>
18   - </div>
19   - <div slot="title">
20   - <span>杭州路段</span>
21   - </div>
22   - <div slot="title">
23   - <span>2021/06/01 13:13:13</span>
  12 + <span>{{$utils.getLocalTime(i.createDate)}}</span>
24 13 </div>
25 14 </cell>
  15 +
26 16 </group>
27 17 </div>
28 18 </template>
29 19  
30 20 <script>
31 21 export default {
32   - name: "exchange"
  22 + name: "exchange",
  23 + data(){
  24 + return{
  25 + list:[]
  26 + }
  27 + },
  28 + mounted(){
  29 + this.list = JSON.parse(sessionStorage.getItem('recordData'))
  30 + console.log(this.list)
  31 + }
33 32 };
34 33 </script>
35 34  
... ...
src/views/eInvoice/invoiceRecord/invoiceDetail.vue
1 1 <template>
2 2 <div>
3 3 <group title="开票历史">
4   - <cell title="发票预览" link="https://vux.li"></cell>
5   - <cell title="收件信息" inline-desc='电子邮箱: 34124@163.com'></cell>
6   - <cell title="发票包含内容" inline-desc='该发票包含2笔交易' link="https://vux.li"></cell>
  4 + <cell title="发票预览" :link="$route.query.invoiceUrl"></cell>
  5 + <cell title="收件信息" :inline-desc="'电子邮箱:'+ $route.query.custEmail"></cell>
  6 + <cell title="发票包含内容" :inline-desc="'该发票包含'+$route.query.len+'笔交易'" :link="{path:'exchange'}"></cell>
7 7 </group>
8 8  
9 9 <group title="">
10 10 <div style="padding: 40px 20px;">
11   - <box gap="10px 10px">
12   - <x-button :gradients="['#1D62F0', '#19D5FD']">重发电子邮箱</x-button>
13   - </box>
  11 + <div >
  12 + <x-button :gradients="['#1D62F0', '#19D5FD']" @click.native="sentEmail">重发电子邮箱</x-button>
  13 + </div>
14 14 <div style="text-align: center;padding-top: 20px;">客服电话: 0714-6212345</div>
15 15 </div>
16 16 </group>
... ... @@ -20,10 +20,11 @@
20 20  
21 21 <script>
22 22 import {
23   - queryCustInvoiceHistoryList
  23 + resendInvoiceMail
24 24 } from "@/api/invoice/invoice.js";
25 25 export default {
26 26 name: "invoiceDetail",
  27 +
27 28 data() {
28 29 return {
29 30 list: []
... ... @@ -31,7 +32,21 @@ export default {
31 32 },
32 33 mounted() {
33 34 },
34   - methods: {}
  35 + methods: {
  36 + sentEmail: function() {
  37 + let obj = {
  38 + invoiceId:this.$route.query.invoiceId,
  39 + orgId:this.$utils.myOrgId
  40 + }
  41 + let jsondata = Object.assign(obj, this.$utils.commonParams());
  42 + jsondata.sign = this.$utils.signObject(jsondata);
  43 + console.log(JSON.stringify(jsondata));
  44 + resendInvoiceMail(jsondata).then(response => {
  45 + console.log(response);
  46 +
  47 + });
  48 + }
  49 + }
35 50 };
36 51 </script>
37 52  
... ...
src/views/eInvoice/invoiceRecord/invoiceRecord.vue
1 1 <template>
2 2 <div v-if="list.length>0">
3 3 <group title="开票历史">
4   - <cell title="停车" link="https://vux.li" inline-desc='2020/05/29 22:22:22'>
  4 + <cell :title="i.invoiceBigType | invoiceBigTypeFilter" @click.native="toInvoiceDetail(i)"
  5 + :inline-desc="$utils.getLocalTime(i.invoiceDate)"
  6 + v-for="(i, index) in list">
5 7 <div>
6   - <p>已发送电子邮箱</p>
7   - <p>¥ 0.20</p>
8   - </div>
9   - </cell>
10   -
11   - <cell title="停车" link="https://vux.li" inline-desc='2020/05/29 22:22:22'>
12   - <div>
13   - <p>已开票</p>
14   - <p>¥ 0.20</p>
  8 + <p>{{i.invoiceState | invoiceStateFilter}}</p>
  9 + <p>¥ {{(i.invoiceTotalFee/100).toFixed(2)}}</p>
15 10 </div>
16 11 </cell>
17 12 </group>
... ... @@ -47,6 +42,44 @@ export default {
47 42 console.log(response);
48 43 this.list = response.data;
49 44 });
  45 + },
  46 + toInvoiceDetail: function(i) {
  47 + sessionStorage.setItem('recordData',JSON.stringify(i.custInvoiceHisDetailDTOList))
  48 + this.$router.push({
  49 + path:'invoiceDetail',
  50 + query:{
  51 + custEmail:i.custEmail,
  52 + len:i.custInvoiceHisDetailDTOList.length,
  53 + invoiceId:i.invoiceId,
  54 + invoiceUrl:i.invoiceUrl
  55 + }
  56 + })
  57 + }
  58 + },
  59 + filters: {
  60 + invoiceBigTypeFilter(val) {
  61 + switch (val) {
  62 + case 100:
  63 + return "停车";
  64 + break;
  65 + case 200:
  66 + return "充值";
  67 + break;
  68 + case 300:
  69 + return "会员卡";
  70 + break;
  71 + default:
  72 + break;
  73 + }
  74 + },
  75 + invoiceStateFilter(val) {
  76 + if (val == 2) {
  77 + return "已发送电子邮箱";
  78 + } else if (val == 3 || val == 4) {
  79 + return "已开票";
  80 + } else {
  81 + return "待开票";
  82 + }
50 83 }
51 84 }
52 85 };
... ...
src/views/eInvoice/parkInvoice/parkInvoice.vue
... ... @@ -178,7 +178,7 @@ export default {
178 178 console.log(JSON.stringify(jsondata));
179 179 openTicketForCustInvoiceHisInfo(jsondata).then(response => {
180 180 console.log(response);
181   - this.queryCustInvoiceInfoList()
  181 + this.queryRntPayOrderForInvoice()
182 182 });
183 183 },
184 184 // 获取可开票列表
... ...