drawer.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <template>
  2. <el-drawer
  3. :visible.sync="drawer"
  4. direction="rtl"
  5. :append-to-body="true"
  6. size="100%"
  7. >
  8. <div slot="title" class="title">
  9. <span style="margin: 0" class="name"
  10. >客户名称:{{ row?.base?.name }}</span
  11. >
  12. <span>客户编码:{{ row?.base?.code }}</span>
  13. <span>客户代号:{{ row?.base?.serialNo }}</span>
  14. <span>业务员:{{ row?.base?.salesmanName }}</span>
  15. <span
  16. >客户级别:{{ getDictValue('供应商级别', row?.base?.level + '') }}</span
  17. >
  18. </div>
  19. <div class="ele-body" style="height: 100%">
  20. <div style="width: calc(100% - 350px); height: 100%">
  21. <!-- <headerTitle title="摘要卡片" style="margin-top: 15px"></headerTitle> -->
  22. <div class="card">
  23. <div>
  24. <span> 销售订单总额</span>
  25. <span class="value"
  26. >{{ contactCountData.totalAmountSaleOrder }}
  27. &nbsp;&nbsp;元
  28. </span>
  29. </div>
  30. <div>
  31. <span> 退货单总额</span>
  32. <span class="value"
  33. >{{
  34. contactCountData.totalAmountSaleOrderRecord
  35. }}
  36. &nbsp;&nbsp;元</span
  37. >
  38. </div>
  39. <div>
  40. <span> 回款总额</span>
  41. <span class="value"
  42. >{{ contactCountData.totalAmountReturn }}&nbsp;&nbsp;元</span
  43. ></div
  44. >
  45. <div>
  46. <span> 退款总额</span>
  47. <span class="value"
  48. >{{ contactCountData.totalAmountRecord }}&nbsp;&nbsp;元</span
  49. ></div
  50. >
  51. <div>
  52. <span> 待回款总额</span>
  53. <span class="value"
  54. >{{ contactCountData.totalAmountTreatReturn }}&nbsp;&nbsp;元</span
  55. ></div
  56. >
  57. </div>
  58. <el-tabs v-model="activeName" style="height: calc(100% - 124px)">
  59. <el-tab-pane label="详细信息" name="详细信息">
  60. <contactInfo ref="contactInfoRef"></contactInfo>
  61. </el-tab-pane>
  62. <el-tab-pane label="银行信息" name="银行信息">
  63. <bankInfo ref="bankInfoRef"></bankInfo>
  64. </el-tab-pane>
  65. <el-tab-pane label="联系人信息" name="联系人信息">
  66. <linkInfo ref="linkInfoREf"></linkInfo
  67. ></el-tab-pane>
  68. <el-tab-pane label="跟进记录" name="跟进记录">
  69. <followList ref="followListRef"></followList
  70. ></el-tab-pane>
  71. <el-tab-pane label="供货列表" name="供货列表">
  72. <supplyList ref="supplyListRef"></supplyList
  73. ></el-tab-pane>
  74. <el-tab-pane label="商机" name="商机">
  75. <businessOpportunity
  76. :key="row?.base?.id"
  77. :contactId="row?.base?.id"
  78. :contactName="row?.base?.name"
  79. ></businessOpportunity>
  80. </el-tab-pane>
  81. <el-tab-pane label="报价单" name="报价单">
  82. <quotation :key="row?.base?.id" :contactData="row.base"></quotation>
  83. </el-tab-pane>
  84. <!-- 合同评审 -->
  85. <el-tab-pane label="合同评审" name="合同评审">
  86. <contractReview
  87. :contractData="row"
  88. ref="contractReviewRef"
  89. ></contractReview>
  90. </el-tab-pane>
  91. <el-tab-pane label="销售订单" name="销售订单">
  92. <saleOrder :key="row?.base?.id" :contactData="row.base"></saleOrder>
  93. </el-tab-pane>
  94. <el-tab-pane label="销售合同" name="销售合同">
  95. <contractBook
  96. :key="row?.base?.id"
  97. :contactData="row.base"
  98. ></contractBook>
  99. </el-tab-pane>
  100. <el-tab-pane label="受托发货" name="受托发货">
  101. <entrustedReceive :key="row?.base?.id" :contactData="row.base"></entrustedReceive>
  102. </el-tab-pane>
  103. <el-tab-pane label="发货单" name="发货单">
  104. <invoice :key="row?.base?.id" :contactData="row.base"></invoice>
  105. </el-tab-pane>
  106. <el-tab-pane label="退货单" name="退货单">
  107. <returnGoods
  108. :key="row?.base?.id"
  109. :contactData="row.base"
  110. ></returnGoods>
  111. </el-tab-pane>
  112. <el-tab-pane label="对账单" name="对账单">
  113. <accountstatement
  114. :key="row?.base?.id"
  115. :contactData="row.base"
  116. ></accountstatement>
  117. </el-tab-pane>
  118. <el-tab-pane label="开票信息" name="开票信息">
  119. <invoiceManage
  120. :key="row?.base?.id"
  121. :contactData="row.base"
  122. ></invoiceManage>
  123. </el-tab-pane>
  124. <el-tab-pane label="应收信息" name="应收信息">
  125. <receivableManage
  126. :key="row?.base?.id"
  127. :contactData="row.base"
  128. ></receivableManage>
  129. </el-tab-pane>
  130. <el-tab-pane label="证书资质" name="证书资质">
  131. <certificateManagement
  132. ref="certificateManagementRef"
  133. ></certificateManagement>
  134. </el-tab-pane>
  135. <el-tab-pane label="申请记录" name="申请记录">
  136. <applyList
  137. ref="applyListRef"
  138. :tableList="row.listApply"
  139. ></applyList>
  140. </el-tab-pane>
  141. <el-tab-pane label="审批流程" name="审批流程">
  142. <bpmDetail
  143. v-if="activeName === '审批流程' && row.base?.processInstanceId"
  144. :id="row.base?.processInstanceId"
  145. ></bpmDetail>
  146. </el-tab-pane>
  147. <el-tab-pane label="售后工单" name="售后工单">
  148. <saleOderAftersalesList
  149. :saleOrderData="row"
  150. ref="saleOderAftersalesListRef"
  151. ></saleOderAftersalesList>
  152. </el-tab-pane>
  153. </el-tabs>
  154. </div>
  155. <el-card
  156. class="box-card"
  157. style="width: 350px; margin-left: 15px; height: 100%"
  158. >
  159. <div slot="header" class="clearfix">
  160. <span>客户动态</span>
  161. <el-button
  162. style="float: right; padding: 3px 0"
  163. type="text"
  164. @click="commitCommentVisible = true"
  165. >新建</el-button
  166. >
  167. </div>
  168. <!-- <tinymce-editor v-model="content" :init="{ height: 525 }" /> -->
  169. <comment :key="row.base?.id" ref="commentRef"></comment>
  170. </el-card>
  171. <ele-modal
  172. custom-class="ele-dialog-form long-dialog-form"
  173. :centered="true"
  174. :visible.sync="commitCommentVisible"
  175. :close-on-click-modal="false"
  176. :append-to-body="true"
  177. width="500px"
  178. >
  179. <el-form label-width="90px" ref="form" class="el-form-box">
  180. <el-form-item label="动态内容">
  181. <el-input
  182. class="gray-bg-input"
  183. v-model="inputComment"
  184. type="textarea"
  185. :rows="3"
  186. autofocus
  187. placeholder="发布内容"
  188. >
  189. </el-input>
  190. </el-form-item>
  191. </el-form>
  192. <div slot="footer" class="footer">
  193. <el-button @click="commitCommentVisible = false">取消</el-button>
  194. <el-button type="primary" @click="commitComment">发布</el-button>
  195. </div>
  196. </ele-modal>
  197. </div>
  198. </el-drawer>
  199. </template>
  200. <script>
  201. import {
  202. contactDetail,
  203. updateContactDynamics,
  204. queryContactIdCount
  205. } from '@/api/saleManage/contact';
  206. import dictMixins from '@/mixins/dictMixins';
  207. import contactInfo from './darwerComponents/contactInfo.vue';
  208. import comment from './darwerComponents/comment.vue';
  209. //银行
  210. import bankInfo from './darwerComponents/bankInfo.vue';
  211. //联系人
  212. import linkInfo from './darwerComponents/linkInfo.vue';
  213. // //其他信息
  214. // import otherForm from './darwerComponents/otherForm.vue';
  215. //资质
  216. // import certificateTable from './darwerComponents/certificateTable.vue';
  217. //商机
  218. import businessOpportunity from '@/views/saleManage/businessOpportunity/index.vue';
  219. //报价单
  220. import quotation from '@/views/saleManage/quotation/index.vue';
  221. //合同
  222. import contractBook from '@/views/contractManage/contractBook/index.vue';
  223. //销售订单
  224. import saleOrder from '@/views/saleManage/saleOrder/index.vue';
  225. //受托收货
  226. import entrustedReceive from '@/views/saleManage/saleOrder/entrustedReceive/index.vue';
  227. //发货单
  228. import invoice from '@/views/saleManage/saleOrder/invoice/index.vue';
  229. //退货单
  230. import returnGoods from '@/views/saleManage/saleOrder/returnGoods/index.vue';
  231. //对账单
  232. import accountstatement from '@/views/saleManage/saleOrder/accountstatement/index.vue';
  233. //发票
  234. import invoiceManage from '@/views/financialManage/invoiceManage/index.vue';
  235. //应收
  236. import receivableManage from '@/views/financialManage/receivableManage/index.vue';
  237. //跟进
  238. import followList from './darwerComponents/followList.vue';
  239. //申请记录
  240. import applyList from './darwerComponents/applyList.vue';
  241. //供货列表
  242. import supplyList from './darwerComponents/supplyList.vue';
  243. //售后工单
  244. import saleOderAftersalesList from './darwerComponents/saleOderAftersalesList.vue';
  245. //合同评审
  246. import contractReview from './darwerComponents/contractReview.vue';
  247. import TinymceEditor from '@/components/TinymceEditor/index.vue';
  248. import { mapGetters } from 'vuex';
  249. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  250. import certificateManagement from '@/views/saleManage/contact/components/certificateManagement/index.vue';
  251. export default {
  252. mixins: [dictMixins],
  253. components: {
  254. bpmDetail,
  255. contactInfo,
  256. bankInfo,
  257. linkInfo,
  258. contractReview,
  259. // otherForm,
  260. // certificateTable,
  261. quotation,
  262. contractBook,
  263. saleOrder,
  264. invoiceManage,
  265. businessOpportunity,
  266. receivableManage,
  267. invoice,
  268. followList,
  269. TinymceEditor,
  270. returnGoods,
  271. accountstatement,
  272. comment,
  273. certificateManagement,
  274. applyList,
  275. supplyList,
  276. saleOderAftersalesList,
  277. entrustedReceive
  278. },
  279. data() {
  280. return {
  281. drawer: false,
  282. title: '',
  283. activeName: '详细信息',
  284. row: { base: {} },
  285. content: '',
  286. commitCommentVisible: false,
  287. inputComment: '',
  288. contactCountData: {
  289. totalAmountSaleOrderRecord: '', //退货单总额:
  290. totalAmountRecord: '', //退款总额
  291. totalAmountTreatReturn: '', //待回款总额
  292. totalAmountSaleOrder: '', //销售订单总额
  293. totalAmountReturn: '' //回款总额
  294. },
  295. pageName: 'myList'
  296. };
  297. },
  298. created() {
  299. this.requestDict('供应商级别');
  300. },
  301. computed: {
  302. ...mapGetters(['user'])
  303. },
  304. methods: {
  305. async open(row, pageName) {
  306. console.log(row, pageName);
  307. this.row = await contactDetail(row.id);
  308. if (this.row?.listApply) {
  309. this.row?.listApply.forEach((item, index) => {
  310. this.$set(
  311. this.row?.listApply[index],
  312. 'contactName',
  313. this.row.base.name
  314. );
  315. });
  316. }
  317. this.pageName = pageName;
  318. const contactCountData = await queryContactIdCount(row.id);
  319. this.contactCountData = contactCountData.data;
  320. this.drawer = true;
  321. this.$nextTick(() => {
  322. this.$refs.contactInfoRef.init(this.row);
  323. this.$refs.bankInfoRef.init(this.row);
  324. this.$refs.linkInfoREf.init(this.row);
  325. // this.$refs.certificateTableRef.init(this.row.base);
  326. this.$refs.certificateManagementRef &&
  327. this.$refs.certificateManagementRef.init(
  328. '4',
  329. this.row.base.id,
  330. this.row.base.name
  331. );
  332. this.$refs.followListRef.init(this.row);
  333. this.$refs.supplyListRef.init(this.row);
  334. this.$refs.commentRef.init(this.row.base);
  335. });
  336. },
  337. async commitComment() {
  338. await updateContactDynamics({
  339. id: this.row.base.id,
  340. contactDynamicsList: [
  341. {
  342. id: '', //主键id
  343. date: '', //评论时间
  344. ownerId: '', //文章的id
  345. fromId: this.user.info.userId, //评论者id
  346. fromName: this.user.info.name, //评论者昵称
  347. fromAvatar:
  348. this.user.info.avatar && this.user.info.avatar[0]?.url, //评论者头像
  349. content: this.inputComment, //评论内容
  350. reply: [
  351. //回复,或子评论
  352. ]
  353. }
  354. ]
  355. });
  356. this.commitCommentVisible = false;
  357. this.row = await contactDetail(this.row.base.id);
  358. this.$refs.commentRef.init(this.row.base);
  359. },
  360. handleClose(done) {
  361. this.$confirm('确认关闭?')
  362. .then((_) => {
  363. done();
  364. })
  365. .catch((_) => {});
  366. }
  367. }
  368. };
  369. </script>
  370. <style lang="scss" scoped>
  371. .ele-body {
  372. display: flex;
  373. }
  374. :deep(.el-tabs__content) {
  375. padding: 10px;
  376. height: calc(100% - 40px);
  377. overflow: auto;
  378. }
  379. :deep(.el-input.is-disabled .el-input__inner) {
  380. color: #606266;
  381. }
  382. .card {
  383. display: flex;
  384. padding: 15px;
  385. font-size: 16px;
  386. > div {
  387. flex: 1;
  388. margin: 0px 40px;
  389. background: #1890ff;
  390. color: #fff;
  391. display: flex;
  392. flex-direction: column;
  393. align-items: center;
  394. justify-content: center;
  395. padding: 12px;
  396. border-radius: 10px;
  397. .value {
  398. margin-top: 8px;
  399. }
  400. }
  401. }
  402. .title {
  403. span {
  404. margin-left: 50px;
  405. }
  406. .name {
  407. font-weight: 800;
  408. color: #40a9ff;
  409. }
  410. }
  411. :deep(.el-card__body) {
  412. overflow: auto;
  413. height: calc(100% - 51px);
  414. }
  415. </style>