transfer.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798
  1. <template>
  2. <!-- 调拨钢瓶 -->
  3. <view>
  4. <u-navbar title="钢瓶调拨" autoBack placeholder></u-navbar>
  5. <view class="card_transfer">
  6. <!-- <view style="display: flex;align-items: center;" @click="allotSweep" v-if="allotFlag">
  7. <view class="tran_title">扫描调拨码</view>
  8. <u-icon name="scan" size="30"></u-icon>
  9. </view> -->
  10. <view style="display: flex; align-items: center;">
  11. <u-button style="margin-right: 30rpx;" color="#19be6b" type="success" text="选择接收人信息"
  12. @click="selectiveFlow"></u-button>
  13. <u-button type="success" color="#19be6b" text="扫描调拨码" icon="scan" @click="allotSweep"></u-button>
  14. </view>
  15. <!-- <view class="card_assigner_aaf" @click="selectDispatcher"> -->
  16. <view class="card_assigner_aaf" :class="haveSelected ? 'greyMaskCard' : ''" v-if="assignerFlag">
  17. <view class="step_title">流转步骤</view>
  18. <view class="flow_step_title">{{ userList.flowName || '调拨流转步骤信息' }}</view>
  19. <view class="step_title">接收人信息</view>
  20. <view class="card_avatar" style="margin-top: 10rpx;">
  21. <view style="display: flex;align-items: center;">
  22. <image class="mine_image" src="../../static/portrait.png" mode=""></image>
  23. <view class="card_user_title">
  24. <view class="mine_phone">{{userList.name || '接收人姓名'}}</view>
  25. <view class="mine_phone">{{userList.shopName || '接收人所属门店'}}</view>
  26. </view>
  27. </view>
  28. </view>
  29. </view>
  30. <!-- <view class="white_card center_in">
  31. <u-icon name="plus" size="40" color="#5ac725"></u-icon>
  32. </view> -->
  33. <!-- </view> -->
  34. <view class="cylinder_ccsfs frame">
  35. <view style="display: flex;align-items: center;justify-content: flex-end;margin-bottom: 10rpx;">
  36. <view class="blue_titleil">总数: {{totality}}</view>
  37. <view class="green_title">已选: {{checkedList.length}}</view>
  38. </view>
  39. <view class="space_between">
  40. <view class="tran_title">单位内编号</view>
  41. <view style="display: flex;flex-direction: column;">
  42. <view style="display: flex;align-items: center;">
  43. <view class="blue_titleil" @click="checkAll">全选</view>
  44. <view class="blue_titleilred" @click="Inverse">反选</view>
  45. <view class="card_right_num">
  46. <span class="blue_title">选择前</span>
  47. <view class="num_card">
  48. <u--input class="input_taaf" v-model="codeValue" type="number" fontSize="12"
  49. inputAlign="center" border="surround" @blur="howMany"></u--input>
  50. </view>
  51. <span class="blue_title">个</span>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <view style="margin: 10px 0px 0px 0px;">
  57. <u-search v-model="cylinderNumber" shape="square" :showAction="false" placeholder="请输入单位内编码"
  58. borderColor="#e4e7ed" bgColor="#fff" @change="quickSearch"></u-search>
  59. </view>
  60. </view>
  61. <view style="width: 100%;" v-if="list.length > 0">
  62. <u-checkbox-group v-model="checkedList" @change="checkboxChange">
  63. <view style="width: 100%;display: flex;flex-direction: column;">
  64. <view class="card_dinay frame" v-for="(item,index) in list" :key="index">
  65. <u-checkbox :name="item.inner_code" :checked="item.checked"></u-checkbox>
  66. <view style="display: flex;align-items: center;margin-left: 20rpx;">
  67. <view class="item_current">{{index + 1}}</view>
  68. <view class="item_title1">{{item.inner_code}}</view>
  69. </view>
  70. </view>
  71. </view>
  72. </u-checkbox-group>
  73. </view>
  74. <view style="margin-top: 20%;" v-else>
  75. <u-empty mode="list" text="暂无钢瓶"></u-empty>
  76. </view>
  77. </view>
  78. <view style="width: 100%;height: 120rpx;"></view>
  79. <view class="card_btn">
  80. <u-button style="margin-bottom: 20rpx;" type="primary" @click="submit">提交</u-button>
  81. </view>
  82. <u-popup :show="assignerShow" mode="center" round="8" closeable @close="close">
  83. <view style="margin-top: 60rpx;padding: 30rpx;width: 400rpx;">
  84. <u-button type="primary" text="选择接收人信息" @click="selectiveFlow1"></u-button>
  85. <u-button type="primary" text="扫描调拨码" icon="scan" style="margin-top: 20rpx;"
  86. @click="allotSweep"></u-button>
  87. </view>
  88. </u-popup>
  89. <u-popup :show="flowStepShow" :closeOnClickOverlay="false" mode="center" round="8" closeable @close="close">
  90. <view style="padding: 30rpx;width: 600rpx;">
  91. <view class="title_step">选择流转步骤<span>*</span></view>
  92. <view class="card_recipient frame_recip" @click="flowStepFocus">
  93. <span
  94. :style="{color:flowStepData.title ? '#000000' : '#c8c9cc'}">{{flowStepData.title || '选择流转步骤'}}</span>
  95. <u-icon name="arrow-down" size="18"></u-icon>
  96. </view>
  97. <view v-if="flowStepData.title">
  98. <view class="title_step">选择门店<span>*</span></view>
  99. <view class="card_recipient frame_recip" @click="shopFocus">
  100. <span :style="{color:shopData.title ? '#000000' : '#c8c9cc'}">{{'选择门店'}}</span>
  101. <u-icon name="arrow-down" size="18"></u-icon>
  102. </view>
  103. </view>
  104. <view v-if="shopData.title">
  105. <view class="title_step">选择接收人<span>*</span></view>
  106. <view class="card_recipient frame_recip" @click="recipientFocus">
  107. <span :style="{color:recipientData.title ? '#000000' : '#c8c9cc'}">{{'选择接收人'}}</span>
  108. <u-icon name="arrow-down" size="18"></u-icon>
  109. </view>
  110. </view>
  111. <u-button type="primary" text="确定" style="margin-top: 30rpx;" @click="allotSweep"></u-button>
  112. <u-picker :show="show" :columns="columns" @confirm="confirm" @cancel="flowCancel"></u-picker>
  113. </view>
  114. </u-popup>
  115. </view>
  116. </template>
  117. <script>
  118. export default {
  119. data() {
  120. return {
  121. totality: 0,
  122. checkedList: [],
  123. list: [],
  124. current: null,
  125. assignerFlag: true,
  126. assignerData: [],
  127. flowStep: [{
  128. id: '13',
  129. title: '气站确认空瓶到达气站'
  130. }, {
  131. id: '016',
  132. title: '气站确认重瓶到达气站'
  133. }, {
  134. id: '17',
  135. title: '司机确认重瓶从气站出库'
  136. }, {
  137. id: '11',
  138. title: '司机确认空瓶装车'
  139. }, {
  140. id: '033',
  141. title: '司机确认空瓶从门店出库'
  142. }, {
  143. id: '31',
  144. title: '门店确认重瓶卸货入库'
  145. }, {
  146. id: '35',
  147. title: '门店确认未配送重瓶返库'
  148. }, {
  149. id: '21',
  150. title: '门店回收空瓶'
  151. }, {
  152. id: '25',
  153. title: '送气员重瓶出库'
  154. }, {
  155. id: 'Unqualified',
  156. title: '回收不合格钢瓶'
  157. }],
  158. Pagination: {
  159. PageIndex: 1,
  160. PageSize: 20,
  161. Total: 0,
  162. },
  163. loadingMore: true,
  164. codeValue: '',
  165. allotFlag: true,
  166. cylinderNumber: '',
  167. assignerShow: false,
  168. flowStepShow: false,
  169. show: false,
  170. columns: [],
  171. userList: {
  172. name: '',
  173. userId: '',
  174. shopID: '',
  175. shopName: '',
  176. flowId: '',
  177. flowName: '',
  178. },
  179. // 1-扫码调拨 2-一键调拨
  180. allotType: 2,
  181. // 流转步骤
  182. flowStepData: {
  183. id: '',
  184. title: '',
  185. },
  186. // 门店
  187. shopData: {},
  188. // 接收人
  189. recipientData: {},
  190. }
  191. },
  192. watch: {
  193. list: {
  194. handler: function(newUser, oldUser) {
  195. if (newUser) {
  196. let arr = newUser
  197. for (let i = 0; i < arr.length; i++) {
  198. let flag = this.checkedList.includes(arr[i].inner_code);
  199. if (flag) {
  200. arr[i].checked = true
  201. }
  202. }
  203. this.list = arr
  204. }
  205. },
  206. deep: true
  207. }
  208. },
  209. computed: {
  210. // 定义计算属性totalPrice
  211. haveSelected: function() {
  212. let arr = false
  213. if (this.userList.userId) {
  214. arr = false
  215. } else {
  216. arr = true
  217. }
  218. return arr
  219. }
  220. },
  221. onShow() {
  222. const data = uni.getStorageSync('returnData');
  223. if (data) {
  224. const userArr = JSON.parse(data)
  225. this.userList = {
  226. ...userArr
  227. }
  228. console.log('携带的参数:', this.userList);
  229. uni.removeStorage({
  230. key: 'returnData'
  231. });
  232. }
  233. },
  234. onReachBottom() {
  235. if (!this.loadingMore) {
  236. this.getList()
  237. }
  238. },
  239. onLoad(value) {
  240. this.current = value.status
  241. if (value.allotFlag == 'false') {
  242. this.allotFlag = false
  243. } else {
  244. this.allotFlag = true
  245. }
  246. },
  247. mounted() {
  248. this.getList()
  249. },
  250. methods: {
  251. // 获取列表
  252. getList() {
  253. this.loadingMore = true
  254. this.$api.get('/api/gas-cylinder-status', {
  255. page: this.Pagination.PageIndex,
  256. pageSize: this.Pagination.PageSize,
  257. status: this.current,
  258. inner_code: this.cylinderNumber,
  259. }).then(res => {
  260. if (res.code == 200) {
  261. this.totality = res.data.count
  262. const data = res.data.list
  263. data.forEach(item => {
  264. if (!item.checked) {
  265. item.checked = false
  266. }
  267. })
  268. if (this.loadingMore == true && data) {
  269. this.list = this.list.concat(data);
  270. }
  271. if (data.length < this.Pagination.PageSize) {
  272. this.loadingMore = true
  273. } else {
  274. this.loadingMore = false
  275. this.Pagination.PageIndex++
  276. }
  277. }
  278. })
  279. },
  280. // 快捷搜索
  281. quickSearch(value) {
  282. const arrValue = this.$cache.getCache('checkedList')
  283. if (arrValue) {
  284. this.checkedList = this.$cache.getCache('checkedList')
  285. }
  286. this.list = []
  287. this.getList()
  288. },
  289. // 选择调拨人、调拨步骤
  290. selectDispatcher() {
  291. this.assignerShow = true
  292. },
  293. // 选择接收人信息
  294. selectiveFlow() {
  295. this.allotType = 2
  296. uni.navigateTo({
  297. url: '/pages/information/flowStep?current=' + this.current
  298. });
  299. },
  300. selectiveFlow1() {
  301. this.assignerShow = false
  302. this.flowStepShow = true
  303. },
  304. // 流转步骤
  305. flowStepFocus() {
  306. var userInfo = this.$cache.getCache('userInfo')
  307. this.show = true
  308. this.columns = []
  309. let arrData = []
  310. if (userInfo.provUser) {
  311. if (userInfo.provUser.isorders == 0 && userInfo.provUser.userType == 3) {
  312. // 送气员端
  313. if (this.current == '1') {
  314. arrData.push('门店确认未配送重瓶返库')
  315. } else if (this.current == '2') {
  316. arrData.push('门店回收空瓶')
  317. } else {
  318. arrData.push('门店回收不合格瓶')
  319. }
  320. } else if (userInfo.provUser.userType == 3) {
  321. // 门店端
  322. if (this.current == '1') {
  323. let arrmd = ['送气员领重瓶出库', '司机确认重瓶从门店出库']
  324. arrData = arrmd
  325. } else if (this.current == '2') {
  326. arrData.push('司机确认空瓶装车')
  327. } else {
  328. arrData.push('司机回收不合格瓶')
  329. }
  330. } else if (userInfo.provUser.userType == 4) {
  331. // 司机端
  332. if (this.current == '1') {
  333. let arrsj = ['门店确认重瓶卸货入库', '气站确认重瓶到达气站']
  334. arrData = arrsj
  335. } else if (this.current == '2') {
  336. arrData.push('气站确认空瓶到达气站')
  337. } else {
  338. let arrsjbhg = ['门店回收不合格瓶', '气站回收不合格瓶']
  339. arrData = arrsjbhg
  340. }
  341. } else if (userInfo.provUser.userType == 5) {
  342. // 气站端
  343. if (this.current == '1') {
  344. arrData.push('司机确定重瓶从气站出库')
  345. } else if (this.current == '2') {
  346. arrData.push('')
  347. } else {
  348. arrData.push('司机回收不合格瓶')
  349. }
  350. }
  351. } else {
  352. // 送气员端
  353. if (this.current == '1') {
  354. arrData.push('门店确认未配送重瓶返库')
  355. } else if (this.current == '2') {
  356. arrData.push('门店回收空瓶')
  357. } else {
  358. arrData.push('门店回收不合格瓶')
  359. }
  360. }
  361. this.columns.push(arrData)
  362. },
  363. // 确定流转步骤
  364. confirm(event) {
  365. if (event.value[0] == '门店确认未配送重瓶返库') {
  366. this.flowStepData.id = '35'
  367. this.flowStepData.title = event.value[0]
  368. } else if (event.value[0] == '门店回收空瓶') {
  369. this.flowStepData.id = '21'
  370. this.flowStepData.title = event.value[0]
  371. } else if (event.value[0] == '门店回收不合格瓶') {
  372. this.flowStepData.id = this.current
  373. this.flowStepData.title = event.value[0]
  374. } else if (event.value[0] == '送气员领重瓶出库') {
  375. this.flowStepData.id = '25'
  376. this.flowStepData.title = event.value[0]
  377. } else if (event.value[0] == '司机确认重瓶从门店出库') {
  378. this.flowStepData.id = '033'
  379. this.flowStepData.title = event.value[0]
  380. } else if (event.value[0] == '司机确认空瓶装车') {
  381. this.flowStepData.id = '11'
  382. this.flowStepData.title = event.value[0]
  383. } else if (event.value[0] == '司机回收不合格瓶') {
  384. this.flowStepData.id = this.current
  385. this.flowStepData.title = event.value[0]
  386. } else if (event.value[0] == '门店确认重瓶卸货入库') {
  387. this.flowStepData.id = '31'
  388. this.flowStepData.title = event.value[0]
  389. } else if (event.value[0] == '气站确认重瓶到达气站') {
  390. this.flowStepData.id = '016'
  391. this.flowStepData.title = event.value[0]
  392. } else if (event.value[0] == '气站确认空瓶到达气站') {
  393. this.flowStepData.id = '13'
  394. this.flowStepData.title = event.value[0]
  395. } else if (event.value[0] == '门店回收不合格瓶') {
  396. this.flowStepData.id = this.current
  397. this.flowStepData.title = event.value[0]
  398. } else if (event.value[0] == '气站回收不合格瓶') {
  399. this.flowStepData.id = this.current
  400. this.flowStepData.title = event.value[0]
  401. }
  402. this.show = false
  403. console.log(this.flowStepData, 25)
  404. },
  405. // 选择门店
  406. shopFocus() {
  407. uni.navigateTo({
  408. url: '/pages/information/flowStep'
  409. });
  410. },
  411. // 选择接收人
  412. recipientFocus() {
  413. uni.navigateTo({
  414. url: '/pages/information/storePersonnel'
  415. });
  416. },
  417. close() {
  418. this.assignerShow = false
  419. this.flowStepShow = false
  420. },
  421. // 关闭选择流转步骤
  422. flowCancel() {
  423. this.show = false
  424. },
  425. // 调拨提交
  426. submit() {
  427. if (this.allotFlag) {
  428. if (this.userList.userId) {
  429. if (this.checkedList.length > 0) {
  430. uni.showLoading({
  431. mask: true,
  432. });
  433. this.$api.post('/api/gas-cylinder-allot', {
  434. optType: this.userList.flowId,
  435. acceptUserId: Number(this.userList.userId),
  436. acceptCompanyId: Number(this.userList.shopID),
  437. innerCodeList: this.checkedList,
  438. gasCylinderStatus: this.current,
  439. allotType: this.allotType,
  440. }).then(res => {
  441. uni.hideLoading();
  442. if (res.code == 200) {
  443. this.loadingMore = true
  444. this.Pagination.PageIndex = 1
  445. this.list = []
  446. this.getList()
  447. this.checkedList = []
  448. uni.$u.toast(res.msg)
  449. this.$forceUpdate()
  450. setTimeout(() => {
  451. uni.redirectTo({
  452. url: '/pages/information/transferRecord'
  453. });
  454. }, 1500)
  455. } else {
  456. uni.$u.toast(res.data.msg)
  457. }
  458. }).catch(() => {
  459. uni.hideLoading();
  460. })
  461. } else {
  462. uni.$u.toast('请先选择调拨钢瓶')
  463. }
  464. } else {
  465. uni.$u.toast('请选择接收人')
  466. }
  467. } else {
  468. // 空瓶充装
  469. if (this.checkedList.length > 0) {
  470. // 操作记录、流转步骤接口
  471. const param = {
  472. chipUidList: this.checkedList,
  473. optType: '14',
  474. }
  475. uni.showLoading({
  476. mask: true,
  477. });
  478. this.$api.post('/api/operation-log', param).then(res => {
  479. if (res.code == 200) {
  480. this.Pagination.PageIndex = 1
  481. this.list = []
  482. this.getList()
  483. this.checkedList = []
  484. uni.$u.toast('操作成功')
  485. } else {
  486. uni.$u.toast(res.data.msg)
  487. }
  488. uni.hideLoading();
  489. }).catch(() => {
  490. uni.hideLoading();
  491. })
  492. } else {
  493. uni.$u.toast('请先选择调拨钢瓶')
  494. }
  495. }
  496. },
  497. // 扫一扫
  498. allotSweep() {
  499. this.allotType = 1
  500. // 允许从相机和相册扫码
  501. uni.scanCode({
  502. scanType: ['qrCode'],
  503. autoZoom: false,
  504. success: (res) => {
  505. console.log(res, '--------');
  506. if (res.result) {
  507. let url = res.result;
  508. function getCharactersBefore(str, char) {
  509. const index = str.indexOf(char);
  510. if (index > -1) {
  511. return str.substring(0, index);
  512. }
  513. return ''; // 如果字符不存在,返回空字符串
  514. }
  515. const title = getCharactersBefore(url, '?');
  516. if (title == 'dialCode') {
  517. this.assignerFlag = true
  518. function getCharactersBefore1(str, char) {
  519. const index = str.indexOf(char);
  520. if (index > -1) {
  521. return str.substring(index + 1);
  522. }
  523. return ''; // 如果字符不存在,返回空字符串
  524. }
  525. const arr = getCharactersBefore1(url, '?')
  526. this.assignerData = arr.split(',')
  527. this.userList.flowId = this.assignerData[0]
  528. this.userList.userId = this.assignerData[1]
  529. this.userList.name = this.assignerData[2]
  530. this.userList.shopID = this.assignerData[3]
  531. this.userList.shopName = this.assignerData[4]
  532. this.userList.flowName = this.assignerData[5]
  533. } else {
  534. uni.$u.toast('请扫描调拨码')
  535. }
  536. } else {
  537. console.log('请重新扫描');
  538. return false;
  539. }
  540. },
  541. fail: (res) => {
  542. console.log('未识别到二维码1');
  543. }
  544. })
  545. },
  546. // 流转步骤文字
  547. getflowStep(value) {
  548. let title = ''
  549. this.flowStep.forEach(item => {
  550. if (item.id == value[0]) {
  551. title = item.title
  552. }
  553. })
  554. return title
  555. },
  556. // 选择钢瓶编号
  557. checkboxChange(value) {
  558. for (let i = 0; i < this.list.length; i++) {
  559. let flag = value.includes(this.list[i].inner_code);
  560. if (flag) {
  561. this.list[i].checked = true
  562. } else {
  563. this.list[i].checked = false
  564. }
  565. }
  566. this.checkedList = this.checkedList.concat(value);
  567. this.$cache.setCache('checkedList', this.checkedList)
  568. },
  569. // 输入第几个
  570. howMany(value) {
  571. // this.checkedList = []
  572. this.list.forEach((item, index) => {
  573. if (index < value) {
  574. item.checked = true
  575. this.checkedList.push(item.inner_code)
  576. } else {
  577. item.checked = false
  578. }
  579. })
  580. this.$cache.setCache('checkedList', this.checkedList)
  581. },
  582. // 全选
  583. checkAll() {
  584. this.codeValue = ''
  585. this.checkedList = []
  586. for (let i = 0; i < this.list.length; i++) {
  587. this.$set(this.list[i], 'checked', true)
  588. }
  589. this.list.forEach(item => {
  590. if (item.checked) {
  591. this.checkedList.push(item.inner_code)
  592. }
  593. })
  594. this.$cache.setCache('checkedList', this.checkedList)
  595. },
  596. // 反选
  597. Inverse() {
  598. this.codeValue = ''
  599. this.checkedList = []
  600. for (let i = 0; i < this.list.length; i++) {
  601. let flag = this.list[i].checked;
  602. this.$set(this.list[i], 'checked', !flag)
  603. }
  604. this.list.forEach(item => {
  605. if (item.checked) {
  606. this.checkedList.push(item.inner_code)
  607. }
  608. })
  609. this.$cache.setCache('checkedList', this.checkedList)
  610. }
  611. }
  612. }
  613. </script>
  614. <style lang="scss">
  615. .card_transfer {
  616. padding: 0rpx 30rpx;
  617. }
  618. .card_avatar {
  619. display: flex;
  620. align-items: center;
  621. justify-content: space-between;
  622. }
  623. .mine_image {
  624. width: 100rpx;
  625. height: 100rpx;
  626. border-radius: 50%;
  627. }
  628. .card_user_title {
  629. display: flex;
  630. flex-direction: column;
  631. align-items: flex-start;
  632. }
  633. .mine_phone {
  634. margin-left: 20rpx;
  635. font-size: 30rpx;
  636. }
  637. .card_assigner_aaf {
  638. position: relative;
  639. border: 1rpx dashed #d7d7d7;
  640. margin-top: 20rpx;
  641. padding: 20rpx;
  642. background-color: #f4f4f5;
  643. }
  644. .greyMaskCard {
  645. opacity: 0.5;
  646. }
  647. .white_card {
  648. position: absolute;
  649. top: 0;
  650. left: 0;
  651. right: 0;
  652. bottom: 0;
  653. font-size: 60rpx;
  654. }
  655. .step_title {
  656. font-size: 30rpx;
  657. font-weight: 600;
  658. }
  659. .flow_step_title {
  660. font-size: 28rpx;
  661. margin: 0rpx 0rpx 10rpx 0rpx;
  662. }
  663. .tran_title {
  664. padding-left: 10rpx;
  665. font-size: 32rpx;
  666. font-weight: 600;
  667. }
  668. .cylinder_ccsfs {
  669. margin-top: 30rpx;
  670. padding-bottom: 20rpx;
  671. // border-bottom: 1rpx solid #d7d7d7;
  672. }
  673. .blue_titleil {
  674. font-size: 30rpx;
  675. color: #2979ff;
  676. margin-right: 20rpx;
  677. }
  678. .blue_titleilred {
  679. font-size: 30rpx;
  680. color: #ff9900;
  681. margin-right: 20rpx;
  682. }
  683. .blue_title {
  684. font-size: 30rpx;
  685. color: #2979ff;
  686. }
  687. .green_title {
  688. font-size: 30rpx;
  689. color: #5ac725;
  690. }
  691. .card_right_num {
  692. margin-left: 30rpx;
  693. display: flex;
  694. align-items: center;
  695. }
  696. .num_card {
  697. margin: 0rpx 8rpx;
  698. width: 60rpx;
  699. }
  700. .input_taaf {
  701. padding: 0rpx !important;
  702. }
  703. .card_dinay {
  704. display: flex;
  705. align-items: center;
  706. width: calc(100% - 40rpx);
  707. // border-bottom: 1rpx solid #d7d7d7;
  708. padding: 30rpx 20rpx;
  709. }
  710. .item_current {
  711. width: 40rpx;
  712. color: #82848a;
  713. }
  714. .item_title1 {
  715. margin-left: 10rpx;
  716. }
  717. .card_btn {
  718. position: fixed;
  719. left: 0;
  720. right: 0;
  721. bottom: 0;
  722. padding-left: 30rpx;
  723. padding-right: 30rpx;
  724. padding-top: 20rpx;
  725. background-color: #fff;
  726. padding-bottom: constant(safe-area-inset-bottom); //兼容 IOS<11.2
  727. padding-bottom: env(safe-area-inset-bottom); //兼容 IOS>11.2
  728. }
  729. .title_step {
  730. margin: 15rpx 0px;
  731. font-size: 30rpx;
  732. span {
  733. color: red;
  734. }
  735. }
  736. .card_recipient {
  737. display: flex;
  738. padding: 6px 9px;
  739. border-radius: 4px;
  740. color: #c8c9cc;
  741. span {
  742. width: 100%;
  743. font-size: 30rpx;
  744. }
  745. }
  746. // 伪元素1rpx边框
  747. .frame_recip {
  748. position: relative; //重要
  749. }
  750. .frame_recip::after {
  751. position: absolute;
  752. content: '';
  753. border: 4rpx solid #e4e7ed;
  754. border-radius: 8rpx;
  755. width: 200%;
  756. height: 200%;
  757. top: 0;
  758. left: 0;
  759. transform: scale(0.5);
  760. transform-origin: 0 0;
  761. pointer-events: none;
  762. /* 使伪元素不会阻止鼠标事件 */
  763. }
  764. </style>