index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. <!--
  2. * @Descripttion: 系统设置--文件管理
  3. * @version:
  4. * @Author: qianlishi
  5. * @Date: 2021-12-11 14:48:27
  6. * @LastEditors: qianlishi
  7. * @LastEditTime: 2022-03-09 09:57:17
  8. -->
  9. <template>
  10. <anji-crud ref="listPage" :option="crudOption">
  11. <template v-slot:tableButtons>
  12. <el-upload
  13. class="el-upload"
  14. ref="upload"
  15. :action="uploadUrl"
  16. :headers="headers"
  17. :on-success="handleUpload"
  18. :on-error="handleError"
  19. :show-file-list="false"
  20. :limit="1"
  21. >
  22. <el-button
  23. type="primary"
  24. icon="el-icon"
  25. v-permission="'fileManage:upload'"
  26. >文件上传</el-button
  27. >
  28. </el-upload>
  29. </template>
  30. <template slot="edit" slot-scope="props">
  31. <el-button type="text" @click="copyUrlPath(props)">复制url</el-button>
  32. </template>
  33. <template slot="rowButton" slot-scope="props">
  34. <el-button type="text" @click="customButtom(props)">下载</el-button>
  35. </template>
  36. </anji-crud>
  37. </template>
  38. <script>
  39. import { fileList, fileAdd, fileDel, fileUpdate, fileDetail } from "@/api/file";
  40. import { getToken } from "@/utils/auth";
  41. export default {
  42. name: "File",
  43. components: {
  44. anjiCrud: require("@/components/AnjiPlus/anji-crud/anji-crud").default
  45. },
  46. data() {
  47. return {
  48. selectedList: [],
  49. uploadUrl: process.env.BASE_API + "/file/upload",
  50. crudOption: {
  51. // 使用菜单做为页面标题
  52. title: "文件管理",
  53. // 详情页中输入框左边文字宽度
  54. labelWidth: "120px",
  55. // 查询表单条件
  56. queryFormFields: [
  57. {
  58. inputType: "input",
  59. label: "文件路径",
  60. field: "filePath"
  61. }
  62. ],
  63. // 表头按钮
  64. tableButtons: [
  65. {
  66. label: "删除",
  67. type: "danger",
  68. permission: "fileManage:delete",
  69. icon: "el-icon-delete",
  70. plain: false,
  71. click: () => {
  72. return this.$refs.listPage.handleDeleteBatch();
  73. }
  74. }
  75. ],
  76. // 表格行按钮
  77. rowButtons: [
  78. {
  79. label: "复制url",
  80. click: this.copyUrlPath
  81. },
  82. {
  83. label: "下载",
  84. click: this.customButtom
  85. },
  86. {
  87. label: "删除",
  88. permission: "fileManage:delete",
  89. click: row => {
  90. return this.$refs.listPage.handleDeleteBatch(row);
  91. }
  92. }
  93. ],
  94. // 操作按钮
  95. buttons: {
  96. query: {
  97. api: fileList,
  98. permission: "fileManage:query",
  99. sort: "create_time",
  100. order: "DESC"
  101. },
  102. queryByPrimarykey: {
  103. api: fileDetail,
  104. permission: "fileManage:query"
  105. },
  106. add: {
  107. api: fileAdd,
  108. permission: "fileManage:upload",
  109. isShow: false
  110. },
  111. delete: {
  112. api: fileDel,
  113. permission: "fileManage:delete"
  114. },
  115. edit: {
  116. api: fileUpdate,
  117. permission: "fileManage:update",
  118. isShow: false
  119. },
  120. rowButtonsWidth: 150 // row自定义按钮表格宽度
  121. },
  122. // 表格列
  123. columns: [
  124. {
  125. label: "",
  126. field: "id",
  127. primaryKey: true, // 根据主键查询详情或者根据主键删除时, 主键的
  128. tableHide: true, // 表格中不显示
  129. editHide: true // 编辑弹框中不显示
  130. },
  131. {
  132. // 以下为表格的配置
  133. label: "图片缩略图", // 列名称,必填
  134. field: "urlPath", // 字段名,必填
  135. columnType: "imgPreview", // 图片 不设置默认text
  136. editHide: true, // 编辑弹框中不显示
  137. // 以下为编辑查看弹框的配置
  138. // inputType: 'input', // 编辑查看表单组件类型 input anji-select
  139. placeholder: "",
  140. disabled: false
  141. },
  142. {
  143. label: "文件标识", // 文件标识
  144. placeholder: "",
  145. field: "fileId",
  146. editField: "fileId",
  147. tableHide: true, // 表格中不显示
  148. inputType: "input",
  149. rules: [
  150. { min: 1, max: 64, message: "不超过64个字符", trigger: "blur" }
  151. ],
  152. disabled: false
  153. },
  154. {
  155. label: "文件类型", // 文件路径
  156. placeholder: "",
  157. field: "fileType",
  158. editField: "fileType",
  159. inputType: "input",
  160. rules: [
  161. {
  162. min: 1,
  163. max: 1024,
  164. message: "不超过1024个字符",
  165. trigger: "blur"
  166. }
  167. ],
  168. disabled: false
  169. },
  170. {
  171. label: "文件路径", // 文件路径
  172. placeholder: "",
  173. field: "filePath",
  174. editField: "filePath",
  175. inputType: "input",
  176. rules: [
  177. {
  178. min: 1,
  179. max: 1024,
  180. message: "不超过1024个字符",
  181. trigger: "blur"
  182. }
  183. ],
  184. disabled: false
  185. },
  186. {
  187. label: "url路径", // url路径
  188. placeholder: "",
  189. field: "urlPath",
  190. editField: "urlPath",
  191. inputType: "input",
  192. rules: [
  193. {
  194. min: 1,
  195. max: 1024,
  196. message: "不超过1024个字符",
  197. trigger: "blur"
  198. }
  199. ],
  200. disabled: false
  201. },
  202. {
  203. label: "内容说明", // 内容说明
  204. placeholder: "",
  205. field: "fileInstruction",
  206. editField: "fileInstruction",
  207. inputType: "input",
  208. rules: [
  209. {
  210. min: 1,
  211. max: 1024,
  212. message: "不超过1024个字符",
  213. trigger: "blur"
  214. }
  215. ],
  216. disabled: false
  217. },
  218. {
  219. label: "创建人",
  220. field: "createByView",
  221. columnType: "expand", // 表格中放在可展开行中
  222. inputType: "input", // 编辑和查看详情中显示的input
  223. disabled: true // 编辑和查看详情中不可编辑
  224. },
  225. {
  226. label: "创建时间",
  227. field: "createTime",
  228. columnType: "expand",
  229. inputType: "input",
  230. disabled: true
  231. }
  232. ]
  233. }
  234. };
  235. },
  236. computed: {
  237. headers() {
  238. return {
  239. Authorization: getToken() // 直接从本地获取token就行
  240. };
  241. }
  242. },
  243. methods: {
  244. // 上传成功的回调
  245. handleUpload(response, file, fileList) {
  246. // 触发查询按钮
  247. this.$refs.listPage.handleQueryForm();
  248. //清除el-upload组件中的文件
  249. this.$refs.upload.clearFiles();
  250. },
  251. handleError() {
  252. this.$message({
  253. message: "上传失败!",
  254. type: "error"
  255. });
  256. },
  257. downloadFile(row) {
  258. window.open(row.urlPath);
  259. },
  260. customButtom(val) {
  261. this.downloadFile(val);
  262. },
  263. copyUrlPath(val) {
  264. this.copyToClip(val.urlPath);
  265. this.$message({
  266. message: "已将url路径复制至剪切板!",
  267. type: "success"
  268. });
  269. },
  270. copyToClip(content, message) {
  271. let aux = document.createElement("input");
  272. aux.setAttribute("value", content);
  273. document.body.appendChild(aux);
  274. aux.select();
  275. document.execCommand("copy");
  276. document.body.removeChild(aux);
  277. }
  278. }
  279. };
  280. </script>
  281. <style scoped lang="scss">
  282. .el-upload {
  283. display: inline-block;
  284. margin-right: 20px;
  285. }
  286. </style>