task-info.vue 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381
  1. <template>
  2. <view class="task-box" :class="isExecute>0?'task-info':'task-info-two'">
  3. <en-nav :isBackShow="true" :backType="false" :titleColor="titleColor" :title="title"
  4. :bgckgroundBox="titleBg"></en-nav>
  5. <view class="task-title">
  6. <text >{{business.status_name}}</text>
  7. </view>
  8. <view class="switch-box">
  9. <view class="switch-left" @click="switchShow(1)">
  10. <view class="" :class="switchNum===1?'switch-left-style':''">
  11. 任务信息
  12. </view>
  13. <view class="switch-left-styles" v-if="switchNum===1"></view>
  14. </view>
  15. <view class="switch-left switch-right" @click="switchShow(2)">
  16. <view class="" :class="switchNum===2?'switch-left-style':''">
  17. 流程进度
  18. </view>
  19. <view class="switch-left-styles" v-if="switchNum===2"></view>
  20. </view>
  21. </view>
  22. <view class="" v-if="switchNum===1">
  23. <view class="content">
  24. <uni-collapse>
  25. <uni-collapse-item v-for="typeItem in product.type_data" :title="typeItem.type_name" v-show="product.product_types.indexOf('1')>=0">
  26. <view class="basic-information" v-if="typeItem.type==='1'">
  27. <task-client :business="business" :type-keys="typeItem.type_keys" @onShowImg="onShowImg"></task-client>
  28. </view>
  29. <view class="basic-information" v-else-if="typeItem.type==='2'">
  30. <task-property :property-list="propertyList" :type-keys="typeItem.type_keys" @onShowImg="onShowImg"></task-property>
  31. </view>
  32. <view class="basic-information" v-else-if="typeItem.type==='3'">
  33. <task-apply-for :apply-for="applyFor" :type-keys="typeItem.type_keys" @onShowImg="onShowImg"></task-apply-for>
  34. </view>
  35. <view class="basic-information" v-else-if="typeItem.type==='4'">
  36. <task-tripartite :tripartite="tripartite" :type-keys="typeItem.type_keys" @onShowImg="onShowImg"></task-tripartite>
  37. </view>
  38. <view class="basic-information" v-else-if="typeItem.type==='5'">
  39. <task-linkman :linkman="linkman" :type-keys="typeItem.type_keys" ></task-linkman>
  40. </view>
  41. <view class="basic-information" v-else-if="typeItem.type==='6'">
  42. <task-credit :credit="credit" :type-keys="typeItem.type_keys" @onShowImg="onShowImg"></task-credit>
  43. </view>
  44. <view class="basic-information" v-else-if="typeItem.type==='7'">
  45. <task-post-loan :post-loan="postLoan" :type-keys="typeItem.type_keys"></task-post-loan>
  46. </view>
  47. </uni-collapse-item>
  48. </uni-collapse>
  49. </view>
  50. <view class="set-box">
  51. <view class="set-title">
  52. 任务执行信息
  53. </view>
  54. <view class="task-phase">
  55. <view class="task-phase-left">
  56. 任务阶段
  57. </view>
  58. <view class="task-phase-right">
  59. {{ stageData.stageName ? stageData.stageName : '未设置阶段' }}
  60. </view>
  61. </view>
  62. <view class="task-phase perform-personnel">
  63. <view class="task-phase-left">
  64. 执行人员
  65. </view>
  66. <view class="task-phase-left">
  67. {{ stageData.userName ? stageData.userName : '暂无执行人' }}
  68. </view>
  69. </view>
  70. </view>
  71. <view class="leave-message-box">
  72. <view class="title-name">
  73. 留言
  74. </view>
  75. <view class="leave-message" v-for="(msg,mIndex) in msgList">
  76. <image class="head-portrait" :src="msg.head_img" mode=""></image>
  77. <view class="leave-message-right">
  78. <view class="leave-message-right-one">
  79. <view class="one-name">
  80. <view class="name">
  81. {{ msg.name }}
  82. </view>
  83. <view class="state">
  84. {{ msg.position_name }}
  85. </view>
  86. </view>
  87. <view class="one-reply" @click="goToUrl(1,msg.id)">
  88. 回复
  89. </view>
  90. </view>
  91. <view class="leave-message-right-two">
  92. <text>{{ msg.msg }}</text>
  93. </view>
  94. <view class="leave-message-right-three">
  95. <view class="three-item" v-for="(msg_img,index) in msg.msg_img" :key="index">
  96. <view class="three-img" @click.stop="onShowImg(msg_img.url)" v-if="msg_img.type===1">
  97. <image
  98. :src="msg_img.url" mode="aspectFill"></image>
  99. </view>
  100. <view class="three-img three-video" @click.stop="showVideoImg(msg_img.url)" v-else>
  101. <image class="three-img"
  102. :src="getVideoImg(msg_img.url)" mode="aspectFill"></image>
  103. <image class="video-img" src="@/static/task/video-img.png" mode=""></image>
  104. </view>
  105. </view>
  106. </view>
  107. <view class="leave-message-right-file" v-if="msg.file_list.length>0">
  108. <view class="file-list">
  109. <view class="file-item" @click.stop="openFile(file)" v-for="(file,fileIndex) in msg.file_list">
  110. <view class="file-img">
  111. <image src="/static/task/file-icon.png"></image>
  112. <view class="img-icon" v-if="file.file_type===1">PDF</view>
  113. <view class="img-icon icon-four" v-else-if="file.file_type===2">Word</view>
  114. <view class="img-icon icon-two" v-else>XLS</view>
  115. </view>
  116. <view class="file-text">
  117. {{ file.name }}
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. <view class="leave-message-right-four">
  123. {{ msg.created_at }}
  124. </view>
  125. <view class="leave-message-right-five" v-for="replyItem in msg.reply_list">
  126. <view class="info-list">
  127. <view class="reply-info">
  128. <view>
  129. <text class="info-name">{{ replyItem.name }}</text>
  130. <text
  131. class="reply">&nbsp;&nbsp;回复&nbsp;&nbsp;
  132. </text>
  133. <text
  134. class="info-name">{{ replyItem.ru_name }}:
  135. </text>
  136. </view>
  137. <view>
  138. <text class="info-content">{{ replyItem.msg }}</text>
  139. </view>
  140. </view>
  141. </view>
  142. <view class="info-img-box" v-if="replyItem.msg_img.length>0">
  143. <view class="info-item" v-for="(r_img,index) in replyItem.msg_img">
  144. <view class="info-img" @click.stop="onShowImg(r_img.url)" v-if="r_img.type===1">
  145. <image :src="r_img.url" mode="aspectFill"></image>
  146. </view>
  147. <view class="info-img info-video" @click.stop="showVideoImg(r_img.url)" v-else>
  148. <image class="three-img"
  149. :src="getVideoImg(r_img.url)" mode="aspectFill"></image>
  150. <image class="video-img" src="@/static/task/video-img.png" mode=""></image>
  151. </view>
  152. </view>
  153. </view>
  154. <view class="info-file-list" v-if="replyItem.file_list.length>0">
  155. <view class="file-list">
  156. <view class="file-item" @click.stop="openFile(file)" v-for="(file,fileIndex) in replyItem.file_list">
  157. <view class="file-img">
  158. <image src="/static/task/file-icon.png"></image>
  159. <view class="img-icon" v-if="file.file_type===1">PDF</view>
  160. <view class="img-icon icon-four" v-else-if="file.file_type===2">Word</view>
  161. <view class="img-icon icon-two" v-else>XLS</view>
  162. </view>
  163. <view class="file-text">
  164. {{ file.name }}
  165. </view>
  166. </view>
  167. </view>
  168. </view>
  169. <view class="one-reply" @click="goToUrl(1,replyItem.id)">
  170. 回复
  171. </view>
  172. </view>
  173. </view>
  174. </view>
  175. <view class="blank-box" v-if="msgList.length<=0">
  176. <image class="blank-box-img" src="https://wealfavor-1257406827.cos.ap-beijing.myqcloud.com/static/rwzx/blank-img.png" mode=""></image>
  177. <view class="blank-box-text">
  178. 暂无内容
  179. </view>
  180. </view>
  181. </view>
  182. <view class="but-box" v-if="isExecute>0 && business.status<4">
  183. <view class="but" v-if="isExecute===3" @click="takeTask">
  184. <!--领取操作-->
  185. 领取
  186. </view>
  187. <view class="but" v-else-if="isExecute===5" @click="endTask">
  188. <!--完成操作-->
  189. 完成
  190. </view>
  191. <view class="but-box-two" v-else-if="isExecute===4">
  192. <!-- 部门主管操作-->
  193. <view class="turn-single but-two" @click="cancellation" >
  194. 作废
  195. </view>
  196. <view class="turn-single but-two" @click="openExecute">
  197. 交接
  198. </view>
  199. <view class="operation but-two" @click="goToUrl(1)">
  200. 反馈
  201. </view>
  202. </view>
  203. <view class="but-box-two" v-else-if="isExecute===2">
  204. <!-- 超级管理员操作-->
  205. <view class="turn-single but-two" @click="cancellation" >
  206. 作废
  207. </view>
  208. <view class="operation but-two" @click="goToUrl(1)">
  209. 反馈
  210. </view>
  211. </view>
  212. <view class="but-box-two" v-else-if="isExecute===7">
  213. <!-- 超级管理员操作-->
  214. <view class="operation but-one" @click="editTask()">
  215. 编辑
  216. </view>
  217. </view>
  218. <view class="but-box-two" v-else-if="isExecute===8">
  219. <!-- 超级管理员操作-->
  220. <view class="operation but-one" @click="setPostLoan()">
  221. 完善贷后
  222. </view>
  223. </view>
  224. <view class="but-box-two" v-else-if="isExecute===6">
  225. <view class="turn-single but-three" @click="openExecute">
  226. 交接
  227. </view>
  228. <view class="turn-single but-three" @click="auditTask(2)">
  229. 拒绝
  230. </view>
  231. <view class="operation but-three" @click="auditTask(1)">
  232. 同意
  233. </view>
  234. </view>
  235. <view class="but-box-two" v-else>
  236. <view class="turn-single but-two" @click="openExecute">
  237. 交接
  238. </view>
  239. <view class="operation but-two" @click="setStage()">
  240. 操作
  241. </view>
  242. </view>
  243. </view>
  244. <view v-show="showExecute">
  245. <uni-data-picker class="" popup-title="选择执行人" :localdata="executeData" ref="popupObj"
  246. @change="setNewExecute"
  247. :border="false" :clear-icon="false" @popupclosed="setPopupClosed">
  248. </uni-data-picker>
  249. </view>
  250. </view>
  251. <view class="schedule-box" v-else>
  252. <view class="schedule-list" v-for="(item,index) in businessStageList" :key="index">
  253. <view class="list-one">
  254. <view class="list-left">
  255. <view class="mark">
  256. <view class="mark-two" :class="{'mark-two-no':item.id<=0}"></view>
  257. </view>
  258. <text class="switch-digital" :class="{'switch-digital-no':item.id<=0}">
  259. {{ item.stage_name }}
  260. </text>
  261. <text class="switch-hr" v-if="item.id>0"></text>
  262. {{ item.id <= 0 ? '' : item.name }}
  263. </view>
  264. <view class="list-right">
  265. {{ item.updated_at }}
  266. </view>
  267. </view>
  268. <view class="list-hr" v-if="businessStageList.length>(index+1)"></view>
  269. </view>
  270. </view>
  271. <uni-popup ref="popup" type="bottom">
  272. <view class="task-msg-box">
  273. <taskSet ref="taskSetObj" :businessId="businessId" @endTaskSet="endTaskSet"></taskSet>
  274. </view>
  275. </uni-popup>
  276. <uni-popup ref="feedback" type="bottom">
  277. <view class="task-msg-box">
  278. <taskMsg :businessId="businessId" :replyId="replyId"></taskMsg>
  279. </view>
  280. </uni-popup>
  281. <uni-popup ref="videoPopup" @change="closeVideoImg">
  282. <view class="video-box" v-if="videoUrl">
  283. <video class="myVideo" :src="videoUrl" :autoplay="true"></video>
  284. </view>
  285. </uni-popup>
  286. </view>
  287. </template>
  288. <script>
  289. import taskSet from "./task-set"
  290. import taskMsg from "./task-msg"
  291. import {
  292. getStageList,
  293. getTaskDetail,
  294. cancellation,
  295. endTask,
  296. getExecuteList,
  297. getMsgList,
  298. setExecute,
  299. takeTask, getBusinessStageList,
  300. } from "@/api/task";
  301. import tools from "@/service/tools";
  302. import UniPopup from "@/uni_modules/uni-popup/components/uni-popup/uni-popup";
  303. import EnNav from "@/components/en-utils/en-nav/en-nav";
  304. import TaskClient from "./module/task-client";
  305. import TaskProperty from "./module/task-property";
  306. import TaskApplyFor from "./module/task-apply-for";
  307. import TaskLinkman from "./module/task-linkman";
  308. import TaskTripartite from "./module/task-tripartite";
  309. import TaskCredit from "./module/task-credit";
  310. import TaskPostLoan from "./module/task-post-loan";
  311. export default {
  312. components: {
  313. TaskPostLoan,
  314. TaskCredit,
  315. TaskTripartite,
  316. TaskLinkman,
  317. TaskApplyFor,
  318. TaskProperty,
  319. TaskClient,
  320. EnNav,
  321. UniPopup,
  322. taskSet,
  323. taskMsg
  324. },
  325. data() {
  326. return {
  327. title: '任务详情',
  328. titleColor: '#fff',
  329. titleBg: '',
  330. switchNum: 1,
  331. product: {
  332. product_name: '',
  333. product_types: [],
  334. type_data:[]
  335. },
  336. business: {
  337. status: 1,
  338. phone: '',
  339. identity_one: '',
  340. identity_two: '',
  341. marriage_img: [],
  342. credit_img: [],
  343. }, //基本信息
  344. propertyList: [], //资产信息
  345. applyFor: {}, //申请信息
  346. credit: {}, //征信信息
  347. postLoan: {}, //贷后信息
  348. tripartite: [], //第三方信息
  349. linkman: [], //联系人信息
  350. stageData: {
  351. stageName: '',
  352. userName: ""
  353. },
  354. isAjax: false,
  355. isExecute: 0,
  356. msgList: [],
  357. executeData: [],
  358. showExecute: false,
  359. businessId: 0,
  360. auditType: 0,
  361. previewList: [],
  362. current: 0,
  363. imgKey: 0,
  364. imgList: [],
  365. replyId: "",
  366. stageList: [],
  367. businessStageList: [],
  368. businessFile: {
  369. fileList: [],
  370. imgList: [],
  371. videoList: [],
  372. },
  373. videoUrl: ''
  374. }
  375. },
  376. onPageScroll(e) {
  377. if (e.scrollTop > 50) {
  378. this.titleBg = '#fff'
  379. this.titleColor = '#333333'
  380. } else {
  381. this.titleBg = ''
  382. this.titleColor = '#fff'
  383. }
  384. },
  385. onLoad(data) {
  386. if (data.id === undefined) {
  387. this.backEvent();
  388. } else {
  389. this.businessId = data.id
  390. this.getTaskDetail()
  391. this.getStageList()
  392. }
  393. },
  394. mounted() {
  395. uni.$on('newMsg', () => {
  396. if (this.$refs.feedback) {
  397. this.$refs.feedback.close()
  398. }
  399. //重新加载msg信息
  400. this.getMsgList();
  401. })
  402. uni.$on('newTaskInfo',()=>{
  403. this.getTaskDetail()
  404. })
  405. },
  406. methods: {
  407. openFile(file) {
  408. if (!file.url) {
  409. tools.error('下载地址不存在')
  410. return
  411. }
  412. tools.showLoading()
  413. uni.downloadFile({
  414. url: file.url, //仅为示例,并非真实的资源
  415. success: (dRes) => {
  416. tools.hideLoading()
  417. if (dRes.statusCode === 200) {
  418. tools.success('下载成功')
  419. uni.saveFile({
  420. tempFilePath: dRes.tempFilePath,
  421. success: (res) => {
  422. uni.openDocument({
  423. filePath: res.savedFilePath,
  424. showMenu: true,
  425. success: function (res) {
  426. }
  427. });
  428. }
  429. });
  430. }
  431. }
  432. });
  433. },
  434. getVideoImg(url) {
  435. return tools.getOssVideo(url)
  436. },
  437. closeVideoImg(e) {
  438. if (!e.show) {
  439. console.log('关闭视频了')
  440. this.videoUrl = ''
  441. }
  442. },
  443. showVideoImg(url) {
  444. console.log(url)
  445. this.videoUrl = url
  446. this.$refs.videoPopup.open('center')
  447. },
  448. setPostLoan(){
  449. uni.navigateTo({
  450. url: '/pages-task/task-info/task-loan?id=' + this.business.id
  451. });
  452. },
  453. editTask() {
  454. // uni.reLaunch({
  455. // url: '/pages/add-client/add-client?businessId=' + this.business.id
  456. // })
  457. uni.reLaunch({
  458. url: '/pages-task/add-client/new-add?businessId=' + this.business.id
  459. })
  460. },
  461. getBusinessStageList() {
  462. getBusinessStageList({'business_id': this.businessId}).then((res) => {
  463. if (res.code === 1) {
  464. this.businessStageList = res.data
  465. }
  466. })
  467. },
  468. getStageList() {
  469. getStageList({'id': this.businessId}).then((res) => {
  470. if (res.code === 1) {
  471. this.stageList = res.data
  472. }
  473. })
  474. },
  475. switchShow(num) {
  476. this.switchNum = num
  477. },
  478. onShowImg(item) {
  479. if (this.businessFile.imgList.length < 0) {
  480. this.businessFile.imgList.push(item)
  481. }
  482. // 预览图片
  483. uni.previewImage({
  484. current: item,
  485. urls: this.businessFile.imgList,
  486. });
  487. },
  488. makingCall() {
  489. tools.makingCall(this.business.phone)
  490. },
  491. openExecute() {
  492. this.executeData = [];
  493. getExecuteList({
  494. 'business_id': this.business.id
  495. }).then((res) => {
  496. if (res.code === 1) {
  497. res.data.forEach((item) => {
  498. this.executeData.push({
  499. 'text': item.name,
  500. 'value': item.id
  501. })
  502. })
  503. this.showExecute = true;
  504. this.$refs.popupObj.show();
  505. }
  506. })
  507. },
  508. setPopupClosed() {
  509. //关闭选择器
  510. this.showExecute = false;
  511. },
  512. setNewExecute(e) {
  513. //设置新执行人
  514. console.log(e)
  515. let newUid = e.detail.value[0].value
  516. console.log(newUid)
  517. if (!newUid) {
  518. newUid = 0;
  519. }
  520. setExecute({
  521. 'business_id': this.business.id,
  522. 'user_id': newUid
  523. }).then((res) => {
  524. if (res.code === 1) {
  525. tools.success(res.msg)
  526. uni.$emit('newReceiving')
  527. this.getTaskDetail()
  528. } else {
  529. tools.error(res.msg)
  530. }
  531. this.showExecute = false
  532. })
  533. },
  534. getMsgList() {
  535. getMsgList({
  536. 'business_id': this.business.id
  537. }).then((res) => {
  538. if (res.code === 1) {
  539. this.msgList = res.data;
  540. // this.setImgList()
  541. }
  542. })
  543. },
  544. goToUrl(type, id) {
  545. this.replyId = id
  546. this.$refs.feedback.open()
  547. },
  548. endTaskSet() {
  549. this.$refs.popup.close();
  550. this.getTaskDetail()
  551. this.getStageList()
  552. },
  553. setStage() {
  554. this.$refs.popup.open("bottom");
  555. this.$refs.taskSetObj.startStage();
  556. },
  557. auditTask(auditType) {
  558. this.$refs.popup.open("bottom");
  559. this.auditType = auditType
  560. this.$refs.taskSetObj.startAuditType(auditType);
  561. },
  562. takeTask() {
  563. if (this.isAjax) {
  564. // return;
  565. }
  566. this.isAjax = true;
  567. takeTask({
  568. 'id': this.business.id
  569. }).then((res) => {
  570. if (res.code === 1) {
  571. tools.success('领取成功')
  572. uni.$emit('newReceiving')
  573. this.getTaskDetail()
  574. } else {
  575. this.isAjax = false;
  576. tools.error(res.msg)
  577. }
  578. })
  579. },
  580. endTask() {
  581. uni.showModal({
  582. title: '提示',
  583. content: '是否完成当前任务?',
  584. success: (res) => {
  585. console.log(res)
  586. if (res.confirm) {
  587. endTask({
  588. 'id': this.business.id
  589. }).then((res) => {
  590. if (res.code === 1) {
  591. this.business.status = 4;
  592. this.isExecute = 0;
  593. tools.success(res.msg)
  594. uni.$emit('newReceiving')
  595. } else {
  596. tools.error(res.msg)
  597. }
  598. })
  599. }
  600. }
  601. });
  602. },
  603. cancellation() {
  604. uni.showModal({
  605. title: '提示',
  606. content: '是否作废当前任务?',
  607. success: (res) => {
  608. console.log(res)
  609. if (res.confirm) {
  610. cancellation({
  611. 'id': this.business.id
  612. }).then((res) => {
  613. if (res.code === 1) {
  614. this.business.status = 5;
  615. this.isExecute = 0;
  616. tools.success(res.msg)
  617. uni.$emit('newReceiving')
  618. } else {
  619. tools.error(res.msg)
  620. }
  621. })
  622. }
  623. }
  624. });
  625. },
  626. async getTaskDetail() {
  627. const res = await getTaskDetail({
  628. id: this.businessId
  629. })
  630. if (res.code === 1) {
  631. this.product = res.data.product
  632. this.title = this.product.product_name
  633. this.business = res.data.business
  634. this.propertyList = res.data.propertyList
  635. this.applyFor = res.data.applyFor
  636. this.tripartite = res.data.tripartite
  637. this.linkman = res.data.linkman
  638. this.credit = res.data.credit
  639. this.postLoan = res.data.postLoan
  640. this.stageData = res.data.stageData
  641. this.isExecute = res.data.isExecute
  642. this.businessFile = res.data.businessFile
  643. this.getMsgList();
  644. this.getBusinessStageList()
  645. } else {
  646. this.backEvent();
  647. }
  648. },
  649. backEvent() {
  650. uni.navigateBack({
  651. delta: 1
  652. })
  653. }
  654. },
  655. }
  656. </script>
  657. <style lang="scss" scoped>
  658. /deep/ .uni-collapse-item__title-text {
  659. color: #333333 !important;
  660. font-size: 34rpx !important;
  661. font-weight: 600 !important;
  662. }
  663. .task-box {
  664. background-image: url("@/static/img/task/task-bg.png");
  665. background-repeat: no-repeat;
  666. background-size: 100% auto;
  667. background-color: #F6F7FB;
  668. min-height: 100vh;
  669. .task-title{
  670. padding: 0 32rpx;
  671. height: 120rpx;
  672. line-height: 120rpx;
  673. text{
  674. font-size: 44rpx;
  675. font-weight: 600;
  676. color: #fff;
  677. }
  678. }
  679. .video-box {
  680. height: 70vh;
  681. width: 100vw;
  682. .myVideo {
  683. height: 70vh;
  684. width: 100vw;
  685. }
  686. }
  687. .blank-box {
  688. width: 100%;
  689. min-height: 30vh;
  690. .blank-box-img {
  691. width: 500rpx;
  692. height: 500rpx;
  693. margin: 0 auto;
  694. }
  695. .blank-box-text {
  696. font-size: 15px;
  697. color: #666666;
  698. text-align: center;
  699. }
  700. }
  701. .content {
  702. margin: 0 0 22rpx 0;
  703. }
  704. .switch-box {
  705. width: 100%;
  706. height: auto;
  707. padding: 26rpx 0 6rpx 0;
  708. display: flex;
  709. background: #fff;
  710. margin: 0 0 20rpx 0;
  711. .switch-left {
  712. width: 50%;
  713. font-size: 32rpx;
  714. color: #999999;
  715. text-align: center;
  716. }
  717. .switch-left-text {
  718. padding: 0 0 20rpx 0;
  719. }
  720. .switch-left-style {
  721. color: #306AFB;
  722. font-weight: 600;
  723. padding: 0 0 20rpx 0;
  724. }
  725. .switch-left-styles {
  726. width: 134rpx;
  727. height: 4rpx;
  728. background: #306AFB;
  729. margin: 0 auto;
  730. }
  731. }
  732. .set-box {
  733. margin: 0 0 20rpx 0;
  734. background: #fff;
  735. .set-title {
  736. font-size: 34rpx;
  737. color: #333333;
  738. font-weight: 600;
  739. padding: 17px 32rpx;
  740. box-sizing: border-box;
  741. }
  742. .task-phase {
  743. display: flex;
  744. align-items: center;
  745. justify-content: space-between;
  746. padding: 17px 32rpx;
  747. box-sizing: border-box;
  748. border-top: 1px solid #F0F0F0;
  749. .task-phase-left {
  750. font-size: 16px;
  751. color: #666666;
  752. }
  753. .task-phase-right {
  754. font-size: 16px;
  755. color: #232A35;
  756. }
  757. }
  758. .perform-personnel {
  759. .perform-personnel-left {
  760. }
  761. .perform-personnel-right {
  762. }
  763. }
  764. }
  765. .leave-message-box {
  766. width: 100%;
  767. height: auto;
  768. background: #fff;
  769. padding: 32rpx 32rpx;
  770. box-sizing: border-box;
  771. // margin: 0 0 20rpx 0;
  772. .title-name {
  773. font-size: 34rpx;
  774. color: #232A35;
  775. font-weight: 600;
  776. margin: 0 0 32rpx 0;
  777. }
  778. .leave-message {
  779. width: 100%;
  780. height: auto;
  781. display: flex;
  782. .head-portrait {
  783. width: 90rpx;
  784. height: 90rpx;
  785. display: block;
  786. margin: 0 20rpx 0 0;
  787. border-radius: 50%;
  788. flex-shrink: 0;
  789. }
  790. .leave-message-right {
  791. width: 100%;
  792. height: auto;
  793. box-sizing: border-box;
  794. .leave-message-right-one {
  795. width: 95%;
  796. height: auto;
  797. display: flex;
  798. justify-content: space-between;
  799. margin: 0 0 24rpx 0;
  800. .one-name {
  801. display: flex;
  802. align-items: center;
  803. .name {
  804. font-size: 16px;
  805. color: #5C7C9B;
  806. padding: 0 20rpx 0 0;
  807. box-sizing: border-box;
  808. }
  809. .state {
  810. height: 32rpx;
  811. padding: 0 4rpx;
  812. box-sizing: border-box;
  813. background: #3169FA;
  814. border-radius: 3px;
  815. font-size: 10px;
  816. color: #FFFFFF;
  817. line-height: 32rpx;
  818. }
  819. }
  820. .one-reply {
  821. padding: 6rpx 12rpx;
  822. border: 1px solid #DCDCDC;
  823. border-radius: 2px;
  824. font-size: 12px;
  825. color: #000000;
  826. }
  827. }
  828. .leave-message-right-two {
  829. width: 578rpx;
  830. height: auto;
  831. margin: 0 0 16rpx 0;
  832. box-sizing: border-box;
  833. display: inline-block;
  834. text{
  835. font-size: 14px;
  836. color: #232A35;
  837. word-wrap: break-word;
  838. }
  839. }
  840. .leave-message-right-three {
  841. width: 100%;
  842. height: auto;
  843. // background: pink;
  844. display: flex;
  845. flex-wrap: wrap;
  846. .three-item {
  847. width: calc((100vw - 220rpx) / 3);
  848. height: calc((100vw - 220rpx) / 3);
  849. margin-right: 16rpx;
  850. .three-img {
  851. image {
  852. width: calc((100vw - 220rpx) / 3);
  853. height: calc((100vw - 220rpx) / 3);
  854. }
  855. }
  856. .three-video {
  857. position: relative;
  858. .video-img {
  859. position: absolute;
  860. top: calc(50% - 28rpx);
  861. left: calc(50% - 28rpx);
  862. width: 56rpx;
  863. height: 56rpx;
  864. }
  865. }
  866. }
  867. .three-item:nth-of-type(3n+0) {
  868. margin-right: 0;
  869. }
  870. .three-item:nth-of-type(n+4) {
  871. margin-top: 16rpx;
  872. }
  873. }
  874. .leave-message-right-file {
  875. margin-top: 20rpx;
  876. margin-bottom: 20rpx;
  877. width: calc(100vw - 174rpx);
  878. .file-list {
  879. border: 2rpx solid #F0F0F0;
  880. .file-item {
  881. height: 72rpx;
  882. padding: 19rpx 20rpx;
  883. display: flex;
  884. justify-content: left;
  885. .file-img {
  886. height: 72rpx;
  887. width: 72rpx;
  888. position: relative;
  889. .img-icon {
  890. position: absolute;
  891. left: 0;
  892. top: 37rpx;
  893. width: 32rpx;
  894. height: 20rpx;
  895. background: #F24949;
  896. font-weight: 600;
  897. color: #FFFFFF;
  898. font-size: 12rpx;
  899. line-height: 20rpx;
  900. text-align: center;
  901. }
  902. .icon-two {
  903. background: #00BF72;
  904. }
  905. .icon-three {
  906. background: #F9742C;
  907. }
  908. .icon-four {
  909. background: #0083FB;
  910. }
  911. image {
  912. height: 72rpx;
  913. width: 72rpx;
  914. }
  915. }
  916. .file-text {
  917. margin-left: 24rpx;
  918. width: calc(100vw - 184rpx);
  919. height: 72rpx;
  920. line-height: 72rpx;
  921. color: #333333;
  922. display: -webkit-box;
  923. -webkit-line-clamp: 1;
  924. -webkit-box-orient: vertical;
  925. overflow: hidden;
  926. }
  927. }
  928. }
  929. }
  930. .leave-message-right-four {
  931. font-size: 12px;
  932. color: #A6A6A6;
  933. margin: 0 0 21rpx 0;
  934. }
  935. .leave-message-right-five {
  936. width: 100%;
  937. height: auto;
  938. background: #F6F6F6;
  939. border-radius: 6rpx;
  940. padding: 24rpx 24rpx 10rpx;
  941. box-sizing: border-box;
  942. .info-list {
  943. width: 100%;
  944. flex-wrap: wrap;
  945. .reply-info{
  946. .info-name {
  947. font-size: 28rpx;
  948. color: #5C7C9B;
  949. flex-shrink: 0;
  950. word-wrap: break-word;
  951. box-sizing: border-box;
  952. display: inline-block;
  953. }
  954. .reply {
  955. font-size: 28rpx;
  956. color: #232A35;
  957. flex-shrink: 0;
  958. padding-left: 6rpx;
  959. padding-right: 6rpx;
  960. }
  961. .info-content {
  962. font-size: 28rpx;
  963. color: #232A35;
  964. //flex-wrap: wrap-reverse
  965. word-wrap: break-word;
  966. box-sizing: border-box;
  967. display: inline-block;
  968. }
  969. }
  970. }
  971. .one-reply {
  972. padding: 6rpx 12rpx;
  973. border: 1px solid #DCDCDC;
  974. border-radius: 2px;
  975. font-size: 12px;
  976. color: #000000;
  977. width: 50rpx;
  978. margin-top: 20rpx;
  979. }
  980. .info-img-box {
  981. margin-top: 28rpx;
  982. width: 100%;
  983. height: auto;
  984. display: flex;
  985. flex-wrap: wrap;
  986. .info-item {
  987. width: calc((100vw - 244rpx) / 4);
  988. height: calc((100vw - 244rpx) / 4);
  989. margin-right: 8rpx;
  990. .info-img {
  991. image {
  992. width: calc((100vw - 244rpx) / 4);
  993. height: calc((100vw - 244rpx) / 4);
  994. }
  995. }
  996. .info-video {
  997. position: relative;
  998. .video-img {
  999. position: absolute;
  1000. top: calc(50% - 15rpx);
  1001. left: calc(50% - 15rpx);
  1002. width: 30rpx;
  1003. height: 30rpx;
  1004. }
  1005. }
  1006. }
  1007. .info-item:nth-of-type(4n+0) {
  1008. margin-right: 0;
  1009. }
  1010. .info-item:nth-of-type(n+5) {
  1011. margin-top: 16rpx;
  1012. }
  1013. }
  1014. .info-file-list {
  1015. margin-top: 20rpx;
  1016. //margin-bottom: 20rpx;
  1017. width: calc(100vw - 174rpx);
  1018. .file-list {
  1019. border: 2rpx solid #F0F0F0;
  1020. .file-item {
  1021. height: 72rpx;
  1022. padding: 19rpx 20rpx;
  1023. display: flex;
  1024. justify-content: left;
  1025. .file-img {
  1026. height: 72rpx;
  1027. width: 72rpx;
  1028. position: relative;
  1029. .img-icon {
  1030. position: absolute;
  1031. left: 0;
  1032. top: 37rpx;
  1033. width: 32rpx;
  1034. height: 20rpx;
  1035. background: #F24949;
  1036. font-weight: 600;
  1037. color: #FFFFFF;
  1038. font-size: 12rpx;
  1039. line-height: 20rpx;
  1040. text-align: center;
  1041. }
  1042. .icon-two {
  1043. background: #00BF72;
  1044. }
  1045. .icon-three {
  1046. background: #F9742C;
  1047. }
  1048. .icon-four {
  1049. background: #0083FB;
  1050. }
  1051. image {
  1052. height: 72rpx;
  1053. width: 72rpx;
  1054. }
  1055. }
  1056. .file-text {
  1057. margin-left: 24rpx;
  1058. width: calc(100vw - 184rpx);
  1059. height: 72rpx;
  1060. line-height: 72rpx;
  1061. color: #333333;
  1062. display: -webkit-box;
  1063. -webkit-line-clamp: 1;
  1064. -webkit-box-orient: vertical;
  1065. overflow: hidden;
  1066. }
  1067. }
  1068. }
  1069. }
  1070. }
  1071. }
  1072. }
  1073. .leave-message:nth-of-type(n+1) {
  1074. margin-top: 20rpx;
  1075. }
  1076. }
  1077. .but-box {
  1078. width: 100%;
  1079. height: auto;
  1080. padding: 12rpx 32rpx;
  1081. box-sizing: border-box;
  1082. background: #fff;
  1083. position: fixed;
  1084. left: 0;
  1085. bottom: 0;
  1086. .but {
  1087. width: 100%;
  1088. height: auto;
  1089. padding: 11px 0;
  1090. background: #3169FA;
  1091. text-align: center;
  1092. font-size: 16px;
  1093. color: #FFFFFF;
  1094. border-radius: 4px;
  1095. }
  1096. .but-box-two {
  1097. display: flex;
  1098. align-items: center;
  1099. .Leave-message {
  1100. // padding: 0 26rpx;
  1101. //width: 118rpx;
  1102. //height: 88rpx;
  1103. border: 1px solid #DCDCDC;
  1104. line-height: 88rpx;
  1105. background: #fff;
  1106. color: #232A35;
  1107. border-radius: 8rpx;
  1108. text-align: center;
  1109. }
  1110. .contact-user {
  1111. padding: 8rpx 0;
  1112. //width: 174rpx;
  1113. // height: 88rpx;
  1114. border: 1px solid #3169FA;
  1115. // line-height: 88rpx;
  1116. background: #fff;
  1117. margin: 0 16rpx;
  1118. text-align: center;
  1119. border-radius: 8rpx;
  1120. .contact-user-one {
  1121. color: #3169FA;
  1122. }
  1123. .contact-user-two {
  1124. font-size: 10px;
  1125. color: #3169FA;
  1126. }
  1127. }
  1128. .turn-single {
  1129. // padding: 0 56rpx;
  1130. //width: 174rpx;
  1131. //height: 88rpx;
  1132. border: 1px solid #3169FA;
  1133. line-height: 88rpx;
  1134. background: #fff;
  1135. margin: 0 16rpx;
  1136. color: #3169FA;
  1137. border-radius: 8rpx;
  1138. text-align: center;
  1139. }
  1140. .operation {
  1141. // padding: 0 56rpx;
  1142. //width: 174rpx;
  1143. //height: 88rpx;
  1144. line-height: 88rpx;
  1145. background: #3169FA;
  1146. color: #fff;
  1147. border-radius: 8rpx;
  1148. text-align: center;
  1149. }
  1150. .but-one {
  1151. width: 100%;
  1152. height: auto;
  1153. text-align: center;
  1154. border-radius: 8rpx;
  1155. }
  1156. .but-two {
  1157. width: 50%;
  1158. height: auto;
  1159. text-align: center;
  1160. border-radius: 8rpx;
  1161. }
  1162. .but-three {
  1163. width: 33.33%;
  1164. height: auto;
  1165. text-align: center;
  1166. border-radius: 8rpx;
  1167. }
  1168. }
  1169. }
  1170. .schedule-box {
  1171. padding: 32rpx 34rpx 26rpx;
  1172. box-sizing: border-box;
  1173. background: #fff;
  1174. .schedule-list {
  1175. .list-one {
  1176. display: flex;
  1177. justify-content: space-between;
  1178. .list-left {
  1179. max-width: 364rpx;
  1180. display: flex;
  1181. align-items: flex-start;
  1182. font-size: 14px;
  1183. color: #333333;
  1184. .mark {
  1185. // width: 22rpx;
  1186. // height: 22rpx;
  1187. background: rgba(#3169FA, 0.1);
  1188. border-radius: 50%;
  1189. margin: 10rpx 9px 0 0;
  1190. padding: 6rpx;
  1191. flex-shrink: 0;
  1192. .mark-two {
  1193. width: 12rpx;
  1194. height: 12rpx;
  1195. background: #3169FA;
  1196. border-radius: 50%;
  1197. margin: 0 auto;
  1198. }
  1199. .mark-two-no {
  1200. background: #999;
  1201. }
  1202. }
  1203. .switch-digital {
  1204. color: #333333;
  1205. font-size: 28rpx;
  1206. font-weight: 600;
  1207. flex-shrink: 0;
  1208. line-height: 36rpx;
  1209. }
  1210. .switch-digital-no {
  1211. color: #999;
  1212. font-weight: 400;
  1213. }
  1214. .switch-hr {
  1215. width: 18rpx;
  1216. height: 2rpx;
  1217. background: #707070;
  1218. margin: 18rpx 13rpx 0;
  1219. flex-shrink: 0;
  1220. }
  1221. }
  1222. .list-right {
  1223. font-size: 13px;
  1224. color: #999999;
  1225. }
  1226. }
  1227. .list-hr {
  1228. width: 2rpx;
  1229. height: 50rpx;
  1230. background: #F0F0F0;
  1231. margin: 9rpx 0 9rpx 12rpx;
  1232. }
  1233. }
  1234. }
  1235. .task-msg-box {
  1236. width: 100%;
  1237. border-radius: 20rpx 20rpx 0rpx 0rpx;
  1238. }
  1239. }
  1240. .task-info-two {
  1241. width: 100%;
  1242. height: auto;
  1243. padding: 0;
  1244. }
  1245. .task-info {
  1246. width: 100%;
  1247. height: auto;
  1248. padding: 0 0 112rpx 0;
  1249. }
  1250. </style>