invoiceDetails.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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" :class="formatStatusType(invoiceInfo.status)">{{ formatStatus(invoiceInfo.status) }}</view>
  23. </view>
  24. <view class="details-invoice-list-item u-skeleton-fillet">
  25. <view class="details-invoice-list-item-label">申请时间:</view>
  26. <view class="details-invoice-list-item-content">{{ invoiceInfo.askTime }}</view>
  27. </view>
  28. <view class="details-invoice-list-item u-skeleton-fillet">
  29. <view class="details-invoice-list-item-label">更多内容:</view>
  30. <view class="details-invoice-list-item-content view-text" @click="viewMore">查看</view>
  31. </view>
  32. <view class="details-invoice-list-item u-skeleton-fillet" v-if="invoiceInfo.status === 2">
  33. <view class="details-invoice-list-item-label">失败原因:</view>
  34. <view class="details-invoice-list-item-content">{{ invoiceInfo.remark }}</view>
  35. </view>
  36. <view class="details-invoice-list-item bottom-top view-btn" v-if="invoiceInfo.status === 1">
  37. <text @click="viewPdf">查看电子发票</text>
  38. </view>
  39. </view>
  40. </view>
  41. <!-- 订单信息 -->
  42. <view class="details-order u-skeleton-fillet" v-if="invoiceInfo.orderInvoExes && invoiceInfo.orderInvoExes.length">
  43. <view class="details-order-title">订单信息:共{{ invoiceInfo.orderInvoExes.length }}个订单</view>
  44. <view class="details-order-list">
  45. <view class="details-order-list-item" v-for="(item, index) in invoiceInfo.orderInvoExes" :key="index">
  46. <view class="details-order-list-item-left">
  47. <view class="money">¥{{ item.amount }}</view>
  48. <view>{{ item.name || '-' }}</view>
  49. <view class="time">{{ item.payTime || '-' }}</view>
  50. </view>
  51. <view class="details-order-list-item-right">{{ item.vehicleNo || '-' }}</view>
  52. </view>
  53. </view>
  54. </view>
  55. <!--引用组件-->
  56. <u-skeleton :loading="skeletonLoading" :animation="true" bgColor="#FFF"></u-skeleton>
  57. <!-- 查看更多弹框 -->
  58. <u-popup v-model="viewMorePop.show" mode="center" width="600" border-radius="14" :closeable="true">
  59. <view class="details-pop">
  60. <view class="details-pop-title">更多内容</view>
  61. <view class="details-pop-list">
  62. <view class="details-pop-list-item">
  63. <view class="details-pop-list-item-label">开户银行:</view>
  64. <view class="details-pop-list-item-content">{{ invoiceInfo.openBank || '-' }}</view>
  65. </view>
  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.numBank || '-' }}</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.mapCom || '-' }}</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.phoneCom || '-' }}</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.invoMail || '-' }}</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.invoPhone || '-' }}</view>
  85. </view>
  86. </view>
  87. </view>
  88. </u-popup>
  89. </view>
  90. </template>
  91. <script>
  92. export default {
  93. data() {
  94. return {
  95. invoiceInfo: {},
  96. chooseRecords: {
  97. show: false,
  98. list: []
  99. },
  100. invoiceStatusList: [],
  101. viewMorePop: {
  102. show: false
  103. },
  104. skeletonLoading: false
  105. };
  106. },
  107. onLoad(options) {
  108. const { id, orderType } = options;
  109. if (id) {
  110. this.getDict();
  111. this.getInvoiceDetails(id);
  112. }
  113. },
  114. methods: {
  115. /**
  116. * @description: 获取字典
  117. * @return {*}
  118. */
  119. async getDict() {
  120. // 发票类型
  121. const typeRes = await this.$u.api.getDictApi({ type: 'invoice_type' });
  122. if (typeRes.code === 200) {
  123. this.chooseRecords.list = typeRes.data;
  124. }
  125. // 开票状态
  126. const statusRes = await this.$u.api.getDictApi({ type: 'invoice_status' });
  127. if (statusRes.code === 200) {
  128. this.invoiceStatusList = statusRes.data;
  129. }
  130. },
  131. /**
  132. * @description: 获取发票详情
  133. * @param {*} id
  134. * @return {*}
  135. */
  136. async getInvoiceDetails(id) {
  137. try {
  138. this.skeletonLoading = true;
  139. const { code, data } = await this.$u.api.invoiceModuleApi.getInvoiceDetailsApi({ id });
  140. if (code === 200) {
  141. this.invoiceInfo = data;
  142. }
  143. } catch (error) {
  144. } finally {
  145. this.skeletonLoading = false;
  146. }
  147. },
  148. /**
  149. * @description: 预览图片
  150. * @param {*} url
  151. * @return {*}
  152. */
  153. previewImage(url) {
  154. uni.previewImage({
  155. urls: [url]
  156. });
  157. },
  158. viewPdf() {
  159. this.$u.route({
  160. url: '/pages/previewPdf/previewPdf',
  161. params: {
  162. fileUrl: this.invoiceInfo.fileUrl
  163. }
  164. });
  165. },
  166. viewMore() {
  167. this.viewMorePop.show = true;
  168. },
  169. /**
  170. * @description: 初始化状态
  171. * @param {*} val
  172. * @return {*}
  173. */
  174. formatStatus(val) {
  175. if (!val && val !== 0) return;
  176. if (this.invoiceStatusList.length) return this.invoiceStatusList.find((v) => Number(v.dictValue) === Number(val)).dictLabel;
  177. },
  178. /**
  179. * @description: 初始化状态按钮样式
  180. * @param {*} val
  181. * @return {*}
  182. */
  183. formatStatusType(val) {
  184. const statusTypeObj = {
  185. 0: 'info',
  186. 1: 'primary',
  187. 2: 'error'
  188. };
  189. return statusTypeObj[val];
  190. },
  191. /**
  192. * @description: 初始化发票类型
  193. * @param {*} val
  194. * @return {*}
  195. */
  196. formatInvoiceType(val) {
  197. if (!val) return;
  198. if (this.chooseRecords.list.length) return this.chooseRecords.list.find((item) => Number(item.dictValue) === Number(val)).dictLabel;
  199. }
  200. }
  201. };
  202. </script>
  203. <style lang="scss" scoped>
  204. @import './invoiceDetails.scss';
  205. </style>