sel-order.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. <template>
  2. <div class="sel-order">
  3. <!-- 抽屉 -->
  4. <el-drawer
  5. title="发货管理"
  6. :visible.sync="showShipManage"
  7. size="440px"
  8. :before-close="closeFn"
  9. custom-class="ship-draw-wrap"
  10. >
  11. <div class="ship-manage-wrap">
  12. <!-- 订单详情 -->
  13. <div class="order-info-wrap">
  14. <div class="order-info-left">
  15. <div class="info-list">
  16. <div class="label">订单号</div>
  17. <div class="val">{{ orderData.orderSn }}</div>
  18. </div>
  19. <div class="info-list">
  20. <div class="label">下单客户</div>
  21. <div class="val">{{ orderData.bookName }}</div>
  22. </div>
  23. <div class="info-list">
  24. <div class="label">下单时间</div>
  25. <div class="val">{{ orderData.addTime | formatTime }}</div>
  26. </div>
  27. <div class="info-list" v-if="!$util.isEmpty(orderData.goodsInfoList)">
  28. <div class="label">商品名称</div>
  29. <div class="val">{{ orderData.goodsInfoList[0].title }}</div>
  30. </div>
  31. <div class="info-list">
  32. <div class="label">金额</div>
  33. <div class="val">{{ orderData.actPrice }}</div>
  34. </div>
  35. </div>
  36. <div class="order-info-right" v-if="!$util.isEmpty(orderData.goodsInfoList)">
  37. <img :src="orderData.goodsInfoList[0].smallCoverUrl" alt="商品图" />
  38. </div>
  39. </div>
  40. <!-- 时间线 -->
  41. <el-timeline>
  42. <!-- :timestamp="activity.timestamp" -->
  43. <el-timeline-item v-for="(item, index) in shipData" :key="index">
  44. <!-- title -->
  45. <div class="title-wrap">
  46. <div class="title">{{ item.actionName }}</div>
  47. <div class="time" v-if="item.finishTime != 0">
  48. {{ item.finishTime | formatTime }}
  49. </div>
  50. </div>
  51. <!-- content -->
  52. <div class="content-wrap">
  53. <!-- 打单 -->
  54. <template v-if="item.actionName == '打单'">
  55. <div v-if="$util.isEmpty(item.receive) && index == 0">
  56. <el-button type="primary" @click="printOrderFn(index)"
  57. >有配送单</el-button
  58. >
  59. <el-button type="primary" @click="fillFormFn">填单</el-button>
  60. </div>
  61. <div v-else>
  62. <!-- <span>配送用户信息</span> -->
  63. <card-name
  64. v-if="!$util.isEmpty(item.receive)"
  65. :info="item.receive"
  66. />
  67. <span v-else>配送信息未登记</span>
  68. <div style="margin-top: 10px" v-if="!$util.isEmpty(item.receive)">
  69. <el-button size="mini" @click="printOrderFn(index)">{{
  70. index == 0 ? '打印' : '重打'
  71. }}</el-button>
  72. </div>
  73. </div>
  74. </template>
  75. <!-- 发货 -->
  76. <template v-if="item.actionName == '发货'">
  77. <div v-if="item.finishTime == 0">
  78. <el-button type="primary" @click="sendShipFn"
  79. >确认发货</el-button
  80. >
  81. </div>
  82. <div v-else>
  83. <template v-if="!$util.isEmpty(item.sendInfo)">
  84. <div class="label-list">
  85. 配送方:{{ item.sendInfo.sendSideName }}
  86. </div>
  87. <div class="label-list">
  88. 距离:{{ item.sendInfo.sendDistance }}km
  89. </div>
  90. <div class="label-list">
  91. 运费:¥{{ item.sendInfo.sendCost }}
  92. </div>
  93. <div class="label-list">
  94. 小费:¥{{ item.sendInfo.sendTip }}
  95. </div>
  96. </template>
  97. <template v-else>
  98. <div class="label-list">
  99. <span class="label">配送方:</span>
  100. <span class="value">自己送</span>
  101. </div>
  102. </template>
  103. </div>
  104. </template>
  105. <!-- 送达 -->
  106. <template v-if="item.actionName == '送达'">
  107. <div v-if="item.finishTime == 0">
  108. <el-popover
  109. placement="top"
  110. width="160"
  111. v-model="confirmSendVisit">
  112. <p>确认已送达?</p>
  113. <div style="text-align: right; margin: 0">
  114. <el-button size="mini" type="text" @click="confirmSendVisit = false">取消</el-button>
  115. <el-button type="primary" size="mini" @click="orderReachFn">确定</el-button>
  116. </div>
  117. <el-button slot="reference" class="el-button el-button--primary" >确认送达</el-button>
  118. </el-popover>
  119. <div class="prompt-text">确认后会自动通知客户已送达~</div>
  120. </div>
  121. </template>
  122. <!-- 订单分类 -->
  123. <template v-if="item.actionName == '完成'">
  124. <div v-if="!$util.isEmpty(item.classify)">
  125. <div class="label-list">
  126. 订单分类:{{ item.classify.category }}
  127. </div>
  128. <div class="label-list">用途:{{ item.classify.usage }}</div>
  129. </div>
  130. <div v-else>
  131. <el-button type="primary" @click="orderClassFn"
  132. >订单分类</el-button
  133. >
  134. </div>
  135. </template>
  136. </div>
  137. </el-timeline-item>
  138. </el-timeline>
  139. </div>
  140. </el-drawer>
  141. <!-- 填单 -->
  142. <el-dialog
  143. title="填单"
  144. :visible.sync="orderDialog"
  145. :close-on-click-modal="false"
  146. width="1000px"
  147. >
  148. <div class="order-modal-content">
  149. <el-form
  150. :model="orderForm"
  151. :rules="ruleForm"
  152. ref="orderForm"
  153. label-width="100px"
  154. class="demo-form"
  155. >
  156. <div class="form-wrap">
  157. <!-- 左侧 -->
  158. <div class="form-left-wrap">
  159. <el-form-item label="收花人姓名" prop="receiveUserName">
  160. <el-input
  161. v-model="orderForm.receiveUserName"
  162. placeholder="请输入姓名"
  163. size="small"
  164. ></el-input>
  165. </el-form-item>
  166. <el-form-item label="收花人电话" prop="receiveMobile">
  167. <el-input
  168. v-model="orderForm.receiveMobile"
  169. placeholder="请输入电话"
  170. size="small"
  171. ></el-input>
  172. </el-form-item>
  173. <el-form-item label="收花人城市" prop="receiveProvince">
  174. <el-cascader
  175. v-model="addressArr"
  176. :options="addressOptions"
  177. :props="addressProps"
  178. size="small"
  179. @change="handleChange"
  180. style="width: 100%"
  181. ></el-cascader>
  182. </el-form-item>
  183. <el-form-item label="详细地址" prop="receiveFullAddress">
  184. <el-autocomplete
  185. v-model="orderForm.receiveFullAddress"
  186. :fetch-suggestions="querySearchAsync"
  187. placeholder="请输入内容"
  188. @select="addressFn"
  189. size="small"
  190. style="width: 100%"
  191. ></el-autocomplete>
  192. <!-- <el-input
  193. type="textarea"
  194. v-model="orderForm.receiveFullAddress"
  195. placeholder="小区、大厦或街道名称"
  196. size="small"
  197. ></el-input> -->
  198. </el-form-item>
  199. <el-form-item label="门牌号" prop="receiveFloor">
  200. <el-input
  201. v-model="orderForm.receiveFloor"
  202. placeholder="楼号门牌号(选填)"
  203. size="small"
  204. ></el-input>
  205. </el-form-item>
  206. <!-- <el-form-item label="商品名称" prop="adminName">
  207. <el-input
  208. v-model="orderForm.adminName"
  209. placeholder="填了名称看打印单就知道商品"
  210. size="small"
  211. ></el-input>
  212. </el-form-item>
  213. <el-form-item label="商品图片" prop="adminName">
  214. <cl-upload v-model="orderForm.adImg"></cl-upload>
  215. <i class="prompt-text">有商品图看打印单就知道商品的花材和包装纸</i>
  216. </el-form-item> -->
  217. </div>
  218. <!-- 右侧 -->
  219. <div class="form-left-wrap">
  220. <el-form-item label="订花人电话" prop="bookMobile">
  221. <el-input
  222. v-model="orderForm.bookMobile"
  223. placeholder="请输入电话(选填)"
  224. size="small"
  225. ></el-input>
  226. </el-form-item>
  227. <el-form-item label="送达时间" prop="reachTime">
  228. <el-date-picker
  229. type="date"
  230. placeholder="选择开始日期"
  231. v-model="orderForm.reachTime"
  232. value-format="yyyy-MM-dd"
  233. style="width: 100%;"
  234. size="small"
  235. ></el-date-picker>
  236. <el-radio-group v-model="orderForm.reachPeriod">
  237. <el-radio label="0">上午</el-radio>
  238. <el-radio label="1">下午</el-radio>
  239. <el-radio label="2">晚上</el-radio>
  240. </el-radio-group>
  241. </el-form-item>
  242. <el-form-item label="带贺卡"
  243. ><el-switch
  244. v-model="orderForm.needCard"
  245. active-value="1"
  246. inactive-value="0"
  247. ></el-switch>
  248. <template v-if="orderForm.needCard == '1'">
  249. <el-input
  250. v-model="orderForm.cardInfo"
  251. placeholder="输入贺卡内容,留空将寄出空白贺卡"
  252. size="small"
  253. ></el-input>
  254. </template>
  255. </el-form-item>
  256. <el-form-item label="其它备注" prop="remark">
  257. <el-input
  258. v-model="orderForm.remark"
  259. placeholder="选填"
  260. size="small"
  261. ></el-input>
  262. </el-form-item>
  263. <el-form-item label="匿名派送"
  264. ><el-switch
  265. v-model="orderForm.anonymity"
  266. active-value="1"
  267. inactive-value="0"
  268. ></el-switch>
  269. </el-form-item>
  270. </div>
  271. </div>
  272. </el-form>
  273. </div>
  274. <div slot="footer" class="dialog-footer">
  275. <el-button size="small" @click="resetForm">取 消</el-button>
  276. <el-button type="primary" size="small" @click="submitOrderFn">确认</el-button>
  277. </div>
  278. </el-dialog>
  279. <!-- 发货弹窗 -->
  280. <el-dialog
  281. title="确认发货?"
  282. :visible.sync="shipDialog"
  283. :close-on-click-modal="false"
  284. width="400px"
  285. >
  286. <div class="ship-modal-content">
  287. <el-form
  288. :model="shipForm"
  289. :rules="shipRuleForm"
  290. ref="shipForm"
  291. label-width="100px"
  292. class="demo-form"
  293. >
  294. <el-form-item label="快递代送"
  295. ><el-switch
  296. v-model="shipForm.sendType"
  297. active-value="1"
  298. inactive-value="0"
  299. ></el-switch>
  300. </el-form-item>
  301. <template v-if="shipForm.sendType == 1">
  302. <el-form-item label="送花时间" prop="sendTime">
  303. <el-time-select
  304. v-model="shipForm.sendTime"
  305. :picker-options="{
  306. start: '08:00',
  307. step: '00:10',
  308. end: '24:00'
  309. }"
  310. placeholder="选择时间"
  311. size="samll"
  312. style="width: 100%"
  313. >
  314. </el-time-select>
  315. </el-form-item>
  316. <el-form-item label="配送方" prop="sendSide">
  317. <el-select
  318. v-model="shipForm.sendSide"
  319. placeholder="请选择"
  320. size="samll"
  321. style="width: 100%"
  322. >
  323. <el-option
  324. v-for="item in sendSideOpt"
  325. :key="item.value"
  326. :label="item.label"
  327. :value="item.value"
  328. >
  329. </el-option>
  330. </el-select>
  331. </el-form-item>
  332. </template>
  333. </el-form>
  334. </div>
  335. <div slot="footer" class="dialog-footer">
  336. <el-button size="small" @click="resetForm">取 消</el-button>
  337. <el-button type="primary" size="small" @click="submitShipFn">确认</el-button>
  338. </div>
  339. </el-dialog>
  340. <!-- 订单分类 -->
  341. <el-dialog
  342. title="订单分类"
  343. :visible.sync="categoryDialog"
  344. :close-on-click-modal="false"
  345. width="600px"
  346. >
  347. <div class="category-dialog-wrap">
  348. <el-form
  349. :model="categoryForm"
  350. :rules="categoryRule"
  351. ref="categoryForm"
  352. label-width="100px"
  353. class="demo-form"
  354. >
  355. <el-form-item label="选择分类" prop="categoryId">
  356. <el-radio-group v-model="categoryForm.categoryId">
  357. <el-radio
  358. border
  359. v-for="(item, index) in categoryData"
  360. :label="item.id"
  361. :key="index"
  362. size="small"
  363. >{{ item.categoryName }}</el-radio
  364. >
  365. </el-radio-group>
  366. </el-form-item>
  367. <el-form-item label="选择用途" prop="usageId">
  368. <el-radio-group v-model="categoryForm.usageId">
  369. <el-radio
  370. border
  371. v-for="(item, index) in usageData"
  372. :label="item.id"
  373. :key="index"
  374. size="small"
  375. >{{ item.usageName }}</el-radio
  376. >
  377. </el-radio-group>
  378. </el-form-item>
  379. </el-form>
  380. </div>
  381. <div slot="footer" class="dialog-footer">
  382. <el-button size="small" @click="resetForm">取 消</el-button>
  383. <el-button type="primary" size="small" @click="orderClassConfirmFn">确认</el-button>
  384. </div>
  385. </el-dialog>
  386. <!-- 配送单 -->
  387. <div class="print-html">
  388. <table border="1" width="780" style="border:solid 1px black;border-collapse:collapse">
  389. <tr>
  390. <td style="padding: 10px;width: 100px;">配送时间:</td>
  391. <td style="padding-left: 10px;" colspan="2">{{ deliver.data.reachDate }}</td>
  392. <td style="padding-left: 10px;width: 100px;">订单号:</td>
  393. <td style="padding-left: 10px;" colspan="2">{{ deliver.data.orderSn }}</td>
  394. </tr>
  395. <tr>
  396. <td style="padding-left: 10px;width: 100px;">收花人姓名:</td>
  397. <td style="padding-left: 10px;width: 130px;">
  398. {{ deliver.data.receiveUserName }}
  399. </td>
  400. <td style="padding-left: 10px;width: 100px;">收花人电话:</td>
  401. <td style="padding-left: 10px;width: 130px;">
  402. {{ deliver.data.receiveMobile }}
  403. </td>
  404. <td style="padding-left: 10px;" colspan="2" rowspan="4">
  405. <div style="text-align: center;padding-top: 1px">
  406. <p>情人节</p>
  407. <img
  408. style="width: 100px;height: 100px;margin-bottom: 20px"
  409. class="cover"
  410. :src="deliver.data.img"
  411. alt=""
  412. />
  413. </div>
  414. </td>
  415. </tr>
  416. <tr>
  417. <td style="padding-left: 10px;width: 100px;">收花人地址:</td>
  418. <td style="padding-left: 10px" colspan="3">
  419. {{ deliver.data.receiveFullAddress }}
  420. </td>
  421. </tr>
  422. <tr>
  423. <td style="padding-left: 10px;width: 100px;">祝福语:</td>
  424. <td style="padding-left: 10px" colspan="3">{{ deliver.data.cardInfo }}</td>
  425. </tr>
  426. <tr>
  427. <td style="padding-left: 10px;width: 100px;">订花人姓名:</td>
  428. <td style="padding-left: 10px;width: 130px;">{{ deliver.data.bookName }}</td>
  429. <td style="padding-left: 10px;width: 100px;">订花人电话:</td>
  430. <td style="padding-left: 10px;width: 130px;">{{ deliver.data.bookMobile }}</td>
  431. </tr>
  432. <tr>
  433. <td style="padding: 10px;width: 100px;">备注说明:</td>
  434. <td style="padding-left: 10px" colspan="5">{{ deliver.data.remark }}</td>
  435. </tr>
  436. </table>
  437. </div>
  438. </div>
  439. </template>
  440. <script>
  441. import { mapGetters } from 'vuex';
  442. import cardName from './card-name';
  443. import { getLodop } from '@/utils/lodop';
  444. export default {
  445. name: 'sel-order',
  446. components: {
  447. cardName
  448. },
  449. props: {
  450. orderData: {
  451. type: Object,
  452. default: () => {}
  453. }
  454. },
  455. data() {
  456. return {
  457. // draw
  458. showShipManage: false,
  459. shipData: [],
  460. // dialog
  461. // 打单信息
  462. relateData: {},
  463. confirmSendVisit:false,
  464. orderDialog: false,
  465. orderForm: {
  466. receiveUserName: '', // 收花人姓名;到店自提的姓名
  467. receiveMobile: '', // 收花人手机;到店自提的电话;
  468. receiveProvince: '', // 收花人省份
  469. receiveCity: '', // 收花人城市
  470. receiveAddress: '', // 收花人地址
  471. receiveFloor: '', // 收花人门楼号和牌号
  472. receiveFullAddress: '', // 收花人完整地址,从腾讯地图接口获取
  473. // bookName: '', // 订花人姓名
  474. bookMobile: '', // 订花人手机号
  475. reachTime: '', // 配送时间
  476. reachPeriod: '0', // 配送时段,0上午1下午2晚上
  477. needCard: '1', // 是否要贺卡 0不要 1要
  478. cardInfo: '', // 贺卡信息
  479. remark: '', // 备注
  480. anonymity: '0', // 是否匿名 0不 1要
  481. latitude: 0,
  482. longitude: 0
  483. },
  484. addressArr: [],
  485. ruleForm: {},
  486. addressOptions: [],
  487. addressProps: {
  488. label: 'name',
  489. value: 'name',
  490. children: 'children'
  491. },
  492. // 发货弹窗
  493. shipDialog: false,
  494. shipForm: {
  495. sendType: '0',
  496. sendTime: '',
  497. sendSide: ''
  498. },
  499. shipRuleForm: {},
  500. sendSideOpt: [
  501. {
  502. label: '达达配送',
  503. value: 1
  504. }
  505. ],
  506. // 订单分类
  507. categoryDialog: false,
  508. categoryForm: {
  509. categoryId: '',
  510. usageId: ''
  511. },
  512. categoryRule: {},
  513. deliver: {
  514. visible: false,
  515. data: {}
  516. }
  517. };
  518. },
  519. computed: {
  520. ...mapGetters({ categoryData: 'category' }),
  521. ...mapGetters({ usageData: 'usage', shopInfo: 'shopInfo' })
  522. },
  523. methods: {
  524. init() {
  525. this.getDet();
  526. this.$service.order.orderRelate().then(res => {
  527. this.relateData = res;
  528. let region = res.region;
  529. let newRegion = [];
  530. if (region.length > 0) {
  531. for (let i in region) {
  532. newRegion.push({
  533. id: region[i].id,
  534. name: region[i].name,
  535. children: []
  536. });
  537. if (region[i].children && region[i].children.length > 0) {
  538. for (let j in region[i].children) {
  539. newRegion[i].children.push({
  540. id: region[i].children[j].id,
  541. name: region[i].children[j].name
  542. });
  543. }
  544. }
  545. }
  546. }
  547. this.addressOptions = newRegion;
  548. let shopProvince = res.shop.province || '';
  549. let shopCity = res.shop.city || '';
  550. this.addressArr = [shopProvince, shopCity];
  551. this.orderForm.receiveProvince = shopProvince;
  552. this.orderForm.receiveCity = shopCity;
  553. this.orderForm.receiveAddress = shopProvince + shopCity;
  554. this.orderForm.latitude = res.shop.shopLat || 0;
  555. this.orderForm.longitude = res.shop.shopLong || 0;
  556. });
  557. },
  558. getDet() {
  559. this.$service.single.orderSendDet({ id: this.orderData.id }).then(res => {
  560. this.shipData = res;
  561. this.showShipManage = true;
  562. });
  563. },
  564. // dialog
  565. querySearchAsync(queryString, cb) {
  566. if (!this.orderForm.receiveCity) {
  567. this.$message.error('请先选择收花人地址');
  568. cb([]);
  569. return false;
  570. }
  571. if (!queryString) {
  572. cb([]);
  573. return false;
  574. }
  575. this.$service.single
  576. .mapSuggestion({ region: this.orderForm.receiveCity, keyword: queryString })
  577. .then(res => {
  578. let newArr = res.data;
  579. newArr = newArr.map(e => {
  580. e.value = e.address;
  581. return e;
  582. });
  583. cb(newArr);
  584. });
  585. },
  586. addressFn(item) {
  587. this.orderForm.latitude = item.location.lat;
  588. this.orderForm.longitude = item.location.lng;
  589. this.orderForm.receiveAddress = item.title;
  590. },
  591. submitOrderFn() {
  592. this.$service.order
  593. .orderSheet({
  594. id: this.orderData.id,
  595. ...this.orderForm
  596. })
  597. .then(res => {
  598. this.getDet();
  599. this.resetForm();
  600. });
  601. },
  602. handleChange(value) {
  603. console.log('value', value);
  604. this.orderForm.receiveProvince = value[0];
  605. this.orderForm.receiveCity = value[1];
  606. this.orderForm.receiveAddress = value[0] + value[1];
  607. },
  608. resetForm() {
  609. try {
  610. this.$refs['orderForm'].resetFields();
  611. } catch (e) {}
  612. try {
  613. this.$refs['shipForm'].resetFields();
  614. } catch (e) {}
  615. try {
  616. this.$refs['categoryForm'].resetFields();
  617. } catch (e) {}
  618. this.shipDialog = false;
  619. this.categoryDialog = false;
  620. this.orderDialog = false;
  621. },
  622. // draw
  623. closeFn() {
  624. this.showShipManage = false;
  625. },
  626. // =========================
  627. // 打单
  628. async printOrderFn(index) {
  629. if (index == '0') {
  630. await this.$service.single.printOrder({ id: this.orderData.id, option: 1 });
  631. }
  632. //this.$message.success('打单成功!');
  633. this.getDet();
  634. this.$service.order.deliver({ id: this.orderData.id }).then(res => {
  635. this.deliver.data = res;
  636. //this.printOrder();
  637. });
  638. },
  639. // 填单
  640. fillFormFn() {
  641. this.orderDialog = true;
  642. },
  643. // 发货
  644. sendShipFn() {
  645. this.shipDialog = true;
  646. },
  647. // 确认发货
  648. submitShipFn() {
  649. this.$service.single
  650. .orderDeliver({ id: this.orderData.id, option: 1, ...this.shipForm })
  651. .then(res => {
  652. this.getDet();
  653. // this.shipDialog = false;
  654. this.resetForm();
  655. });
  656. },
  657. // 确认送达
  658. orderReachFn() {
  659. this.$service.single.orderReach({ id: this.orderData.id, option: 1 }).then(res => {
  660. this.$message.success('已确认!');
  661. this.getDet();
  662. this.confirmSendVisit=false;
  663. //操作栏置空
  664. this.$set(this.orderData, 'status', '5');
  665. this.$set(this.orderData, 'currentFlow', this.orderData.totalFlow);
  666. });
  667. },
  668. // 订单分类
  669. orderClassFn() {
  670. this.categoryDialog = true;
  671. },
  672. // 确认订单分类
  673. orderClassConfirmFn() {
  674. if (!this.categoryForm.categoryId || !this.categoryForm.usageId) {
  675. this.$message.error('请先选择分类或者用途!');
  676. return false;
  677. }
  678. this.$service.single
  679. .orderClass({ id: this.orderData.id, ...this.categoryForm })
  680. .then(res => {
  681. this.$message.success('订单分类成功!');
  682. this.getDet();
  683. // this.categoryDialog = false;
  684. this.resetForm();
  685. });
  686. },
  687. // 打印配置
  688. printOrder() {
  689. this.deliver.visible = true;
  690. this.$nextTick(() => {
  691. let LODOP = getLodop();
  692. LODOP.PRINT_INIT('配送单');
  693. LODOP.SET_PRINT_STYLE('FontSize', 12);
  694. LODOP.ADD_PRINT_TEXT(470, 10, 350, 200, `店铺地址:${this.shopInfo.address}`);
  695. LODOP.ADD_PRINT_TEXT(470, 400, 350, 600, `电话:${this.deliver.data.telephone}`);
  696. LODOP.ADD_PRINT_TEXT(
  697. 470,
  698. 590,
  699. 470,
  700. 600,
  701. `制单时间:${this.deliver.data.printTime}`
  702. );
  703. LODOP.SET_PRINT_STYLE('FontSize', 20);
  704. LODOP.SET_PRINT_STYLE('Bold', 1);
  705. LODOP.ADD_PRINT_TEXT(150, 10, 790, 30, `${this.shopInfo.merchantName}配送单`);
  706. LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2);
  707. LODOP.SET_PRINT_STYLE('FontSize', 12);
  708. LODOP.ADD_PRINT_TEXT(160, 500, 100, 20, `No ${this.deliver.data.sendNum}`);
  709. LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2);
  710. LODOP.ADD_PRINT_HTM(
  711. 200,
  712. 10,
  713. 790,
  714. 600,
  715. document.querySelector('.print-html').innerHTML
  716. );
  717. LODOP.PREVIEW();
  718. // LODOP.PRINT();
  719. });
  720. }
  721. }
  722. };
  723. </script>
  724. <style lang="scss" scoped>
  725. .sel-order {
  726. .ship-manage-wrap {
  727. padding: 20px;
  728. border-top: 1px solid $borderColor;
  729. }
  730. .order-info-wrap {
  731. font-size: 14px;
  732. margin-bottom: 34px;
  733. padding: 4px;
  734. background-color: #f5f7fa;
  735. @include disFlex(center, space-between);
  736. .order-info-left {
  737. .info-list {
  738. @include disFlex(center, flex-start);
  739. margin: 4px 0;
  740. .label {
  741. width: 70px;
  742. color: #999;
  743. }
  744. }
  745. }
  746. .order-info-right {
  747. width: 88px;
  748. height: 88px;
  749. }
  750. }
  751. // ==================
  752. .title-wrap {
  753. @include disFlex(center, flex-start);
  754. .title {
  755. font-size: 16px;
  756. font-weight: bold;
  757. margin-right: 10px;
  758. }
  759. .time {
  760. font-size: 14px;
  761. color: #666;
  762. }
  763. }
  764. .content-wrap {
  765. margin-top: 10px;
  766. }
  767. .prompt-text {
  768. font-size: 12px;
  769. margin-top: 6px;
  770. }
  771. .label-list {
  772. font-size: 12px;
  773. margin: 4px 0;
  774. }
  775. // dialog
  776. .category-dialog-wrap {
  777. .el-radio {
  778. margin-bottom: 6px;
  779. }
  780. }
  781. .order-modal-content {
  782. .form-wrap {
  783. @include disFlex(flex-start, space-between);
  784. & > div {
  785. width: 49%;
  786. }
  787. }
  788. .prompt-text {
  789. font-size: 12px;
  790. }
  791. }
  792. }
  793. </style>
  794. <style lang="scss">
  795. .ship-draw-wrap {
  796. .el-drawer__header {
  797. margin-bottom: 20px;
  798. span{
  799. outline:none;
  800. }
  801. }
  802. }
  803. .print-html {
  804. position: absolute;
  805. left: 0;
  806. top: -5000px;
  807. }
  808. </style>