index.vue 21 KB

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