preview.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  1. <template>
  2. <Dialog
  3. v-model="dialogVisible"
  4. title="对账单预览"
  5. class="billPayPreview"
  6. width="60%"
  7. scroll
  8. @closed="handleClosed"
  9. >
  10. <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
  11. <el-tab-pane label="打印类型A(含固定费明细)" name="first">
  12. <div class="first" id="printTab1">
  13. <div class="header">
  14. <p class="title" style="font-size: 18px">{{ tenantName }}对账单预览</p>
  15. <div class="info-wrap" style="margin-top: -4px">
  16. <span
  17. ><b>姓名:</b> {{ dataForm.elderName
  18. }}{{
  19. dataForm.contractNumber == null || dataForm.contractNumber == ''
  20. ? ''
  21. : `(${dataForm.contractNumber})`
  22. }}</span
  23. >
  24. <span><b>床位号:</b> {{ dataForm.bedName }}</span>
  25. <span><b>缴费时间:</b> {{ formatTime(dataForm.payTime, 'yyyy-MM-dd') }}</span>
  26. <!-- <span><b>应收金额:</b> {{ totalPayAmount }}元</span>-->
  27. <span><b>经手人:</b> {{ dataForm.payeeName }}</span>
  28. <!-- <span><b>账单月:</b> {{ dataForm.billingMonth }}</span>-->
  29. <!-- <span><b>打印时间:</b> {{ dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') }}</span>-->
  30. </div>
  31. <!-- <div class="info-wrap" style="margin-top: -10px">-->
  32. <!-- <span><b>发票号:</b> {{ dataForm.invoiceNumber }}</span> -->
  33. <!-- <span><b>应收金额:</b> {{ totalPayAmount }}元</span>-->
  34. <!-- <span><b>医保费用:</b> {{ formatNum(dataForm.insuranceAmount) || '0' }}元</span>
  35. <span><b>个人应缴:</b> {{ formatNum(dataForm.payAmount) }}元</span> -->
  36. <!-- <span><b>长护险余额:</b> {{ formatNum(longTermAmount) || '0' }}元</span>-->
  37. <!-- <span><b>抹零金额:</b> {{ roundDown }}元</span>-->
  38. <!-- <span><b>个人应缴:</b> {{ payTotal }}元</span>-->
  39. <!-- </div>-->
  40. <!-- <div class="info-wrap" style="margin-top: -10px">-->
  41. <!-- <span><b>缴费时间:</b> {{ formatTime(dataForm.payTime, 'yyyy-MM-dd') }}</span>-->
  42. <!-- </div>-->
  43. </div>
  44. <el-divider style="margin-top: 0px" />
  45. <div class="content">
  46. <!-- <p class="info">以下是账单明细</p>-->
  47. <div class="flex">
  48. <b>{{
  49. dataForm.description
  50. ? tTitle + '(' + dataForm.description + ')'
  51. : tTitle + '(' + bTitle + ')'
  52. }}</b>
  53. <span><b>金额小计:</b>¥ {{ tableSubtotal }}</span>
  54. </div>
  55. <table style="width: 100%" border="2">
  56. <tr align="center">
  57. <td>序号</td>
  58. <td>费用分类</td>
  59. <td>费用名称</td>
  60. <!-- <td>单价(元/月)</td>
  61. <td>数量</td> -->
  62. <td>金额(元)</td>
  63. <td>实际发生时间</td>
  64. <td>备注</td>
  65. </tr>
  66. <tr v-for="(item, index) in dataForm.items" :key="index" align="center">
  67. <td>{{ index + 1 }}</td>
  68. <td>{{ item.itemCategoryName }}</td>
  69. <td>{{ item.itemName }}</td>
  70. <!-- <td>{{ tableRowPrice(item) }}</td>
  71. <td>{{ item.count }}</td> -->
  72. <td>{{ tableRowPay(item) }}</td>
  73. <td>{{ formatStartDate(item) }}</td>
  74. <td>{{ item.description }}</td>
  75. </tr>
  76. <tr align="center">
  77. <td>支付方式描述</td>
  78. <td colspan="5">{{ payText }}</td>
  79. </tr>
  80. <!-- <tr align="center">
  81. <td>预缴金额</td>
  82. <td colspan="5"></td>
  83. </tr> -->
  84. </table>
  85. </div>
  86. </div>
  87. </el-tab-pane>
  88. <el-tab-pane label="打印类型B(不含固定费明细)" name="second">
  89. <div class="second" id="printTab2">
  90. <div class="header">
  91. <p class="title">{{ tenantName }}对账单预览</p>
  92. <div class="info-wrap">
  93. <span>{{ dataForm.billingMonth }}账单</span>
  94. <span>{{ tenantName }}</span>
  95. <div class="right">
  96. <span><b>打印时间:</b> {{ dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') }}</span>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="content">
  101. <table style="width: 100%" border="2">
  102. <tr align="center">
  103. <td>姓名</td>
  104. <td colspan="3">{{ dataForm.elderName }}</td>
  105. <td>床位号</td>
  106. <td colspan="3"> {{ dataForm.bedName }}</td>
  107. </tr>
  108. <tr align="center">
  109. <td rowspan="4">月度费用</td>
  110. <td colspan="2">费用名称</td>
  111. <td>金额(元)</td>
  112. <td rowspan="4">其他费用</td>
  113. <td colspan="2">费用名称</td>
  114. <td>金额(元)</td>
  115. </tr>
  116. <tr align="center">
  117. <td colspan="2">
  118. <p>{{ tTitle }}</p>
  119. <p v-if="!dataForm.description">({{ bTitle }})</p>
  120. <p v-if="dataForm.description">({{ dataForm.description }})</p>
  121. </td>
  122. <td>{{ table2MonthPay }}</td>
  123. <td colspan="2">{{ dataForm.otherName }}</td>
  124. <td>{{ table2OtherPay }}</td>
  125. </tr>
  126. <tr></tr>
  127. <tr align="center">
  128. <td colspan="2">小计</td>
  129. <td>{{ formatNum(dataForm.monthNum) }}</td>
  130. <td colspan="2">小计</td>
  131. <td>{{ formatNum(dataForm.otherNum) }}</td>
  132. </tr>
  133. <tr>
  134. <td colspan="2" align="center">账单金额</td>
  135. <td colspan="6">{{ totalPayAmount }}元</td>
  136. </tr>
  137. <tr>
  138. <td colspan="2" align="center">长护险费用</td>
  139. <td colspan="6">{{ formatNum(longTermAmount) || '0' }}元</td>
  140. </tr>
  141. <tr>
  142. <td colspan="2" align="center">抹零金额</td>
  143. <td colspan="6">{{ formatNum(roundDown) }}元</td>
  144. </tr>
  145. <tr>
  146. <td colspan="2" align="center">个人应缴</td>
  147. <td colspan="6">{{ payTotal }}元</td>
  148. </tr>
  149. </table>
  150. </div>
  151. </div>
  152. </el-tab-pane>
  153. </el-tabs>
  154. <template #footer>
  155. <el-button @click="handleClosed">取消</el-button>
  156. <el-button type="primary" v-print="printTab2" v-if="activeName == 'second'">打印</el-button>
  157. <el-button type="primary" v-print="printTab1" v-if="activeName == 'first'">打印</el-button>
  158. </template>
  159. </Dialog>
  160. </template>
  161. <script setup lang="ts">
  162. import { getExpenseOrderDetail } from '@/api/elderly/fee/bill-pay'
  163. import dayjs from 'dayjs'
  164. import { useUserStore } from '@/store/modules/user'
  165. import {
  166. fixedNum,
  167. formatCeil,
  168. formatDecimal,
  169. formatNum,
  170. formatRid,
  171. formatRound
  172. } from '@/utils/formatter'
  173. import { useSettingStore } from '@/store/modules/setting'
  174. import { formatTime } from '@/utils'
  175. import { getDictLabel, DICT_TYPE } from '@/utils/dict'
  176. defineOptions({ name: 'BillPayPreview' })
  177. const settingStore = useSettingStore()
  178. const tenantName = useUserStore().getTenantName // 当前登录的编号
  179. const dialogVisible = ref(false)
  180. const activeName = ref('first')
  181. const dataForm = ref({
  182. insuranceAmount: 0,
  183. payAmount: 0,
  184. billingMonth: '',
  185. contractNumber: '',
  186. items: [],
  187. payInfos: [],
  188. otherName: '',
  189. otherNum: '',
  190. monthNum: '',
  191. elderName: '',
  192. bedName: '',
  193. actualAmount: '',
  194. type: '',
  195. invoiceNumber: '',
  196. payTime: '',
  197. payeeName: '',
  198. description: ''
  199. })
  200. const longTermAmount = ref(0)
  201. const payText = ref('')
  202. const roundDown = ref(0)
  203. /** 打开弹窗 */
  204. const open = async (id, row) => {
  205. dialogVisible.value = true
  206. const res = await getExpenseOrderDetail(id)
  207. let flag = false
  208. dataForm.value = res
  209. res.items = res.items.filter((item) => item.isShow == 1)
  210. res.items.map((item) => {
  211. if (item.expenseSource == 'long_term_care_insurance') {
  212. longTermAmount.value += item.actualPrice
  213. item.payStatus = 0
  214. flag = true
  215. // 遍历长护险
  216. res.expenseSubsidyDO.map((d) => {
  217. if (Math.abs(d.id || 1) == Math.abs(item.sourceExpenseItemId || 0)) {
  218. item.createdTime = d.month
  219. item.description = d.remarks
  220. if (!item.itemCategoryName) {
  221. item.itemCategoryName = '长护险'
  222. }
  223. }
  224. })
  225. }
  226. })
  227. dataForm.value.payeeName = row.payeeName
  228. // 已支付状态下的才是所有items
  229. if (res.payStatus == 0) {
  230. const arr = []
  231. res.items.map((item) => {
  232. if (item.payStatus == 1) {
  233. arr.push(item)
  234. }
  235. })
  236. dataForm.value.items = arr
  237. }
  238. // 已支付订单金额
  239. let num = 0
  240. let insurance = 0
  241. res.payInfos.map((item) => {
  242. item.items.map((info) => {
  243. payText.value +=
  244. getDictLabel(DICT_TYPE.BILL_PAY_TYPE, info.payType) + ':' + info.payAmount + '元;'
  245. })
  246. num += formatDecimal(item.payAmount) as number
  247. insurance += item.insuranceAmount ? (formatDecimal(item.insuranceAmount) as number) : 0
  248. // 看看是否有抹零金额
  249. if (item.discountAmount) {
  250. roundDown.value += item.discountAmount
  251. }
  252. })
  253. dataForm.value.payAmount = formatRid(num) as number
  254. dataForm.value.insuranceAmount = formatRid(insurance) as number
  255. // 有长护险
  256. if (!flag) {
  257. if (res.expenseSubsidyDO && res.expenseSubsidyDO.length) {
  258. let num = 0
  259. res.expenseSubsidyDO.map((item) => {
  260. num += item.amount
  261. dataForm.value.items.push({
  262. expenseSource: 'long_term_care_insurance',
  263. itemCategoryName: '长护险',
  264. itemName: '长护险抵扣',
  265. description: item.remarks ? item.remarks : item.month + '长护险抵扣',
  266. roundAmount: -item.amount,
  267. roundTwoDecimalAmount: -item.amount,
  268. totalAmount: -item.amount,
  269. createdTime: item.month,
  270. payTime: '',
  271. payStatus: item.status
  272. })
  273. })
  274. // 去除长护险费用
  275. // unPayTotal.value -= num
  276. longTermAmount.value = num
  277. // payTotal.value -= res.num
  278. }
  279. }
  280. }
  281. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  282. const handleClick = (val) => {
  283. activeName.value = val
  284. // 计算固定费用和其他费用
  285. if (val == 'second') {
  286. let monthNum = 0,
  287. otherNum = 0,
  288. otherName = ''
  289. dataForm.value.items.map((item) => {
  290. if (item.isMonthlyExpense == 1) {
  291. if (rounding.value) {
  292. // 取整
  293. monthNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  294. } else if (fixed2Num.value) {
  295. // 四舍五入
  296. monthNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  297. } else {
  298. // 应收
  299. monthNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : formatNum(item.totalAmount))
  300. }
  301. } else {
  302. if (item.itemName != '长护险护理补贴费用') {
  303. otherName += item.itemName + ';'
  304. if (rounding.value) {
  305. // 取整
  306. otherNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  307. } else if (fixed2Num.value) {
  308. // 四舍五入
  309. otherNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  310. } else {
  311. // 应收
  312. otherNum += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : formatNum(item.totalAmount))
  313. }
  314. }
  315. }
  316. })
  317. dataForm.value.monthNum = monthNum
  318. dataForm.value.otherNum = otherNum
  319. dataForm.value.otherName = otherName
  320. }
  321. }
  322. const handleClosed = () => {
  323. payText.value = ''
  324. activeName.value = 'first'
  325. longTermAmount.value = 0
  326. dialogVisible.value = false
  327. }
  328. // 取整金额
  329. const rounding = computed(() => {
  330. return settingStore.getRounding
  331. })
  332. // 四舍五入保留两位
  333. const fixed2Num = computed(() => {
  334. return settingStore.getFix2Num
  335. })
  336. // 账单总额
  337. const totalPayAmount = computed(() => {
  338. let num1 = 0,
  339. num2 = 0,
  340. num3 = 0 // 入院向上取整 、 入院保留两位、 入院应收
  341. // 遍历里面的所有数据得到数据
  342. dataForm.value.items.map((item) => {
  343. if (item.itemName != '长护险护理补贴费用') {
  344. num1 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  345. num2 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  346. if (item.isMonthlyExpense == 1 && dataForm.value.type == 1) {
  347. if (settingStore.getAdmissionBill == 2) {
  348. // 向上取整
  349. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : formatCeil(item.totalAmount))
  350. } else if (settingStore.getAdmissionBill == 3) {
  351. // 四舍五入保留两位
  352. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  353. } else if (settingStore.getAdmissionBill == 4) {
  354. // 四舍五入取整
  355. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  356. } else {
  357. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.totalAmount)
  358. }
  359. } else {
  360. if (rounding.value) {
  361. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  362. } else if (fixed2Num.value) {
  363. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  364. } else {
  365. num3 += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.totalAmount)
  366. }
  367. }
  368. }
  369. })
  370. if (dataForm.value.type == 1) {
  371. return formatNum(num3)
  372. } else {
  373. if (rounding.value) {
  374. // 取整(有问题)
  375. return formatNum(num1)
  376. } else if (fixed2Num.value) {
  377. // 四舍五入
  378. return formatNum(num2)
  379. } else {
  380. return formatNum(dataForm.value.actualAmount)
  381. }
  382. }
  383. })
  384. // 个人应缴
  385. const payTotal = computed(() => {
  386. let num = 0
  387. dataForm.value.payInfos.map((item) => {
  388. num += item.payAmount
  389. })
  390. return formatNum(num)
  391. // return formatNum(totalPayAmount.value - longTermAmount.value - roundDown.value)
  392. })
  393. // 表格1单价
  394. const tableRowPrice = (row) => {
  395. return formatNum(row.actualPrice)
  396. }
  397. // 表格1总额单项小计
  398. const tableRowPay = (row) => {
  399. if (dataForm.value.type == '1' && row.isMonthlyExpense == 1) {
  400. if (settingStore.getAdmissionBill == 2) {
  401. // 向上取整
  402. return formatNum(row.expenseSource == 'consumer_voucher' ? row.totalAmount : formatCeil(row.totalAmount))
  403. } else if (settingStore.getAdmissionBill == 3) {
  404. // 四舍五入保留两位
  405. return formatNum(row.expenseSource == 'consumer_voucher' ? row.totalAmount : row.roundTwoDecimalAmount)
  406. } else if (settingStore.getAdmissionBill == 4) {
  407. // 四舍五入取整
  408. return formatNum(row.expenseSource == 'consumer_voucher' ? row.totalAmount : row.roundAmount)
  409. } else {
  410. return formatNum(row.expenseSource == 'consumer_voucher' ? row.totalAmount : row.totalAmount)
  411. }
  412. } else {
  413. if (rounding.value) {
  414. return row.expenseSource == 'consumer_voucher'
  415. ? formatNum(row.totalAmount)
  416. : formatNum(row.roundAmount)
  417. } else if (fixed2Num.value) {
  418. return row.expenseSource == 'consumer_voucher'
  419. ? formatNum(row.totalAmount)
  420. : formatNum(row.roundTwoDecimalAmount)
  421. } else {
  422. return row.expenseSource == 'consumer_voucher'
  423. ? formatNum(row.totalAmount)
  424. : formatNum(row.totalAmount)
  425. }
  426. }
  427. }
  428. // 表格1总额小计
  429. const tableSubtotal = computed(() => {
  430. let num = 0
  431. dataForm.value.items.map((item) => {
  432. if (dataForm.value.type == '1' && item.isMonthlyExpense == 1) {
  433. if (settingStore.getAdmissionBill == 2) {
  434. // 向上取整
  435. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : formatCeil(item.totalAmount))
  436. } else if (settingStore.getAdmissionBill == 3) {
  437. // 四舍五入保留两位
  438. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  439. } else if (settingStore.getAdmissionBill == 4) {
  440. // 四舍五入取整
  441. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  442. } else {
  443. // 应收
  444. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.totalAmount)
  445. }
  446. } else {
  447. if (rounding.value) {
  448. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundAmount)
  449. } else if (fixed2Num.value) {
  450. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.roundTwoDecimalAmount)
  451. } else {
  452. num += Number(item.expenseSource == 'consumer_voucher' ? item.totalAmount : item.totalAmount)
  453. }
  454. }
  455. })
  456. return formatNum(num)
  457. })
  458. // 表格2月度总额
  459. const table2MonthPay = computed(() => {
  460. return formatNum(dataForm.value.monthNum)
  461. })
  462. // 表格2其他费用
  463. const table2OtherPay = computed(() => {
  464. return formatNum(dataForm.value.otherNum)
  465. })
  466. const tTitle = computed(() => {
  467. const arr = dataForm.value.billingMonth ? dataForm.value.billingMonth.split('-') : ''
  468. if (arr.length) {
  469. return `预收${arr[0]}年${arr[1]}月固定费用`
  470. }
  471. return ''
  472. })
  473. const bTitle = computed(() => {
  474. const arr = dataForm.value.billingMonth ? dataForm.value.billingMonth.split('-') : ''
  475. if (arr.length) {
  476. // 获取当月最后一天
  477. const date = new Date(new Date(Number(arr[0]), Number(arr[1]), 0)).getDate()
  478. return `${arr[0]}年${arr[1]}月01日-${arr[0]}年${arr[1]}月${date}日`
  479. }
  480. return ''
  481. })
  482. // const formatStartDate = (item) => {
  483. // return item.expenseSource == 'long_term_care_insurance' || item.itemName == '长护险护理补贴费用' ? item.createdTime : (item.expenseSource == 'expense_item' ? (dataForm.value.description ? dataForm.value.description : bTitle) : (item.startDate + '至' + item.endDate))
  484. // }
  485. const formatStartDate = (item) => {
  486. if (item.itemName == '长护险护理补贴费用' || item.expenseSource == 'long_term_care_insurance') {
  487. // 长护险
  488. return item.createdTime
  489. // let dataStr = item.startDate??"--"
  490. // if(dataStr.length>=10){
  491. // dataStr = dataStr.substring(0,7)
  492. // }
  493. // return dataStr
  494. } else if (item.expenseSource == 'expense_item') {
  495. // if(dataForm.value.description){
  496. // return dataForm.value.description
  497. // }else{
  498. // return bTitle
  499. // }
  500. if (item.description && item.description.includes('的')) {
  501. return item.description.split('的')[0]
  502. } else if (item.startDate != null && item.endDate != null) {
  503. return `${item.startDate}至${item.endDate}`
  504. } else if (
  505. item.startDate == null &&
  506. dataForm.value.description &&
  507. dataForm.value.description.length > 21
  508. ) {
  509. return dataForm.value.description.toString().substring(0, 21)
  510. } else {
  511. return bTitle
  512. }
  513. } else {
  514. return item.startDate + '至' + item.endDate
  515. }
  516. }
  517. const formatStr = (dateStr) => {
  518. if (dateStr) {
  519. // 2. 按 "-" 拆分字符串,得到 [年, 月, 日] 数组
  520. const [year, month, day] = dateStr.split('-')
  521. // 3. 按目标格式拼接
  522. return `${year}年${month}月${day}日`
  523. }
  524. return ''
  525. }
  526. // 打印
  527. const printTab1 = {
  528. id: 'printTab1',
  529. extraCss: '',
  530. popTitle: '', // 打印配置页上方的标题
  531. extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
  532. preview: false, // 是否启动预览模式,默认是false
  533. previewTitle: tenantName + '对账单预览', // 打印预览的标题
  534. previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
  535. zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
  536. previewBeforeOpenCallback() {
  537. console.log('正在加载预览窗口!')
  538. }, // 预览窗口打开之前的callback
  539. previewOpenCallback() {
  540. console.log('已经加载完预览窗口,预览打开了!')
  541. }, // 预览窗口打开时的callback
  542. beforeOpenCallback() {
  543. console.log('开始打印之前!')
  544. }, // 开始打印之前的callback
  545. openCallback() {
  546. console.log('执行打印了!')
  547. }, // 调用打印时的callback
  548. closeCallback() {
  549. console.log('关闭了打印工具!')
  550. }, // 关闭打印的callback(无法区分确认or取消)
  551. clickMounted() {
  552. console.log('点击v-print绑定的按钮了!')
  553. },
  554. standard: ''
  555. }
  556. // 打印
  557. const printTab2 = {
  558. id: 'printTab2',
  559. extraCss: '',
  560. popTitle: '', // 打印配置页上方的标题
  561. extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
  562. preview: false, // 是否启动预览模式,默认是false
  563. previewTitle: tenantName + '对账单预览', // 打印预览的标题
  564. previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
  565. zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
  566. previewBeforeOpenCallback() {
  567. console.log('正在加载预览窗口!')
  568. }, // 预览窗口打开之前的callback
  569. previewOpenCallback() {
  570. console.log('已经加载完预览窗口,预览打开了!')
  571. }, // 预览窗口打开时的callback
  572. beforeOpenCallback() {
  573. console.log('开始打印之前!')
  574. }, // 开始打印之前的callback
  575. openCallback() {
  576. console.log('执行打印了!')
  577. }, // 调用打印时的callback
  578. closeCallback() {
  579. console.log('关闭了打印工具!')
  580. }, // 关闭打印的callback(无法区分确认or取消)
  581. clickMounted() {
  582. console.log('点击v-print绑定的按钮了!')
  583. },
  584. standard: ''
  585. }
  586. </script>
  587. <style lang="scss" scoped>
  588. .first {
  589. .header {
  590. .title {
  591. font-size: 20px;
  592. font-weight: bold;
  593. text-align: center;
  594. }
  595. .info-wrap {
  596. position: relative;
  597. span {
  598. display: inline-block;
  599. margin-bottom: 10px;
  600. width: 25%;
  601. }
  602. .right {
  603. display: inline-block;
  604. width: 49%;
  605. text-align: right;
  606. span {
  607. width: 100%;
  608. }
  609. }
  610. }
  611. }
  612. .content {
  613. .info {
  614. text-align: center;
  615. }
  616. .flex {
  617. display: flex;
  618. justify-content: space-between;
  619. margin-bottom: 10px;
  620. }
  621. }
  622. }
  623. .second {
  624. .header {
  625. .title {
  626. font-size: 20px;
  627. font-weight: bold;
  628. text-align: center;
  629. }
  630. .info-wrap {
  631. display: flex;
  632. justify-content: space-between;
  633. }
  634. }
  635. }
  636. </style>