Invoice.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <template>
  2. <div class="invoice">
  3. <div class="gap10 invoice-title">
  4. <div class="line_vertical"></div>
  5. <div class="">{{ $t('personalCenter.myInvoice') }}</div>
  6. </div>
  7. <ul class="invoice-list">
  8. <li v-for="(item, index) in list" :key="index">
  9. <div class="">
  10. <div class="btn">{{ item.invoiceStatusName }}</div>
  11. </div>
  12. <div class="invoice-list-t flex-center-between">
  13. <div class="">{{ item.content.name }}</div>
  14. <div class="">¥{{ item.content.price }}</div>
  15. </div>
  16. <div class="flex-center-between invoice-list-c">
  17. <div class="">{{ $t('personalCenter.orderNumber') }}:</div>
  18. <div class="">{{ item.orderNo }}</div>
  19. </div>
  20. <div class="flex-center-between invoice-list-time">
  21. <div class="">{{ $t('common.orderCreateTime') }}:</div>
  22. <div class="">{{ item.createTime }}</div>
  23. </div>
  24. <div v-if="item.invoiceStatus == 2" class="flex-center-between invoice-list-b">
  25. <div class=""></div>
  26. <div class="" @click="lookItem(item)">
  27. <img src="/src/assets/imgs/my/jilu@2x.png" alt="">
  28. <span>{{ $t('common.viewDetails') }}</span>
  29. </div>
  30. </div>
  31. </li>
  32. </ul>
  33. <template v-if="list.length">
  34. <Pagination :total="form.total" :page-size="form.pageSize" :current-page="form.pageNum"
  35. @page-change="handlePageChange" />
  36. </template>
  37. <el-empty v-else :description="$t('common.empty')" />
  38. <el-dialog v-model="dialogVisible" title="详情" width="700">
  39. <el-form :model="invoiceData">
  40. <el-row :gutter="16">
  41. <el-col :span="12">
  42. <el-form-item label="购方名称">
  43. <el-input v-model="invoiceData.invoiceTitle" />
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="12" v-if="invoiceData.invoiceType">
  47. <el-form-item label="购方税号">
  48. <el-input v-model="invoiceData.taxNumber" />
  49. </el-form-item>
  50. </el-col>
  51. </el-row>
  52. <template v-if="invoiceData.invoiceType">
  53. <el-row :gutter="16">
  54. <el-col :span="12">
  55. <el-form-item label="公司地址">
  56. <el-input v-model="invoiceData.otherInfo.address" />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item label="公司电话">
  61. <el-input v-model="invoiceData.otherInfo.mobile" />
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row :gutter="16">
  66. <el-col :span="12">
  67. <el-form-item label="公司开户行">
  68. <el-input v-model="invoiceData.otherInfo.bank" />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="开户行账号">
  73. <el-input v-model="invoiceData.otherInfo.account" />
  74. </el-form-item>
  75. </el-col>
  76. </el-row>
  77. </template>
  78. </el-form>
  79. <!-- <template #footer>
  80. <div class="dialog-footer">
  81. <el-button @click="dialogVisible = false">Cancel</el-button>
  82. <el-button type="primary" @click="dialogVisible = false">
  83. Confirm
  84. </el-button>
  85. </div>
  86. </template> -->
  87. </el-dialog>
  88. </div>
  89. </template>
  90. <script setup lang="ts">
  91. import Pagination from '@/components/Pagination.vue'
  92. import { invoiceList } from '@/api/my.js'
  93. import { ref, onMounted } from 'vue'
  94. const list = ref([])
  95. const form = ref({
  96. pageNum: 1,
  97. pageSize: 10,
  98. total: 0
  99. })
  100. const dialogVisible = ref(false);
  101. const invoiceData = ref({})
  102. const lookItem = (item) => {
  103. invoiceData.value = item;
  104. dialogVisible.value = true;
  105. }
  106. // 查看发票
  107. const handleClick = (item) => {
  108. location.href = item.invoiceUrl;
  109. }
  110. // 获取列表
  111. const getList = async () => {
  112. let res = await invoiceList(form.value)
  113. console.log(res.rows)
  114. res.rows.forEach(element => {
  115. element.content = JSON.parse(element.content)
  116. });
  117. list.value = res.rows || [];
  118. form.value.total = res.total;
  119. }
  120. const handlePageChange = (page) => {
  121. list.value = []
  122. form.value.pageNum = page;
  123. getList()
  124. }
  125. onMounted(() => {
  126. getList()
  127. })
  128. </script>
  129. <style scoped lang="scss">
  130. .invoice {
  131. padding-bottom: 20px;
  132. .invoice-title {
  133. height: 60px;
  134. font-size: 20px;
  135. font-weight: bold;
  136. color: #333333;
  137. }
  138. .invoice-list {
  139. li {
  140. padding: 16px;
  141. margin-bottom: 16px;
  142. background: #F5F7FA;
  143. border-radius: 16px;
  144. .btn {
  145. color: #FFFFFF;
  146. width: 66px;
  147. line-height: 30px;
  148. font-size: 14px;
  149. text-align: center;
  150. background: #2D71FF;
  151. border-radius: 4px;
  152. margin-bottom: 8px;
  153. }
  154. &:last-child {
  155. margin-bottom: 0;
  156. }
  157. .invoice-list-t {
  158. div {
  159. font-size: 18px;
  160. font-weight: bold;
  161. color: #3D3D3D;
  162. &:last-child {
  163. color: #FD5F3C;
  164. }
  165. }
  166. }
  167. .invoice-list-c,
  168. .invoice-list-time,
  169. .invoice-list-b {
  170. margin-top: 8px;
  171. div {
  172. font-size: 16px;
  173. &:first-child {
  174. color: #666666;
  175. }
  176. }
  177. }
  178. .invoice-list-b {
  179. div:last-child {
  180. display: flex;
  181. align-items: center;
  182. cursor: pointer;
  183. justify-content: center;
  184. width: 106px;
  185. height: 32px;
  186. background: #FFFFFF;
  187. border-radius: 4px;
  188. color: #2D71FF;
  189. font-size: 14px;
  190. img {
  191. width: 14px;
  192. height: 14px;
  193. margin-right: 4px;
  194. }
  195. }
  196. }
  197. }
  198. }
  199. }
  200. </style>