index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. <template>
  2. <div>
  3. <basicDetails
  4. v-if="mainData"
  5. ref="details"
  6. :titleText="mainData.enterprisename_customer"
  7. :editData="mainData"
  8. :mainAreaData="mainAreaData"
  9. turnPageId="20221101094502"
  10. idname="sat_orderclueid"
  11. tags=""
  12. :tabs="['跟进记录','详细信息','来源线索']"
  13. :justsaler="1"
  14. typeTask="销售线索"
  15. @pageChange="pageChange"
  16. @onEditSuccess="queryMainData($route.query.id)"
  17. @detailCreate="detailCreate">
  18. <div slot="customOperation">
  19. <edit class="inline-16" v-if="Object.keys(mainData).length > 0 && tool.checkAuth($route.name,'update')" :disabled="!isHandle" :data="mainData" @onSuccess="queryMainData"/>
  20. <saveContact class="inline-16" @contactSuccess="queryMainData" v-if="tool.checkAuth($route.name,'saveContact')" :disabled="!isHandle" :data="mainData"></saveContact>
  21. <follow :detailInfo="mainData"
  22. v-if="tool.checkAuth($route.name,'follow')"
  23. @updataList="queryMainData();$refs.followDetail.getFollowDetail()" @onSuccess="onFollow" :disabled="!isHandle" :data="mainData"></follow>
  24. <!-- <move :data="mainData"
  25. @updataList="queryMainData"
  26. :teamList="teamList()"
  27. v-if="userInfo.isAuth == 1 ? mainData.status == '待跟进' || mainData.status == '跟进中' : ''"></move> -->
  28. <changeCustomer v-if="mainData.iscustomer == 0 && tool.checkAuth($route.name,'changeCutomer') && mainData.istransformingtocustomer == 0" :data="mainData" :disabled="!isHandle" class="inline-16" @onChangeCustomer="queryMainData('转化')"></changeCustomer>
  29. <changeProject v-if="mainData.isproject == 0 && tool.checkAuth($route.name,'changeProject') && mainData.istransformingtoproject == 0" :data="mainData" :disabled="!isHandle" class="inline-16" @onChangeProject="queryMainData('转化')"/>
  30. <customerAudit v-if="mainData.iscustomer == 0 && tool.checkAuth($route.name,'customerAudit') && mainData.istransformingtocustomer == 1 && siteid == 'HY'" :disabled="mainData.iscustomer == 1" class="inline-16" :data="mainData" @onCustomerAudit="queryMainData('审核')"></customerAudit>
  31. <projectAudit v-if="mainData.isproject == 0 && tool.checkAuth($route.name,'projectAudit') && mainData.istransformingtoproject == 1 && siteid == 'HY'" :disabled="mainData.isproject == 1" class="inline-16" :data="mainData" @onProjectAudit="queryMainData('审核')"></projectAudit>
  32. <el-button :type="!isHandle || mainData.status === '已无效'?'':'primary'" v-if="tool.checkAuth($route.name,'goBack') && mainData.status != '已转化' && mainData.isprivate !== 1" :disabled="!isHandle || mainData.status === '已无效'" class="inline-16" size="mini" @click="goBack">退 回</el-button>
  33. <noNull v-if="tool.checkAuth($route.name,'noNull') && mainData.status != '已转化' " class="inline-16" :data="mainData" :disabled="!isHandle" @onSuccess="$store.dispatch('changeDetailDrawer',false);$router.replace('/orderclue')" :id="mainData.sat_orderclueid"/>
  34. <Del v-if="tool.checkAuth($route.name,'toVoid') " class="inline-16" :data="mainData" :disabled="!isHandle" :idName="20221123193702" @onSuccess="$store.dispatch('changeDetailDrawer',false);$router.replace('/orderclue')" :id="mainData.sat_orderclueid" idKey="sat_orderclueids"/>
  35. <changeSite v-if="tool.checkAuth($route.name,'changeSite')" class="inline-16"></changeSite>
  36. </div>
  37. <div slot="slot1" class="container normal-panel">
  38. <BaseInfo :detailInfo="detailInfo"/>
  39. </div>
  40. <div slot="slot0" class="container normal-panel" style="padding: 10px">
  41. <followDetail :data="mainData" ref="followDetail" :disabled="!isHandle || mainData.status === '已无效' || mainData.status === '已过期'" @onSuccess="queryMainData"/>
  42. </div>
  43. <div slot="slot2" class="container normal-panel">
  44. <sourceClues></sourceClues>
  45. </div>
  46. </basicDetails>
  47. </div>
  48. </template>
  49. <script>
  50. import BaseInfo from '@/HDrpManagement/projectChange/modules/modules/baseInfo/baseInfo'
  51. import followDetail from '@/SManagement/orderclue_detail/components/followDetail'
  52. import follow from '@/SManagement/orderclue/components/follow'
  53. import move from '@/SManagement/orderclue/components/move'
  54. import edit from '@/SManagement/orderclue/components/edit'
  55. import Del from './components/delete'
  56. import noNull from './components/noNull'
  57. import changeProject from './components/changeProject'
  58. import changeCustomer from './components/changeCustomer'
  59. import sourceClues from '@/HManagement/clueManage/clue_public/modules/sourceClues'
  60. import changeSite from '@/HManagement/clueManage/clue_private/modules/changeToSite.vue'
  61. import saveContact from './components/saveContact'
  62. import customerAudit from './components/customerAudit'
  63. import projectAudit from './components/projectAudit'
  64. export default {
  65. name: "detail",
  66. inject:['teamList'],
  67. data() {
  68. return {
  69. mainData:{},
  70. mainAreaData:{},
  71. detailInfo:{},
  72. userInfo:JSON.parse(window.sessionStorage.getItem('userInfo')),
  73. siteid:JSON.parse(sessionStorage.getItem('active_account')).siteid,
  74. isHandle:''
  75. }
  76. },
  77. components:{
  78. BaseInfo,
  79. followDetail,
  80. follow,
  81. move,
  82. Del,
  83. noNull,
  84. changeProject,
  85. changeCustomer,
  86. edit,
  87. sourceClues,
  88. changeSite,
  89. saveContact,
  90. customerAudit,
  91. projectAudit
  92. },
  93. watch: {
  94. async mainData(val) {
  95. const res = await this.$api.requested({
  96. "id": 20220930103501,
  97. "content": {
  98. "ownertable":"sat_orderclue",
  99. "ownerid":this.$route.query.id
  100. }
  101. })
  102. const agent = await this.$api.requested({
  103. "id":20230329122604,
  104. "content": {
  105. "ownertable":"sat_orderclue",
  106. "ownerid":this.$route.query.id
  107. }
  108. })
  109. if (this.mainData.leader.length !== 0){
  110. if (JSON.parse(window.sessionStorage.getItem('active_account')).userid === this.mainData.leader[0].userid){
  111. /*是负责人*/
  112. this.isHandle = true
  113. }else {
  114. let flag = 0
  115. for (var i=0;i<res.data[0].team.length;i++){
  116. if (res.data[0].team[i].userid === JSON.parse(window.sessionStorage.getItem('active_account')).userid){
  117. if (res.data[0].team[i].editable === 1){
  118. this.isHandle = true
  119. flag =1
  120. break
  121. }else {
  122. flag = 0
  123. break
  124. }
  125. }
  126. }
  127. /*不是负责人*/
  128. flag === 0?agent.data.editable === 0?this.isHandle = false:this.isHandle = true:this.isHandle = true
  129. this.$refs.details.$refs.group.editdataleader = agent.data.editdataleader
  130. }
  131. }
  132. /* let is
  133. if (Object.keys(JSON.parse(window.sessionStorage.getItem('userInfo'))).length > 0) {
  134. console.log('负责人逻辑');
  135. if(this.mainData.leader.length <= 0 ) return
  136. if(JSON.parse(window.sessionStorage.getItem('userInfo')).userid == this.mainData.leader[0].userid) {
  137. is = true
  138. } else {
  139. is = false
  140. }
  141. } else {
  142. console.log('不是负责人逻辑');
  143. is = true
  144. }
  145. this.isHandle = is*/
  146. console.log(this.isHandle,'权限');
  147. }
  148. },
  149. methods:{
  150. detailCreate (param) {
  151. param.content.isAll = 0
  152. },
  153. async queryMainData(val) {
  154. const res = await this.$api.requested({
  155. "classname": "saletool.orderclue.web.orderclue",
  156. "method": "selectDetail",
  157. "content": {
  158. "sat_orderclueid": this.$route.query.id
  159. }
  160. })
  161. this.mainData = res.data
  162. this.$refs.details.param.content.type = this.$route.query.tabIndex
  163. if (val == '审核' || (val == '转化' && this.siteid == 'HY')) return this.$refs.details.$refs.tag.queryTag()
  164. this.changeDataStructure()
  165. },
  166. changeDataStructure() {
  167. var that = this
  168. let siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  169. this.mainAreaData = [
  170. {
  171. label:'客户名称',
  172. value:this.mainData.enterprisename_customer
  173. },
  174. {
  175. label:'联系人',
  176. value:this.mainData.name
  177. },
  178. {
  179. label:'联系方式',
  180. value:this.mainData.phonenumber
  181. },
  182. {
  183. label:'来源',
  184. value:this.mainData.cluesource
  185. },
  186. {
  187. label:'市场活动',
  188. value:this.mainData.campaign_name
  189. },
  190. {
  191. label:'领域',
  192. value:this.mainData.tradefield
  193. },
  194. {
  195. label:'负责人',
  196. value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
  197. },
  198. {
  199. label:'分配状态',
  200. value:this.mainData.allocationstatus
  201. },
  202. {
  203. label:'跟进状态',
  204. value:this.mainData.status,
  205. style:function () {
  206. let style = {}
  207. switch (that.mainData.status) {
  208. case '已过期':
  209. style = {color:'#333'}
  210. break;
  211. case '跟进中':
  212. style = {color:'#52C41A'}
  213. break;
  214. case '待跟进':
  215. style = {color:'#3874f6'}
  216. break;
  217. case '已无效':
  218. style = {color:'#333333'}
  219. break;
  220. case '已转化':
  221. style = {color:'#fa8c16'}
  222. break;
  223. default:
  224. break;
  225. }
  226. return style
  227. }
  228. },
  229. {
  230. label:'跟进次数',
  231. value:this.mainData.followcount
  232. },
  233. {
  234. label:'营销费用',
  235. value:'¥ '+this.tool.formatAmount(this.mainData.salesfeesamount,2)
  236. },
  237. ]
  238. siteid === 'HY'?
  239. this.detailInfo = {
  240. baseInfo: [
  241. {
  242. label:'客户',
  243. value:this.mainData.enterprisename_customer
  244. },
  245. {
  246. label:'联系人',
  247. value:this.mainData.name
  248. },
  249. {
  250. label:'联系人角色',
  251. value:this.mainData.contactsrole
  252. },
  253. {
  254. label:'联系方式',
  255. value:this.mainData.phonenumber
  256. },
  257. {
  258. label:'微信',
  259. value:this.mainData.wechatnum
  260. },
  261. {
  262. label:'省市县',
  263. value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`
  264. },
  265. {
  266. label:'地址',
  267. value:this.mainData.address
  268. },
  269. {
  270. label:'项目名称',
  271. value:this.mainData.projectname
  272. },
  273. {
  274. label:'项目规模',
  275. value:this.mainData.scale?this.mainData.scale + this.mainData.unitname:'--'
  276. },
  277. /*{
  278. label:'总投资额(万元)',
  279. value:this.mainData.totalinvestment !== 0 ? this.tool.formatAmount(this.mainData.totalinvestment,2):'--'
  280. },
  281. {
  282. label:'造价(万元)',
  283. value:this.mainData.costofconstruction !== 0 ? this.tool.formatAmount(this.mainData.costofconstruction,2):'--'
  284. },*/
  285. {
  286. label:'预计开工时间',
  287. value:this.mainData.begdate_due
  288. },
  289. {
  290. label:'预计完工时间',
  291. value:this.mainData.enddate_due
  292. },
  293. {
  294. label:'市场活动',
  295. value:this.mainData.campaign_name
  296. },
  297. {
  298. label:'领域',
  299. value:this.mainData.tradefield
  300. },
  301. {
  302. label:'设计院',
  303. value:this.mainData.institute
  304. },
  305. {
  306. label:'设计师',
  307. value:this.mainData.designer
  308. },
  309. {
  310. label:'关联项目',
  311. value:this.mainData.projectname1
  312. },
  313. {
  314. label:'来源',
  315. value:this.mainData.cluesource
  316. },
  317. {
  318. label:'线索概况',
  319. value:this.mainData.notes
  320. },
  321. {
  322. label:'所属业务员',
  323. value:this.mainData.salename
  324. },
  325. {
  326. label:'上图员',
  327. value:this.mainData.uppictured
  328. },
  329. {
  330. label:'负责人',
  331. value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
  332. },
  333. {
  334. label:'分配状态',
  335. value:this.mainData.allocationstatus,
  336. style:function () {
  337. let style = {}
  338. switch (that.mainData.status) {
  339. case '已分配':
  340. style = {color:'#333333'}
  341. break;
  342. case '待分配':
  343. style = {color:'#3874f6'}
  344. break;
  345. default:
  346. break;
  347. }
  348. return style
  349. }
  350. },
  351. // {
  352. // label:'负责人',
  353. // value:this.mainData.leader[0].name
  354. // },
  355. {
  356. label:'跟进状态',
  357. value:this.mainData.status,
  358. style:function () {
  359. let style = {}
  360. switch (that.mainData.status) {
  361. case '已过期':
  362. style = {color:'#333'}
  363. break;
  364. case '跟进中':
  365. style = {color:'#52C41A'}
  366. break;
  367. case '待跟进':
  368. style = {color:'#3874f6'}
  369. break;
  370. case '已无效':
  371. style = {color:'#333333'}
  372. break;
  373. case '已转化':
  374. style = {color:'#fa8c16'}
  375. break;
  376. default:
  377. break;
  378. }
  379. return style
  380. }
  381. },
  382. ],
  383. systemInfo: [
  384. {label:'创建人',value:this.mainData.createBy},
  385. {label:'创建时间',value:this.mainData.createDate},
  386. {label:'分配人',value:this.mainData.assignedBy},
  387. {label:'分配时间',value:this.mainData.assignedDate},
  388. {label:'最近编辑人',value:this.mainData.editBy},
  389. {label:'最近编辑时间',value:this.mainData.editDate},
  390. {label:'最近跟进人',value:this.mainData.followBy},
  391. {label:'最近跟进时间',value:this.mainData.followDate},
  392. {label:'无效原因',value:this.mainData.invalidreason},
  393. {label:'作废原因',value:this.mainData.deletereason},
  394. {label:'跟进次数',value:this.mainData.followcount === 0?'0':this.mainData.followcount},
  395. /*{label:'转化次数',value:this.mainData.isproject === 0 && this.mainData.iscustomer === 0?'0':this.mainData.isproject + this.mainData.iscustomer },*/
  396. {label:'转手次数', value:this.mainData.leader[0].leadernum === 0?'0':this.mainData.leader[0].leadernum},
  397. ]
  398. }:
  399. this.detailInfo = {
  400. baseInfo: [
  401. {
  402. label:'客户',
  403. value:this.mainData.enterprisename_customer
  404. },
  405. {
  406. label:'联系人',
  407. value:this.mainData.name
  408. },
  409. {
  410. label:'联系人角色',
  411. value:this.mainData.contactsrole
  412. },
  413. {
  414. label:'联系方式',
  415. value:this.mainData.phonenumber
  416. },
  417. {
  418. label:'微信',
  419. value:this.mainData.wechatnum
  420. },
  421. {
  422. label:'省市县',
  423. value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`
  424. },
  425. {
  426. label:'地址',
  427. value:this.mainData.address
  428. },
  429. {
  430. label:'项目名称',
  431. value:this.mainData.projectname
  432. },
  433. {
  434. label:'项目规模',
  435. value:this.mainData.scale?this.mainData.scale + this.mainData.unitname:'--'
  436. },
  437. {
  438. label:'总投资额(万元)',
  439. value:this.mainData.totalinvestment !== 0 ? this.tool.formatAmount(this.mainData.totalinvestment,2):'--'
  440. },
  441. {
  442. label:'造价(万元)',
  443. value:this.mainData.costofconstruction !== 0 ? this.tool.formatAmount(this.mainData.costofconstruction,2):'--'
  444. },
  445. {
  446. label:'预计开工时间',
  447. value:this.mainData.begdate_due
  448. },
  449. {
  450. label:'预计完工时间',
  451. value:this.mainData.enddate_due
  452. },
  453. {
  454. label:'市场活动',
  455. value:this.mainData.campaign_name
  456. },
  457. {
  458. label:'领域',
  459. value:this.mainData.tradefield
  460. },
  461. {
  462. label:'设计院',
  463. value:this.mainData.institute
  464. },
  465. {
  466. label:'设计师',
  467. value:this.mainData.designer
  468. },
  469. {
  470. label:'关联项目',
  471. value:this.mainData.projectname1
  472. },
  473. {
  474. label:'来源',
  475. value:this.mainData.cluesource
  476. },
  477. {
  478. label:'线索概况',
  479. value:this.mainData.notes
  480. },
  481. {
  482. label:'所属业务员',
  483. value:this.mainData.salename
  484. },
  485. {
  486. label:'上图员',
  487. value:this.mainData.uppictured
  488. },
  489. {
  490. label:'负责人',
  491. value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
  492. },
  493. {
  494. label:'分配状态',
  495. value:this.mainData.allocationstatus,
  496. style:function () {
  497. let style = {}
  498. switch (that.mainData.status) {
  499. case '已分配':
  500. style = {color:'#333333'}
  501. break;
  502. case '待分配':
  503. style = {color:'#3874f6'}
  504. break;
  505. default:
  506. break;
  507. }
  508. return style
  509. }
  510. },
  511. // {
  512. // label:'负责人',
  513. // value:this.mainData.leader[0].name
  514. // },
  515. {
  516. label:'跟进状态',
  517. value:this.mainData.status,
  518. style:function () {
  519. let style = {}
  520. switch (that.mainData.status) {
  521. case '已过期':
  522. style = {color:'#333'}
  523. break;
  524. case '跟进中':
  525. style = {color:'#52C41A'}
  526. break;
  527. case '待跟进':
  528. style = {color:'#3874f6'}
  529. break;
  530. case '已无效':
  531. style = {color:'#333333'}
  532. break;
  533. case '已转化':
  534. style = {color:'#fa8c16'}
  535. break;
  536. default:
  537. break;
  538. }
  539. return style
  540. }
  541. },
  542. ],
  543. systemInfo: [
  544. {label:'创建人',value:this.mainData.createBy},
  545. {label:'创建时间',value:this.mainData.createDate},
  546. {label:'分配人',value:this.mainData.assignedBy},
  547. {label:'分配时间',value:this.mainData.assignedDate},
  548. {label:'最近编辑人',value:this.mainData.editBy},
  549. {label:'最近编辑时间',value:this.mainData.editDate},
  550. {label:'最近跟进人',value:this.mainData.followBy},
  551. {label:'最近跟进时间',value:this.mainData.followDate},
  552. {label:'无效原因',value:this.mainData.invalidreason},
  553. {label:'作废原因',value:this.mainData.deletereason},
  554. {label:'跟进次数',value:this.mainData.followcount === 0?'0':this.mainData.followcount},
  555. /*{label:'转化次数',value:this.mainData.isproject === 0 && this.mainData.iscustomer === 0?'0':this.mainData.isproject + this.mainData.iscustomer },*/
  556. {label:'转手次数', value:this.mainData.leader[0].leadernum === 0?'0':this.mainData.leader[0].leadernum},
  557. ]
  558. }
  559. },
  560. goBack () {
  561. this.$confirm('退回该线索后无法撤销,是否继续','提示',{
  562. "confirmButtonText":'确定',
  563. "cancelButtonText":'取消'
  564. }).then(async confirm => {
  565. let res = await this.$api.requested({
  566. "id":20221207160802,
  567. "content": {
  568. sat_orderclueid: this.mainData.sat_orderclueid
  569. }
  570. })
  571. this.tool.showMessage(res , () => {
  572. this.$store.dispatch('changeDetailDrawer',false)
  573. this.$router.push('/orderclue')
  574. })
  575. })
  576. },
  577. // 监听切换数据,上一页,下一页
  578. pageChange (id,rowindex,tabIndex) {
  579. this.flag = false
  580. tabIndex = this.$route.query.tabIndex
  581. this.$router.replace({path:'/orderclue_detail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  582. this.queryMainData(id)
  583. },
  584. onFollow(){
  585. this.$refs.followDetail.getFollowDetail()
  586. this.queryMainData()
  587. }
  588. },
  589. mounted () {
  590. this.queryMainData(this.$route.query.id)
  591. },
  592. created() {
  593. }
  594. }
  595. </script>
  596. <style scoped>
  597. </style>