billdetail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  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. console.log(this.statusText,9999)
  157. }
  158. this.init()
  159. },
  160. methods: {
  161. init(){
  162. let id=this.id
  163. uni.showLoading()
  164. uni.$u.http.get(`/api/Contract/contractDraft/${id}`,
  165. {
  166. custom: {
  167. auth: true
  168. }
  169. }).then((res) => {
  170. uni.hideLoading()
  171. this.msg=res
  172. if(res.feedbackPicList){
  173. const newData4 = res.feedbackPicList.map((item) => {
  174. return {
  175. url: item,
  176. }
  177. })
  178. this.fileList4 = newData4
  179. }
  180. if(this.state==1){
  181. if(res.feedback.length>0){
  182. this.feedback=res.feedback
  183. }else{
  184. this.feedback="无"
  185. }
  186. }else{
  187. if(res.feedback.length>0){
  188. this.feedback=res.feedback
  189. }else{
  190. this.placehodertitle="请输入审核反馈"
  191. }
  192. }
  193. }).catch((err) => {
  194. uni.hideLoading()
  195. this.$toast(err.msg)
  196. })
  197. },
  198. prviewPic(item) {
  199. let pics=[]
  200. pics.push(item)
  201. uni.previewImage({
  202. urls: pics,
  203. });
  204. },
  205. tryAgain(){
  206. let obj={
  207. contractId:this.contractId,
  208. id:this.id,
  209. contractDrafts:[this.msg]
  210. }
  211. uni.navigateTo({
  212. url:"/pages/alldeatil/addbill?obj="+JSON.stringify(obj)
  213. })
  214. },
  215. addBill() {
  216. uni.navigateTo({
  217. url: "/pages/alldeatil/addbill"
  218. })
  219. },
  220. examineSuccess() {
  221. // let ids = []
  222. // ids.push(this.id)
  223. uni.showModal({
  224. title: '提示',
  225. content: "是否审核成功?",
  226. success: function(res) {
  227. if (res.confirm) {
  228. let form={
  229. id:Number(that.id),
  230. approveStatus: 1
  231. }
  232. if(that.fileList4.length>0){
  233. let feedbackPicList=[]
  234. that.fileList4.forEach(item=>{
  235. feedbackPicList.push(item.url)
  236. })
  237. form.feedbackPicList=feedbackPicList
  238. }
  239. let feedback=that.feedback
  240. if(feedback.length>0){
  241. form.feedback=feedback
  242. }
  243. // ={
  244. // feedback:feedback,
  245. // feedbackPicList:feedbackPicList
  246. // }
  247. uni.showLoading()
  248. uni.$u.http.post('api/Contract/approveContractDraft',form, {
  249. custom: {
  250. auth: true
  251. }
  252. }).then((res) => {
  253. uni.hideLoading()
  254. that.editall = false
  255. that.quan = false
  256. that.$toast("操作成功")
  257. setTimeout(() => {
  258. that.init()
  259. }, 500)
  260. }).catch((err) => {
  261. uni.hideLoading()
  262. that.$toast(err.msg)
  263. })
  264. } else if (res.cancel) {
  265. }
  266. }
  267. })
  268. },
  269. examineFail() {
  270. uni.showModal({
  271. title: '提示',
  272. content: "是否审核失败?",
  273. success: function(res) {
  274. if (res.confirm) {
  275. let form={
  276. id:Number(that.id),
  277. approveStatus: 2
  278. }
  279. if(that.fileList4.length>0){
  280. let feedbackPicList=[]
  281. that.fileList4.forEach(item=>{
  282. feedbackPicList.push(item.url)
  283. })
  284. form.feedbackPicList=feedbackPicList
  285. }
  286. let feedback=that.feedback
  287. if(feedback.length>0){
  288. form.feedback=feedback
  289. }
  290. uni.showLoading()
  291. uni.$u.http.post('api/Contract/approveContractDraft',form, {
  292. custom: {
  293. auth: true
  294. }
  295. }).then((res) => {
  296. uni.hideLoading()
  297. that.editall = false
  298. that.quan = false
  299. that.$toast("操作成功")
  300. setTimeout(() => {
  301. that.init()
  302. }, 500)
  303. }).catch((err) => {
  304. uni.hideLoading()
  305. that.$toast(err.msg)
  306. })
  307. } else if (res.cancel) {
  308. }
  309. }
  310. })
  311. },
  312. // 删除图片
  313. deletePic(event) {
  314. this[`fileList${event.name}`].splice(event.index, 1)
  315. },
  316. // 新增图片
  317. async afterRead(event) {
  318. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  319. let lists = [].concat(event.file)
  320. let fileListLen = this[`fileList${event.name}`].length
  321. lists.map((item) => {
  322. this[`fileList${event.name}`].push({
  323. ...item,
  324. status: 'uploading',
  325. message: '上传中'
  326. })
  327. })
  328. for (let i = 0; i < lists.length; i++) {
  329. const result = await this.uploadFilePromise(lists[i].url)
  330. let item = this[`fileList${event.name}`][fileListLen]
  331. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  332. status: 'success',
  333. message: '',
  334. url: result
  335. }))
  336. fileListLen++
  337. }
  338. },
  339. uploadFilePromise(url) {
  340. return new Promise((resolve, reject) => {
  341. let a = uni.uploadFile({
  342. url:mainUrl + '/api/File', // 仅为示例,非真实的接口地址
  343. filePath: url,
  344. name: 'File',
  345. header: {
  346. "User-Agent": "apifox/1.0.0 (https://www.apifox.cn)"
  347. },
  348. formData: {
  349. File: JSON.stringify(url),
  350. },
  351. success: (res) => {
  352. let request = JSON.parse(res.data)
  353. setTimeout(() => {
  354. resolve(request.data.file)
  355. }, 1000)
  356. }
  357. });
  358. })
  359. },
  360. }
  361. }
  362. </script>
  363. <style lang="scss">
  364. page {
  365. background-color: #F6F6F6 !important;
  366. }
  367. .boxcon {
  368. margin: 20rpx 20rpx;
  369. padding: 50rpx 20rpx;
  370. border-radius: 20rpx;
  371. background: #fff;
  372. .titlename {
  373. font-size: 36rpx;
  374. font-weight: 600;
  375. padding-bottom: 30rpx;
  376. display: block;
  377. margin-bottom: 30rpx;
  378. border-bottom: 1rpx solid #E8E8E8;
  379. }
  380. .container {
  381. .bod {
  382. border-bottom: 1rpx solid #E8E8E8;
  383. box-sizing: border-box;
  384. }
  385. .ptin {
  386. padding-top: 50rpx;
  387. }
  388. .plas {
  389. padding-left: 65rpx;
  390. word-wrap: wrap;
  391. box-sizing: border-box;
  392. }
  393. .ds {
  394. padding-top: 30rpx;
  395. }
  396. .psa{
  397. padding-right: 30rpx;
  398. }
  399. .cls{
  400. color: #68625B;
  401. }
  402. .titleall {
  403. display: flex;
  404. justify-content: space-between;
  405. font-size: 28rpx;
  406. padding-bottom: 30rpx;
  407. .pl {
  408. // width: 180rpx;
  409. color: #BEBDBB;
  410. flex-shrink: 0;
  411. // margin-right: 30rpx;
  412. }
  413. .pr {
  414. word-wrap: wrap;
  415. display: block;
  416. display: -webkit-box;
  417. }
  418. .uppic {
  419. display: flex;
  420. flex-wrap: wrap;
  421. justify-content: flex-end;
  422. }
  423. .picbox {
  424. width: 150rpx;
  425. height: 150rpx;
  426. margin-left: 20rpx;
  427. border-radius: 20rpx;
  428. overflow: hidden;
  429. image {
  430. width: 100%;
  431. height: 100%;
  432. }
  433. }
  434. .fanuppic{
  435. display: flex;
  436. flex-wrap: wrap;
  437. }
  438. }
  439. }
  440. }
  441. </style>