index.vue 15 KB

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