send.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787
  1. <template>
  2. <view class="sendBox">
  3. <view class="title" v-if="info.userRefundSign" @click="skipList(info.orderNo)">
  4. <view class="acea-row row-middle">
  5. <text class="iconfont icon-shuoming2"></text>
  6. <view>该订单存在处理中售后,请点击查看</view>
  7. </view>
  8. <text class="iconfont icon-xiangyou"></text>
  9. </view>
  10. <view class="list">
  11. <view>
  12. <text>订单编号:</text><text>{{info.orderNo}}</text>
  13. </view>
  14. <view v-if="sendIndex!=4">
  15. <text>配送方式:</text>
  16. <picker :disabled="type==2" mode="selector" :range="sendTypeArray" @change="sendPickerChange">
  17. <view>{{ sendTypeArray[sendIndex] }}<text v-if="type!=2" class="iconfont icon-xiangyou"></text>
  18. </view>
  19. </picker>
  20. </view>
  21. <view v-if="sendIndex==4">
  22. <text>配送方式:</text>
  23. <view class="">
  24. 虚拟发货
  25. </view>
  26. </view>
  27. <view v-if="sendIndex==0&&templateShow=='1'">
  28. <text>发货类型:</text>
  29. <picker mode="selector" :range="expressSendType" @change="expressSendTypeChange">
  30. <view>{{ (expressSendType.length&&expressSendType[expressSendTypeIndex])||'' }}<text
  31. class="iconfont icon-xiangyou"></text></view>
  32. </picker>
  33. </text>
  34. </view>
  35. <view v-if="sendIndex==0&&expressSendTypeIndex==1">
  36. <text>寄件人姓名:</text><input v-model="saveData.toName" class="input-text textarea-small" type="text"
  37. placeholder-class="placeholderInput" placeholder="此处填写寄件人姓名" />
  38. </view>
  39. <view v-if="sendIndex==0&&expressSendTypeIndex==1">
  40. <text>寄件人电话:</text><input v-model="saveData.toTel" class="input-text textarea-small" type="text"
  41. placeholder-class="placeholderInput" placeholder="此处填写寄件人电话" />
  42. </view>
  43. <view v-if="sendIndex==0&&expressSendTypeIndex==1">
  44. <text>寄件人地址:</text><input v-model="saveData.toAddr" class="input-text textarea-small" type="text"
  45. placeholder-class="placeholderInput" placeholder="此处填写寄件人地址" />
  46. </view>
  47. <view v-if="sendIndex==0">
  48. <text>快递公司:</text>
  49. <picker mode="selector" range-key='name' :range="expressArray" @change="bindPickerChange">
  50. <view>{{ (expressArray.length&&expressArray[index].name)||'' }}<text
  51. class="iconfont icon-xiangyou"></text></view>
  52. </picker>
  53. </text>
  54. </view>
  55. <view v-if="sendIndex==0&&expressSendTypeIndex==1">
  56. <text>电子面单:</text>
  57. <picker mode="selector" range-key='title' :range="templateArray" @change="templateChange">
  58. <view>{{ (templateArray.length&&templateArray[templateIndex].title)||'' }}<text
  59. class="iconfont icon-xiangyou"></text><text v-if="templateArray.length" @click.stop="preview" class="preview">预览</text>
  60. </view>
  61. </picker>
  62. </text>
  63. </view>
  64. <view v-if="sendIndex==0&&expressSendTypeIndex==0">
  65. <text>快递单号:</text>
  66. <view class="acea-row row-middle">
  67. <input v-model="saveData.expressNumber" class="input-text" type="text" maxlength="40"
  68. placeholder-class="placeholderInput" placeholder="请输入"></input>
  69. <text @click="scanCode" class="iconfont icon-ic_Scan"></text>
  70. </view>
  71. </view>
  72. <view v-if="sendIndex==1">
  73. <text>发货备注:</text><textarea v-model="saveData.deliveryMark" class="input-text textarea" type="text"
  74. placeholder-class="placeholderInput" placeholder="此处填写发货备注" />
  75. </view>
  76. <view v-if="sendIndex==2">
  77. <text>配送人员:</text>
  78. <picker mode="selector" range-key='personnelName' :range="deliveryPersonnelList"
  79. @change="deliveryPersonneChange">
  80. <view>
  81. {{ saveData.deliveryCarrier||'' }}<text class="iconfont icon-xiangyou"></text>
  82. </view>
  83. </picker>
  84. </text>
  85. </view>
  86. <view v-if="sendIndex==2">
  87. <text>手机号:</text><input v-model="saveData.carrierPhone" disabled="true" class="input-text" type="text"
  88. placeholder-class="placeholderInput" placeholder="请输入手机号" />
  89. </view>
  90. <view v-if="sendIndex==4">
  91. <text>发货备注:</text><textarea v-model="saveData.deliveryMark" class="input-text textarea" type="text"
  92. placeholder-class="placeholderInput" placeholder="此处填写发货备注" />
  93. </view>
  94. </view>
  95. <view class="split-wrapper" v-if="info.totalNum>1&&type==1&&sendIndex!=4">
  96. <view class="split-switch acea-row row-between-wrapper">
  97. <view>分单发货</view>
  98. <view class="switch" :class="{ on: curGoods }" @click="changeGoods"></view>
  99. </view>
  100. <splitOrder :select_all="false" :splitGoods="splitGoods" @getList="getList" v-if="curGoods"></splitOrder>
  101. </view>
  102. <view class="height-add"></view>
  103. <view class="confirm-wrapper">
  104. <view class="confirm-wrapper-num">
  105. <text v-if="type==1">共{{num}}件</text>
  106. </view>
  107. <view v-if="type==1" class="confirm" @click="saveInfo">确认发货</view>
  108. <view v-else class="confirm" @click="updateInfo">确认修改</view>
  109. </view>
  110. </view>
  111. </template>
  112. <script>
  113. import Cache from '@/utils/cache';
  114. import {
  115. orderInvoiceListInfo
  116. } from '@/api/order.js';
  117. import {
  118. Debounce
  119. } from '@/utils/validate.js'
  120. import {
  121. expressSearchPage,
  122. employeeOrderInvoiceUpdate,
  123. deliveryPersonnelApi,
  124. employeeExpressTemplate,
  125. employeeExpressElectInfo
  126. } from '@/api/work.js'
  127. import {
  128. employeeOrderSend,
  129. employeeOrderInfo,
  130. employeeInvoiceList
  131. } from '@/api/work.js'
  132. import splitOrder from '../components/splitOrder/index.vue'
  133. export default {
  134. components: {
  135. splitOrder
  136. },
  137. data() {
  138. return {
  139. info: {},
  140. index: 0,
  141. sendIndex: 0,
  142. expressArray: [],
  143. curGoods: 0,
  144. splitGoods: [],
  145. cartIds: [],
  146. expressSendType: ['手动填写', '电子面单'],
  147. saveData: {
  148. "expressRecordType": 1,
  149. "orderNo": '',
  150. "deliveryType": "express",
  151. "isSplit": "",
  152. "detailList": [{
  153. "num": 0,
  154. "orderDetailId": 0
  155. }],
  156. "expressCode": "",
  157. "expressNumber": "",
  158. "deliveryMark": "",
  159. "deliveryCarrier": "",
  160. "carrierPhone": "",
  161. "id": '',
  162. "toName": '',
  163. "toTel": '',
  164. "toAddr": '',
  165. "expressTempId": ''
  166. },
  167. sendTypeArray: ['快递配送', '无需发货', '商家送货'],
  168. expressType: ['express', 'noNeed', 'merchant'],
  169. //1-发货 2-编辑
  170. type: 1,
  171. //配送方式
  172. deliveryType: '',
  173. orderNo: '',
  174. orderIndex: '',
  175. deliveryPersonnelList: [], //配送人员
  176. personneIndex: 0,
  177. expressSendTypeIndex: 0,
  178. templateArray: [],
  179. templateIndex: 0,
  180. templateShow:Cache.get('electrPrintingSwitch') ,
  181. }
  182. },
  183. computed: {
  184. num() {
  185. let sum = 0
  186. if (this.curGoods) {
  187. this.cartIds.forEach(value => {
  188. sum += value.num
  189. })
  190. } else {
  191. let list = this.info.orderDetailList
  192. if (list) {
  193. list.forEach(item => {
  194. sum += (item.payNum - item.deliveryNum - item.refundNum)
  195. })
  196. }
  197. }
  198. return sum
  199. }
  200. },
  201. created() {
  202. this.expressAll('1')
  203. },
  204. onLoad(options) {
  205. this.initOrderInfo(options.orderNo)
  206. this.updateInit(options)
  207. this.getDeliveryPersonnel(options)
  208. this.getElectInfo()
  209. },
  210. methods: {
  211. getElectInfo(){
  212. employeeExpressElectInfo().then(res=>{
  213. this.saveData.toName=res.data.senderUsername;
  214. this.saveData.toTel=res.data.senderPhone;
  215. this.saveData.toAddr=res.data.senderAddr;
  216. })
  217. },
  218. preview() {
  219. uni.previewImage({
  220. current: 0,
  221. urls: [this.templateArray[this.templateIndex].pic],
  222. longPressActions: {
  223. fail: function(err) {
  224. console.log(err.errMsg);
  225. }
  226. }
  227. })
  228. },
  229. //配送人员列表
  230. async getDeliveryPersonnel(options) {
  231. let {
  232. data
  233. } = await deliveryPersonnelApi({
  234. limit: 99999,
  235. page: 1
  236. })
  237. this.deliveryPersonnelList = data.list
  238. if (options.index != 0) {
  239. this.saveData.deliveryCarrier = this.deliveryPersonnelList[this.personneIndex].personnelName
  240. this.saveData.carrierPhone = this.deliveryPersonnelList[this.personneIndex].personnelPhone
  241. }
  242. },
  243. //配送人员选择
  244. deliveryPersonneChange: function(e) {
  245. this.personneIndex = e.detail.value
  246. this.saveData.deliveryCarrier = this.deliveryPersonnelList[e.detail.value].personnelName
  247. this.saveData.carrierPhone = this.deliveryPersonnelList[e.detail.value].personnelPhone
  248. },
  249. updateInit(options) {
  250. if (options.type) {
  251. this.type = options.type
  252. this.orderNo = options.orderNo
  253. this.orderIndex = options.index
  254. this.getInfo(options.orderNo, options.index)
  255. }
  256. },
  257. getInfo(orderNo, index) {
  258. orderInvoiceListInfo(orderNo).then(res => {
  259. this.sendIndex = res.data.invoiceList[index].deliveryType == 'merchant' ? 2 : 1
  260. this.saveData.deliveryMark = res.data.invoiceList[index].deliveryMark
  261. this.saveData.deliveryCarrier = res.data.invoiceList[index].deliveryCarrier
  262. this.saveData.carrierPhone = res.data.invoiceList[index].carrierPhone
  263. this.saveData.id = res.data.invoiceList[index].id
  264. })
  265. },
  266. // 扫码
  267. scanCode() {
  268. var self = this;
  269. // #ifdef MP || APP
  270. uni.scanCode({
  271. scanType: ['barCode'],
  272. success(res) {
  273. self.saveData.expressNumber = res.result;
  274. }
  275. })
  276. // #endif
  277. //#ifdef H5
  278. if (this.$wechat.isWeixin()) {
  279. this.$wechat.wechatEvevt('scanQRCode', {
  280. needResult: 1,
  281. scanType: ["barCode"]
  282. }).then(res => {
  283. let result = res.resultStr;
  284. if (result.includes(',')) {
  285. result = result.split(",")[1]
  286. }
  287. self.saveData.expressNumber = result
  288. })
  289. } else {
  290. return self.$util.Tips({
  291. title: '扫码仅支持小程序/公众号/APP',
  292. endtime: 2000,
  293. });
  294. }
  295. //#endif
  296. },
  297. skipList(orderNo) {
  298. uni.navigateTo({
  299. url: `/pages/admin/skipRefund/index?orderNo=${orderNo}`
  300. })
  301. },
  302. expressAll(flag) {
  303. expressSearchPage({
  304. openStatus: true
  305. }).then(res => {
  306. if (res.data.list.length) {
  307. this.expressArray = res.data.list
  308. flag == '1' && (this.saveData.expressCode = this.expressArray[0].code)
  309. } else {
  310. return this.$util.Tips({
  311. title: '请先配置物流公司~',
  312. endtime: 2000,
  313. });
  314. }
  315. })
  316. },
  317. getList(val) {
  318. let that = this;
  319. that.splitGoods = JSON.parse(JSON.stringify(val));
  320. let cartIds = [];
  321. val.forEach((item) => {
  322. if (item.checked) {
  323. let i = {
  324. orderDetailId: item.id,
  325. num: item.surplus_num
  326. }
  327. cartIds.push(i)
  328. }
  329. })
  330. this.cartIds = cartIds;
  331. },
  332. // 点击获取拆单列表
  333. changeGoods() {
  334. this.curGoods = this.curGoods ? 0 : 1;
  335. if (this.curGoods) {
  336. this.splitList();
  337. }
  338. },
  339. splitList() {
  340. let list = this.info.orderDetailList
  341. list.forEach((item) => {
  342. item.checked = false
  343. item.surplus_num = item.payNum - item.deliveryNum - item.refundNum
  344. item.numShow = item.payNum - item.deliveryNum - item.refundNum
  345. })
  346. this.splitGoods = list;
  347. },
  348. initOrderInfo(orderNo) {
  349. employeeOrderInfo(orderNo).then(res => {
  350. this.info = res.data
  351. this.saveData.orderNo = this.info.orderNo
  352. if (this.info.secondType == 2) {
  353. this.sendIndex = 4
  354. }
  355. })
  356. },
  357. bindPickerChange: function(e) {
  358. this.index = e.detail.value
  359. this.saveData.expressCode = this.expressArray[e.detail.value].code
  360. if (this.expressSendTypeIndex == 1) {
  361. this.getTemplate(this.expressArray[e.detail.value].code)
  362. this.templateIndex = 0
  363. }
  364. },
  365. getTemplate(code) {
  366. employeeExpressTemplate({
  367. com: code
  368. }).then(res => {
  369. this.templateArray = res.data.data.data
  370. })
  371. },
  372. expressSendTypeChange: function(e) {
  373. this.expressSendTypeIndex = e.detail.value
  374. this.getTemplate(this.expressArray[0].code)
  375. this.templateIndex = 0
  376. },
  377. templateChange: function(e) {
  378. this.templateIndex = e.detail.value
  379. },
  380. sendPickerChange: function(e) {
  381. this.sendIndex = e.detail.value
  382. this.saveData.deliveryType = this.expressType[this.sendIndex]
  383. },
  384. //确认提交
  385. saveInfo: Debounce(function() {
  386. this.saveData.expressTempId = this.templateArray[this.templateIndex]?.temp_id
  387. // 是否分单
  388. if (this.curGoods) {
  389. this.saveData.detailList = this.cartIds
  390. this.saveData.isSplit = true
  391. } else {
  392. this.saveData.isSplit = false
  393. let arr = []
  394. let list = this.info.orderDetailList
  395. list.forEach(item => {
  396. arr.push({
  397. orderDetailId: item.attrValueId,
  398. num: item.payNum - item.deliveryNum - item.refundNum
  399. })
  400. })
  401. this.saveData.detailList = arr
  402. }
  403. if (this.sendIndex == 0 && this.expressSendTypeIndex == 1) {
  404. // 提交校验
  405. if (!this.saveData.toAddr || !this.saveData.toName || !this.saveData.toTel) {
  406. return this.$util.Tips({
  407. title: '请将信息填写完整'
  408. })
  409. }
  410. if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.saveData.toTel)) {
  411. return this.$util.Tips({
  412. title: '请输入正确寄件人电话'
  413. })
  414. }
  415. }
  416. if (this.sendIndex == 0 && this.expressSendTypeIndex == 0) {
  417. // 提交校验
  418. if (!this.saveData.expressNumber) {
  419. return this.$util.Tips({
  420. title: '请输入快递单号'
  421. })
  422. } else if (!this.saveData.detailList.length) {
  423. return this.$util.Tips({
  424. title: '请先选择商品'
  425. })
  426. }
  427. }
  428. if (this.sendIndex == 1) {
  429. // 提交校验
  430. if (!this.saveData.deliveryMark) {
  431. // return this.$util.Tips({
  432. // title: '请输入商家备注'
  433. // })
  434. } else if (!this.saveData.detailList.length) {
  435. return this.$util.Tips({
  436. title: '请先选择商品'
  437. })
  438. }
  439. }
  440. if (this.sendIndex == 2) {
  441. // 提交校验
  442. if (!this.saveData.deliveryCarrier) {
  443. return this.$util.Tips({
  444. title: '请输入配送人姓名'
  445. })
  446. } else if (!this.saveData.detailList.length) {
  447. return this.$util.Tips({
  448. title: '请先选择商品'
  449. })
  450. } else if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.saveData.carrierPhone)) {
  451. return this.$util.Tips({
  452. title: '请输入正确手机号码'
  453. })
  454. }
  455. }
  456. if (this.sendIndex == 4) {
  457. this.saveData.deliveryType = 'noNeed'
  458. }
  459. //参数处理
  460. if (this.expressSendTypeIndex == 1) {
  461. this.expressSendTypeIndex = 2
  462. this.saveData.expressRecordType=2
  463. } else if (this.expressSendTypeIndex == 0) {
  464. this.expressSendTypeIndex = 1
  465. this.saveData.expressRecordType=1
  466. }
  467. employeeOrderSend(this.saveData).then(res => {
  468. if (res.code == 200) {
  469. this.$util.Tips({
  470. title: '操作成功'
  471. })
  472. setTimeout(() => {
  473. uni.navigateBack({
  474. delta: 1,
  475. });
  476. }, 500)
  477. }
  478. }).catch(err => {
  479. return this.$util.Tips({
  480. title: err
  481. })
  482. })
  483. if (this.expressSendTypeIndex == 2) {
  484. this.expressSendTypeIndex = 1
  485. this.saveData.expressRecordType=1
  486. } else if (this.expressSendTypeIndex == 1) {
  487. this.expressSendTypeIndex = 0
  488. this.saveData.expressRecordType=0
  489. }
  490. }),
  491. // 修改配送信息
  492. updateInfo() {
  493. employeeOrderInvoiceUpdate(this.saveData).then(res => {
  494. this.$util.Tips({
  495. title: '操作成功',
  496. endtime: 1000,
  497. })
  498. setTimeout(() => {
  499. uni.redirectTo({
  500. url: `/pages/admin/logistics/record?orderNo=${this.orderNo}&index=${this.orderIndex}`
  501. })
  502. }, 500)
  503. })
  504. }
  505. }
  506. }
  507. </script>
  508. <style scoped lang="scss">
  509. /deep/.uni-checkbox-input.uni-checkbox-input-checked {
  510. border: 1px solid #2A7EFB !important;
  511. background-color: #2A7EFB !important;
  512. color: #FFF !important;
  513. }
  514. /deep/.wx-checkbox-input.wx-checkbox-input-checked {
  515. border: 1px solid #2A7EFB !important;
  516. background-color: #2A7EFB !important;
  517. color: #FFF !important;
  518. }
  519. .sendBox {
  520. padding: 20rpx;
  521. .title {
  522. display: flex;
  523. align-items: center;
  524. justify-content: space-between;
  525. background: #E5EFFE;
  526. border-radius: 14rpx;
  527. padding: 28rpx 24rpx;
  528. font-family: PingFang SC, PingFang SC;
  529. font-weight: 400;
  530. font-size: 26rpx;
  531. color: #2A7EFB;
  532. margin-bottom: 20rpx;
  533. }
  534. .list {
  535. padding: 28rpx 24rpx;
  536. border-radius: 14rpx;
  537. font-size: 28rpx;
  538. background-color: #FFF;
  539. // margin-top: 20rpx;
  540. &>view {
  541. padding: 20rpx 0;
  542. display: flex;
  543. justify-content: space-between;
  544. input {
  545. font-weight: 400;
  546. font-size: 14px;
  547. color: #999999;
  548. }
  549. }
  550. }
  551. .operate {
  552. padding: 28rpx 24rpx;
  553. border-radius: 14rpx;
  554. background-color: #FFF;
  555. margin-top: 20rpx;
  556. .operate-btn {
  557. display: flex;
  558. align-items: center;
  559. justify-content: space-between;
  560. }
  561. .operate-goods {
  562. margin-top: 20rpx;
  563. .operate-goods-item {
  564. display: flex;
  565. align-items: center;
  566. justify-content: space-between;
  567. .icon-a-ic_CompleteSelect,
  568. .icon-weixuanzhong {
  569. color: #2A7EFB;
  570. }
  571. .goods-info {
  572. display: flex;
  573. .img {
  574. width: 136rpx;
  575. height: 136rpx;
  576. border-radius: 16rpx;
  577. }
  578. .info {
  579. display: flex;
  580. flex-direction: column;
  581. justify-content: space-between;
  582. margin-left: 10rpx;
  583. &>view {
  584. width: 350rpx;
  585. overflow: hidden;
  586. /* 确保超出容器的文本被裁剪 */
  587. white-space: nowrap;
  588. /* 确保文本在一行内显示 */
  589. text-overflow: ellipsis;
  590. /* 使用省略号表示文本溢出 */
  591. }
  592. .name {
  593. font-size: 28rpx;
  594. color: #333333;
  595. }
  596. .sku {
  597. font-size: 22rpx;
  598. color: #999999;
  599. }
  600. .num {
  601. font-size: 22rpx;
  602. text {
  603. color: #2A7EFB;
  604. }
  605. }
  606. }
  607. }
  608. .num-operate {
  609. height: 130rpx;
  610. display: flex;
  611. align-items: end;
  612. .num-operate-box {
  613. display: flex;
  614. align-items: center;
  615. .ipt {
  616. text-align: center;
  617. width: 50rpx;
  618. background: #F5F5F5;
  619. border-radius: 4rpx;
  620. margin: 0 10rpx;
  621. }
  622. .iconfont {
  623. font-size: 28rpx;
  624. }
  625. }
  626. }
  627. }
  628. }
  629. }
  630. }
  631. .split-wrapper {
  632. border-radius: 24rpx;
  633. margin-top: 20rpx;
  634. background: #FFFFFF;
  635. .splitOrder {
  636. padding: 0 24rpx 46rpx;
  637. margin: 0;
  638. }
  639. }
  640. .split-switch {
  641. padding: 40rpx 24rpx;
  642. font-size: 28rpx;
  643. color: #333333;
  644. .switch {
  645. position: relative;
  646. width: 79rpx;
  647. height: 48rpx;
  648. padding: 4rpx;
  649. border-radius: 24rpx;
  650. background: #DDDDDD;
  651. transition: background 0.1s, border 0.1s;
  652. line-height: 48rpx;
  653. &::after {
  654. content: "";
  655. position: absolute;
  656. top: 4rpx;
  657. left: 4rpx;
  658. width: 40rpx;
  659. height: 40rpx;
  660. border-radius: 20rpx;
  661. background: #FFFFFF;
  662. box-shadow: 0 3rpx 6rpx 0 rgba(0, 0, 0, 0.08);
  663. transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
  664. }
  665. &.on {
  666. background: #2A7EFB;
  667. &::after {
  668. transform: translateX(31rpx);
  669. }
  670. }
  671. }
  672. }
  673. .height-add {
  674. height: 120rpx;
  675. }
  676. .confirm-wrapper {
  677. position: fixed;
  678. left: 0;
  679. bottom: 0;
  680. bottom: constant(safe-area-inset-bottom);
  681. bottom: env(safe-area-inset-bottom);
  682. width: 100%;
  683. padding: 20rpx;
  684. display: flex;
  685. justify-content: space-between;
  686. height: 100rpx;
  687. line-height: 100rpx;
  688. background: #fff;
  689. }
  690. .confirm {
  691. width: 160rpx;
  692. height: 64rpx;
  693. font-weight: 500;
  694. font-size: 28rpx;
  695. color: #fff;
  696. border-radius: 40rpx;
  697. background: #2A7EFB;
  698. text-align: center;
  699. line-height: 64rpx;
  700. }
  701. .confirm-wrapper-num {
  702. height: 60rpx;
  703. line-height: 60rpx;
  704. }
  705. .placeholderInput {
  706. text-align: right;
  707. width: 100%;
  708. font-size: 28rpx;
  709. }
  710. .icon-xiangyou {
  711. font-size: 28rpx !important;
  712. color: #999;
  713. }
  714. .icon-shuoming2 {
  715. margin-right: 6rpx !important;
  716. }
  717. .input-text {
  718. text-align: right !important;
  719. white-space: normal;
  720. }
  721. /deep/.split-switch .switch::after {
  722. top: 4rpx;
  723. }
  724. .icon-ic_Scan {
  725. color: #2A7EFB;
  726. margin-left: 12rpx;
  727. }
  728. .textarea {
  729. width: 400rpx;
  730. height: 80rpx;
  731. }
  732. .preview {
  733. font-weight: 400;
  734. font-size: 14px;
  735. color: #2A7EFB;
  736. }
  737. .textarea-small{
  738. width: 400rpx;
  739. height: 38rpx;
  740. line-height: 38rpx;
  741. }
  742. </style>