index.vue 29 KB

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