drawer.vue 12 KB

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