index.vue 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436
  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-col :span="6">
  318. <el-form-item label="重点客户" prop="vital">
  319. <el-select clearable v-model="form.vital" :disabled="openState == 'check'">
  320. <el-option
  321. v-for="dict in dict.type.mk_cm_yes_no"
  322. :key="dict.value"
  323. :label="dict.label"
  324. :value="dict.value"
  325. />
  326. </el-select>
  327. </el-form-item>
  328. </el-col>
  329. </el-row>
  330. <el-row :gutter="20">
  331. <el-col :span="6">
  332. <el-form-item label="客户等级" prop="lv">
  333. <el-select clearable v-model="form.lv" :disabled="openState == 'check'">
  334. <el-option
  335. v-for="dict in dict.type.mk_cm_lv"
  336. :key="dict.value"
  337. :label="dict.label"
  338. :value="dict.value"
  339. />
  340. </el-select>
  341. </el-form-item>
  342. </el-col>
  343. </el-row>
  344. <el-divider content-position="left">业务信息</el-divider>
  345. <el-row :gutter="20">
  346. <el-col :span="6">
  347. <el-form-item label="年耗材采购额" prop="consumablePurchaseValue">
  348. <el-input v-model="form.consumablePurchaseValue" type="number" :disabled="openState == 'check'"/>
  349. </el-form-item>
  350. </el-col>
  351. <el-col :span="6">
  352. <el-form-item label="德荣耗材占比" prop="drConsumableRatio">
  353. <el-input v-model="form.drConsumableRatio" type="number" :disabled="openState == 'check'"/>
  354. </el-form-item>
  355. </el-col>
  356. <el-col :span="6">
  357. <el-form-item label="年设备采购额" prop="equipmentPurchaseValue">
  358. <el-input v-model="form.equipmentPurchaseValue" type="number" :disabled="openState == 'check'"/>
  359. </el-form-item>
  360. </el-col>
  361. <el-col :span="6">
  362. <el-form-item label="德荣设备占比" prop="drEquipmentRatio">
  363. <el-input v-model="form.drEquipmentRatio" type="number" :disabled="openState == 'check'"/>
  364. </el-form-item>
  365. </el-col>
  366. </el-row>
  367. <el-row :gutter="20">
  368. <el-col :span="6">
  369. <el-form-item label="年供应总数" prop="totalSupply">
  370. <el-input v-model="form.totalSupply" type="number" :disabled="openState == 'check'"/>
  371. </el-form-item>
  372. </el-col>
  373. <el-col :span="6">
  374. <el-form-item label="医院年收入" prop="income">
  375. <el-input v-model="form.income" type="number" :disabled="openState == 'check'"/>
  376. </el-form-item>
  377. </el-col>
  378. <el-col :span="6">
  379. <el-form-item label="科室数量" prop="deptNum">
  380. <el-input v-model="form.deptNum" type="number" :disabled="openState == 'check'"/>
  381. </el-form-item>
  382. </el-col>
  383. </el-row>
  384. <el-divider content-position="left">负责人</el-divider>
  385. <el-row :gutter="20">
  386. <el-col :span="6">
  387. <el-form-item label="负责人" prop="responsiblePersonName">
  388. <el-popover-select-v2
  389. v-model="form.responsiblePersonName"
  390. title="负责人"
  391. valueKey="name"
  392. referName="CONTACTS_PARAM"
  393. :dataMapping="{
  394. responsiblePerson: 'id',
  395. responsiblePersonName: 'name',
  396. }"
  397. :source.sync="form"
  398. placeholder="请输入负责人"
  399. :disabled="openState == 'check'"
  400. />
  401. </el-form-item>
  402. </el-col>
  403. <!-- <el-col :span="6">
  404. <el-form-item label="负责部门" prop="responsibleDeptName">
  405. <el-popover-select-v2 v-model="form.responsibleDeptName" title="负责部门" valueKey="name"
  406. referName="DEPT_PARAM" :dataMapping="{ responsibleDept: 'id', responsibleDeptName: 'name'}"
  407. :source.sync="form" placeholder="请输入负责部门" :disabled="openState == 'check'" />
  408. </el-form-item>
  409. </el-col> -->
  410. </el-row>
  411. <!-- <el-divider content-position="left">开票客户</el-divider>
  412. <el-row :gutter="20">
  413. <el-col :span="6">
  414. <el-form-item label="开票客户" prop="billingCustomerName">
  415. <el-popover-select-v2 v-model="form.billingCustomerName" title="开票客户" valueKey="name"
  416. referName="MkCustomerRule" :dataMapping="{ billingCustomer: 'id', billingCustomerName: 'name'}"
  417. :source.sync="form" placeholder="请输入开票客户" :disabled="openState == 'check'" />
  418. </el-form-item>
  419. </el-col>
  420. </el-row> -->
  421. <el-divider content-position="left">其他信息</el-divider>
  422. <el-row :gutter="20">
  423. <el-col :span="6">
  424. <el-form-item label="创建人" prop="createBy">
  425. <el-input v-model="form.createByName" :disabled="true" />
  426. </el-form-item>
  427. </el-col>
  428. <el-col :span="6">
  429. <el-form-item label="创建时间" prop="createTime">
  430. <el-input v-model="form.createTime" :disabled="true" />
  431. </el-form-item>
  432. </el-col>
  433. <el-col :span="6">
  434. <el-form-item label="修改人" prop="updateBy">
  435. <el-input v-model="form.updateByName" :disabled="true" />
  436. </el-form-item>
  437. </el-col>
  438. <el-col :span="6">
  439. <el-form-item label="修改时间" prop="updateTime">
  440. <el-input v-model="form.updateTime" :disabled="true" />
  441. </el-form-item>
  442. </el-col>
  443. </el-row>
  444. </el-tab-pane>
  445. <el-tab-pane label="资质信息" name="second">
  446. <el-divider content-position="left">资质信息</el-divider>
  447. <el-row :gutter="20">
  448. <el-col :span="6">
  449. <el-form-item label="企业类型" prop="enterpriseType">
  450. <el-select
  451. clearable
  452. v-model="form.enterpriseType"
  453. :disabled="openState == 'check'"
  454. >
  455. <el-option
  456. v-for="dict in dict.type.mk_cm_enterprise_type"
  457. :key="dict.value"
  458. :label="dict.label"
  459. :value="dict.value"
  460. />
  461. </el-select>
  462. </el-form-item>
  463. </el-col>
  464. <el-col :span="6">
  465. <el-form-item label="企业名称" prop="enterpriseName">
  466. <el-input
  467. v-model="form.enterpriseName"
  468. placeholder="请输入企业名称"
  469. :disabled="openState == 'check'"
  470. />
  471. </el-form-item>
  472. </el-col>
  473. <!-- <el-col :span="6">
  474. <el-form-item label="注册地区" prop="registrationArea">
  475. <el-input v-model="form.registrationArea" placeholder="请输入注册地区" :disabled="openState == 'check'" />
  476. </el-form-item>
  477. </el-col> -->
  478. <el-col :span="6">
  479. <el-form-item label="经度" prop="longitude">
  480. <el-input
  481. v-model="form.longitude"
  482. placeholder="请输入经度"
  483. :disabled="openState == 'check'"
  484. />
  485. </el-form-item>
  486. </el-col>
  487. <el-col :span="6">
  488. <el-form-item label="纬度" prop="latitude">
  489. <el-input
  490. v-model="form.latitude"
  491. placeholder="请输入纬度"
  492. :disabled="openState == 'check'"
  493. />
  494. </el-form-item>
  495. </el-col>
  496. </el-row>
  497. <el-row :gutter="20">
  498. <el-col :span="6">
  499. <el-form-item label="详细地址" prop="detailedAddress">
  500. <el-input
  501. v-model="form.detailedAddress"
  502. placeholder="请输入详细地址"
  503. :disabled="openState == 'check'"
  504. />
  505. </el-form-item>
  506. </el-col>
  507. </el-row>
  508. </el-tab-pane>
  509. <el-tab-pane
  510. label="联系人信息"
  511. name="third"
  512. v-if="openState == 'check'"
  513. >
  514. <el-row :gutter="10" class="mb8">
  515. <el-col :span="6" :offset="21">
  516. <el-button
  517. type="primary"
  518. :size="size"
  519. @click="handleAddMkCmCustomersContact"
  520. >添加
  521. </el-button>
  522. <el-button
  523. type="danger"
  524. :size="size"
  525. @click="handleDeleteTab('0')"
  526. >
  527. 删除
  528. </el-button>
  529. </el-col>
  530. </el-row>
  531. <el-super-ux-table
  532. v-model="mkCmCustomersContactList"
  533. :size="size"
  534. :dict="dict"
  535. :columns="ContactColumns"
  536. :height="height"
  537. index
  538. checkbox
  539. highlight-current-row
  540. ref="mkCmCustomersContact"
  541. :row-class-name="rowMkCmCustomersContactIndex"
  542. @selection-change="handleMkCmCustomersContactSelectionChange"
  543. style="margin: 16px 0 0"
  544. >
  545. <ux-table-column
  546. fixed="right"
  547. title="操作"
  548. align="center"
  549. width="120"
  550. >
  551. <template slot-scope="scope">
  552. <el-button
  553. :size="size"
  554. type="text"
  555. @click="handleCheckAdd(scope.row, '0')"
  556. >
  557. 查看
  558. </el-button>
  559. <el-button
  560. :size="size"
  561. type="text"
  562. @click="handleUpdateAdd(scope.row, '0')"
  563. >修改
  564. </el-button>
  565. <el-button
  566. :size="size"
  567. type="text"
  568. @click="handleDeleteAdd(scope.row, '0')"
  569. >
  570. 删除
  571. </el-button>
  572. </template>
  573. </ux-table-column>
  574. </el-super-ux-table>
  575. </el-tab-pane>
  576. <el-tab-pane
  577. label="负责人信息"
  578. name="fourth"
  579. v-if="openState == 'check'"
  580. >
  581. <el-row :gutter="10" class="mb8">
  582. <el-col :span="6" :offset="21">
  583. <el-button
  584. type="primary"
  585. :size="size"
  586. @click="handleAddMkCmCustomersResponsiblePerson"
  587. >添加
  588. </el-button>
  589. <el-button
  590. type="danger"
  591. :size="size"
  592. @click="handleDeleteTab('1')"
  593. >
  594. 删除
  595. </el-button>
  596. </el-col>
  597. </el-row>
  598. <el-super-ux-table
  599. v-model="mkCmCustomersResponsiblePersonList"
  600. :size="size"
  601. :dict="dict"
  602. :columns="PrincipalColumns"
  603. :height="height"
  604. index
  605. checkbox
  606. highlight-current-row
  607. ref="mkCmCustomersResponsiblePerson"
  608. :row-class-name="rowMkCmCustomersResponsiblePersonIndex"
  609. @selection-change="
  610. handleMkCmCustomersResponsiblePersonSelectionChange
  611. "
  612. style="margin: 16px 0 0"
  613. >
  614. <ux-table-column
  615. fixed="right"
  616. title="操作"
  617. align="center"
  618. width="120"
  619. >
  620. <template slot-scope="scope">
  621. <el-button
  622. :size="size"
  623. type="text"
  624. @click="handleCheckAdd(scope.row, '1')"
  625. >
  626. 查看
  627. </el-button>
  628. <el-button
  629. :size="size"
  630. type="text"
  631. @click="handleUpdateAdd(scope.row, '1')"
  632. >修改
  633. </el-button>
  634. <el-button
  635. :size="size"
  636. type="text"
  637. @click="handleDeleteAdd(scope.row, '1')"
  638. >
  639. 删除
  640. </el-button>
  641. </template>
  642. </ux-table-column>
  643. </el-super-ux-table>
  644. </el-tab-pane>
  645. <el-tab-pane
  646. label="科室信息"
  647. name="fifth"
  648. v-if="openState == 'check'"
  649. >
  650. <el-row :gutter="10" class="mb8">
  651. <el-col :span="6" :offset="20">
  652. <el-button
  653. type="primary"
  654. :size="size"
  655. @click="handleAddMkCmCustomersDepartment"
  656. >
  657. 添加
  658. </el-button>
  659. <BatchImport
  660. ref="batchImportDept"
  661. @import="importDataBtnDept"
  662. @temDownload="importTemplateBtnDept"
  663. :fileSize="2"
  664. ></BatchImport>
  665. <el-button
  666. :size="size"
  667. type="danger"
  668. @click="handleDeleteTab('2')"
  669. >
  670. 删除
  671. </el-button>
  672. </el-col>
  673. </el-row>
  674. <el-super-ux-table
  675. v-model="mkCmCustomersDepartmentList"
  676. :size="size"
  677. :dict="dict"
  678. :height="height"
  679. :columns="DepartmentInfoColumns"
  680. index
  681. checkbox
  682. highlight-current-row
  683. ref="mkCmCustomersDepartment"
  684. :row-class-name="rowMkCmCustomersDepartmentIndex"
  685. @selection-change="handleMkCmCustomersDepartmentSelectionChange"
  686. style="margin: 16px 0 0"
  687. >
  688. <ux-table-column
  689. fixed="right"
  690. title="操作"
  691. align="center"
  692. width="120"
  693. >
  694. <template slot-scope="scope">
  695. <el-button
  696. :size="size"
  697. type="text"
  698. @click="handleCheckAdd(scope.row, '2')"
  699. >
  700. 查看
  701. </el-button>
  702. <el-button
  703. :size="size"
  704. type="text"
  705. @click="handleUpdateAdd(scope.row, '2')"
  706. >修改
  707. </el-button>
  708. <el-button
  709. :size="size"
  710. type="text"
  711. @click="handleDeleteAdd(scope.row, '2')"
  712. >
  713. 删除
  714. </el-button>
  715. </template>
  716. </ux-table-column>
  717. </el-super-ux-table>
  718. </el-tab-pane>
  719. <el-tab-pane label="商机信息" name="sixth" v-if="openState == 'check'">
  720. <el-super-ux-table
  721. v-model="bosList"
  722. :size="size"
  723. :dict="dict"
  724. :height="height"
  725. :columns="bosColumns"
  726. index
  727. highlight-current-row
  728. style="margin: 16px 0 0"
  729. >
  730. <ux-table-column
  731. fixed="right"
  732. title="操作"
  733. align="center"
  734. width="120"
  735. >
  736. <template slot-scope="scope">
  737. <el-button
  738. :size="size"
  739. type="text"
  740. @click="btnBoView(scope.row)"
  741. >
  742. 查看
  743. </el-button>
  744. </template>
  745. </ux-table-column>
  746. </el-super-ux-table>
  747. </el-tab-pane>
  748. </el-tabs>
  749. </el-form>
  750. </div>
  751. </div>
  752. <AddContact
  753. v-model="isAdd0"
  754. v-if="isAdd0"
  755. :operatingState="operatingSta"
  756. :state="state"
  757. :row="rowDetail"
  758. :customersId="form.id"
  759. :customersName="form.name"
  760. :customersCode="form.code"
  761. />
  762. <AddPerson
  763. v-model="isAdd1"
  764. v-if="isAdd1"
  765. :pageStu="pageStu"
  766. :disable="disable"
  767. :row="rowDetail"
  768. :customersId="form.id"
  769. :customersName="form.name"
  770. />
  771. <AddDepartment
  772. v-model="isAdd2"
  773. v-if="isAdd2"
  774. :pageStu="pageStu"
  775. :disable="disable"
  776. :row="rowDetail"
  777. :customersId="form.id"
  778. :customersName="form.name"
  779. />
  780. </div>
  781. </template>
  782. <script>
  783. // 客户接口
  784. import {
  785. listCustomers,
  786. getCustomers,
  787. delCustomers,
  788. addCustomers,
  789. updateCustomers,
  790. getContactInfo,
  791. delContact,
  792. } from "@/api/business/spd/cm/customers";
  793. // 客户负责人接口
  794. import { delCustomersResponsiblePerson } from "@/api/business/spd/cm/customersResponsiblePerson";
  795. // 客户科室接口
  796. import { delCustomersDepartment,importDataDept } from "@/api/business/spd/cm/customersDepartment";
  797. import useColumns from "./columns";
  798. import { dicts } from "../dicts";
  799. export default {
  800. name: "Customers",
  801. components: {
  802. CollapseTransition: () => import("@/components/MyCollapse/collapse.vue"),
  803. ElPopoverSelectV2: () => import("@/components/popover-select-v2"),
  804. // 新建客户联系人信息页面
  805. AddContact: () =>
  806. import("@/views/business/spd/cm/customersContact/index.vue"),
  807. // 新建客户负责人信息页面
  808. AddPerson: () =>
  809. import("@/views/business/spd/cm/customersResponsiblePerson/index.vue"),
  810. // 新建客户科室信息页面
  811. AddDepartment: () =>
  812. import("@/views/business/spd/cm/customersDepartment/index.vue"),
  813. ElSuperSearch: () => import("@/components/super-search/index.vue"),
  814. ElSuperUxTable: () => import("@/components/super-ux-table/index.vue"),
  815. BatchImport: () => import("@/components/BatchImport/index.vue"),
  816. },
  817. dicts: [...dicts,"mk_cm_lv"],
  818. data() {
  819. const {
  820. SearchColumns,
  821. TableColumns,
  822. ContactColumns,
  823. PrincipalColumns,
  824. DepartmentInfoColumns,
  825. bosColumns,
  826. } = useColumns();
  827. const params = this.$init.params(SearchColumns);
  828. const page = this.$init.page();
  829. return {
  830. page,
  831. params,
  832. size: "mini",
  833. SearchColumns,
  834. TableColumns,
  835. ContactColumns,
  836. PrincipalColumns,
  837. DepartmentInfoColumns,
  838. bosColumns,
  839. // 遮罩层
  840. loading: true,
  841. // 选中数组
  842. ids: [],
  843. // 选中数组中的客户编码
  844. codes: [],
  845. // 子表选中数据
  846. checkedMkCmCustomersContact: [],
  847. checkedMkCmCustomersResponsiblePerson: [],
  848. checkedMkCmCustomersDepartment: [],
  849. // 子表选中主键
  850. checkedMkCmCustomersContactIds: [],
  851. checkedMkCmCustomersResponsiblePersonIds: [],
  852. checkedMkCmCustomersDepartmentIds: [],
  853. // 非单个禁用
  854. single: true,
  855. // 非多个禁用
  856. multiple: true,
  857. // 显示搜索条件
  858. // showSearch: true,
  859. // 总条数
  860. total: 0,
  861. // 客户表格数据
  862. customersList: [],
  863. // 客户联系人表格数据
  864. mkCmCustomersContactList: [],
  865. // 客户负责人表格数据
  866. mkCmCustomersResponsiblePersonList: [],
  867. // 客户科室表格数据
  868. mkCmCustomersDepartmentList: [],
  869. // 客户商机表格数据
  870. bosList: [],
  871. // 首次进入标签页的显示
  872. activeName: "first",
  873. // 下拉收起配置
  874. expanded: false,
  875. // 页面打开状态
  876. openState: null,
  877. // 列表页面
  878. isList: true,
  879. // 添加页面
  880. isAdd0: false,
  881. operatingSta: null,
  882. state: null,
  883. isAdd1: false,
  884. isAdd2: false,
  885. rowDetail: {},
  886. disable: false,
  887. // 页面状态
  888. pageStu: null,
  889. // 表单参数
  890. form: {},
  891. // 表单校验
  892. rules: {
  893. orgName: [
  894. {
  895. required: true,
  896. message: "销售组织不能为空",
  897. trigger: "blur",
  898. },
  899. ],
  900. name: [
  901. {
  902. required: true,
  903. message: "客户名称不能为空",
  904. trigger: "blur",
  905. },
  906. ],
  907. classification: [
  908. {
  909. required: true,
  910. message: "客户分类不能为空",
  911. trigger: "blur",
  912. },
  913. ],
  914. taxType: [
  915. {
  916. required: true,
  917. message: "纳税类别不能为空",
  918. trigger: "blur",
  919. },
  920. ],
  921. licenseNumber: [
  922. {
  923. required: true,
  924. message: "证照号码不能为空",
  925. trigger: "blur",
  926. },
  927. ],
  928. enterpriseType: [
  929. {
  930. required: true,
  931. message: "企业类型不能为空",
  932. trigger: "blur",
  933. },
  934. ],
  935. enterpriseName: [
  936. {
  937. required: true,
  938. message: "企业名称不能为空",
  939. trigger: "blur",
  940. },
  941. ],
  942. },
  943. };
  944. },
  945. computed: {
  946. height: {
  947. get() {
  948. return window.innerHeight - 220;
  949. },
  950. set() {},
  951. },
  952. },
  953. created() {
  954. this.reset();
  955. this.getList(this.params, this.page);
  956. },
  957. methods: {
  958. /** 查询客户列表 */
  959. getList(params, page) {
  960. this.loading = true;
  961. listCustomers({ ...params, ...page }).then((response) => {
  962. this.customersList = response.rows;
  963. this.page.total = response.total;
  964. this.loading = false;
  965. });
  966. },
  967. // 取消按钮
  968. cancel() {
  969. this.isList = true;
  970. this.reset();
  971. },
  972. // 表单重置
  973. reset() {
  974. this.form = {
  975. id: null,
  976. org: null,
  977. orgName: null,
  978. code: null,
  979. name: null,
  980. abbreviation: null,
  981. classification: null,
  982. type: null,
  983. category: null,
  984. firstBattalion: null,
  985. channel: null,
  986. businessType: null,
  987. industry: null,
  988. taxType: null,
  989. potential: null,
  990. areaClassification: null,
  991. licenseNumber: null,
  992. marketingArea: null,
  993. marketingAreaName: null,
  994. responsiblePerson: null,
  995. responsiblePersonName: null,
  996. responsibleDept: null,
  997. responsibleDeptName: null,
  998. billingCustomer: null,
  999. billingCustomerName: null,
  1000. enterpriseType: null,
  1001. enterpriseName: null,
  1002. registrationArea: null,
  1003. longitude: null,
  1004. latitude: null,
  1005. detailedAddress: null,
  1006. vital: null,
  1007. createBy: null,
  1008. createTime: null,
  1009. createByName: null,
  1010. updateBy: null,
  1011. updateTime: null,
  1012. updateByName: null,
  1013. delFlag: null,
  1014. };
  1015. this.activeName = "first";
  1016. this.mkCmCustomersContactList = [];
  1017. this.mkCmCustomersResponsiblePersonList = [];
  1018. this.mkCmCustomersDepartmentList = [];
  1019. this.bosList = [];
  1020. this.resetForm("form");
  1021. },
  1022. /** 重置按钮操作 */
  1023. resetQuery() {
  1024. this.params = this.$init.params(this.SearchColumns);
  1025. this.page = this.$init.page();
  1026. this.getList(this.params, this.page);
  1027. this.resetForm("queryForm");
  1028. },
  1029. // 多选框选中数据
  1030. handleSelectionChange(selection) {
  1031. this.ids = selection.map((item) => item.id);
  1032. this.codes = selection.map((item) => item.code);
  1033. this.single = selection.length !== 1;
  1034. this.multiple = !selection.length;
  1035. },
  1036. /** 新增按钮操作 */
  1037. handleAdd() {
  1038. this.isList = false;
  1039. this.openState = "add";
  1040. },
  1041. /** 查看按钮操作 */
  1042. handleCheck(id) {
  1043. this.isList = false;
  1044. const id1 = id || this.ids;
  1045. getCustomers(id1).then((response) => {
  1046. this.form = response.data;
  1047. this.mkCmCustomersResponsiblePersonList = response.data.staffs;
  1048. this.mkCmCustomersDepartmentList = response.data.depts;
  1049. this.mkCmCustomersContactList = response.data.contacts;
  1050. this.bosList = response.data.bos;
  1051. this.openState = "check";
  1052. });
  1053. },
  1054. /** Add查看按钮操作 */
  1055. handleCheckAdd(row, type) {
  1056. if (type == "0") {
  1057. this.isAdd0 = true;
  1058. this.operatingSta = "Browse";
  1059. this.rowDetail = row;
  1060. this.disable = true;
  1061. } else if (type == "1") {
  1062. this.isAdd1 = true;
  1063. this.pageStu = "check";
  1064. this.rowDetail = row;
  1065. this.disable = true;
  1066. } else if (type == "2") {
  1067. this.isAdd2 = true;
  1068. this.pageStu = "check";
  1069. this.rowDetail = row;
  1070. this.disable = true;
  1071. }
  1072. },
  1073. /** 修改按钮操作 */
  1074. handleUpdate(row) {
  1075. this.isList = false;
  1076. this.reset();
  1077. const id = row.id || this.ids;
  1078. getCustomers(id).then((response) => {
  1079. this.form = response.data;
  1080. this.form.oldName = response.data.name;
  1081. this.mkCmCustomersResponsiblePersonList =
  1082. response.data.mkCmCustomersResponsiblePersonList;
  1083. this.mkCmCustomersDepartmentList =
  1084. response.data.mkCmCustomersDepartmentList;
  1085. this.bosList = response.data.bos;
  1086. this.openState = "update";
  1087. });
  1088. },
  1089. /** Add修改按钮操作 */
  1090. handleUpdateAdd(row, type) {
  1091. if (type == "0") {
  1092. this.isAdd0 = true;
  1093. this.operatingSta = "Update";
  1094. this.rowDetail = row;
  1095. this.disable = false;
  1096. } else if (type == "1") {
  1097. this.isAdd1 = true;
  1098. this.pageStu = "update";
  1099. this.rowDetail = row;
  1100. this.disable = false;
  1101. } else if (type == "2") {
  1102. this.isAdd2 = true;
  1103. this.pageStu = "update";
  1104. this.rowDetail = row;
  1105. this.disable = false;
  1106. }
  1107. },
  1108. /** 提交按钮 */
  1109. submitForm() {
  1110. this.$refs["form"].validate(async (valid, obj) => {
  1111. if (valid) {
  1112. try {
  1113. let { code, msg } =
  1114. this.form.id != null
  1115. ? await updateCustomers(this.form)
  1116. : await addCustomers(this.form);
  1117. if (code == 200) {
  1118. this.$notify.success(msg);
  1119. this.reset();
  1120. this.getList(this.params, this.page);
  1121. this.isList = true;
  1122. }
  1123. } catch (error) {}
  1124. } else {
  1125. this.checkout();
  1126. }
  1127. });
  1128. },
  1129. /** 删除按钮操作 */
  1130. handleDelete(row) {
  1131. const codes = row.code || this.codes;
  1132. let ids = [];
  1133. if (
  1134. row.isTrusted != null &&
  1135. row.isTrusted != "" &&
  1136. row.isTrusted != undefined
  1137. ) {
  1138. ids = this.ids;
  1139. } else {
  1140. ids[0] = row.id;
  1141. }
  1142. this.$modal
  1143. .confirm('是否确认删除客户编码为"' + codes + '"的数据项?')
  1144. .then(function () {
  1145. return delCustomers(ids);
  1146. })
  1147. .then(() => {
  1148. this.getList(this.params, this.page);
  1149. this.$modal.msgSuccess("删除成功");
  1150. })
  1151. .catch(() => {});
  1152. },
  1153. /** Add删除按钮操作 */
  1154. handleDeleteAdd(row, type) {
  1155. let ids = [];
  1156. ids[0] = row.id;
  1157. if (type == "0") {
  1158. console.log(row, "row");
  1159. this.$modal
  1160. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1161. .then(function () {
  1162. return delContact(ids);
  1163. })
  1164. .then(() => {
  1165. getContactInfo(this.form.id).then((res) => {
  1166. this.mkCmCustomersContactList = res.data;
  1167. });
  1168. this.$modal.msgSuccess("删除成功");
  1169. })
  1170. .catch(() => {});
  1171. } else if (type == "1") {
  1172. this.$modal
  1173. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1174. .then(function () {
  1175. return delCustomersResponsiblePerson(ids);
  1176. })
  1177. .then(() => {
  1178. getCustomers(row.customersId).then((res) => {
  1179. this.mkCmCustomersResponsiblePersonList =
  1180. res.data.mkCmCustomersResponsiblePersonList;
  1181. });
  1182. this.$modal.msgSuccess("删除成功");
  1183. })
  1184. .catch(() => {});
  1185. } else if (type == "2") {
  1186. this.$modal
  1187. .confirm('是否确认删除序号为"' + row.index + '"的数据项?')
  1188. .then(function () {
  1189. return delCustomersDepartment(ids);
  1190. })
  1191. .then(() => {
  1192. getCustomers(row.customersId).then((res) => {
  1193. this.mkCmCustomersDepartmentList =
  1194. res.data.mkCmCustomersDepartmentList;
  1195. });
  1196. this.$modal.msgSuccess("删除成功");
  1197. })
  1198. .catch(() => {});
  1199. }
  1200. },
  1201. /** 客户联系人序号 */
  1202. rowMkCmCustomersContactIndex({ row, rowIndex }) {
  1203. row.index = rowIndex + 1;
  1204. },
  1205. /** 客户负责人序号 */
  1206. rowMkCmCustomersResponsiblePersonIndex({ row, rowIndex }) {
  1207. row.index = rowIndex + 1;
  1208. },
  1209. /** 客户科室序号 */
  1210. rowMkCmCustomersDepartmentIndex({ row, rowIndex }) {
  1211. row.index = rowIndex + 1;
  1212. },
  1213. /** 客户联系人添加按钮操作 */
  1214. handleAddMkCmCustomersContact() {
  1215. this.isList = false;
  1216. this.isAdd0 = true;
  1217. this.operatingSta = "Insert";
  1218. this.disable = false;
  1219. this.state = "1";
  1220. },
  1221. /** 客户负责人添加按钮操作 */
  1222. handleAddMkCmCustomersResponsiblePerson() {
  1223. this.isList = false;
  1224. this.isAdd1 = true;
  1225. this.pageStu = "add";
  1226. this.disable = false;
  1227. },
  1228. /** 客户科室添加按钮操作 */
  1229. handleAddMkCmCustomersDepartment() {
  1230. this.isList = false;
  1231. this.isAdd2 = true;
  1232. this.pageStu = "add";
  1233. this.disable = false;
  1234. },
  1235. /** 客户页签删除按钮操作 */
  1236. handleDeleteTab(type) {
  1237. let that = this;
  1238. if (type == "0") {
  1239. if (that.checkedMkCmCustomersContact.length == 0) {
  1240. that.$modal.msgError("请先选择要删除的客户联系人数据");
  1241. } else {
  1242. that.$modal
  1243. .confirm(
  1244. '是否确认删除序号为"' +
  1245. that.checkedMkCmCustomersContact +
  1246. '"的数据项?'
  1247. )
  1248. .then(function () {
  1249. return delContact(that.checkedMkCmCustomersContactIds);
  1250. })
  1251. .then(() => {
  1252. getContactInfo(that.form.id).then((res) => {
  1253. that.mkCmCustomersContactList = res.data;
  1254. });
  1255. that.$modal.msgSuccess("删除成功");
  1256. })
  1257. .catch((e) => {
  1258. console.log(e, "e");
  1259. });
  1260. }
  1261. } else if (type == "1") {
  1262. if (that.checkedMkCmCustomersResponsiblePerson.length == 0) {
  1263. that.$modal.msgError("请先选择要删除的客户负责人数据");
  1264. } else {
  1265. that.$modal
  1266. .confirm(
  1267. '是否确认删除序号为"' +
  1268. that.checkedMkCmCustomersResponsiblePerson +
  1269. '"的数据项?'
  1270. )
  1271. .then(function () {
  1272. return delCustomersResponsiblePerson(
  1273. that.checkedMkCmCustomersResponsiblePersonIds
  1274. );
  1275. })
  1276. .then(() => {
  1277. getCustomers(that.form.id).then((res) => {
  1278. that.mkCmCustomersResponsiblePersonList =
  1279. res.data.mkCmCustomersResponsiblePersonList;
  1280. });
  1281. that.$modal.msgSuccess("删除成功");
  1282. })
  1283. .catch(() => {});
  1284. }
  1285. } else if (type == "2") {
  1286. if (that.checkedMkCmCustomersDepartment.length == 0) {
  1287. that.$modal.msgError("请先选择要删除的客户科室数据");
  1288. } else {
  1289. that.$modal
  1290. .confirm(
  1291. '是否确认删除序号为"' +
  1292. that.checkedMkCmCustomersDepartment +
  1293. '"的数据项?'
  1294. )
  1295. .then(function () {
  1296. return delCustomersDepartment(
  1297. that.checkedMkCmCustomersDepartmentIds
  1298. );
  1299. })
  1300. .then(() => {
  1301. getCustomers(that.form.id).then((res) => {
  1302. that.mkCmCustomersDepartmentList =
  1303. res.data.mkCmCustomersDepartmentList;
  1304. });
  1305. that.$modal.msgSuccess("删除成功");
  1306. })
  1307. .catch(() => {});
  1308. }
  1309. }
  1310. },
  1311. /** 复选框选中数据 */
  1312. handleMkCmCustomersContactSelectionChange(selection) {
  1313. this.checkedMkCmCustomersContact = selection.map((item) => item.index);
  1314. this.checkedMkCmCustomersContactIds = selection.map((item) => item.id);
  1315. },
  1316. /** 复选框选中数据 */
  1317. handleMkCmCustomersResponsiblePersonSelectionChange(selection) {
  1318. this.checkedMkCmCustomersResponsiblePerson = selection.map(
  1319. (item) => item.index
  1320. );
  1321. this.checkedMkCmCustomersResponsiblePersonIds = selection.map(
  1322. (item) => item.id
  1323. );
  1324. },
  1325. /** 复选框选中数据 */
  1326. handleMkCmCustomersDepartmentSelectionChange(selection) {
  1327. this.checkedMkCmCustomersDepartment = selection.map((item) => item.index);
  1328. this.checkedMkCmCustomersDepartmentIds = selection.map((item) => item.id);
  1329. },
  1330. /** 导出按钮操作 */
  1331. handleExport() {
  1332. this.download(
  1333. "cm/customers/export",
  1334. {
  1335. ...this.params,
  1336. ...this.page,
  1337. },
  1338. `customers_${new Date().getTime()}.xlsx`
  1339. );
  1340. },
  1341. /** 标签页切换 */
  1342. handleClick(tab, event) {
  1343. // console.log(tab, event);
  1344. },
  1345. /** 必填项校验 */
  1346. checkout() {
  1347. if (
  1348. !(
  1349. this.form.orgName != null &&
  1350. this.form.orgName != "" &&
  1351. this.form.orgName != undefined &&
  1352. this.form.name != null &&
  1353. this.form.name != "" &&
  1354. this.form.name != undefined &&
  1355. this.form.classification != null &&
  1356. this.form.classification != "" &&
  1357. this.form.classification != undefined &&
  1358. this.form.taxType != null &&
  1359. this.form.taxType != "" &&
  1360. this.form.taxType != undefined &&
  1361. this.form.licenseNumber != null &&
  1362. this.form.licenseNumber != "" &&
  1363. this.form.licenseNumber != undefined
  1364. )
  1365. ) {
  1366. return this.$modal.msgError("基本信息中存在必填项未填!");
  1367. }
  1368. if (
  1369. !(
  1370. this.form.enterpriseType != null &&
  1371. this.form.enterpriseType != "" &&
  1372. this.form.enterpriseType != undefined &&
  1373. this.form.enterpriseName != null &&
  1374. this.form.enterpriseName != "" &&
  1375. this.form.enterpriseName != undefined
  1376. )
  1377. ) {
  1378. return this.$modal.msgError("资质信息中存在必填项未填!");
  1379. }
  1380. },
  1381. //导入模板-科室
  1382. importTemplateBtnDept(){
  1383. this.download('/cm/customersDepartment/importTemplate', {
  1384. }, `客户科室导入模板_${new Date().getTime()}.xlsx`)
  1385. },
  1386. //上传文件-科室
  1387. async importDataBtnDept(file) {
  1388. try {
  1389. this.$modal.loading("加载中......");
  1390. let formData = new FormData();
  1391. formData.append("file", file[0].raw);
  1392. let { code, msg } = await importDataDept(formData);
  1393. if (code == 200) {
  1394. this.$notify.success({ message: msg });
  1395. let { setVisible } = this.$refs.batchImportDept;
  1396. setVisible(false);
  1397. this.resetList();
  1398. }
  1399. } catch (error) {
  1400. console.log(error);
  1401. } finally {
  1402. this.$modal.closeLoading();
  1403. }
  1404. },
  1405. //商机跳转
  1406. btnBoView(row){
  1407. this.$router.push(`/basic/spd/bo/basic/details/${row.id}`);
  1408. }
  1409. },
  1410. };
  1411. </script>
  1412. <style scoped lang="scss">
  1413. .el-card {
  1414. width: calc(100% - 32px);
  1415. height: calc(100vh - 32px);
  1416. margin: 16px;
  1417. padding: 16px;
  1418. border-radius: 8px;
  1419. overflow-y: auto;
  1420. overflow-x: hidden;
  1421. }
  1422. </style>