index.vue 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351
  1. <template>
  2. <div>
  3. <el-row v-show="isShow">
  4. <el-col :span="5">
  5. <div class="box">
  6. <el-scrollbar>
  7. <basic-container>
  8. <avue-tree :option="treeOption" :data="customTypeData" @node-click="nodeClick">
  9. <template slot="addBtn">
  10. <el-tooltip class="item" effect="dark" content="新建分类" placement="top">
  11. <i class="el-icon-setting" style="font-size:18px;line-height: 30px;width: 20px;padding: 0 10px;"
  12. @click="corpTypeVisible = true"></i>
  13. </el-tooltip>
  14. </template>
  15. </avue-tree>
  16. </basic-container>
  17. </el-scrollbar>
  18. </div>
  19. </el-col>
  20. <el-col :span="19">
  21. <basic-container class="page-crad">
  22. <!-- :on-change="handleChange" -->
  23. <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
  24. id="out-table" :header-cell-class-name="headerClassName" :search.sync="search" :before-open="beforeOpen"
  25. v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
  26. @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
  27. @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
  28. @resetColumn="resetColumnTwo('crud', 'option', 'optionBack', 304)"
  29. @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 304)" @on-load="onLoad">
  30. <template slot="code" slot-scope="scope">
  31. <avue-text-ellipsis :text="scope.row.code" :height="30" use-tooltip placement="top">
  32. <small slot="more">...</small>
  33. </avue-text-ellipsis>
  34. </template>
  35. <template slot="uscc" slot-scope="scope">
  36. <avue-text-ellipsis :text="scope.row.uscc" :height="30" use-tooltip placement="top">
  37. <small slot="more">...</small>
  38. </avue-text-ellipsis>
  39. </template>
  40. <template slot="cnName" slot-scope="scope">
  41. <div style="color: #1e9fff;cursor: pointer;" @click.stop="editOpen(scope.row)">
  42. <avue-text-ellipsis :text="scope.row.cnName" :height="30" use-tooltip placement="top">
  43. <small slot="more">...</small>
  44. </avue-text-ellipsis>
  45. </div>
  46. </template>
  47. <template slot="enName" slot-scope="scope">
  48. <avue-text-ellipsis :text="scope.row.enName" :height="30" use-tooltip placement="top">
  49. <small slot="more">...</small>
  50. </avue-text-ellipsis>
  51. </template>
  52. <template slot="cnAddr" slot-scope="scope">
  53. <avue-text-ellipsis :text="scope.row.cnAddr" :height="30" use-tooltip placement="top">
  54. <small slot="more">...</small>
  55. </avue-text-ellipsis>
  56. </template>
  57. <template slot="shortName" slot-scope="scope">
  58. <avue-text-ellipsis :text="scope.row.shortName" :height="30" use-tooltip placement="top">
  59. <small slot="more">...</small>
  60. </avue-text-ellipsis>
  61. </template>
  62. <template slot="tel" slot-scope="scope">
  63. <avue-text-ellipsis :text="scope.row.tel" :height="30" use-tooltip placement="top">
  64. <small slot="more">...</small>
  65. </avue-text-ellipsis>
  66. </template>
  67. <template slot="fax" slot-scope="scope">
  68. <avue-text-ellipsis :text="scope.row.fax" :height="30" use-tooltip placement="top">
  69. <small slot="more">...</small>
  70. </avue-text-ellipsis>
  71. </template>
  72. <template slot="adminProfiles" slot-scope="scope">
  73. <avue-text-ellipsis :text="scope.row.adminProfiles" :height="30" use-tooltip placement="top">
  74. <small slot="more">...</small>
  75. </avue-text-ellipsis>
  76. </template>
  77. <template slot="seaEmail" slot-scope="scope">
  78. <avue-text-ellipsis :text="scope.row.seaEmail" :height="30" use-tooltip placement="top">
  79. <small slot="more">...</small>
  80. </avue-text-ellipsis>
  81. </template>
  82. <template slot="airEmail" slot-scope="scope">
  83. <avue-text-ellipsis :text="scope.row.airEmail" :height="30" use-tooltip placement="top">
  84. <small slot="more">...</small>
  85. </avue-text-ellipsis>
  86. </template>
  87. <template slot="unCode" slot-scope="scope">
  88. <avue-text-ellipsis :text="scope.row.unCode" :height="30" use-tooltip placement="top">
  89. <small slot="more">...</small>
  90. </avue-text-ellipsis>
  91. </template>
  92. <template slot="customsCode" slot-scope="scope">
  93. <avue-text-ellipsis :text="scope.row.customsCode" :height="30" use-tooltip placement="top">
  94. <small slot="more">...</small>
  95. </avue-text-ellipsis>
  96. </template>
  97. <template slot="scacCode" slot-scope="scope">
  98. <avue-text-ellipsis :text="scope.row.scacCode" :height="30" use-tooltip placement="top">
  99. <small slot="more">...</small>
  100. </avue-text-ellipsis>
  101. </template>
  102. <template slot="email" slot-scope="scope">
  103. <avue-text-ellipsis :text="scope.row.email" :height="30" use-tooltip placement="top">
  104. <small slot="more">...</small>
  105. </avue-text-ellipsis>
  106. </template>
  107. <template slot="enAddr" slot-scope="scope">
  108. <avue-text-ellipsis :text="scope.row.enAddr" :height="30" use-tooltip placement="top">
  109. <small slot="more">...</small>
  110. </avue-text-ellipsis>
  111. </template>
  112. <template slot="menuLeft">
  113. <el-button type="warning" size="small" icon="el-icon-printer" @click="excelBox = true">导入
  114. </el-button>
  115. <el-button type="success" size="small" @click="handleExport" icon="el-icon-printer">导出</el-button>
  116. </template>
  117. <template slot-scope="{ row, index }" slot="menu">
  118. <el-button v-if="row.status == 1" type="text" style="color: #85e967" size="small"
  119. @click.stop="statusfun(row.id,0)">
  120. 启用
  121. </el-button>
  122. <el-button v-if="row.status == 0" type="text" style="color: #e83c3a" size="small"
  123. @click.stop="statusfun(row.id,1)">
  124. 停用
  125. </el-button>
  126. <!--<el-button type="text" size="small" @click.stop="editOpen(row)">-->
  127. <!-- 编辑-->
  128. <!--</el-button>-->
  129. <el-button type="text" size="small" @click.stop="rowDel(row, index)" :disabled="row.status > 0">
  130. 删除
  131. </el-button>
  132. </template>
  133. </avue-crud>
  134. </basic-container>
  135. </el-col>
  136. </el-row>
  137. <detailPage v-if="!isShow" ref="detail" @goBack="goBack" @copyOrder="copyOrder" :detailData="detailData"></detailPage>
  138. <!--类别弹窗-->
  139. <el-dialog title="类别" :visible.sync="corpTypeVisible" append-to-body width="60%" :before-close="corpTypeClose">
  140. <div>
  141. <bcorpstypedefine></bcorpstypedefine>
  142. </div>
  143. <span slot="footer" class="dialog-footer">
  144. <el-button @click="corpTypeVisible = false">取 消</el-button>
  145. <el-button type="primary" @click="corpTypeVisible = false">确 定</el-button>
  146. </span>
  147. </el-dialog>
  148. <el-dialog title="导入往来单位" append-to-body :visible.sync="excelBox" width="555px" :close-on-click-modal="false"
  149. v-dialog-drag>
  150. <avue-form :option="excelOption" v-model="excelForm" :table-loading="excelLoading" :upload-before="uploadBefore"
  151. :upload-after="onSuccess">
  152. <template slot="excelTemplate">
  153. <el-button type="primary" @click="handleGet">
  154. 点击下载<i class="el-icon-download el-icon--right"></i>
  155. </el-button>
  156. </template>
  157. </avue-form>
  158. <p style="text-align: center;color: #DC0505">
  159. 温馨提示 第一次导入时请先下载模板
  160. </p>
  161. </el-dialog>
  162. </div>
  163. </template>
  164. <script>
  165. import { getToken } from "@/util/auth";
  166. import detailPage from "./detailsPage";
  167. import { getBcorpsList, getBcorpsDetail, addBcorps, updateBcorps, removeBcorps, downLoadBcorpsTemplate } from "@/api/iosBasicData/bcorps";
  168. import { mapGetters } from "vuex";
  169. import { bcorpstypedefineList } from "@/api/iosBasicData/bcorpstypedefine"
  170. import bcorpstypedefine from "@/views/iosBasicData/bcorps/bcorpstypedefine.vue";
  171. export default {
  172. components: {
  173. detailPage,
  174. bcorpstypedefine
  175. },
  176. data() {
  177. return {
  178. headers: { "Blade-Auth": "Bearer " + getToken() },
  179. // 类别弹窗的开启
  180. corpTypeVisible: false,
  181. treeOption: {
  182. nodeKey: "id",
  183. lazy: true,
  184. treeLoad: function (node, resolve) {
  185. const parentId = node.level === 0 ? 0 : node.data.id;
  186. },
  187. addBtn: false,
  188. menu: false,
  189. size: "small",
  190. props: {
  191. labelText: "标题",
  192. label: "cnName",
  193. value: "id",
  194. children: "children"
  195. }
  196. },
  197. excelForm: {},
  198. search: {},
  199. excelLoading: false,
  200. excelOption: {
  201. submitBtn: false,
  202. emptyBtn: false,
  203. column: [
  204. {
  205. label: "模板下载",
  206. prop: "excelTemplate",
  207. formslot: true,
  208. span: 24
  209. },
  210. {
  211. label: "模板上传",
  212. prop: "excelFile",
  213. type: "upload",
  214. drag: true,
  215. loadText: "模板上传中,请稍等",
  216. span: 24,
  217. propsHttp: {
  218. res: "data"
  219. },
  220. tip: "请上传 .xls,.xlsx 标准格式文件",
  221. action: "/api/blade-los/bcorps/importBCorps"
  222. }
  223. ]
  224. },
  225. // 客户类别数据
  226. customTypeData: [],
  227. excelBox: false,
  228. form: {},
  229. query: {},
  230. detailData: {},
  231. isShow: true,
  232. loading: true,
  233. page: {
  234. pageSize: 10,
  235. currentPage: 1,
  236. total: 0,
  237. pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
  238. },
  239. selectionList: [],
  240. option: {},
  241. optionBack: {
  242. height: 'auto',
  243. calcHeight: 30,
  244. tip: false,
  245. searchIcon: true,
  246. searchIndex: 3,
  247. searchShow: true,
  248. searchMenuSpan: 6,
  249. menuWidth:100,
  250. border: true,
  251. index: true,
  252. viewBtn: true,
  253. selection: true,
  254. addBtnText: '新建客户',
  255. dialogClickModal: false,
  256. column: [
  257. {
  258. label: "编码",
  259. prop: "code",
  260. width: "180",
  261. search: true,
  262. rules: [{
  263. required: true,
  264. message: "请输入单位编码",
  265. trigger: "blur"
  266. }]
  267. },
  268. {
  269. label: "中文名称",
  270. prop: "cnName",
  271. width: "180",
  272. search: true,
  273. rules: [{
  274. required: true,
  275. message: "请输入中文名称",
  276. trigger: "blur"
  277. }]
  278. },
  279. {
  280. label: "英文名称",
  281. prop: "enName",
  282. width: "180",
  283. search: true,
  284. rules: [{
  285. required: true,
  286. message: "请输入英文名称",
  287. trigger: "blur"
  288. }]
  289. },
  290. {
  291. label: "统一社会信用代码",
  292. prop: "uscc",
  293. width: 160,
  294. rules: [{
  295. required: true,
  296. message: "请输入统一社会信用代码",
  297. trigger: "blur"
  298. }]
  299. },
  300. {
  301. label: "首字母",
  302. prop: "initials",
  303. rules: [{
  304. required: true,
  305. message: "请输入首字母",
  306. trigger: "blur"
  307. }]
  308. },
  309. {
  310. label: "简称",
  311. prop: "shortName",
  312. width: "180",
  313. rules: [{
  314. required: true,
  315. message: "请输入简称",
  316. trigger: "blur"
  317. }]
  318. },
  319. {
  320. label: "国家代码",
  321. prop: "cntyCode",
  322. rules: [{
  323. required: true,
  324. message: "请输入国家代码",
  325. trigger: "blur"
  326. }]
  327. },
  328. {
  329. label: "国家名称",
  330. prop: "cntyName",
  331. search: true,
  332. rules: [{
  333. required: true,
  334. message: "请输入国家名称",
  335. trigger: "blur"
  336. }]
  337. },
  338. {
  339. label: "省、州",
  340. prop: "province",
  341. rules: [{
  342. required: true,
  343. message: "请输入省、州",
  344. trigger: "blur"
  345. }]
  346. },
  347. {
  348. label: "城市",
  349. prop: "city",
  350. rules: [{
  351. required: true,
  352. message: "请输入城市",
  353. trigger: "blur"
  354. }]
  355. },
  356. {
  357. label: "中文地址",
  358. prop: "cnAddr",
  359. search: true,
  360. rules: [{
  361. required: true,
  362. message: "请输入中文地址",
  363. trigger: "blur"
  364. }]
  365. },
  366. {
  367. label: "英文地址",
  368. prop: "enAddr",
  369. search: true,
  370. rules: [{
  371. required: true,
  372. message: "请输入英文地址",
  373. trigger: "blur"
  374. }]
  375. },
  376. {
  377. label: "电话",
  378. prop: "tel",
  379. width: "120",
  380. search: true,
  381. rules: [{
  382. required: true,
  383. message: "请输入电话",
  384. trigger: "blur"
  385. }]
  386. },
  387. {
  388. label: "传真",
  389. prop: "fax",
  390. width: "120",
  391. rules: [{
  392. required: true,
  393. message: "请输入传真",
  394. trigger: "blur"
  395. }]
  396. },
  397. {
  398. label: "电子邮箱",
  399. prop: "email",
  400. width: "160",
  401. rules: [{
  402. required: true,
  403. message: "请输入电子邮箱",
  404. trigger: "blur"
  405. }]
  406. },
  407. {
  408. label: "负责人姓名",
  409. prop: "mgrName",
  410. width: 100,
  411. rules: [{
  412. required: true,
  413. message: "请输入负责人姓名",
  414. trigger: "blur"
  415. }]
  416. },
  417. {
  418. label: "联系人姓名",
  419. prop: "attnName",
  420. width: 100,
  421. rules: [{
  422. required: true,
  423. message: "请输入联系人姓名",
  424. trigger: "blur"
  425. }]
  426. },
  427. {
  428. label: "联系人电话",
  429. prop: "attnTel",
  430. width: 100,
  431. rules: [{
  432. required: true,
  433. message: "请输入联系人电话",
  434. trigger: "blur"
  435. }]
  436. },
  437. {
  438. label: "客户来源类别",
  439. prop: "sourceType",
  440. width: 100,
  441. rules: [{
  442. required: true,
  443. message: "请输入客户来源类别",
  444. trigger: "blur"
  445. }]
  446. },
  447. {
  448. label: "部门 Id",
  449. prop: "deptId",
  450. hide: true,
  451. display: false,
  452. },
  453. {
  454. label: "部门名称",
  455. prop: "deptName",
  456. rules: [{
  457. required: true,
  458. message: "请输入部门名称",
  459. trigger: "blur"
  460. }]
  461. },
  462. {
  463. label: "业务员 Id",
  464. prop: "salesId",
  465. hide: true,
  466. display: false,
  467. },
  468. {
  469. label: "业务员姓名",
  470. prop: "salesName",
  471. width: 100,
  472. rules: [{
  473. required: true,
  474. message: "请输入业务员姓名",
  475. trigger: "blur"
  476. }]
  477. },
  478. {
  479. label: "所属单位 Id",
  480. prop: "corpId",
  481. hide: true,
  482. display: false,
  483. },
  484. {
  485. label: "所属单位名称",
  486. prop: "corpName",
  487. width: 100,
  488. rules: [{
  489. required: true,
  490. message: "请输入所属单位名称",
  491. trigger: "blur"
  492. }]
  493. },
  494. {
  495. label: "客户类型",
  496. prop: "corpTypeName",
  497. rules: [{
  498. required: true,
  499. message: "请输入客户类型",
  500. trigger: "blur"
  501. }]
  502. },
  503. {
  504. label: "分管员",
  505. prop: "adminProfiles",
  506. width: "100",
  507. rules: [{
  508. required: true,
  509. message: "请输入分管员",
  510. trigger: "blur"
  511. }]
  512. },
  513. {
  514. label: "海运邮箱",
  515. prop: "seaEmail",
  516. width: "160",
  517. rules: [{
  518. required: true,
  519. message: "请输入海运邮箱",
  520. trigger: "blur"
  521. }]
  522. },
  523. {
  524. label: "空运邮箱",
  525. prop: "airEmail",
  526. width: "160",
  527. rules: [{
  528. required: true,
  529. message: "请输入空运邮箱",
  530. trigger: "blur"
  531. }]
  532. },
  533. {
  534. label: "国际编码",
  535. prop: "unCode",
  536. width: "160",
  537. rules: [{
  538. required: true,
  539. message: "请输入国际编码",
  540. trigger: "blur"
  541. }]
  542. },
  543. {
  544. label: "海关编码",
  545. prop: "customsCode",
  546. width: "160",
  547. rules: [{
  548. required: true,
  549. message: "请输入海关编码",
  550. trigger: "blur"
  551. }]
  552. },
  553. {
  554. label: "SCAC 代码",
  555. prop: "scacCode",
  556. width: "160",
  557. rules: [{
  558. required: true,
  559. message: "请输入SCAC 代码",
  560. trigger: "blur"
  561. }]
  562. },
  563. {
  564. label: "iGenZong 代码",
  565. prop: "igenzongCode",
  566. width: 120,
  567. rules: [{
  568. required: true,
  569. message: "请输入iGenZong 代码",
  570. trigger: "blur"
  571. }]
  572. },
  573. {
  574. label: "美线约号",
  575. prop: "amLineAgreementno",
  576. rules: [{
  577. required: true,
  578. message: "请输入美线约号",
  579. trigger: "blur"
  580. }]
  581. },
  582. {
  583. label: "船公司代码",
  584. prop: "carrierCode",
  585. width: 100,
  586. rules: [{
  587. required: true,
  588. message: "请输入船公司代码",
  589. trigger: "blur"
  590. }]
  591. },
  592. {
  593. label: "场站三字码",
  594. prop: "cyCode",
  595. width: 100,
  596. rules: [{
  597. required: true,
  598. message: "请输入场站三字码",
  599. trigger: "blur"
  600. }]
  601. },
  602. {
  603. label: "CMA Laracode",
  604. prop: "cmaLaracode",
  605. width: 120,
  606. rules: [{
  607. required: true,
  608. message: "请输入CMA Laracode",
  609. trigger: "blur"
  610. }]
  611. },
  612. {
  613. label: "CMA Location",
  614. prop: "cmaLocation",
  615. width: 120,
  616. rules: [{
  617. required: true,
  618. message: "请输入CMA Location",
  619. trigger: "blur"
  620. }]
  621. },
  622. {
  623. label: "ZIM CUCC",
  624. prop: "zimCucc",
  625. width: 120,
  626. rules: [{
  627. required: true,
  628. message: "请输入ZIM CUCC",
  629. trigger: "blur"
  630. }]
  631. },
  632. {
  633. label: "关贸云编码",
  634. prop: "gmyCode",
  635. width: 100,
  636. rules: [{
  637. required: true,
  638. message: "请输入关贸云编码",
  639. trigger: "blur"
  640. }]
  641. },
  642. {
  643. label: "INTRRA ICUA",
  644. prop: "inttraIcua",
  645. width: 100,
  646. rules: [{
  647. required: true,
  648. message: "请输入INTRRA ICUA",
  649. trigger: "blur"
  650. }]
  651. },
  652. {
  653. label: "INTRRA ICUA 联系人",
  654. prop: "inttraIcuaAttn",
  655. width: 160,
  656. rules: [{
  657. required: true,
  658. message: "请输入INTRRA ICUA 联系人",
  659. trigger: "blur"
  660. }]
  661. },
  662. {
  663. label: "INTRRA ICUA Email",
  664. prop: "inttraIcuaEmail",
  665. width: 140,
  666. rules: [{
  667. required: true,
  668. message: "请输入INTRRA ICUA Email",
  669. trigger: "blur"
  670. }]
  671. },
  672. {
  673. label: "EDI 格式名称",
  674. prop: "ediFmt",
  675. width: 120,
  676. rules: [{
  677. required: true,
  678. message: "请输入EDI 格式名称",
  679. trigger: "blur"
  680. }]
  681. },
  682. {
  683. label: "EDI FTP 地址",
  684. prop: "ediFtp",
  685. width: 100,
  686. rules: [{
  687. required: true,
  688. message: "请输入EDI FTP 地址",
  689. trigger: "blur"
  690. }]
  691. },
  692. {
  693. label: "EDI 邮箱",
  694. prop: "ediEmail",
  695. rules: [{
  696. required: true,
  697. message: "请输入EDI 邮箱",
  698. trigger: "blur"
  699. }]
  700. },
  701. {
  702. label: "是否 VIP 客户",
  703. prop: "vip",
  704. width: 120,
  705. type: 'select',
  706. dicData: [{
  707. label: '否',
  708. value: 0
  709. }, {
  710. label: '是',
  711. value: 1
  712. }],
  713. rules: [{
  714. required: true,
  715. message: "请输入是否 VIP 客户,0=否,1=是",
  716. trigger: "blur"
  717. }]
  718. },
  719. {
  720. label: "VIP 等级",
  721. prop: "vipLevel",
  722. rules: [{
  723. required: true,
  724. message: "请输入VIP 等级",
  725. trigger: "blur"
  726. }]
  727. },
  728. {
  729. label: "是否已签约",
  730. prop: "isSigned",
  731. type: 'select',
  732. width: 100,
  733. dicData: [{
  734. label: '否',
  735. value: 0
  736. }, {
  737. label: '是',
  738. value: 1
  739. }],
  740. rules: [{
  741. required: true,
  742. message: "请输入是否已签约,0=否,1=是",
  743. trigger: "blur"
  744. }]
  745. },
  746. {
  747. label: "授信状态",
  748. prop: "creditStatus",
  749. rules: [{
  750. required: true,
  751. message: "请输入授信状态",
  752. trigger: "blur"
  753. }]
  754. },
  755. {
  756. label: "授信等级",
  757. prop: "creditLevel",
  758. rules: [{
  759. required: true,
  760. message: "请输入授信等级,A=A级,B=B级,B+=B+级,B-=B-级,C=C级,D=黑名单",
  761. trigger: "blur"
  762. }]
  763. },
  764. {
  765. label: "授信天数",
  766. prop: "creditDay",
  767. rules: [{
  768. required: true,
  769. message: "请输入授信天数",
  770. trigger: "blur"
  771. }]
  772. },
  773. {
  774. label: "授信币种",
  775. prop: "creditCur",
  776. rules: [{
  777. required: true,
  778. message: "请输入授信币种",
  779. trigger: "blur"
  780. }]
  781. },
  782. {
  783. label: "授信额度",
  784. prop: "creditGrant",
  785. rules: [{
  786. required: true,
  787. message: "请输入授信额度",
  788. trigger: "blur"
  789. }]
  790. },
  791. {
  792. label: "授信利率",
  793. prop: "creditRate",
  794. rules: [{
  795. required: true,
  796. message: "请输入授信利率",
  797. trigger: "blur"
  798. }]
  799. },
  800. {
  801. label: "付款方式",
  802. prop: "paymentType",
  803. rules: [{
  804. required: true,
  805. message: "请输入付款方式",
  806. trigger: "blur"
  807. }]
  808. },
  809. {
  810. label: "账期设置",
  811. prop: "accountPeriodType",
  812. rules: [{
  813. required: true,
  814. message: "请输入账期设置",
  815. trigger: "blur"
  816. }]
  817. },
  818. {
  819. label: "最大欠款额",
  820. prop: "maxArrears",
  821. width: 100,
  822. rules: [{
  823. required: true,
  824. message: "请输入最大欠款额",
  825. trigger: "blur"
  826. }]
  827. },
  828. {
  829. label: "协议号",
  830. prop: "agreementNo",
  831. rules: [{
  832. required: true,
  833. message: "请输入协议号",
  834. trigger: "blur"
  835. }]
  836. },
  837. {
  838. label: "绩效系数",
  839. prop: "performanceRate",
  840. rules: [{
  841. required: true,
  842. message: "请输入绩效系数",
  843. trigger: "blur"
  844. }]
  845. },
  846. {
  847. label: "增值税率",
  848. prop: "taxRate",
  849. rules: [{
  850. required: true,
  851. message: "请输入增值税率",
  852. trigger: "blur"
  853. }]
  854. },
  855. {
  856. label: "存在",
  857. prop: "isPs",
  858. type: 'select',
  859. dicData: [{
  860. label: '否',
  861. value: 0
  862. }, {
  863. label: '是',
  864. value: 1
  865. }],
  866. rules: [{
  867. required: true,
  868. message: "请输入存在 PS 0=否 1=是",
  869. trigger: "blur"
  870. }]
  871. },
  872. {
  873. label: "利润分成比例",
  874. prop: "psRate",
  875. width: 100,
  876. rules: [{
  877. required: true,
  878. message: "请输入PS(利润分成) 比例",
  879. trigger: "blur"
  880. }]
  881. },
  882. {
  883. label: "允许付大于收",
  884. prop: "psAllowLargeCredit",
  885. type: 'select',
  886. width: 100,
  887. dicData: [{
  888. label: '否',
  889. value: 0
  890. }, {
  891. label: '是',
  892. value: 1
  893. }],
  894. rules: [{
  895. required: true,
  896. message: "请输入PS允许付大于收 0=否 1=是",
  897. trigger: "blur"
  898. }]
  899. },
  900. // {
  901. // label: "详情,主要用于提单信息",
  902. // prop: "details",
  903. // rules: [{
  904. // required: true,
  905. // message: "请输入详情,主要用于提单信息",
  906. // trigger: "blur"
  907. // }]
  908. // },
  909. // {
  910. // label: "JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",
  911. // prop: "extendedData",
  912. // rules: [{
  913. // required: true,
  914. // message: "请输入JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",
  915. // trigger: "blur"
  916. // }]
  917. // },
  918. {
  919. label: "版本",
  920. prop: "version",
  921. hide: true,
  922. display: false,
  923. },
  924. {
  925. label: "状态",
  926. prop: "status",
  927. type: 'select',
  928. dicData: [{
  929. label: '启用',
  930. value: 0
  931. }, {
  932. label: '停用',
  933. value: 1
  934. }],
  935. rules: [{
  936. required: true,
  937. message: "请输入状态",
  938. trigger: "blur"
  939. }]
  940. },
  941. {
  942. label: "主键",
  943. prop: "id",
  944. hide: true,
  945. display: false,
  946. },
  947. {
  948. label: "分公司 Id",
  949. prop: "branchId",
  950. hide: true,
  951. display: false,
  952. },
  953. {
  954. label: "创建人 Id",
  955. prop: "createUser",
  956. hide: true,
  957. display: false,
  958. },
  959. {
  960. label: "创建人",
  961. prop: "createUserName",
  962. display: false,
  963. },
  964. {
  965. label: "创建部门 Id",
  966. prop: "createDept",
  967. hide: true,
  968. display: false,
  969. },
  970. {
  971. label: "创建部门",
  972. prop: "createDeptName",
  973. display: false,
  974. },
  975. {
  976. label: "创建时间",
  977. prop: "createTime",
  978. width: 160,
  979. display: false,
  980. },
  981. {
  982. label: "修改人 Id",
  983. prop: "updateUser",
  984. hide: true,
  985. display: false,
  986. },
  987. {
  988. label: "修改人",
  989. prop: "updateUserName",
  990. display: false,
  991. },
  992. {
  993. label: "修改时间",
  994. prop: "updateTime",
  995. width: 160,
  996. display: false,
  997. },
  998. {
  999. label: "是否已删除(0 否 1是)",
  1000. prop: "isDeleted",
  1001. hide: true,
  1002. display: false,
  1003. },
  1004. {
  1005. label: "备注",
  1006. prop: "remarks",
  1007. span: 24,
  1008. type: 'textarea',
  1009. width: "180",
  1010. slot: true,
  1011. minRows: 3,
  1012. },
  1013. ]
  1014. },
  1015. data: []
  1016. };
  1017. },
  1018. computed: {
  1019. ...mapGetters(["permission"]),
  1020. permissionList() {
  1021. return {
  1022. // addBtn: this.vaildData(this.permission.bcorps_add, false),
  1023. viewBtn: this.vaildData(this.permission.bcorps_view, false),
  1024. delBtn: this.vaildData(this.permission.bcorps_delete, false),
  1025. editBtn: this.vaildData(this.permission.bcorps_edit, false)
  1026. };
  1027. },
  1028. ids() {
  1029. let ids = [];
  1030. this.selectionList.forEach(ele => {
  1031. ids.push(ele.id);
  1032. });
  1033. return ids.join(",");
  1034. }
  1035. },
  1036. async created() {
  1037. this.option = await this.getColumnData(this.getColumnName(304), this.optionBack);
  1038. this.bcorpstypedefineListfun()
  1039. },
  1040. methods: {
  1041. // 禁用启用按钮
  1042. statusfun(id,status){
  1043. this.$confirm("确定将选择数据更改状态?", {
  1044. confirmButtonText: "确定",
  1045. cancelButtonText: "取消",
  1046. type: "warning"
  1047. }).then(()=>{
  1048. getBcorpsDetail(id).then(res => {
  1049. let obj = res.data.data;
  1050. obj.status = status
  1051. updateBcorps(obj).then(res=>{
  1052. this.onLoad(this.page);
  1053. this.$message({
  1054. type: "success",
  1055. message: "操作成功!"
  1056. });
  1057. })
  1058. });
  1059. })
  1060. },
  1061. // 导入
  1062. // handleChange(file, fileLis) {
  1063. // console.log('daoru');
  1064. // // this.$Export.xlsx(file.raw)
  1065. // // .then(data => {
  1066. // // this.data=data.results;
  1067. // // })
  1068. // },
  1069. // 导出
  1070. handleExport() {
  1071. var condition = ''
  1072. for (const key in this.search) {
  1073. var value = this.search[key]
  1074. if (value) {
  1075. condition += `&${key}=${this.search[key]}`
  1076. }
  1077. }
  1078. this.$confirm('是否导出客户资料?', '提示', {
  1079. confirmButtonText: '确定',
  1080. cancelButtonText: '取消',
  1081. type: 'warning'
  1082. }).then(() => {
  1083. window.open(
  1084. `/api/blade-los/bcorps/exportBCorps?${this.website.tokenHeader
  1085. }=${getToken()}${condition}`
  1086. );
  1087. }).catch(() => {
  1088. this.$message({
  1089. type: 'info',
  1090. message: '已取消' //
  1091. });
  1092. })
  1093. },
  1094. // 下载模板
  1095. handleGet() {
  1096. window.open(
  1097. `/api/blade-los/bcorps/exportBCorps/template?${this.website.tokenHeader
  1098. }=${getToken()}`
  1099. );
  1100. },
  1101. // 上传成功
  1102. onSuccess(res, done, loading, column) {
  1103. this.excelBox = false;
  1104. this.$message.success("导入成功!");
  1105. loading = false;
  1106. this.onLoad(this.page);
  1107. done();
  1108. },
  1109. uploadBefore(file, done, loading) {
  1110. done();
  1111. loading = true;
  1112. },
  1113. onError(err, file, fileList) {
  1114. err += ''
  1115. // console.log(JSON.stringify(err.match(/{(\S*)}/)[1]));
  1116. var data = err.match(/{(\S*)}/)[1]
  1117. this.$message.error(data.split("msg\":")[1]);
  1118. },
  1119. // 左侧点击回调
  1120. nodeClick(data) {
  1121. // var reqiestData = this.search;
  1122. // // console.log(data, 904)
  1123. // reqiestData.corpType = data.id
  1124. // if (this.search.corpType == null) {
  1125. this.search.corpType = data.id
  1126. // } else {
  1127. // this.search.corpType = null
  1128. // }
  1129. this.onLoad(this.page, this.search);
  1130. // this.onLoad(this.page, reqiestData);
  1131. },
  1132. // 获取客户类别
  1133. bcorpstypedefineListfun() {
  1134. bcorpstypedefineList(1,30).then(res => {
  1135. this.customTypeData = res.data.data.records
  1136. })
  1137. },
  1138. editOpen(row) {
  1139. this.detailData = {
  1140. id: row.id
  1141. };
  1142. this.isShow = false;
  1143. },
  1144. rowSave(row, done, loading) {
  1145. addBcorps(row).then(() => {
  1146. this.onLoad(this.page);
  1147. this.$message({
  1148. type: "success",
  1149. message: "操作成功!"
  1150. });
  1151. done();
  1152. }, error => {
  1153. loading();
  1154. window.console.log(error);
  1155. });
  1156. },
  1157. rowUpdate(row, index, done, loading) {
  1158. updateBcorps(row).then(() => {
  1159. this.onLoad(this.page);
  1160. this.$message({
  1161. type: "success",
  1162. message: "操作成功!"
  1163. });
  1164. done();
  1165. }, error => {
  1166. loading();
  1167. console.log(error);
  1168. });
  1169. },
  1170. rowDel(row) {
  1171. if (row.status === 1) {
  1172. this.$confirm("确定将选择数据删除?", {
  1173. confirmButtonText: "确定",
  1174. cancelButtonText: "取消",
  1175. type: "warning"
  1176. })
  1177. .then(() => {
  1178. return removeBcorps(row.id);
  1179. })
  1180. .then(() => {
  1181. this.onLoad(this.page);
  1182. this.$message({
  1183. type: "success",
  1184. message: "操作成功!"
  1185. });
  1186. });
  1187. } else {
  1188. this.$message({
  1189. message: '非禁用状态无法删除',
  1190. type: 'warning'
  1191. });
  1192. }
  1193. },
  1194. handleDelete() {
  1195. if (this.selectionList.length === 0) {
  1196. this.$message.warning("请选择至少一条数据");
  1197. return;
  1198. }
  1199. this.$confirm("确定将选择数据删除?", {
  1200. confirmButtonText: "确定",
  1201. cancelButtonText: "取消",
  1202. type: "warning"
  1203. })
  1204. .then(() => {
  1205. return removeBcorps(this.ids);
  1206. })
  1207. .then(() => {
  1208. this.onLoad(this.page);
  1209. this.$message({
  1210. type: "success",
  1211. message: "操作成功!"
  1212. });
  1213. this.$refs.crud.toggleSelection();
  1214. });
  1215. },
  1216. beforeOpen(done, type) {
  1217. this.detailData = {};
  1218. if (this.search.corpType != null) {
  1219. this.detailData.corpType = this.search.corpType
  1220. }
  1221. this.isShow = false;
  1222. // if (["edit", "view"].includes(type)) {
  1223. // getBcorpsDetail(this.form.id).then(res => {
  1224. // this.form = res.data.data;
  1225. // });
  1226. // }
  1227. // done();
  1228. },
  1229. searchReset() {
  1230. this.query = {};
  1231. this.onLoad(this.page);
  1232. },
  1233. searchChange(params, done) {
  1234. this.query = params;
  1235. this.page.currentPage = 1;
  1236. this.onLoad(this.page, params);
  1237. done();
  1238. },
  1239. selectionChange(list) {
  1240. this.selectionList = list;
  1241. },
  1242. selectionClear() {
  1243. this.selectionList = [];
  1244. this.$refs.crud.toggleSelection();
  1245. },
  1246. currentChange(currentPage) {
  1247. this.page.currentPage = currentPage;
  1248. },
  1249. sizeChange(pageSize) {
  1250. this.page.pageSize = pageSize;
  1251. },
  1252. refreshChange() {
  1253. this.onLoad(this.page, this.query);
  1254. },
  1255. onLoad(page, params = {}) {
  1256. this.loading = true;
  1257. getBcorpsList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  1258. const data = res.data.data;
  1259. this.page.total = data.total;
  1260. this.data = data.records;
  1261. this.loading = false;
  1262. this.selectionClear();
  1263. });
  1264. },
  1265. goBack() {
  1266. this.onLoad(this.page);
  1267. this.detailData = {};
  1268. this.isShow = true;
  1269. },
  1270. // 类别弹窗关闭
  1271. corpTypeClose(done) {
  1272. this.$confirm('确认关闭?')
  1273. .then(_ => {
  1274. done();
  1275. })
  1276. .catch(_ => { });
  1277. },
  1278. //自定义列保存
  1279. async saveColumnTwo(ref, option, optionBack, code) {
  1280. /**
  1281. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  1282. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  1283. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  1284. */
  1285. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  1286. if (inSave) {
  1287. this.$message.success("保存成功");
  1288. //关闭窗口
  1289. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  1290. }
  1291. },
  1292. //自定义列重置
  1293. async resetColumnTwo(ref, option, optionBack, code) {
  1294. this[option] = this[optionBack];
  1295. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  1296. if (inSave) {
  1297. this.$message.success("重置成功");
  1298. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  1299. }
  1300. },
  1301. // 更改表格颜色
  1302. headerClassName(tab) {
  1303. //颜色间隔
  1304. let back = ""
  1305. if (tab.columnIndex >= 0 && tab.column.level === 1) {
  1306. if (tab.columnIndex % 2 === 0) {
  1307. back = "back-one"
  1308. } else if (tab.columnIndex % 2 === 1) {
  1309. back = "back-two"
  1310. }
  1311. }
  1312. return back;
  1313. },
  1314. }
  1315. };
  1316. </script>
  1317. <style lang="scss" scoped>
  1318. ::v-deep#out-table .back-one {
  1319. background: #ecf5ff !important;
  1320. }
  1321. ::v-deep#out-table .back-two {
  1322. background: #ecf5ff !important;
  1323. }
  1324. ::v-deep .el-input-group__append {
  1325. padding: 0 0px !important;
  1326. }
  1327. /deep/ .el-tree-node__content>.el-tree-node__expand-icon {
  1328. visibility: hidden;
  1329. }
  1330. /deep/ .el-col-md-8 {
  1331. width: 24.33333%;
  1332. }
  1333. </style>