detailsPageEdit.vue 21 KB

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