index.vue 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175
  1. <template>
  2. <view class="invoice">
  3. <view class="invoice__tabs">
  4. <u-tabs :list="list" sticky :current="current" @change="change" active-color="#007AFF"></u-tabs>
  5. </view>
  6. <view class="invoice__content">
  7. <view class="open" v-if="current == 0">
  8. <view class="form">
  9. <u-form :model="form" ref="uForm">
  10. <u-form-item label="发票类型" label-width="130" required prop="type" >
  11. <u-radio-group v-model="form.type" @change="formTypeChange">
  12. <u-radio v-for="(item, index) in typeList" :key="index" :name="item.value">
  13. {{ item.name }}
  14. </u-radio>
  15. </u-radio-group>
  16. </u-form-item>
  17. <!-- 增值税发票 -->
  18. <template v-if="form.type == 2">
  19. <u-form-item label="申请主体" label-width="130" required prop="main">
  20. <u-radio-group v-model="form.main">
  21. <u-radio :key="index" name="2">
  22. 企业
  23. </u-radio>
  24. </u-radio-group>
  25. </u-form-item>
  26. <u-form-item label="发票抬头" label-width="130" required prop="header" >
  27. <u-input placeholder="请输入" v-model="form.header" />
  28. </u-form-item>
  29. <u-form-item label="单位税号" label-width="130" required prop="tax" >
  30. <u-input placeholder="请输入" v-model="form.tax" />
  31. </u-form-item>
  32. <u-form-item label="单位地址" label-width="130" required prop="address" >
  33. <u-input placeholder="请输入" v-model="form.address" />
  34. </u-form-item>
  35. <u-form-item label="电话号码" label-width="130" required prop="tel" >
  36. <u-input placeholder="请输入" v-model="form.tel" />
  37. </u-form-item>
  38. <u-form-item label="开户银行" label-width="130" required prop="bank" >
  39. <u-input placeholder="请输入" v-model="form.bank" />
  40. </u-form-item>
  41. <u-form-item label="银行账号" label-width="130" required prop="bankNo" >
  42. <u-input placeholder="请输入" v-model="form.bankNo" />
  43. </u-form-item>
  44. <u-form-item label="收件地址" label-width="130" required prop="recieveAddress" >
  45. <u-input placeholder="请输入" v-model="form.recieveAddress" />
  46. </u-form-item>
  47. <u-form-item label="收件人" label-width="130" required prop="name" >
  48. <u-input placeholder="请输入" v-model="form.name" />
  49. </u-form-item>
  50. <u-form-item label="收件手机" label-width="130" required prop="phone" >
  51. <u-input placeholder="请输入" v-model="form.phone" />
  52. </u-form-item>
  53. </template>
  54. <!-- 增值税发票 -->
  55. <!-- 普通发票 -->
  56. <template v-else>
  57. <u-form-item label="申请主体" label-width="130" required prop="main">
  58. <u-radio-group v-model="form.main">
  59. <u-radio v-for="(item, index) in mainList" :key="index" :name="item.value">
  60. {{ item.name }}
  61. </u-radio>
  62. </u-radio-group>
  63. </u-form-item>
  64. <u-form-item label="发票抬头" label-width="130" required prop="header" >
  65. <u-input placeholder="请输入" v-model="form.header" />
  66. </u-form-item>
  67. </template>
  68. <!-- 普通发票 -->
  69. <u-form-item label="选择订单" label-width="130" required prop="orderIds" right-icon="arrow-right" ref="orderIds">
  70. <view class="form-item" @click="selectOrderModal = true">
  71. <u-input placeholder="请选择" disabled @click="selectOrderModal = true" v-model="form.orderIds" />
  72. </view>
  73. </u-form-item>
  74. <view>
  75. <view class="check-order" v-for="(item,index) in orderList" :key="index" v-if="item.disabled">
  76. <view class="close" @click="deleteOrder(index)">
  77. <u-icon name="close-circle-fill" color="#FF2D55" size="40"></u-icon>
  78. </view>
  79. <view class="title">商品名称</view>
  80. <view class="number">订单编号</view>
  81. <view class="price">¥ 100元</view>
  82. </view>
  83. </view>
  84. </u-form>
  85. </view>
  86. <view class="order-text">
  87. <view class="order-text__label">本次申请开票金额:</view>
  88. <view class="order-text__price">¥ 999.00</view>
  89. </view>
  90. <view class="submit" @click="formSubmit">
  91. 提交申请
  92. </view>
  93. </view>
  94. <view class="." v-if="current == 1">
  95. <view class="nodata" v-if="!recordList.length">
  96. 您暂无相关发票记录哦~
  97. </view>
  98. <view class="record__list">
  99. <view class="record-item" @click="orderDetailModal = true;" v-for="(record,index) in recordList" :key="index">
  100. <view class="item__time">2021/10/29 09:30:00</view>
  101. <view class="item__content">
  102. <view class="top">
  103. <view class="state" :class="{wait:record.state == 1,refuse:record.state == 2,agree:record.state == 3}">
  104. <text v-if="record.state == 1">待审核</text>
  105. <text v-if="record.state == 2">驳回</text>
  106. <text v-if="record.state == 3">通过</text>
  107. <u-icon class="arrow" name="arrow-right" color="#ffffff" size="28"></u-icon>
  108. </view>
  109. </view>
  110. <view class="bottom">
  111. <view class="flex">
  112. <view class="text">发票类型</view>
  113. <view class="flex__auto">
  114. <text>普通发票</text>
  115. </view>
  116. </view>
  117. <view class="flex">
  118. <view class="text">申请主体</view>
  119. <view class="flex__auto">
  120. <text>个人</text>
  121. </view>
  122. </view>
  123. <view class="flex">
  124. <view class="text">发票状态</view>
  125. <view class="flex__auto">
  126. <text class="red" :class="{red:record.state != 2 ,green:record.state == 2}">未开票</text>
  127. </view>
  128. </view>
  129. <view @click.stop="showOrder(record.checked,index)">
  130. <view class="flex noborder" >
  131. <view class="text">开票订单</view>
  132. <view class="flex__auto">
  133. <text class="red">3</text>
  134. <u-icon v-if="!record.checked" name="arrow-down" color="#ccc" size="28"></u-icon>
  135. <u-icon v-if="record.checked" name="arrow-up" color="#ccc" size="28"></u-icon>
  136. </view>
  137. </view>
  138. <view class="order-list" v-if="record.checked">
  139. <view class="order-item">1.2021七大员新考施工专业人员岗提高班</view>
  140. <view class="order-item">2.2021七大员新考施工专业人员岗提高班订单名称过长换行</view>
  141. </view>
  142. </view>
  143. </view>
  144. </view>
  145. </view>
  146. </view>
  147. </view>
  148. </view>
  149. <u-popup class="modal" v-model="selectOrderModal" mode="bottom" border-radius="24">
  150. <view class="select-order">
  151. <view class="line"></view>
  152. <view class="title">选择订单</view>
  153. <u-line color="#D6D6DB" />
  154. <view>
  155. <scroll-view scroll-y="true" style="height: 500rpx;">
  156. <view>
  157. <u-checkbox-group>
  158. <view v-for="(item, index) in orderList" :key="index" >
  159. <view class="order-item">
  160. <view>
  161. <u-checkbox
  162. :disabled="item.disabled"
  163. shape="circle"
  164. :name="item.name"
  165. v-model="item.checked"
  166. >
  167. <view class="order-item__bg" :class="item.checked?'active':''" >
  168. <view>
  169. <view class="order-title">商品名称</view>
  170. <view class="order-number">订单编号</view>
  171. <view class="order-price">¥ 100元</view>
  172. </view>
  173. </view>
  174. </u-checkbox >
  175. </view>
  176. </view>
  177. </view>
  178. </u-checkbox-group>
  179. </view>
  180. </scroll-view>
  181. </view>
  182. <view class="confrim-btn">
  183. <view class="okBtn" @click="okPopup()">确定</view>
  184. </view>
  185. </view>
  186. </u-popup>
  187. <u-popup class="modal" v-model="orderDetailModal" mode="center" border-radius="40">
  188. <view class="order-detail">
  189. <view class="order-detail__content">
  190. <scroll-view scroll-y="true" style="height: 972rpx;">
  191. <view class="content">
  192. <view class="header">2021年10月29日 09:30:00</view>
  193. <view class="body">
  194. <view class="body__item">
  195. <view class="title">发票申请信息</view>
  196. <view class="content">
  197. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  198. <view slot="title">发票类型:</view>
  199. <text>普通发票</text>
  200. </u-cell-item>
  201. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  202. <view slot="title">申请主体:</view>
  203. <text>个人</text>
  204. </u-cell-item>
  205. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  206. <view slot="title">发票抬头:</view>
  207. <text>广东中正科技教育科技有限公司</text>
  208. </u-cell-item>
  209. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  210. <view slot="title">单位税号:</view>
  211. <text>SH123456789</text>
  212. </u-cell-item>
  213. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  214. <view slot="title">单位地址:</view>
  215. <text>广州市天河区燕岭路123号建设大厦F座 16楼过长换行</text>
  216. </u-cell-item>
  217. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  218. <view slot="title">电话号码:</view>
  219. <text>企业 拷贝</text>
  220. </u-cell-item>
  221. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  222. <view slot="title">开户银行:</view>
  223. <text>中国工商银行星星支行</text>
  224. </u-cell-item>
  225. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  226. <view slot="title">银行账号:</view>
  227. <text>SH123456789 拷贝</text>
  228. </u-cell-item>
  229. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  230. <view slot="title">收件地址:</view>
  231. <text>广州市天河区燕岭路123号</text>
  232. </u-cell-item>
  233. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  234. <view slot="title">收件人:</view>
  235. <text>李大米</text>
  236. </u-cell-item>
  237. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  238. <view slot="title">发票抬头:</view>
  239. <text>广东中正科技教育科技有限公司</text>
  240. </u-cell-item>
  241. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false" >
  242. <view slot="title">收件手机:</view>
  243. <text>13800138000</text>
  244. </u-cell-item>
  245. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false" >
  246. <view slot="title">开票订单:</view>
  247. </u-cell-item>
  248. <view class="order-list">
  249. <view class="order-item">
  250. <view class="order-title">2021七大员新考施工专业人员岗提高班</view>
  251. <view class="order-number">GDXY1234567890</view>
  252. <view class="order-price">¥ 100元</view>
  253. </view>
  254. <view class="order-item">
  255. <view class="order-title">2021七大员新考施工专业人员岗提高班</view>
  256. <view class="order-number">GDXY1234567890</view>
  257. <view class="order-price">¥ 100元</view>
  258. </view>
  259. <view class="order-item">
  260. <view class="order-title">2021七大员新考施工专业人员岗提高班</view>
  261. <view class="order-number">GDXY1234567890</view>
  262. <view class="order-price">¥ 100元</view>
  263. </view>
  264. </view>
  265. <view class="order-text">
  266. <view class="order-text__label">本次申请开票金额:</view>
  267. <view class="order-text__price">¥ 999.00</view>
  268. </view>
  269. </view>
  270. </view>
  271. <view class="body__item">
  272. <view class="title">发票申请结果</view>
  273. <view class="content">
  274. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  275. <view slot="title">审核结果:</view>
  276. <text class="text wait">待审核</text>
  277. <text class="text agree">通过</text>
  278. <text class="text refuse">驳回</text>
  279. </u-cell-item>
  280. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  281. <view slot="title">发票状态:</view>
  282. <text class="text refuse">未开票</text>
  283. <text class="text agree">已开票</text>
  284. <text class="text refuse">已退票</text>
  285. </u-cell-item>
  286. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  287. <view slot="title">发票预览:</view>
  288. <view>
  289. <image class="preview" src="/static/info_3.png"></image>
  290. <view class="download-btn" @click="download">下载电子发票</view>
  291. </view>
  292. </u-cell-item>
  293. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  294. <view slot="title">机构发票邮寄状态:</view>
  295. <text class="text">是</text>
  296. </u-cell-item>
  297. <u-cell-item :border-bottom="false" hover-class="none" :arrow="false">
  298. <view slot="title">发票邮寄快递单号:</view>
  299. <text class="text">153666689456</text>
  300. </u-cell-item>
  301. </view>
  302. </view>
  303. </view>
  304. </view>
  305. </scroll-view>
  306. </view>
  307. <view class="order-detail__btns">
  308. <view class="btn" @click="orderDetailModal = false;">知道了</view>
  309. <view class="btn warm" @click="orderCancelModal = true;">撤销申请</view>
  310. </view>
  311. <view class="order-detail__btns">
  312. <view class="btn ok" @click="orderDetailModal = false;">知道了</view>
  313. </view>
  314. </view>
  315. </u-popup>
  316. <u-popup class="modal" v-model="orderCancelModal" mode="center" border-radius="24">
  317. <view class="order-cancel">
  318. <view class="header">
  319. 温馨提示
  320. </view>
  321. <view class="body">
  322. <view>撤销申请后,</view>
  323. <view>本次的发票申请内容将不存在。</view>
  324. <view>请慎重考虑。 </view>
  325. <view>您确定要取消本次发票申请吗?</view>
  326. </view>
  327. <view class="footer">
  328. <view class="btn cancel" @click="orderCancelModal = false;">取消</view>
  329. <view class="btn ok" @click="orderCancel()">确定</view>
  330. </view>
  331. </view>
  332. </u-popup>
  333. </view>
  334. </template>
  335. <script>
  336. import { mapGetters } from 'vuex';
  337. export default {
  338. components: {},
  339. data() {
  340. return {
  341. checkOrderList:[],
  342. recordList:[{
  343. checked:false,
  344. state:'1'
  345. },{
  346. checked:false,
  347. state:'2'
  348. },{
  349. checked:false,
  350. state:'3'
  351. }],
  352. list: [
  353. {
  354. name: '发票申请'
  355. },
  356. {
  357. name: '发票记录'
  358. }
  359. ],
  360. form:{
  361. type:'',
  362. main:'',
  363. header:'',
  364. orderIds:'',
  365. },
  366. rules: {
  367. phone: [
  368. {
  369. required: true,
  370. message: '请输入收件手机',
  371. // 可以单个或者同时写两个触发验证方式
  372. trigger: ['change'],
  373. },
  374. {
  375. validator: (rule, value, callback) => {
  376. // 上面有说,返回true表示校验通过,返回false表示不通过
  377. // this.$u.test.mobile()就是返回true或者false的
  378. return this.$u.test.mobile(value);
  379. },
  380. message: '手机号码格式不正确',
  381. // 触发器可以同时用blur和change
  382. trigger: ['change'],
  383. }
  384. ],
  385. type: [
  386. {
  387. required: true,
  388. message: '请选择发票类型',
  389. // 可以单个或者同时写两个触发验证方式
  390. trigger: ['change'],
  391. }
  392. ],
  393. main: [
  394. {
  395. required: true,
  396. message: '请选择申请主体',
  397. // 可以单个或者同时写两个触发验证方式
  398. trigger: ['change'],
  399. }
  400. ],
  401. header: [
  402. {
  403. required: true,
  404. message: '请输入发票抬头',
  405. // 可以单个或者同时写两个触发验证方式
  406. trigger: ['change'],
  407. }
  408. ],
  409. tax: [
  410. {
  411. required: true,
  412. message: '请输入单位税号',
  413. // 可以单个或者同时写两个触发验证方式
  414. trigger: ['change'],
  415. }
  416. ],
  417. address: [
  418. {
  419. required: true,
  420. message: '请输入单位地址',
  421. // 可以单个或者同时写两个触发验证方式
  422. trigger: ['change'],
  423. }
  424. ],
  425. tel: [
  426. {
  427. required: true,
  428. message: '请输入电话号码',
  429. // 可以单个或者同时写两个触发验证方式
  430. trigger: ['change'],
  431. }
  432. ],
  433. bank: [
  434. {
  435. required: true,
  436. message: '请输入开户银行',
  437. // 可以单个或者同时写两个触发验证方式
  438. trigger: ['change'],
  439. }
  440. ],
  441. bankNo: [
  442. {
  443. required: true,
  444. message: '请输入银行账号',
  445. // 可以单个或者同时写两个触发验证方式
  446. trigger: ['change'],
  447. }
  448. ],
  449. recieveAddress: [
  450. {
  451. required: true,
  452. message: '请输入收件地址',
  453. // 可以单个或者同时写两个触发验证方式
  454. trigger: ['change'],
  455. }
  456. ],
  457. name: [
  458. {
  459. required: true,
  460. message: '请输入收件人',
  461. // 可以单个或者同时写两个触发验证方式
  462. trigger: ['change'],
  463. }
  464. ],
  465. orderIds: [
  466. {
  467. required: true,
  468. message: '请选择订单',
  469. // 可以单个或者同时写两个触发验证方式
  470. trigger: ['change'],
  471. }
  472. ],
  473. },
  474. orderValue:'',
  475. orderList:[{checked:false,name:'1'},{checked:false,name:'2'},{checked:false,name:'3'},{checked:false,name:'4'}],
  476. selectOrderModal:false,
  477. orderDetailModal:false,
  478. orderCancelModal:false,
  479. current: 1,
  480. order: [],
  481. typeList:[{
  482. name:'普通发票',
  483. value:'1'
  484. },{
  485. name:'增值税专用发票',
  486. value:'2'
  487. }],
  488. mainList:[{
  489. name:'个人',
  490. value:'1'
  491. },{
  492. name:'企业',
  493. value:'2'
  494. }]
  495. };
  496. },
  497. // onPullDownRefresh() {},
  498. onLoad(option) {
  499. // this.$refs.uForm.setRules(this.rules)
  500. },
  501. onShow() {
  502. },
  503. methods: {
  504. /**
  505. * @param {Object} checkedState 显示状态
  506. * @param {Object} index 索引值
  507. * 修改开票订单列表显示状态
  508. */
  509. showOrder(showState,index) {
  510. this.$set(this.recordList[index],'checked',!showState)
  511. },
  512. /**
  513. * 发票申请提交
  514. */
  515. formSubmit() {
  516. this.$refs.uForm.validate(valid => {
  517. if(valid) {
  518. uni.showToast({
  519. title:'申请成功'
  520. })
  521. }
  522. })
  523. },
  524. /**
  525. * @param {Object} e value
  526. * 发票类型修改
  527. */
  528. formTypeChange(e) {
  529. console.log(e)
  530. if(e == '2') {
  531. this.$set(this.form,'main','2')
  532. } else {
  533. this.$set(this.form,'main','')
  534. }
  535. },
  536. /**
  537. * @param {Object} e
  538. * tabs 切换
  539. */
  540. change(e) {
  541. console.log(e)
  542. this.current = e;
  543. },
  544. radioGroupChange(e) {
  545. console.log(e)
  546. },
  547. okPopup() {
  548. this.selectOrderModal = false;
  549. let strArr = [];
  550. this.orderList.forEach((item,index) => {
  551. if(item.checked) {
  552. this.$set(this.orderList[index],'disabled',true)
  553. strArr.push(item.name)
  554. }
  555. })
  556. this.form.orderIds = strArr.join(',')
  557. this.$nextTick(() => {
  558. this.$refs.orderIds.onFieldChange()
  559. })
  560. console.log(this.$refs.orderIds)
  561. },
  562. deleteOrder(index) {
  563. this.$set(this.orderList[index],'disabled',false)
  564. this.$set(this.orderList[index],'checked',false)
  565. let strArr = [];
  566. this.orderList.forEach((item,index) => {
  567. if(item.checked) {
  568. strArr.push(item.name)
  569. }
  570. })
  571. this.form.orderIds = strArr.join(',')
  572. this.$nextTick(() => {
  573. this.$refs.orderIds.onFieldChange()
  574. })
  575. },
  576. download() {
  577. uni.downloadFile({
  578. url: 'https://gw.alipayobjects.com/os/bmw-prod/c134022a-1088-47e2-bb76-a33ec0519101.pdf?spm=a2c4g.11186623.0.0.cf863d1fUcFiPN&file=c134022a-1088-47e2-bb76-a33ec0519101.pdf',
  579. success: function (res) {
  580. console.log(999)
  581. var filePath = res.tempFilePath;
  582. uni.openDocument({
  583. filePath: filePath,
  584. showMenu: true,
  585. success: function (res) {
  586. console.log(res,'打开文档成功');
  587. },
  588. fail:function(err) {
  589. console.log(err)
  590. }
  591. });
  592. }
  593. });
  594. },
  595. orderCancel() {
  596. this.orderDetailModal = false;
  597. this.orderCancelModal = false;
  598. uni.showToast({
  599. title:'撤销成功',
  600. icon:'none'
  601. })
  602. }
  603. },
  604. computed: { ...mapGetters(['userInfo']) }
  605. };
  606. </script>
  607. <style>
  608. page {
  609. background: #eaeef1;
  610. }
  611. </style>
  612. <style scoped lang="scss">
  613. .invoice {
  614. &__tabs {
  615. width: 100%;
  616. text-align: center;
  617. position: fixed;
  618. height: 96rpx;
  619. z-index: 999;
  620. }
  621. &__content {
  622. padding-top:96rpx;
  623. .open {
  624. padding-bottom:150rpx;
  625. margin:8rpx 24rpx 0;
  626. .form {
  627. padding:24rpx;
  628. width: 702rpx;
  629. background: #FFFFFF;
  630. border-radius: 24rpx;
  631. // /deep/ .u-input__input {
  632. // text-align: right;
  633. // }
  634. .form-item {
  635. height:78rpx;
  636. display: flex;
  637. align-items: center;
  638. .text {
  639. font-size: 28rpx;
  640. width:120rpx;
  641. // color: #999999;
  642. }
  643. .content {
  644. flex:1;
  645. text-align: left;
  646. color:#bbb;
  647. }
  648. }
  649. .check-order {
  650. margin-top:20rpx;
  651. width: 654rpx;
  652. height: 168rpx;
  653. background: #F5F5F5;
  654. border: 2px solid #F5F5F5;
  655. padding:20rpx;
  656. position:relative;
  657. .close {
  658. position:absolute;
  659. right:0;
  660. top:0;
  661. }
  662. .title,.number,.price {
  663. color:#333333;
  664. margin-top:10rpx;
  665. line-height: 30rpx;
  666. font-size: 30rpx;
  667. }
  668. .number {
  669. color:#999;
  670. }
  671. }
  672. }
  673. .order-text {
  674. margin-top:16rpx;
  675. padding:0 30rpx;
  676. width: 702rpx;
  677. height: 80rpx;
  678. background: #FFFFFF;
  679. border-radius: 24rpx;
  680. display: flex;
  681. align-items: center;
  682. &__label {
  683. font-size: 24rpx;
  684. }
  685. &__price {
  686. font-size: 30rpx;
  687. margin-left:20rpx;
  688. color:#FF2D55;
  689. }
  690. }
  691. .submit {
  692. text-align: center;
  693. line-height: 80rpx;
  694. color:#fff;
  695. font-size: 30rpx;
  696. width: 526rpx;
  697. height: 80rpx;
  698. background: #007AFF;
  699. box-shadow: 0rpx 8rpx 7rpx 1rpx rgba(0, 122, 255, 0.1);
  700. border-radius: 40rpx;
  701. position:fixed;
  702. left:50%;
  703. bottom:40rpx;
  704. transform: translateX(-50%);
  705. }
  706. }
  707. .record {
  708. .nodata {
  709. padding-top:160rpx;
  710. font-size: 32rpx;
  711. text-align: center;
  712. color: #999999;
  713. }
  714. &__list {
  715. .record-item {
  716. margin:0 8rpx 10rpx;
  717. .item__time {
  718. padding:20rpx 0;
  719. text-align: center;
  720. font-size: 24rpx;
  721. color: #999999;
  722. }
  723. .item__content {
  724. background:#fff;
  725. border-radius: 16rpx;
  726. .top {
  727. padding:12rpx 0;
  728. border-bottom:1px solid #EEEEEE;
  729. .state {
  730. position:relative;
  731. text-align: center;
  732. color:#fff;
  733. font-size: 30rpx;
  734. margin:0 auto;
  735. width: 240rpx;
  736. height: 56rpx;
  737. line-height: 56rpx;
  738. background: #007AFF;
  739. border-radius: 28rpx;
  740. &.wait {
  741. background: #007AFF;
  742. }
  743. &.refuse {
  744. background: #FF3B30;
  745. }
  746. &.wait {
  747. background: #34C759;
  748. }
  749. .arrow {
  750. position:absolute;
  751. top:50%;
  752. transform: translateY(-50%);
  753. right:18rpx;
  754. }
  755. }
  756. }
  757. .bottom {
  758. padding:0 32rpx;
  759. .flex {
  760. height:80rpx;
  761. display: flex;
  762. align-items: center;
  763. border-bottom:1px solid #EEEEEE;
  764. &.noborder{
  765. border:0;
  766. }
  767. .text {
  768. font-size: 24rpx;
  769. color: #666666;
  770. }
  771. &__auto {
  772. text-align: right;
  773. flex:1;
  774. font-size: 30rpx;
  775. font-weight: bold;
  776. color: #666666;
  777. .red {
  778. color:#FF3B30;
  779. }
  780. .green {
  781. color:#34C759;
  782. }
  783. }
  784. }
  785. .order-list {
  786. padding-bottom:30rpx;
  787. .order-item {
  788. border-radius: 16rpx;
  789. padding:14rpx;
  790. background:#F5F5F5;
  791. font-size: 30rpx;
  792. color:#333;
  793. margin-top:16rpx;
  794. }
  795. }
  796. }
  797. }
  798. }
  799. }
  800. }
  801. }
  802. .modal {
  803. .select-order {
  804. .line {
  805. width: 80rpx;
  806. height: 8rpx;
  807. background: #999999;
  808. border-radius: 4rpx;
  809. margin:8rpx auto 0;
  810. }
  811. .title {
  812. margin:20rpx 0 15rpx;
  813. text-align: center;
  814. font-size: 24rpx;
  815. color: #999999;
  816. }
  817. .order-item {
  818. display: flex;
  819. align-items: center;
  820. padding: 20rpx;
  821. &__bg {
  822. width: 654rpx;
  823. height: 168rpx;
  824. background: #F5F5F5;
  825. border: 2px solid #F5F5F5;
  826. border-radius: 16rpx;
  827. padding:20rpx;
  828. &.active {
  829. background: #EBF5FF;
  830. border: 2px solid #007AFF;
  831. }
  832. .order-title,.order-number,.order-price {
  833. color:#333333;
  834. margin-top:10rpx;
  835. line-height: 30rpx;
  836. font-size: 30rpx;
  837. }
  838. .order-number {
  839. color:#999;
  840. }
  841. }
  842. }
  843. .confrim-btn {
  844. width: 750rpx;
  845. height: 98rpx;
  846. background: rgba(255, 255, 255, 0.98);
  847. display: flex;
  848. align-items: center;
  849. justify-content: center;
  850. .okBtn {
  851. text-align: center;
  852. line-height: 64rpx;
  853. color:#fff;
  854. font-size: 30rpx;
  855. width: 200rpx;
  856. height: 64rpx;
  857. background: linear-gradient(0deg, #015EEA, #00C0FA);
  858. border-radius: 32rpx;
  859. }
  860. }
  861. }
  862. .order-detail {
  863. width: 640rpx;
  864. height: 1112rpx;
  865. background: #FFFFFF;
  866. display: flex;
  867. flex-direction: column;
  868. &__content {
  869. flex:1;
  870. .content {
  871. padding:24rpx 24rpx 0;
  872. /deep/ .u-cell {
  873. padding:10rpx;
  874. &_title {
  875. color:#999;
  876. }
  877. &__value {
  878. color:#333;
  879. text-align: left;
  880. }
  881. .text {
  882. &.wait {
  883. color:#007AFF;
  884. }
  885. &.agree {
  886. color:#34C759;
  887. }
  888. &.refuse {
  889. color:#FF3B30;
  890. }
  891. }
  892. .preview {
  893. width:240rpx;
  894. height:160rpx;
  895. }
  896. .download-btn {
  897. margin:10rpx 0 0;
  898. text-align: center;
  899. line-height: 56rpx;
  900. color:#fff;
  901. font-size: 30rpx;
  902. width: 224rpx;
  903. height: 56rpx;
  904. background: #007AFF;
  905. border-radius: 16rpx;
  906. }
  907. }
  908. .header {
  909. font-size: 30rpx;
  910. font-weight: bold;
  911. color: #333333;
  912. line-height: 48rpx;
  913. }
  914. .body {
  915. &__item {
  916. border-bottom:1px solid #EEEEEE;
  917. padding-bottom:30rpx;
  918. &:last-child {
  919. border:0;
  920. }
  921. .title {
  922. margin-top:30rpx;
  923. font-size: 24rpx;
  924. color: #007AFF;
  925. line-height: 48rpx;
  926. &::before {
  927. content:'';
  928. width: 4rpx;
  929. height: 24rpx;
  930. background: #007AFF;
  931. border-radius: 2rpx;
  932. display: inline-block;
  933. margin-right:10rpx;
  934. }
  935. }
  936. .order-list {
  937. .order-item {
  938. overflow: hidden;
  939. border-radius: 16rpx;
  940. padding:0 14rpx 14rpx;
  941. background:#F5F5F5;
  942. font-size: 30rpx;
  943. color:#333;
  944. margin-top:16rpx;
  945. .order-title,.order-number,.order-price {
  946. color:#333333;
  947. margin-top:20rpx;
  948. line-height: 26rpx;
  949. font-size: 26rpx;
  950. }
  951. .order-number {
  952. color:#999;
  953. }
  954. }
  955. }
  956. .order-text {
  957. margin-top:16rpx;
  958. padding:0 30rpx;
  959. height: 80rpx;
  960. background: #F5F5F5;
  961. border-radius: 16rpx;
  962. display: flex;
  963. align-items: center;
  964. &__label {
  965. font-size: 24rpx;
  966. color:#999999;
  967. }
  968. &__price {
  969. font-size: 30rpx;
  970. margin-left:20rpx;
  971. color:#FF2D55;
  972. }
  973. }
  974. }
  975. }
  976. }
  977. }
  978. &__btns {
  979. border-top:1px solid #EEEEEE;
  980. padding:0 24rpx;
  981. width: 100%;
  982. height: 140rpx;
  983. background: #FFFFFF;
  984. display: flex;
  985. justify-content: center;
  986. align-items: center;
  987. .btn {
  988. text-align: center;
  989. width: 200rpx;
  990. height: 80rpx;
  991. line-height: 80rpx;
  992. background: #F5F5F5;
  993. border-radius: 40rpx;
  994. color:#007AFF;
  995. font-size: 30rpx;
  996. margin:0 10rpx;
  997. &.warm {
  998. background: #FF3B30;
  999. color:#fff;
  1000. }
  1001. &.ok {
  1002. color:#fff;
  1003. width: 526rpx;
  1004. height: 80rpx;
  1005. background: #007AFF;
  1006. border-radius: 40rpx;
  1007. }
  1008. }
  1009. }
  1010. }
  1011. .order-cancel {
  1012. width: 640rpx;
  1013. height: 439rpx;
  1014. background: #FFFFFF;
  1015. padding:40rpx;
  1016. .header {
  1017. text-align: center;
  1018. font-size: 30rpx;
  1019. font-weight: bold;
  1020. color: #333333;
  1021. line-height: 48rpx;
  1022. }
  1023. .body {
  1024. margin-top:40rpx;
  1025. view {
  1026. font-size: 30rpx;
  1027. color: #666666;
  1028. line-height: 48rpx;
  1029. }
  1030. }
  1031. .footer {
  1032. margin-top:40rpx;
  1033. display: flex;
  1034. align-items: center;
  1035. justify-content: center;
  1036. .btn {
  1037. text-align: center;
  1038. line-height: 80rpx;
  1039. font-size: 30rpx;
  1040. color:#007AFF;
  1041. width: 200rpx;
  1042. height: 80rpx;
  1043. background: #F5F5F5;
  1044. border-radius: 40rpx;
  1045. margin:0 10rpx;
  1046. &.ok {
  1047. color:#fff;
  1048. background: #007AFF;
  1049. }
  1050. }
  1051. }
  1052. }
  1053. }
  1054. }
  1055. </style>