index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  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="tool.checkAuth($route.name,'contactPerson')?['跟进记录','联系人','详细信息','来源线索']:['跟进记录','详细信息','来源线索']"
  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="slot2" class="container normal-panel">
  38. <BaseInfo v-if="tool.checkAuth($route.name,'contactPerson')" :detailInfo="detailInfo"/>
  39. <sourceClues v-else></sourceClues>
  40. </div>
  41. <div slot="slot0" class="container normal-panel" style="padding: 10px">
  42. <followDetail :data="mainData" ref="followDetail" :disabled="!isHandle || mainData.status === '已无效' || mainData.status === '已过期'" @onSuccess="queryMainData"/>
  43. </div>
  44. <div slot="slot3" class="container normal-panel">
  45. <sourceClues></sourceClues>
  46. </div>
  47. <div slot="slot1" class="container normal-panel">
  48. <contactPerson v-if="tool.checkAuth($route.name,'contactPerson')" :data="mainData"></contactPerson>
  49. <BaseInfo v-else :detailInfo="detailInfo"/>
  50. </div>
  51. </basicDetails>
  52. </div>
  53. </template>
  54. <script>
  55. import BaseInfo from '@/HDrpManagement/projectChange/modules/modules/baseInfo/baseInfo'
  56. import followDetail from '@/SManagement/orderclue_detail/components/followDetail'
  57. import follow from '@/SManagement/orderclue/components/follow'
  58. import move from '@/SManagement/orderclue/components/move'
  59. import edit from '@/SManagement/orderclue/components/edit'
  60. import Del from './components/delete'
  61. import noNull from './components/noNull'
  62. import changeProject from './components/changeProject'
  63. import changeCustomer from './components/changeCustomer'
  64. import sourceClues from '@/HManagement/clueManage/clue_public/modules/sourceClues'
  65. import changeSite from '@/HManagement/clueManage/clue_private/modules/changeToSite.vue'
  66. import saveContact from './components/saveContact'
  67. import customerAudit from './components/customerAudit'
  68. import projectAudit from './components/projectAudit'
  69. import contactPerson from './components/contactPerson'
  70. export default {
  71. name: "detail",
  72. inject:['teamList'],
  73. data() {
  74. return {
  75. mainData:{},
  76. mainAreaData:{},
  77. detailInfo:{},
  78. userInfo:JSON.parse(window.sessionStorage.getItem('userInfo')),
  79. siteid:JSON.parse(sessionStorage.getItem('active_account')).siteid,
  80. isHandle:''
  81. }
  82. },
  83. components:{
  84. BaseInfo,
  85. followDetail,
  86. follow,
  87. move,
  88. Del,
  89. noNull,
  90. changeProject,
  91. changeCustomer,
  92. edit,
  93. sourceClues,
  94. changeSite,
  95. saveContact,
  96. customerAudit,
  97. projectAudit,
  98. contactPerson
  99. },
  100. watch: {
  101. async mainData(val) {
  102. const res = await this.$api.requested({
  103. "id": 20220930103501,
  104. "content": {
  105. "ownertable":"sat_orderclue",
  106. "ownerid":this.$route.query.id
  107. }
  108. })
  109. const agent = await this.$api.requested({
  110. "id":20230329122604,
  111. "content": {
  112. "ownertable":"sat_orderclue",
  113. "ownerid":this.$route.query.id
  114. }
  115. })
  116. if (this.mainData.leader.length !== 0){
  117. if (JSON.parse(window.sessionStorage.getItem('active_account')).userid === this.mainData.leader[0].userid){
  118. /*是负责人*/
  119. this.isHandle = true
  120. }else {
  121. let flag = 0
  122. for (var i=0;i<res.data[0].team.length;i++){
  123. if (res.data[0].team[i].userid === JSON.parse(window.sessionStorage.getItem('active_account')).userid){
  124. if (res.data[0].team[i].editable === 1){
  125. this.isHandle = true
  126. flag =1
  127. break
  128. }else {
  129. flag = 0
  130. break
  131. }
  132. }
  133. }
  134. /*不是负责人*/
  135. flag === 0?agent.data.editable === 0?this.isHandle = false:this.isHandle = true:this.isHandle = true
  136. this.$refs.details.$refs.group.editdataleader = agent.data.editdataleader
  137. }
  138. }
  139. /* let is
  140. if (Object.keys(JSON.parse(window.sessionStorage.getItem('userInfo'))).length > 0) {
  141. console.log('负责人逻辑');
  142. if(this.mainData.leader.length <= 0 ) return
  143. if(JSON.parse(window.sessionStorage.getItem('userInfo')).userid == this.mainData.leader[0].userid) {
  144. is = true
  145. } else {
  146. is = false
  147. }
  148. } else {
  149. console.log('不是负责人逻辑');
  150. is = true
  151. }
  152. this.isHandle = is*/
  153. console.log(this.isHandle,'权限');
  154. }
  155. },
  156. methods:{
  157. detailCreate (param) {
  158. param.content.isAll = 0
  159. },
  160. async queryMainData(val) {
  161. const res = await this.$api.requested({
  162. "classname": "saletool.orderclue.web.orderclue",
  163. "method": "selectDetail",
  164. "content": {
  165. "sat_orderclueid": this.$route.query.id
  166. }
  167. })
  168. this.mainData = res.data
  169. this.$refs.details.param.content.type = this.$route.query.tabIndex
  170. if (val == '审核' || (val == '转化' && this.siteid == 'HY')) return this.$refs.details.$refs.tag.queryTag()
  171. this.changeDataStructure()
  172. },
  173. changeDataStructure() {
  174. var that = this
  175. let siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  176. this.mainAreaData = [
  177. {
  178. label:'客户名称',
  179. value:this.mainData.enterprisename_customer
  180. },
  181. {
  182. label:'联系人',
  183. value:this.mainData.name
  184. },
  185. {
  186. label:'联系方式',
  187. value:this.mainData.phonenumber
  188. },
  189. {
  190. label:'来源',
  191. value:this.mainData.cluesource
  192. },
  193. {
  194. label:'市场活动',
  195. value:this.mainData.campaign_name
  196. },
  197. {
  198. label:'领域',
  199. value:this.mainData.tradefield
  200. },
  201. {
  202. label:'负责人',
  203. value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
  204. },
  205. {
  206. label:'分配状态',
  207. value:this.mainData.allocationstatus,
  208. style:function () {
  209. let style = that.tool.getStatusColor(that.mainData.allocationstatus)
  210. return style
  211. }
  212. },
  213. {
  214. label:'跟进状态',
  215. value:this.mainData.status,
  216. style:function () {
  217. let style = that.tool.getStatusColor(that.mainData.status)
  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 = that.tool.getStatusColor(that.mainData.allocationstatus)
  330. return style
  331. }
  332. },
  333. // {
  334. // label:'负责人',
  335. // value:this.mainData.leader[0].name
  336. // },
  337. {
  338. label:'跟进状态',
  339. value:this.mainData.status,
  340. style:function () {
  341. let style = that.tool.getStatusColor(that.mainData.status)
  342. return style
  343. }
  344. },
  345. ],
  346. systemInfo: [
  347. {label:'创建人',value:this.mainData.createBy},
  348. {label:'创建时间',value:this.mainData.createDate},
  349. {label:'分配人',value:this.mainData.assignedBy},
  350. {label:'分配时间',value:this.mainData.assignedDate},
  351. {label:'最近编辑人',value:this.mainData.editBy},
  352. {label:'最近编辑时间',value:this.mainData.editDate},
  353. {label:'最近跟进人',value:this.mainData.followBy},
  354. {label:'最近跟进时间',value:this.mainData.followDate},
  355. {label:'无效原因',value:this.mainData.invalidreason},
  356. {label:'作废原因',value:this.mainData.deletereason},
  357. {label:'跟进次数',value:this.mainData.followcount === 0?'0':this.mainData.followcount},
  358. /*{label:'转化次数',value:this.mainData.isproject === 0 && this.mainData.iscustomer === 0?'0':this.mainData.isproject + this.mainData.iscustomer },*/
  359. {label:'转手次数', value:this.mainData.leader[0].leadernum === 0?'0':this.mainData.leader[0].leadernum},
  360. ]
  361. }:
  362. this.detailInfo = {
  363. baseInfo: [
  364. {
  365. label:'客户',
  366. value:this.mainData.enterprisename_customer
  367. },
  368. {
  369. label:'联系人',
  370. value:this.mainData.name
  371. },
  372. {
  373. label:'联系人角色',
  374. value:this.mainData.contactsrole
  375. },
  376. {
  377. label:'联系方式',
  378. value:this.mainData.phonenumber
  379. },
  380. {
  381. label:'微信',
  382. value:this.mainData.wechatnum
  383. },
  384. {
  385. label:'省市县',
  386. value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`
  387. },
  388. {
  389. label:'地址',
  390. value:this.mainData.address
  391. },
  392. {
  393. label:'项目名称',
  394. value:this.mainData.projectname
  395. },
  396. {
  397. label:'项目规模',
  398. value:this.mainData.scale?this.mainData.scale + this.mainData.unitname:'--'
  399. },
  400. {
  401. label:'总投资额(万元)',
  402. value:this.mainData.totalinvestment !== 0 ? this.tool.formatAmount(this.mainData.totalinvestment,2):'--'
  403. },
  404. {
  405. label:'造价(万元)',
  406. value:this.mainData.costofconstruction !== 0 ? this.tool.formatAmount(this.mainData.costofconstruction,2):'--'
  407. },
  408. {
  409. label:'预计开工时间',
  410. value:this.mainData.begdate_due
  411. },
  412. {
  413. label:'预计完工时间',
  414. value:this.mainData.enddate_due
  415. },
  416. {
  417. label:'市场活动',
  418. value:this.mainData.campaign_name
  419. },
  420. {
  421. label:'领域',
  422. value:this.mainData.tradefield
  423. },
  424. {
  425. label:'设计院',
  426. value:this.mainData.institute
  427. },
  428. {
  429. label:'设计师',
  430. value:this.mainData.designer
  431. },
  432. {
  433. label:'关联项目',
  434. value:this.mainData.projectname1
  435. },
  436. {
  437. label:'来源',
  438. value:this.mainData.cluesource
  439. },
  440. {
  441. label:'线索概况',
  442. value:this.mainData.notes
  443. },
  444. {
  445. label:'所属业务员',
  446. value:this.mainData.salename
  447. },
  448. {
  449. label:'上图员',
  450. value:this.mainData.uppictured
  451. },
  452. {
  453. label:'负责人',
  454. value:this.mainData.leader.length > 0 && this.mainData.leader[0].name
  455. },
  456. {
  457. label:'分配状态',
  458. value:this.mainData.allocationstatus,
  459. style:function () {
  460. let style = that.tool.getStatusColor(that.mainData.allocationstatus)
  461. return style
  462. }
  463. },
  464. // {
  465. // label:'负责人',
  466. // value:this.mainData.leader[0].name
  467. // },
  468. {
  469. label:'跟进状态',
  470. value:this.mainData.status,
  471. style:function () {
  472. let style = that.tool.getStatusColor(that.mainData.status)
  473. return style
  474. }
  475. },
  476. ],
  477. systemInfo: [
  478. {label:'创建人',value:this.mainData.createBy},
  479. {label:'创建时间',value:this.mainData.createDate},
  480. {label:'分配人',value:this.mainData.assignedBy},
  481. {label:'分配时间',value:this.mainData.assignedDate},
  482. {label:'最近编辑人',value:this.mainData.editBy},
  483. {label:'最近编辑时间',value:this.mainData.editDate},
  484. {label:'最近跟进人',value:this.mainData.followBy},
  485. {label:'最近跟进时间',value:this.mainData.followDate},
  486. {label:'无效原因',value:this.mainData.invalidreason},
  487. {label:'作废原因',value:this.mainData.deletereason},
  488. {label:'跟进次数',value:this.mainData.followcount === 0?'0':this.mainData.followcount},
  489. /*{label:'转化次数',value:this.mainData.isproject === 0 && this.mainData.iscustomer === 0?'0':this.mainData.isproject + this.mainData.iscustomer },*/
  490. {label:'转手次数', value:this.mainData.leader[0].leadernum === 0?'0':this.mainData.leader[0].leadernum},
  491. ]
  492. }
  493. },
  494. goBack () {
  495. this.$confirm('退回该线索后无法撤销,是否继续',this.$t('提示'),{
  496. "confirmButtonText":'确定',
  497. "cancelButtonText":'取消'
  498. }).then(async confirm => {
  499. let res = await this.$api.requested({
  500. "id":20221207160802,
  501. "content": {
  502. sat_orderclueid: this.mainData.sat_orderclueid
  503. }
  504. })
  505. this.tool.showMessage(res , () => {
  506. this.$store.dispatch('changeDetailDrawer',false)
  507. this.$router.push('/orderclue')
  508. })
  509. })
  510. },
  511. // 监听切换数据,上一页,下一页
  512. pageChange (id,rowindex,tabIndex) {
  513. this.flag = false
  514. if (this.$route.query.listqueryid && this.$route.query.listqueryid !== 'undefined'){
  515. }else {
  516. tabIndex = this.$route.query.tabIndex
  517. this.$router.replace({path:'/orderclue_detail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  518. }
  519. this.queryMainData(id)
  520. },
  521. onFollow(){
  522. this.$refs.followDetail.getFollowDetail()
  523. this.queryMainData()
  524. }
  525. },
  526. mounted () {
  527. this.queryMainData(this.$route.query.id)
  528. },
  529. created() {
  530. }
  531. }
  532. </script>
  533. <style scoped>
  534. </style>