consignor.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <template>
  2. <div class="contrl">
  3. <div v-if="upload.excelId">
  4. <div class="title1-div">
  5. <span style="font-weight: bold;">报告基本信息</span>
  6. </div>
  7. <el-form ref="base" :model="baseInfo" label-width="180" label-position="right"
  8. style="max-width: 100%; border: 1.5px #dae1eb solid; padding-top: 20px; padding-bottom: 5px; border-radius: 5px;" :inline="true">
  9. <el-row>
  10. <el-col :span="24">
  11. <el-form-item label="估价项目名称:" class="form-item" prop="docName">
  12. <el-input :value="baseInfo.docName" disabled readonly style="width: 96.2%;" />
  13. <!-- <div style="width: 100%; background-color: #dae1eb;">2</div> -->
  14. </el-form-item>
  15. </el-col>
  16. </el-row>
  17. <el-row :gutter="24">
  18. <el-col :span="12">
  19. <el-form-item label="报告业务类型:" class="form-item" prop="businessType">
  20. <el-input :value="baseInfo.businessType=='GUARANTY'?'抵押类':'-'" disabled readonly />
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="12">
  24. <el-form-item label="报告号:" class="form-item" prop="docNo">
  25. <el-input :value="baseInfo.docNo" disabled readonly />
  26. </el-form-item>
  27. </el-col>
  28. </el-row>
  29. <el-row :gutter="24">
  30. <el-col :span="12">
  31. <el-form-item label="委托人:" class="form-item" prop="consignor">
  32. <el-input :value="baseInfo.consignor" disabled readonly />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12">
  36. <el-form-item label="不动产权利人:" class="form-item" prop="owner">
  37. <el-input :value="baseInfo.owner" disabled readonly />
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. <el-row :gutter="24">
  42. <el-col :span="12">
  43. <el-form-item label="估价师1:" class="form-item" prop="appraiser1">
  44. <el-input :value="baseInfo.appraiser1" disabled readonly />
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="12">
  48. <el-form-item label="估价师2:" class="form-item" prop="appraiser2">
  49. <el-input :value="baseInfo.appraiser2" disabled readonly />
  50. </el-form-item>
  51. </el-col>
  52. </el-row>
  53. <el-row :gutter="24">
  54. <el-col :span="12">
  55. <el-form-item label="估价师1注册号:" class="form-item" prop="appraNo1">
  56. <el-input :value="baseInfo.appraNo1" disabled readonly />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item label="估价师2注册号:" class="form-item" prop="appraNo2">
  61. <el-input :value="baseInfo.appraNo2" disabled readonly />
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row :gutter="24">
  66. <el-col :span="12">
  67. <el-form-item label="出具报告日期:" class="form-item" prop="docDate">
  68. <el-input :value="baseInfo.docDate" disabled readonly />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="价值时点:" class="form-item" prop="valueTiming">
  73. <el-input :value="baseInfo.valueTiming" disabled readonly />
  74. </el-form-item>
  75. </el-col>
  76. </el-row>
  77. <el-row :gutter="24">
  78. <el-col :span="12">
  79. <el-form-item label="评估方法:" class="form-item" prop="workMethod">
  80. <el-input :value="baseInfo.workMethod" disabled readonly />
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. <!-- <div style="width: 100%; text-align: right;">
  85. <el-button type="text" @click="saveBaseInfo()">
  86. 修改基本信息
  87. </el-button>
  88. </div> -->
  89. </el-form>
  90. <div style="margin-top: 30px; width: 100%; text-align: right; ">
  91. <el-button type="text" @click="genarate()">
  92. 生成《致委托人函》
  93. <el-icon style="vertical-align: -20%;">
  94. <ArrowRightBold />
  95. </el-icon>
  96. </el-button>
  97. </div>
  98. </div>
  99. <div style="width: 95%;">
  100. <div class="title-div">
  101. <span style="font-weight: bold;">上传估价结果一览表</span>
  102. </div>
  103. </div>
  104. <div class="download-btn">
  105. <img src="../../../assets/icons/form.png"
  106. style="width: 26px; height: 26px; float: left; margin-top: 27px;" />
  107. <el-tooltip content="点击下载" effect="light" placement="top">
  108. <span class="form-name" @click="downloadCollect1">报告自动生成_模版1.0.xlsx</span>
  109. </el-tooltip>
  110. </div>
  111. <div class="target-windows">
  112. <SheetView :uploadUrl="'/api/file/house/guaranty/target'"
  113. @getUploadReture="uploadReture" v-model:targetsHtml="process.targetsHtml"></SheetView>
  114. </div>
  115. </div>
  116. </template>
  117. <script>
  118. import SheetView from '../../../components/SheetView/index.vue'
  119. import houseGuaranty from '@/api/houseGuaranty';
  120. import globalConfig from '@/api/globalConfig';
  121. import houseExcelData from '@/api/houseExcelData';
  122. import fileUtil from '@/utils/file'
  123. import Steps from '../../../components/Steps/index.vue'
  124. export default {
  125. components: {
  126. SheetView,
  127. Steps,
  128. },
  129. data() {
  130. return {
  131. // rules: {
  132. // consignor: [{ required: true, message: '委托人不能为空', trigger: 'blur' }],
  133. // docNo: [{ required: true, message: '报告号不能为空', trigger: 'blur' }],
  134. // appraiser1: [{ required: true, message: '估价师1不能为空', trigger: 'blur' }],
  135. // appraiser2: [{ required: true, message: '估价师2不能为空', trigger: 'blur' }],
  136. // docDate: [{ required: true, message: '出具报告日期不能为空', trigger: 'blur' }],
  137. // valueTiming: [{ required: true, message: '价值时点不能为空', trigger: 'blur' }],
  138. // methodList: [{ required: true, message: '评估方法不能为空', trigger: 'blur' }],
  139. // consignorType: [{ required: true, message: '委托人类型不能为空', trigger: 'blur' }],
  140. // consignorAddress: [{ required: true, message: '委托人住所不能为空', trigger: 'blur' }],
  141. // consignorPerson: [{ required: true, message: '法定代表人不能为空', trigger: 'blur' }],
  142. // consignorMoney: [{ required: true, message: '注册资本不能为空', trigger: 'blur' }],
  143. // creditCode: [{ required: true, message: '统一社会信用代码不能为空', trigger: 'blur' }],
  144. // pledgeUser: [{ required: true, message: '抵押权人不能为空', trigger: 'blur' }],
  145. // pledgeType: [{ required: true, message: '抵押权类型不能为空', trigger: 'blur' }],
  146. // pledgeValue: [{ required: true, message: '抵押权价值不能为空', trigger: 'blur' }],
  147. // newPledgeUser: [{ required: true, message: '新抵押权人不能为空', trigger: 'blur' }],
  148. // },
  149. nextPath: '/home/houseWorkbench/certificate',
  150. excelHtml: null,
  151. upload: {
  152. excelId:null,
  153. fileName:null,
  154. filePath:null
  155. },
  156. processId: null,
  157. docId: null,
  158. process: {
  159. id: null,
  160. home: null,
  161. targetsHtml: null,
  162. createdTime: null,
  163. updateTime: null
  164. },
  165. stepDialog: false,
  166. stepArray: [
  167. { name: '上传表单' },
  168. { name: '解析估价对象一览表' },
  169. { name: '生成致委托人函' },
  170. { name: '完成' }
  171. ],
  172. baseInfo: {
  173. id: null,
  174. businessType: null,
  175. docName: null,
  176. docNo: null,
  177. consignor: null,
  178. owner: null,
  179. appraiser1: null,
  180. appraiser2: null,
  181. appraNo1: null,
  182. appraNo2: null,
  183. docDate: null,
  184. valueTiming: null,
  185. workMethod: null,
  186. },
  187. apprisers: []
  188. }
  189. },
  190. created() {
  191. this.docId = this.$route.query.id;
  192. this.upload.excelId = this.$route.query.businessId;
  193. this.getProcess();
  194. this.$emit('getDocumentId', this.docId);
  195. this.$emit('getBusinessId', this.upload.excelId);
  196. this.getBaseInfo();
  197. // this.getApprisers();
  198. },
  199. methods: {
  200. genConsignorLetter() {
  201. houseGuaranty.genConsignorLetter(this.processId, this.docId).then(res => {
  202. if (res.code === 200) {
  203. ElMessage({
  204. message: '致委托人函已生成',
  205. type: 'success',
  206. plain: true
  207. })
  208. this.$emit('getProcessParentId', this.processId);
  209. this.$emit('getDocumentId', this.docId)
  210. }
  211. })
  212. },
  213. uploadReture(data) {
  214. this.upload = data;
  215. this.docId = data.docId;
  216. this.getBaseInfo();
  217. setTimeout(()=>{
  218. this.generateTargetWord();
  219. },1000)
  220. },
  221. genTargetTableWord(excelData, homePath) {
  222. if (excelData && homePath) {
  223. const param = new Object();
  224. param.html = excelData;
  225. param.homePath = homePath;
  226. houseGuaranty.genTargetsTableWord(param).then(res => {
  227. if (res.code === 200) {
  228. this.processId = res.data;
  229. }
  230. })
  231. }
  232. },
  233. analysisExcel(id) {
  234. houseGuaranty.analysisCollect1(id).then(res => {
  235. if (res.code === 200) {
  236. this.genConsignorLetter(id);
  237. }
  238. })
  239. },
  240. generateTargetWord(){
  241. const targetTableHtml = document.getElementsByTagName('table')[0].outerHTML;
  242. const certificateTableHtml = document.getElementsByTagName('table')[1].outerHTML;
  243. if (targetTableHtml && this.upload) {
  244. const param = new Object();
  245. param.targetTableHtml = targetTableHtml;
  246. param.certificateTableHtml = certificateTableHtml;
  247. param.homePath = this.upload.filePath;
  248. param.excelId = this.upload.excelId;
  249. houseGuaranty.genTargetsTableWord(param).then(res => {
  250. if (res.code === 200) {
  251. this.baseInfo.processId = res.data;
  252. this.processId = res.data;
  253. }
  254. })
  255. }
  256. },
  257. genarate() {
  258. if (this.processId === null || typeof this.processId === 'undefined') {
  259. ElMessage({
  260. message: '请先上传估价对象一览表',
  261. type: 'error',
  262. plain: true
  263. })
  264. }
  265. if (this.upload.excelId && this.processId) {
  266. const loading = this.$loading();
  267. houseGuaranty.genConsignorLetter(this.upload.excelId,this.processId).then(res => {
  268. if (res.code === 200) {
  269. ElMessage({
  270. message: '致委托人函已生成',
  271. type: 'success',
  272. plain: true
  273. })
  274. this.$emit('getProcessParentId', this.processId);
  275. this.$emit('getDocumentId', this.docId);
  276. this.$emit('getBusinessId', this.upload.excelId);
  277. loading.close();
  278. }else {
  279. ElMessage({
  280. message: '致委托人函生成失败,请检查Excel文件。',
  281. type: 'error',
  282. plain: true
  283. })
  284. loading.close();
  285. }
  286. })
  287. }
  288. },
  289. getProcess() {
  290. if (this.docId) {
  291. houseGuaranty.getProcessByDocId(this.docId).then(res => {
  292. if (res.code === 200) {
  293. this.process = res.data;
  294. this.processId = this.process.id;
  295. this.$emit('getProcessParentId', this.process.id)
  296. }
  297. })
  298. }
  299. },
  300. downloadCollect1() {
  301. fileUtil.download("/file/download/house/guaranty/collect1");
  302. },
  303. getApprisers() {
  304. globalConfig.getByType("APPRAISER").then(res => {
  305. if (res.code === 200) {
  306. this.apprisers = res.data;
  307. }
  308. })
  309. },
  310. changeAppr1() {
  311. let apprNo = this.apprisers.filter(item => item.key == this.baseInfo.appraiser1);
  312. this.baseInfo.appraNo1 = apprNo[0].value;
  313. },
  314. changeAppr2() {
  315. let apprNo = this.apprisers.filter(item => item.key == this.baseInfo.appraiser2);
  316. this.baseInfo.appraNo2 = apprNo[0].value;
  317. },
  318. getBaseInfo() {
  319. if (this.upload.excelId) {
  320. const loading = this.$loading();
  321. houseExcelData.getBaseInfo(this.upload.excelId).then(res => {
  322. if (res.code === 200) {
  323. this.baseInfo = res.data;
  324. ElMessage({
  325. message: '数据获取成功',
  326. type: 'success',
  327. plain: true
  328. })
  329. loading.close();
  330. }else{
  331. ElMessage({
  332. message: '数据获取出错',
  333. type: 'error',
  334. plain: true
  335. })
  336. loading.close();
  337. }
  338. })
  339. }
  340. },
  341. saveBaseInfo() {
  342. this.$refs.base.validate(valid => {
  343. if (valid) {
  344. this.baseInfo.processId = this.processId;
  345. this.baseInfo.methods = JSON.stringify(this.baseInfo.methodList);
  346. houseGuarantyBase.save(this.baseInfo).then(res => {
  347. if (res.code === 200 && res.data) {
  348. this.baseInfo.id = res.data
  349. ElMessage({
  350. message: '基本信息保存成功',
  351. type: 'success',
  352. plain: true
  353. })
  354. }
  355. })
  356. }
  357. })
  358. },
  359. savePladge(){
  360. this.$refs.pledge.validate(valid => {
  361. if (valid) {
  362. this.baseInfo.processId = this.processId;
  363. this.baseInfo.methods = JSON.stringify(this.baseInfo.methodList);
  364. houseGuarantyBase.save(this.baseInfo).then(res => {
  365. if (res.code === 200 && res.data) {
  366. this.baseInfo.id = res.data
  367. ElMessage({
  368. message: '抵押权信息保存成功',
  369. type: 'success',
  370. plain: true
  371. })
  372. }
  373. })
  374. }
  375. })
  376. }
  377. }
  378. }
  379. </script>
  380. <style scoped>
  381. .contrl {
  382. font-size: 20px;
  383. width: 70.9%;
  384. border-right: 1.5px #dae1eb solid;
  385. padding: 0px 20px 20px 0px;
  386. float: left;
  387. }
  388. :deep(.el-input__wrapper.is-focus) {
  389. --el-input-focus-border: #ff6154;
  390. --el-input-focus-border-color: #ff6154;
  391. }
  392. .target-windows {
  393. margin-top: 80px;
  394. overflow-y: scroll;
  395. padding: 5px;
  396. border: 1.5px #dae1eb solid;
  397. border-radius: 0.3em;
  398. }
  399. .download-btn {
  400. height: 80px;
  401. line-height: 80px;
  402. float: right;
  403. margin-left: 20px;
  404. }
  405. .form-name {
  406. margin-left: 5px;
  407. font-size: 16px;
  408. text-decoration: underline;
  409. }
  410. .form-name:hover {
  411. cursor: pointer;
  412. color: #ff6154;
  413. }
  414. .title-div {
  415. height: 80px;
  416. line-height: 80px;
  417. width: 300px;
  418. float: left;
  419. font-size: 20px;
  420. font-weight: 900;
  421. }
  422. .title1-div {
  423. height: 80px;
  424. line-height: 80px;
  425. width: 300px;
  426. font-size: 20px;
  427. font-weight: 900;
  428. }
  429. :deep(.el-select) {
  430. width: 350px;
  431. }
  432. :deep(.el-input) {
  433. width: 350px;
  434. }
  435. :deep(.el-table .cell) {
  436. padding: 0px;
  437. }
  438. :deep(.el-input__wrapper.is-focus) {
  439. --el-input-focus-border: #ff6154;
  440. --el-input-focus-border-color: #ff6154;
  441. }
  442. :deep(.el-radio-group__wrapper.is-focused) {
  443. box-shadow: #ff6154;
  444. --el-radio-group-input-focus-border-color: #ff6154;
  445. --el-color-primary: #ff6154;
  446. }
  447. :deep(.el-radio__input.is-checked .el-radio__inner) {
  448. background: #ff6154;
  449. border-color: #ff6154;
  450. }
  451. :deep(.el-radio__inner:hover) {
  452. border-color: #ff6154;
  453. }
  454. :deep(.el-radio__input.is-checked+.el-radio__label) {
  455. color: #ff6154;
  456. }
  457. :deep(.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active) {
  458. color: #ff6154;
  459. }
  460. :deep(.el-tabs__item.is-active, .el-tabs__item:hover) {
  461. color: #ff6154;
  462. }
  463. :deep(.el-checkbox__label) {
  464. font-size: 15px;
  465. }
  466. :deep(.el-checkbox__input.is-checked .el-checkbox__inner) {
  467. background-color: #ff6154;
  468. border-color: #ff6154;
  469. font-size: 20px;
  470. }
  471. :deep(.el-checkbox__input.is-checked+.el-checkbox__label) {
  472. color: #ff6154;
  473. }
  474. :deep(.el-tabs__active-bar) {
  475. background-color: #ff6154;
  476. }
  477. :deep(.el-tabs__item.is-active) {
  478. color: #ff6154;
  479. }
  480. :deep(.el-tabs__item:hover) {
  481. color: #ff6154;
  482. }
  483. :deep(.el-input__wrapper.is-focus) {
  484. --el-input-focus-border: #ff6154;
  485. --el-input-focus-border-color: #ff6154;
  486. }
  487. :deep(.el-button--text:hover) {
  488. color: #ff6154;
  489. }
  490. :deep(.el-button--text) {
  491. color: #ff6154;
  492. }
  493. :deep(.el-input.is-disabled .el-input__inner){
  494. -webkit-text-fill-color:black
  495. }
  496. </style>