Index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <div id="app-base-file">
  3. <div class="one-block-1">
  4. <span>
  5. 1. 上传文件到sm图床
  6. </span>
  7. </div>
  8. <div class="one-block-2">
  9. <!-- dev调试时,action参数:请填写你本地完整的api地址,如:http://localhost:7068/api/example/uploadFile -->
  10. <a-upload-dragger
  11. name="file"
  12. :multiple="true"
  13. :action="action_url"
  14. @change="uploadStatus"
  15. >
  16. <p class="ant-upload-drag-icon">
  17. <a-icon type="inbox" />
  18. </p>
  19. <p class="ant-upload-text">
  20. 点击 或 拖动到此处
  21. </p>
  22. <p class="ant-upload-hint">
  23. </p>
  24. </a-upload-dragger>
  25. </div>
  26. <div class="one-block-2">
  27. <a-list v-if="image_info.length !== 0" size="small" bordered :data-source="image_info">
  28. <a-list-item slot="renderItem" slot-scope="item" style="text-align:left;">
  29. {{ item.id }}.&nbsp;{{ item.imageUrlText }}:&nbsp;
  30. <a :href="item.url" target="_blank">{{ item.url }}</a>
  31. </a-list-item>
  32. </a-list>
  33. </div>
  34. <div class="one-block-1">
  35. <span>
  36. 2. 系统原生对话框
  37. </span>
  38. </div>
  39. <div class="one-block-2">
  40. <a-space>
  41. <a-button @click="messageShow('ipc')">消息提示(ipc)</a-button>
  42. <a-button @click="messageShowConfirm('ipc')">消息提示与确认(ipc)</a-button>
  43. <a-button @click="messageShow('http')">消息提示(http)</a-button>
  44. <a-button @click="messageShowConfirm('http')">消息提示与确认(http)</a-button>
  45. </a-space>
  46. </div>
  47. <div class="one-block-1">
  48. <span>
  49. 3. 选择保存目录
  50. </span>
  51. </div>
  52. <div class="one-block-2">
  53. <a-row>
  54. <a-col :span="12">
  55. <a-input v-model="dir_path" :value="dir_path" addon-before="保存目录" />
  56. </a-col>
  57. <a-col :span="12">
  58. <a-button @click="selectDir">
  59. 修改目录
  60. </a-button>
  61. </a-col>
  62. </a-row>
  63. </div>
  64. <div class="one-block-1">
  65. <span>
  66. 4. 打开文件夹
  67. </span>
  68. </div>
  69. <div class="one-block-2">
  70. <a-list :grid="{ gutter: 16, column: 4 }" :data-source="file_list">
  71. <a-list-item slot="renderItem" slot-scope="item" @click="openDirectry(item.id)">
  72. <a-card :title="item.content">
  73. <a-button type="link">
  74. 打开
  75. </a-button>
  76. </a-card>
  77. </a-list-item>
  78. </a-list>
  79. </div>
  80. <div class="footer">
  81. </div>
  82. </div>
  83. </template>
  84. <script>
  85. import { requestEggApi, ipcApiRoute } from '@/api/main'
  86. const fileList = [
  87. {
  88. content: '【下载】目录',
  89. id: 'download'
  90. },
  91. {
  92. content: '【图片】目录',
  93. id: 'picture'
  94. },
  95. {
  96. content: '【文档】目录',
  97. id: 'doc'
  98. },
  99. {
  100. content: '【音乐】目录',
  101. id: 'music'
  102. }
  103. ];
  104. export default {
  105. data() {
  106. return {
  107. file_list: fileList,
  108. action_url: process.env.VUE_APP_API_BASE_URL + '/api/example/uploadFile',
  109. image_info: [],
  110. num: 0,
  111. dir_path: "D:\\www\\electron-egg",
  112. };
  113. },
  114. methods: {
  115. openDirectry (id) {
  116. const params = {
  117. 'id': id
  118. }
  119. requestEggApi('openDir', params).then(res => {
  120. if (res.code !== 0) {
  121. return false
  122. }
  123. }).catch(err => {
  124. console.log('err:', err)
  125. })
  126. },
  127. uploadStatus(info) {
  128. const status = info.file.status;
  129. if (status !== 'uploading') {
  130. console.log(info.file);
  131. }
  132. if (status === 'done') {
  133. // 去除list列表
  134. //info.fileList = [];
  135. const uploadRes = info.file.response;
  136. console.log('uploadRes:', uploadRes)
  137. if (uploadRes.code !== 'success') {
  138. this.$message.error(`file upload failed ${uploadRes.code} .`);
  139. return false;
  140. }
  141. this.num++;
  142. const picInfo = uploadRes.data;
  143. picInfo.id = this.num;
  144. picInfo.imageUrlText = 'image url';
  145. this.image_info.push(picInfo);
  146. this.$message.success(`${info.file.name} file uploaded successfully.`);
  147. } else if (status === 'error') {
  148. this.$message.error(`${info.file.name} file upload failed.`);
  149. }
  150. },
  151. selectDir() {
  152. requestEggApi('selectFileDir', {}).then(res => {
  153. if (res.code !== 0) {
  154. return false
  155. }
  156. console.log('res.data.dir:', res.data.dir)
  157. this.dir_path = res.data.dir;
  158. }).catch(err => {
  159. this.$message.error('异常')
  160. })
  161. },
  162. messageShow(type) {
  163. const self = this;
  164. console.log('[messageShow] type:', type)
  165. if (type == 'http') {
  166. requestEggApi('messageShow', {}).then(res => {
  167. if (res.code !== 0) {
  168. return false
  169. }
  170. console.log('res:', res)
  171. }).catch(err => {
  172. self.$message.error(err + '异常')
  173. })
  174. } else {
  175. self.$ipcCallMain(ipcApiRoute.messageShow, '').then(r => {
  176. self.$message.info(r);
  177. })
  178. }
  179. },
  180. messageShowConfirm(type) {
  181. const self = this;
  182. console.log('[messageShowConfirm] type:', type)
  183. if (type == 'http') {
  184. requestEggApi('messageShowConfirm', {}).then(res => {
  185. if (res.code !== 0) {
  186. return false
  187. }
  188. console.log('res:', res)
  189. }).catch(err => {
  190. self.$message.error(err + '异常')
  191. })
  192. } else {
  193. self.$ipcCallMain(ipcApiRoute.messageShowConfirm, '').then(r => {
  194. self.$message.info(r);
  195. })
  196. }
  197. },
  198. }
  199. };
  200. </script>
  201. <style lang="less" scoped>
  202. #app-base-file {
  203. padding: 0px 10px;
  204. text-align: left;
  205. width: 100%;
  206. .one-block-1 {
  207. font-size: 16px;
  208. padding-top: 10px;
  209. }
  210. .one-block-2 {
  211. padding-top: 10px;
  212. }
  213. .footer {
  214. padding-top: 10px;
  215. }
  216. }
  217. </style>