Dialog.vue 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503
  1. <template>
  2. <el-dialog
  3. :visible.sync="visible"
  4. :title="dialogType === 'add' ? '新增票种' : '编辑票种'"
  5. width="85%"
  6. append-to-body
  7. @close="handleClose"
  8. >
  9. <el-scrollbar
  10. :style="{ height: 'calc(100vh - 160px)' }"
  11. class="dialog-scroll">
  12. <el-form
  13. inline
  14. :model="form"
  15. ref="form"
  16. class="form-wrap"
  17. label-width="160px"
  18. >
  19. <div
  20. class="dialog-info1"
  21. style="padding-bottom: 0;">
  22. <div class="block-title">
  23. 基本属性
  24. </div>
  25. <el-form-item
  26. verify
  27. label="票种分类"
  28. prop="category">
  29. <el-select
  30. value-key="id"
  31. v-model="form.category"
  32. placeholder="请选择">
  33. <el-option
  34. v-for="item in ticketCategory"
  35. :key="item.id"
  36. :value="item.id"
  37. :label="item.name">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item
  42. verify
  43. label="票种名称"
  44. prop="name"
  45. >
  46. <el-input v-model="form.name"></el-input>
  47. </el-form-item>
  48. <el-form-item
  49. verify
  50. label="在售状态"
  51. prop="isSale"
  52. >
  53. <el-switch
  54. v-model="form.isSale"
  55. :active-value="1"
  56. :inactive-value="0"
  57. active-text="在售"
  58. inactive-text="禁售">
  59. </el-switch>
  60. </el-form-item>
  61. <el-form-item
  62. verify
  63. label="销售价格"
  64. prop="price"
  65. >
  66. <el-input v-model="form.price"></el-input>
  67. </el-form-item>
  68. <!-- <el-form-item
  69. label="线上价格"
  70. prop="onlinePrice"
  71. >
  72. <el-input-number
  73. controls-position="right"
  74. v-model="form.onlinePrice"
  75. :min="0"
  76. :step="0.01"
  77. :precision="2"
  78. ></el-input-number>
  79. </el-form-item>
  80. <el-form-item
  81. label="虚拟高价"
  82. prop="highPrice"
  83. >
  84. <el-input-number
  85. controls-position="right"
  86. v-model="form.highPrice"
  87. :min="0"
  88. :step="0.01"
  89. :precision="2"
  90. ></el-input-number>
  91. </el-form-item> -->
  92. <el-form-item
  93. v-if="form.category !== 'member'"
  94. verify
  95. label="日期类型"
  96. prop="useDateType"
  97. >
  98. <el-radio
  99. v-model="form.useDateType"
  100. :label="1">
  101. 日历票
  102. </el-radio>
  103. <el-radio
  104. v-model="form.useDateType"
  105. :label="2">
  106. 期票,时间期限内有效
  107. </el-radio>
  108. </el-form-item>
  109. <!-- <el-form-item
  110. v-if="form.useDateType === 2"
  111. label="消费日期"
  112. prop="validityUseDays"
  113. >
  114. 自购买起
  115. <el-input-number
  116. controls-position="right"
  117. v-model="form.validityUseDays"
  118. :min="0"
  119. :step="1"
  120. ></el-input-number>
  121. 天内可用
  122. </el-form-item> -->
  123. <!-- <el-form-item
  124. label="是否限制使用日期"
  125. prop="isUseDateLimit"
  126. >
  127. <el-switch
  128. v-model="form.isUseDateLimit"
  129. :active-value="1"
  130. :inactive-value="0"
  131. active-text="限制"
  132. inactive-text="不限">
  133. </el-switch>
  134. </el-form-item> -->
  135. <el-form-item
  136. v-if="form.category === 'member'"
  137. verify
  138. label="会员时长类型"
  139. prop="memberUseDateType"
  140. >
  141. <el-radio
  142. v-model="form.memberUseDateType"
  143. :label="1">
  144. 【按天】:购买后多少天的有效期
  145. </el-radio>
  146. <el-radio
  147. v-model="form.memberUseDateType"
  148. :label="2">
  149. 【按照使用日期】:固定某个时间期内可以用
  150. </el-radio>
  151. </el-form-item>
  152. <el-form-item
  153. v-if="!(form.category === 'member' && form.memberUseDateType === 2)"
  154. verify
  155. label="使用天数"
  156. prop="useDays"
  157. >
  158. <el-input-number
  159. controls-position="right"
  160. v-model="form.useDays"
  161. :min="0"
  162. :step="1"
  163. ></el-input-number>
  164. </el-form-item>
  165. <el-form-item
  166. v-if="!(form.category === 'member' && form.memberUseDateType === 1)"
  167. verify
  168. label="使用日期"
  169. prop="useDateStart"
  170. >
  171. <el-date-picker
  172. :editable="false"
  173. :clearable="false"
  174. :picker-options="pickerOptions"
  175. v-model="form.useDateStart"
  176. type="date"
  177. placeholder="开始日期"
  178. >
  179. </el-date-picker>
  180. <span style="margin:0 10px">至</span>
  181. <el-date-picker
  182. :editable="false"
  183. :clearable="false"
  184. :picker-options="pickerOptions"
  185. v-model="form.useDateEnd"
  186. type="date"
  187. placeholder="结束日期"
  188. >
  189. </el-date-picker>
  190. </el-form-item>
  191. <el-form-item
  192. v-if="form.category === 'member'"
  193. verify
  194. label="激活方式"
  195. prop="memberActiveType"
  196. >
  197. <el-radio
  198. v-model="form.memberActiveType"
  199. :label="1">
  200. 【购买即激活】 该年卡购买了就开始递减天数
  201. </el-radio>
  202. <el-radio
  203. v-model="form.memberActiveType"
  204. :label="2">
  205. 【首次使用激活】:第一次用了之后才开始递减时间,示例值
  206. </el-radio>
  207. </el-form-item>
  208. <!-- <el-form-item
  209. label="是否实名制购票"
  210. prop="isRealName"
  211. >
  212. <el-switch
  213. v-model="form.isRealName"
  214. :active-value="1"
  215. :inactive-value="0"
  216. active-text="限制"
  217. inactive-text="不限">
  218. </el-switch>
  219. </el-form-item>
  220. <el-form-item
  221. label="实名要求"
  222. prop="realNameType"
  223. >
  224. <el-radio
  225. v-model="form.realNameType"
  226. :label="1">
  227. 一证一人
  228. </el-radio>
  229. <el-radio
  230. v-model="form.realNameType"
  231. :label="2">
  232. 一证多人
  233. </el-radio>
  234. </el-form-item>
  235. <el-form-item
  236. label="预订协议"
  237. prop="buyProtocol"
  238. >
  239. <el-input v-model="form.buyProtocol"></el-input>
  240. <el-checkbox
  241. v-model="form.isAgreeProtocol">
  242. <span style="color:#0075ff">是否必须同意预定协议才可以购买</span>
  243. </el-checkbox>
  244. </el-form-item> -->
  245. <!-- <el-form-item
  246. label="是否限制售卖日期"
  247. prop="isSaleDateLimit"
  248. >
  249. <el-switch
  250. v-model="form.isSaleDateLimit"
  251. :active-value="1"
  252. :inactive-value="0"
  253. active-text="限制"
  254. inactive-text="不限">
  255. </el-switch>
  256. </el-form-item> -->
  257. <el-form-item
  258. v-if="form.isSaleDateLimit === 1"
  259. verify
  260. label="售卖时间"
  261. prop="saleDateStart"
  262. >
  263. <el-date-picker
  264. :editable="false"
  265. :clearable="false"
  266. :picker-options="pickerOptions"
  267. v-model="form.saleDateStart"
  268. type="date"
  269. placeholder="开始日期"
  270. >
  271. </el-date-picker>
  272. <span style="margin:0 10px">至</span>
  273. <el-date-picker
  274. :editable="false"
  275. :clearable="false"
  276. :picker-options="pickerOptions"
  277. v-model="form.saleDateEnd"
  278. type="date"
  279. placeholder="结束日期"
  280. >
  281. </el-date-picker>
  282. </el-form-item>
  283. <!-- <el-form-item
  284. label="是否限制预售范围"
  285. prop="isSalePreLimit"
  286. >
  287. <el-switch
  288. v-model="form.isSalePreLimit"
  289. :active-value="1"
  290. :inactive-value="0"
  291. active-text="限制"
  292. inactive-text="不限">
  293. </el-switch>
  294. </el-form-item>
  295. <el-form-item
  296. label="预售范围"
  297. prop="saleMaxPreDays"
  298. >
  299. <div class="item">
  300. 最大预售
  301. <el-input-number
  302. controls-position="right"
  303. v-model="form.saleMaxPreDays"
  304. :min="0"
  305. :step="1"
  306. ></el-input-number>
  307. 天以内的
  308. </div>
  309. <div class="item">
  310. 最小需提前
  311. <el-input-number
  312. controls-position="right"
  313. v-model="form.saleMinPreDays"
  314. :min="0"
  315. :step="1"
  316. ></el-input-number>
  317. 天预定(0 代表可订当日)
  318. </div>
  319. </el-form-item>
  320. <el-form-item
  321. label="是否限制下单数量"
  322. prop="isSaleNumsLimit"
  323. >
  324. <el-switch
  325. v-model="form.isSaleNumsLimit"
  326. :active-value="1"
  327. :inactive-value="0"
  328. active-text="限制"
  329. inactive-text="不限">
  330. </el-switch>
  331. </el-form-item>
  332. <el-form-item
  333. label="起订数"
  334. prop="saleMinNums"
  335. >
  336. <div class="item">
  337. 单订单最小起订数
  338. <el-input-number
  339. controls-position="right"
  340. v-model="form.saleMinNums"
  341. :min="0"
  342. :step="1"
  343. ></el-input-number>
  344. </div>
  345. <div class="item">
  346. 单订单最大起订数
  347. <el-input-number
  348. controls-position="right"
  349. v-model="form.saleMaxNums"
  350. :min="0"
  351. :step="1"
  352. ></el-input-number>
  353. </div>
  354. </el-form-item> -->
  355. <el-form-item
  356. verify
  357. label="核销凭证"
  358. prop="checkType"
  359. >
  360. <el-checkbox-group v-model="form.checkType">
  361. <el-checkbox
  362. label="qrcode">
  363. 二维码
  364. </el-checkbox>
  365. <el-checkbox
  366. label="idcard">
  367. 证件号
  368. </el-checkbox>
  369. <el-checkbox
  370. label="face">
  371. 人脸
  372. </el-checkbox>
  373. <el-checkbox
  374. label="card">
  375. IC卡
  376. </el-checkbox>
  377. </el-checkbox-group>
  378. </el-form-item>
  379. <el-form-item
  380. verify
  381. label="核销规则"
  382. prop="checkRule"
  383. >
  384. <el-checkbox-group v-model="form.checkRule">
  385. <el-checkbox
  386. label="1">
  387. 人工,检票设备核销
  388. </el-checkbox>
  389. <el-checkbox
  390. label="2">
  391. 取票即核销
  392. </el-checkbox>
  393. <el-checkbox
  394. label="3">
  395. 购买即核销
  396. </el-checkbox>
  397. </el-checkbox-group>
  398. </el-form-item>
  399. <el-form-item
  400. verify
  401. label="批量核销"
  402. prop="batchCheckRule"
  403. >
  404. <el-radio
  405. v-model="form.batchCheckRule"
  406. label="single">
  407. 单次核销
  408. </el-radio>
  409. <el-radio
  410. v-model="form.batchCheckRule"
  411. label="batch">
  412. 当票可以使用多次时,一次核销完成
  413. </el-radio>
  414. </el-form-item>
  415. <el-form-item
  416. label="核销语音"
  417. prop="checkVoice"
  418. >
  419. <el-input v-model="form.checkVoice">
  420. </el-input>
  421. <el-tag type="warning" style="margin-left: 10px;">如果为空 默认播报票种名称</el-tag>
  422. </el-form-item>
  423. <el-form-item
  424. verify
  425. label="星期检票规则"
  426. prop="useDayOfWeek"
  427. >
  428. <el-checkbox-group v-model="form.useDayOfWeek">
  429. <el-checkbox label="2">
  430. 星期一
  431. </el-checkbox>
  432. <el-checkbox label="3">
  433. 星期二
  434. </el-checkbox>
  435. <el-checkbox label="4">
  436. 星期三
  437. </el-checkbox>
  438. <el-checkbox label="5">
  439. 星期四
  440. </el-checkbox>
  441. <el-checkbox label="6">
  442. 星期五
  443. </el-checkbox>
  444. <el-checkbox label="7">
  445. 星期六
  446. </el-checkbox>
  447. <el-checkbox label="1">
  448. 星期日
  449. </el-checkbox>
  450. </el-checkbox-group>
  451. </el-form-item>
  452. <el-form-item
  453. verify
  454. label="票种绑定的销售渠道"
  455. prop="source"
  456. >
  457. <el-checkbox-group v-model="form.source">
  458. <el-checkbox
  459. label="window">
  460. 窗口
  461. </el-checkbox>
  462. <el-checkbox
  463. label="term">
  464. 自助机
  465. </el-checkbox>
  466. </el-checkbox-group>
  467. </el-form-item>
  468. <el-form-item
  469. verify
  470. label="是否可以退订"
  471. prop="isAllowCancel"
  472. >
  473. <el-switch
  474. v-model="form.isAllowCancel"
  475. :active-value="1"
  476. :inactive-value="0"
  477. active-text="可以"
  478. inactive-text="不可以">
  479. </el-switch>
  480. </el-form-item>
  481. <el-form-item
  482. verify
  483. label="是否必须换票使用"
  484. prop="isNeedPrint"
  485. >
  486. <el-switch
  487. v-model="form.isNeedPrint"
  488. :active-value="1"
  489. :inactive-value="0"
  490. active-text="需要"
  491. inactive-text="不限">
  492. </el-switch>
  493. </el-form-item>
  494. <el-form-item
  495. verify
  496. label="过期操作"
  497. prop="outOfDateDeal"
  498. >
  499. <el-radio
  500. v-model="form.outOfDateDeal"
  501. :label="1">
  502. 人工处理
  503. </el-radio>
  504. <el-radio
  505. v-model="form.outOfDateDeal"
  506. :label="2">
  507. 自动核销
  508. </el-radio>
  509. </el-form-item>
  510. <template v-if="form.category === 'batch'">
  511. <div class="block-title">
  512. 时间场次
  513. </div>
  514. <div>
  515. <div class="btn-wrap-left">
  516. <el-button
  517. plain
  518. class="add-btn"
  519. type="primary"
  520. @click="handleAddBachConfig">
  521. 增加
  522. </el-button>
  523. </div>
  524. <div class="table-box">
  525. <el-tag type="warning">场次时间默认不限制为-1</el-tag>
  526. <el-table
  527. border
  528. stripe
  529. :data="form.batchConfigList">
  530. <el-table-column
  531. label="场次名称">
  532. <template slot-scope="scope">
  533. <el-input
  534. v-model="scope.row.name"
  535. style="width: 95%"></el-input>
  536. </template>
  537. </el-table-column>
  538. <el-table-column
  539. label="开始时间">
  540. <template slot-scope="scope">
  541. <el-time-picker
  542. arrow-control
  543. style="width: 95%"
  544. v-model="scope.row.startTime"
  545. format="HH:mm:ss"
  546. value-format="HH:mm:ss"
  547. placeholder="开始时间">
  548. </el-time-picker>
  549. </template>
  550. </el-table-column>
  551. <el-table-column
  552. label="结束时间">
  553. <template slot-scope="scope">
  554. <el-time-picker
  555. arrow-control
  556. v-model="scope.row.endTime"
  557. style="width: 95%"
  558. format="HH:mm:ss"
  559. value-format="HH:mm:ss"
  560. placeholder="结束时间">
  561. </el-time-picker>
  562. </template>
  563. </el-table-column>
  564. <el-table-column
  565. label="开场后X分钟停止售票">
  566. <template slot-scope="scope">
  567. <el-input-number
  568. controls-position="right"
  569. style="width: 95%"
  570. :min="-1"
  571. :precision="0"
  572. v-model="scope.row.saleStopMinutes"
  573. ></el-input-number>
  574. </template>
  575. </el-table-column>
  576. <el-table-column
  577. label="开场前X分钟停止退票"
  578. min-width="90">
  579. <template slot-scope="scope">
  580. <el-input-number
  581. controls-position="right"
  582. style="width: 95%"
  583. :min="-1"
  584. :precision="0"
  585. v-model="scope.row.cancelStopBeforeStartMinutes"
  586. ></el-input-number>
  587. </template>
  588. </el-table-column>
  589. <el-table-column
  590. label="开场后X分钟停止退票"
  591. min-width="90">
  592. <template slot-scope="scope">
  593. <el-input-number
  594. controls-position="right"
  595. style="width: 95%"
  596. :min="-1"
  597. :precision="0"
  598. v-model="scope.row.cancelStopAfterStartMinutes"
  599. ></el-input-number>
  600. </template>
  601. </el-table-column>
  602. <el-table-column
  603. label="开场前X分钟允许检票入场"
  604. min-width="90">
  605. <template slot-scope="scope">
  606. <el-input-number
  607. controls-position="right"
  608. style="width: 95%"
  609. :min="-1"
  610. :precision="0"
  611. v-model="scope.row.preCheckMinutes"
  612. ></el-input-number>
  613. </template>
  614. </el-table-column>
  615. <el-table-column
  616. label="开场后X分钟停止检票"
  617. min-width="90">
  618. <template slot-scope="scope">
  619. <el-input-number
  620. controls-position="right"
  621. style="width: 95%"
  622. :min="-1"
  623. :precision="0"
  624. v-model="scope.row.stopCheckMinutes"
  625. ></el-input-number>
  626. </template>
  627. </el-table-column>
  628. <el-table-column
  629. label="无座位时的最大数量"
  630. min-width="90">
  631. <template slot-scope="scope">
  632. <el-input-number
  633. controls-position="right"
  634. style="width: 95%"
  635. :min="-1"
  636. :precision="0"
  637. v-model="scope.row.maxSaleNums"
  638. ></el-input-number>
  639. </template>
  640. </el-table-column>
  641. <el-table-column
  642. width="110"
  643. class-name="align-item"
  644. label="操作">
  645. <template slot-scope="scope">
  646. <span
  647. class="el-button el-button--primary el-button--small"
  648. @click="deleteBachConfig(scope.$index, scope.row)">
  649. <i class="el-icon-delete"></i>
  650. 删除
  651. </span>
  652. </template>
  653. </el-table-column>
  654. </el-table>
  655. </div>
  656. </div>
  657. </template>
  658. <div class="block-title">
  659. 添加适用景点
  660. </div>
  661. <div>
  662. <el-tag type="warning" style="margin-left: 10px;">景点检票次数不限制为-1</el-tag>
  663. <div class="btn-wrap-left">
  664. <el-button
  665. plain
  666. class="add-btn"
  667. type="primary"
  668. @click="handleAdd">
  669. 添加单个
  670. </el-button>
  671. </div>
  672. <div class="table-box">
  673. <el-table
  674. border
  675. stripe
  676. :data="form.singleScenicList">
  677. <el-table-column
  678. label="适用景点">
  679. <template slot-scope="scope">
  680. <el-select
  681. v-model="scope.row.scenicId">
  682. <el-option
  683. v-for="item in scenicList"
  684. :key="item.id"
  685. :label="item.name"
  686. :value="item.id"
  687. >
  688. </el-option>
  689. </el-select>
  690. </template>
  691. </el-table-column>
  692. <el-table-column
  693. label="检票次数"
  694. min-width="90">
  695. <template slot-scope="scope">
  696. <el-input-number
  697. controls-position="right"
  698. :min="-1"
  699. :precision="0"
  700. v-model="scope.row.checkLimitTimes"
  701. ></el-input-number>
  702. </template>
  703. </el-table-column>
  704. <el-table-column
  705. label="单日限制检票次数"
  706. min-width="90">
  707. <template slot-scope="scope">
  708. <el-input-number
  709. controls-position="right"
  710. :min="-1"
  711. :precision="0"
  712. v-model="scope.row.singleDayLimitTimes"
  713. ></el-input-number>
  714. </template>
  715. </el-table-column>
  716. <el-table-column
  717. width="90"
  718. class-name="align-item"
  719. label="操作">
  720. <template slot-scope="scope">
  721. <span
  722. class="el-button el-button--primary el-button--small"
  723. @click="delScenic(scope.$index)">
  724. <i class="el-icon-delete"></i>
  725. 删除
  726. </span>
  727. </template>
  728. </el-table-column>
  729. </el-table>
  730. </div>
  731. <div class="btn-wrap-left">
  732. <el-button
  733. plain
  734. class="add-btn"
  735. type="primary"
  736. @click="handleAdd('multiple')">
  737. 添加群组
  738. </el-button>
  739. </div>
  740. <div class="table-box">
  741. <el-table
  742. border
  743. stripe
  744. :data="form.groupScenicList">
  745. <el-table-column
  746. label="适用景点">
  747. <template slot-scope="scope">
  748. <el-select
  749. v-model="scope.row.scenicId"
  750. multiple>
  751. <el-option
  752. v-for="item in scenicList"
  753. :key="item.id"
  754. :label="item.name"
  755. :value="item.id"
  756. >
  757. </el-option>
  758. </el-select>
  759. </template>
  760. </el-table-column>
  761. <el-table-column
  762. label="检票次数总和"
  763. min-width="90">
  764. <template slot-scope="scope">
  765. <el-input-number
  766. controls-position="right"
  767. :min="-1"
  768. :precision="0"
  769. v-model="scope.row.checkLimitTimes"
  770. ></el-input-number>
  771. </template>
  772. </el-table-column>
  773. <!-- <el-table-column
  774. label="单景点检票次数"
  775. min-width="90">
  776. <template slot-scope="scope">
  777. <el-input-number
  778. controls-position="right"
  779. :min="-1"
  780. :precision="0"
  781. v-model="scope.row.scenicLimitTimes"
  782. ></el-input-number>
  783. </template>
  784. </el-table-column> -->
  785. <el-table-column
  786. width="210"
  787. class-name="align-item"
  788. label="操作">
  789. <template slot-scope="scope">
  790. <div style="display:flex">
  791. <span
  792. class="el-button el-button--primary el-button--small"
  793. @click="setSceneTimes(scope.$index, scope.row)">
  794. <i class="el-icon-edit-outline"></i>
  795. 分配次数
  796. </span>
  797. <span
  798. class="el-button el-button--primary el-button--small"
  799. @click="delScenic(scope.$index, 'multiple')">
  800. <i class="el-icon-delete"></i>
  801. 删除
  802. </span>
  803. </div>
  804. </template>
  805. </el-table-column>
  806. </el-table>
  807. </div>
  808. </div>
  809. </div>
  810. <div class="dialog-btn-wrap">
  811. <el-button
  812. @click="handleClose">
  813. 取消
  814. </el-button>
  815. <el-button
  816. @click="reset"
  817. v-if="dialogType === 'add'">
  818. 重置
  819. </el-button>
  820. <el-button
  821. @click="submit"
  822. type="primary">
  823. 保存
  824. </el-button>
  825. </div>
  826. </el-form>
  827. </el-scrollbar>
  828. <el-dialog
  829. :visible.sync="setTimeVisible"
  830. title="分配次数"
  831. append-to-body
  832. @close="handleGroupTimeClose">
  833. <div class="table-box">
  834. <el-table
  835. border
  836. stripe
  837. :data="currGroupScenicInfo">
  838. <el-table-column
  839. label="景点">
  840. <template slot-scope="scope">
  841. {{ scope.row.scenicName }}
  842. </template>
  843. </el-table-column>
  844. <el-table-column
  845. label="单个景点的检票次数"
  846. min-width="90">
  847. <template slot-scope="scope">
  848. <el-input-number
  849. controls-position="right"
  850. :min="-1"
  851. :precision="0"
  852. v-model="scope.row.scenicLimitTimes"
  853. ></el-input-number>
  854. </template>
  855. </el-table-column>
  856. <el-table-column
  857. label="单日限制检票次数"
  858. min-width="90">
  859. <template slot-scope="scope">
  860. <el-input-number
  861. controls-position="right"
  862. :min="-1"
  863. :precision="0"
  864. v-model="scope.row.singleDayLimitTimes"
  865. ></el-input-number>
  866. </template>
  867. </el-table-column>
  868. </el-table>
  869. </div>
  870. <div
  871. slot="footer"
  872. class="dialog-btn-wrap">
  873. <el-button
  874. @click="handleGroupTimeClose">
  875. 取消
  876. </el-button>
  877. <el-button
  878. @click="handleGroupTimeSubmit"
  879. type="primary">
  880. 确定
  881. </el-button>
  882. </div>
  883. </el-dialog>
  884. </el-dialog>
  885. </template>
  886. <script>
  887. import { addTicket, updateTicket, queueList, batchUpdateTicketBatch, delTicketBatch } from '@/api/ticketType'
  888. import { getLabelName } from '@/utils'
  889. import { cloneDeep } from 'lodash'
  890. import moment from 'moment'
  891. const defaultForm = {
  892. category: 'ticket', // 大类
  893. name: '', // 名称
  894. isSale: 1, // 在售状态 0为禁售 1为在售 默认为1
  895. price: '', // 窗口价格
  896. onlinePrice: 0, // 线上价格
  897. highPrice: 0, // 虚拟高价(划线价格)
  898. memberUseDateType: 1, // 会员时长类型 1【按天】:购买后多少天的有效期 由票种字段use_days生效 。2【按照使用日期】:固定某个时间期内可以用
  899. memberActiveType: 1, // 激活方式:【1:购买即激活】 该年卡购买了就开始递减天数。【2:首次使用激活】:第一次用了之后才开始递减时间,示例值(1)
  900. useDays: 1, // 使用天数 默认为1天 如果是年卡次卡 且会员卡的时长类型是按天数的 该值代表会员卡的时长天数 比如365 该值必须大于1 否则该值为0
  901. // validityUseDays: 0, // 期票模式下第一种情况 自购买日起X天内可使用 X必须大于0
  902. // isUseDateLimit: 1, // 是否限制使用日期 0为不限 1为限制 默认为0 如果限制 必须指定使用日期 期票模式下且不是购买日情况下必须指定
  903. useDateStart: moment().format('YYYY-MM-DD'), // 使用日期开始
  904. useDateEnd: moment().add(10, 'years').format('YYYY-MM-DD'), // 使用日期结束
  905. isRealName: 0, // 是否需要实名认证 0为不需要 1为需要 默认为0
  906. realNameType: 1, // 在实名制购票下 1 【一证一人】:购买两张票需要两张实名。2【一证多人】:购买多张只需要一人实名
  907. buyProtocol: '', // 预定协议 富文本
  908. isAgreeProtocol: 0, // 是否必须同意预定协议才可以购买 开启为1 默认为0
  909. isSaleDateLimit: 1, // 是否限制售卖日期 0为不限 1为限制 默认为0 如果限制 必须指定售卖时间
  910. saleDateStart: moment().format('YYYY-MM-DD'), // 售卖时间开始
  911. saleDateEnd: moment().add(10, 'years').format('YYYY-MM-DD'), // 售卖时间结束
  912. isSalePreLimit: 0, // 是否限制预售范围 0为不限 1为限制 默认为0 如果限制 必须指定预售范围
  913. saleMaxPreDays: 365, // 预售范围 最大预售X天以内的 默认为365 代表可预定一整年
  914. saleMinPreDays: 0, // 预售范围 最小需提前X天预定 默认为0 代表可订当日
  915. isSaleNumsLimit: 0, // 是否限制下单数量 0为不限 1为限制 默认为0 如果限制 必须指定下单数量
  916. saleMinNums: 0, // 单订单最小起订数
  917. saleMaxNums: 0, // 单订单最大起订数
  918. checkType: ['qrcode', 'idcard'], // 核销凭证 qrcode 二维码 idcard 证件号 face 人脸 多选用逗号分隔,示例值(qrcode,idcard)
  919. checkRule: ['1'], // 核销规则 1人工,检票设备核销 2取票即核销 3购买即核销 多选用逗号分隔,示例值(1,2)
  920. batchCheckRule: 'single', // 批量核销规则 single-代表单次核销 batch-代表当票可以使用多次时,一次核销完
  921. checkVoice: '', // 核销语音 如果为空 默认播报票种名称
  922. useDayOfWeek: ['1', '2', '3', '4', '5', '6', '7'], // 指定周几可以用 逗号分隔 1表示周日,2表示周一 依次类推,示例值(1,2,3,4,5,6,7)
  923. isAllowCancel: 1, // 是否允许取消订单 0为不允许 1为允许 默认为1
  924. isNeedPrint: 0, // 是否必须换票使用 默认为0 不限 否则需要门票取票打印后才可以核销
  925. outOfDateDeal: 1, // 过期操作 1人工处理 2自动核销 默认为1,示例值(1)
  926. singleScenicList: [], // 包含项目-单个景点数组
  927. groupScenicList: [], // 包含项目-组合景点数组 二维数组结构
  928. batchConfigList: [], // 批次配置数组
  929. ticketTypeScenicList: [], // 票种绑定的景点数组
  930. source: ['window', 'term'], // 票种绑定的销售渠道 窗口:window ; 自助机:term,示例值([window])
  931. useDateType: 1 // 使用日期类型 1日历票 2期票 默认为1
  932. }
  933. export default {
  934. computed: {
  935. scenicName () {
  936. return this.$localStore.get('scenicName') || this.$store.state.user.scenicName
  937. },
  938. ticketCategory () {
  939. return this.$store.state.app.ticketCategory
  940. }
  941. },
  942. props: {
  943. memberTypeList: {
  944. type: Array,
  945. default: () => []
  946. },
  947. // ticketItem: {
  948. // type: Object,
  949. // default: () => {}
  950. // },
  951. // dialogType: {
  952. // type: String,
  953. // default: ''
  954. // },
  955. scenicList: {
  956. type: Array,
  957. default: () => []
  958. },
  959. ticketTagList: {
  960. type: Array,
  961. default: () => []
  962. },
  963. invoiceSeller: {
  964. type: Array,
  965. default: () => []
  966. }
  967. },
  968. data () {
  969. return {
  970. ticketItem: {},
  971. dialogType: 'add',
  972. projectName: process.env.VUE_APP_PROJECT,
  973. visible: false,
  974. pickerOptions: {
  975. disabledDate: (theTime) => {
  976. let startTime = moment().format('YYYY-MM-DD') + ' 00:00:00'
  977. return moment(theTime).isBefore(startTime)
  978. }
  979. },
  980. dialogVisible: false,
  981. originRecord: {},
  982. currentRecord: {},
  983. man: 0, // 满x
  984. jian: 0, // 减y
  985. queueList: [],
  986. inputVisible: false,
  987. inputValue: [],
  988. form: defaultForm,
  989. batchConfig: {
  990. name: '', // 批次名称
  991. startTime: '', // 批次开始时间
  992. endTime: '', // 批次结束时间
  993. saleStopMinutes: -1, // 售卖截止时间
  994. cancelStopBeforeStartMinutes: -1, // 取消截止时间
  995. cancelStopAfterStartMinutes: -1, // 取消截止时间
  996. preCheckMinutes: -1, // 预检时间
  997. stopCheckMinutes: -1, // 停止检票时间
  998. maxSaleNums: -1 // 最大售卖数量
  999. },
  1000. setTimeVisible: false,
  1001. groupIndex: -1,
  1002. currGroupScenicInfo: [],
  1003. groupScenicMap: new Map()
  1004. }
  1005. },
  1006. watch: {
  1007. // 'form.memberType' (val) {
  1008. // console.log(val)
  1009. // this.form.name = val && val.name
  1010. // this.form.price = val && val.capital
  1011. // },
  1012. 'form.category' (val) {
  1013. if (val === 'member') {
  1014. this.form.useDays = 365
  1015. } else {
  1016. this.form.useDays = 1
  1017. }
  1018. },
  1019. // 满x减y
  1020. 'man': function (newVal, oldVal) {
  1021. this.updateDiscountRule()
  1022. },
  1023. 'jian': function (newVal, oldVal) {
  1024. this.updateDiscountRule()
  1025. }
  1026. },
  1027. methods: {
  1028. show (ticketItem, type) {
  1029. // this.reset()
  1030. this.ticketItem = ticketItem
  1031. this.dialogType = type
  1032. if (ticketItem) {
  1033. this.form = cloneDeep(ticketItem)
  1034. this.form.source = ticketItem.source || []
  1035. this.form.useDayOfWeek = this.form.useDayOfWeek.split(',')
  1036. this.form.checkType = this.form.checkType.split(',')
  1037. this.form.checkRule = this.form.checkRule.split(',')
  1038. if (!this.form.source) {
  1039. this.form.source = []
  1040. }
  1041. if (!this.form.ticketTypeScenicList) {
  1042. this.form.ticketTypeScenicList = []
  1043. }
  1044. if (!this.form.singleScenicList) {
  1045. this.form.singleScenicList = []
  1046. }
  1047. if (!this.form.groupScenicList) {
  1048. this.form.groupScenicList = []
  1049. }
  1050. if (!this.form.batchConfigList) {
  1051. this.form.batchConfigList = []
  1052. }
  1053. let groupFlag = ''
  1054. let groupIndex = 0
  1055. this.form.ticketTypeScenicList.forEach(item => {
  1056. if (!item.groupFlag) {
  1057. this.form.singleScenicList.push({
  1058. scenicId: item.scenicId,
  1059. checkLimitTimes: item.checkLimitTimes,
  1060. singleDayLimitTimes: item.singleDayLimitTimes
  1061. })
  1062. } else {
  1063. if (groupFlag !== item.groupFlag) {
  1064. groupFlag = item.groupFlag
  1065. groupIndex += 1
  1066. this.form.groupScenicList.push({
  1067. scenicId: [item.scenicId],
  1068. checkLimitTimes: item.checkLimitTimes,
  1069. scenicLimitTimes: item.scenicLimitTimes,
  1070. singleDayLimitTimes: item.singleDayLimitTimes
  1071. })
  1072. } else {
  1073. this.form.groupScenicList[groupIndex - 1].scenicId.push(item.scenicId)
  1074. }
  1075. }
  1076. })
  1077. }
  1078. // 复制票种功能
  1079. if (this.dialogType === 'add' && this.ticketItem) {
  1080. // '创建票种失败,名称或助记符重复' 需要在此之前去掉名称和助记符,待复制时用户填入
  1081. this.codeCopyFromVisibleEdit() // 执行与edit一样的操作,要确保传过来的ticketItem把ID信息去了
  1082. }
  1083. if (typeof this.form.requiredField === 'string') {
  1084. this.form.requiredField = JSON.parse(this.form.requiredField)
  1085. } else {
  1086. this.form.requiredField = []
  1087. }
  1088. if (this.form && this.form.discountRule) {
  1089. // 初始化满减
  1090. let result = this.parseDiscountRule(this.form.discountRule)
  1091. this.man = result ? result.man : this.man
  1092. this.jian = result ? result.jian : this.jian
  1093. }
  1094. if (this.projectName === 'hangzhousuodao') {
  1095. this.getQueue()
  1096. }
  1097. this.visible = true
  1098. },
  1099. updateDiscountRule: function () {
  1100. let man = parseInt(this.man)
  1101. let jian = parseInt(this.jian)
  1102. let form = this.form
  1103. form.discountRule = '满' + man + '减' + jian
  1104. },
  1105. // 从满10减1这种字符串里提取出10和1
  1106. parseDiscountRule (discountRule) {
  1107. let pattern = /满(\d+)减(\d+)/ // 定义正则表达式
  1108. let match = discountRule.match(pattern) // 使用 match() 方法匹配字符串
  1109. if (match) {
  1110. let man = parseInt(match[1]) // 第一个括号中的数字为满减条件
  1111. let jian = parseInt(match[2]) // 第二个括号中的数字为满减金额
  1112. return { man, jian }
  1113. }
  1114. return null // 如果匹配失败,则返回 null
  1115. },
  1116. getLabelName,
  1117. // isScenicDisabled (id) {
  1118. // return this.form.singleScenicList.some(s => s.scenicId === id)
  1119. // },
  1120. handleClose () {
  1121. this.visible = false
  1122. this.reset()
  1123. this.$emit('updateList')
  1124. },
  1125. reset () {
  1126. this.$refs.form.resetFields()
  1127. this.form = { ...defaultForm }
  1128. this.form.singleScenicList = []
  1129. this.form.groupScenicList = []
  1130. },
  1131. handleMemberChange (e) {
  1132. let target = this.memberTypeList.find(i => i.id === e)
  1133. this.form.price = target.capital
  1134. this.form.name = target.name
  1135. },
  1136. // 增加 适用景点-检票次数
  1137. handleAdd (type) {
  1138. if (type === 'multiple') {
  1139. this.form.groupScenicList.push({
  1140. scenicId: [],
  1141. checkLimitTimes: -1,
  1142. singleDayLimitTimes: -1,
  1143. scenicLimitTimes: -1
  1144. })
  1145. } else {
  1146. this.form.singleScenicList.push({
  1147. scenicId: '',
  1148. checkLimitTimes: -1,
  1149. singleDayLimitTimes: -1,
  1150. scenicLimitTimes: -1
  1151. })
  1152. }
  1153. },
  1154. setSceneTimes (idx, item) {
  1155. if (!item || !item.scenicId || !item.scenicId.length) {
  1156. return this.$message.error('请先添加适用景点')
  1157. }
  1158. this.groupIndex = idx
  1159. const groupScenic = this.groupScenicMap.get(idx)
  1160. if (groupScenic) {
  1161. this.currGroupScenicInfo = groupScenic
  1162. } else {
  1163. this.currGroupScenicInfo = []
  1164. item.scenicId.forEach(id => {
  1165. const scene = this.scenicList.find((scene) => scene.id === id)
  1166. if (scene) {
  1167. this.currGroupScenicInfo.push({
  1168. scenicId: scene.id,
  1169. scenicName: scene.name,
  1170. scenicLimitTimes: -1,
  1171. singleDayLimitTimes: -1,
  1172. checkLimitTimes: item.checkLimitTimes
  1173. })
  1174. }
  1175. })
  1176. }
  1177. this.setTimeVisible = true
  1178. },
  1179. handleGroupTimeClose () {
  1180. this.currGroupScenicInfo = []
  1181. this.setTimeVisible = false
  1182. },
  1183. handleGroupTimeSubmit () {
  1184. this.groupScenicMap.set(this.groupIndex, this.currGroupScenicInfo)
  1185. this.currGroupScenicInfo = []
  1186. this.setTimeVisible = false
  1187. },
  1188. // 删除 适用景点-检票次数
  1189. delScenic (index, type) {
  1190. if (type === 'multiple') {
  1191. this.form.groupScenicList.splice(index, 1)
  1192. } else {
  1193. this.form.singleScenicList.splice(index, 1)
  1194. }
  1195. },
  1196. isScenicValid () {
  1197. if (this.form.singleScenicList.length === 0 && this.form.groupScenicList.length === 0) {
  1198. this.$message.error('请添加适用景点')
  1199. return false
  1200. } else if (this.form.singleScenicList.some(item => !item.scenicId)) {
  1201. this.$message.error('适用景点信息错误')
  1202. return false
  1203. } else if (this.form.groupScenicList.some(item => !item.scenicId.length)) {
  1204. this.$message.error('适用景点信息错误')
  1205. return false
  1206. } else {
  1207. return true
  1208. }
  1209. },
  1210. handleAddBachConfig () {
  1211. this.form.batchConfigList.push({ ...this.batchConfig })
  1212. },
  1213. deleteBachConfig (index, row) {
  1214. if (row.id) {
  1215. this.$confirm('确定删除场次时间配置?', '提示', {
  1216. confirmButtonText: '确定',
  1217. cancelButtonText: '取消',
  1218. type: 'warning'
  1219. }).then(() => {
  1220. delTicketBatch([row.id]).then(res => {
  1221. if (res.code === '200') {
  1222. this.$message.success('删除成功')
  1223. this.form.batchConfigList.splice(index, 1)
  1224. }
  1225. })
  1226. }).catch(() => {})
  1227. } else {
  1228. this.form.batchConfigList.splice(index, 1)
  1229. }
  1230. },
  1231. async saveAllBatchConfig () {
  1232. const ticketTypeId = this.form.id
  1233. if (!ticketTypeId) {
  1234. return
  1235. }
  1236. batchUpdateTicketBatch(ticketTypeId, this.form.batchConfigList).then(res => {
  1237. if (res.code !== '200') {
  1238. this.$message.error('场次保存失败')
  1239. }
  1240. })
  1241. },
  1242. setGroupScenicConfig () {
  1243. const gsList = []
  1244. const { groupScenicList } = this.form
  1245. for (let i = 0; i < groupScenicList.length; i++) {
  1246. const item = groupScenicList[i]
  1247. const sList = this.groupScenicMap.get(i) || item.scenicId.map(scenicId => {
  1248. return {
  1249. scenicId,
  1250. checkLimitTimes: item.checkLimitTimes,
  1251. singleDayLimitTimes: item.singleDayLimitTimes || -1,
  1252. scenicLimitTimes: item.scenicLimitTimes || -1
  1253. }
  1254. })
  1255. gsList.push(sList)
  1256. }
  1257. this.form.groupScenicList = gsList
  1258. },
  1259. async submit () {
  1260. this.$refs.form.validate(valid => {
  1261. // 会员不检查景点
  1262. const {
  1263. price,
  1264. useDateStart,
  1265. useDateEnd,
  1266. isSaleDateLimit,
  1267. saleDateStart,
  1268. saleDateEnd,
  1269. category,
  1270. batchConfigList
  1271. } = this.form
  1272. if (valid) {
  1273. if (isNaN(Number(price)) || price < 0) {
  1274. this.$message.error('请填写销售价格')
  1275. return
  1276. }
  1277. if (moment(useDateStart).isAfter(useDateEnd)) {
  1278. this.$message.error('游玩开始时间不可晚于游玩截止时间')
  1279. return
  1280. }
  1281. if (isSaleDateLimit === 1 && moment(saleDateStart).isAfter(saleDateEnd)) {
  1282. this.$message.error('起售时间不可晚于停售时间')
  1283. return
  1284. }
  1285. if (moment(useDateStart).isAfter(useDateEnd)) {
  1286. this.$message.error('游玩开始时间不可晚于游玩截止时间')
  1287. return
  1288. }
  1289. if (isSaleDateLimit === 1 && moment(saleDateEnd).isAfter(useDateEnd)) {
  1290. this.$message.error('停售时间不可晚于游玩截止时间')
  1291. return
  1292. }
  1293. if (isSaleDateLimit === 1 && moment(saleDateStart).isAfter(useDateStart)) {
  1294. this.$message.error('起售时间不可晚于游玩开始时间')
  1295. return
  1296. }
  1297. if (category === 'batch') {
  1298. if (batchConfigList.length === 0) {
  1299. this.$message.error('请添加场次时间')
  1300. return
  1301. }
  1302. if (batchConfigList.some(item => !item.name)) {
  1303. this.$message.error('场次名称不能为空')
  1304. return
  1305. }
  1306. if (batchConfigList.some(item => !item.startTime)) {
  1307. this.$message.error('场次开始时间不能为空')
  1308. return
  1309. }
  1310. if (batchConfigList.some(item => !item.endTime)) {
  1311. this.$message.error('场次结束时间不能为空')
  1312. return
  1313. }
  1314. }
  1315. if (!this.isScenicValid()) {
  1316. return
  1317. }
  1318. this.saveAllBatchConfig()
  1319. // if (moment('2019-01-21 ' + this.form.useDateStart).isAfter('2019-01-21 ' + this.form.useDateEnd)) {
  1320. // this.$message.error('当日游玩开始时间不可晚于结束时间')
  1321. // return
  1322. // }
  1323. // this.form.saleDateStart = this.formatStartTime(this.form.saleDateStart)
  1324. // this.form.saleDateEnd = this.formatEndTime(this.form.saleDateEnd)
  1325. // this.form.useDateStart = this.formatStartTime(this.form.useDateStart)
  1326. // this.form.useDateEnd = this.formatEndTime(this.form.useDateEnd)
  1327. // this.form.requiredField = JSON.stringify(this.form.requiredField)
  1328. // form.useDayOfWeek.join is not a function"
  1329. this.form.price = Number(price)
  1330. this.form.useDayOfWeek = this.form.useDayOfWeek?.join(',')
  1331. this.form.checkRule = this.form.checkRule.join(',')
  1332. this.form.checkType = this.form.checkType.join(',')
  1333. this.setGroupScenicConfig()
  1334. switch (this.dialogType) {
  1335. case 'add':
  1336. this.addTicket()
  1337. break
  1338. case 'edit':
  1339. this.updateTicket()
  1340. break
  1341. }
  1342. } else {
  1343. console.log('error submit!!')
  1344. this.$message.error('请补充表单内容')
  1345. return false
  1346. }
  1347. })
  1348. },
  1349. addTicket () {
  1350. this.form.creator = this.$store.state.user.name
  1351. addTicket(this.form).then(res => {
  1352. if (res.code !== '200') {
  1353. this.$message.error(res.msg || '添加失败')
  1354. } else {
  1355. this.$message.success('添加成功')
  1356. this.reset()
  1357. this.handleClose()
  1358. this.$emit('updateList')
  1359. }
  1360. })
  1361. },
  1362. updateTicket () {
  1363. updateTicket(this.form).then(res => {
  1364. if (res.code !== '200') {
  1365. this.$message.error(res.msg || '保存失败')
  1366. } else {
  1367. this.$message.success('保存成功')
  1368. this.reset()
  1369. this.handleClose()
  1370. this.$emit('updateList')
  1371. }
  1372. })
  1373. },
  1374. showInput () {
  1375. this.inputVisible = true
  1376. },
  1377. handleInputConfirm () {
  1378. let inputValue = this.inputValue
  1379. if (inputValue.length) {
  1380. this.form.dateCheckRules.push({ useDateStart: inputValue[0], useDateEnd: inputValue[1] })
  1381. }
  1382. this.inputVisible = false
  1383. this.inputValue = []
  1384. },
  1385. getQueue () {
  1386. queueList({ pageNum: 1, pageSize: 9999 }).then(res => {
  1387. this.queueList = res?.data.list
  1388. })
  1389. },
  1390. formatStartTime (time) {
  1391. return moment(time).hour(0).minute(0).second(0).toDate()
  1392. },
  1393. formatEndTime (time) {
  1394. return moment(time).hour(23).minute(59).second(59).toDate()
  1395. },
  1396. // 从visible的edit那边抄过来的大段代码
  1397. codeCopyFromVisibleEdit () {
  1398. delete this.form.id
  1399. }
  1400. }
  1401. }
  1402. </script>
  1403. <style lang="scss">
  1404. .el-dialog {
  1405. margin-top: 5vh !important;
  1406. .form-wrap .el-input {
  1407. width: auto !important;
  1408. }
  1409. }
  1410. .el-scrollbar__wrap {
  1411. overflow-x: hidden;
  1412. }
  1413. </style>
  1414. <style scoped lang="scss">
  1415. .table-box{
  1416. width: calc(100% - 40px);
  1417. margin-top: 0;
  1418. }
  1419. .el-tag + .el-tag {
  1420. margin-left: 10px;
  1421. }
  1422. .button-new-tag {
  1423. margin-left: 10px;
  1424. height: 32px;
  1425. line-height: 30px;
  1426. padding-top: 0;
  1427. padding-bottom: 0;
  1428. }
  1429. .input-new-tag {
  1430. width: 90px;
  1431. margin-left: 10px;
  1432. vertical-align: bottom;
  1433. }
  1434. </style>