detailsPageEdit.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. <template>
  2. <div class="borderless">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <!-- <i class="back-icon el-icon-arrow-left"></i><i style="font-style:normal">返回管理列表</i>-->
  6. <el-button
  7. type="danger"
  8. style="border: none;background: none;color: red"
  9. icon="el-icon-arrow-left"
  10. @click="backToList"
  11. >返回列表
  12. </el-button>
  13. </div>
  14. <div class="add-customer-btn">
  15. <el-button type="primary" @click="openFlow" size="small"
  16. >审 核
  17. </el-button>
  18. <el-button
  19. type="primary"
  20. :disabled="disabled"
  21. @click="editCustomer"
  22. size="small"
  23. >{{ form.id ? "确认修改" : "确认新增" }}
  24. </el-button>
  25. </div>
  26. </div>
  27. <div class="customer-main">
  28. <el-form
  29. :model="form"
  30. ref="form"
  31. label-width="100px"
  32. class="demo-ruleForm"
  33. >
  34. <containerTitle title="基础资料"></containerTitle>
  35. <basic-container>
  36. <el-row>
  37. <el-col
  38. v-for="(item, index) in basicData.column"
  39. :key="index"
  40. :span="item.span ? item.span : 8"
  41. >
  42. <el-form-item
  43. :label="item.label"
  44. :prop="item.prop"
  45. :rules="item.rules"
  46. >
  47. <avue-input-tree
  48. v-if="item.prop === 'corpsTypeId'"
  49. leaf-only
  50. multiple
  51. style="width: 100%;"
  52. size="small"
  53. :props="{ label: 'title' }"
  54. v-model="form[item.prop]"
  55. placeholder=" "
  56. type="tree"
  57. :dic="dic"
  58. ></avue-input-tree>
  59. <avue-input-tree
  60. v-else-if="item.prop === 'belongtoarea'"
  61. leaf-only
  62. multiple
  63. style="width: 100%;"
  64. size="small"
  65. :props="{ label: 'name', value: 'name' }"
  66. v-model="form[item.prop]"
  67. placeholder=" "
  68. type="tree"
  69. :dic="dicArea"
  70. ></avue-input-tree>
  71. <el-select
  72. v-else-if="item.prop === 'adminProfiles'"
  73. size="small"
  74. style="width: 100%;"
  75. v-model="form[item.prop]"
  76. multiple
  77. placeholder=""
  78. >
  79. <el-option
  80. v-for="item in userList"
  81. :key="item.id"
  82. :label="item.name"
  83. :value="item.id"
  84. >
  85. </el-option>
  86. </el-select>
  87. <el-input
  88. type="age"
  89. v-else
  90. v-model="form[item.prop]"
  91. size="small"
  92. autocomplete="off"
  93. ></el-input>
  94. </el-form-item>
  95. </el-col>
  96. </el-row>
  97. </basic-container>
  98. <containerTitle title="联系方式"></containerTitle>
  99. <basic-container>
  100. <el-row>
  101. <el-col
  102. v-for="(item, index) in contactInformation.column"
  103. :key="index"
  104. :span="item.span ? item.span : 8"
  105. >
  106. <el-form-item
  107. :label="item.label"
  108. :prop="item.prop"
  109. :rules="item.rules"
  110. >
  111. <el-input
  112. type="age"
  113. v-model="form[item.prop]"
  114. size="small"
  115. autocomplete="off"
  116. ></el-input>
  117. </el-form-item>
  118. </el-col>
  119. </el-row>
  120. </basic-container>
  121. <containerTitle title="财务资料"></containerTitle>
  122. <basic-container>
  123. <el-row>
  124. <el-col
  125. v-for="(item, index) in financialInformation.column"
  126. :key="index"
  127. :span="item.span ? item.span : 8"
  128. >
  129. <el-form-item
  130. :label="item.label"
  131. :prop="item.prop"
  132. :rules="item.rules"
  133. >
  134. <el-switch
  135. v-if="item.prop === 'creditstatus'"
  136. v-model="form[item.prop]"
  137. active-value="0"
  138. inactive-value="1"
  139. active-text="开启"
  140. inactive-text="关闭"
  141. >
  142. </el-switch>
  143. <el-select
  144. v-else-if="item.prop === 'paymentType'"
  145. v-model="form[item.prop]"
  146. clearable
  147. filterable
  148. size="small"
  149. style="width: 100%;"
  150. >
  151. <el-option
  152. v-for="(item, index) in paymentOption"
  153. :key="index"
  154. :label="item.dictValue"
  155. :value="item.dictValue"
  156. ></el-option>
  157. </el-select>
  158. <el-input
  159. v-else
  160. type="age"
  161. v-model="form[item.prop]"
  162. size="small"
  163. autocomplete="off"
  164. ></el-input>
  165. </el-form-item>
  166. </el-col>
  167. </el-row>
  168. </basic-container>
  169. <containerTitle title="客户联系人"></containerTitle>
  170. <basic-container>
  171. <avue-crud
  172. :option="customerContact"
  173. v-model="contactsForm"
  174. :data="contactsData"
  175. @row-save="rowSave"
  176. @row-update="rowUpdate"
  177. @row-del="rowDel"
  178. ></avue-crud>
  179. </basic-container>
  180. <!-- <containerTitle title="客户优势项目"></containerTitle>
  181. <basic-container style="margin-bottom: 10px">
  182. <avue-crud
  183. :option="advantageProject"
  184. v-model="advantageProjectForm"
  185. :data="advantageProjectData"
  186. @row-save="rowSaveProject"
  187. @row-update="rowUpdateProject"
  188. @row-del="rowDelProject"
  189. ></avue-crud>
  190. </basic-container> -->
  191. <containerTitle title="客户开户行"></containerTitle>
  192. <basic-container>
  193. <avue-crud
  194. :option="bankOfDeposit"
  195. v-model="bankOfDepositForm"
  196. :data="bankOfDepositData"
  197. @row-save="rowSaveBankOfDeposit"
  198. @row-update="rowUpdateBankOfDeposit"
  199. @row-del="rowDelBankOfDeposit"
  200. ></avue-crud>
  201. </basic-container>
  202. </el-form>
  203. </div>
  204. <flow-dialog :switchDialog="switchDialog" @onClose="onClose()">
  205. <template slot="content"> </template>
  206. </flow-dialog>
  207. </div>
  208. </template>
  209. <script>
  210. import {
  211. customerList,
  212. typeSave,
  213. detail,
  214. deleteDetails,
  215. corpstypeTree,
  216. corpsattn,
  217. corpsbank,
  218. corpsfiles,
  219. corpsitem,
  220. areaTypeTree
  221. } from "@/api/basicData/customerInformation";
  222. import customerContact from "./configuration/customerContact.json";
  223. import advantageProject from "./configuration/advantageProject.json";
  224. import bankOfDeposit from "./configuration/bankOfDeposit.json";
  225. import flowDialog from "@/components/flow-dialog/main";
  226. import { companyParameter } from "@/enums/management-type";
  227. import { gainUser } from "@/api/basicData/customerInquiry";
  228. export default {
  229. name: "detailsPage",
  230. data() {
  231. return {
  232. switchDialog: false,
  233. form: {},
  234. disabled: false,
  235. contactsForm: {},
  236. advantageProjectForm: {},
  237. bankOfDepositForm: {},
  238. contactsData: [],
  239. advantageProjectData: [],
  240. bankOfDepositData: [],
  241. dic: [],
  242. dicArea: [],
  243. customerContact: customerContact,
  244. advantageProject: advantageProject,
  245. bankOfDeposit: bankOfDeposit,
  246. contactInformation: {
  247. column: [
  248. {
  249. label: "联系人",
  250. prop: "attn",
  251. rules: [
  252. {
  253. required: false,
  254. message: "请输入联系人",
  255. trigger: "blur"
  256. }
  257. ]
  258. },
  259. {
  260. label: "联系电话",
  261. prop: "tel",
  262. rules: [
  263. {
  264. required: false,
  265. message: "请输入联系电话",
  266. trigger: "blur"
  267. }
  268. ]
  269. },
  270. {
  271. label: "职位",
  272. prop: "position",
  273. rules: [
  274. {
  275. required: false,
  276. message: "请输入联系电话",
  277. trigger: "blur"
  278. }
  279. ]
  280. },
  281. {
  282. label: "单位地址",
  283. prop: "addr",
  284. rules: [
  285. {
  286. required: false,
  287. message: "请输入单位地址",
  288. trigger: "blur"
  289. }
  290. ]
  291. },
  292. {
  293. label: "仓库地址",
  294. prop: "storageAddr",
  295. rules: [
  296. {
  297. required: false,
  298. message: "请输入仓库地址",
  299. trigger: "blur"
  300. }
  301. ]
  302. },
  303. {
  304. label: "分仓地址",
  305. prop: "subStorageAddr",
  306. rules: [
  307. {
  308. required: false,
  309. message: "请输入分仓地址",
  310. trigger: "blur"
  311. }
  312. ]
  313. }
  314. ]
  315. },
  316. financialInformation: {
  317. column: [
  318. {
  319. label: "账户名称",
  320. prop: "accountName",
  321. rules: [
  322. {
  323. required: false,
  324. message: " ",
  325. trigger: "blur"
  326. }
  327. ]
  328. },
  329. {
  330. label: "开户银行",
  331. prop: "accountBank",
  332. rules: [
  333. {
  334. required: false,
  335. message: " ",
  336. trigger: "blur"
  337. }
  338. ]
  339. },
  340. {
  341. label: "银行帐号",
  342. prop: "accountNo",
  343. rules: [
  344. {
  345. required: false,
  346. message: " ",
  347. trigger: "blur"
  348. }
  349. ]
  350. },
  351. {
  352. label: "外币账户名称",
  353. prop: "accountNameFcy",
  354. rules: [
  355. {
  356. required: false,
  357. message: " ",
  358. trigger: "blur"
  359. }
  360. ]
  361. },
  362. {
  363. label: "外币开户银行",
  364. prop: "accountBankFcy",
  365. rules: [
  366. {
  367. required: false,
  368. message: " ",
  369. trigger: "blur"
  370. }
  371. ]
  372. },
  373. {
  374. label: "外币银行账号",
  375. prop: "accountNoFcy",
  376. rules: [
  377. {
  378. required: false,
  379. message: " ",
  380. trigger: "blur"
  381. }
  382. ]
  383. },
  384. {
  385. label: "授信状态",
  386. prop: "creditstatus",
  387. rules: [
  388. {
  389. required: false,
  390. message: " ",
  391. trigger: "blur"
  392. }
  393. ]
  394. },
  395. {
  396. label: "授信等级",
  397. prop: "creditLevel",
  398. rules: [
  399. {
  400. required: false,
  401. message: " ",
  402. trigger: "blur"
  403. }
  404. ]
  405. },
  406. {
  407. label: "授信额度",
  408. prop: "creditGrant",
  409. rules: [
  410. {
  411. required: false,
  412. message: " ",
  413. trigger: "blur"
  414. }
  415. ]
  416. },
  417. {
  418. label: "授信天数",
  419. prop: "creditDay",
  420. rules: [
  421. {
  422. required: false,
  423. message: " ",
  424. trigger: "blur"
  425. }
  426. ]
  427. },
  428. {
  429. label: "授信利率",
  430. prop: "creditRate",
  431. rules: [
  432. {
  433. required: false,
  434. message: " ",
  435. trigger: "blur"
  436. }
  437. ]
  438. },
  439. {
  440. label: "FOB系数",
  441. prop: "coefficient"
  442. },
  443. {
  444. label: "付款方式",
  445. prop: "paymentType"
  446. }
  447. ]
  448. },
  449. basicData: {
  450. column: [
  451. {
  452. label: "编码",
  453. prop: "code",
  454. rules: [
  455. {
  456. required: true,
  457. message: " ",
  458. trigger: "blur"
  459. }
  460. ]
  461. },
  462. {
  463. label: "名称",
  464. prop: "cname",
  465. rules: [
  466. {
  467. required: true,
  468. message: " ",
  469. trigger: "blur"
  470. }
  471. ]
  472. },
  473. {
  474. label: "类别",
  475. prop: "corpsTypeId",
  476. rules: [
  477. {
  478. required: true,
  479. message: " ",
  480. trigger: "blur"
  481. }
  482. ]
  483. },
  484. {
  485. label: "企业类型",
  486. prop: "companytype",
  487. rules: [
  488. {
  489. required: false,
  490. message: " ",
  491. trigger: "blur"
  492. }
  493. ]
  494. },
  495. {
  496. label: "代理品牌",
  497. prop: "goodtypes",
  498. rules: [
  499. {
  500. required: false,
  501. message: " ",
  502. trigger: "blur"
  503. }
  504. ]
  505. },
  506. {
  507. label: "所属公司",
  508. prop: "belongtocompany",
  509. rules: [
  510. {
  511. required: false,
  512. message: " ",
  513. trigger: "blur"
  514. }
  515. ]
  516. },
  517. {
  518. label: "分管员",
  519. prop: "adminProfiles",
  520. span: 8
  521. },
  522. {
  523. label: "代理区域",
  524. prop: "belongtoarea",
  525. span: 16,
  526. mock: {
  527. type: "county"
  528. }
  529. },
  530. {
  531. label: "备注",
  532. prop: "remarks",
  533. span: 24,
  534. mock: {
  535. type: "county"
  536. }
  537. }
  538. ]
  539. },
  540. paymentOption: []
  541. };
  542. },
  543. components: {
  544. flowDialog
  545. },
  546. created() {
  547. corpstypeTree({ corpType: companyParameter.code }).then(res => {
  548. this.dic = res.data.data;
  549. });
  550. areaTypeTree().then(res => {
  551. this.dicArea = res.data.data;
  552. });
  553. this.getWorkDicts("payment_term").then(res => {
  554. this.paymentOption = res.data.data;
  555. });
  556. if (this.$route.query.id) {
  557. let id = this.$route.query.id.replace(/\"/g, "");
  558. // let id = parseInt(this.$route.query.id)
  559. detail(id).then(res => {
  560. if (res.data.data.adminProfiles) {
  561. res.data.data.adminProfiles = res.data.data.adminProfiles.split(",");
  562. }
  563. this.form = res.data.data;
  564. this.contactsData = this.form.corpsAttnList;
  565. this.bankOfDepositData = this.form.corpsBankList;
  566. this.advantageProjectData = this.form.corpsItems;
  567. delete this.form.corpsAttnList;
  568. delete this.form.corpsBankList;
  569. delete this.form.corpsItems;
  570. });
  571. } else {
  572. //新增时根据左侧选中树结构给客户类别赋值
  573. this.$set(this.form, "corpsTypeId", this.$route.query.treeDeptId);
  574. }
  575. gainUser().then(res => {
  576. this.userList = res.data.data;
  577. });
  578. },
  579. watch: {
  580. $route(to, from) {
  581. console.log(to, from);
  582. if (this.$route.query.id) {
  583. let id = JSON.parse(this.$route.query.id).replace(/\"/g, "");
  584. detail(id).then(res => {
  585. console.log(res.data.data);
  586. this.form = res.data.data;
  587. });
  588. } else {
  589. this.form = {};
  590. }
  591. }
  592. },
  593. methods: {
  594. //新增客户联系人保存触发
  595. rowSave(row, done, loading) {
  596. console.log(row, done, loading);
  597. this.contactsData.push(row);
  598. done();
  599. },
  600. //修改客户联系人触发
  601. rowUpdate(row, index, done, loading) {
  602. done(row);
  603. },
  604. //删除客户联系人触发
  605. rowDel(row, index, donerowDel) {
  606. this.$confirm("确定将选择数据删除?", {
  607. confirmButtonText: "确定",
  608. cancelButtonText: "取消",
  609. type: "warning"
  610. }).then(() => {
  611. // 数据回调进行刷新
  612. if (row.id) {
  613. corpsattn(row.id).then(res => {
  614. this.$message({
  615. type: "success",
  616. message: "操作成功!"
  617. });
  618. this.contactsData.splice(index, 1);
  619. });
  620. } else {
  621. this.$message({
  622. type: "success",
  623. message: "操作成功!"
  624. });
  625. this.contactsData.splice(index, 1);
  626. }
  627. });
  628. },
  629. //新增客户优势项目保存触发
  630. rowSaveProject(row, done, loading) {
  631. console.log(row, done, loading);
  632. this.advantageProjectData.push(row);
  633. done();
  634. },
  635. //修改客户优势项目触发
  636. rowUpdateProject(row, index, done, loading) {
  637. done(row);
  638. },
  639. //删除客户优势项目触发
  640. rowDelProject(row, index, donerowDel) {
  641. this.$confirm("确定将选择数据删除?", {
  642. confirmButtonText: "确定",
  643. cancelButtonText: "取消",
  644. type: "warning"
  645. }).then(() => {
  646. if (row.id) {
  647. corpsitem(row.id).then(res => {
  648. this.$message({
  649. type: "success",
  650. message: "操作成功!"
  651. });
  652. this.advantageProjectData.splice(index, 1);
  653. });
  654. } else {
  655. this.$message({
  656. type: "success",
  657. message: "操作成功!"
  658. });
  659. this.advantageProjectData.splice(index, 1);
  660. }
  661. });
  662. },
  663. //新增客户优势项目保存触发
  664. rowSaveBankOfDeposit(row, done, loading) {
  665. console.log(row, done, loading);
  666. this.bankOfDepositData.push(row);
  667. done();
  668. },
  669. //修改客户优势项目触发
  670. rowUpdateBankOfDeposit(row, index, done, loading) {
  671. done(row);
  672. },
  673. //删除客户优势项目触发
  674. rowDelBankOfDeposit(row, index, donerowDel) {
  675. this.$confirm("确定将选择数据删除?", {
  676. confirmButtonText: "确定",
  677. cancelButtonText: "取消",
  678. type: "warning"
  679. }).then(() => {
  680. if (row.id) {
  681. corpsbank(row.id).then(res => {
  682. this.$message({
  683. type: "success",
  684. message: "操作成功!"
  685. });
  686. this.bankOfDepositData.splice(index, 1);
  687. });
  688. } else {
  689. this.$message({
  690. type: "success",
  691. message: "操作成功!"
  692. });
  693. this.bankOfDepositData.splice(index, 1);
  694. }
  695. });
  696. },
  697. //修改提交触发
  698. editCustomer() {
  699. this.$refs["form"].validate(valid => {
  700. if (valid) {
  701. this.form.corpsAttnList = this.contactsData;
  702. this.form.corpsBankList = this.bankOfDepositData;
  703. this.form.corpsItems = this.advantageProjectData;
  704. if (typeof this.form.corpsTypeId == "object") {
  705. this.form.corpsTypeId = this.form.corpsTypeId.join(",");
  706. }
  707. this.disabled = true;
  708. if (this.form.belongtoarea) {
  709. this.form.belongtoarea = this.form.belongtoarea.toString();
  710. }
  711. if (this.form.adminProfiles) {
  712. this.form.adminProfiles = this.form.adminProfiles.join(",");
  713. }
  714. this.form.corpType = companyParameter.code;
  715. typeSave(this.form).then(res => {
  716. if (res.data.data === "error") {
  717. this.disabled = false;
  718. this.$message({
  719. showClose: true,
  720. message: res.data.msg,
  721. type: "error"
  722. });
  723. } else {
  724. this.$message({
  725. type: "success",
  726. message: this.form.id ? "修改成功!" : "新增成功!"
  727. });
  728. this.$router.$avueRouter.closeTag();
  729. this.$router.push({
  730. path: "/basicData/customerManagement/companyMaterial/index",
  731. query: {}
  732. });
  733. }
  734. });
  735. } else {
  736. return false;
  737. }
  738. });
  739. },
  740. backToList() {
  741. this.$router.$avueRouter.closeTag();
  742. this.$router.push({
  743. path: "/basicData/customerManagement/companyMaterial/index",
  744. query: {}
  745. });
  746. },
  747. openFlow() {
  748. this.switchDialog = !this.switchDialog;
  749. },
  750. onClose(val) {
  751. this.switchDialog = val;
  752. }
  753. }
  754. };
  755. </script>
  756. <style lang="scss" scoped>
  757. ::v-deep .el-form-item {
  758. margin-bottom: 0;
  759. }
  760. </style>