billdetail.vue 12 KB

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