detailsPage.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. <template>
  2. <div>
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left" @click="goBack(0)">返回列表 </el-button>
  6. </div>
  7. <div class="add-customer-btn">
  8. <el-button class="el-button--small-yh" style="margin-left: 6px;" size="small" @click="submit">提 交 </el-button>
  9. <el-button
  10. class="el-button--small-yh"
  11. style="margin-left: 6px;"
  12. type="primary"
  13. size="small"
  14. @click="save"
  15. :disabled="form.approvalStatus != '录入'"
  16. >保 存
  17. </el-button>
  18. </div>
  19. </div>
  20. <div style="margin-top: 50px">
  21. <trade-card title="基础信息">
  22. <avue-form :option="optionForm" v-model="form" ref="form">
  23. <template slot="menuForm">
  24. <el-button icon="el-icon-search" type="primary" :disabled="data.length > 0 || form.approvalStatus != '录入'" @click="searchChange"
  25. >获取配置信息</el-button
  26. >
  27. <el-button icon="el-icon-search" type="success" :disabled="data.length == 0 || form.approvalStatus != '录入'" @click="getData"
  28. >获取原始信息</el-button
  29. >
  30. </template>
  31. </avue-form>
  32. </trade-card>
  33. <trade-card title="字段明细">
  34. <avue-crud
  35. :option="option"
  36. :data="data"
  37. id="out-table"
  38. ref="crud"
  39. @selection-change="selectionChange"
  40. v-model="rowFrom"
  41. @row-update="rowUpdate"
  42. @resetColumn="resetColumn('crud', 'option', 'optionBack', 415)"
  43. @saveColumn="saveColumn('crud', 'option', 'optionBack', 415)"
  44. >
  45. <template slot-scope="{ type, size, row, index }" slot="menu">
  46. <el-button
  47. size="small"
  48. type="text"
  49. icon="el-icon-edit"
  50. @click.stop="$refs.crud.rowEdit(row, index)"
  51. :disabled="form.approvalStatus != '录入'"
  52. >编 辑
  53. </el-button>
  54. <el-button size="small" icon="el-icon-delete" type="text" @click.stop="rowDel(row, index)" :disabled="form.approvalStatus != '录入'"
  55. >删 除</el-button
  56. >
  57. </template>
  58. <template slot-scope="{ type, disabled }" slot="fieldValueNewNameForm">
  59. <el-input v-if="rowFrom.fieldValueType == '输入框'" :disabled="disabled" v-model="rowFrom.fieldValueNewName"></el-input>
  60. <el-date-picker
  61. v-if="rowFrom.fieldValueType == '日期选择器'"
  62. v-model="rowFrom.fieldValueNewName"
  63. type="date"
  64. placeholder="选择日期"
  65. format="yyyy-MM-dd"
  66. value-format="yyyy-MM-dd 00:00:00"
  67. >
  68. </el-date-picker>
  69. <div v-if="rowFrom.queryType != '业务来源'">
  70. <div v-if="rowFrom.queryType == '客服'">
  71. <dic-select
  72. v-if="rowFrom.fieldValueType == '选择器'"
  73. v-model="rowFrom.fieldValueNewName"
  74. :label="rowFrom.fieldValueRetrieval"
  75. :url="rowFrom.fieldValueUrl"
  76. :filterable="true"
  77. placeholder=""
  78. @selectChange="dicChange(rowFrom.fieldValueNewName, $event,rowFrom.fieldValueRetrieval)"
  79. ></dic-select>
  80. </div>
  81. <div v-else>
  82. <dic-select
  83. v-if="rowFrom.fieldValueType == '选择器' && rowFrom.queryType != '字典'"
  84. v-model="rowFrom.fieldValueNewName"
  85. key="id"
  86. res="records"
  87. :label="rowFrom.fieldValueRetrieval"
  88. :url="rowFrom.fieldValueUrl"
  89. :filterable="true"
  90. :remote="true"
  91. :dataName="rowFrom.fieldValueRetrieval"
  92. placeholder=""
  93. @selectChange="dicChange(rowFrom.fieldValueNewName, $event)"
  94. ></dic-select>
  95. <dic-select
  96. v-if="rowFrom.fieldValueType == '选择器' && rowFrom.queryType == '字典'"
  97. v-model="rowFrom.fieldValueNewName"
  98. key="id"
  99. label="dictValue"
  100. keyValue="dictKey"
  101. :url="rowFrom.fieldValueUrl"
  102. placeholder=""
  103. @selectChange="dicChange('字典', $event)"
  104. ></dic-select>
  105. </div>
  106. </div>
  107. <div v-if="rowFrom.queryType == '业务来源'" style="display: flex;">
  108. <dic-select
  109. v-if="rowFrom.fieldValueType == '选择器' && rowFrom.queryType != '字典'"
  110. v-model="rowFrom.fieldValueNewName"
  111. key="id"
  112. label="dictValue"
  113. keyValue="dictKey"
  114. :url="rowFrom.fieldValueUrl"
  115. placeholder=""
  116. @selectChange="dicChange('业务来源', $event)"
  117. ></dic-select>
  118. <el-input v-show="!rowFrom.fieldValueNew" v-model="form.srcCnName" placeholder="请选择" :disabled="true"> </el-input>
  119. <dic-select
  120. style="width: 100%;"
  121. v-show="rowFrom.fieldValueNew == 'OWN'"
  122. v-model="rowFrom.secondLevelName"
  123. placeholder="所属公司"
  124. key="id"
  125. label="deptName"
  126. url="/blade-system/dept/lazy-list?parentId=0"
  127. :filterable="true"
  128. @selectChange="dicChange('所属公司', $event)"
  129. ></dic-select>
  130. <dic-select
  131. style="width: 100%;"
  132. v-show="rowFrom.fieldValueNew == 'AGENT'"
  133. v-model="rowFrom.secondLevelName"
  134. placeholder="代理"
  135. key="id"
  136. label="cnName"
  137. res="records"
  138. url="/blade-los/bcorps/listByType?corpTypeName=代理客户"
  139. :filterable="true"
  140. :remote="true"
  141. dataName="cnName"
  142. @selectChange="dicChange('srcCnName', $event)"
  143. ></dic-select>
  144. <dic-select
  145. style="width: 100%;"
  146. v-show="rowFrom.fieldValueNew == 'SALES'"
  147. v-model="rowFrom.secondLevelName"
  148. placeholder="业务员"
  149. key="id"
  150. label="realName"
  151. res="records"
  152. url="/blade-user/page"
  153. :filterable="true"
  154. :remote="true"
  155. dataName="realName"
  156. @selectChange="dicChange('salesName', $event)"
  157. ></dic-select>
  158. </div>
  159. </template>
  160. </avue-crud>
  161. </trade-card>
  162. </div>
  163. </div>
  164. </template>
  165. <script>
  166. import { getDetail, submit, getUpdate, removeItem, getItemDetail, checkUpdate } from "@/api/serviceConfiguration/modifyData";
  167. import feeInfo from "@/components/tradeAgency/fee-info";
  168. import dicSelect from "@/components/dicSelect/main";
  169. import checkSchedule from "@/components/checkH/checkSchedule.vue";
  170. import businessReports from "@/components/tradeAgency/businessReports.vue";
  171. import reports from "@/components/tradeAgency/reports.vue";
  172. import { getDicinit } from "@/api/dicSelect/index";
  173. import _ from "lodash";
  174. export default {
  175. name: "detailsPage",
  176. data() {
  177. return {
  178. data: [],
  179. selectionList: [],
  180. form: {
  181. type: 2,
  182. approvalStatus: "录入",
  183. updateItemList: []
  184. },
  185. rowFrom: {},
  186. optionForm: {
  187. // menuBtn: false,
  188. submitBtn: false,
  189. emptyBtn: false,
  190. span: 8,
  191. disabled: false,
  192. column: [
  193. {
  194. label: "业务类型",
  195. prop: "businessType",
  196. type: "select",
  197. dicData: [
  198. {
  199. value: "SE",
  200. label: "海运出口"
  201. },
  202. {
  203. value: "SI",
  204. label: "海运进口"
  205. },
  206. {
  207. value: "AE",
  208. label: "空运出口"
  209. },
  210. {
  211. value: "AI",
  212. label: "空运进口"
  213. },
  214. {
  215. value: "BGSE",
  216. label: "海运报关出口"
  217. },
  218. {
  219. value: "BGSI",
  220. label: "海运报关进口"
  221. },
  222. {
  223. value: "BGAE",
  224. label: "空运报关出口"
  225. },
  226. {
  227. value: "BGAI",
  228. label: "空运报关进口"
  229. }
  230. ],
  231. rules: [
  232. {
  233. required: true,
  234. message: " ",
  235. trigger: "blur"
  236. }
  237. ]
  238. },
  239. {
  240. label: "检索类型",
  241. prop: "retrievalType",
  242. type: "select",
  243. dicData: [
  244. {
  245. value: "1",
  246. label: "业务单号"
  247. },
  248. {
  249. value: "2",
  250. label: "提单号"
  251. }
  252. ],
  253. rules: [
  254. {
  255. required: true,
  256. message: " ",
  257. trigger: "blur"
  258. }
  259. ]
  260. },
  261. {
  262. label: "源单据单号",
  263. prop: "retrievalValue",
  264. rules: [
  265. {
  266. required: true,
  267. message: " ",
  268. trigger: "blur"
  269. }
  270. ]
  271. },
  272. {
  273. label: "创建日期",
  274. prop: "createTime",
  275. disabled: true
  276. },
  277. {
  278. label: "创建人",
  279. prop: "createUserName",
  280. disabled: true
  281. },
  282. {
  283. label: "备注",
  284. prop: "remarks"
  285. }
  286. ]
  287. },
  288. option: {},
  289. optionBack: {
  290. height: "auto",
  291. calcHeight: 30,
  292. menuWidth: 150,
  293. tip: false,
  294. border: true,
  295. addBtn: false,
  296. viewBtn: false,
  297. editBtn: false,
  298. delBtn: false,
  299. refreshBtn: false,
  300. selection: true,
  301. align: "center",
  302. index: true,
  303. column: [
  304. {
  305. label: "更改时间",
  306. prop: "updateTime",
  307. overHidden: true,
  308. editDisplay: false
  309. },
  310. {
  311. label: "字段描述",
  312. prop: "fieldDescribe",
  313. overHidden: true,
  314. editDisplay: false
  315. },
  316. {
  317. label: "字段原值",
  318. prop: "fieldValueName",
  319. overHidden: true,
  320. editDisplay: false,
  321. rules: [
  322. {
  323. required: true,
  324. message: "",
  325. trigger: "blur"
  326. }
  327. ]
  328. },
  329. {
  330. label: "字段新值",
  331. prop: "fieldValueNewName",
  332. span: 24,
  333. overHidden: true,
  334. rules: [
  335. {
  336. required: true,
  337. message: "",
  338. trigger: "blur"
  339. }
  340. ]
  341. },
  342. {
  343. label: "二级字段新值",
  344. prop: "secondLevelName",
  345. overHidden: true,
  346. editDisplay: false
  347. }
  348. ]
  349. }
  350. };
  351. },
  352. components: {
  353. dicSelect,
  354. feeInfo,
  355. checkSchedule,
  356. businessReports,
  357. reports
  358. },
  359. props: {
  360. detailData: Object
  361. },
  362. async created() {
  363. this.roleName = localStorage.getItem("roleName").split(",");
  364. this.saberUserInfo = JSON.parse(localStorage.getItem("saber-userInfo")).content;
  365. this.option = await this.getColumnData(this.getColumnName(415), this.optionBack);
  366. if (this.$route.query.billId) {
  367. this.getDetails(this.$route.query.billId);
  368. }
  369. console.log(this.detailData.id, 123123);
  370. if (this.detailData.id) {
  371. this.getDetails(this.detailData.id);
  372. }
  373. },
  374. methods: {
  375. rowUpdate(row, index, done, loading) {
  376. done();
  377. if (row.fieldValueType == "选择器") {
  378. this.data[index].fieldValueNew = row.fieldValueNew;
  379. this.data[index].fieldValueNewName = row.fieldValueNewName;
  380. this.data[index].secondLevel = row.secondLevel;
  381. this.data[index].secondLevelName = row.secondLevelName;
  382. } else {
  383. this.data[index].fieldValueNew = row.fieldValueNewName;
  384. this.data[index].fieldValueNewName = row.fieldValueNewName;
  385. }
  386. },
  387. searchChange() {
  388. this.form.updateItemList = [];
  389. getUpdate(this.form).then(res => {
  390. this.data = res.data.data.updateItemList;
  391. });
  392. },
  393. getData() {
  394. this.$refs["form"].validate((valid, done) => {
  395. done();
  396. if (valid) {
  397. let obj = {
  398. ...this.form
  399. };
  400. delete obj.updateItemList;
  401. getItemDetail(obj).then(res => {
  402. let obj = res.data.data;
  403. this.data.forEach(row => {
  404. if (row.fieldValueType == "选择器") {
  405. row.fieldValue = obj[row.mainFieldId];
  406. row.fieldValueName = obj[row.mainFieldCname];
  407. } else {
  408. row.fieldValue = obj[row.field];
  409. row.fieldValueName = obj[row.field];
  410. }
  411. });
  412. });
  413. } else {
  414. return false;
  415. }
  416. });
  417. },
  418. dicChange(name, row,label) {
  419. if (name == "字典" || name == "业务来源") {
  420. if (row) {
  421. this.rowFrom.fieldValueNew = row.dictKey;
  422. this.rowFrom.fieldValueNewName = row.dictValue;
  423. this.rowFrom.secondLevel = null;
  424. this.rowFrom.secondLevelName = null;
  425. } else {
  426. this.rowFrom.fieldValueNew = null;
  427. this.rowFrom.fieldValueNewName = null;
  428. this.rowFrom.secondLevel = null;
  429. this.rowFrom.secondLevelName = null;
  430. }
  431. } else if (name == "srcCnName") {
  432. console.log(row);
  433. if (row) {
  434. this.$set(this.rowFrom, "secondLevel", row.id);
  435. this.$set(this.rowFrom, "secondLevelName", row.cnName);
  436. // this.rowFrom.secondLevel = row.id
  437. // this.rowFrom.secondLevelName = row.cnName
  438. } else {
  439. this.rowFrom.secondLevel = null;
  440. this.rowFrom.secondLevelName = null;
  441. }
  442. } else if (name == "所属公司") {
  443. if (row) {
  444. this.$set(this.rowFrom, "secondLevel", row.id);
  445. this.$set(this.rowFrom, "secondLevelName", row.deptName);
  446. // this.rowFrom.secondLevel = row.id
  447. // this.rowFrom.secondLevelName = row.deptName
  448. } else {
  449. this.rowFrom.secondLevel = null;
  450. this.rowFrom.secondLevelName = null;
  451. }
  452. } else if (name == "salesName") {
  453. if (row) {
  454. this.$set(this.rowFrom, "secondLevel", row.id);
  455. this.$set(this.rowFrom, "secondLevelName", row.realName);
  456. // this.rowFrom.secondLevel = row.id
  457. // this.rowFrom.secondLevelName = row.deptName
  458. } else {
  459. this.rowFrom.secondLevel = null;
  460. this.rowFrom.secondLevelName = null;
  461. }
  462. } else {
  463. if (row) {
  464. this.$set(this.rowFrom, "fieldValueNew", row.id);
  465. this.$set(this.rowFrom, "fieldValueNewName", label?row[label]:row.cnName);
  466. // this.rowFrom.fieldValueNew = row.id
  467. // this.rowFrom.fieldValueNewName = row.cnName
  468. } else {
  469. this.rowFrom.fieldValueNew = null;
  470. this.rowFrom.fieldValueNewName = null;
  471. }
  472. }
  473. },
  474. rowDel(row, index) {
  475. this.$confirm("确定删除数据?", {
  476. confirmButtonText: "确定",
  477. cancelButtonText: "取消",
  478. type: "warning"
  479. }).then(() => {
  480. if (row.id) {
  481. removeItem({ ids: row.id }).then(res => {
  482. this.data.splice(index, 1);
  483. this.$message.success("成功删除");
  484. });
  485. } else {
  486. this.data.splice(index, 1);
  487. }
  488. });
  489. },
  490. getDetails(id) {
  491. const loading = this.$loading({
  492. lock: true,
  493. text: "加载中",
  494. spinner: "el-icon-loading",
  495. background: "rgba(255,255,255,0.7)"
  496. });
  497. getDetail({ id: id })
  498. .then(res => {
  499. this.form = res.data.data;
  500. this.data = res.data.data.updateItemList;
  501. if (res.data.data.approvalStatus != "录入") {
  502. this.optionForm.disabled = true;
  503. }
  504. })
  505. .finally(() => {
  506. loading.close();
  507. });
  508. },
  509. inEdit() {},
  510. save(type) {
  511. this.$refs["form"].validate((valid, done) => {
  512. done();
  513. if (valid) {
  514. const loading = this.$loading({
  515. lock: true,
  516. text: "加载中",
  517. spinner: "el-icon-loading",
  518. background: "rgba(255,255,255,0.7)"
  519. });
  520. this.form.updateItemList = this.data;
  521. submit(this.form)
  522. .then(res => {
  523. this.$message.success("保存成功");
  524. this.getDetails(res.data.data.id);
  525. })
  526. .finally(() => {
  527. loading.close();
  528. });
  529. } else {
  530. return false;
  531. }
  532. });
  533. },
  534. submit() {
  535. this.$refs["form"].validate((valid, done) => {
  536. done();
  537. if (valid) {
  538. // for (let row of this.data) {
  539. // if (!row.fieldValueNewName) {
  540. // this.$refs.crud.rowCell(row, row.$index)
  541. // return this.$message.error("请完善字段明细");
  542. // }
  543. // }
  544. this.$confirm("是否提交数据?", "提示", {
  545. confirmButtonText: "确定",
  546. cancelButtonText: "取消",
  547. type: "warning"
  548. }).then(() => {
  549. let obj = {
  550. ...this.form,
  551. updateItemList: this.data,
  552. url: "/serviceConfiguration/modifyData/index",
  553. pageStatus: "",
  554. pageLabel: "修改数据"
  555. };
  556. const loading = this.$loading({
  557. lock: true,
  558. text: "加载中",
  559. spinner: "el-icon-loading",
  560. background: "rgba(255,255,255,0.7)"
  561. });
  562. checkUpdate(obj)
  563. .then(res => {
  564. this.$message.success("提交成功");
  565. this.getDetails(res.data.data.id);
  566. })
  567. .finally(() => {
  568. loading.close();
  569. });
  570. });
  571. } else {
  572. return false;
  573. }
  574. });
  575. },
  576. //自定义列保存
  577. async saveColumn(ref, option, optionBack, code) {
  578. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  579. if (inSave) {
  580. this.$message.success("保存成功");
  581. //关闭窗口
  582. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  583. }
  584. },
  585. //自定义列重置
  586. async resetColumn(ref, option, optionBack, code) {
  587. this[option] = this[optionBack];
  588. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  589. if (inSave) {
  590. this.$message.success("重置成功");
  591. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  592. }
  593. },
  594. goBack(type) {
  595. this.$emit("goBack", type);
  596. }
  597. }
  598. };
  599. </script>
  600. <style lang="scss" scoped>
  601. ::v-deep .el-form-item {
  602. margin-bottom: 8px !important;
  603. }
  604. ::v-deep .el-table .cell {
  605. padding: 0 2px !important;
  606. .el-form-item {
  607. margin-bottom: 0px !important;
  608. }
  609. }
  610. ::v-deep .avue-crud .el-table .el-form-item__label {
  611. left: -1px;
  612. }
  613. ::v-deep#out-table .back-one {
  614. background: #ecf5ff !important;
  615. }
  616. ::v-deep#out-table .back-two {
  617. background: #ecf5ff !important;
  618. }
  619. ::v-deep .el-table--small td,
  620. .el-table--small th {
  621. padding: 2px !important;
  622. }
  623. ::v-deep .el-card__body {
  624. padding: 3px 10px;
  625. }
  626. </style>