Confirm.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <template>
  2. <el-dialog
  3. :close-on-click-modal="false"
  4. :close-on-press-escape="false"
  5. :visible="visible"
  6. :before-close="handleClose"
  7. title="出票确认"
  8. width="80%">
  9. <el-form
  10. v-loading="submitDisable"
  11. element-loading-text="正在处理付款请求,请稍候"
  12. class="info-wrap"
  13. label-width="100px"
  14. :inline="true">
  15. <div style="margin-bottom: 20px;">
  16. 付款方式:
  17. <el-radio-group
  18. :disabled="createOrderStatus===1"
  19. size="medium"
  20. fill="#ff6934"
  21. v-model="currentPayChannel">
  22. <el-radio-button
  23. v-for="val in payChannelOptions"
  24. :key="val"
  25. :label="val"></el-radio-button>
  26. </el-radio-group>
  27. </div>
  28. <el-table
  29. border
  30. :data="orderInfo"
  31. style="margin-bottom:30px">
  32. <el-table-column
  33. prop="ticketName"
  34. label="票种名称">
  35. </el-table-column>
  36. <el-table-column
  37. label="游玩日期">
  38. <template slot-scope="">
  39. {{ playDate }}
  40. </template>
  41. </el-table-column>
  42. <el-table-column
  43. prop="count"
  44. label="数量">
  45. </el-table-column>
  46. <el-table-column
  47. prop="total"
  48. label="小计">
  49. <template slot-scope="scope">
  50. <span v-if="scope.row.discountPrice">
  51. {{ scope.row.total + scope.row.discountPrice * scope.row.tickets.length }} <s style="color: #f56c6c;">{{ scope.row.total }}</s>
  52. </span>
  53. <span v-else>
  54. {{ scope.row.total }}
  55. </span>
  56. </template>
  57. </el-table-column>
  58. </el-table>
  59. <el-form-item
  60. label="检票方式"
  61. class="warning">
  62. <span class="strong">
  63. {{ getCheckWayName(formData?formData.checkWay:'') }}
  64. </span>
  65. </el-form-item>
  66. <el-form-item
  67. label="总数"
  68. class="warning">
  69. <span class="strong">
  70. {{ totalCount }}
  71. </span>
  72. </el-form-item>
  73. <el-form-item
  74. label="总金额"
  75. class="warning">
  76. <span class="strong">
  77. {{ orderPrice }}
  78. </span> 元
  79. </el-form-item>
  80. <el-form-item
  81. label="付款方式"
  82. class="warning">
  83. <span class="strong">
  84. {{ currentPayChannel }}
  85. </span>
  86. </el-form-item>
  87. <br>
  88. <el-form-item
  89. label="下单备注">
  90. {{ createOrderRemark }}
  91. </el-form-item>
  92. </el-form>
  93. <div
  94. class="table-box"
  95. style="padding-top:0">
  96. <Collapse title="游客详情信息">
  97. <el-table
  98. stripe
  99. :data="tickets">
  100. <el-table-column
  101. type="index"
  102. width="50"
  103. >
  104. </el-table-column>
  105. <el-table-column
  106. prop="guestName"
  107. label="游客姓名"
  108. >
  109. </el-table-column>
  110. <el-table-column
  111. prop="guestPhone"
  112. label="游客电话"
  113. >
  114. </el-table-column>
  115. <el-table-column
  116. prop="guestIdentify"
  117. label="身份证"
  118. min-width="130"
  119. >
  120. </el-table-column>
  121. <el-table-column
  122. v-if="formData.checkWay===5"
  123. prop="ticketNo"
  124. label="票号"
  125. min-width="130"
  126. >
  127. </el-table-column>
  128. </el-table>
  129. </Collapse>
  130. </div>
  131. <div class="dialog-btn-wrap">
  132. 打印小票
  133. <el-switch
  134. style="margin:0 50px 0 10px"
  135. v-model="isPrintSmallTicket">
  136. </el-switch>
  137. 自动打印
  138. <el-switch
  139. style="margin:0 50px 0 10px"
  140. v-model="isPrint">
  141. </el-switch>
  142. <el-button @click="handleClose">
  143. 取消
  144. </el-button>
  145. <!-- <el-button
  146. type="warning"
  147. v-if="showRefresh"
  148. :disabled="isRefresh"
  149. @click="payRefresh">
  150. 刷新支付状态<span v-if="isRefresh">({{ countNum }})</span>
  151. </el-button> -->
  152. <el-button
  153. type="danger"
  154. v-if="scenicName==='狼山景区'||scenicName==='军山景区'"
  155. @click="$refs.queryPos.show()">
  156. 查询POS机交易
  157. </el-button>
  158. <el-button
  159. type="primary"
  160. :disabled="submitDisable"
  161. @click="submit()"
  162. >
  163. {{ submitDisable?'正在处理':'确认出票' }}
  164. </el-button>
  165. </div>
  166. <ReadValueCard
  167. ref="readValueCard"
  168. @getInfo="handleValueCardPay"
  169. @close="submitDisable=false"></ReadValueCard>
  170. <QueryPos
  171. ref="queryPos"
  172. @confirm="handleQueryPos"></QueryPos>
  173. <!-- GlobalComponents 全局组件 -->
  174. <PosQrCodeReader
  175. ref="posQrCodeReader"
  176. @getQrcode="submit"></PosQrCodeReader>
  177. <XSCQrCodeReader
  178. ref="XSCQrCodeReader"
  179. @getQrcode="submit"></XSCQrCodeReader>
  180. <ValueCardInput
  181. ref="ValueCardInput"
  182. @getMemberSystemId="submit"></ValueCardInput>
  183. <el-dialog
  184. title="请扫码支付"
  185. :visible.sync="payCodeDialogVisible"
  186. :close-on-click-modal="false"
  187. append-to-body
  188. width="50%">
  189. <el-input
  190. autofocus
  191. ref="payCodeInputRef"
  192. v-model="payCode"
  193. ></el-input>
  194. <div class="dialog-footer" style="margin-top: 10px;">
  195. <el-button @click="cancelOnlinePay">取消</el-button>
  196. <el-button type="primary" @click="submitOnlinePay">确定</el-button>
  197. </div>
  198. </el-dialog>
  199. </el-dialog>
  200. </template>
  201. <script>
  202. import mixin from './mixin'
  203. import posMixin from '@/pages/common/posMixin'
  204. import confirmMixin from '../common/confirmMixin'
  205. import moment from 'moment'
  206. export default {
  207. mixins: [mixin, posMixin, confirmMixin],
  208. data () {
  209. return {
  210. pageName: '散客售票'
  211. }
  212. },
  213. methods: {
  214. setParams () {
  215. let tickets = JSON.parse(JSON.stringify(this.tickets))
  216. let params = Object.assign({}, this.formData)
  217. params.playDateBegin = moment(this.formData.playDateBegin).format('YYYY-MM-DD')
  218. params.playDateEnd = moment(this.formData.playDateEnd).format('YYYY-MM-DD')
  219. // 一码多人,根据单张门票最大限额进行拆分
  220. if (params.checkWay - 0 === 2) {
  221. let allTickets = []
  222. this.orderInfo.forEach((item, index) => {
  223. let count = item.count
  224. let ticketOrderTravellers = item.tickets.map(i => {
  225. return {
  226. name: i.guestName,
  227. idType: i.guestIdentifyType,
  228. idNum: i.guestIdentify,
  229. mobile: i.guestPhone
  230. }
  231. })
  232. let obj = JSON.parse(JSON.stringify(item.tickets[0]))
  233. obj.ticketOrderTravellers = ticketOrderTravellers
  234. let originItem = JSON.stringify(obj)
  235. if (!this.maxNum) {
  236. let item = JSON.parse(originItem)
  237. item.checkNum = count
  238. item.price = this.$NP.times(item.checkNum, item.price)
  239. allTickets.push(item)
  240. return
  241. }
  242. if (count > this.maxNum) {
  243. let num = Math.ceil(count / this.maxNum)
  244. for (let i = 0; i < num - 1; i++) {
  245. let newItem = JSON.parse(originItem)
  246. newItem.checkNum = this.maxNum
  247. newItem.price = this.$NP.times(this.maxNum, item.price)
  248. allTickets.push(newItem)
  249. }
  250. let lastItem = JSON.parse(originItem)
  251. if (count % this.maxNum === 0) {
  252. lastItem.checkNum = this.maxNum
  253. } else {
  254. lastItem.checkNum = count % this.maxNum
  255. }
  256. lastItem.price = this.$NP.times(lastItem.checkNum, item.price)
  257. allTickets.push(lastItem)
  258. } else {
  259. let item = JSON.parse(originItem)
  260. item.checkNum = count
  261. item.price = this.$NP.times(item.checkNum, item.price)
  262. allTickets.push(item)
  263. }
  264. })
  265. console.log('allTickets', allTickets)
  266. params.tickets = allTickets
  267. } else {
  268. params.tickets = tickets
  269. }
  270. // params.count = this.totalCount
  271. params.payChannel = this.currentPayChannel
  272. params.price = this.orderPrice
  273. params.sellDevice = this.sellerDevice && this.sellerDevice.ip4
  274. this.params = params
  275. }
  276. }
  277. }
  278. </script>
  279. <style lang="scss" scoped>
  280. .btn-wrap {
  281. padding-top: 20px; text-align: center;
  282. }
  283. .info-wrap {
  284. padding: 20px 20px;
  285. ::v-deep .el-form-item__label{
  286. font-size: 16px;
  287. }
  288. ::v-deep .el-form-item{
  289. display: inline-block;
  290. }
  291. .strong {
  292. font-size: 1.8em; font-weight: bold;
  293. }
  294. }
  295. </style>
  296. <style lang="scss">
  297. </style>