billdetail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. <template>
  2. <view>
  3. <view class="boxcon">
  4. <text class="titlename">汇票{{index+1}}</text>
  5. <view class="container">
  6. <view class="titleall">
  7. <text class="pl">汇票名称</text>
  8. <text class="pr">{{msg.name}}</text>
  9. </view>
  10. <view class="titleall">
  11. <text class="pl">汇票号码</text>
  12. <text class="pr">{{msg.draftNo}}</text>
  13. </view>
  14. <view class="titleall">
  15. <text class="pl">承兑人</text>
  16. <text class="pr">{{msg.acceptorName}}</text>
  17. </view>
  18. <view class="titleall">
  19. <text class="pl">出票人</text>
  20. <text class="pr">{{msg.drawersName}}</text>
  21. </view>
  22. <view class="titleall">
  23. <text class="pl">金额</text>
  24. <text class="pr">{{msg.money}}</text>
  25. </view>
  26. <view class="titleall">
  27. <text class="pl">承兑日期</text>
  28. <text class="pr">{{msg.acceptDate}}</text>
  29. </view>
  30. <view class="titleall">
  31. <text class="pl">出票日期</text>
  32. <text class="pr">{{msg.issueDate}}</text>
  33. </view>
  34. <view class="titleall">
  35. <text class="pl">汇票到期日</text>
  36. <text class="pr">{{msg.expireDate}}</text>
  37. </view>
  38. <view class="titleall">
  39. <text class="pl">预计贴现日</text>
  40. <text class="pr">{{msg.expectDiscountDate}}</text>
  41. </view>
  42. <view class="titleall bod">
  43. <text class="pl">最高贷款额度</text>
  44. <text class="pr">{{msg.loanLimit}}</text>
  45. </view>
  46. <view class="titleall " style="padding-top: 30rpx !important; ">
  47. <text class="pl">服务费率</text>
  48. <text class="pr">{{msg.serviceRate?msg.serviceRate:''}}%</text>
  49. </view>
  50. <view class="titleall" >
  51. <text class="pl">服务费</text>
  52. <text class="pr">{{msg.serviceMoney}}</text>
  53. </view>
  54. <view class="titleall ">
  55. <text class="pl">利率</text>
  56. <text class="pr">{{msg.interestRate?msg.interestRate:''}}%</text>
  57. </view>
  58. <view class="titleall ">
  59. <text class="pl">利息</text>
  60. <text class="pr">{{msg.interest?msg.interest:''}}</text>
  61. </view>
  62. <view class="titleall bod">
  63. <text class="pl">发票附件</text>
  64. <view class="uppic">
  65. <view class="picbox" v-for="item in msg.picList">
  66. <image :src="item" mode="aspectFill" @click="prviewPic(item)"></image>
  67. </view>
  68. </view>
  69. </view>
  70. <view class="titleall ptin">
  71. <text class="pl">汇票状态</text>
  72. <text class="pr cls">{{msg.statusText}}</text>
  73. </view>
  74. <view class="titleall " style="display: flex;flex-direction: column;">
  75. <text class="pl">审核反馈</text>
  76. <textarea :placeholder="placehodertitle" style="background-color: #F6F6F6;width: 675rpx;height: 200rpx;border-radius: 20rpx;padding: 20rpx;box-sizing: border-box;margin:20rpx 0;margin-bottom: 30rpx;" v-model="feedback" :disabled="disabled"></textarea>
  77. </view>
  78. <!-- <view class="titleall " v-else>
  79. <text class="pl">审核反馈</text>
  80. <view >
  81. <textarea placeholder="请输入审核反馈"
  82. style="background-color: #F6F6F6;width: 540rpx;height: 200rpx;border-radius: 20rpx;padding: 20rpx;box-sizing: border-box;margin:20rpx 0;margin-bottom: 30rpx;margin-top: 0;"
  83. v-model="feedback" disabled></textarea>
  84. </view>
  85. </view> -->
  86. <view class="titleall " style="justify-content: flex-start;">
  87. <text class="pl psa ">反馈截图</text>
  88. <view class="fanuppic">
  89. <view class="picbox" v-if="state==0">
  90. <u-upload :fileList="fileList4" @afterRead="afterRead" @delete="deletePic" name="4" multiple
  91. :maxCount="6" :disabled="disabled" :deletable="delablepic"></u-upload>
  92. </view>
  93. <view class="picbox" v-if="state==1">
  94. <u-upload :fileList="fileList4" @afterRead="afterRead" @delete="deletePic" name="4" multiple
  95. :maxCount="fileList4.length" :disabled="disabled" :deletable="delablepic"></u-upload>
  96. </view>
  97. </view>
  98. </view>
  99. </view>
  100. </view>
  101. <view style="width: 100%;height: 140rpx;"></view>
  102. <view class="newbill flex1" v-if="state==0&&!statusText=='待审核'">
  103. <view class="choosebtn">
  104. <view class="delbtn flex1" @click="examineFail()">审核失败</view>
  105. <view class="succbtn flex1" @click="examineSuccess()">审核成功</view>
  106. </view>
  107. </view>
  108. <!-- <view class="newbill flex1" @click="tryAgain" v-if="msg.statusText=='未通过'&&state==1">
  109. <view class="newbillbtn">
  110. <text>重新提交</text>
  111. </view>
  112. </view> -->
  113. <view class="newbill flex1" v-if="msg.statusText=='未通过'&&state==1">
  114. <view class="choosebtn">
  115. <view class="delbtn flex1" @click="tryAgain()">重新提交</view>
  116. <view class="succbtn flex1" @click="addBill()">新增汇票</view>
  117. </view>
  118. </view>
  119. </view>
  120. </template>
  121. <script>
  122. let that
  123. import {
  124. mainUrl
  125. } from '@/http/baseUrl.js';
  126. export default {
  127. data() {
  128. return {
  129. id:'',
  130. msg:'',
  131. index:'',
  132. state:0,
  133. fileList4:[],
  134. feedback:'',
  135. disabled:false,
  136. delablepic:true,
  137. placehodertitle:'请输入审核反馈',
  138. contractId:'',
  139. statusText:''
  140. }
  141. },
  142. onLoad(o) {
  143. that=this
  144. this.state = this.$store.state.admin
  145. if(this.state==1){
  146. this.disabled=true
  147. this.delablepic=false
  148. }
  149. if(o.obj){
  150. let obj=JSON.parse(o.obj)
  151. this.id=obj.id
  152. console.log(obj,6464654)
  153. this.index=obj.index
  154. this.contractId=obj.contractId
  155. this.statusText=obj.statusText
  156. }
  157. this.init()
  158. },
  159. methods: {
  160. init(){
  161. let id=this.id
  162. uni.showLoading()
  163. uni.$u.http.get(`/api/Contract/contractDraft/${id}`,
  164. {
  165. custom: {
  166. auth: true
  167. }
  168. }).then((res) => {
  169. uni.hideLoading()
  170. this.msg=res
  171. if(res.feedbackPicList){
  172. const newData4 = res.feedbackPicList.map((item) => {
  173. return {
  174. url: item,
  175. }
  176. })
  177. this.fileList4 = newData4
  178. }
  179. if(this.state==1){
  180. if(res.feedback.length>0){
  181. this.feedback=res.feedback
  182. }else{
  183. this.feedback="无"
  184. }
  185. }else{
  186. if(res.feedback.length>0){
  187. this.feedback=res.feedback
  188. }else{
  189. this.placehodertitle="请输入审核反馈"
  190. }
  191. }
  192. }).catch((err) => {
  193. uni.hideLoading()
  194. this.$toast(err.msg)
  195. })
  196. },
  197. prviewPic(item) {
  198. let pics=[]
  199. pics.push(item)
  200. uni.previewImage({
  201. urls: pics,
  202. });
  203. },
  204. tryAgain(){
  205. let obj={
  206. contractId:this.contractId,
  207. id:this.id,
  208. contractDrafts:[this.msg]
  209. }
  210. uni.navigateTo({
  211. url:"/pages/alldeatil/addbill?obj="+JSON.stringify(obj)
  212. })
  213. },
  214. addBill() {
  215. uni.navigateTo({
  216. url: "/pages/alldeatil/addbill"
  217. })
  218. },
  219. examineSuccess() {
  220. // let ids = []
  221. // ids.push(this.id)
  222. uni.showModal({
  223. title: '提示',
  224. content: "是否审核成功?",
  225. success: function(res) {
  226. if (res.confirm) {
  227. let form={
  228. id:Number(that.id),
  229. approveStatus: 1
  230. }
  231. if(that.fileList4.length>0){
  232. let feedbackPicList=[]
  233. that.fileList4.forEach(item=>{
  234. feedbackPicList.push(item.url)
  235. })
  236. form.feedbackPicList=feedbackPicList
  237. }
  238. let feedback=that.feedback
  239. if(feedback.length>0){
  240. form.feedback=feedback
  241. }
  242. // ={
  243. // feedback:feedback,
  244. // feedbackPicList:feedbackPicList
  245. // }
  246. uni.showLoading()
  247. uni.$u.http.post('api/Contract/approveContractDraft',form, {
  248. custom: {
  249. auth: true
  250. }
  251. }).then((res) => {
  252. uni.hideLoading()
  253. that.editall = false
  254. that.quan = false
  255. that.$toast("操作成功")
  256. setTimeout(() => {
  257. that.init()
  258. }, 500)
  259. }).catch((err) => {
  260. uni.hideLoading()
  261. that.$toast(err.msg)
  262. })
  263. } else if (res.cancel) {
  264. }
  265. }
  266. })
  267. },
  268. examineFail() {
  269. uni.showModal({
  270. title: '提示',
  271. content: "是否审核失败?",
  272. success: function(res) {
  273. if (res.confirm) {
  274. let form={
  275. id:Number(that.id),
  276. approveStatus: 2
  277. }
  278. if(that.fileList4.length>0){
  279. let feedbackPicList=[]
  280. that.fileList4.forEach(item=>{
  281. feedbackPicList.push(item.url)
  282. })
  283. form.feedbackPicList=feedbackPicList
  284. }
  285. let feedback=that.feedback
  286. if(feedback.length>0){
  287. form.feedback=feedback
  288. }
  289. uni.showLoading()
  290. uni.$u.http.post('api/Contract/approveContractDraft',form, {
  291. custom: {
  292. auth: true
  293. }
  294. }).then((res) => {
  295. uni.hideLoading()
  296. that.editall = false
  297. that.quan = false
  298. that.$toast("操作成功")
  299. setTimeout(() => {
  300. that.init()
  301. }, 500)
  302. }).catch((err) => {
  303. uni.hideLoading()
  304. that.$toast(err.msg)
  305. })
  306. } else if (res.cancel) {
  307. }
  308. }
  309. })
  310. },
  311. // 删除图片
  312. deletePic(event) {
  313. this[`fileList${event.name}`].splice(event.index, 1)
  314. },
  315. // 新增图片
  316. async afterRead(event) {
  317. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  318. let lists = [].concat(event.file)
  319. let fileListLen = this[`fileList${event.name}`].length
  320. lists.map((item) => {
  321. this[`fileList${event.name}`].push({
  322. ...item,
  323. status: 'uploading',
  324. message: '上传中'
  325. })
  326. })
  327. for (let i = 0; i < lists.length; i++) {
  328. const result = await this.uploadFilePromise(lists[i].url)
  329. let item = this[`fileList${event.name}`][fileListLen]
  330. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  331. status: 'success',
  332. message: '',
  333. url: result
  334. }))
  335. fileListLen++
  336. }
  337. },
  338. uploadFilePromise(url) {
  339. return new Promise((resolve, reject) => {
  340. let a = uni.uploadFile({
  341. url:mainUrl + '/api/File', // 仅为示例,非真实的接口地址
  342. filePath: url,
  343. name: 'File',
  344. header: {
  345. "User-Agent": "apifox/1.0.0 (https://www.apifox.cn)"
  346. },
  347. formData: {
  348. File: JSON.stringify(url),
  349. },
  350. success: (res) => {
  351. let request = JSON.parse(res.data)
  352. setTimeout(() => {
  353. resolve(request.data.file)
  354. }, 1000)
  355. }
  356. });
  357. })
  358. },
  359. }
  360. }
  361. </script>
  362. <style lang="scss">
  363. page {
  364. background-color: #F6F6F6 !important;
  365. }
  366. .boxcon {
  367. margin: 20rpx 20rpx;
  368. padding: 50rpx 20rpx;
  369. border-radius: 20rpx;
  370. background: #fff;
  371. .titlename {
  372. font-size: 36rpx;
  373. font-weight: 600;
  374. padding-bottom: 30rpx;
  375. display: block;
  376. margin-bottom: 30rpx;
  377. border-bottom: 1rpx solid #E8E8E8;
  378. }
  379. .container {
  380. .bod {
  381. border-bottom: 1rpx solid #E8E8E8;
  382. box-sizing: border-box;
  383. }
  384. .ptin {
  385. padding-top: 50rpx;
  386. }
  387. .plas {
  388. padding-left: 65rpx;
  389. word-wrap: wrap;
  390. box-sizing: border-box;
  391. }
  392. .ds {
  393. padding-top: 30rpx;
  394. }
  395. .psa{
  396. padding-right: 30rpx;
  397. }
  398. .cls{
  399. color: #68625B;
  400. }
  401. .titleall {
  402. display: flex;
  403. justify-content: space-between;
  404. font-size: 28rpx;
  405. padding-bottom: 30rpx;
  406. .pl {
  407. // width: 180rpx;
  408. color: #BEBDBB;
  409. flex-shrink: 0;
  410. // margin-right: 30rpx;
  411. }
  412. .pr {
  413. word-wrap: wrap;
  414. display: block;
  415. display: -webkit-box;
  416. }
  417. .uppic {
  418. display: flex;
  419. flex-wrap: wrap;
  420. justify-content: flex-end;
  421. }
  422. .picbox {
  423. width: 150rpx;
  424. height: 150rpx;
  425. margin-left: 20rpx;
  426. border-radius: 20rpx;
  427. overflow: hidden;
  428. image {
  429. width: 100%;
  430. height: 100%;
  431. }
  432. }
  433. .fanuppic{
  434. display: flex;
  435. flex-wrap: wrap;
  436. }
  437. }
  438. }
  439. }
  440. </style>