index.vue 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318
  1. <template>
  2. <div id="Customers">
  3. <div v-if="!isAdd0 && !isAdd1 && !isAdd2">
  4. <el-card
  5. v-if="isList"
  6. v-loading="loading"
  7. :body-style="{
  8. height: '100%',
  9. padding: 0,
  10. display: 'flex',
  11. 'flex-direction': 'column',
  12. }"
  13. >
  14. <el-super-search
  15. v-model="params"
  16. :size="size"
  17. :dict="dict"
  18. :columns="SearchColumns"
  19. @reset="resetQuery"
  20. @submit="getList(params, page)"
  21. ></el-super-search>
  22. <el-row
  23. :gutter="10"
  24. class="mb10"
  25. type="flex"
  26. justify="end"
  27. style="margin-top: 20px"
  28. >
  29. <el-col :span="1.5">
  30. <el-button type="primary" :size="size" @click="handleAdd"
  31. >新增</el-button
  32. >
  33. <el-button :size="size" :disabled="multiple" @click="handleDelete">
  34. 删除
  35. </el-button>
  36. <el-button :size="size" @click="handleExport">导出</el-button>
  37. </el-col>
  38. </el-row>
  39. <el-super-ux-table
  40. v-model="customersList"
  41. :size="size"
  42. :dict="dict"
  43. :page="page"
  44. :columns="TableColumns"
  45. index
  46. checkbox
  47. pagination
  48. convenitentOperation
  49. highlight-current-row
  50. storage-key="CustomersSuperTable"
  51. @selection-change="handleSelectionChange"
  52. @pagination="getList({ ...page, ...params })"
  53. style="margin: 16px 0 0"
  54. >
  55. <ux-table-column
  56. fixed="right"
  57. title="操作"
  58. align="center"
  59. width="120"
  60. >
  61. <template slot-scope="scope">
  62. <el-button
  63. :size="size"
  64. type="text"
  65. @click="handleCheck(scope.row.id)"
  66. >查看</el-button
  67. >
  68. <el-button
  69. :size="size"
  70. type="text"
  71. @click="handleUpdate(scope.row)"
  72. >修改</el-button
  73. >
  74. <el-button
  75. :size="size"
  76. type="text"
  77. @click="handleDelete(scope.row)"
  78. >删除</el-button
  79. >
  80. </template>
  81. </ux-table-column>
  82. </el-super-ux-table>
  83. </el-card>
  84. <!-- 添加或修改客户对话框 -->
  85. <div v-if="!isList" style="padding: 16px">
  86. <el-form
  87. ref="form"
  88. :model="form"
  89. :rules="rules"
  90. label-width="80px"
  91. :size="size"
  92. >
  93. <div style="text-align: right">
  94. <el-button
  95. type="primary"
  96. :size="size"
  97. @click="submitForm"
  98. :disabled="openState == 'check'"
  99. >确 定</el-button
  100. >
  101. <el-button :size="size" @click="cancel">取 消</el-button>
  102. </div>
  103. <el-tabs v-model="activeName" @tab-click="handleClick">
  104. <el-tab-pane label="基本信息" name="first">
  105. <el-divider content-position="left">基本信息</el-divider>
  106. <el-row :gutter="20">
  107. <el-col :span="6">
  108. <el-form-item label="销售组织" prop="orgName">
  109. <el-popover-select-v2
  110. v-model="form.orgName"
  111. title="销售组织"
  112. valueKey="name"
  113. referName="ORG_PARAM"
  114. :dataMapping="{ org: 'id', orgName: 'name' }"
  115. :source.sync="form"
  116. placeholder="请输入销售组织"
  117. :disabled="openState == 'check'"
  118. >
  119. </el-popover-select-v2>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="6">
  123. <el-form-item label="客户编码" prop="code">
  124. <el-input
  125. v-model="form.code"
  126. placeholder="编码系统自动生成"
  127. disabled
  128. />
  129. </el-form-item>
  130. </el-col>
  131. <el-col :span="6">
  132. <el-form-item label="客户名称" prop="name">
  133. <el-input
  134. v-model="form.name"
  135. placeholder="请输入客户名称"
  136. :disabled="openState == 'check'"
  137. />
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="6">
  141. <el-form-item label="客户简称" prop="abbreviation">
  142. <el-input
  143. v-model="form.abbreviation"
  144. placeholder="请输入客户简称"
  145. :disabled="openState == 'check'"
  146. />
  147. </el-form-item>
  148. </el-col>
  149. </el-row>
  150. <el-row :gutter="20">
  151. <el-col :span="6">
  152. <el-form-item label="客户分类" prop="classification">
  153. <el-select
  154. clearable
  155. v-model="form.classification"
  156. :disabled="openState == 'check'"
  157. >
  158. <el-option
  159. v-for="dict in dict.type.mk_cm_classification"
  160. :key="dict.value"
  161. :label="dict.label"
  162. :value="dict.value"
  163. />
  164. </el-select>
  165. </el-form-item>
  166. </el-col>
  167. <el-col :span="6">
  168. <el-form-item label="客户类型" prop="type">
  169. <el-select
  170. clearable
  171. v-model="form.type"
  172. :disabled="openState == 'check'"
  173. >
  174. <el-option
  175. v-for="dict in dict.type.mk_cm_type"
  176. :key="dict.value"
  177. :label="dict.label"
  178. :value="dict.value"
  179. />
  180. </el-select>
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="6">
  184. <el-form-item label="客户类别" prop="category">
  185. <el-select
  186. clearable
  187. v-model="form.category"
  188. :disabled="openState == 'check'"
  189. >
  190. <el-option
  191. v-for="dict in dict.type.mk_cm_category"
  192. :key="dict.value"
  193. :label="dict.label"
  194. :value="dict.value"
  195. />
  196. </el-select>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="6">
  200. <el-form-item label="客户首营" prop="firstBattalion">
  201. <el-select
  202. clearable
  203. v-model="form.firstBattalion"
  204. :disabled="openState == 'check'"
  205. >
  206. <el-option
  207. v-for="dict in dict.type.mk_cm_yes_no"
  208. :key="dict.value"
  209. :label="dict.label"
  210. :value="dict.value"
  211. />
  212. </el-select>
  213. </el-form-item>
  214. </el-col>
  215. </el-row>
  216. <el-row :gutter="20">
  217. <el-col :span="6">
  218. <el-form-item label="销售渠道" prop="channel">
  219. <el-select
  220. clearable
  221. v-model="form.channel"
  222. :disabled="openState == 'check'"
  223. >
  224. <el-option
  225. v-for="dict in dict.type.mk_cm_channel"
  226. :key="dict.value"
  227. :label="dict.label"
  228. :value="dict.value"
  229. />
  230. </el-select>
  231. </el-form-item>
  232. </el-col>
  233. <el-col :span="6">
  234. <el-form-item label="业务类型" prop="businessType">
  235. <el-select
  236. clearable
  237. v-model="form.businessType"
  238. :disabled="openState == 'check'"
  239. >
  240. <el-option
  241. v-for="dict in dict.type.mk_cm_business_type"
  242. :key="dict.value"
  243. :label="dict.label"
  244. :value="dict.value"
  245. />
  246. </el-select>
  247. </el-form-item>
  248. </el-col>
  249. <el-col :span="6">
  250. <el-form-item label="客户行业" prop="industry">
  251. <el-select
  252. clearable
  253. v-model="form.industry"
  254. :disabled="openState == 'check'"
  255. >
  256. <el-option
  257. v-for="dict in dict.type.mk_cm_industry"
  258. :key="dict.value"
  259. :label="dict.label"
  260. :value="dict.value"
  261. />
  262. </el-select>
  263. </el-form-item>
  264. </el-col>
  265. <el-col :span="6">
  266. <el-form-item label="纳税类别" prop="taxType">
  267. <el-select
  268. clearable
  269. v-model="form.taxType"
  270. :disabled="openState == 'check'"
  271. >
  272. <el-option
  273. v-for="dict in dict.type.mk_cm_tax_type"
  274. :key="dict.value"
  275. :label="dict.label"
  276. :value="dict.value"
  277. />
  278. </el-select>
  279. </el-form-item>
  280. </el-col>
  281. </el-row>
  282. <el-row :gutter="20">
  283. <el-col :span="6">
  284. <el-form-item label="是否潜客" prop="potential">
  285. <el-select
  286. clearable
  287. v-model="form.potential"
  288. :disabled="openState == 'check'"
  289. >
  290. <el-option
  291. v-for="dict in dict.type.mk_cm_yes_no"
  292. :key="dict.value"
  293. :label="dict.label"
  294. :value="dict.value"
  295. />
  296. </el-select>
  297. </el-form-item>
  298. </el-col>
  299. <el-col :span="6">
  300. <el-form-item label="地区分类" prop="areaClassification">
  301. <el-input
  302. v-model="form.areaClassification"
  303. placeholder="请输入地区分类"
  304. :disabled="openState == 'check'"
  305. />
  306. </el-form-item>
  307. </el-col>
  308. <el-col :span="6">
  309. <el-form-item label="证照号码" prop="licenseNumber">
  310. <el-input
  311. v-model="form.licenseNumber"
  312. placeholder="请输入证照号码"
  313. :disabled="openState == 'check'"
  314. />
  315. </el-form-item>
  316. </el-col>
  317. </el-row>
  318. <!-- <el-divider content-position="left">销售区域</el-divider>
  319. <el-row :gutter="20">
  320. <el-col :span="6">
  321. <el-form-item label="销售区域" prop="marketingAreaName">
  322. <el-popover-select-v2 v-model="form.marketingAreaName" title="销售区域" valueKey="name"
  323. referName="MK_SALESAREA_PARAM" :dataMapping="{ marketingArea: 'id', marketingAreaName: 'name'}"
  324. :source.sync="form" placeholder="请输入销售区域" :disabled="openState == 'check'">
  325. </el-popover-select-v2>
  326. </el-form-item>
  327. </el-col>
  328. </el-row> -->
  329. <el-divider content-position="left">负责人</el-divider>
  330. <el-row :gutter="20">
  331. <el-col :span="6">
  332. <el-form-item label="负责人" prop="responsiblePersonName">
  333. <el-popover-select-v2
  334. v-model="form.responsiblePersonName"
  335. title="负责人"
  336. valueKey="name"
  337. referName="CONTACTS_PARAM"
  338. :dataMapping="{
  339. responsiblePerson: 'id',
  340. responsiblePersonName: 'name',
  341. }"
  342. :source.sync="form"
  343. placeholder="请输入负责人"
  344. :disabled="openState == 'check'"
  345. />
  346. </el-form-item>
  347. </el-col>
  348. <!-- <el-col :span="6">
  349. <el-form-item label="负责部门" prop="responsibleDeptName">
  350. <el-popover-select-v2 v-model="form.responsibleDeptName" title="负责部门" valueKey="name"
  351. referName="DEPT_PARAM" :dataMapping="{ responsibleDept: 'id', responsibleDeptName: 'name'}"
  352. :source.sync="form" placeholder="请输入负责部门" :disabled="openState == 'check'" />
  353. </el-form-item>
  354. </el-col> -->
  355. </el-row>
  356. <!-- <el-divider content-position="left">开票客户</el-divider>
  357. <el-row :gutter="20">
  358. <el-col :span="6">
  359. <el-form-item label="开票客户" prop="billingCustomerName">
  360. <el-popover-select-v2 v-model="form.billingCustomerName" title="开票客户" valueKey="name"
  361. referName="CUSTOMER_PARAM_ZT" :dataMapping="{ billingCustomer: 'id', billingCustomerName: 'name'}"
  362. :source.sync="form" placeholder="请输入开票客户" :disabled="openState == 'check'" />
  363. </el-form-item>
  364. </el-col>
  365. </el-row> -->
  366. <el-divider content-position="left">其他信息</el-divider>
  367. <el-row :gutter="20">
  368. <el-col :span="6">
  369. <el-form-item label="创建人" prop="createBy">
  370. <el-input v-model="form.createByName" :disabled="true" />
  371. </el-form-item>
  372. </el-col>
  373. <el-col :span="6">
  374. <el-form-item label="创建时间" prop="createTime">
  375. <el-input v-model="form.createTime" :disabled="true" />
  376. </el-form-item>
  377. </el-col>
  378. <el-col :span="6">
  379. <el-form-item label="修改人" prop="updateBy">
  380. <el-input v-model="form.updateByName" :disabled="true" />
  381. </el-form-item>
  382. </el-col>
  383. <el-col :span="6">
  384. <el-form-item label="修改时间" prop="updateTime">
  385. <el-input v-model="form.updateTime" :disabled="true" />
  386. </el-form-item>
  387. </el-col>
  388. </el-row>
  389. </el-tab-pane>
  390. <el-tab-pane label="资质信息" name="second">
  391. <el-divider content-position="left">资质信息</el-divider>
  392. <el-row :gutter="20">
  393. <el-col :span="6">
  394. <el-form-item label="企业类型" prop="enterpriseType">
  395. <el-select
  396. clearable
  397. v-model="form.enterpriseType"
  398. :disabled="openState == 'check'"
  399. >
  400. <el-option
  401. v-for="dict in dict.type.mk_cm_enterprise_type"
  402. :key="dict.value"
  403. :label="dict.label"
  404. :value="dict.value"
  405. />
  406. </el-select>
  407. </el-form-item>
  408. </el-col>
  409. <el-col :span="6">
  410. <el-form-item label="企业名称" prop="enterpriseName">
  411. <el-input
  412. v-model="form.enterpriseName"
  413. placeholder="请输入企业名称"
  414. :disabled="openState == 'check'"
  415. />
  416. </el-form-item>
  417. </el-col>
  418. <!-- <el-col :span="6">
  419. <el-form-item label="注册地区" prop="registrationArea">
  420. <el-input v-model="form.registrationArea" placeholder="请输入注册地区" :disabled="openState == 'check'" />
  421. </el-form-item>
  422. </el-col> -->
  423. <el-col :span="6">
  424. <el-form-item label="经度" prop="longitude">
  425. <el-input
  426. v-model="form.longitude"
  427. placeholder="请输入经度"
  428. :disabled="openState == 'check'"
  429. />
  430. </el-form-item>
  431. </el-col>
  432. <el-col :span="6">
  433. <el-form-item label="纬度" prop="latitude">
  434. <el-input
  435. v-model="form.latitude"
  436. placeholder="请输入纬度"
  437. :disabled="openState == 'check'"
  438. />
  439. </el-form-item>
  440. </el-col>
  441. </el-row>
  442. <el-row :gutter="20">
  443. <el-col :span="6">
  444. <el-form-item label="详细地址" prop="detailedAddress">
  445. <el-input
  446. v-model="form.detailedAddress"
  447. placeholder="请输入详细地址"
  448. :disabled="openState == 'check'"
  449. />
  450. </el-form-item>
  451. </el-col>
  452. </el-row>
  453. </el-tab-pane>
  454. <el-tab-pane
  455. label="联系人信息"
  456. name="third"
  457. v-if="openState == 'check'"
  458. >
  459. <el-row :gutter="10" class="mb8">
  460. <el-col :span="6" :offset="21">
  461. <el-button
  462. type="primary"
  463. :size="size"
  464. @click="handleAddMkCmCustomersContact"
  465. >添加
  466. </el-button>
  467. <el-button
  468. type="danger"
  469. :size="size"
  470. @click="handleDeleteTab('0')"
  471. >
  472. 删除
  473. </el-button>
  474. </el-col>
  475. </el-row>
  476. <el-super-ux-table
  477. v-model="mkCmCustomersContactList"
  478. :size="size"
  479. :dict="dict"
  480. :columns="ContactColumns"
  481. :height="height"
  482. index
  483. checkbox
  484. highlight-current-row
  485. ref="mkCmCustomersContact"
  486. :row-class-name="rowMkCmCustomersContactIndex"
  487. @selection-change="handleMkCmCustomersContactSelectionChange"
  488. @pagination="getList({ ...page, ...params })"
  489. style="margin: 16px 0 0"
  490. >
  491. <ux-table-column
  492. fixed="right"
  493. title="操作"
  494. align="center"
  495. width="120"
  496. >
  497. <template slot-scope="scope">
  498. <el-button
  499. :size="size"
  500. type="text"
  501. icon="el-icon-search"
  502. @click="handleCheckAdd(scope.row, '0')"
  503. >
  504. 查看
  505. </el-button>
  506. <el-button
  507. :size="size"
  508. type="text"
  509. icon="el-icon-edit"
  510. @click="handleUpdateAdd(scope.row, '0')"
  511. >修改
  512. </el-button>
  513. <el-button
  514. :size="size"
  515. type="text"
  516. icon="el-icon-delete"
  517. @click="handleDeleteAdd(scope.row, '0')"
  518. >
  519. 删除
  520. </el-button>
  521. </template>
  522. </ux-table-column>
  523. </el-super-ux-table>
  524. </el-tab-pane>
  525. <el-tab-pane
  526. label="负责人信息"
  527. name="fourth"
  528. v-if="openState == 'check'"
  529. >
  530. <el-row :gutter="10" class="mb8">
  531. <el-col :span="6" :offset="21">
  532. <el-button
  533. type="primary"
  534. :size="size"
  535. @click="handleAddMkCmCustomersResponsiblePerson"
  536. >添加
  537. </el-button>
  538. <el-button
  539. type="danger"
  540. :size="size"
  541. @click="handleDeleteTab('1')"
  542. >
  543. 删除
  544. </el-button>
  545. </el-col>
  546. </el-row>
  547. <el-super-ux-table
  548. v-model="mkCmCustomersResponsiblePersonList"
  549. :size="size"
  550. :dict="dict"
  551. :columns="PrincipalColumns"
  552. :height="height"
  553. index
  554. checkbox
  555. highlight-current-row
  556. ref="mkCmCustomersResponsiblePerson"
  557. :row-class-name="rowMkCmCustomersResponsiblePersonIndex"
  558. @selection-change="
  559. handleMkCmCustomersResponsiblePersonSelectionChange
  560. "
  561. @pagination="getList({ ...page, ...params })"
  562. style="margin: 16px 0 0"
  563. >
  564. <ux-table-column
  565. fixed="right"
  566. title="操作"
  567. align="center"
  568. width="120"
  569. >
  570. <template slot-scope="scope">
  571. <el-button
  572. :size="size"
  573. type="text"
  574. @click="handleCheckAdd(scope.row, '1')"
  575. >
  576. 查看
  577. </el-button>
  578. <el-button
  579. :size="size"
  580. type="text"
  581. @click="handleUpdateAdd(scope.row, '1')"
  582. >修改
  583. </el-button>
  584. <el-button
  585. :size="size"
  586. type="text"
  587. @click="handleDeleteAdd(scope.row, '1')"
  588. >
  589. 删除
  590. </el-button>
  591. </template>
  592. </ux-table-column>
  593. </el-super-ux-table>
  594. </el-tab-pane>
  595. <el-tab-pane
  596. label="科室信息"
  597. name="fifth"
  598. v-if="openState == 'check'"
  599. >
  600. <el-row :gutter="10" class="mb8">
  601. <el-col :span="6" :offset="21">
  602. <el-button
  603. type="primary"
  604. :size="size"
  605. @click="handleAddMkCmCustomersDepartment"
  606. >
  607. 添加
  608. </el-button>
  609. <el-button
  610. :size="size"
  611. type="danger"
  612. @click="handleDeleteTab('2')"
  613. >
  614. 删除
  615. </el-button>
  616. </el-col>
  617. </el-row>
  618. <el-super-ux-table
  619. v-model="mkCmCustomersDepartmentList"
  620. :size="size"
  621. :dict="dict"
  622. :height="height"
  623. :columns="DepartmentInfoColumns"
  624. index
  625. checkbox
  626. highlight-current-row
  627. ref="mkCmCustomersDepartment"
  628. :row-class-name="rowMkCmCustomersDepartmentIndex"
  629. @selection-change="handleMkCmCustomersDepartmentSelectionChange"
  630. @pagination="getList({ ...page, ...params })"
  631. style="margin: 16px 0 0"
  632. >
  633. <ux-table-column
  634. fixed="right"
  635. title="操作"
  636. align="center"
  637. width="120"
  638. >
  639. <template slot-scope="scope">
  640. <el-button
  641. :size="size"
  642. type="text"
  643. @click="handleCheckAdd(scope.row, '1')"
  644. >
  645. 查看
  646. </el-button>
  647. <el-button
  648. :size="size"
  649. type="text"
  650. @click="handleUpdateAdd(scope.row, '1')"
  651. >修改
  652. </el-button>
  653. <el-button
  654. :size="size"
  655. type="text"
  656. @click="handleDeleteAdd(scope.row, '1')"
  657. >
  658. 删除
  659. </el-button>
  660. </template>
  661. </ux-table-column>
  662. </el-super-ux-table>
  663. </el-tab-pane>
  664. </el-tabs>
  665. </el-form>
  666. </div>
  667. </div>
  668. <AddContact
  669. v-model="isAdd0"
  670. v-if="isAdd0"
  671. :operatingState="operatingSta"
  672. :state="state"
  673. :row="rowDetail"
  674. :customersId="form.id"
  675. :customersName="form.name"
  676. :customersCode="form.code"
  677. />
  678. <AddPerson
  679. v-model="isAdd1"
  680. v-if="isAdd1"
  681. :pageStu="pageStu"
  682. :disable="disable"
  683. :row="rowDetail"
  684. :customersId="form.id"
  685. :customersName="form.name"
  686. />
  687. <AddDepartment
  688. v-model="isAdd2"
  689. v-if="isAdd2"
  690. :pageStu="pageStu"
  691. :disable="disable"
  692. :row="rowDetail"
  693. :customersId="form.id"
  694. :customersName="form.name"
  695. />
  696. </div>
  697. </template>
  698. <script>
  699. // 客户接口
  700. import {
  701. listCustomers,
  702. getCustomers,
  703. delCustomers,
  704. addCustomers,
  705. updateCustomers,
  706. getContactInfo,
  707. delContact,
  708. } from "@/api/business/spd/cm/customers";
  709. // 客户负责人接口
  710. import { delCustomersResponsiblePerson } from "@/api/business/spd/cm/customersResponsiblePerson";
  711. // 客户科室接口
  712. import { delCustomersDepartment } from "@/api/business/spd/cm/customersDepartment";
  713. import useColumns from "./columns";
  714. import { dicts } from "../dicts";
  715. export default {
  716. name: "Customers",
  717. components: {
  718. CollapseTransition: () => import("@/components/MyCollapse/collapse.vue"),
  719. ElPopoverSelectV2: () => import("@/components/popover-select-v2"),
  720. // 新建客户联系人信息页面
  721. AddContact: () =>
  722. import("@/views/business/spd/cm/customersContact/index.vue"),
  723. // 新建客户负责人信息页面
  724. AddPerson: () =>
  725. import("@/views/business/spd/cm/customersResponsiblePerson/index.vue"),
  726. // 新建客户科室信息页面
  727. AddDepartment: () =>
  728. import("@/views/business/spd/cm/customersDepartment/index.vue"),
  729. ElSuperSearch: () => import("@/components/super-search/index.vue"),
  730. ElSuperUxTable: () => import("@/components/super-ux-table/index.vue"),
  731. },
  732. dicts: [...dicts],
  733. data() {
  734. const {
  735. SearchColumns,
  736. TableColumns,
  737. ContactColumns,
  738. PrincipalColumns,
  739. DepartmentInfoColumns,
  740. } = useColumns();
  741. const params = this.$init.params(SearchColumns);
  742. const page = this.$init.page();
  743. return {
  744. page,
  745. params,
  746. size: "mini",
  747. SearchColumns,
  748. TableColumns,
  749. ContactColumns,
  750. PrincipalColumns,
  751. DepartmentInfoColumns,
  752. // 遮罩层
  753. loading: true,
  754. // 选中数组
  755. ids: [],
  756. // 选中数组中的客户编码
  757. codes: [],
  758. // 子表选中数据
  759. checkedMkCmCustomersContact: [],
  760. checkedMkCmCustomersResponsiblePerson: [],
  761. checkedMkCmCustomersDepartment: [],
  762. // 子表选中主键
  763. checkedMkCmCustomersContactIds: [],
  764. checkedMkCmCustomersResponsiblePersonIds: [],
  765. checkedMkCmCustomersDepartmentIds: [],
  766. // 非单个禁用
  767. single: true,
  768. // 非多个禁用
  769. multiple: true,
  770. // 显示搜索条件
  771. showSearch: true,
  772. // 总条数
  773. total: 0,
  774. // 客户表格数据
  775. customersList: [],
  776. // 客户联系人表格数据
  777. mkCmCustomersContactList: [],
  778. // 客户负责人表格数据
  779. mkCmCustomersResponsiblePersonList: [],
  780. // 客户科室表格数据
  781. mkCmCustomersDepartmentList: [],
  782. // 首次进入标签页的显示
  783. activeName: "first",
  784. // 下拉收起配置
  785. expanded: false,
  786. // 页面打开状态
  787. openState: null,
  788. // 列表页面
  789. isList: true,
  790. // 添加页面
  791. isAdd0: false,
  792. operatingSta: null,
  793. state: null,
  794. isAdd1: false,
  795. isAdd2: false,
  796. rowDetail: {},
  797. disable: false,
  798. // 页面状态
  799. pageStu: null,
  800. // 表单参数
  801. form: {},
  802. // 表单校验
  803. rules: {
  804. orgName: [
  805. {
  806. required: true,
  807. message: "销售组织不能为空",
  808. trigger: "blur",
  809. },
  810. ],
  811. name: [
  812. {
  813. required: true,
  814. message: "客户名称不能为空",
  815. trigger: "blur",
  816. },
  817. ],
  818. classification: [
  819. {
  820. required: true,
  821. message: "客户分类不能为空",
  822. trigger: "blur",
  823. },
  824. ],
  825. taxType: [
  826. {
  827. required: true,
  828. message: "纳税类别不能为空",
  829. trigger: "blur",
  830. },
  831. ],
  832. licenseNumber: [
  833. {
  834. required: true,
  835. message: "证照号码不能为空",
  836. trigger: "blur",
  837. },
  838. ],
  839. enterpriseType: [
  840. {
  841. required: true,
  842. message: "企业类型不能为空",
  843. trigger: "blur",
  844. },
  845. ],
  846. enterpriseName: [
  847. {
  848. required: true,
  849. message: "企业名称不能为空",
  850. trigger: "blur",
  851. },
  852. ],
  853. },
  854. };
  855. },
  856. computed: {
  857. height: {
  858. get() {
  859. return window.innerHeight - 220;
  860. },
  861. set() {},
  862. },
  863. },
  864. created() {
  865. this.reset();
  866. this.getList(this.params, this.page);
  867. },
  868. methods: {
  869. /** 查询客户列表 */
  870. getList(params, page) {
  871. this.loading = true;
  872. listCustomers({ ...params, ...page }).then((response) => {
  873. this.customersList = response.rows;
  874. this.page.total = response.total;
  875. this.loading = false;
  876. });
  877. },
  878. // 取消按钮
  879. cancel() {
  880. this.isList = true;
  881. this.reset();
  882. },
  883. // 表单重置
  884. reset() {
  885. this.form = {
  886. id: null,
  887. org: null,
  888. orgName: null,
  889. code: null,
  890. name: null,
  891. abbreviation: null,
  892. classification: null,
  893. type: null,
  894. category: null,
  895. firstBattalion: null,
  896. channel: null,
  897. businessType: null,
  898. industry: null,
  899. taxType: null,
  900. potential: null,
  901. areaClassification: null,
  902. licenseNumber: null,
  903. marketingArea: null,
  904. marketingAreaName: null,
  905. responsiblePerson: null,
  906. responsiblePersonName: null,
  907. responsibleDept: null,
  908. responsibleDeptName: null,
  909. billingCustomer: null,
  910. billingCustomerName: null,
  911. enterpriseType: null,
  912. enterpriseName: null,
  913. registrationArea: null,
  914. longitude: null,
  915. latitude: null,
  916. detailedAddress: null,
  917. createBy: null,
  918. createTime: null,
  919. createByName: null,
  920. updateBy: null,
  921. updateTime: null,
  922. updateByName: null,
  923. delFlag: null,
  924. };
  925. this.activeName = "first";
  926. this.mkCmCustomersContactList = [];
  927. this.mkCmCustomersResponsiblePersonList = [];
  928. this.mkCmCustomersDepartmentList = [];
  929. this.resetForm("form");
  930. },
  931. /** 重置按钮操作 */
  932. resetQuery() {
  933. this.params = this.$init.params(this.SearchColumns);
  934. this.page = this.$init.page();
  935. this.getList(this.params, this.page);
  936. this.resetForm("queryForm");
  937. },
  938. // 多选框选中数据
  939. handleSelectionChange(selection) {
  940. this.ids = selection.map((item) => item.id);
  941. this.codes = selection.map((item) => item.code);
  942. this.single = selection.length !== 1;
  943. this.multiple = !selection.length;
  944. },
  945. /** 新增按钮操作 */
  946. handleAdd() {
  947. this.isList = false;
  948. this.openState = "add";
  949. },
  950. /** 查看按钮操作 */
  951. handleCheck(id) {
  952. this.isList = false;
  953. const id1 = id || this.ids;
  954. getCustomers(id1).then((response) => {
  955. this.form = response.data;
  956. this.mkCmCustomersResponsiblePersonList =
  957. response.data.mkCmCustomersResponsiblePersonList;
  958. this.mkCmCustomersDepartmentList =
  959. response.data.mkCmCustomersDepartmentList;
  960. this.openState = "check";
  961. });
  962. getContactInfo(id1).then((response) => {
  963. this.mkCmCustomersContactList = response.data;
  964. });
  965. },
  966. /** Add查看按钮操作 */
  967. handleCheckAdd(row, type) {
  968. if (type == "0") {
  969. this.isAdd0 = true;
  970. this.operatingSta = "Browse";
  971. this.rowDetail = row;
  972. this.disable = true;
  973. } else if (type == "1") {
  974. this.isAdd1 = true;
  975. this.pageStu = "check";
  976. this.rowDetail = row;
  977. this.disable = true;
  978. } else if (type == "2") {
  979. this.isAdd2 = true;
  980. this.pageStu = "check";
  981. this.rowDetail = row;
  982. this.disable = true;
  983. }
  984. },
  985. /** 修改按钮操作 */
  986. handleUpdate(row) {
  987. this.isList = false;
  988. this.reset();
  989. const id = row.id || this.ids;
  990. getCustomers(id).then((response) => {
  991. this.form = response.data;
  992. this.form.oldName = response.data.name;
  993. this.mkCmCustomersResponsiblePersonList =
  994. response.data.mkCmCustomersResponsiblePersonList;
  995. this.mkCmCustomersDepartmentList =
  996. response.data.mkCmCustomersDepartmentList;
  997. this.openState = "update";
  998. });
  999. },
  1000. /** Add修改按钮操作 */
  1001. handleUpdateAdd(row, type) {
  1002. if (type == "0") {
  1003. this.isAdd0 = true;
  1004. this.operatingSta = "Update";
  1005. this.rowDetail = row;
  1006. this.disable = false;
  1007. } else if (type == "1") {
  1008. this.isAdd1 = true;
  1009. this.pageStu = "update";
  1010. this.rowDetail = row;
  1011. this.disable = false;
  1012. } else if (type == "2") {
  1013. this.isAdd2 = true;
  1014. this.pageStu = "update";
  1015. this.rowDetail = row;
  1016. this.disable = false;
  1017. }
  1018. },
  1019. /** 提交按钮 */
  1020. submitForm() {
  1021. this.$refs["form"].validate(async (valid, obj) => {
  1022. if (valid) {
  1023. try {
  1024. let { code, msg } =
  1025. this.form.id != null
  1026. ? await updateCustomers(this.form)
  1027. : await addCustomers(this.form);
  1028. if (code == 200) {
  1029. this.$notify.success(msg);
  1030. this.reset();
  1031. this.getList(this.params, this.page);
  1032. this.isList = true;
  1033. }
  1034. } catch (error) {}
  1035. } else {
  1036. this.checkout();
  1037. }
  1038. });
  1039. },
  1040. /** 删除按钮操作 */
  1041. handleDelete(row) {
  1042. const codes = row.code || this.codes;
  1043. let ids = [];
  1044. if (
  1045. row.isTrusted != null &&
  1046. row.isTrusted != "" &&
  1047. row.isTrusted != undefined
  1048. ) {
  1049. ids = this.ids;
  1050. } else {
  1051. ids[0] = row.id;
  1052. }
  1053. this.$modal
  1054. .confirm('是否确认删除客户编码为"' + codes + '"的数据项?')
  1055. .then(function () {
  1056. return delCustomers(ids);
  1057. })
  1058. .then(() => {
  1059. this.getList(this.params, this.page);
  1060. this.$modal.msgSuccess("删除成功");
  1061. })
  1062. .catch(() => {});
  1063. },
  1064. /** Add删除按钮操作 */
  1065. handleDeleteAdd(row, type) {
  1066. let ids = [];
  1067. ids[0] = row.id;
  1068. if (type == "0") {
  1069. console.log(row, "row");
  1070. this.$modal
  1071. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1072. .then(function () {
  1073. return delContact(ids);
  1074. })
  1075. .then(() => {
  1076. getContactInfo(this.form.id).then((res) => {
  1077. this.mkCmCustomersContactList = res.data;
  1078. });
  1079. this.$modal.msgSuccess("删除成功");
  1080. })
  1081. .catch(() => {});
  1082. } else if (type == "1") {
  1083. this.$modal
  1084. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1085. .then(function () {
  1086. return delCustomersResponsiblePerson(ids);
  1087. })
  1088. .then(() => {
  1089. getCustomers(row.customersId).then((res) => {
  1090. this.mkCmCustomersResponsiblePersonList =
  1091. res.data.mkCmCustomersResponsiblePersonList;
  1092. });
  1093. this.$modal.msgSuccess("删除成功");
  1094. })
  1095. .catch(() => {});
  1096. } else if (type == "2") {
  1097. this.$modal
  1098. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1099. .then(function () {
  1100. return delCustomersDepartment(ids);
  1101. })
  1102. .then(() => {
  1103. getCustomers(row.customersId).then((res) => {
  1104. this.mkCmCustomersDepartmentList =
  1105. res.data.mkCmCustomersDepartmentList;
  1106. });
  1107. this.$modal.msgSuccess("删除成功");
  1108. })
  1109. .catch(() => {});
  1110. }
  1111. },
  1112. /** 客户联系人序号 */
  1113. rowMkCmCustomersContactIndex({ row, rowIndex }) {
  1114. row.index = rowIndex + 1;
  1115. },
  1116. /** 客户负责人序号 */
  1117. rowMkCmCustomersResponsiblePersonIndex({ row, rowIndex }) {
  1118. row.index = rowIndex + 1;
  1119. },
  1120. /** 客户科室序号 */
  1121. rowMkCmCustomersDepartmentIndex({ row, rowIndex }) {
  1122. row.index = rowIndex + 1;
  1123. },
  1124. /** 客户联系人添加按钮操作 */
  1125. handleAddMkCmCustomersContact() {
  1126. this.isList = false;
  1127. this.isAdd0 = true;
  1128. this.operatingSta = "Insert";
  1129. this.disable = false;
  1130. this.state = "1";
  1131. },
  1132. /** 客户负责人添加按钮操作 */
  1133. handleAddMkCmCustomersResponsiblePerson() {
  1134. this.isList = false;
  1135. this.isAdd1 = true;
  1136. this.pageStu = "add";
  1137. this.disable = false;
  1138. },
  1139. /** 客户科室添加按钮操作 */
  1140. handleAddMkCmCustomersDepartment() {
  1141. this.isList = false;
  1142. this.isAdd2 = true;
  1143. this.pageStu = "add";
  1144. this.disable = false;
  1145. },
  1146. /** 客户页签删除按钮操作 */
  1147. handleDeleteTab(type) {
  1148. let that = this;
  1149. if (type == "0") {
  1150. if (that.checkedMkCmCustomersContact.length == 0) {
  1151. that.$modal.msgError("请先选择要删除的客户联系人数据");
  1152. } else {
  1153. that.$modal
  1154. .confirm(
  1155. '是否确认删除序号为"' +
  1156. that.checkedMkCmCustomersContact +
  1157. '"的数据项?'
  1158. )
  1159. .then(function () {
  1160. return delContact(that.checkedMkCmCustomersContactIds);
  1161. })
  1162. .then(() => {
  1163. getContactInfo(that.form.id).then((res) => {
  1164. that.mkCmCustomersContactList = res.data;
  1165. });
  1166. that.$modal.msgSuccess("删除成功");
  1167. })
  1168. .catch((e) => {
  1169. console.log(e, "e");
  1170. });
  1171. }
  1172. } else if (type == "1") {
  1173. if (that.checkedMkCmCustomersResponsiblePerson.length == 0) {
  1174. that.$modal.msgError("请先选择要删除的客户负责人数据");
  1175. } else {
  1176. that.$modal
  1177. .confirm(
  1178. '是否确认删除序号为"' +
  1179. that.checkedMkCmCustomersResponsiblePerson +
  1180. '"的数据项?'
  1181. )
  1182. .then(function () {
  1183. return delCustomersResponsiblePerson(
  1184. that.checkedMkCmCustomersResponsiblePersonIds
  1185. );
  1186. })
  1187. .then(() => {
  1188. getCustomers(that.form.id).then((res) => {
  1189. that.mkCmCustomersResponsiblePersonList =
  1190. res.data.mkCmCustomersResponsiblePersonList;
  1191. });
  1192. that.$modal.msgSuccess("删除成功");
  1193. })
  1194. .catch(() => {});
  1195. }
  1196. } else if (type == "2") {
  1197. if (that.checkedMkCmCustomersDepartment.length == 0) {
  1198. that.$modal.msgError("请先选择要删除的客户科室数据");
  1199. } else {
  1200. that.$modal
  1201. .confirm(
  1202. '是否确认删除序号为"' +
  1203. that.checkedMkCmCustomersDepartment +
  1204. '"的数据项?'
  1205. )
  1206. .then(function () {
  1207. return delCustomersDepartment(
  1208. that.checkedMkCmCustomersDepartmentIds
  1209. );
  1210. })
  1211. .then(() => {
  1212. getCustomers(that.form.id).then((res) => {
  1213. that.mkCmCustomersDepartmentList =
  1214. res.data.mkCmCustomersDepartmentList;
  1215. });
  1216. that.$modal.msgSuccess("删除成功");
  1217. })
  1218. .catch(() => {});
  1219. }
  1220. }
  1221. },
  1222. /** 复选框选中数据 */
  1223. handleMkCmCustomersContactSelectionChange(selection) {
  1224. this.checkedMkCmCustomersContact = selection.map((item) => item.index);
  1225. this.checkedMkCmCustomersContactIds = selection.map((item) => item.id);
  1226. },
  1227. /** 复选框选中数据 */
  1228. handleMkCmCustomersResponsiblePersonSelectionChange(selection) {
  1229. this.checkedMkCmCustomersResponsiblePerson = selection.map(
  1230. (item) => item.index
  1231. );
  1232. this.checkedMkCmCustomersResponsiblePersonIds = selection.map(
  1233. (item) => item.id
  1234. );
  1235. },
  1236. /** 复选框选中数据 */
  1237. handleMkCmCustomersDepartmentSelectionChange(selection) {
  1238. this.checkedMkCmCustomersDepartment = selection.map((item) => item.index);
  1239. this.checkedMkCmCustomersDepartmentIds = selection.map((item) => item.id);
  1240. },
  1241. /** 导出按钮操作 */
  1242. handleExport() {
  1243. this.download(
  1244. "cm/customers/export",
  1245. {
  1246. ...this.params,
  1247. ...this.page,
  1248. },
  1249. `customers_${new Date().getTime()}.xlsx`
  1250. );
  1251. },
  1252. /** 标签页切换 */
  1253. handleClick(tab, event) {
  1254. console.log(tab, event);
  1255. },
  1256. /** 必填项校验 */
  1257. checkout() {
  1258. if (
  1259. !(
  1260. this.form.orgName != null &&
  1261. this.form.orgName != "" &&
  1262. this.form.orgName != undefined &&
  1263. this.form.name != null &&
  1264. this.form.name != "" &&
  1265. this.form.name != undefined &&
  1266. this.form.classification != null &&
  1267. this.form.classification != "" &&
  1268. this.form.classification != undefined &&
  1269. this.form.taxType != null &&
  1270. this.form.taxType != "" &&
  1271. this.form.taxType != undefined &&
  1272. this.form.licenseNumber != null &&
  1273. this.form.licenseNumber != "" &&
  1274. this.form.licenseNumber != undefined
  1275. )
  1276. ) {
  1277. return this.$modal.msgError("基本信息中存在必填项未填!");
  1278. }
  1279. if (
  1280. !(
  1281. this.form.enterpriseType != null &&
  1282. this.form.enterpriseType != "" &&
  1283. this.form.enterpriseType != undefined &&
  1284. this.form.enterpriseName != null &&
  1285. this.form.enterpriseName != "" &&
  1286. this.form.enterpriseName != undefined
  1287. )
  1288. ) {
  1289. return this.$modal.msgError("资质信息中存在必填项未填!");
  1290. }
  1291. },
  1292. },
  1293. };
  1294. </script>
  1295. <style scoped lang="scss">
  1296. .el-card {
  1297. width: calc(100% - 32px);
  1298. height: calc(100vh - 32px);
  1299. margin: 16px;
  1300. padding: 16px;
  1301. border-radius: 8px;
  1302. overflow-y: auto;
  1303. overflow-x: hidden;
  1304. }
  1305. </style>