salesQuery.vue 85 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277
  1. <template>
  2. <div class="form-wrap">
  3. <el-form
  4. class="search-box"
  5. ref="form"
  6. :model="form"
  7. :inline="true"
  8. label-width="100px"
  9. >
  10. <div class="block-title">
  11. 查询条件
  12. </div>
  13. <el-form-item
  14. label="下单时间"
  15. prop="createTime">
  16. <el-date-picker
  17. v-model="form.createTime"
  18. style="width:240px"
  19. type="daterange"
  20. format="yyyy-MM-dd"
  21. range-separator="至"
  22. start-placeholder="开始日期"
  23. end-placeholder="结束日期">
  24. </el-date-picker>
  25. </el-form-item>
  26. <el-form-item
  27. label="游玩时间"
  28. prop="playDate">
  29. <el-date-picker
  30. v-model="form.playDate"
  31. style="width:240px"
  32. type="daterange"
  33. format="yyyy-MM-dd"
  34. range-separator="至"
  35. start-placeholder="开始日期"
  36. end-placeholder="结束日期">
  37. </el-date-picker>
  38. </el-form-item>
  39. <el-form-item
  40. label="关键词"
  41. prop="searchKeywords"
  42. >
  43. <ReaderInput
  44. style="width:320px !important"
  45. v-model="form.searchKeywords"
  46. placeholder="订单号/票号/游客姓名/电话/证件号"
  47. clearable
  48. @change="form.searchKeywords=$event.IDNumber,form.name=$event.Name"
  49. @input="setSearchKeywords"
  50. ></ReaderInput>
  51. </el-form-item>
  52. <el-form-item
  53. label="合作方订单号"
  54. prop="partnerOrderNo"
  55. >
  56. <el-input
  57. v-model="form.partnerOrderNo"
  58. clearable></el-input>
  59. </el-form-item>
  60. <el-form-item
  61. label="票号"
  62. prop="ticketNo"
  63. >
  64. <el-input
  65. v-model="form.ticketNo"
  66. clearable></el-input>
  67. </el-form-item>
  68. <el-form-item
  69. label="支付方式"
  70. prop="payChannelList">
  71. <el-select
  72. v-model="form.payChannelList"
  73. multiple
  74. clearable
  75. filterable>
  76. <el-option
  77. v-for="item in payChannelOptions"
  78. :key="item"
  79. :label="item"
  80. :value="item">
  81. </el-option>
  82. </el-select>
  83. </el-form-item>
  84. <el-form-item
  85. label="销售来源"
  86. prop="otaSourceNameList">
  87. <el-select
  88. v-model="form.otaSourceNameList"
  89. multiple
  90. clearable
  91. filterable>
  92. <el-option
  93. v-for="item in otaSourceList"
  94. :key="item"
  95. :label="item"
  96. :value="item">
  97. </el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item
  101. label="订单状态"
  102. prop="orderStatus"
  103. >
  104. <el-select
  105. v-model="form.orderStatus"
  106. clearable
  107. placeholder="请选择"
  108. >
  109. <el-option
  110. label="全部"
  111. value=""></el-option>
  112. <el-option
  113. v-for="item in orderStatusDic"
  114. :key="item.value"
  115. :label="item.label"
  116. :value="item.value"
  117. >
  118. </el-option>
  119. </el-select>
  120. </el-form-item>
  121. <el-form-item
  122. label="门票状态"
  123. prop="ticketStatus"
  124. >
  125. <el-select
  126. v-model="form.ticketStatus"
  127. clearable
  128. placeholder="请选择"
  129. >
  130. <el-option
  131. label="全部"
  132. value=""></el-option>
  133. <el-option
  134. v-for="item in ticketStatusDic"
  135. :key="item.value"
  136. :label="item.label"
  137. :value="item.value"
  138. >
  139. </el-option>
  140. </el-select>
  141. </el-form-item>
  142. <el-form-item
  143. label="订单类型"
  144. prop="orderCategory"
  145. >
  146. <el-select
  147. v-model="form.orderCategory"
  148. placeholder="请选择"
  149. clearable
  150. filterable>
  151. <el-option
  152. v-for="item in orderCategories"
  153. :key="item.id"
  154. :value="item.id"
  155. :label="item.name">
  156. </el-option>
  157. </el-select>
  158. </el-form-item>
  159. <el-form-item
  160. label="票种"
  161. prop="ticketTypeIdList"
  162. >
  163. <el-select
  164. v-model="form.ticketTypeIdList"
  165. placeholder="请选择"
  166. multiple
  167. clearable
  168. filterable>
  169. <el-option
  170. v-for="item in ticketTypeList"
  171. :key="item.id"
  172. :value="item.id"
  173. :label="item.name">
  174. </el-option>
  175. </el-select>
  176. </el-form-item>
  177. <el-form-item
  178. label="景点"
  179. prop="scenicIdList"
  180. >
  181. <el-select
  182. v-model="form.scenicIdList"
  183. placeholder="请选择"
  184. multiple
  185. clearable
  186. filterable>
  187. <el-option
  188. v-for="(item, idx) in scenicList"
  189. :key="`scene-${idx}`"
  190. :label="item.name"
  191. :value="item.id"
  192. />
  193. </el-select>
  194. </el-form-item>
  195. <el-form-item
  196. label="售票员"
  197. prop="adminIdList"
  198. >
  199. <el-select
  200. v-model="form.adminIdList"
  201. multiple
  202. clearable
  203. placeholder="请选择"
  204. filterable>
  205. <el-option
  206. v-for="item in accountList"
  207. :key="item.id"
  208. :value="item.id"
  209. :label="item.loginName">
  210. </el-option>
  211. </el-select>
  212. </el-form-item>
  213. <el-form-item
  214. label="售卖自助机"
  215. prop="saleTermIdList"
  216. >
  217. <el-select
  218. v-model="form.saleTermIdList"
  219. multiple
  220. clearable
  221. placeholder="请选择"
  222. filterable>
  223. <el-option
  224. v-for="item in termList"
  225. :key="item.id"
  226. :value="item.id"
  227. :label="item.name">
  228. </el-option>
  229. </el-select>
  230. </el-form-item>
  231. <div class="btn-wrap">
  232. <el-button
  233. @click="reset"
  234. >
  235. 重置
  236. </el-button>
  237. <el-button
  238. :disabled="loading"
  239. type="primary"
  240. @click="getOrderList(true)"
  241. >
  242. 搜索
  243. </el-button>
  244. <el-dropdown @command="reportExport" style="margin-left: 10px;">
  245. <el-button type="primary">
  246. 导出<i class="el-icon-arrow-down el-icon--right"></i>
  247. </el-button>
  248. <el-dropdown-menu slot="dropdown">
  249. <el-dropdown-item command="order">订单级别</el-dropdown-item>
  250. <el-dropdown-item command="ticket">门票级别</el-dropdown-item>
  251. </el-dropdown-menu>
  252. </el-dropdown>
  253. <i class="el-icon-setting" style="cursor: pointer; margin-left: 10px;" title="设置显示列" @click="showColumnConfig" />
  254. </div>
  255. </el-form>
  256. <div class="table-box">
  257. <!-- <div class="block-title">
  258. 统计信息
  259. </div> -->
  260. <el-table
  261. stripe
  262. border
  263. v-loading="loading"
  264. :data="tableData">
  265. <el-table-column
  266. width="300"
  267. prop="orderNo"
  268. label="订单"
  269. fixed="left"
  270. >
  271. <template slot-scope="scope">
  272. <div
  273. class="order-info-item">
  274. <div class="label">
  275. 订单号:
  276. </div>
  277. <div class="value">
  278. {{ scope.row.orderNo }}
  279. </div>
  280. </div>
  281. <div
  282. class="order-info-item">
  283. <div class="label">
  284. 合作方订单号:
  285. </div>
  286. <div class="value">
  287. {{ scope.row.partnerOrderNo }}
  288. </div>
  289. </div>
  290. <!-- <el-tag
  291. type="primary"
  292. size="small"
  293. style="position: absolute; top: 0; right: 10px;"
  294. >
  295. {{ scope.row.firstTicketTypeName }}
  296. </el-tag> -->
  297. </template>
  298. </el-table-column>
  299. <el-table-column
  300. width="160"
  301. prop="firstTicketTypeName"
  302. show-overflow-tooltip
  303. label="票种"
  304. >
  305. </el-table-column>
  306. <!-- <el-table-column
  307. width="75"
  308. prop="orderCategory"
  309. label="订单类型"
  310. >
  311. <template slot-scope="scope">
  312. {{ scope.row.orderCategory | filterOrderCategory }}
  313. </template>
  314. </el-table-column> -->
  315. <el-table-column
  316. width="150"
  317. prop="isOnlineOrder"
  318. label="渠道"
  319. >
  320. <template slot-scope="scope">
  321. <div class="order-info-item">
  322. <div class="label">
  323. 销售来源:{{ scope.row.isOnlineOrder === 1 ? '线上' : '线下' }}
  324. </div>
  325. </div>
  326. <div
  327. class="order-info-item">
  328. <div class="label">
  329. 销售渠道:{{ scope.row.otaSourceName }}
  330. </div>
  331. </div>
  332. <div
  333. class="order-info-item">
  334. <div class="label">
  335. 支付渠道:{{ scope.row.payChannel }}
  336. </div>
  337. </div>
  338. </template>
  339. </el-table-column>
  340. <el-table-column
  341. label="支付状态"
  342. width="100"
  343. fixed="right"
  344. >
  345. <template slot-scope="scope">
  346. <el-tag
  347. :type="getPayStatus(scope.row.payStatus, 'type')"
  348. size="normal"
  349. >
  350. {{ getPayStatus(scope.row.payStatus) }}
  351. </el-tag>
  352. </template>
  353. </el-table-column>
  354. <!-- <el-table-column
  355. label="支付时间"
  356. width="140"
  357. prop="payTime">
  358. </el-table-column>
  359. <el-table-column
  360. label="票种"
  361. min-width="120">
  362. <template slot-scope="scope">
  363. <Ellipsis
  364. type="tooltip"
  365. :content="scope.row.ticketsName"
  366. :length="15"></Ellipsis>
  367. </template>
  368. </el-table-column> -->
  369. <el-table-column
  370. width="140"
  371. label="售票"
  372. >
  373. <template slot-scope="scope">
  374. <div>
  375. {{ scope.row.saleAdminName }}
  376. </div>
  377. <div>
  378. {{ scope.row.createTime | formatTime }}
  379. </div>
  380. </template>
  381. </el-table-column>
  382. <el-table-column
  383. width="160"
  384. label="购买方"
  385. >
  386. <template slot-scope="scope">
  387. <div>
  388. {{ scope.row.buyerName }}
  389. </div>
  390. <div>
  391. {{ scope.row.buyerPhone }}
  392. </div>
  393. <div>
  394. {{ scope.row.buyerIdentify }}
  395. </div>
  396. </template>
  397. </el-table-column>
  398. <!-- <el-table-column
  399. width="120"
  400. prop="buyerName"
  401. label="购买方名称"
  402. ></el-table-column>
  403. <el-table-column
  404. width="110"
  405. prop="buyerPhone"
  406. label="购买方手机">
  407. </el-table-column>
  408. <el-table-column
  409. width="140"
  410. prop="buyerIdentify"
  411. label="购买方证件号">
  412. </el-table-column> -->
  413. <el-table-column
  414. width="80"
  415. prop="ticketNum"
  416. label="所含票数"
  417. >
  418. </el-table-column>
  419. <!-- <el-table-column
  420. width="80"
  421. label="人数"
  422. >
  423. <template slot-scope="scope">
  424. {{ reduceCheckNum(scope.row.ticketList) }}
  425. </template>
  426. </el-table-column>
  427. <el-table-column
  428. width="80"
  429. label="游客信息"
  430. prop="guestName">
  431. </el-table-column>
  432. <el-table-column
  433. width="80"
  434. label="使用状态"
  435. prop="ticketStatus">
  436. </el-table-column> -->
  437. <el-table-column
  438. width="80"
  439. label="总价(¥)"
  440. >
  441. <template slot-scope="scope">
  442. {{ scope.row.price }}
  443. </template>
  444. </el-table-column>
  445. <el-table-column
  446. width="100"
  447. label="订单状态"
  448. fixed="right"
  449. >
  450. <template slot-scope="scope">
  451. <OrderStatusTag :value="scope.row.status"></OrderStatusTag>
  452. </template>
  453. </el-table-column>
  454. <el-table-column
  455. label="下单备注"
  456. show-overflow-tooltip
  457. prop="createOrderRemark">
  458. </el-table-column>
  459. <el-table-column
  460. label="操作"
  461. fixed="right"
  462. width="220"
  463. >
  464. <template slot-scope="scope">
  465. <el-link
  466. type="primary"
  467. @click="showOrderDetail(scope.row)">
  468. 详情
  469. </el-link>
  470. <el-link
  471. type="primary"
  472. v-if="hasPermission('order-update')"
  473. @click="editOrder(scope.row)">
  474. 修改
  475. </el-link>
  476. <el-link
  477. type="primary"
  478. v-if="hasPermission('manual-print')"
  479. @click="printOrder(scope.row)">
  480. 取票
  481. </el-link>
  482. <br>
  483. <el-link
  484. type="primary"
  485. v-if="hasPermission('manual-check')"
  486. @click="checkOrder(scope.row)">
  487. 核销
  488. </el-link>
  489. <el-link
  490. type="primary"
  491. v-if="hasPermission('manual-cancel')"
  492. @click="refundOrder(scope.row)">
  493. 退单
  494. </el-link>
  495. <el-link
  496. type="primary"
  497. v-if="hasPermission('manual-second-print')"
  498. @click="secondPrint(scope.row)">
  499. 补打
  500. </el-link>
  501. <!--
  502. <el-link
  503. type="primary"
  504. v-if="scope.row.tickets.some(v=>v.is_invoice_picked===0&&v.status==='USED')&&scope.row.otaSourceName!=='自营售票'"
  505. @click="showPickInvoice(scope.row)">
  506. 开票
  507. </el-link>
  508. -->
  509. <!-- <el-link
  510. type="primary"
  511. v-if="scenicName==='昭苏' && scope.row.ticketList.some(v=>v.is_invoice_picked===0&&v.status==='USED')&&scope.row.otaSourceName!=='自营售票'"
  512. @click="showPickInvoice(scope.row)">
  513. 开票
  514. </el-link>
  515. <el-link
  516. type="primary"
  517. v-if="scenicName!=='昭苏' && scope.row.ticketList.some(v=>v.is_invoice_picked===0&&v.status==='USED')"
  518. @click="showPickInvoice(scope.row)">
  519. 开票
  520. </el-link> -->
  521. </template>
  522. </el-table-column>
  523. </el-table>
  524. <el-pagination
  525. background
  526. :current-page.sync="form.pageNum"
  527. :page-sizes="[10, 20, 50, 100]"
  528. :page-size="form.pageSize"
  529. @size-change="handleSizeChange"
  530. @current-change="getOrderList()"
  531. layout="total, sizes, prev, pager, next, jumper"
  532. :total="total"
  533. >
  534. </el-pagination>
  535. </div>
  536. <OrderDetail ref="orderDetail"></OrderDetail>
  537. <el-dialog
  538. title="选择导出列"
  539. :visible.sync="dialogVisible"
  540. append-to-body>
  541. <div
  542. v-for="group in columnGroups"
  543. :key="group.name"
  544. style="margin-bottom: 12px;">
  545. <div style="font-weight: 600; margin-bottom: 6px;">
  546. {{ group.name }}
  547. </div>
  548. <el-checkbox-group v-model="tempSelectedFields">
  549. <el-checkbox
  550. v-for="field in group.fields"
  551. :key="field.key"
  552. :label="field.key">
  553. {{ field.label }}
  554. </el-checkbox>
  555. </el-checkbox-group>
  556. </div>
  557. <span
  558. slot="footer"
  559. class="dialog-footer">
  560. <el-button @click="dialogVisible = false">取 消</el-button>
  561. <el-button
  562. type="primary"
  563. @click="saveUserConfig">
  564. 确 定
  565. </el-button>
  566. </span>
  567. </el-dialog>
  568. <el-dialog
  569. title="开票"
  570. :visible.sync="visible"
  571. width="80%"
  572. @close="visible=false">
  573. <el-table
  574. ref="multipleTable"
  575. :data="currentOrder.ticketList"
  576. @selection-change="handleSelectionChange">
  577. <el-table-column
  578. type="selection"
  579. :selectable="selectable"
  580. width="55">
  581. </el-table-column>
  582. <el-table-column
  583. prop="ticketNo"
  584. label="票号"
  585. >
  586. </el-table-column>
  587. <el-table-column
  588. prop="ticketTypeName"
  589. label="票种"
  590. >
  591. </el-table-column>
  592. <el-table-column
  593. width="80"
  594. label="单价(¥)"
  595. >
  596. <template slot-scope="scope">
  597. {{ scope.row.checkNum ? scope.row.price/scope.row.checkNum : scope.row.price }}
  598. </template>
  599. </el-table-column>
  600. <el-table-column
  601. width="80"
  602. prop="price"
  603. label="小计"
  604. >
  605. </el-table-column>
  606. <el-table-column
  607. prop="guestIdentifyType"
  608. label="证件类型"
  609. >
  610. <template slot-scope="scope">
  611. {{ papersType[scope.row.guestIdentifyType] }}
  612. </template>
  613. </el-table-column>
  614. <el-table-column
  615. width="100"
  616. prop="checkNum"
  617. label="检票人数"
  618. >
  619. </el-table-column>
  620. <el-table-column
  621. width="100"
  622. prop="payDateBegin"
  623. label="游玩时间"
  624. >
  625. <template slot-scope="scope">
  626. {{ scope.row.playDateBegin || scope.row.playDateEnd ? `${scope.row.playDateBegin || ''} - ${scope.row.playDateEnd || ''}` : "无限制" }}
  627. </template>
  628. </el-table-column>
  629. <el-table-column
  630. width="80"
  631. label="取票状态"
  632. >
  633. <template slot-scope="scope">
  634. <el-tag :type="scope.row.isPrint?'success':'info'">
  635. {{ scope.row.isPrint?'已取票':'未取票' }}
  636. </el-tag>
  637. </template>
  638. </el-table-column>
  639. <el-table-column
  640. width="80"
  641. label="状态"
  642. >
  643. <template slot-scope="scope">
  644. <OrderStatusTag :value="scope.row.status"></OrderStatusTag>
  645. </template>
  646. </el-table-column>
  647. <el-table-column
  648. width="80"
  649. label="是否已开票"
  650. >
  651. <template slot-scope="scope">
  652. {{ scope.row.is_invoice_picked===1?'已开':'未开' }}
  653. </template>
  654. </el-table-column>
  655. </el-table>
  656. {{ formEl.invoiceType }}
  657. <el-form
  658. class="search-box"
  659. ref="formEl"
  660. :model="formEl"
  661. :inline="true"
  662. label-width="200px"
  663. style="background: transparent"
  664. >
  665. <!-- 九龙湖只能固定一种开票方式 -->
  666. <el-form-item
  667. v-if="['九龙湖','demo'].includes(scenicName)"
  668. label="开票方式"
  669. prop="invoiceType"
  670. >
  671. <!-- <el-radio
  672. v-if="false"
  673. v-model="formEl.invoiceType"
  674. :label="1">
  675. 扫码开票
  676. </el-radio> -->
  677. <el-radio
  678. v-model="formEl.invoiceType"
  679. :label="0">
  680. 普通开票
  681. </el-radio>
  682. </el-form-item>
  683. <el-form-item
  684. v-else
  685. verify
  686. label="开票方式"
  687. prop="invoiceType"
  688. >
  689. <el-radio
  690. v-model="formEl.invoiceType"
  691. :label="1">
  692. 扫码开票
  693. </el-radio>
  694. <el-radio
  695. v-model="formEl.invoiceType"
  696. :label="0">
  697. 普通开票
  698. </el-radio>
  699. </el-form-item>
  700. <el-form-item
  701. v-if="!formEl.invoiceType"
  702. verify
  703. label="购买方"
  704. prop="invoiceBuyer"
  705. >
  706. <el-input
  707. v-model="formEl.invoiceBuyer"
  708. style="width:100%"></el-input>
  709. </el-form-item>
  710. <el-form-item
  711. v-if="!formEl.invoiceType"
  712. label="纳税⼈识别号"
  713. prop="invoiceBuyerTaxNum"
  714. :rules="rules.invoiceBuyerTaxNum"
  715. >
  716. <el-input
  717. v-model="formEl.invoiceBuyerTaxNum"
  718. style="width:100%"></el-input>
  719. </el-form-item>
  720. <el-form-item
  721. v-if="!formEl.invoiceType"
  722. label="纳税⼈邮箱"
  723. prop="invoiceBuyerEmail"
  724. :rules="[
  725. { required: false, message: '请输入邮箱', trigger: 'blur' },
  726. { type: 'email', message: '邮箱格式不正确', trigger: 'blur' }
  727. ]"
  728. >
  729. <el-input
  730. v-model="formEl.invoiceBuyerEmail"
  731. style="width:100%"></el-input>
  732. </el-form-item>
  733. <el-form-item
  734. v-if="!formEl.invoiceType"
  735. label="纳税⼈手机号"
  736. prop="invoiceBuyerPhone"
  737. :rules="[
  738. { required: false, message: '请输入手机号', trigger: 'blur' },
  739. { pattern: /^1[3456789]\d{9}$/, message: '手机号格式不正确', trigger: 'blur' }
  740. ]"
  741. >
  742. <el-input
  743. v-model="formEl.invoiceBuyerPhone"
  744. style="width:100%"></el-input>
  745. </el-form-item>
  746. <el-form-item
  747. v-if="!formEl.invoiceType"
  748. label="购买方地址"
  749. prop="invoiceBuyerAddress"
  750. >
  751. <el-input
  752. v-model="formEl.invoiceBuyerAddress"
  753. style="width:100%"></el-input>
  754. </el-form-item>
  755. <el-form-item
  756. v-if="!formEl.invoiceType"
  757. label="购买方银行开户行及账号"
  758. prop="invoiceBuyerBankAccount"
  759. >
  760. <el-input
  761. v-model="formEl.invoiceBuyerBankAccount"
  762. style="width:100%"></el-input>
  763. </el-form-item>
  764. <el-form-item
  765. v-if="!formEl.invoiceType"
  766. label="备注"
  767. prop="remark"
  768. >
  769. <el-input
  770. v-model="formEl.remark"
  771. style="width:100%"></el-input>
  772. </el-form-item>
  773. </el-form>
  774. <span slot="footer">
  775. <el-button @click="visible = false">取消</el-button>
  776. <el-button
  777. type="primary"
  778. @click="submitPickInvoice">确定</el-button>
  779. </span>
  780. </el-dialog>
  781. <el-dialog
  782. title="核销"
  783. :visible.sync="checkOrderDialogVisible"
  784. width="80%"
  785. @close="checkOrderDialogVisible=false;ticketNoSearch=''">
  786. <div
  787. class="search-area"
  788. style="margin: 20px;display: flex;align-items: center;justify-content: space-between;">
  789. <el-checkbox
  790. v-if="hasPermission('manual-force-check')"
  791. label="强制核销"
  792. v-model="checkOrderInfo.force"></el-checkbox>
  793. <div class="name">
  794. <span style="margin-right: 10px;">票号搜索</span>
  795. <el-input v-model="ticketNoSearch"></el-input>
  796. </div>
  797. </div>
  798. <el-table
  799. border
  800. :data="(currentOrder.ticketList || []).filter(v => v.ticketNo.includes(ticketNoSearch))"
  801. @selection-change="handleSelectionChange">
  802. <el-table-column
  803. type="selection"
  804. fixed
  805. :selectable="selectable"
  806. width="55">
  807. </el-table-column>
  808. <el-table-column type="expand">
  809. <template slot-scope="props">
  810. <div class="title">检票景点</div>
  811. <el-table :data="props.row.ticketCheckScenicList" :max-height="200">
  812. <el-table-column
  813. prop="scenicName"
  814. label="景点"
  815. ></el-table-column>
  816. <el-table-column
  817. prop="checkLimitTimes"
  818. label="可检票次数"
  819. >
  820. <template slot-scope="scope">
  821. {{ scope.row.checkLimitTimes === -1 ? "无限制" : scope.row.checkLimitTimes }}
  822. </template>
  823. </el-table-column>
  824. <el-table-column
  825. prop="checkedTimes"
  826. label="已检票次数"
  827. ></el-table-column>
  828. <el-table-column
  829. prop="singleDayLimitTimes"
  830. label="单日可检票次数"
  831. ></el-table-column>
  832. </el-table>
  833. </template>
  834. </el-table-column>
  835. <el-table-column width="160" prop="ticketNo" label="票号"> </el-table-column>
  836. <el-table-column width="100" prop="ticketTypeName" label="票种"> </el-table-column>
  837. <el-table-column width="80" prop="price" label="单价(¥)">
  838. <template slot-scope="scope">
  839. {{ scope.row.checkNum ? scope.row.price / scope.row.checkNum : scope.row.price }}
  840. </template>
  841. </el-table-column>
  842. <el-table-column width="80" prop="price" label="小计"></el-table-column>
  843. <el-table-column width="100" prop="status" label="状态">
  844. <template slot-scope="scope">
  845. <TicketStatusTag :value="scope.row.status"></TicketStatusTag>
  846. </template>
  847. </el-table-column>
  848. <el-table-column width="210" prop="guestInfo" label="游客信息">
  849. <template slot-scope="scope">
  850. <div class=""><span>姓名:</span>{{ scope.row.guestName }}</div>
  851. <div class=""><span>手机号:</span>{{ scope.row.guestPhone }}</div>
  852. <div class=""><span>证件类型:</span>{{ papersType[scope.row.guestIdentifyType] }}</div>
  853. <div class=""><span>证件号码:</span>{{ scope.row.guestIdentify }}</div>
  854. </template>
  855. </el-table-column>
  856. <el-table-column width="260" prop="ticketCheckInfo" label="检票信息">
  857. <template slot-scope="scope">
  858. <div class=""><span>检票人数:</span>{{ scope.row.checkNum }}</div>
  859. <div class=""><span>首次检票时间:</span>{{ scope.row.firstCheckTime }}</div>
  860. <div class=""><span>最近一次检票时间:</span>{{ scope.row.checkTime }}</div>
  861. <div class=""><span>最近一次检票设备:</span>{{ scope.row.checkerName }}</div>
  862. </template>
  863. </el-table-column>
  864. <el-table-column width="260" prop="ticketPrintInfo" label="取票信息">
  865. <template slot-scope="scope">
  866. <div class=""><span>取票状态:</span>
  867. <el-tag :type="scope.row.isPrint ? 'success' : 'info'">
  868. {{ scope.row.isPrint ? "已取票" : "未取票" }}
  869. </el-tag>
  870. </div>
  871. <div class=""><span>取票时间:</span>{{ scope.row.printTime }}</div>
  872. <div class=""><span>取票人:</span>{{ scope.row.printAdminName }}</div>
  873. <div class=""><span>取票自助机:</span>{{ scope.row.printTermName }}</div>
  874. </template>
  875. </el-table-column>
  876. <el-table-column width="260" prop="ticketRefundInfo" label="退票信息">
  877. <template slot-scope="scope">
  878. <div class=""><span>退款操作人:</span>{{ scope.row.cancelAdminName }}</div>
  879. <div class=""><span>退款金额:</span>{{ scope.row.cancelPrice }}</div>
  880. <div class=""><span>退款申请时间:</span>{{ scope.row.cancelSubmitTime }}</div>
  881. <div class=""><span>退款完成时间:</span>{{ scope.row.cancelCompleteTime }}</div>
  882. <div class=""><span>是否强制取消:</span>{{ scope.row.isForceCancel ? '是' : '否' }}</div>
  883. </template>
  884. </el-table-column>
  885. <el-table-column width="160" prop="playDateBegin" label="游玩时间">
  886. <template slot-scope="scope">
  887. <div v-if="scope.row.batchConfigName"><span>场次:</span>{{ scope.row.batchConfigName || '' }}</div>
  888. {{ scope.row.playDateBegin || scope.row.playDateEnd ? `${scope.row.playDateBegin || ''} - ${scope.row.playDateEnd || ''}` : "无限制" }}
  889. </template>
  890. </el-table-column>
  891. <el-table-column min-width="180" label="检票景点">
  892. <template slot-scope="scope">
  893. {{ scope.row.ticketCheckScenicList.map(item => item.scenicName).join(',') }}
  894. </template>
  895. </el-table-column>
  896. <el-table-column width="240" prop="ticketCardInfo" label="卡信息">
  897. <template slot-scope="scope" v-if="scope.row.card">
  898. <div class=""><span>卡片编号:</span>{{ scope.row.card.cardNo }}</div>
  899. <div class=""><span>有效时间:</span>{{ scope.row.card.validDateStart }} - {{ scope.row.card.validDateEnd }}</div>
  900. <div class=""><span>卡片状态:</span>{{ scope.row.card.status | filterCardStatus }}</div>
  901. <div class="" v-if="scope.row.card.status === 1"><span>开卡时间:</span>{{ scope.row.card.activeTime }}</div>
  902. <div class="" v-if="scope.row.card.status === 0"><span>退卡时间:</span>{{ scope.row.card.cardNo }}</div>
  903. <div class="" v-if="scope.row.card.status === 2"><span>挂失时间:</span>{{ scope.row.card.repealTime }}</div>
  904. </template>
  905. </el-table-column>
  906. <el-table-column width="240" prop="ticketFaceInfo" label="人脸信息">
  907. <template slot-scope="scope" v-if="scope.row.face">
  908. <div class=""><span>有效时间:</span>{{ scope.row.face.validDateStart }} - {{ scope.row.face.validDateEnd }}</div>
  909. <div class=""><span>卡片状态:</span>{{ scope.row.face.status === 0 ? '可用' : '不可用' }}</div>
  910. <div class=""><span>图片地址:</span>{{ scope.row.face.imageUrl }}</div>
  911. <div class=""><span>base64:</span>{{ scope.row.face.faceData }}</div>
  912. <div class=""><span>注册状态:</span>{{ scope.row.face.registerStatus === 0 ? '未注册' : '已注册' }}</div>
  913. </template>
  914. </el-table-column>
  915. </el-table>
  916. <span slot="footer">
  917. <el-button @click="checkOrderDialogVisible = false">取消</el-button>
  918. <el-button
  919. type="primary"
  920. @click="submitCheckOrder">确定</el-button>
  921. </span>
  922. </el-dialog>
  923. <el-dialog
  924. title="退单"
  925. :visible.sync="refundOrderDialogVisible"
  926. width="80%"
  927. @close="refundOrderDialogVisible=false;ticketNoSearch=''">
  928. <div
  929. class="search-area"
  930. style="margin: 20px;display: flex;align-items: center;justify-content: space-between;">
  931. <el-checkbox
  932. v-if="hasPermission('manual-force-cancel')"
  933. label="强制退单"
  934. v-model="refundOrderInfo.force"></el-checkbox>
  935. <div class="name">
  936. <span style="margin-right: 10px;">票号搜索</span>
  937. <el-input v-model="ticketNoSearch"></el-input>
  938. </div>
  939. </div>
  940. <!-- <div class="">
  941. <div class="tag">退票金额</div>
  942. <el-input-number
  943. v-model="refundOrderInfo.cancelPrice"
  944. :min="0"
  945. :precision="0.01"></el-input-number>
  946. </div> -->
  947. <el-table
  948. border
  949. :data="(currentOrder.ticketList || []).filter(v => v.ticketNo.includes(ticketNoSearch))"
  950. @selection-change="handleSelectionChange">
  951. <el-table-column
  952. type="selection"
  953. fixed
  954. :selectable="selectable"
  955. width="55">
  956. </el-table-column>
  957. <el-table-column type="expand">
  958. <template slot-scope="props">
  959. <div class="title">检票景点</div>
  960. <el-table :data="props.row.ticketCheckScenicList" :max-height="200">
  961. <el-table-column
  962. prop="scenicName"
  963. label="景点"
  964. ></el-table-column>
  965. <el-table-column
  966. prop="checkLimitTimes"
  967. label="可检票次数"
  968. >
  969. <template slot-scope="scope">
  970. {{ scope.row.checkLimitTimes === -1 ? "无限制" : scope.row.checkLimitTimes }}
  971. </template>
  972. </el-table-column>
  973. <el-table-column
  974. prop="checkedTimes"
  975. label="已检票次数"
  976. ></el-table-column>
  977. <el-table-column
  978. prop="singleDayLimitTimes"
  979. label="单日可检票次数"
  980. ></el-table-column>
  981. </el-table>
  982. </template>
  983. </el-table-column>
  984. <el-table-column width="160" prop="ticketNo" label="票号"> </el-table-column>
  985. <el-table-column width="100" prop="ticketTypeName" label="票种"> </el-table-column>
  986. <el-table-column width="80" prop="price" label="单价(¥)">
  987. <template slot-scope="scope">
  988. {{ scope.row.checkNum ? scope.row.price / scope.row.checkNum : scope.row.price }}
  989. </template>
  990. </el-table-column>
  991. <el-table-column width="80" prop="price" label="小计"></el-table-column>
  992. <el-table-column width="100" prop="status" label="状态">
  993. <template slot-scope="scope">
  994. <TicketStatusTag :value="scope.row.status"></TicketStatusTag>
  995. </template>
  996. </el-table-column>
  997. <el-table-column width="210" prop="guestInfo" label="游客信息">
  998. <template slot-scope="scope">
  999. <div class=""><span>姓名:</span>{{ scope.row.guestName }}</div>
  1000. <div class=""><span>手机号:</span>{{ scope.row.guestPhone }}</div>
  1001. <div class=""><span>证件类型:</span>{{ papersType[scope.row.guestIdentifyType] }}</div>
  1002. <div class=""><span>证件号码:</span>{{ scope.row.guestIdentify }}</div>
  1003. </template>
  1004. </el-table-column>
  1005. <el-table-column width="260" prop="ticketCheckInfo" label="检票信息">
  1006. <template slot-scope="scope">
  1007. <div class=""><span>检票人数:</span>{{ scope.row.checkNum }}</div>
  1008. <div class=""><span>首次检票时间:</span>{{ scope.row.firstCheckTime }}</div>
  1009. <div class=""><span>最近一次检票时间:</span>{{ scope.row.checkTime }}</div>
  1010. <div class=""><span>最近一次检票设备:</span>{{ scope.row.checkerName }}</div>
  1011. </template>
  1012. </el-table-column>
  1013. <el-table-column width="260" prop="ticketPrintInfo" label="取票信息">
  1014. <template slot-scope="scope">
  1015. <div class=""><span>取票状态:</span>
  1016. <el-tag :type="scope.row.isPrint ? 'success' : 'info'">
  1017. {{ scope.row.isPrint ? "已取票" : "未取票" }}
  1018. </el-tag>
  1019. </div>
  1020. <div class=""><span>取票时间:</span>{{ scope.row.printTime }}</div>
  1021. <div class=""><span>取票人:</span>{{ scope.row.printAdminName }}</div>
  1022. <div class=""><span>取票自助机:</span>{{ scope.row.printTermName }}</div>
  1023. </template>
  1024. </el-table-column>
  1025. <el-table-column width="260" prop="ticketRefundInfo" label="退票信息">
  1026. <template slot-scope="scope">
  1027. <div class=""><span>退款操作人:</span>{{ scope.row.cancelAdminName }}</div>
  1028. <div class=""><span>退款金额:</span>{{ scope.row.cancelPrice }}</div>
  1029. <div class=""><span>退款申请时间:</span>{{ scope.row.cancelSubmitTime }}</div>
  1030. <div class=""><span>退款完成时间:</span>{{ scope.row.cancelCompleteTime }}</div>
  1031. <div class=""><span>是否强制取消:</span>{{ scope.row.isForceCancel ? '是' : '否' }}</div>
  1032. </template>
  1033. </el-table-column>
  1034. <el-table-column width="160" prop="playDateBegin" label="游玩时间">
  1035. <template slot-scope="scope">
  1036. <div v-if="scope.row.batchConfigName"><span>场次:</span>{{ scope.row.batchConfigName || '' }}</div>
  1037. {{ scope.row.playDateBegin || scope.row.playDateEnd ? `${scope.row.playDateBegin || ''} - ${scope.row.playDateEnd || ''}` : "无限制" }}
  1038. </template>
  1039. </el-table-column>
  1040. <el-table-column min-width="180" label="检票景点">
  1041. <template slot-scope="scope">
  1042. {{ scope.row.ticketCheckScenicList.map(item => item.scenicName).join(',') }}
  1043. </template>
  1044. </el-table-column>
  1045. <el-table-column width="240" prop="ticketCardInfo" label="卡信息">
  1046. <template slot-scope="scope" v-if="scope.row.card">
  1047. <div class=""><span>卡片编号:</span>{{ scope.row.card.cardNo }}</div>
  1048. <div class=""><span>有效时间:</span>{{ scope.row.card.validDateStart }} - {{ scope.row.card.validDateEnd }}</div>
  1049. <div class=""><span>卡片状态:</span>{{ scope.row.card.status | filterCardStatus }}</div>
  1050. <div class="" v-if="scope.row.card.status === 1"><span>开卡时间:</span>{{ scope.row.card.activeTime }}</div>
  1051. <div class="" v-if="scope.row.card.status === 0"><span>退卡时间:</span>{{ scope.row.card.cardNo }}</div>
  1052. <div class="" v-if="scope.row.card.status === 2"><span>挂失时间:</span>{{ scope.row.card.repealTime }}</div>
  1053. </template>
  1054. </el-table-column>
  1055. <el-table-column width="240" prop="ticketFaceInfo" label="人脸信息">
  1056. <template slot-scope="scope" v-if="scope.row.face">
  1057. <div class=""><span>有效时间:</span>{{ scope.row.face.validDateStart }} - {{ scope.row.face.validDateEnd }}</div>
  1058. <div class=""><span>卡片状态:</span>{{ scope.row.face.status === 0 ? '可用' : '不可用' }}</div>
  1059. <div class=""><span>图片地址:</span>{{ scope.row.face.imageUrl }}</div>
  1060. <div class=""><span>base64:</span>{{ scope.row.face.faceData }}</div>
  1061. <div class=""><span>注册状态:</span>{{ scope.row.face.registerStatus === 0 ? '未注册' : '已注册' }}</div>
  1062. </template>
  1063. </el-table-column>
  1064. </el-table>
  1065. <span slot="footer">
  1066. <el-button @click="refundOrderDialogVisible = false">取消</el-button>
  1067. <el-button
  1068. type="primary"
  1069. @click="submitRefundOrder">确定</el-button>
  1070. </span>
  1071. </el-dialog>
  1072. <el-dialog
  1073. title="补打"
  1074. :visible.sync="secondPrintDialogVisible"
  1075. width="80%"
  1076. @close="secondPrintDialogVisible=false;ticketNoSearch=''">
  1077. <!-- <div class="">
  1078. <div class="tag">退票金额</div>
  1079. <el-input-number
  1080. v-model="refundOrderInfo.cancelPrice"
  1081. :min="0"
  1082. :precision="0.01"></el-input-number>
  1083. </div> -->
  1084. <div
  1085. class="search-area"
  1086. style="margin: 20px;display: flex;align-items: center;">
  1087. <div class="name" style="margin-right: 10px;">票号搜索</div>
  1088. <el-input v-model="ticketNoSearch"></el-input>
  1089. </div>
  1090. <el-table
  1091. border
  1092. :data="(currentOrder.ticketList || []).filter(v => v.ticketNo.includes(ticketNoSearch))"
  1093. @selection-change="handleSelectionChange">
  1094. <el-table-column
  1095. type="selection"
  1096. fixed
  1097. :selectable="selectable"
  1098. width="55">
  1099. </el-table-column>
  1100. <el-table-column type="expand">
  1101. <template slot-scope="props">
  1102. <div class="title">检票景点</div>
  1103. <el-table :data="props.row.ticketCheckScenicList" :max-height="200">
  1104. <el-table-column
  1105. prop="scenicName"
  1106. label="景点"
  1107. ></el-table-column>
  1108. <el-table-column
  1109. prop="checkLimitTimes"
  1110. label="可检票次数"
  1111. >
  1112. <template slot-scope="scope">
  1113. {{ scope.row.checkLimitTimes === -1 ? "无限制" : scope.row.checkLimitTimes }}
  1114. </template>
  1115. </el-table-column>
  1116. <el-table-column
  1117. prop="checkedTimes"
  1118. label="已检票次数"
  1119. ></el-table-column>
  1120. <el-table-column
  1121. prop="singleDayLimitTimes"
  1122. label="单日可检票次数"
  1123. ></el-table-column>
  1124. </el-table>
  1125. </template>
  1126. </el-table-column>
  1127. <el-table-column width="160" prop="ticketNo" label="票号"> </el-table-column>
  1128. <el-table-column width="100" prop="ticketTypeName" label="票种"> </el-table-column>
  1129. <el-table-column width="80" prop="price" label="单价(¥)">
  1130. <template slot-scope="scope">
  1131. {{ scope.row.checkNum ? scope.row.price / scope.row.checkNum : scope.row.price }}
  1132. </template>
  1133. </el-table-column>
  1134. <el-table-column width="80" prop="price" label="小计"></el-table-column>
  1135. <el-table-column width="100" prop="status" label="状态">
  1136. <template slot-scope="scope">
  1137. <TicketStatusTag :value="scope.row.status"></TicketStatusTag>
  1138. </template>
  1139. </el-table-column>
  1140. <el-table-column width="210" prop="guestInfo" label="游客信息">
  1141. <template slot-scope="scope">
  1142. <div class=""><span>姓名:</span>{{ scope.row.guestName }}</div>
  1143. <div class=""><span>手机号:</span>{{ scope.row.guestPhone }}</div>
  1144. <div class=""><span>证件类型:</span>{{ papersType[scope.row.guestIdentifyType] }}</div>
  1145. <div class=""><span>证件号码:</span>{{ scope.row.guestIdentify }}</div>
  1146. </template>
  1147. </el-table-column>
  1148. <el-table-column width="260" prop="ticketCheckInfo" label="检票信息">
  1149. <template slot-scope="scope">
  1150. <div class=""><span>检票人数:</span>{{ scope.row.checkNum }}</div>
  1151. <div class=""><span>首次检票时间:</span>{{ scope.row.firstCheckTime }}</div>
  1152. <div class=""><span>最近一次检票时间:</span>{{ scope.row.checkTime }}</div>
  1153. <div class=""><span>最近一次检票设备:</span>{{ scope.row.checkerName }}</div>
  1154. </template>
  1155. </el-table-column>
  1156. <el-table-column width="260" prop="ticketPrintInfo" label="取票信息">
  1157. <template slot-scope="scope">
  1158. <div class=""><span>取票状态:</span>
  1159. <el-tag :type="scope.row.isPrint ? 'success' : 'info'">
  1160. {{ scope.row.isPrint ? "已取票" : "未取票" }}
  1161. </el-tag>
  1162. </div>
  1163. <div class=""><span>取票时间:</span>{{ scope.row.printTime }}</div>
  1164. <div class=""><span>取票人:</span>{{ scope.row.printAdminName }}</div>
  1165. <div class=""><span>取票自助机:</span>{{ scope.row.printTermName }}</div>
  1166. </template>
  1167. </el-table-column>
  1168. <el-table-column width="260" prop="ticketRefundInfo" label="退票信息">
  1169. <template slot-scope="scope">
  1170. <div class=""><span>退款操作人:</span>{{ scope.row.cancelAdminName }}</div>
  1171. <div class=""><span>退款金额:</span>{{ scope.row.cancelPrice }}</div>
  1172. <div class=""><span>退款申请时间:</span>{{ scope.row.cancelSubmitTime }}</div>
  1173. <div class=""><span>退款完成时间:</span>{{ scope.row.cancelCompleteTime }}</div>
  1174. <div class=""><span>是否强制取消:</span>{{ scope.row.isForceCancel ? '是' : '否' }}</div>
  1175. </template>
  1176. </el-table-column>
  1177. <el-table-column width="160" prop="playDateBegin" label="游玩时间">
  1178. <template slot-scope="scope">
  1179. <div v-if="scope.row.batchConfigName"><span>场次:</span>{{ scope.row.batchConfigName || '' }}</div>
  1180. {{ scope.row.playDateBegin || scope.row.playDateEnd ? `${scope.row.playDateBegin || ''} - ${scope.row.playDateEnd || ''}` : "无限制" }}
  1181. </template>
  1182. </el-table-column>
  1183. <el-table-column min-width="180" label="检票景点">
  1184. <template slot-scope="scope">
  1185. {{ scope.row.ticketCheckScenicList.map(item => item.scenicName).join(',') }}
  1186. </template>
  1187. </el-table-column>
  1188. <el-table-column width="240" prop="ticketCardInfo" label="卡信息">
  1189. <template slot-scope="scope" v-if="scope.row.card">
  1190. <div class=""><span>卡片编号:</span>{{ scope.row.card.cardNo }}</div>
  1191. <div class=""><span>有效时间:</span>{{ scope.row.card.validDateStart }} - {{ scope.row.card.validDateEnd }}</div>
  1192. <div class=""><span>卡片状态:</span>{{ scope.row.card.status | filterCardStatus }}</div>
  1193. <div class="" v-if="scope.row.card.status === 1"><span>开卡时间:</span>{{ scope.row.card.activeTime }}</div>
  1194. <div class="" v-if="scope.row.card.status === 0"><span>退卡时间:</span>{{ scope.row.card.cardNo }}</div>
  1195. <div class="" v-if="scope.row.card.status === 2"><span>挂失时间:</span>{{ scope.row.card.repealTime }}</div>
  1196. </template>
  1197. </el-table-column>
  1198. <el-table-column width="240" prop="ticketFaceInfo" label="人脸信息">
  1199. <template slot-scope="scope" v-if="scope.row.face">
  1200. <div class=""><span>有效时间:</span>{{ scope.row.face.validDateStart }} - {{ scope.row.face.validDateEnd }}</div>
  1201. <div class=""><span>卡片状态:</span>{{ scope.row.face.status === 0 ? '可用' : '不可用' }}</div>
  1202. <div class=""><span>图片地址:</span>{{ scope.row.face.imageUrl }}</div>
  1203. <div class=""><span>base64:</span>{{ scope.row.face.faceData }}</div>
  1204. <div class=""><span>注册状态:</span>{{ scope.row.face.registerStatus === 0 ? '未注册' : '已注册' }}</div>
  1205. </template>
  1206. </el-table-column>
  1207. <el-table-column width="80" label="操作">
  1208. <template slot-scope="scope">
  1209. <el-button type="primary" @click="printSingleTicket(scope.row)">
  1210. 打印
  1211. </el-button>
  1212. </template>
  1213. </el-table-column>
  1214. </el-table>
  1215. <div
  1216. class="opt-area"
  1217. style="margin-top: 20px;width: 100%;text-align: center;">
  1218. <el-button
  1219. type="primary"
  1220. @click="submitSecondPrint">
  1221. 全部打印
  1222. </el-button>
  1223. <el-button
  1224. type="primary"
  1225. @click="submitSecondPrint">
  1226. 打印小票
  1227. </el-button>
  1228. </div>
  1229. <span slot="footer">
  1230. <el-button @click="secondPrintDialogVisible = false">取消</el-button>
  1231. </span>
  1232. </el-dialog>
  1233. <el-dialog
  1234. title="取票"
  1235. :visible.sync="printOrderDialogVisible"
  1236. width="80%"
  1237. @close="printOrderDialogVisible=false;ticketNoSearch=''">
  1238. <div
  1239. class="search-area"
  1240. style="margin: 20px;display: flex;align-items: center;">
  1241. <div class="name" style="margin-right: 10px;">票号搜索</div>
  1242. <el-input v-model="ticketNoSearch"></el-input>
  1243. </div>
  1244. <el-table
  1245. border
  1246. :data="(currentOrder.ticketList || []).filter(v => v.ticketNo.includes(ticketNoSearch))"
  1247. @selection-change="handleSelectionChange">
  1248. <el-table-column
  1249. type="selection"
  1250. fixed
  1251. :selectable="selectable"
  1252. width="55">
  1253. </el-table-column>
  1254. <el-table-column type="expand">
  1255. <template slot-scope="props">
  1256. <div class="title">检票景点</div>
  1257. <el-table :data="props.row.ticketCheckScenicList" :max-height="200">
  1258. <el-table-column
  1259. prop="scenicName"
  1260. label="景点"
  1261. ></el-table-column>
  1262. <el-table-column
  1263. prop="checkLimitTimes"
  1264. label="可检票次数"
  1265. >
  1266. <template slot-scope="scope">
  1267. {{ scope.row.checkLimitTimes === -1 ? "无限制" : scope.row.checkLimitTimes }}
  1268. </template>
  1269. </el-table-column>
  1270. <el-table-column
  1271. prop="checkedTimes"
  1272. label="已检票次数"
  1273. ></el-table-column>
  1274. <el-table-column
  1275. prop="singleDayLimitTimes"
  1276. label="单日可检票次数"
  1277. ></el-table-column>
  1278. </el-table>
  1279. </template>
  1280. </el-table-column>
  1281. <el-table-column width="160" prop="ticketNo" label="票号"> </el-table-column>
  1282. <el-table-column width="100" prop="ticketTypeName" label="票种"> </el-table-column>
  1283. <el-table-column width="80" prop="price" label="单价(¥)">
  1284. <template slot-scope="scope">
  1285. {{ scope.row.checkNum ? scope.row.price / scope.row.checkNum : scope.row.price }}
  1286. </template>
  1287. </el-table-column>
  1288. <el-table-column width="80" prop="price" label="小计"></el-table-column>
  1289. <el-table-column width="100" prop="status" label="状态">
  1290. <template slot-scope="scope">
  1291. <TicketStatusTag :value="scope.row.status"></TicketStatusTag>
  1292. </template>
  1293. </el-table-column>
  1294. <el-table-column width="210" prop="guestInfo" label="游客信息">
  1295. <template slot-scope="scope">
  1296. <div class=""><span>姓名:</span>{{ scope.row.guestName }}</div>
  1297. <div class=""><span>手机号:</span>{{ scope.row.guestPhone }}</div>
  1298. <div class=""><span>证件类型:</span>{{ papersType[scope.row.guestIdentifyType] }}</div>
  1299. <div class=""><span>证件号码:</span>{{ scope.row.guestIdentify }}</div>
  1300. </template>
  1301. </el-table-column>
  1302. <el-table-column width="260" prop="ticketCheckInfo" label="检票信息">
  1303. <template slot-scope="scope">
  1304. <div class=""><span>检票人数:</span>{{ scope.row.checkNum }}</div>
  1305. <div class=""><span>首次检票时间:</span>{{ scope.row.firstCheckTime }}</div>
  1306. <div class=""><span>最近一次检票时间:</span>{{ scope.row.checkTime }}</div>
  1307. <div class=""><span>最近一次检票设备:</span>{{ scope.row.checkerName }}</div>
  1308. </template>
  1309. </el-table-column>
  1310. <el-table-column width="260" prop="ticketPrintInfo" label="取票信息">
  1311. <template slot-scope="scope">
  1312. <div class=""><span>取票状态:</span>
  1313. <el-tag :type="scope.row.isPrint ? 'success' : 'info'">
  1314. {{ scope.row.isPrint ? "已取票" : "未取票" }}
  1315. </el-tag>
  1316. </div>
  1317. <div class=""><span>取票时间:</span>{{ scope.row.printTime }}</div>
  1318. <div class=""><span>取票人:</span>{{ scope.row.printAdminName }}</div>
  1319. <div class=""><span>取票自助机:</span>{{ scope.row.printTermName }}</div>
  1320. </template>
  1321. </el-table-column>
  1322. <el-table-column width="260" prop="ticketRefundInfo" label="退票信息">
  1323. <template slot-scope="scope">
  1324. <div class=""><span>退款操作人:</span>{{ scope.row.cancelAdminName }}</div>
  1325. <div class=""><span>退款金额:</span>{{ scope.row.cancelPrice }}</div>
  1326. <div class=""><span>退款申请时间:</span>{{ scope.row.cancelSubmitTime }}</div>
  1327. <div class=""><span>退款完成时间:</span>{{ scope.row.cancelCompleteTime }}</div>
  1328. <div class=""><span>是否强制取消:</span>{{ scope.row.isForceCancel ? '是' : '否' }}</div>
  1329. </template>
  1330. </el-table-column>
  1331. <el-table-column width="160" prop="playDateBegin" label="游玩时间">
  1332. <template slot-scope="scope">
  1333. <div v-if="scope.row.batchConfigName"><span>场次:</span>{{ scope.row.batchConfigName || '' }}</div>
  1334. {{ scope.row.playDateBegin || scope.row.playDateEnd ? `${scope.row.playDateBegin || ''} - ${scope.row.playDateEnd || ''}` : "无限制" }}
  1335. </template>
  1336. </el-table-column>
  1337. <el-table-column min-width="180" label="检票景点">
  1338. <template slot-scope="scope">
  1339. {{ scope.row.ticketCheckScenicList.map(item => item.scenicName).join(',') }}
  1340. </template>
  1341. </el-table-column>
  1342. <el-table-column width="240" prop="ticketCardInfo" label="卡信息">
  1343. <template slot-scope="scope" v-if="scope.row.card">
  1344. <div class=""><span>卡片编号:</span>{{ scope.row.card.cardNo }}</div>
  1345. <div class=""><span>有效时间:</span>{{ scope.row.card.validDateStart }} - {{ scope.row.card.validDateEnd }}</div>
  1346. <div class=""><span>卡片状态:</span>{{ scope.row.card.status | filterCardStatus }}</div>
  1347. <div class="" v-if="scope.row.card.status === 1"><span>开卡时间:</span>{{ scope.row.card.activeTime }}</div>
  1348. <div class="" v-if="scope.row.card.status === 0"><span>退卡时间:</span>{{ scope.row.card.cardNo }}</div>
  1349. <div class="" v-if="scope.row.card.status === 2"><span>挂失时间:</span>{{ scope.row.card.repealTime }}</div>
  1350. </template>
  1351. </el-table-column>
  1352. <el-table-column width="240" prop="ticketFaceInfo" label="人脸信息">
  1353. <template slot-scope="scope" v-if="scope.row.face">
  1354. <div class=""><span>有效时间:</span>{{ scope.row.face.validDateStart }} - {{ scope.row.face.validDateEnd }}</div>
  1355. <div class=""><span>卡片状态:</span>{{ scope.row.face.status === 0 ? '可用' : '不可用' }}</div>
  1356. <div class=""><span>图片地址:</span>{{ scope.row.face.imageUrl }}</div>
  1357. <div class=""><span>base64:</span>{{ scope.row.face.faceData }}</div>
  1358. <div class=""><span>注册状态:</span>{{ scope.row.face.registerStatus === 0 ? '未注册' : '已注册' }}</div>
  1359. </template>
  1360. </el-table-column>
  1361. </el-table>
  1362. <span slot="footer">
  1363. <el-button @click="printOrderDialogVisible = false">取消</el-button>
  1364. <el-button
  1365. type="primary"
  1366. @click="submitPrintOrder">确定</el-button>
  1367. </span>
  1368. </el-dialog>
  1369. <el-dialog
  1370. title="修改"
  1371. :visible.sync="editOrderDialogVisible"
  1372. mini-height="500"
  1373. @close="cancelEdit">
  1374. <el-form
  1375. class="form-box"
  1376. ref="formEl"
  1377. :model="editOrderInfo"
  1378. :inline="true"
  1379. label-width="100px">
  1380. <el-form-item
  1381. label="修改类型"
  1382. prop="updateType"
  1383. >
  1384. <el-select
  1385. v-model="editOrderInfo.updateType"
  1386. clearable
  1387. placeholder="请选择"
  1388. >
  1389. <el-option
  1390. v-for="item in updateTypes"
  1391. :key="item.value"
  1392. :label="item.label"
  1393. :value="item.value"
  1394. >
  1395. </el-option>
  1396. </el-select>
  1397. </el-form-item>
  1398. <el-form-item
  1399. v-if="editOrderInfo.updateType === 'updateOrderPayChannel'"
  1400. label="原支付方式"
  1401. prop="payChannel"
  1402. >
  1403. {{ currentOrder.payChannel }}
  1404. </el-form-item>
  1405. <el-form-item
  1406. v-if="editOrderInfo.updateType === 'updateOrderPayChannel'"
  1407. label="支付方式"
  1408. prop="payChannel"
  1409. >
  1410. <el-radio-group
  1411. border
  1412. fill="#379143"
  1413. class="tags-btn"
  1414. v-model="editOrderInfo.payChannel">
  1415. <el-radio
  1416. border
  1417. v-for="val in payChannelOptions"
  1418. :key="val"
  1419. :value="val"
  1420. :label="val"></el-radio>
  1421. </el-radio-group>
  1422. </el-form-item>
  1423. <el-form-item
  1424. v-if="editOrderInfo.updateType === 'updatePlayDate'"
  1425. label="选择门票"
  1426. prop="playDateBegin">
  1427. <el-select
  1428. v-model="editOrderInfo.ticketIds"
  1429. multiple>
  1430. <el-option
  1431. v-for="item in currentOrder.ticketList"
  1432. :key="item.id"
  1433. :label="item.ticketNo"
  1434. :value="item.id">
  1435. <span style="">{{ item.ticketNo }}</span>-
  1436. <span style="color: #8492a6; font-size: 13px">{{ item.ticketTypeName }}</span>
  1437. (<span style="color: #849822; font-size: 13px">
  1438. {{ item.playDateBegin || item.playDateEnd ? `${item.playDateBegin || ''} - ${item.playDateEnd || ''}` : "无限制" }}
  1439. </span>)
  1440. </el-option>
  1441. </el-select>
  1442. </el-form-item>
  1443. <el-form-item
  1444. v-if="editOrderInfo.updateType === 'updatePlayDate'"
  1445. label="起始时间"
  1446. prop="playDateBegin">
  1447. <el-date-picker
  1448. v-model="editOrderInfo.playDateBegin"
  1449. type="date"
  1450. placeholder="选择日期时间">
  1451. </el-date-picker>
  1452. </el-form-item>
  1453. <el-form-item
  1454. v-if="editOrderInfo.updateType === 'updatePlayDate'"
  1455. label="截止时间"
  1456. prop="playDateEnd">
  1457. <el-date-picker
  1458. v-model="editOrderInfo.playDateEnd"
  1459. type="date"
  1460. placeholder="选择日期时间">
  1461. </el-date-picker>
  1462. </el-form-item>
  1463. <div class="table-box" v-if="editOrderInfo.updateType === 'updateScenicTimes'">
  1464. <div class="tips">
  1465. <i class="el-icon-info"></i>
  1466. -1代表不限制 如果当前景点为群组景点 该次数为群组景点的检票次数总和
  1467. </div>
  1468. <el-table
  1469. border
  1470. stripe
  1471. height="500"
  1472. :data="editOrderInfo.ticketList">
  1473. <el-table-column type="expand">
  1474. <template slot-scope="props">
  1475. <div class="title">检票景点明细</div>
  1476. <el-table :data="props.row.ticketCheckScenicList" :max-height="200">
  1477. <el-table-column
  1478. prop="scenicName"
  1479. label="景点"
  1480. ></el-table-column>
  1481. <el-table-column
  1482. prop="checkLimitTimes"
  1483. label="可检票次数"
  1484. >
  1485. <template slot-scope="scope">
  1486. {{ scope.row.checkLimitTimes === -1 ? "无限制" : scope.row.checkLimitTimes }}
  1487. </template>
  1488. </el-table-column>
  1489. <el-table-column
  1490. prop="checkedTimes"
  1491. label="已检票次数"
  1492. ></el-table-column>
  1493. </el-table>
  1494. </template>
  1495. </el-table-column>
  1496. <el-table-column width="160" prop="ticketNo" label="票号"> </el-table-column>
  1497. <el-table-column width="100" prop="ticketTypeName" label="票种"> </el-table-column>
  1498. <el-table-column min-width="180" label="检票景点">
  1499. <template slot-scope="scope">
  1500. {{ scope.row.ticketCheckScenicList.map(item => item.scenicName).join(',') }}
  1501. </template>
  1502. </el-table-column>
  1503. <el-table-column
  1504. label="景点的限制检票次数"
  1505. min-width="90">
  1506. <template slot-scope="scope">
  1507. <el-input-number
  1508. controls-position="right"
  1509. :min="-1"
  1510. :precision="0"
  1511. v-model="scope.row.checkLimitTimes"
  1512. ></el-input-number>
  1513. </template>
  1514. </el-table-column>
  1515. </el-table>
  1516. </div>
  1517. </el-form>
  1518. <span slot="footer">
  1519. <el-button @click="cancelEdit">取消</el-button>
  1520. <el-button
  1521. type="primary"
  1522. @click="submitEditOrder">确定</el-button>
  1523. </span>
  1524. </el-dialog>
  1525. </div>
  1526. </template>
  1527. <script>
  1528. /* eslint-disable no-unused-vars */
  1529. import { apiOrderList, pickInvoice, getInvoice, cancelOrder, reprintTicket, checkTickets, updateOrder, getSaleChannelList, getSingleOrder, printTickets } from '@/api/order'
  1530. import { orderStatusDic, ticketStatusDic, channelList, papersType, orderCategories } from '@/assets/staticData'
  1531. import { getPayStatus } from '@/utils/index'
  1532. // import Ellipsis from '@/components/Ellipsis'
  1533. import ReaderInput from '@/components/ReaderInput'
  1534. import moment from 'moment'
  1535. import { payPOS } from '@/api/pay'
  1536. import { getSelf } from '@/api/systemSetting/account'
  1537. import { getSystemConfigList } from '@/api/systemConfig'
  1538. import { addUserConfig, getUserConfig } from '@/api/configSetting'
  1539. import { EventBus } from '@/utils/eventBus'
  1540. const COLUMN_SCHEMA = [
  1541. { key: 'orderCategory', label: '订单类型', group: '订单', column: 'extra', apiKey: 'orderCategory' },
  1542. { key: 'firstTicketTypeName', label: '票种名称', group: '票种', column: 'firstTicketTypeName', apiKey: 'ticketTypeName' },
  1543. { key: 'orderNo', label: '订单号', group: '订单', column: 'orderNo', apiKey: 'orderNo' },
  1544. { key: 'partnerOrderNo', label: '合作方订单号', group: '订单', column: 'orderNo', apiKey: 'partnerOrderNo' },
  1545. { key: 'ticketNo', label: '票号', group: '票务', column: 'extra', apiKey: 'ticketNo' },
  1546. { key: 'payChannel', label: '支付方式', group: '渠道', column: 'isOnlineOrder', apiKey: 'payChannel' },
  1547. { key: 'payTime', label: '支付时间', group: '支付', column: 'extra', apiKey: 'payTime' },
  1548. { key: 'teamName', label: '团体名称', group: '订单', column: 'extra', apiKey: 'teamName' },
  1549. { key: 'guideName', label: '导游名称', group: '订单', column: 'extra', apiKey: 'guideName' },
  1550. { key: 'otaSourceName', label: '订单来源渠道', group: '渠道', column: 'isOnlineOrder', apiKey: 'otaSourceName' },
  1551. { key: 'saleAdminName', label: '售卖人名称', group: '售票', column: 'saleInfo', apiKey: 'saleAdminName' },
  1552. { key: 'buyerName', label: '购买方名称', group: '购买方', column: 'buyerInfo', apiKey: 'buyerName' },
  1553. { key: 'buyerPhone', label: '购买方电话', group: '购买方', column: 'buyerInfo', apiKey: 'buyerPhone' },
  1554. { key: 'buyerIdentify', label: '购买方证件号', group: '购买方', column: 'buyerInfo', apiKey: 'buyerIdentify' },
  1555. { key: 'price', label: '订单总额', group: '订单', column: 'price', apiKey: 'orderPrice' },
  1556. { key: 'ticketNum', label: '包含的票数量', group: '票务', column: 'ticketNum', apiKey: 'ticketNum' },
  1557. { key: 'status', label: '订单状态', group: '订单', column: 'status', apiKey: 'orderStatus' },
  1558. { key: 'isOnlineOrder', label: '是否是线上订单', group: '渠道', column: 'isOnlineOrder', apiKey: 'isOnlineOrder' },
  1559. { key: 'createOrderRemark', label: '下单备注', group: '订单', column: 'createOrderRemark', apiKey: 'createOrderRemark' },
  1560. { key: 'discountDescription', label: '优惠说明', group: '优惠', column: 'extra', apiKey: 'discountDescription' },
  1561. { key: 'adminRemark', label: '管理员备注', group: '订单', column: 'extra', apiKey: 'adminRemark' },
  1562. { key: 'checkNum', label: '售票人数', group: '票务', column: 'extra', apiKey: 'checkNum' },
  1563. { key: 'isPrint', label: '是否已取票', group: '取票', column: 'extra', apiKey: 'isPrint' },
  1564. { key: 'printAdminName', label: '取票操作人', group: '取票', column: 'extra', apiKey: 'printAdminName' },
  1565. { key: 'printTime', label: '取票时间', group: '取票', column: 'extra', apiKey: 'printTime' },
  1566. { key: 'printTermName', label: '取票自助机', group: '取票', column: 'extra', apiKey: 'printTermName' },
  1567. { key: 'ticketStatus', label: '门票状态', group: '票务', column: 'extra', apiKey: 'ticketStatus' },
  1568. { key: 'unitPrice', label: '门票单价', group: '票务', column: 'extra', apiKey: 'unitPrice' },
  1569. { key: 'ticketPrice', label: '门票价格', group: '票务', column: 'extra', apiKey: 'ticketPrice' },
  1570. { key: 'originalPrice', label: '门票原价', group: '票务', column: 'extra', apiKey: 'originalPrice' },
  1571. { key: 'discountPrice', label: '门票调整价格', group: '票务', column: 'extra', apiKey: 'discountPrice' },
  1572. { key: 'settlementPrice', label: '门票结算价格', group: '票务', column: 'extra', apiKey: 'settlementPrice' },
  1573. { key: 'guestName', label: '游客姓名', group: '游客', column: 'extra', apiKey: 'guestName' },
  1574. { key: 'guestPhone', label: '游客电话', group: '游客', column: 'extra', apiKey: 'guestPhone' },
  1575. { key: 'guestIdentify', label: '游客证件号', group: '游客', column: 'extra', apiKey: 'guestIdentify' },
  1576. { key: 'playDateBegin', label: '游玩时间', group: '游玩', column: 'extra', apiKey: 'playDateBegin' },
  1577. { key: 'playDateEnd', label: '游玩时间', group: '游玩', column: 'extra', apiKey: 'playDateEnd' },
  1578. { key: 'batchConfigName', label: '场次名称', group: '游玩', column: 'extra', apiKey: 'batchConfigName' },
  1579. { key: 'buyTime', label: '付款时间', group: '支付', column: 'extra', apiKey: 'buyTime' },
  1580. { key: 'firstCheckTime', label: '首次检票时间', group: '检票', column: 'extra', apiKey: 'firstCheckTime' },
  1581. { key: 'checkTime', label: '最后检票时间', group: '检票', column: 'extra', apiKey: 'checkTime' },
  1582. { key: 'checkerName', label: '最近一次检票设备', group: '检票', column: 'extra', apiKey: 'checkerName' },
  1583. { key: 'cancelSubmitTime', label: '申请退款时间', group: '退款', column: 'extra', apiKey: 'cancelSubmitTime' },
  1584. { key: 'cancelPrice', label: '退款金额', group: '退款', column: 'extra', apiKey: 'cancelPrice' },
  1585. { key: 'cancelAdminName', label: '退款操作人', group: '退款', column: 'extra', apiKey: 'cancelAdminName' },
  1586. { key: 'cancelCompleteTime', label: '退款完成时间', group: '退款', column: 'extra', apiKey: 'cancelCompleteTime' },
  1587. { key: 'isForceCancel', label: '是否强制取消', group: '退款', column: 'extra', apiKey: 'isForceCancel' }
  1588. ]
  1589. const API_KEY_TO_FIELD = COLUMN_SCHEMA.reduce((acc, item) => {
  1590. acc[item.apiKey] = item.key
  1591. return acc
  1592. }, {})
  1593. const COLUMN_FIELD_MAP = COLUMN_SCHEMA.reduce((acc, item) => {
  1594. if (!acc[item.column]) acc[item.column] = []
  1595. acc[item.column].push(item.key)
  1596. return acc
  1597. }, {})
  1598. const DEFAULT_FIELD_KEYS = COLUMN_SCHEMA.map(item => item.key)
  1599. const STAT_KEY = 'orderDetail'
  1600. export default {
  1601. name: 'salesQuery',
  1602. computed: {
  1603. scenicName () {
  1604. return this.$localStore.get('scenicName') || this.$store.state.user.scenicName
  1605. },
  1606. salesList () {
  1607. return this.$store.state.user.salesList
  1608. },
  1609. accountList () {
  1610. return this.$store.state.app.accountList
  1611. },
  1612. termList () {
  1613. return this.$store.state.app.termList
  1614. },
  1615. saleChannel () {
  1616. return this.$store.state.app.saleChannel
  1617. },
  1618. payChannelOptions () {
  1619. return this.$store.getters.payChannelOptions
  1620. },
  1621. ticketTypeList () {
  1622. const { ticketTypeList } = this.$store.state.app
  1623. const { orderCategory } = this.form
  1624. return orderCategory ? ticketTypeList.filter(item => item.category === orderCategory) : ticketTypeList
  1625. },
  1626. scenicList () {
  1627. return this.$store.state.app.scenicList
  1628. },
  1629. permissionList () {
  1630. return this.$store.state.user.menuList || []
  1631. },
  1632. columnGroups () {
  1633. const groupList = []
  1634. const groupMap = {}
  1635. COLUMN_SCHEMA.forEach(item => {
  1636. if (!groupMap[item.group]) {
  1637. groupMap[item.group] = { name: item.group, fields: [] }
  1638. groupList.push(groupMap[item.group])
  1639. }
  1640. groupMap[item.group].fields.push({ key: item.key, label: item.label })
  1641. })
  1642. return groupList
  1643. }
  1644. },
  1645. components: {
  1646. ReaderInput
  1647. // Ellipsis
  1648. },
  1649. data () {
  1650. return {
  1651. projecticketTypeName: process.env.VUE_APP_PROJECT,
  1652. channelList,
  1653. otaSourceList: [],
  1654. orderStatusDic,
  1655. ticketStatusDic,
  1656. papersType,
  1657. isDev: process.env.NODE_ENV === 'development',
  1658. orderCategories,
  1659. form: {
  1660. searchKeywords: '', // 搜索关键字
  1661. partnerOrderNo: '', // OTA订单号
  1662. ticketNo: '', // 票号
  1663. otaOrderNo: '', // 渠道订单号
  1664. orderNo: '', // 订单号
  1665. createTime: [new Date(moment().subtract(7, 'day').format('YYYY-MM-DD')), new Date(moment().format('YYYY-MM-DD'))], // 下单时间
  1666. createTimeBegin: '',
  1667. createTimeEnd: '',
  1668. orderCategory: '',
  1669. playDate: ['', ''], // 游玩时间
  1670. playDateBegin: '',
  1671. playDateEnd: '',
  1672. payChannelList: [], // 支付方式
  1673. otaSourceNameList: [], // 销售来源
  1674. adminIdList: [], // 售票员
  1675. saleTermIdList: [], // 售卖自助机
  1676. orderStatus: '', // 订单状态
  1677. ticketStatus: '', // 门票状态
  1678. visitorName: '', // 游客姓名
  1679. visitorPhone: '', // 游客手机
  1680. visitorIdentify: '', // 游客身份证
  1681. ticketTypeIdList: [], // 票种列表
  1682. scenicIdList: [], // 景点列表
  1683. pageNum: 1,
  1684. pageSize: 10
  1685. },
  1686. tableData: [],
  1687. total: 0,
  1688. loading: false,
  1689. invoiceType: 0,
  1690. formEl: {
  1691. invoiceType: 1,
  1692. invoiceBuyer: '',
  1693. invoiceBuyerTaxNum: '',
  1694. invoiceBuyerEmail: '',
  1695. invoiceBuyerPhone: '',
  1696. invoiceBuyerAddress: '',
  1697. invoiceBuyerBankAccount: '',
  1698. remark: ''
  1699. },
  1700. rules: {
  1701. invoiceBuyerTaxNum: [
  1702. { required: false, message: '请输入纳税人识别号', trigger: 'blur' },
  1703. { pattern: /^[A-Za-z0-9]{15,20}$/, message: '纳税人识别号格式不正确', trigger: 'blur' }
  1704. ]
  1705. },
  1706. currentOrder: {},
  1707. multipleSelection: [],
  1708. order_tag_list: [],
  1709. visible: false,
  1710. refundOrderDialogVisible: false,
  1711. refundOrderInfo: {
  1712. force: false,
  1713. orderId: '',
  1714. ticketCancelRequestList: []
  1715. },
  1716. checkOrderDialogVisible: false,
  1717. checkOrderInfo: {
  1718. force: false,
  1719. orderId: '',
  1720. ticketIdList: []
  1721. },
  1722. printOrderDialogVisible: false,
  1723. secondPrintDialogVisible: false,
  1724. secondPrintInfo: {
  1725. orderId: '',
  1726. ticketIdList: []
  1727. },
  1728. updateTypes: [
  1729. { value: 'updateOrderPayChannel', label: '支付方式' },
  1730. { value: 'updatePlayDate', label: '游玩日期' },
  1731. { value: 'updateScenicTimes', label: '检票次数' }
  1732. ],
  1733. dialogVisible: false,
  1734. columnSchema: COLUMN_SCHEMA,
  1735. columnFieldMap: COLUMN_FIELD_MAP,
  1736. selectedFields: [...DEFAULT_FIELD_KEYS],
  1737. tempSelectedFields: [...DEFAULT_FIELD_KEYS],
  1738. editOrderDialogVisible: false,
  1739. editOrderInfo: {
  1740. orderId: '',
  1741. updateType: '',
  1742. payChannel: '',
  1743. playDateBegin: '',
  1744. playDateEnd: '',
  1745. ticketIds: [],
  1746. ticketList: [],
  1747. ticketCheckScenicUpdateRequestList: []
  1748. },
  1749. ticketNoSearch: ''
  1750. }
  1751. },
  1752. filters: {
  1753. filterChannel (n) {
  1754. switch (n) {
  1755. case 1:
  1756. return '线下'
  1757. case 2:
  1758. return '线上'
  1759. case 3:
  1760. return '自助机'
  1761. }
  1762. },
  1763. filterOrderCategory (n) {
  1764. return orderCategories.find(item => item.id === n).name
  1765. }
  1766. },
  1767. async created () {
  1768. const searchParams = JSON.parse(sessionStorage.getItem('统计表-售票记录-查询条件'))
  1769. if (searchParams) {
  1770. // 如果存在查询条件,则设置到组件的数据中
  1771. this.form = searchParams // 记住上次搜索条件
  1772. }
  1773. this.loadUserConfig()
  1774. // this.getSaleChannelList()
  1775. // this.getOrderList()
  1776. },
  1777. mounted () {
  1778. this.getSaleChannelList()
  1779. this.getOrderList()
  1780. EventBus.$on('activeTag', (tag) => {
  1781. if (tag === '/queryReport/salesQuery') {
  1782. this.getOrderList()
  1783. }
  1784. })
  1785. },
  1786. methods: {
  1787. getPayStatus,
  1788. showColumnConfig () {
  1789. this.dialogVisible = true
  1790. this.loadUserConfig(false)
  1791. },
  1792. loadUserConfig (applyToTable = true) {
  1793. getUserConfig({ statKey: STAT_KEY }).then(config => {
  1794. const fields = config?.data?.fields || config?.fields || config?.data?.columns || config?.columns || config?.data || []
  1795. let nextSelected = []
  1796. if (Array.isArray(fields) && fields.length) {
  1797. nextSelected = fields
  1798. .filter(i => Number(i.isShow) === 1)
  1799. .map(i => API_KEY_TO_FIELD[i.fieldKey] || i.fieldKey)
  1800. .filter(key => DEFAULT_FIELD_KEYS.includes(key))
  1801. } else {
  1802. nextSelected = [...DEFAULT_FIELD_KEYS]
  1803. }
  1804. if (applyToTable) {
  1805. this.selectedFields = nextSelected
  1806. }
  1807. this.tempSelectedFields = [...nextSelected]
  1808. }).catch(() => {
  1809. const nextSelected = [...DEFAULT_FIELD_KEYS]
  1810. if (applyToTable) {
  1811. this.selectedFields = nextSelected
  1812. }
  1813. this.tempSelectedFields = [...nextSelected]
  1814. })
  1815. },
  1816. saveUserConfig () {
  1817. const fields = this.columnSchema
  1818. .filter(item => item.apiKey)
  1819. .map(item => ({
  1820. fieldKey: item.apiKey,
  1821. fieldName: item.label,
  1822. isShow: this.tempSelectedFields.includes(item.key) ? 1 : 0
  1823. }))
  1824. addUserConfig({ statKey: STAT_KEY, fields }).then(() => {
  1825. this.selectedFields = [...this.tempSelectedFields]
  1826. this.dialogVisible = false
  1827. })
  1828. },
  1829. hasPermission (key) {
  1830. return !!this.permissionList.some(item => item.code === key)
  1831. },
  1832. reset () {
  1833. this.$refs.form.resetFields()
  1834. this.getOrderList(true)
  1835. },
  1836. setSearchKeywords (val) {
  1837. this.form.searchKeywords = val
  1838. },
  1839. // 取票状态
  1840. checkPrintStatus (ticketList) {
  1841. let tempArr = ticketList.filter(i => i.isPrint)
  1842. if (tempArr.length) {
  1843. if (tempArr.length === ticketList.length) {
  1844. return { type: 'success', text: '已取票' }
  1845. } else {
  1846. return { type: 'warning', text: '部分取票' }
  1847. }
  1848. } else {
  1849. return { type: 'info', text: '未取票' }
  1850. }
  1851. },
  1852. toggleSelection (rows) {
  1853. if (rows) {
  1854. rows.forEach(row => {
  1855. this.$refs.multipleTable.toggleRowSelection(row)
  1856. })
  1857. } else {
  1858. this.$refs.multipleTable.clearSelection()
  1859. }
  1860. },
  1861. handleSelectionChange (val) {
  1862. this.multipleSelection = val
  1863. },
  1864. selectable (row, index) {
  1865. return true
  1866. },
  1867. showPickInvoice (order) {
  1868. this.visible = true
  1869. this.currentOrder = order
  1870. if (['九龙湖', 'demo'].includes(this.scenicName)) {
  1871. this.formEl.invoiceType = 0 // 九龙湖只能普通开票
  1872. }
  1873. },
  1874. submitPickInvoice () {
  1875. if (!this.multipleSelection.length) return this.$message.error('请选择门票')
  1876. this.$refs.formEl.validate(valid => {
  1877. if (!valid) return
  1878. if (this.formEl.invoiceType) {
  1879. this.formEl.invoiceBuyer = ''
  1880. this.formEl.invoiceBuyerTaxNum = ''
  1881. this.formEl.invoiceBuyerEmail = ''
  1882. this.formEl.invoiceBuyerPhone = ''
  1883. this.formEl.invoiceBuyerAddress = ''
  1884. this.formEl.invoiceBuyerBankAccount = ''
  1885. this.formEl.remark = ''
  1886. }
  1887. pickInvoice([this.currentOrder.id], this.multipleSelection.map(v => v.id), this.formEl.invoiceType, this.formEl.invoiceBuyer, this.formEl.invoiceBuyerTaxNum, this.formEl.invoiceBuyerEmail, this.formEl.invoiceBuyerPhone, this.formEl.invoiceBuyerAddress, this.formEl.invoiceBuyerBankAccount, this.formEl.remark).then(res => {
  1888. this.$message.success('操作成功')
  1889. this.getOrderList()
  1890. this.visible = false
  1891. this.currentOrder = {}
  1892. this.formEl = {
  1893. invoiceType: 1,
  1894. invoiceBuyer: '',
  1895. invoiceBuyerTaxNum: '',
  1896. invoiceBuyerEmail: '',
  1897. invoiceBuyerPhone: '',
  1898. invoiceBuyerAddress: '',
  1899. invoiceBuyerBankAccount: '',
  1900. remark: ''
  1901. }
  1902. this.$confirm('发票已生成,是否跳转到发票下载页?', '提示', {
  1903. confirmButtonText: '确定',
  1904. cancelButtonText: '取消',
  1905. type: 'warning'
  1906. }).then(() => {
  1907. this.$router.push('/queryReport/invoiceRecord')
  1908. })
  1909. })
  1910. })
  1911. },
  1912. confirmPOS (record) {
  1913. this.$confirm('请确认该订单已付款,将手动更新订单状态为已支付', '提示', {
  1914. confirmButtonText: '确定',
  1915. cancelButtonText: '取消',
  1916. type: 'warning'
  1917. }).then(() => {
  1918. getSelf().then(response => {
  1919. const params = {
  1920. managerId: response.id,
  1921. id: record.id,
  1922. payChannel: record.payChannel,
  1923. posId: this.$localStore.get('termId'),
  1924. tradeInfo: '',
  1925. type: 'TICKET'
  1926. }
  1927. payPOS(params).then(res => {
  1928. this.$message.success('操作成功')
  1929. this.getOrderList()
  1930. this.$confirm('门票状态已修改,是否跳转补打门票页面?', '提示', {
  1931. confirmButtonText: '确定',
  1932. cancelButtonText: '取消',
  1933. type: 'warning'
  1934. }).then(() => {
  1935. this.$router.push({ name: 'printTicket' })
  1936. }).catch(() => {
  1937. })
  1938. })
  1939. })
  1940. }).catch(() => {
  1941. })
  1942. },
  1943. getSaleChannelList () {
  1944. getSaleChannelList().then(res => {
  1945. this.otaSourceList = res.data
  1946. })
  1947. },
  1948. handleSizeChange (size) {
  1949. this.form.pageSize = size
  1950. this.getOrderList()
  1951. },
  1952. dataExport () {
  1953. this.form.export = true
  1954. // this.form.exportDetail = true
  1955. apiOrderList(this.form).then(() => {
  1956. this.$message.success('导出成功。')
  1957. this.goToDownload()
  1958. }, () => {
  1959. this.$message.success('导出失败。')
  1960. })
  1961. this.reset()
  1962. },
  1963. reportExport (exportType) {
  1964. this.$confirm(`是否要导出明细数据`, '确认提示', {
  1965. confirmButtonText: '是',
  1966. cancelButtonText: '否',
  1967. type: 'warning'
  1968. }).then(() => {
  1969. this.handleExport({
  1970. ...this.form,
  1971. exportType: exportType || 'ticket',
  1972. export: true,
  1973. exportDetail: true
  1974. })
  1975. }).catch(() => {
  1976. this.handleExport({
  1977. ...this.form,
  1978. exportType: exportType || 'ticket',
  1979. export: true,
  1980. exportDetail: false
  1981. })
  1982. })
  1983. },
  1984. handleExport (params) {
  1985. apiOrderList(params).then(() => {
  1986. this.$message.success('导出成功。')
  1987. this.goToDownload()
  1988. }, () => {
  1989. this.$message.success('导出失败。')
  1990. })
  1991. },
  1992. getOrderList (goFirst) {
  1993. this.loading = true
  1994. goFirst && (this.form.pageNum = 1)
  1995. const [s, e] = this.form.createTime || []
  1996. this.form.createTimeBegin = s ? moment(s).startOf('day').format('YYYY-MM-DD HH:mm:ss') : ''
  1997. this.form.createTimeEnd = e ? moment(e).endOf('day').format('YYYY-MM-DD HH:mm:ss') : ''
  1998. const [s1, e1] = this.form.playDate || []
  1999. this.form.playDateBegin = s1 ? moment(s1).format('YYYY-MM-DD') : ''
  2000. this.form.playDateEnd = e1 ? moment(e1).format('YYYY-MM-DD') : ''
  2001. apiOrderList(this.form).then(res => {
  2002. this.total = res.data.total
  2003. // const list = []
  2004. res.data.records.forEach(item => {
  2005. let ticketsName = []
  2006. item.ticketsName = ticketsName.join(',')
  2007. })
  2008. this.tableData = res.data.records
  2009. // this.tableData.forEach(v => {
  2010. // if (v.price === 0 && v.payChannel === '现金') {
  2011. // v.payChannel = '免票'
  2012. // }
  2013. // })
  2014. console.log(this.tableData, 'tableData')
  2015. }).finally(() => {
  2016. this.loading = false
  2017. })
  2018. sessionStorage.setItem('统计表-售票记录-查询条件', JSON.stringify(this.form)) // 下次记住
  2019. },
  2020. reduceCheckNum (list) {
  2021. if (!list) return 0
  2022. return list.reduce((prev, item) => {
  2023. return prev + item.checkNum
  2024. }, 0)
  2025. },
  2026. async getOrderDetail (order) {
  2027. const res = await getSingleOrder(order.id)
  2028. this.currentOrder = res?.data || order
  2029. },
  2030. async refundOrder (order) {
  2031. await this.getOrderDetail(order)
  2032. this.refundOrderDialogVisible = true
  2033. this.refundOrderInfo.orderId = order.id
  2034. },
  2035. async secondPrint (order) {
  2036. await this.getOrderDetail(order)
  2037. this.secondPrintDialogVisible = true
  2038. this.secondPrintInfo.orderId = order.id
  2039. },
  2040. submitRefundOrder () {
  2041. if (!this.multipleSelection?.length) {
  2042. return this.$message.error('请选择门票')
  2043. }
  2044. this.refundOrderInfo.ticketCancelRequestList = this.multipleSelection.map(v => {
  2045. return {
  2046. ticketId: v.id,
  2047. cancelPrice: v.price
  2048. }
  2049. })
  2050. this.$confirm('确定要退单吗?', '提示', {
  2051. confirmButtonText: '确定',
  2052. cancelButtonText: '取消',
  2053. type: 'warning'
  2054. }).then(() => {
  2055. cancelOrder(this.refundOrderInfo).then(res => {
  2056. if (res.code === '999999') {
  2057. this.$message.warning(res.msg || '操作失败')
  2058. return
  2059. }
  2060. this.$message.success('操作成功')
  2061. this.refundOrderDialogVisible = false
  2062. this.getOrderList()
  2063. })
  2064. })
  2065. },
  2066. submitSecondPrint () {
  2067. if (!this.multipleSelection?.length) {
  2068. return this.$message.error('请选印门票')
  2069. }
  2070. this.secondPrintInfo.ticketIdList = this.multipleSelection.map(v => v.id)
  2071. this.$confirm('确定要打印吗?', '提示', {
  2072. confirmButtonText: '确定',
  2073. cancelButtonText: '取消',
  2074. type: 'warning'
  2075. }).then(() => {
  2076. reprintTicket(this.secondPrintInfo).then(res => {
  2077. if (res.code === '999999') {
  2078. this.$message.warning(res.msg || '操作失败')
  2079. return
  2080. }
  2081. this.$message.success('操作成功')
  2082. this.secondPrintDialogVisible = false
  2083. this.getOrderList()
  2084. })
  2085. })
  2086. },
  2087. async showOrderDetail (order) {
  2088. await this.getOrderDetail(order)
  2089. this.$refs.orderDetail.show(this.currentOrder)
  2090. },
  2091. // 核销
  2092. async checkOrder (order) {
  2093. await this.getOrderDetail(order)
  2094. this.checkOrderDialogVisible = true
  2095. this.checkOrderInfo.orderId = order.id
  2096. },
  2097. submitCheckOrder () {
  2098. if (!this.multipleSelection?.length) {
  2099. return this.$message.error('请选择门票')
  2100. }
  2101. this.checkOrderInfo.ticketIdList = this.multipleSelection.map(v => v.id)
  2102. this.$confirm('确定要核销吗?', '提示', {
  2103. confirmButtonText: '确定',
  2104. cancelButtonText: '取消',
  2105. type: 'warning'
  2106. }).then(() => {
  2107. checkTickets(this.checkOrderInfo).then(res => {
  2108. if (res.code === '999999') {
  2109. this.$message.warning(res.msg || '操作失败')
  2110. return
  2111. }
  2112. this.$message.success('操作成功')
  2113. this.checkOrderDialogVisible = false
  2114. this.getOrderList()
  2115. })
  2116. })
  2117. },
  2118. async printOrder (order) {
  2119. await this.getOrderDetail(order)
  2120. this.printOrderDialogVisible = true
  2121. },
  2122. submitPrintOrder () {
  2123. if (!this.multipleSelection?.length) {
  2124. return this.$message.error('请选择门票')
  2125. }
  2126. const ticketIdList = this.multipleSelection.map(v => v.id)
  2127. this.$confirm('确定要取票吗?', '提示', {
  2128. confirmButtonText: '确定',
  2129. cancelButtonText: '取消',
  2130. type: 'warning'
  2131. }).then(() => {
  2132. printTickets(ticketIdList).then(res => {
  2133. if (res.code === '999999') {
  2134. this.$message.warning(res.msg || '操作失败')
  2135. return
  2136. }
  2137. this.$message.success('操作成功')
  2138. this.checkOrderDialogVisible = false
  2139. this.getOrderList()
  2140. })
  2141. })
  2142. },
  2143. printSingleTicket (order) {
  2144. const ticketIdList = [order.id]
  2145. this.$confirm('确定要取票吗?', '提示', {
  2146. confirmButtonText: '确定',
  2147. cancelButtonText: '取消',
  2148. type: 'warning'
  2149. }).then(() => {
  2150. printTickets(ticketIdList).then(res => {
  2151. if (res.code === '200') {
  2152. this.$message.success('操作成功')
  2153. }
  2154. })
  2155. })
  2156. },
  2157. // 修改
  2158. async editOrder (order) {
  2159. await this.getOrderDetail(order)
  2160. this.editOrderDialogVisible = true
  2161. this.editOrderInfo.orderId = order.id
  2162. this.editOrderInfo.payChannel = order.payChannel
  2163. this.editOrderInfo.playDateBegin = order.playDateBegin
  2164. this.editOrderInfo.playDateEnd = order.playDateEnd
  2165. this.editOrderInfo.ticketCheckScenicUpdateRequestList = []
  2166. this.editOrderInfo.ticketList = []
  2167. this.currentOrder.ticketList.forEach(v => {
  2168. this.editOrderInfo.ticketList.push({
  2169. ...v,
  2170. checkLimitTimes: -1 // 默认不限制
  2171. })
  2172. // this.editOrderInfo.ticketCheckScenicUpdateRequestList.push(...v.ticketCheckScenicList)
  2173. })
  2174. },
  2175. cancelEdit () {
  2176. this.editOrderDialogVisible = false
  2177. this.editOrderInfo = {
  2178. orderId: '',
  2179. updateType: '',
  2180. payChannel: '',
  2181. playDateBegin: '',
  2182. playDateEnd: '',
  2183. ticketIds: [],
  2184. ticketList: [],
  2185. ticketCheckScenicUpdateRequestList: []
  2186. }
  2187. },
  2188. submitEditOrder () {
  2189. if (this.editOrderInfo.updateType === '') {
  2190. return this.$message.error('请选择修改类型')
  2191. }
  2192. if (this.editOrderInfo.updateType === 'updateOrderPayChannel' && !this.editOrderInfo.payChannel) {
  2193. return this.$message.error('请选择支付方式')
  2194. }
  2195. if (this.editOrderInfo.updateType === 'updatePlayDate' && (!this.editOrderInfo.playDateBegin || !this.editOrderInfo.playDateEnd)) {
  2196. return this.$message.error('请选择游玩日期')
  2197. }
  2198. this.editOrderInfo.ticketCheckScenicUpdateRequestList = []
  2199. if (this.editOrderInfo.playDateBegin) {
  2200. this.editOrderInfo.playDateBegin = moment(this.editOrderInfo.playDateBegin).format('YYYY-MM-DD')
  2201. }
  2202. if (this.editOrderInfo.playDateEnd) {
  2203. this.editOrderInfo.playDateEnd = moment(this.editOrderInfo.playDateEnd).format('YYYY-MM-DD')
  2204. }
  2205. if (this.editOrderInfo.updateType === 'updateScenicTimes') {
  2206. this.editOrderInfo.ticketIds = this.editOrderInfo.ticketList.map(item => item.id)
  2207. this.editOrderInfo.ticketList.forEach(item => {
  2208. item.ticketCheckScenicList.forEach(scenic => {
  2209. this.editOrderInfo.ticketCheckScenicUpdateRequestList.push({
  2210. id: scenic.id,
  2211. checkedTimes: scenic.checkedTimes,
  2212. checkLimitTimes: item.checkLimitTimes
  2213. })
  2214. })
  2215. })
  2216. }
  2217. updateOrder(this.editOrderInfo).then(res => {
  2218. if (res.code === '999999') {
  2219. this.$message.warning(res.msg || '修改失败')
  2220. return
  2221. }
  2222. this.$message.success('修改成功')
  2223. this.editOrderDialogVisible = false
  2224. this.getOrderList()
  2225. })
  2226. }
  2227. },
  2228. beforeDestroy () {
  2229. EventBus.$off('activeTag')
  2230. }
  2231. }
  2232. </script>
  2233. <style lang="scss" scoped>
  2234. .el-dialog__body {
  2235. min-height: 300px;
  2236. }
  2237. </style>