oss.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :table-loading="loading"
  5. :data="data"
  6. :page="page"
  7. :permission="permissionList"
  8. v-model="form"
  9. ref="crud"
  10. @row-update="rowUpdate"
  11. @row-save="rowSave"
  12. @row-del="rowDel"
  13. :before-open="beforeOpen"
  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. @on-load="onLoad">
  21. <template slot="menuLeft">
  22. <el-button type="danger"
  23. size="small"
  24. icon="el-icon-delete"
  25. plain
  26. v-if="permission.oss_delete"
  27. @click="handleDelete">删 除
  28. </el-button>
  29. </template>
  30. <template slot-scope="scope" slot="menu">
  31. <el-button type="text"
  32. icon="el-icon-check"
  33. size="small"
  34. v-if="permission.oss_enable"
  35. plain
  36. class="none-border"
  37. @click.stop="handleEnable(scope.row)">启用
  38. </el-button>
  39. </template>
  40. <template slot-scope="{row}"
  41. slot="status">
  42. <el-tag>{{row.statusName}}</el-tag>
  43. </template>
  44. <template slot-scope="{row}"
  45. slot="category">
  46. <el-tag>{{row.categoryName}}</el-tag>
  47. </template>
  48. </avue-crud>
  49. </basic-container>
  50. </template>
  51. <script>
  52. import {getList, getDetail, add, update, remove, enable} from "@/api/resource/oss";
  53. import {mapGetters} from "vuex";
  54. import func from "@/util/func";
  55. export default {
  56. data() {
  57. return {
  58. form: {},
  59. query: {},
  60. loading: true,
  61. page: {
  62. pageSize: 10,
  63. currentPage: 1,
  64. total: 0
  65. },
  66. selectionList: [],
  67. option: {
  68. height: 'auto',
  69. calcHeight: 30,
  70. tip: false,
  71. searchShow: true,
  72. searchMenuSpan: 6,
  73. border: true,
  74. index: true,
  75. viewBtn: true,
  76. selection: true,
  77. labelWidth: 100,
  78. dialogWidth: 880,
  79. column: [
  80. {
  81. label: "分类",
  82. type: "select",
  83. span: 24,
  84. width: 100,
  85. searchLabelWidth: 50,
  86. row: true,
  87. dicUrl: "/api/blade-system/dict/dictionary?code=oss",
  88. props: {
  89. label: "dictValue",
  90. value: "dictKey"
  91. },
  92. dataType: "number",
  93. slot: true,
  94. prop: "category",
  95. search: true,
  96. rules: [{
  97. required: true,
  98. message: "请选择分类",
  99. trigger: "blur"
  100. }]
  101. },
  102. {
  103. label: "资源编号",
  104. prop: "ossCode",
  105. span: 24,
  106. width: 120,
  107. search: true,
  108. rules: [{
  109. required: true,
  110. message: "请输入资源编号",
  111. trigger: "blur"
  112. }]
  113. },
  114. {
  115. label: "资源地址",
  116. prop: "endpoint",
  117. span: 24,
  118. rules: [{
  119. required: true,
  120. message: "请输入资源地址",
  121. trigger: "blur"
  122. }]
  123. },
  124. {
  125. label: "空间名",
  126. prop: "bucketName",
  127. span: 24,
  128. width: 120,
  129. rules: [{
  130. required: true,
  131. message: "请输入空间名",
  132. trigger: "blur"
  133. }]
  134. },
  135. {
  136. label: "accessKey",
  137. prop: "accessKey",
  138. span: 24,
  139. search: true,
  140. width: 200,
  141. overHidden: true,
  142. rules: [{
  143. required: true,
  144. message: "请输入accessKey",
  145. trigger: "blur"
  146. }]
  147. },
  148. {
  149. label: "secretKey",
  150. prop: "secretKey",
  151. span: 24,
  152. width: 200,
  153. overHidden: true,
  154. rules: [{
  155. required: true,
  156. message: "请输入secretKey",
  157. trigger: "blur"
  158. }]
  159. },
  160. {
  161. label: "appId",
  162. prop: "appId",
  163. span: 24,
  164. hide: true,
  165. display: false,
  166. },
  167. {
  168. label: "region",
  169. prop: "region",
  170. span: 24,
  171. hide: true,
  172. display: false,
  173. },
  174. {
  175. label: "是否启用",
  176. prop: "status",
  177. span: 24,
  178. width: 80,
  179. slot: true,
  180. addDisplay: false,
  181. editDisplay: false,
  182. viewDisplay: false,
  183. },
  184. {
  185. label: "备注",
  186. prop: "remark",
  187. span: 24,
  188. hide: true,
  189. },
  190. ]
  191. },
  192. data: []
  193. };
  194. },
  195. watch: {
  196. 'form.category'() {
  197. const category = func.toInt(this.form.category);
  198. this.$refs.crud.option.column.filter(item => {
  199. if (item.prop === "appId") {
  200. item.display = category === 4;
  201. }
  202. if (item.prop === "region") {
  203. item.display = category === 4;
  204. }
  205. });
  206. }
  207. },
  208. computed: {
  209. ...mapGetters(["permission"]),
  210. permissionList() {
  211. return {
  212. addBtn: this.vaildData(this.permission.oss_add),
  213. viewBtn: this.vaildData(this.permission.oss_view),
  214. delBtn: this.vaildData(this.permission.oss_delete),
  215. editBtn: this.vaildData(this.permission.oss_edit)
  216. };
  217. },
  218. ids() {
  219. let ids = [];
  220. this.selectionList.forEach(ele => {
  221. ids.push(ele.id);
  222. });
  223. return ids.join(",");
  224. }
  225. },
  226. methods: {
  227. rowSave(row, loading, done) {
  228. add(row).then(() => {
  229. loading();
  230. this.onLoad(this.page);
  231. this.$message({
  232. type: "success",
  233. message: "操作成功!"
  234. });
  235. }, error => {
  236. done();
  237. console.log(error);
  238. });
  239. },
  240. rowUpdate(row, index, loading, done) {
  241. update(row).then(() => {
  242. loading();
  243. this.onLoad(this.page);
  244. this.$message({
  245. type: "success",
  246. message: "操作成功!"
  247. });
  248. }, error => {
  249. done();
  250. console.log(error);
  251. });
  252. },
  253. rowDel(row) {
  254. this.$confirm("确定将选择数据删除?", {
  255. confirmButtonText: "确定",
  256. cancelButtonText: "取消",
  257. type: "warning"
  258. })
  259. .then(() => {
  260. return remove(row.id);
  261. })
  262. .then(() => {
  263. this.onLoad(this.page);
  264. this.$message({
  265. type: "success",
  266. message: "操作成功!"
  267. });
  268. });
  269. },
  270. searchReset() {
  271. this.query = {};
  272. this.onLoad(this.page);
  273. },
  274. searchChange(params, done) {
  275. this.query = params;
  276. this.page.currentPage = 1;
  277. this.onLoad(this.page, params);
  278. done();
  279. },
  280. selectionChange(list) {
  281. this.selectionList = list;
  282. },
  283. selectionClear() {
  284. this.selectionList = [];
  285. this.$refs.crud.toggleSelection();
  286. },
  287. handleEnable(row) {
  288. this.$confirm("是否确定启用这条配置?", {
  289. confirmButtonText: "确定",
  290. cancelButtonText: "取消",
  291. type: "warning"
  292. })
  293. .then(() => {
  294. return enable(row.id);
  295. })
  296. .then(() => {
  297. this.onLoad(this.page);
  298. this.$message({
  299. type: "success",
  300. message: "操作成功!"
  301. });
  302. this.$refs.crud.toggleSelection();
  303. });
  304. },
  305. handleDelete() {
  306. if (this.selectionList.length === 0) {
  307. this.$message.warning("请选择至少一条数据");
  308. return;
  309. }
  310. this.$confirm("确定将选择数据删除?", {
  311. confirmButtonText: "确定",
  312. cancelButtonText: "取消",
  313. type: "warning"
  314. })
  315. .then(() => {
  316. return remove(this.ids);
  317. })
  318. .then(() => {
  319. this.onLoad(this.page);
  320. this.$message({
  321. type: "success",
  322. message: "操作成功!"
  323. });
  324. this.$refs.crud.toggleSelection();
  325. });
  326. },
  327. beforeOpen(done, type) {
  328. if (["edit", "view"].includes(type)) {
  329. getDetail(this.form.id).then(res => {
  330. this.form = res.data.data;
  331. });
  332. }
  333. done();
  334. },
  335. currentChange(currentPage) {
  336. this.page.currentPage = currentPage;
  337. },
  338. sizeChange(pageSize) {
  339. this.page.pageSize = pageSize;
  340. },
  341. refreshChange() {
  342. this.onLoad(this.page, this.query);
  343. },
  344. onLoad(page, params = {}) {
  345. this.loading = true;
  346. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  347. const data = res.data.data;
  348. this.page.total = data.total;
  349. this.data = data.records;
  350. this.loading = false;
  351. this.selectionClear();
  352. });
  353. }
  354. }
  355. };
  356. </script>
  357. <style>
  358. .none-border {
  359. border: 0;
  360. background-color: transparent !important;
  361. }
  362. </style>