invoiceDetails.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <!-- 发票详情 -->
  2. <template>
  3. <view class="details u-skeleton">
  4. <!-- 发票信息 -->
  5. <view class="details-invoice">
  6. <view class="details-invoice-title">发票信息</view>
  7. <view class="details-invoice-list">
  8. <view class="details-invoice-list-item u-skeleton-fillet">
  9. <view class="details-invoice-list-item-label">抬头类型:</view>
  10. <view class="details-invoice-list-item-content">{{ formatInvoiceType(invoiceInfo.invoType) }}</view>
  11. </view>
  12. <view class="details-invoice-list-item u-skeleton-fillet">
  13. <view class="details-invoice-list-item-label">抬头名称:</view>
  14. <view class="details-invoice-list-item-content">{{ invoiceInfo.invoName }}</view>
  15. </view>
  16. <view class="details-invoice-list-item u-skeleton-fillet" v-if="invoiceInfo.invoType === 1 && invoiceInfo.invoCode">
  17. <view class="details-invoice-list-item-label">企业税号:</view>
  18. <view class="details-invoice-list-item-content">{{ invoiceInfo.invoCode }}</view>
  19. </view>
  20. <view class="details-invoice-list-item u-skeleton-fillet">
  21. <view class="details-invoice-list-item-label">发票状态:</view>
  22. <view class="details-invoice-list-item-content status" :class="formatStatusType(invoiceInfo.status)">
  23. <view class="status">{{ formatStatus(invoiceInfo.status) }}</view>
  24. <u-button v-if="invoiceInfo.status === 2 && invoiceInfo.ifReopen===1" type="primary" size="mini" @click="reopen(invoiceInfo.invoType)">重新申请</u-button>
  25. </view>
  26. </view>
  27. <view class="details-invoice-list-item u-skeleton-fillet">
  28. <view class="details-invoice-list-item-label">申请时间:</view>
  29. <view class="details-invoice-list-item-content">{{ $u.timeFormat(new Date(invoiceInfo.askTime), 'yyyy-mm-dd hh:MM:ss') }}</view>
  30. </view>
  31. <view class="details-invoice-list-item u-skeleton-fillet">
  32. <view class="details-invoice-list-item-label">更多内容:</view>
  33. <view class="details-invoice-list-item-content view-text" @click="viewMore">查看</view>
  34. </view>
  35. <view class="details-invoice-list-item u-skeleton-fillet" v-if="invoiceInfo.status === 2">
  36. <view class="details-invoice-list-item-label">失败原因:</view>
  37. <view class="details-invoice-list-item-content">{{ invoiceInfo.remark }}</view>
  38. </view>
  39. <view class="details-invoice-list-item bottom-top view-btn" v-if="invoiceInfo.status === 1">
  40. <text @click="viewPdf">查看电子发票</text>
  41. </view>
  42. </view>
  43. </view>
  44. <!-- 订单信息 -->
  45. <view class="details-order u-skeleton-fillet" v-if="invoiceInfo.orderInvoExes && invoiceInfo.orderInvoExes.length">
  46. <view class="details-order-title">订单信息:共{{ invoiceInfo.orderInvoExes.length }}个订单</view>
  47. <view class="details-order-list">
  48. <view class="details-order-list-item" v-for="(item, index) in invoiceInfo.orderInvoExes" :key="index">
  49. <view class="details-order-list-item-left">
  50. <view class="money">¥{{ item.amount }}</view>
  51. <view>{{ item.name || '-' }}</view>
  52. <view class="time" v-if="item.remark">{{ item.remark }}</view>
  53. <view class="time">支付时间:{{ item.payTime ? $u.timeFormat(new Date(item.payTime), 'yyyy-mm-dd hh:MM:ss') : '-' }}</view>
  54. </view>
  55. <view class="details-order-list-item-right">{{ item.vehicleNo || '-' }}</view>
  56. </view>
  57. </view>
  58. </view>
  59. <!--引用组件-->
  60. <u-skeleton :loading="skeletonLoading" :animation="true" bgColor="#FFF"></u-skeleton>
  61. <!-- 查看更多弹框 -->
  62. <u-popup v-model="viewMorePop.show" mode="center" width="600" border-radius="14" :closeable="true">
  63. <view class="details-pop">
  64. <view class="details-pop-title">更多内容</view>
  65. <view class="details-pop-list">
  66. <view class="details-pop-list-item">
  67. <view class="details-pop-list-item-label">开户银行:</view>
  68. <view class="details-pop-list-item-content">{{ invoiceInfo.openBank || '-' }}</view>
  69. </view>
  70. <view class="details-pop-list-item">
  71. <view class="details-pop-list-item-label">银行账号:</view>
  72. <view class="details-pop-list-item-content">{{ invoiceInfo.numBank || '-' }}</view>
  73. </view>
  74. <view class="details-pop-list-item">
  75. <view class="details-pop-list-item-label">抬头地址:</view>
  76. <view class="details-pop-list-item-content">{{ invoiceInfo.mapCom || '-' }}</view>
  77. </view>
  78. <view class="details-pop-list-item">
  79. <view class="details-pop-list-item-label">企业电话:</view>
  80. <view class="details-pop-list-item-content">{{ invoiceInfo.phoneCom || '-' }}</view>
  81. </view>
  82. <view class="details-pop-list-item">
  83. <view class="details-pop-list-item-label">电子邮箱:</view>
  84. <view class="details-pop-list-item-content">{{ invoiceInfo.invoMail || '-' }}</view>
  85. </view>
  86. <view class="details-pop-list-item">
  87. <view class="details-pop-list-item-label">手机号码:</view>
  88. <view class="details-pop-list-item-content">{{ invoiceInfo.invoPhone || '-' }}</view>
  89. </view>
  90. </view>
  91. </view>
  92. </u-popup>
  93. </view>
  94. </template>
  95. <script>
  96. export default {
  97. data() {
  98. return {
  99. invoiceInfo: {},
  100. chooseRecords: {
  101. show: false,
  102. list: []
  103. },
  104. invoiceStatusList: [],
  105. viewMorePop: {
  106. show: false
  107. },
  108. skeletonLoading: false
  109. };
  110. },
  111. onLoad(options) {
  112. const { id, orderType } = options;
  113. if (id) {
  114. this.getDict();
  115. this.getInvoiceDetails(id);
  116. }
  117. },
  118. methods: {
  119. /**
  120. * @description: 获取字典
  121. * @return {*}
  122. */
  123. async getDict() {
  124. // 发票类型
  125. const typeRes = await this.$u.api.getDictApi({ type: 'invoice_type' });
  126. if (typeRes.code === 200) {
  127. this.chooseRecords.list = typeRes.data;
  128. }
  129. // 开票状态
  130. const statusRes = await this.$u.api.getDictApi({ type: 'invoice_status' });
  131. if (statusRes.code === 200) {
  132. this.invoiceStatusList = statusRes.data;
  133. }
  134. },
  135. /**
  136. * @description: 获取发票详情
  137. * @param {*} id
  138. * @return {*}
  139. */
  140. async getInvoiceDetails(id) {
  141. try {
  142. this.skeletonLoading = true;
  143. const { code, data } = await this.$u.api.invoiceModuleApi.getInvoiceDetailsApi({ id });
  144. if (code === 200) {
  145. this.invoiceInfo = data;
  146. }
  147. } catch (error) {
  148. } finally {
  149. this.skeletonLoading = false;
  150. }
  151. },
  152. /**
  153. * @description: 预览图片
  154. * @param {*} url
  155. * @return {*}
  156. */
  157. previewImage(url) {
  158. uni.previewImage({
  159. urls: [url]
  160. });
  161. },
  162. viewPdf() {
  163. // this.$u.route({
  164. // url: '/pages/previewPdf/previewPdf',
  165. // params: {
  166. // fileUrl: this.invoiceInfo.fileUrl
  167. // }
  168. // });
  169. location.href = this.invoiceInfo.fileUrl;
  170. },
  171. viewMore() {
  172. this.viewMorePop.show = true;
  173. },
  174. /**
  175. * @description: 初始化状态
  176. * @param {*} val
  177. * @return {*}
  178. */
  179. formatStatus(val) {
  180. if (!val && val !== 0) return;
  181. if (this.invoiceStatusList.length) return this.invoiceStatusList.find((v) => Number(v.dictValue) === Number(val)).dictLabel;
  182. },
  183. /**
  184. * @description: 初始化状态按钮样式
  185. * @param {*} val
  186. * @return {*}
  187. */
  188. formatStatusType(val) {
  189. const statusTypeObj = {
  190. 0: 'info',
  191. 1: 'primary',
  192. 2: 'error'
  193. };
  194. return statusTypeObj[val];
  195. },
  196. /**
  197. * @description: 初始化发票类型
  198. * @param {*} val
  199. * @return {*}
  200. */
  201. formatInvoiceType(val) {
  202. if (!val) return;
  203. if (this.chooseRecords.list.length) return this.chooseRecords.list.find((item) => Number(item.dictValue) === Number(val)).dictLabel;
  204. },
  205. /**
  206. * @description: 跳转到重新开票页面
  207. * @param {number}invoType 开票类型 1-路边停车订单 2-室内订单 3-包月订单
  208. * @return {*}
  209. */
  210. reopen(invoType){
  211. // console.log('invoType',invoType);
  212. this.$u.route({
  213. url: '/pages/invoiceModule/addInvoice/addInvoice',
  214. params: {
  215. invoType: invoType
  216. }
  217. });
  218. }
  219. }
  220. };
  221. </script>
  222. <style lang="scss" scoped>
  223. @import './invoiceDetails.scss';
  224. </style>