drawer.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <view class="mainBox">
  3. <uni-nav-bar background-color="#157A2C" color="#fff" fixed="true" statusBar="true" left-icon="back" title="商机详情"
  4. @clickLeft="back">
  5. </uni-nav-bar>
  6. <myCard :item="form" :columns="columns"></myCard>
  7. <view class="item">
  8. <view class="card">
  9. <view>
  10. <view class="lable">预算</view>
  11. <view>{{form.budget}} 万元</view>
  12. </view>
  13. <view>
  14. <view class="lable">赢单率</view>
  15. <view>{{form.winRate}} %</view>
  16. </view>
  17. <view>
  18. <view class="lable">预计结单日期</view>
  19. <view>{{form.expectedClosingDate}}</view>
  20. </view>
  21. </view>
  22. </view>
  23. <!-- <u-sticky bgColor="#fff" :customNavHeight="88"> -->
  24. <u-tabs :list="list1" @change="change" :current="current"></u-tabs>
  25. <!-- </u-sticky> -->
  26. <info ref="infoRef" :isDrawer="true" v-show="current==0"></info>
  27. <produceList :pricingWay="form.pricingWay" ref="produceListRef" :isDrawer="true" v-show="current==1">
  28. </produceList>
  29. <businessList ref="businessListRef" :isDrawer="true" v-show="current==2">
  30. </businessList>
  31. <personnelList ref="personnelListRef" :linkList="linkList" :isDrawer="true" v-show="current==3">
  32. </personnelList>
  33. <followList ref="followListRef" :linkList="linkList" pageName="businessOpportunity" v-show="current==4">
  34. </followList>
  35. </view>
  36. </template>
  37. <script>
  38. import businessList from "./businessList.vue"
  39. import personnelList from "./personnelList.vue"
  40. import produceList from "../../components/produceList.vue"
  41. import followList from "@/pages/saleManage/contact/components/followList.vue"
  42. import info from "./info.vue"
  43. import {
  44. contactDetail,
  45. } from '@/api/saleManage/contact/index.js'
  46. import {
  47. businessopportunitySave,
  48. getDetail,
  49. getfollowList,
  50. deletefollowList,
  51. savefollowList
  52. } from '@/api/saleManage/businessOpportunity/index.js'
  53. import myCard from '../../components/myCard.vue'
  54. export default {
  55. components: {
  56. businessList,
  57. personnelList,
  58. produceList,
  59. followList,
  60. info,
  61. myCard
  62. },
  63. data() {
  64. return {
  65. columns: [
  66. [{
  67. label: '名称:',
  68. prop: 'name',
  69. type: 'title',
  70. className: 'perce100',
  71. }],
  72. [{
  73. label: '客户名称:',
  74. prop: 'contactName'
  75. }, {
  76. label: '负责人:',
  77. prop: 'responsibleName'
  78. }],
  79. [{
  80. label: '商机来源:',
  81. prop: 'sourceName',
  82. className: 'perce100',
  83. }],
  84. ],
  85. current: 0,
  86. list1: [{
  87. name: '详细信息',
  88. }, {
  89. name: '产品清单',
  90. }, {
  91. name: '竞品'
  92. }, {
  93. name: '关键人信息'
  94. }, {
  95. name: '跟进记录'
  96. }],
  97. linkList: [],
  98. form: {
  99. id: '',
  100. contactName: '',
  101. contactId: '',
  102. budget: null,
  103. expectedClosingDate: '',
  104. sourceCode: '',
  105. sourceName: '',
  106. stageCode: '',
  107. stageName: '',
  108. winRate: null,
  109. name: '',
  110. remark: '',
  111. responsibleName: '',
  112. responsibleId: '',
  113. source: '',
  114. status: 1,
  115. pricingWay: '1',
  116. files: []
  117. },
  118. }
  119. },
  120. onLoad(data) {
  121. uni.$off('setBusinessOpportunity')
  122. uni.$on('setBusinessOpportunity', () => {
  123. this.save()
  124. })
  125. uni.$off('delFollowList')
  126. uni.$on('delFollowList', (item) => {
  127. deletefollowList([item.id])
  128. })
  129. uni.$off('savefollowList')
  130. uni.$on('savefollowList', (item) => {
  131. item.contactId=this.form.contactId
  132. item.opportunityId=this.form.id
  133. savefollowList(item)
  134. })
  135. getDetail(data.id).then(async res => {
  136. this.form = res
  137. const {
  138. linkList
  139. } = await contactDetail(res.contactId)
  140. const followList = await getfollowList({
  141. pageNum: 1,
  142. size: 1000,
  143. opportunityId: res.id,
  144. })
  145. this.linkList = linkList
  146. setTimeout(() => {
  147. this.current = 0
  148. this.$nextTick(() => {
  149. this.$refs.infoRef.init(res)
  150. this.$refs.produceListRef.init(res.productList)
  151. this.$refs.businessListRef.init(res.competAnalysisList)
  152. this.$refs.personnelListRef.init(res.partyList)
  153. this.$refs.followListRef.init(followList.list)
  154. if (data.current) {
  155. this.current = +data.current
  156. }
  157. })
  158. }, 300)
  159. })
  160. },
  161. onUnload() {
  162. uni.$off('setBusinessOpportunity')
  163. uni.$off('delFollowList')
  164. uni.$off('savefollowList')
  165. },
  166. methods: {
  167. change(data) {
  168. this.current = data.index
  169. // console.log(data,'current')
  170. },
  171. save() {
  172. try {
  173. const data = {
  174. opportunity: this.form,
  175. competAnalysisList: this.$refs.businessListRef.getValue(),
  176. partyList: this.$refs.personnelListRef.getValue(),
  177. productList: this.$refs.produceListRef.getValue()
  178. };
  179. uni.showLoading({
  180. title: '加载中'
  181. })
  182. businessopportunitySave(data).then((id) => {
  183. uni.hideLoading()
  184. })
  185. .catch((e) => {
  186. uni.hideLoading()
  187. });
  188. } catch (error) {
  189. uni.hideLoading()
  190. console.log(error, 'error')
  191. }
  192. },
  193. }
  194. }
  195. </script>
  196. <style lang="scss" scoped>
  197. .item {
  198. padding: 16rpx 32rpx;
  199. .card {
  200. padding: 16rpx 32rpx;
  201. margin-top: 32rpx;
  202. display: flex;
  203. flex-wrap: wrap;
  204. height: 80rpx;
  205. border-radius: 12rpx;
  206. border: 1px solid #cbcbcb;
  207. >view {
  208. font-size: 26rpx;
  209. width: 33%;
  210. .lable {
  211. color: #999;
  212. margin-bottom: 10rpx;
  213. }
  214. }
  215. }
  216. }
  217. </style>