detail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. <template>
  2. <div>
  3. <basicDetails
  4. ref="details"
  5. :titleText="mainData.enterprisename_customer"
  6. :editData="mainData"
  7. :mainAreaData="mainAreaData"
  8. turnPageId="20221101094302"
  9. delApiId="20221101100502"
  10. idname="sat_orderclueid"
  11. :tabs="['跟进记录','详细信息']"
  12. @pageChange="pageChange"
  13. @onEditSuccess="queryMainData($route.query.id)">
  14. <div slot="tags">
  15. </div>
  16. <div slot="customOperation">
  17. <edit class="inline-16" :data="mainData" @onSuccess="queryMainData" v-if="tool.checkAuth($route.name,'update') && mainData.allocationstatus == '待分配'"/>
  18. <distobutionOne v-if="tool.checkAuth($route.name,'oneDistribution') && mainData.allocationstatus == '待分配'" @onSuccess="$store.dispatch('changeDetailDrawer',false),$router.back()" />
  19. <recall class="inline-16" v-if="mainData.allocationstatus != '待分配' && mainData.status === '待跟进' || mainData.status === '跟进中' && mainData.isTeam !== '团队' && tool.checkAuth($route.name,'recall')" :data="mainData" @onSuccess="queryMainData"></recall>
  20. </div>
  21. <div slot="slot1" class="container normal-panel">
  22. <BaseInfo :detailInfo="detailInfo"/>
  23. </div>
  24. <div slot="slot0" class="container normal-panel">
  25. <el-descriptions>
  26. <div slot="title">跟进记录 &nbsp;<i @click="followRecord(param.content.sort[0].reversed = param.content.sort[0].reversed == 1 ? 0 : 1)" :class="param.content.sort[0].reversed == 1?'fa fa-sort-amount-asc':'fa fa-sort-amount-desc'"></i></div>
  27. </el-descriptions>
  28. <div class="flex-align-center normal-margin">
  29. <p>日期:&nbsp;</p>
  30. <el-date-picker
  31. v-model="value2"
  32. type="daterange"
  33. align="right"
  34. unlink-panels
  35. range-separator="至"
  36. start-placeholder="开始日期"
  37. end-placeholder="结束日期"
  38. value-format="yyyy-MM-dd"
  39. size="small"
  40. @change="dateChange"
  41. clearable>
  42. </el-date-picker>
  43. </div>
  44. <div class="detail" v-if="recordlist.length > 0">
  45. <div class="item" v-for="(item,index) in recordlist" :key="index">
  46. <p>{{index + 1}}.{{item.createdate}},&nbsp;由<span style="font-weight:bold;margin:0 6px;font-size:13px">{{item.createby}}</span>开始跟进,跟进方式:<span style="font-weight:bold;margin:0 5px">{{item.followupmode}}</span>,{{handleTxt[item.logtype]}}</p>
  47. <div class="content">
  48. <div style="margin-bottom:10px">
  49. <p v-if="item.competitor">已购买品牌:{{item.competitor}}</p>
  50. {{item.content}}
  51. </div>
  52. <file-item
  53. :marginRight="10"
  54. :rowCount="5"
  55. :isDownLoad="true"
  56. :fileData="item.attinfo">
  57. </file-item>
  58. </div>
  59. </div>
  60. </div>
  61. <el-empty title="暂无数据" v-else></el-empty>
  62. <div style="margin-top:16px;text-align:right">
  63. <el-pagination
  64. background
  65. small
  66. @size-change="handleSizeChange"
  67. @current-change="handleCurrentChange"
  68. :current-page="param.content.pageNumber"
  69. :page-size="param.content.pageSize"
  70. layout="total, prev, pager, next"
  71. :total="total">
  72. </el-pagination>
  73. </div>
  74. </div>
  75. </basicDetails>
  76. </div>
  77. </template>
  78. <script>
  79. import BaseInfo from '@/HDrpManagement/projectChange/modules/modules/baseInfo/baseInfo'
  80. import recall from './recall.vue'
  81. import edit from './edit'
  82. import distobutionOne from './distobutionOne'
  83. import FileItem from '@/SManagement/orderclue/components/file/index2'
  84. export default {
  85. name: "detail",
  86. data() {
  87. return {
  88. mainData:{},
  89. mainAreaData:{},
  90. detailInfo:{},
  91. recordlist:[],
  92. isdesc:1,
  93. value2:'',
  94. dateParam:{
  95. "start": "",
  96. "end": ""
  97. },
  98. param: {
  99. "id":20221101094602,
  100. "content": {
  101. "pageNumber":1,
  102. "pageSize":20,
  103. "sat_orderclueid": this.$route.query.id,
  104. "where": this.dateParam,
  105. "sort": [
  106. {
  107. "reversed":0,
  108. "sorted":1,
  109. "sortid":0,
  110. "sortname":'默认'
  111. }
  112. ]
  113. }
  114. },
  115. handleTxt:{
  116. '跟进中':'跟进内容',
  117. '成交':'成交操作,添加备注',
  118. '丢单':'丢单操作,具体原因如下',
  119. '无效':'无效操作,具体原因如下',
  120. },
  121. total:0
  122. }
  123. },
  124. components:{
  125. BaseInfo,recall,edit,distobutionOne,FileItem
  126. },
  127. methods:{
  128. async followRecord () {
  129. const res = await this.$api.requested({
  130. "classname": "webmanage.saletool.orderclue.publicclue.PublicClue",
  131. "method": "getFollowList",
  132. "content": {
  133. "sat_orderclueid": this.$route.query.id,
  134. "isdesc": this.isdesc,
  135. "where": this.dateParam
  136. }
  137. })
  138. this.recordlist = res.data
  139. },
  140. dateChange (val) {
  141. if (!val) {val = []}
  142. this.dateParam.start = val[0]
  143. this.dateParam.end = val[1]
  144. this.followRecord()
  145. },
  146. async queryMainData(id) {
  147. const res = await this.$api.requested({
  148. "classname": "webmanage.saletool.orderclue.publicclue.PublicClue",
  149. "method": "selectDetail",
  150. "content": {
  151. "sat_orderclueid": this.$route.query.id
  152. }
  153. })
  154. this.mainData = res.data
  155. console.log(this.mainData);
  156. this.changeDataStructure()
  157. this.$refs['details'].$refs['group'].queryGroup()
  158. },
  159. changeDataStructure() {
  160. let that = this
  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.allocationstatus === '已分配'?this.mainData.leader[0].name:'--'
  185. },
  186. {
  187. label:'所属经销商',
  188. value:this.mainData.enterprisename
  189. },
  190. {
  191. label:'跟进状态',
  192. value:this.mainData.status,
  193. style:function () {
  194. let style = {}
  195. switch (that.mainData.status) {
  196. case '已过期':
  197. style = {color:'#999999'}
  198. break;
  199. case '跟进中':
  200. style = {color:'#52c41a'}
  201. break;
  202. case '待跟进':
  203. style = {color:'#3874f6'}
  204. break;
  205. case '已转化':
  206. style = {color:'#fa8c16'}
  207. break;
  208. case '已无效':
  209. style = {color:'#333333'}
  210. break;
  211. default:
  212. break;
  213. }
  214. return style
  215. }
  216. },
  217. {
  218. label:'分配状态',
  219. value:this.mainData.allocationstatus,
  220. style:function () {
  221. let style = {}
  222. switch (that.mainData.allocationstatus) {
  223. case '已分配':
  224. style = {color:'#333333'}
  225. break;
  226. case '待分配':
  227. style = {color:'#3874f6'}
  228. break;
  229. default:
  230. break;
  231. }
  232. return style
  233. }
  234. },
  235. ]
  236. this.detailInfo = {
  237. baseInfo: [
  238. {
  239. label:'客户名称',
  240. value:this.mainData.name
  241. },
  242. {
  243. label:'手机号',
  244. value:this.mainData.phonenumber
  245. },
  246. {
  247. label:'省市县',
  248. value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`
  249. },
  250. {
  251. label:'地址',
  252. value:this.mainData.address
  253. },
  254. {
  255. label:'来源',
  256. value:this.mainData.cluesource
  257. },
  258. {
  259. label:'负责人',
  260. value:this.mainData.allocationstatus === '已分配'?this.mainData.leader[0].name:'--'
  261. },
  262. {
  263. label:'备注',
  264. value:this.mainData.notes
  265. },
  266. {
  267. label:'所属经销商',
  268. value:this.mainData.enterprisename
  269. },
  270. {
  271. label:'跟进状态',
  272. value:this.mainData.status,
  273. style:function () {
  274. let style = {}
  275. switch (that.mainData.status) {
  276. case '已过期':
  277. style = {color:'#999999'}
  278. break;
  279. case '跟进中':
  280. style = {color:'#52c41a'}
  281. break;
  282. case '待跟进':
  283. style = {color:'#3874f6'}
  284. break;
  285. case '已转化':
  286. style = {color:'#fa8c16'}
  287. break;
  288. case '已无效':
  289. style = {color:'#333333'}
  290. break;
  291. default:
  292. break;
  293. }
  294. return style
  295. }
  296. },
  297. {
  298. label:'分配状态',
  299. value:this.mainData.allocationstatus,
  300. style:function () {
  301. let style = {}
  302. switch (that.mainData.allocationstatus) {
  303. case '已分配':
  304. style = {color:'#333333'}
  305. break;
  306. case '待分配':
  307. style = {color:'#3874f6'}
  308. break;
  309. default:
  310. break;
  311. }
  312. return style
  313. }
  314. },
  315. /*{
  316. label:'转手次数',
  317. value:this.mainData.enterprisename
  318. },*/
  319. ],
  320. systemInfo: [
  321. {label:'创建人',value:this.mainData.createBy},
  322. {label:'分配人',value:this.mainData.assignedBy},
  323. {label:'最近跟进人',value:this.mainData.followBy},
  324. {label:'转移人',value:this.mainData.changeBy},
  325. {label:'最近编辑人',value:this.mainData.editBy},
  326. {label:'创建时间',value:this.mainData.createDate},
  327. {label:'分配时间',value:this.mainData.assignedDate},
  328. {label:'最近跟进时间',value:this.mainData.followDate},
  329. {label:'最近转移时间',value:this.mainData.changeDate},
  330. {label:'最近编辑时间',value:this.mainData.editDate},
  331. ]
  332. }
  333. },
  334. // 监听切换数据,上一页,下一页
  335. pageChange (id,rowindex) {
  336. this.flag = false
  337. this.$router.replace({path:'/clueDetail_private',query:{id:id,rowindex:rowindex}})
  338. this.queryMainData(id)
  339. },
  340. async followRecord () {
  341. this.param.content.sat_orderclueid = this.$route.query.id
  342. this.param.content.where = this.dateParam
  343. const res = await this.$api.requested(this.param)
  344. this.total = res.total
  345. this.param.content.sort = res.sort
  346. this.recordlist = res.data
  347. this.recordlist.forEach(item => {
  348. item.attinfo = this.fileType.fileList(item.attinfo)
  349. })
  350. console.log(this.recordlist);
  351. },
  352. dateChange (val) {
  353. console.log(val)
  354. if (!val) {val = []}
  355. this.dateParam.start = val[0]
  356. this.dateParam.end = val[1]
  357. this.followRecord()
  358. },
  359. handleSizeChange(val) {
  360. // console.log(`每页 ${val} 条`);
  361. this.param.content.pageSize = val
  362. this.followRecord()
  363. },
  364. handleCurrentChange(val) {
  365. // console.log(`当前页: ${val}`);
  366. this.param.content.pageNumber = val
  367. this.followRecord()
  368. },
  369. },
  370. mounted () {
  371. this.queryMainData(this.$route.query.id)
  372. },
  373. created() {
  374. this.followRecord()
  375. }
  376. }
  377. </script>
  378. <style scoped>
  379. .content {
  380. margin: 10px 0 16px 0;
  381. background: #F2F2F2;
  382. padding: 16px;
  383. border-radius: 5px;
  384. font-size: 14px;
  385. }
  386. .detail {
  387. overflow-y: scroll;
  388. height: calc(100vh - 400px);
  389. padding-right: 10px;
  390. }
  391. </style>