uploadDetail.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <!-- 资源详情 -->
  2. <template>
  3. <div class="book-vocab">
  4. <div class="book-vocab-content">
  5. <el-form ref="searchForm" :model="searchForm" :rules="courseListRules" size="mini">
  6. <el-form-item label="资源键值" label-width="90px" prop="resource_key">
  7. <el-input
  8. v-model="searchForm.resource_key"
  9. autocomplete="off"
  10. placeholder="请输入资源键值"
  11. ></el-input>
  12. </el-form-item>
  13. <el-form-item label="资源名称" label-width="90px" prop="name">
  14. <el-input v-model="searchForm.name" placeholder="请输入资源名称"></el-input>
  15. </el-form-item>
  16. <el-form-item label="备注" label-width="90px" prop="memo">
  17. <el-input
  18. v-model="searchForm.memo"
  19. placeholder="请输入资源备注"
  20. type="textarea"
  21. ></el-input>
  22. </el-form-item>
  23. <el-form-item label="上传资源" label-width="90px" prop="fileList">
  24. <el-upload
  25. action="url"
  26. :limit="uploadType === 'edit' ? 0 : 1"
  27. :on-exceed="handleExceed"
  28. :on-preview="handlePreview"
  29. :on-remove="handleRemove"
  30. :http-request="upload"
  31. :file-list="fileList"
  32. accept="*"
  33. class="upload-demo"
  34. list-type="picture"
  35. >
  36. <el-button size="mini" type="success">点击上传</el-button>
  37. </el-upload>
  38. </el-form-item>
  39. </el-form>
  40. <el-button
  41. v-if="resourceKey === ''"
  42. class="submitBtn"
  43. size="mini"
  44. type="primary"
  45. @click="saveWord"
  46. >
  47. 保存资源
  48. </el-button>
  49. </div>
  50. <div v-if="uploadType === 'edit'" class="book-vocab-footer">
  51. <el-button type="primary" size="mini" @click="saveWord">修改</el-button>
  52. </div>
  53. </div>
  54. </template>
  55. <script>
  56. import { validNull } from '@/utils/validate';
  57. import { getContent } from '@/api/ajax';
  58. import { fileUpload } from '@/api/app';
  59. export default {
  60. props: {
  61. resourceKey: {
  62. default: '',
  63. type: String
  64. },
  65. uploadType: {
  66. default: 'add',
  67. type: String
  68. }
  69. },
  70. data() {
  71. const validateNull = (rule, value, callback) => {
  72. if (!validNull(value)) {
  73. callback(new Error('请输入相应内容'));
  74. } else {
  75. callback();
  76. }
  77. };
  78. return {
  79. isData: false,
  80. isSaving: false,
  81. searchForm: {
  82. resource_key: '',
  83. memo: '',
  84. name: ''
  85. },
  86. fileList: [], // 上传图片数组
  87. courseListRules: {
  88. // 填写规则
  89. resource_key: [{ required: true, trigger: 'blur', validator: validateNull }],
  90. name: [{ required: true, trigger: 'blur', validator: validateNull }],
  91. memo: [{ required: true, trigger: 'blur', validator: validateNull }]
  92. // price: [
  93. // { required: true, },
  94. // ],
  95. }
  96. };
  97. },
  98. watch: {
  99. resourceKey: {
  100. handler: function (val) {
  101. this.$refs.searchForm.resetFields();
  102. if (val) {
  103. this.searchForm.resource_key = val;
  104. if (val !== '') {
  105. this.getDetail();
  106. }
  107. } else {
  108. this.searchForm.name = '';
  109. this.searchForm.resource_key = '';
  110. this.searchForm.memo = '';
  111. this.fileList = [];
  112. }
  113. }
  114. }
  115. },
  116. created() {
  117. this.searchForm.resource_key = this.resourceKey;
  118. if (this.resourceKey !== '') {
  119. this.getDetail();
  120. } else {
  121. this.searchForm.name = '';
  122. this.searchForm.resource_key = '';
  123. this.searchForm.memo = '';
  124. this.fileList = [];
  125. }
  126. },
  127. // 方法集合
  128. methods: {
  129. saveWord() {
  130. this.$refs.searchForm.validate(valid => {
  131. if (valid) {
  132. this.isSaving = true;
  133. let MethodName = 'file_resource_manager-InputFileResource';
  134. const data_list = [];
  135. this.fileList.forEach((item, index) => {
  136. if (item.file_id) {
  137. let obj = {
  138. resource_key: this.searchForm.resource_key.trim(),
  139. file_id: item.file_id,
  140. memo: this.searchForm.memo.trim(),
  141. name: this.searchForm.name.trim()
  142. };
  143. data_list.push(obj);
  144. }
  145. });
  146. let data = {
  147. file_list: data_list
  148. };
  149. getContent(MethodName, data)
  150. .then(res => {
  151. this.$message.success('保存成功');
  152. this.$emit('closeDialog');
  153. })
  154. .catch(() => {
  155. this.isSaving = false;
  156. });
  157. }
  158. });
  159. },
  160. upload(file) {
  161. if (this.uploadType === 'edit') {
  162. this.fileList = [];
  163. }
  164. fileUpload('Open', file).then(response => {
  165. if (response.status === 1) {
  166. response.file_info_list.forEach((item, index) => {
  167. if (item.file_url) {
  168. let obj = {
  169. name: item.file_name,
  170. url: item.file_url,
  171. file_id: item.file_id
  172. };
  173. this.fileList.push(obj);
  174. }
  175. });
  176. this.$message.success('上传成功');
  177. } else {
  178. this.$message.warning(response.error);
  179. }
  180. });
  181. },
  182. handleRemove(file, fileList) {
  183. this.fileList = fileList;
  184. },
  185. handleExceed(files, fileList) {
  186. this.$message.warning(
  187. `当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  188. files.length + fileList.length
  189. } 个文件`
  190. );
  191. },
  192. handlePreview(file) {
  193. console.log(file);
  194. },
  195. // 如果传参不为空 查询详情
  196. getDetail() {
  197. let MethodName = 'file_resource_manager-GetFileResource';
  198. let data_list = [];
  199. data_list.push(this.resourceKey);
  200. let data = {
  201. resource_key_list: data_list
  202. };
  203. getContent(MethodName, data)
  204. .then(res => {
  205. this.fileList = [];
  206. res.file_list.forEach((item, index) => {
  207. this.searchForm = item;
  208. if (item.file_url) {
  209. let obj = {
  210. name: '',
  211. url: item.file_url
  212. };
  213. this.fileList.push(obj);
  214. }
  215. });
  216. })
  217. .catch(() => {});
  218. }
  219. }
  220. };
  221. </script>
  222. <style lang="scss" scoped>
  223. .book-vocab {
  224. width: 100%;
  225. overflow: hidden;
  226. &-content {
  227. width: 100%;
  228. margin: 0 auto;
  229. padding: 20px 0;
  230. }
  231. .submitBtn {
  232. margin-left: 90px;
  233. }
  234. &-footer {
  235. display: flex;
  236. justify-content: flex-end;
  237. }
  238. }
  239. </style>