index.vue 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <div id="Customers" class="app-container">
  3. <div v-if="!isAdd1 && !isAdd2">
  4. <div v-if="isList">
  5. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
  6. label-width="68px">
  7. <el-row :gutter="10" justify="space-between">
  8. <el-col :span="5">
  9. <el-form-item label="销售组织" prop="orgName">
  10. <el-popover-select-v2 v-model="queryParams.orgName" title="销售组织" valueKey="name" referName="ORG_PARAM"
  11. :dataMapping="{ org: 'id', orgName: 'name'}" :source.sync="queryParams" placeholder="请输入销售组织" />
  12. </el-form-item>
  13. </el-col>
  14. <el-col :span="5">
  15. <el-form-item label="客户编码" prop="code">
  16. <el-input v-model="queryParams.code" placeholder="请输入客户编码" clearable
  17. @keyup.enter.native="handleQuery" />
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="5">
  21. <el-form-item label="客户名称" prop="name">
  22. <el-input v-model="queryParams.name" placeholder="请输入客户名称" clearable
  23. @keyup.enter.native="handleQuery" />
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="5">
  27. <el-form-item label="客户分类" prop="classification">
  28. <el-select clearable v-model="queryParams.classification">
  29. <el-option v-for="dict in dict.type.mk_cm_classification" :key="dict.value" :label="dict.label"
  30. :value="dict.value" />
  31. </el-select>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="4">
  35. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  36. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  37. </el-col>
  38. </el-row>
  39. <!-- 下拉盒子 -->
  40. <CollapseTransition>
  41. <div v-show="expanded">
  42. <el-row :gutter="20" justify="space-between">
  43. <el-col :span="5">
  44. <el-form-item label="企业类型" prop="enterpriseType">
  45. <el-select clearable v-model="queryParams.enterpriseType">
  46. <el-option v-for="dict in dict.type.mk_cm_enterprise_type" :key="dict.value" :label="dict.label"
  47. :value="dict.value" />
  48. </el-select>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="5">
  52. <el-form-item label="负责人" prop="responsiblePersonName">
  53. <el-popover-select-v2 v-model="queryParams.responsiblePersonName" title="负责人" valueKey="name"
  54. referName="CONTACTS_PARAM"
  55. :dataMapping="{ responsiblePerson: 'id', responsiblePersonName: 'name'}"
  56. :source.sync="queryParams" placeholder="请输入负责人" />
  57. </el-form-item>
  58. </el-col>
  59. </el-row>
  60. </div>
  61. </CollapseTransition>
  62. </el-form>
  63. <el-divider class="lines"><i style="cursor: pointer;" :class="expanded?'el-icon-arrow-up':'el-icon-arrow-down'"
  64. @click="drop"></i></el-divider>
  65. <el-row :gutter="10" class="mb8">
  66. <el-col :span="6" :offset="20">
  67. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
  68. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">
  69. 删除
  70. </el-button>
  71. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
  72. </el-col>
  73. </el-row>
  74. <el-table v-loading="loading" :data="customersList" @selection-change="handleSelectionChange">
  75. <el-table-column type="selection" width="55" align="center" />
  76. <!-- <el-table-column label="销售组织" align="center" prop="orgName" min-width="300" /> -->
  77. <el-table-column label="客户编码" align="center" prop="code" min-width="100" />
  78. <el-table-column label="客户名称" align="center" prop="name" min-width="200" />
  79. <el-table-column label="客户分类" align="center" prop="classification" min-width="80" show-overflow-tooltip>
  80. <template slot-scope="scope">
  81. <dict-tag :options="dict.type.mk_cm_classification" :value="scope.row.classification" />
  82. </template>
  83. </el-table-column>
  84. <el-table-column label="客户行业" align="center" prop="industry" min-width="80" show-overflow-tooltip>
  85. <template slot-scope="scope">
  86. <dict-tag :options="dict.type.mk_cm_industry" :value="scope.row.industry" />
  87. </template>
  88. </el-table-column>
  89. <el-table-column label="客户类型" align="center" prop="type" min-width="80" show-overflow-tooltip>
  90. <template slot-scope="scope">
  91. <dict-tag :options="dict.type.mk_cm_type" :value="scope.row.type" />
  92. </template>
  93. </el-table-column>
  94. <el-table-column label="客户类别" align="center" prop="category" min-width="80" show-overflow-tooltip>
  95. <template slot-scope="scope">
  96. <dict-tag :options="dict.type.mk_cm_category" :value="scope.row.category" />
  97. </template>
  98. </el-table-column>
  99. <el-table-column label="客户首营" align="center" prop="firstBattalion" min-width="80" show-overflow-tooltip>
  100. <template slot-scope="scope">
  101. <dict-tag :options="dict.type.mk_cm_yes_no" :value="scope.row.firstBattalion" />
  102. </template>
  103. </el-table-column>
  104. <el-table-column label="销售渠道" align="center" prop="channel" min-width="80" show-overflow-tooltip>
  105. <template slot-scope="scope">
  106. <dict-tag :options="dict.type.mk_cm_channel" :value="scope.row.channel" />
  107. </template>
  108. </el-table-column>
  109. <el-table-column label="业务类型" align="center" prop="businessType" min-width="100" show-overflow-tooltip>
  110. <template slot-scope="scope">
  111. <dict-tag :options="dict.type.mk_cm_business_type" :value="scope.row.businessType" />
  112. </template>
  113. </el-table-column>
  114. <el-table-column label="纳税类别" align="center" prop="taxType" min-width="100" show-overflow-tooltip>
  115. <template slot-scope="scope">
  116. <dict-tag :options="dict.type.mk_cm_tax_type" :value="scope.row.taxType" />
  117. </template>
  118. </el-table-column>
  119. <el-table-column label="是否潜客" align="center" prop="potential" min-width="80" show-overflow-tooltip>
  120. <template slot-scope="scope">
  121. <dict-tag :options="dict.type.mk_cm_yes_no" :value="scope.row.potential" />
  122. </template>
  123. </el-table-column>
  124. <!-- <el-table-column label="销售区域" align="center" prop="marketingAreaName" min-width="80" /> -->
  125. <el-table-column label="负责人" align="center" prop="responsiblePersonName" min-width="80" />
  126. <!-- <el-table-column label="负责部门" align="center" prop="responsibleDeptName" min-width="80" /> -->
  127. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px" fixed="right">
  128. <template slot-scope="scope">
  129. <el-button size="mini" type="text" icon="el-icon-search" @click="handleCheck(scope.row)">查看</el-button>
  130. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
  131. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
  132. </template>
  133. </el-table-column>
  134. </el-table>
  135. <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
  136. @pagination="getList" />
  137. </div>
  138. <!-- 添加或修改客户对话框 -->
  139. <div v-if="!isList">
  140. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  141. <div>
  142. <el-tabs v-model="activeName" @tab-click="handleClick">
  143. <el-tab-pane label="基本信息" name="first">
  144. <el-divider content-position="left">基本信息</el-divider>
  145. <el-row :gutter="20">
  146. <!-- <el-col :span="6">
  147. <el-form-item label="销售组织" prop="orgName">
  148. <el-popover-select-v2 v-model="form.orgName" title="销售组织" valueKey="name" referName="ORG_PARAM"
  149. :dataMapping="{ org: 'id', orgName: 'name'}" :source.sync="form" placeholder="请输入销售组织" :disabled="openState == 'check'">
  150. </el-popover-select-v2>
  151. </el-form-item>
  152. </el-col> -->
  153. <el-col :span="6">
  154. <el-form-item label="客户编码" prop="code">
  155. <el-input v-model="form.code" placeholder="编码系统自动生成" disabled />
  156. </el-form-item>
  157. </el-col>
  158. <el-col :span="6">
  159. <el-form-item label="客户名称" prop="name">
  160. <el-input v-model="form.name" placeholder="请输入客户名称" :disabled="openState == 'check'" />
  161. </el-form-item>
  162. </el-col>
  163. <el-col :span="6">
  164. <el-form-item label="客户简称" prop="abbreviation">
  165. <el-input v-model="form.abbreviation" placeholder="请输入客户简称" :disabled="openState == 'check'" />
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="6">
  169. <el-form-item label="客户分类" prop="classification">
  170. <el-select clearable v-model="form.classification" :disabled="openState == 'check'">
  171. <el-option v-for="dict in dict.type.mk_cm_classification" :key="dict.value" :label="dict.label"
  172. :value="dict.value" />
  173. </el-select>
  174. </el-form-item>
  175. </el-col>
  176. </el-row>
  177. <el-row :gutter="20">
  178. <el-col :span="6">
  179. <el-form-item label="客户类型" prop="type">
  180. <el-select clearable v-model="form.type" :disabled="openState == 'check'">
  181. <el-option v-for="dict in dict.type.mk_cm_type" :key="dict.value" :label="dict.label"
  182. :value="dict.value" />
  183. </el-select>
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="6">
  187. <el-form-item label="客户类别" prop="category">
  188. <el-select clearable v-model="form.category" :disabled="openState == 'check'">
  189. <el-option v-for="dict in dict.type.mk_cm_category" :key="dict.value" :label="dict.label"
  190. :value="dict.value" />
  191. </el-select>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="6">
  195. <el-form-item label="客户首营" prop="firstBattalion">
  196. <el-select clearable v-model="form.firstBattalion" :disabled="openState == 'check'">
  197. <el-option v-for="dict in dict.type.mk_cm_yes_no" :key="dict.value" :label="dict.label"
  198. :value="dict.value" />
  199. </el-select>
  200. </el-form-item>
  201. </el-col>
  202. <el-col :span="6">
  203. <el-form-item label="销售渠道" prop="channel">
  204. <el-select clearable v-model="form.channel" :disabled="openState == 'check'">
  205. <el-option v-for="dict in dict.type.mk_cm_channel" :key="dict.value" :label="dict.label"
  206. :value="dict.value" />
  207. </el-select>
  208. </el-form-item>
  209. </el-col>
  210. </el-row>
  211. <el-row :gutter="20">
  212. <el-col :span="6">
  213. <el-form-item label="业务类型" prop="businessType">
  214. <el-select clearable v-model="form.businessType" :disabled="openState == 'check'">
  215. <el-option v-for="dict in dict.type.mk_cm_business_type" :key="dict.value" :label="dict.label"
  216. :value="dict.value" />
  217. </el-select>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="6">
  221. <el-form-item label="客户行业" prop="industry">
  222. <el-select clearable v-model="form.industry" :disabled="openState == 'check'">
  223. <el-option v-for="dict in dict.type.mk_cm_industry" :key="dict.value" :label="dict.label"
  224. :value="dict.value" />
  225. </el-select>
  226. </el-form-item>
  227. </el-col>
  228. <el-col :span="6">
  229. <el-form-item label="纳税类别" prop="taxType">
  230. <el-select clearable v-model="form.taxType" :disabled="openState == 'check'">
  231. <el-option v-for="dict in dict.type.mk_cm_tax_type" :key="dict.value" :label="dict.label"
  232. :value="dict.value" />
  233. </el-select>
  234. </el-form-item>
  235. </el-col>
  236. </el-row>
  237. <el-row :gutter="20">
  238. <el-col :span="6">
  239. <el-form-item label="是否潜客" prop="potential">
  240. <el-select clearable v-model="form.potential" :disabled="openState == 'check'">
  241. <el-option v-for="dict in dict.type.mk_cm_yes_no" :key="dict.value" :label="dict.label"
  242. :value="dict.value" />
  243. </el-select>
  244. </el-form-item>
  245. </el-col>
  246. <!-- <el-col :span="6">
  247. <el-form-item label="地区分类" prop="areaClassification">
  248. <el-input v-model="form.areaClassification" placeholder="请输入地区分类" :disabled="openState == 'check'" />
  249. </el-form-item>
  250. </el-col> -->
  251. <el-col :span="6">
  252. <el-form-item label="证照号码" prop="licenseNumber">
  253. <el-input v-model="form.licenseNumber" placeholder="请输入证照号码" :disabled="openState == 'check'" />
  254. </el-form-item>
  255. </el-col>
  256. </el-row>
  257. <!-- <el-divider content-position="left">销售区域</el-divider>
  258. <el-row :gutter="20">
  259. <el-col :span="6">
  260. <el-form-item label="销售区域" prop="marketingAreaName">
  261. <el-popover-select-v2 v-model="form.marketingAreaName" title="销售区域" valueKey="name"
  262. referName="MK_SALESAREA_PARAM" :dataMapping="{ marketingArea: 'id', marketingAreaName: 'name'}"
  263. :source.sync="form" placeholder="请输入销售区域" :disabled="openState == 'check'">
  264. </el-popover-select-v2>
  265. </el-form-item>
  266. </el-col>
  267. </el-row> -->
  268. <el-divider content-position="left">负责人</el-divider>
  269. <el-row :gutter="20">
  270. <el-col :span="6">
  271. <el-form-item label="负责人" prop="responsiblePersonName">
  272. <el-popover-select-v2 v-model="form.responsiblePersonName" title="负责人" valueKey="name"
  273. referName="CONTACTS_PARAM"
  274. :dataMapping="{ responsiblePerson: 'id', responsiblePersonName: 'name'}" :source.sync="form"
  275. placeholder="请输入负责人" :disabled="openState == 'check'" />
  276. </el-form-item>
  277. </el-col>
  278. <!-- <el-col :span="6">
  279. <el-form-item label="负责部门" prop="responsibleDeptName">
  280. <el-popover-select-v2 v-model="form.responsibleDeptName" title="负责部门" valueKey="name"
  281. referName="DEPT_PARAM" :dataMapping="{ responsibleDept: 'id', responsibleDeptName: 'name'}"
  282. :source.sync="form" placeholder="请输入负责部门" :disabled="openState == 'check'" />
  283. </el-form-item>
  284. </el-col> -->
  285. </el-row>
  286. <!-- <el-divider content-position="left">开票客户</el-divider>
  287. <el-row :gutter="20">
  288. <el-col :span="6">
  289. <el-form-item label="开票客户" prop="billingCustomerName">
  290. <el-popover-select-v2 v-model="form.billingCustomerName" title="开票客户" valueKey="name"
  291. referName="CUSTOMER_PARAM_ZT" :dataMapping="{ billingCustomer: 'id', billingCustomerName: 'name'}"
  292. :source.sync="form" placeholder="请输入开票客户" :disabled="openState == 'check'" />
  293. </el-form-item>
  294. </el-col>
  295. </el-row> -->
  296. <el-divider content-position="left">其他信息</el-divider>
  297. <el-row :gutter="20">
  298. <el-col :span="6">
  299. <el-form-item label="创建人" prop="createBy">
  300. <el-input v-model="form.createBy" :disabled="true" />
  301. </el-form-item>
  302. </el-col>
  303. <el-col :span="6">
  304. <el-form-item label="创建时间" prop="createTime">
  305. <el-input v-model="form.createTime" :disabled="true" />
  306. </el-form-item>
  307. </el-col>
  308. <el-col :span="6">
  309. <el-form-item label="修改人" prop="updateBy">
  310. <el-input v-model="form.updateBy" :disabled="true" />
  311. </el-form-item>
  312. </el-col>
  313. <el-col :span="6">
  314. <el-form-item label="修改时间" prop="updateTime">
  315. <el-input v-model="form.updateTime" :disabled="true" />
  316. </el-form-item>
  317. </el-col>
  318. </el-row>
  319. </el-tab-pane>
  320. <el-tab-pane label="资质信息" name="second">
  321. <el-divider content-position="left">资质信息</el-divider>
  322. <el-row :gutter="20">
  323. <el-col :span="6">
  324. <el-form-item label="企业类型" prop="enterpriseType">
  325. <el-select clearable v-model="form.enterpriseType" :disabled="openState == 'check'">
  326. <el-option v-for="dict in dict.type.mk_cm_enterprise_type" :key="dict.value" :label="dict.label"
  327. :value="dict.value" />
  328. </el-select>
  329. </el-form-item>
  330. </el-col>
  331. <el-col :span="6">
  332. <el-form-item label="企业名称" prop="enterpriseName">
  333. <el-input v-model="form.enterpriseName" placeholder="请输入企业名称" :disabled="openState == 'check'" />
  334. </el-form-item>
  335. </el-col>
  336. <!-- <el-col :span="6">
  337. <el-form-item label="注册地区" prop="registrationArea">
  338. <el-input v-model="form.registrationArea" placeholder="请输入注册地区" :disabled="openState == 'check'" />
  339. </el-form-item>
  340. </el-col> -->
  341. <el-col :span="6">
  342. <el-form-item label="经度" prop="longitude">
  343. <el-input v-model="form.longitude" placeholder="请输入经度" :disabled="openState == 'check'" />
  344. </el-form-item>
  345. </el-col>
  346. <el-col :span="6">
  347. <el-form-item label="纬度" prop="latitude">
  348. <el-input v-model="form.latitude" placeholder="请输入纬度" :disabled="openState == 'check'" />
  349. </el-form-item>
  350. </el-col>
  351. </el-row>
  352. <el-row :gutter="20">
  353. <el-col :span="6">
  354. <el-form-item label="详细地址" prop="detailedAddress">
  355. <el-input v-model="form.detailedAddress" placeholder="请输入详细地址" :disabled="openState == 'check'" />
  356. </el-form-item>
  357. </el-col>
  358. </el-row>
  359. </el-tab-pane>
  360. <el-tab-pane label="联系人信息" name="third" v-if="openState == 'check'">
  361. <el-table :data="mkCmCustomersContactList" ref="mkCmCustomersContact">
  362. <el-table-column label="姓名" align="center" prop="name" min-width="150" />
  363. <el-table-column label="客户" align="center" prop="customerName" min-width="150" />
  364. <el-table-column label="手机" align="center" prop="telephone" min-width="150" />
  365. <el-table-column label="邮箱" align="center" prop="mail" min-width="150" />
  366. </el-table>
  367. </el-tab-pane>
  368. <el-tab-pane label="负责人信息" name="fourth" v-if="openState == 'check'">
  369. <el-row :gutter="10" class="mb8">
  370. <el-col :span="6" :offset="21">
  371. <el-button type="primary" icon="el-icon-plus" size="mini"
  372. @click="handleAddMkCmCustomersResponsiblePerson">添加
  373. </el-button>
  374. <el-button type="danger" icon="el-icon-delete" size="mini"
  375. @click="handleDeleteMkCmCustomersResponsiblePerson">
  376. 删除
  377. </el-button>
  378. </el-col>
  379. </el-row>
  380. <el-table :data="mkCmCustomersResponsiblePersonList"
  381. :row-class-name="rowMkCmCustomersResponsiblePersonIndex"
  382. @selection-change="handleMkCmCustomersResponsiblePersonSelectionChange"
  383. ref="mkCmCustomersResponsiblePerson">
  384. <el-table-column type="selection" width="55" align="center" />
  385. <el-table-column label="人员姓名" align="center" prop="personName" min-width="150" />
  386. <el-table-column label="客户名称" align="center" prop="customersName" min-width="150" />
  387. <el-table-column label="关系类型" align="center" prop="relationshipType" min-width="150"
  388. show-overflow-tooltip>
  389. <template slot-scope="scope">
  390. <dict-tag :options="dict.type.mk_cm_relationship_type" :value="scope.row.relationshipType"
  391. show-overflow-tooltip />
  392. </template>
  393. </el-table-column>
  394. <el-table-column label="产线" align="center" prop="productionLine" min-width="150">
  395. <template slot-scope="scope">
  396. <dict-tag :options="dict.type.mk_cm_production_line" :value="scope.row.productionLine"
  397. show-overflow-tooltip />
  398. </template>
  399. </el-table-column>
  400. <el-table-column label="开始日期" align="center" prop="startDate" min-width="150" />
  401. <el-table-column label="结束日期" align="center" prop="endDate" min-width="150" />
  402. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px"
  403. fixed="right">
  404. <template slot-scope="scope">
  405. <el-button size="mini" type="text" icon="el-icon-search" @click="handleCheckAdd(scope.row, '1')">
  406. 查看
  407. </el-button>
  408. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdateAdd(scope.row, '1')">修改
  409. </el-button>
  410. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteAdd(scope.row, '1')">
  411. 删除
  412. </el-button>
  413. </template>
  414. </el-table-column>
  415. </el-table>
  416. </el-tab-pane>
  417. <el-tab-pane label="科室信息" name="fifth" v-if="openState == 'check'">
  418. <el-row :gutter="10" class="mb8">
  419. <el-col :span="6" :offset="21">
  420. <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddMkCmCustomersDepartment">
  421. 添加
  422. </el-button>
  423. <el-button type="danger" icon="el-icon-delete" size="mini"
  424. @click="handleDeleteMkCmCustomersDepartment">
  425. 删除
  426. </el-button>
  427. </el-col>
  428. </el-row>
  429. <el-table :data="mkCmCustomersDepartmentList" :row-class-name="rowMkCmCustomersDepartmentIndex"
  430. @selection-change="handleMkCmCustomersDepartmentSelectionChange" ref="mkCmCustomersDepartment">
  431. <el-table-column type="selection" width="55" align="center" />
  432. <el-table-column label="科室名称" align="center" prop="name" min-width="150" />
  433. <el-table-column label="客户名称" align="center" prop="customersName" min-width="150" />
  434. <el-table-column label="负责人姓名" align="center" prop="responsiblePersonName" min-width="150" />
  435. <el-table-column label="联系人手机" align="center" prop="phone" min-width="150" />
  436. <el-table-column label="科室位置" align="center" prop="address" min-width="150" />
  437. <el-table-column label="常规治疗" align="center" prop="conventionalTherapy" min-width="150" />
  438. <el-table-column label="科室特色" align="center" prop="characteristic" min-width="150" />
  439. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px"
  440. fixed="right">
  441. <template slot-scope="scope">
  442. <el-button size="mini" type="text" icon="el-icon-search" @click="handleCheckAdd(scope.row, '2')">
  443. 查看
  444. </el-button>
  445. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdateAdd(scope.row, '2')">修改
  446. </el-button>
  447. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteAdd(scope.row, '2')">
  448. 删除
  449. </el-button>
  450. </template>
  451. </el-table-column>
  452. </el-table>
  453. </el-tab-pane>
  454. </el-tabs>
  455. <div slot="footer" style="margin-left: 88%; margin-top: 1%">
  456. <el-button type="primary" @click="submitForm" :disabled="openState == 'check'">确 定</el-button>
  457. <el-button @click="cancel">取 消</el-button>
  458. </div>
  459. </div>
  460. </el-form>
  461. </div>
  462. </div>
  463. <AddPerson v-model="isAdd1" v-if="isAdd1" :pageStu="page" :disable="disable" :row="rowDetail" :customersId="form.id"
  464. @refresh="searchList" />
  465. <AddDepartment v-model="isAdd2" v-if="isAdd2" :pageStu="page" :disable="disable" :row="rowDetail"
  466. :customersId="form.id" @refresh="searchList" />
  467. </div>
  468. </template>
  469. <script>
  470. // 客户接口
  471. import {
  472. listCustomers,
  473. getCustomers,
  474. delCustomers,
  475. addCustomers,
  476. updateCustomers,
  477. getContactInfo,
  478. } from "@/api/business/spd/cm/customers";
  479. // 客户负责人接口
  480. import {
  481. delCustomersResponsiblePerson,
  482. } from "@/api/business/spd/cm/customersResponsiblePerson";
  483. // 客户科室接口
  484. import {
  485. delCustomersDepartment,
  486. } from "@/api/business/spd/cm/customersDepartment";
  487. import CollapseTransition from '@/components/MyCollapse/collapse.vue';
  488. // 参照弹出框
  489. import ElPopoverSelectV2 from "@/components/popover-select-v2";
  490. // 新建客户负责人信息页面
  491. import AddPerson from "@/views/business/spd/cm/customersResponsiblePerson/index.vue";
  492. // 新建客户科室信息页面
  493. import AddDepartment from "@/views/business/spd/cm/customersDepartment/index.vue";
  494. export default {
  495. name: "Customers",
  496. components: {
  497. CollapseTransition,
  498. ElPopoverSelectV2,
  499. AddPerson,
  500. AddDepartment,
  501. },
  502. dicts: ['mk_cm_yes_no', 'mk_cm_classification', 'mk_cm_type', 'mk_cm_category', 'mk_cm_channel',
  503. 'mk_cm_business_type', 'mk_cm_industry', 'mk_cm_tax_type', 'mk_cm_enterprise_type', 'mk_cm_relationship_type',
  504. 'mk_cm_production_line'
  505. ],
  506. data() {
  507. return {
  508. // 遮罩层
  509. loading: true,
  510. // 选中数组
  511. ids: [],
  512. // 子表选中数据
  513. checkedMkCmCustomersResponsiblePerson: [],
  514. checkedMkCmCustomersDepartment: [],
  515. // 子表选中主键
  516. checkedMkCmCustomersResponsiblePersonIds: [],
  517. checkedMkCmCustomersDepartmentIds: [],
  518. // 非单个禁用
  519. single: true,
  520. // 非多个禁用
  521. multiple: true,
  522. // 显示搜索条件
  523. showSearch: true,
  524. // 总条数
  525. total: 0,
  526. // 客户表格数据
  527. customersList: [],
  528. // 客户联系人表格数据
  529. mkCmCustomersContactList: [],
  530. // 客户负责人表格数据
  531. mkCmCustomersResponsiblePersonList: [],
  532. // 客户科室表格数据
  533. mkCmCustomersDepartmentList: [],
  534. // 弹出层标题
  535. title: "",
  536. // 首次进入标签页的显示
  537. activeName: 'first',
  538. // 下拉收起配置
  539. expanded: false,
  540. // 页面打开状态
  541. openState: null,
  542. // 列表页面
  543. isList: true,
  544. // 添加页面
  545. isAdd1: false,
  546. isAdd2: false,
  547. rowDetail: {},
  548. disable: false,
  549. // 页面状态
  550. page: null,
  551. // 查询参数
  552. queryParams: {
  553. pageNum: 1,
  554. pageSize: 10,
  555. org: null,
  556. orgName: null,
  557. code: null,
  558. name: null,
  559. abbreviation: null,
  560. classification: null,
  561. type: null,
  562. category: null,
  563. firstBattalion: null,
  564. channel: null,
  565. businessType: null,
  566. industry: null,
  567. taxType: null,
  568. potential: null,
  569. areaClassification: null,
  570. licenseNumber: null,
  571. marketingArea: null,
  572. marketingAreaName: null,
  573. responsiblePerson: null,
  574. responsiblePersonName: null,
  575. responsibleDept: null,
  576. responsibleDeptName: null,
  577. billingCustomer: null,
  578. billingCustomerName: null,
  579. enterpriseType: null,
  580. enterpriseName: null,
  581. registrationArea: null,
  582. longitude: null,
  583. latitude: null,
  584. detailedAddress: null,
  585. },
  586. // 表单参数
  587. form: {},
  588. // 表单校验
  589. rules: {
  590. name: [{
  591. required: true,
  592. message: '客户名称不能为空',
  593. trigger: 'blur'
  594. }],
  595. classification: [{
  596. required: true,
  597. message: '客户分类不能为空',
  598. trigger: 'blur'
  599. }],
  600. taxType: [{
  601. required: true,
  602. message: '纳税类别不能为空',
  603. trigger: 'blur'
  604. }],
  605. licenseNumber: [{
  606. required: true,
  607. message: '证照号码不能为空',
  608. trigger: 'blur'
  609. }],
  610. enterpriseType: [{
  611. required: true,
  612. message: '企业类型不能为空',
  613. trigger: 'blur'
  614. }],
  615. enterpriseName: [{
  616. required: true,
  617. message: '企业名称不能为空',
  618. trigger: 'blur'
  619. }],
  620. },
  621. };
  622. },
  623. created() {
  624. this.reset();
  625. this.getList();
  626. },
  627. methods: {
  628. /** 查询客户列表 */
  629. getList() {
  630. this.loading = true;
  631. listCustomers(this.queryParams).then(response => {
  632. this.customersList = response.rows;
  633. this.total = response.total;
  634. this.loading = false;
  635. });
  636. },
  637. // 取消按钮
  638. cancel() {
  639. this.isList = true;
  640. this.reset();
  641. },
  642. // 表单重置
  643. reset() {
  644. this.form = {
  645. id: null,
  646. org: null,
  647. orgName: null,
  648. code: null,
  649. name: null,
  650. abbreviation: null,
  651. classification: null,
  652. type: null,
  653. category: null,
  654. firstBattalion: null,
  655. channel: null,
  656. businessType: null,
  657. industry: null,
  658. taxType: null,
  659. potential: null,
  660. areaClassification: null,
  661. licenseNumber: null,
  662. marketingArea: null,
  663. marketingAreaName: null,
  664. responsiblePerson: null,
  665. responsiblePersonName: null,
  666. responsibleDept: null,
  667. responsibleDeptName: null,
  668. billingCustomer: null,
  669. billingCustomerName: null,
  670. enterpriseType: null,
  671. enterpriseName: null,
  672. registrationArea: null,
  673. longitude: null,
  674. latitude: null,
  675. detailedAddress: null,
  676. createBy: null,
  677. createTime: null,
  678. updateBy: null,
  679. updateTime: null,
  680. delFlag: null
  681. };
  682. this.activeName = 'first';
  683. this.mkCmCustomersResponsiblePersonList = [];
  684. this.mkCmCustomersDepartmentList = [];
  685. this.resetForm("form");
  686. },
  687. /** 搜索按钮操作 */
  688. handleQuery() {
  689. this.queryParams.pageNum = 1;
  690. this.getList();
  691. },
  692. /** 重置按钮操作 */
  693. resetQuery() {
  694. this.resetForm("queryForm");
  695. this.handleQuery();
  696. },
  697. // 多选框选中数据
  698. handleSelectionChange(selection) {
  699. this.ids = selection.map(item => item.id)
  700. this.single = selection.length !== 1
  701. this.multiple = !selection.length
  702. },
  703. /** 新增按钮操作 */
  704. handleAdd() {
  705. this.isList = false;
  706. this.openState = 'add';
  707. this.title = "添加客户";
  708. },
  709. /** 查看按钮操作 */
  710. handleCheck(row) {
  711. this.isList = false;
  712. this.reset();
  713. const id = row.id || this.ids
  714. getCustomers(id).then(response => {
  715. this.form = response.data;
  716. this.mkCmCustomersResponsiblePersonList = response.data.mkCmCustomersResponsiblePersonList;
  717. this.mkCmCustomersDepartmentList = response.data.mkCmCustomersDepartmentList;
  718. this.openState = 'check';
  719. this.title = "查看客户";
  720. console.log(response, 'response');
  721. });
  722. getContactInfo().then(response => {
  723. this.mkCmCustomersContactList = response.data;
  724. });
  725. },
  726. /** Add查看按钮操作 */
  727. handleCheckAdd(row, type) {
  728. if (type == '1') {
  729. this.isAdd1 = true;
  730. this.page = 'check';
  731. this.rowDetail = row;
  732. this.disable = true;
  733. } else if (type == '2') {
  734. this.isAdd2 = true;
  735. this.page = 'check';
  736. this.rowDetail = row;
  737. this.disable = true;
  738. }
  739. },
  740. /** 修改按钮操作 */
  741. handleUpdate(row) {
  742. this.isList = false;
  743. this.reset();
  744. const id = row.id || this.ids
  745. getCustomers(id).then(response => {
  746. this.form = response.data;
  747. this.mkCmCustomersResponsiblePersonList = response.data.mkCmCustomersResponsiblePersonList;
  748. this.mkCmCustomersDepartmentList = response.data.mkCmCustomersDepartmentList;
  749. this.openState = 'update';
  750. this.title = "修改客户";
  751. });
  752. },
  753. /** Add修改按钮操作 */
  754. handleUpdateAdd(row, type) {
  755. if (type == '1') {
  756. this.isAdd1 = true;
  757. this.page = 'update';
  758. this.rowDetail = row;
  759. this.disable = false;
  760. } else if (type == '2') {
  761. this.isAdd2 = true;
  762. this.page = 'update';
  763. this.rowDetail = row;
  764. this.disable = false;
  765. }
  766. },
  767. /** 提交按钮 */
  768. submitForm() {
  769. this.$refs["form"].validate(valid => {
  770. console.log(this.isList, 'this.isList');
  771. if (valid) {
  772. if (this.form.id != null) {
  773. updateCustomers(this.form).then(response => {
  774. this.$modal.msgSuccess("修改成功");
  775. this.getList();
  776. this.isList = true;
  777. });
  778. } else {
  779. addCustomers(this.form).then(response => {
  780. this.$modal.msgSuccess("新增成功");
  781. this.getList();
  782. this.isList = true;
  783. });
  784. }
  785. }
  786. });
  787. },
  788. /** 删除按钮操作 */
  789. handleDelete(row) {
  790. const ids = row.id || this.ids;
  791. this.$modal.confirm('是否确认删除客户编码为"' + row.code + '"的数据项?').then(function () {
  792. return delCustomers(ids);
  793. }).then(() => {
  794. this.getList();
  795. this.$modal.msgSuccess("删除成功");
  796. }).catch(() => {});
  797. },
  798. /** Add删除按钮操作 */
  799. handleDeleteAdd(row, type) {
  800. const ids = row.id || this.ids;
  801. if (type == '1') {
  802. this.$modal.confirm('是否确认删除人员姓名为"' + row.personName + '"的数据项?').then(function () {
  803. return delCustomersResponsiblePerson(ids);
  804. }).then(() => {
  805. getCustomers(row.customersId).then(res => {
  806. this.mkCmCustomersResponsiblePersonList = res.data.mkCmCustomersResponsiblePersonList;
  807. })
  808. this.$modal.msgSuccess("删除成功");
  809. }).catch(() => {});
  810. } else if (type == '2') {
  811. this.$modal.confirm('是否确认删除科室名称为"' + row.name + '"的数据项?').then(function () {
  812. return delCustomersDepartment(ids);
  813. }).then(() => {
  814. getCustomers(row.customersId).then(res => {
  815. this.mkCmCustomersDepartmentList = res.data.mkCmCustomersDepartmentList;
  816. })
  817. this.$modal.msgSuccess("删除成功");
  818. }).catch(() => {});
  819. }
  820. },
  821. /** 客户负责人序号 */
  822. rowMkCmCustomersResponsiblePersonIndex({
  823. row,
  824. rowIndex
  825. }) {
  826. row.index = rowIndex + 1;
  827. },
  828. /** 客户科室序号 */
  829. rowMkCmCustomersDepartmentIndex({
  830. row,
  831. rowIndex
  832. }) {
  833. row.index = rowIndex + 1;
  834. },
  835. /** 客户负责人添加按钮操作 */
  836. handleAddMkCmCustomersResponsiblePerson() {
  837. this.isList = false;
  838. this.isAdd1 = true;
  839. this.page = 'add';
  840. this.disable = false;
  841. },
  842. /** 客户科室添加按钮操作 */
  843. handleAddMkCmCustomersDepartment() {
  844. this.isList = false;
  845. this.isAdd2 = true;
  846. this.page = 'add';
  847. this.disable = false;
  848. },
  849. /** 客户负责人删除按钮操作 */
  850. handleDeleteMkCmCustomersResponsiblePerson() {
  851. if (this.checkedMkCmCustomersResponsiblePerson.length == 0) {
  852. this.$modal.msgError("请先选择要删除的客户负责人数据");
  853. } else {
  854. this.$modal.confirm('是否确认删除序号为"' + this.checkedMkCmCustomersResponsiblePerson + '"的数据项?').then(function () {
  855. return delCustomersResponsiblePerson(this.checkedMkCmCustomersResponsiblePersonIds);
  856. }).then(() => {
  857. getCustomers(this.form.id).then(res => {
  858. this.mkCmCustomersResponsiblePersonList = res.data.mkCmCustomersResponsiblePersonList;
  859. })
  860. this.$modal.msgSuccess("删除成功");
  861. }).catch(() => {});
  862. }
  863. },
  864. /** 客户科室删除按钮操作 */
  865. handleDeleteMkCmCustomersDepartment() {
  866. if (this.checkedMkCmCustomersDepartment.length == 0) {
  867. this.$modal.msgError("请先选择要删除的客户科室数据");
  868. } else {
  869. this.$modal.confirm('是否确认删除序号为"' + this.checkedMkCmCustomersDepartment + '"的数据项?').then(function () {
  870. return delCustomersDepartment(this.checkedMkCmCustomersDepartmentIds);
  871. }).then(() => {
  872. getCustomers(this.form.id).then(res => {
  873. this.mkCmCustomersDepartmentList = res.data.mkCmCustomersDepartmentList;
  874. })
  875. this.$modal.msgSuccess("删除成功");
  876. }).catch(() => {});
  877. }
  878. },
  879. /** 复选框选中数据 */
  880. handleMkCmCustomersResponsiblePersonSelectionChange(selection) {
  881. this.checkedMkCmCustomersResponsiblePerson = selection.map(item => item.index)
  882. this.checkedMkCmCustomersResponsiblePersonIds = selection.map(item => item.id)
  883. },
  884. /** 复选框选中数据 */
  885. handleMkCmCustomersDepartmentSelectionChange(selection) {
  886. this.checkedMkCmCustomersDepartment = selection.map(item => item.index)
  887. this.checkedMkCmCustomersDepartmentIds = selection.map(item => item.id)
  888. },
  889. /** 导出按钮操作 */
  890. handleExport() {
  891. this.download('cm/customers/export', {
  892. ...this.queryParams
  893. }, `customers_${new Date().getTime()}.xlsx`)
  894. },
  895. /** 标签页切换 */
  896. handleClick(tab, event) {
  897. console.log(tab, event);
  898. },
  899. /** 搜索条件下拉 */
  900. drop() {
  901. this.expanded = !this.expanded
  902. },
  903. /** 弹出框关闭确认 */
  904. handleClose(done) {
  905. this.$confirm('确认关闭?')
  906. .then(_ => {
  907. done();
  908. })
  909. .catch(_ => {});
  910. },
  911. searchList() {
  912. console.og('1111')
  913. getCustomers(this.form.id).then(res => {
  914. this.form = res.data;
  915. this.mkCmCustomersResponsiblePersonList = res.data.mkCmCustomersResponsiblePersonList;
  916. this.mkCmCustomersDepartmentList = res.data.mkCmCustomersDepartmentList;
  917. })
  918. },
  919. }
  920. };
  921. </script>
  922. <style>
  923. .btn_group {
  924. width: 100%;
  925. margin: 20px -10px;
  926. display: flex;
  927. justify-content: right;
  928. }
  929. .lines {
  930. margin-top: 0;
  931. }
  932. </style>