recordTrade1.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. <template>
  2. <view class="page">
  3. <view class="form">
  4. <u-form :model="form" ref="uForm">
  5. <u-form-item label-width="210" label="合同编号" prop="contract_no">
  6. <u-input placeholder="请输入合同编号" v-model="form.contract_no" type="text"></u-input>
  7. </u-form-item>
  8. <u-form-item label-width="210" label="签约时间" prop="sign_time" @click.native="opensignTimePopoup">
  9. <view class="scoped-input-floor" @click.native="opensignTimePopoup"></view>
  10. <u-input placeholder="请选择签约时间" v-model="form.sign_time" disabled type="text"></u-input>
  11. </u-form-item>
  12. <u-form-item label-width="210" label="贷款额度" prop="loan_amount">
  13. <u-input placeholder="请输入贷款额度" v-model="form.loan_amount" type="text"></u-input>
  14. <template v-slot:right>
  15. </template>
  16. </u-form-item>
  17. <u-form-item label-width="210" label="贷款银行" prop="loan_bank">
  18. <u-input placeholder="请选择贷款银行" v-model="form.loan_bank" disabled @click="loanBankOpen" type="text"></u-input>
  19. </u-form-item>
  20. <u-form-item label-width="210" label="贷款经理及电话" prop="loan_manager">
  21. <u-input placeholder="请输入贷款经理和电话" v-model="form.loan_manager" type="text"></u-input>
  22. </u-form-item>
  23. <u-form-item label-width="210" label="中介费(卖方)" prop="brokerage_fee1">
  24. <u-input placeholder="请输入中介费(卖方)" v-model="form.brokerage_fee1" type="text"></u-input>
  25. <template v-slot:right>
  26. </template>
  27. </u-form-item>
  28. <u-form-item label-width="210" label="中介费(买方)" prop="brokerage_fee2">
  29. <u-input placeholder="请输入中介费(买方)" v-model="form.brokerage_fee2" type="text"></u-input>
  30. <template v-slot:right>
  31. </template>
  32. </u-form-item>
  33. <u-form-item label-width="210" label="贷款服务费" prop="loan_fee">
  34. <u-input placeholder="请输入贷款服务费" v-model="form.loan_fee" type="text"></u-input>
  35. <template v-slot:right>
  36. </template>
  37. </u-form-item>
  38. <u-form-item label-width="210" label="代办费及其它" prop="agency_fee">
  39. <u-input placeholder="请输入代办费及其它" v-model="form.agency_fee" type="text"></u-input>
  40. <template v-slot:right>
  41. </template>
  42. </u-form-item>
  43. </u-form>
  44. <view class="scoped-more-img">
  45. <view class="smi-title">上传合同及附件</view>
  46. <view class="si-op" v-for="(url, index) in contractImgList" :key="index">
  47. <u-image :src="url" class="img" mode="aspectFill" height="150rpx" @click="previewImageHandle(url, contractImgList)" ></u-image>
  48. <u-image src="/static/icon_g_close.png" class="i" height="40rpx" @click="contractDelImg(index)"></u-image>
  49. </view>
  50. <view class="si-op" @click="contractAddImg">
  51. <u-image src="/static/icon_upload_img.png" mode="heightFix" height="150rpx" class="img"></u-image>
  52. </view>
  53. </view>
  54. <view class="scoped-more-img">
  55. <view class="smi-title">产证图片</view>
  56. <view class="si-op" v-for="(url, index) in realEstateList" :key="index">
  57. <u-image :src="url" class="img" mode="aspectFill" height="150rpx" @click="previewImageHandle(url, realEstateList)" ></u-image>
  58. <u-image src="/static/icon_g_close.png" class="i" height="40rpx" @click="realEstateDelImg(index)"></u-image>
  59. </view>
  60. <view class="si-op" @click="realEstateAddImg">
  61. <u-image src="/static/icon_upload_img.png" mode="heightFix" height="150rpx" class="img"></u-image>
  62. </view>
  63. </view>
  64. <view class="scoped-more-img">
  65. <view class="smi-title">买方身份证</view>
  66. <view class="si-op" v-for="(url, index) in buyIdCardList" :key="index">
  67. <u-image :src="url" class="img" mode="aspectFill" height="150rpx" @click="previewImageHandle(url, buyIdCardList)" ></u-image>
  68. <u-image src="/static/icon_g_close.png" class="i" height="40rpx" @click="buyIdCardDelImg(index)"></u-image>
  69. </view>
  70. <view class="si-op" @click="buyIdCardAddImg">
  71. <u-image src="/static/icon_upload_img.png" mode="heightFix" height="150rpx" class="img"></u-image>
  72. </view>
  73. </view>
  74. <view class="scoped-more-img">
  75. <view class="smi-title">卖方身份证</view>
  76. <view class="si-op" v-for="(url, index) in sellIdCardList" :key="index">
  77. <u-image :src="url" class="img" mode="aspectFill" height="150rpx" @click="previewImageHandle(url, sellIdCardList)" ></u-image>
  78. <u-image src="/static/icon_g_close.png" class="i" height="40rpx" @click="sellIdCardDelImg(index)"></u-image>
  79. </view>
  80. <view class="si-op" @click="sellIdCardAddImg">
  81. <u-image src="/static/icon_upload_img.png" mode="heightFix" height="150rpx" class="img"></u-image>
  82. </view>
  83. </view>
  84. <view class="scoped-more-img">
  85. <view class="smi-title">定金凭证和房产证收据</view>
  86. <view class="si-op" v-for="(url, index) in frontMoneyList" :key="index">
  87. <u-image :src="url" class="img" mode="aspectFill" height="150rpx" @click="previewImageHandle(url, frontMoneyList)" ></u-image>
  88. <u-image src="/static/icon_g_close.png" class="i" height="40rpx" @click="frontMoneyDelImg(index)"></u-image>
  89. </view>
  90. <view class="si-op" @click="frontMoneyAddImg">
  91. <u-image src="/static/icon_upload_img.png" mode="heightFix" height="150rpx" class="img"></u-image>
  92. </view>
  93. </view>
  94. <u-gap height="60"></u-gap>
  95. <u-button type="primary" @click="submitHandle">下一步</u-button>
  96. </view>
  97. <!-- utoast -->
  98. <u-toast ref="uToast" />
  99. <u-select v-model="isLoanBankShow" :list="loanBankList" label-name="dict_label" value-name="option1" @confirm="loanBankClose"></u-select>
  100. <u-calendar v-model="signTimeShow" mode="date" @change="signTimeChange"></u-calendar>
  101. </view>
  102. </template>
  103. <script>
  104. import { arrToObj } from '@/utils'
  105. export default {
  106. data() {
  107. return {
  108. frontMoneyList: [],
  109. realEstateList: [],
  110. buyIdCardList: [],
  111. sellIdCardList: [],
  112. contractImgList: [],
  113. signTimeShow: false,
  114. isLoanBankShow: false,
  115. loanBankList: [],
  116. form: {
  117. contract_no: '',
  118. sign_time: '',
  119. loan_amount: '',
  120. loan_bank: '',
  121. loan_manager: '',
  122. brokerage_fee1: '',
  123. brokerage_fee2: '',
  124. loan_fee: '',
  125. agency_fee: '',
  126. },
  127. trade_id: null,
  128. };
  129. },
  130. onLoad(data) {
  131. this.trade_id = data.id
  132. this.getData()
  133. },
  134. onShow() {
  135. // if (this.trade_id) {
  136. // this.getData()
  137. // }
  138. },
  139. created() {
  140. const dictObj = uni.getStorageSync('MD_dict') || {}
  141. const lbArr = dictObj.loan_bank || []
  142. let loanBankList = []
  143. lbArr.forEach(item => {
  144. loanBankList.push(item)
  145. })
  146. this.loanBankList = [...loanBankList]
  147. },
  148. // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  149. onReady() {
  150. // this.$refs.uForm.setRules(this.rules);
  151. },
  152. methods: {
  153. loanBankOpen () {
  154. this.isLoanBankShow = true
  155. },
  156. loanBankClose (arr) {
  157. this.isLoanBankShow = false
  158. if (arr) {
  159. this.form.loan_bank = arr[0].label
  160. this.form.loan_manager = arr[0].value
  161. }
  162. },
  163. getData () {
  164. uni.api.cust.apitradestepinfo({trade_id:this.trade_id}).then(res =>{
  165. this.form = {
  166. contract_no: res.contract_no,
  167. sign_time: res.sign_time,
  168. loan_amount: res.loan_amount,
  169. loan_bank: res.loan_bank,
  170. loan_manager: res.loan_manager,
  171. brokerage_fee1: res.brokerage_fee1,
  172. brokerage_fee2: res.brokerage_fee2,
  173. loan_fee: res.loan_fee,
  174. agency_fee: res.agency_fee,
  175. }
  176. this.frontMoneyList = res.front_money && res.front_money.length > 0 ? res.front_money.split(',') : []
  177. this.realEstateList = res.real_estate && res.real_estate.length > 0 ? res.real_estate.split(',') : []
  178. this.contractImgList = res.contract && res.contract.length > 0 ? res.contract.split(',') : []
  179. this.buyIdCardList = res.buy_id_card && res.buy_id_card.length > 0 ? res.buy_id_card.split(',') : []
  180. this.sellIdCardList = res.sell_id_card && res.sell_id_card.length > 0 ? res.sell_id_card.split(',') : []
  181. })
  182. },
  183. opensignTimePopoup () {
  184. this.signTimeShow = true
  185. },
  186. signTimeChange (e) {
  187. this.form.sign_time = e.result || ''
  188. },
  189. contractAddImg () {
  190. this.uploadComImg((arr) => {
  191. let imgArr = [...this.contractImgList, ...arr]
  192. this.contractImgList = JSON.parse(JSON.stringify(imgArr))
  193. }, 9)
  194. },
  195. contractDelImg (index) {
  196. let imgArr = [...this.contractImgList]
  197. imgArr.splice(index, 1)
  198. this.contractImgList = JSON.parse(JSON.stringify(imgArr))
  199. },
  200. buyIdCardAddImg () {
  201. const oldList = JSON.parse(JSON.stringify(this.buyIdCardList))
  202. this.uploadComImg((arr) => {
  203. let buyIdCard = [...oldList, ...arr]
  204. this.buyIdCardList = JSON.parse(JSON.stringify(buyIdCard))
  205. }, 9)
  206. },
  207. buyIdCardDelImg (index) {
  208. let buyIdCard = [...this.buyIdCardList]
  209. buyIdCard.splice(index, 1)
  210. this.buyIdCardList = JSON.parse(JSON.stringify(buyIdCard))
  211. },
  212. sellIdCardAddImg () {
  213. const oldList = JSON.parse(JSON.stringify(this.sellIdCardList))
  214. this.uploadComImg((arr) => {
  215. let sellIdCard = [...oldList, ...arr]
  216. this.sellIdCardList = JSON.parse(JSON.stringify(sellIdCard))
  217. }, 9)
  218. },
  219. sellIdCardDelImg (index) {
  220. let sellIdCard = [...this.sellIdCardList]
  221. sellIdCard.splice(index, 1)
  222. this.sellIdCardList = JSON.parse(JSON.stringify(sellIdCard))
  223. },
  224. realEstateAddImg () {
  225. this.uploadComImg((arr) => {
  226. let imgArr = [...this.realEstateList, ...arr]
  227. this.realEstateList = JSON.parse(JSON.stringify(imgArr))
  228. }, 9)
  229. },
  230. realEstateDelImg (index) {
  231. let imgArr = [...this.realEstateList]
  232. imgArr.splice(index, 1)
  233. this.realEstateList = JSON.parse(JSON.stringify(imgArr))
  234. },
  235. frontMoneyAddImg () {
  236. this.uploadComImg((arr) => {
  237. let imgArr = [...this.frontMoneyList, ...arr]
  238. this.frontMoneyList = JSON.parse(JSON.stringify(imgArr))
  239. }, 9)
  240. },
  241. frontMoneyDelImg (index) {
  242. let imgArr = [...this.frontMoneyList]
  243. imgArr.splice(index, 1)
  244. this.frontMoneyList = JSON.parse(JSON.stringify(imgArr))
  245. },
  246. uploadComImg (bc, count, moreStr) {
  247. const that = this
  248. uni.chooseImage({
  249. count: count ? count : 1, // 默认9
  250. sizeType: ['compressed'], // original
  251. sourceType: ['album', 'camera'],
  252. success: function (res) {
  253. const tempFilePaths = res.tempFilePaths
  254. if (tempFilePaths.length > 0) {
  255. let imgBcArr = []
  256. tempFilePaths.forEach((p, i) => {
  257. that.diyUploadFile(p, moreStr).then(url => {
  258. imgBcArr.push(url)
  259. if (bc && imgBcArr.length === tempFilePaths.length) {
  260. bc(imgBcArr)
  261. }
  262. })
  263. })
  264. }
  265. }
  266. })
  267. },
  268. diyUploadFile (filePath, moreStr) {
  269. return new Promise((resolve, reject) => {
  270. let token = uni.getStorageSync('MD_token')
  271. let url = uni.baseUrl + 'api/upload/cloud'
  272. // if (moreStr === 'noSign') url = uni.baseUrl + 'api/upload/cloud'
  273. uni.uploadFile({
  274. url,
  275. filePath,
  276. name: 'upload',
  277. formData: {
  278. 'token': token
  279. },
  280. success (res){
  281. const cData = JSON.parse(res.data)
  282. let curImg = cData.data.url || ''
  283. resolve(curImg)
  284. }
  285. })
  286. })
  287. },
  288. previewImageHandle (current, urls) {
  289. uni.previewImage({
  290. current,
  291. urls
  292. })
  293. },
  294. submitHandle() {
  295. const that = this
  296. let apiStr = 'apitradecontractedit'
  297. let params = {
  298. contract_no: that.form.contract_no || '',
  299. sign_time: that.form.sign_time || '',
  300. loan_amount: that.form.loan_amount || '',
  301. loan_bank: that.form.loan_bank || '',
  302. loan_manager: that.form.loan_manager || '',
  303. brokerage_fee1: that.form.brokerage_fee1 || '',
  304. brokerage_fee2: that.form.brokerage_fee2 || '',
  305. loan_fee: that.form.loan_fee || '',
  306. agency_fee: that.form.agency_fee || '',
  307. trade_id: that.trade_id
  308. }
  309. params.front_money = that.frontMoneyList.join(',')
  310. params.real_estate = that.realEstateList.join(',')
  311. params.contract = that.contractImgList.join(',')
  312. params.buy_id_card = that.buyIdCardList.join(',')
  313. params.sell_id_card = that.sellIdCardList.join(',')
  314. // if (that.isEdit) {
  315. // apiStr = 'apitraderecordedit'
  316. // params.id = that.form.id
  317. // }
  318. uni.api.cust[apiStr](params).then(res => {
  319. uni.$msgConfirm('修改成功,是否前往跟踪合同?', () => {
  320. // uni.navigateBack()
  321. uni.navigateTo({
  322. url: `/pages/trade/recordTrade2?id=${that.trade_id}`
  323. })
  324. }, () => {
  325. // that.contractImgList = []
  326. // that.realEstateList = []
  327. // that.contractImgList = []
  328. // that.form = {
  329. // sign_time: '',
  330. // loan_amount: '',
  331. // loan_bank: '',
  332. // brokerage_fee1: '',
  333. // brokerage_fee2: '',
  334. // }
  335. })
  336. })
  337. // this.$refs.uForm.validate(valid => {
  338. // if (valid) {
  339. // // 验证成功
  340. // } else {
  341. // console.log('验证失败');
  342. // }
  343. // });
  344. },
  345. }
  346. };
  347. </script>
  348. <style lang="scss">
  349. .page {
  350. padding: 20rpx;
  351. background-color: #ffffff;
  352. }
  353. .form {
  354. border-radius: 10rpx;
  355. padding: 0 40rpx;
  356. }
  357. .popup-body {
  358. .tips-title {
  359. font-size: $u-p;
  360. margin-bottom: 20rpx;
  361. }
  362. .tips-content {
  363. font-size: $u-p2;
  364. color: $u-tips-color;
  365. margin-bottom: 60rpx;
  366. }
  367. }
  368. .id_card {
  369. color: #606266;
  370. width: 100%;
  371. height: 350rpx;
  372. display: flex;
  373. flex-direction: column;
  374. align-items: center;
  375. justify-content: center;
  376. background-color: #f4f5f6;
  377. font-size: $u-p2;
  378. }
  379. .footer {
  380. position: absolute;
  381. text-align: center;
  382. bottom: 40rpx;
  383. font-size: $u-p2;
  384. .agreement {
  385. color: $u-type-error;
  386. }
  387. }
  388. .slot-content {
  389. font-size: 28rpx;
  390. color: $u-content-color;
  391. padding: 20rpx;
  392. }
  393. .scoped-input-floor {
  394. position: absolute;
  395. left: 0;
  396. top: 0;
  397. width: 100%;
  398. height: 100%;
  399. background: transparent;
  400. z-index: 9;
  401. }
  402. .scoped-more-img {
  403. padding-top: 30rpx;
  404. .smi-title {
  405. font-size: 28rpx;
  406. padding-bottom: 20rpx;
  407. color: #303133;
  408. }
  409. .si-op {
  410. display: inline-block;
  411. vertical-align: middle;
  412. width: 150rpx;
  413. height: 150rpx;
  414. margin-right: 30rpx;
  415. margin-bottom: 30rpx;
  416. position: relative;
  417. border: 1PX solid #f2f2f2;
  418. box-sizing: border-box;
  419. .img {
  420. width: 150rpx;
  421. height: 150rpx;
  422. }
  423. .i {
  424. position: absolute;
  425. top: -20rpx;
  426. right: -20rpx;
  427. width: 40rpx;
  428. height: 40rpx;
  429. z-index: 9;
  430. }
  431. }
  432. }
  433. </style>