index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :table-loading="loading"
  5. :data="data"
  6. :page.sync="page"
  7. :permission="permissionList"
  8. :before-open="beforeOpen"
  9. v-model="form"
  10. ref="crud"
  11. @row-update="rowUpdate"
  12. @row-save="rowSave"
  13. @row-del="rowDel"
  14. @search-change="searchChange"
  15. @search-reset="searchReset"
  16. @selection-change="selectionChange"
  17. @current-change="currentChange"
  18. @size-change="sizeChange"
  19. @refresh-change="refreshChange"
  20. @resetColumn="resetColumnTwo('crud', 'option', 'optionBack', 293)"
  21. @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 293)"
  22. @on-load="onLoad">
  23. <template slot="menuLeft">
  24. <el-button type="danger"
  25. size="small"
  26. icon="el-icon-delete"
  27. plain
  28. v-if="permission.bvessels_delete"
  29. @click="handleDelete">删 除
  30. </el-button>
  31. </template>
  32. </avue-crud>
  33. </basic-container>
  34. </template>
  35. <script>
  36. import {getBvesselsList, getBvesselsDetail, addBvessels, updateBvessels, removeBvessels} from "@/api/iosBasicData/bvessels";
  37. import {mapGetters} from "vuex";
  38. export default {
  39. data() {
  40. return {
  41. form: {},
  42. query: {},
  43. loading: true,
  44. page: {
  45. pageSize: 10,
  46. currentPage: 1,
  47. total: 0
  48. },
  49. selectionList: [],
  50. option: {},
  51. optionBack: {
  52. height:'auto',
  53. searchIcon: true,
  54. searchIndex: 3,
  55. calcHeight: 30,
  56. tip: false,
  57. searchShow: true,
  58. searchMenuSpan: 6,
  59. border: true,
  60. index: true,
  61. viewBtn: true,
  62. selection: true,
  63. dialogClickModal: false,
  64. column: [
  65. // {
  66. // label: "主键",
  67. // prop: "id",
  68. // rules: [{
  69. // required: true,
  70. // message: "请输入主键",
  71. // trigger: "blur"
  72. // }]
  73. // },
  74. // {
  75. // label: "创建人 Id",
  76. // prop: "createUser",
  77. // rules: [{
  78. // required: true,
  79. // message: "请输入创建人 Id",
  80. // trigger: "blur"
  81. // }]
  82. // },
  83. // {
  84. // label: "创建人",
  85. // prop: "createUserName",
  86. // rules: [{
  87. // required: true,
  88. // message: "请输入创建人",
  89. // trigger: "blur"
  90. // }]
  91. // },
  92. // {
  93. // label: "创建部门 Id",
  94. // prop: "createDept",
  95. // rules: [{
  96. // required: true,
  97. // message: "请输入创建部门 Id",
  98. // trigger: "blur"
  99. // }]
  100. // },
  101. // {
  102. // label: "创建部门",
  103. // prop: "createDeptName",
  104. // rules: [{
  105. // required: true,
  106. // message: "请输入创建部门",
  107. // trigger: "blur"
  108. // }]
  109. // },
  110. // {
  111. // label: "创建时间",
  112. // prop: "createTime",
  113. // rules: [{
  114. // required: true,
  115. // message: "请输入创建时间",
  116. // trigger: "blur"
  117. // }]
  118. // },
  119. // {
  120. // label: "修改人 Id",
  121. // prop: "updateUser",
  122. // rules: [{
  123. // required: true,
  124. // message: "请输入修改人 Id",
  125. // trigger: "blur"
  126. // }]
  127. // },
  128. // {
  129. // label: "修改人",
  130. // prop: "updateUserName",
  131. // rules: [{
  132. // required: true,
  133. // message: "请输入修改人",
  134. // trigger: "blur"
  135. // }]
  136. // },
  137. // {
  138. // label: "修改时间",
  139. // prop: "updateTime",
  140. // rules: [{
  141. // required: true,
  142. // message: "请输入修改时间",
  143. // trigger: "blur"
  144. // }]
  145. // },
  146. {
  147. label: "船舶编码",
  148. prop: "code",
  149. search: true,
  150. rules: [{
  151. required: true,
  152. message: "请输入船舶编码",
  153. trigger: "blur"
  154. }]
  155. },
  156. {
  157. label: "中文船名",
  158. prop: "cnName",
  159. search: true,
  160. rules: [{
  161. required: true,
  162. message: "请输入中文船名",
  163. trigger: "blur"
  164. }]
  165. },
  166. {
  167. label: "英文船名",
  168. prop: "enName",
  169. search: true,
  170. rules: [{
  171. required: true,
  172. message: "请输入英文船名",
  173. trigger: "blur"
  174. }]
  175. },
  176. {
  177. label: "船舶注册国家代码",
  178. prop: "cntyCode",
  179. search: true,
  180. width: "120"
  181. // rules: [{
  182. // required: true,
  183. // message: "请输入船舶注册国家代码",
  184. // trigger: "blur"
  185. // }]
  186. },
  187. {
  188. label: "船舶注册国家名称",
  189. prop: "cntyName",
  190. search: true,
  191. width: "120"
  192. // rules: [{
  193. // required: true,
  194. // message: "请输入船舶注册国家名称",
  195. // trigger: "blur"
  196. // }]
  197. },
  198. {
  199. label: "船舶呼号",
  200. prop: "afrno",
  201. search: true,
  202. // rules: [{
  203. // required: true,
  204. // message: "请输入船舶呼号",
  205. // trigger: "blur"
  206. // }]
  207. },
  208. {
  209. label: "IMONO",
  210. prop: "imono",
  211. // rules: [{
  212. // required: true,
  213. // message: "请输入IMONO 国际海事组织编号",
  214. // trigger: "blur"
  215. // }]
  216. },
  217. {
  218. label: "MMSI",
  219. prop: "mmsi",
  220. // rules: [{
  221. // required: true,
  222. // message: "请输入MMSI 水上移动通信业务标识码",
  223. // trigger: "blur"
  224. // }]
  225. },
  226. {
  227. label: "船公司 Id",
  228. prop: "carrierId",
  229. search: true,
  230. hide:true,
  231. rules: [{
  232. required: true,
  233. message: "请输入船公司 Id",
  234. trigger: "blur"
  235. }]
  236. },
  237. {
  238. label: "船公司名称",
  239. prop: "carrierName",
  240. width: "100",
  241. display:false,
  242. // rules: [{
  243. // required: true,
  244. // message: "请输入船公司名称",
  245. // trigger: "blur"
  246. // }]
  247. },
  248. {
  249. label: "港务局编码",
  250. prop: "portOfficeCode",
  251. search: true,
  252. width: "100",
  253. rules: [{
  254. required: true,
  255. message: "请输入港务局编码",
  256. trigger: "blur"
  257. }]
  258. },
  259. {
  260. label: "港务局中文船名",
  261. prop: "portOfficeCnName",
  262. search: true,
  263. width: "120",
  264. rules: [{
  265. required: true,
  266. message: "请输入港务局中文船名",
  267. trigger: "blur"
  268. }]
  269. },
  270. {
  271. label: "港务局英文船名",
  272. prop: "portOfficeEnName",
  273. search: true,
  274. width: "120",
  275. rules: [{
  276. required: true,
  277. message: "请输入港务局英文船名",
  278. trigger: "blur"
  279. }]
  280. },
  281. {
  282. label: "港务局船公司代码",
  283. prop: "portOfficeCarrierCode",
  284. search: true,
  285. width: "120",
  286. rules: [{
  287. required: true,
  288. message: "请输入港务局船公司代码",
  289. trigger: "blur"
  290. }]
  291. },
  292. // {
  293. // label: "JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",
  294. // prop: "extendedData",
  295. // rules: [{
  296. // required: true,
  297. // message: "请输入JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",
  298. // trigger: "blur"
  299. // }]
  300. // },
  301. {
  302. label: "版本",
  303. prop: "version",
  304. display:false,
  305. // rules: [{
  306. // required: true,
  307. // message: "请输入版本",
  308. // trigger: "blur"
  309. // }]
  310. },
  311. {
  312. label: "状态",
  313. prop: "status",
  314. type: "select",
  315. dicData:[{
  316. label:'启用',
  317. value:0
  318. },{
  319. label:'停用',
  320. value:1
  321. }],
  322. value: 0
  323. },
  324. // {
  325. // label: "是否已删除(0 否 1是)",
  326. // prop: "isDeleted",
  327. // rules: [{
  328. // required: true,
  329. // message: "请输入是否已删除(0 否 1是)",
  330. // trigger: "blur"
  331. // }]
  332. // },
  333. {
  334. label: "备注",
  335. prop: "remarks",
  336. // rules: [{
  337. // required: true,
  338. // message: "请输入备注",
  339. // trigger: "blur"
  340. // }]
  341. },
  342. ]
  343. },
  344. data: []
  345. };
  346. },
  347. computed: {
  348. ...mapGetters(["permission"]),
  349. permissionList() {
  350. return {
  351. // addBtn: this.vaildData(this.permission.bvessels_add, false),
  352. // viewBtn: this.vaildData(this.permission.bvessels_view, false),
  353. // delBtn: this.vaildData(this.permission.bvessels_delete, false),
  354. // editBtn: this.vaildData(this.permission.bvessels_edit, false)
  355. };
  356. },
  357. ids() {
  358. let ids = [];
  359. this.selectionList.forEach(ele => {
  360. ids.push(ele.id);
  361. });
  362. return ids.join(",");
  363. }
  364. },
  365. async created() {
  366. this.option = await this.getColumnData(this.getColumnName(293), this.optionBack);
  367. },
  368. methods: {
  369. rowSave(row, done, loading) {
  370. addBvessels(row).then(() => {
  371. this.onLoad(this.page);
  372. this.$message({
  373. type: "success",
  374. message: "操作成功!"
  375. });
  376. done();
  377. }, error => {
  378. loading();
  379. window.console.log(error);
  380. });
  381. },
  382. rowUpdate(row, index, done, loading) {
  383. updateBvessels(row).then(() => {
  384. this.onLoad(this.page);
  385. this.$message({
  386. type: "success",
  387. message: "操作成功!"
  388. });
  389. done();
  390. }, error => {
  391. loading();
  392. console.log(error);
  393. });
  394. },
  395. rowDel(row) {
  396. this.$confirm("确定将选择数据删除?", {
  397. confirmButtonText: "确定",
  398. cancelButtonText: "取消",
  399. type: "warning"
  400. })
  401. .then(() => {
  402. return removeBvessels(row.id);
  403. })
  404. .then(() => {
  405. this.onLoad(this.page);
  406. this.$message({
  407. type: "success",
  408. message: "操作成功!"
  409. });
  410. });
  411. },
  412. handleDelete() {
  413. if (this.selectionList.length === 0) {
  414. this.$message.warning("请选择至少一条数据");
  415. return;
  416. }
  417. this.$confirm("确定将选择数据删除?", {
  418. confirmButtonText: "确定",
  419. cancelButtonText: "取消",
  420. type: "warning"
  421. })
  422. .then(() => {
  423. return removeBvessels(this.ids);
  424. })
  425. .then(() => {
  426. this.onLoad(this.page);
  427. this.$message({
  428. type: "success",
  429. message: "操作成功!"
  430. });
  431. this.$refs.crud.toggleSelection();
  432. });
  433. },
  434. beforeOpen(done, type) {
  435. if (["edit", "view"].includes(type)) {
  436. getBvesselsDetail(this.form.id).then(res => {
  437. this.form = res.data.data;
  438. });
  439. }
  440. done();
  441. },
  442. searchReset() {
  443. this.query = {};
  444. this.onLoad(this.page);
  445. },
  446. searchChange(params, done) {
  447. this.query = params;
  448. this.page.currentPage = 1;
  449. this.onLoad(this.page, params);
  450. done();
  451. },
  452. selectionChange(list) {
  453. this.selectionList = list;
  454. },
  455. selectionClear() {
  456. this.selectionList = [];
  457. this.$refs.crud.toggleSelection();
  458. },
  459. currentChange(currentPage){
  460. this.page.currentPage = currentPage;
  461. },
  462. sizeChange(pageSize){
  463. this.page.pageSize = pageSize;
  464. },
  465. refreshChange() {
  466. this.onLoad(this.page, this.query);
  467. },
  468. onLoad(page, params = {}) {
  469. this.loading = true;
  470. getBvesselsList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  471. const data = res.data.data;
  472. this.page.total = data.total;
  473. this.data = data.records;
  474. this.loading = false;
  475. this.selectionClear();
  476. });
  477. },
  478. //自定义列保存
  479. async saveColumnTwo(ref, option, optionBack, code) {
  480. /**
  481. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  482. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  483. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  484. */
  485. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  486. if (inSave) {
  487. this.$message.success("保存成功");
  488. //关闭窗口
  489. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  490. }
  491. },
  492. //自定义列重置
  493. async resetColumnTwo(ref, option, optionBack, code) {
  494. this[option] = this[optionBack];
  495. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  496. if (inSave) {
  497. this.$message.success("重置成功");
  498. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  499. }
  500. }
  501. }
  502. };
  503. </script>
  504. <style>
  505. </style>