file-edit.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="500px"
  5. :visible.sync="showEditFlag"
  6. :close-on-click-modal="false"
  7. custom-class="ele-dialog-form"
  8. append-to-body
  9. @close="cancel"
  10. :title="title"
  11. ref="Emodal"
  12. >
  13. <el-form ref="form" :model="form" :rules="rules" label-width="82px">
  14. <el-row :gutter="15">
  15. <el-col :span="24">
  16. <el-form-item label="编码" prop="code">
  17. <el-input v-model="form.code" placeholder="请申请编码" disabled>
  18. <template slot="append">
  19. <el-link :underline="false" @click.native="getCodeOpen"
  20. >申请编码
  21. </el-link></template
  22. >
  23. </el-input>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="24">
  27. <el-form-item label="文档类型" prop="type">
  28. <DictSelection
  29. dictName="文档类型"
  30. v-model="form.type"
  31. ></DictSelection>
  32. </el-form-item>
  33. </el-col>
  34. <!-- <el-col :span="24">
  35. <el-form-item label="上传方式" prop="SCFS">
  36. <el-radio-group v-model="SCFS">
  37. <el-radio :label="1">手动上传</el-radio>
  38. <el-radio :label="2">选择模板</el-radio>
  39. </el-radio-group>
  40. </el-form-item>
  41. </el-col> -->
  42. <el-col :span="24">
  43. <el-form-item label="文档名称" prop="name">
  44. <el-input
  45. v-model="form.name"
  46. placeholder="请输入文档名称"
  47. ></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="24">
  51. <el-form-item label="文档" prop="storagePath">
  52. <div style="display: flex; align-items: center">
  53. <fileUpload
  54. v-model="form.storagePath"
  55. module="main"
  56. :limit="1"
  57. @fileChange="fileChange"
  58. >
  59. </fileUpload>
  60. </div>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="24">
  64. <el-form-item label="文档位置" prop="directoryId">
  65. <el-cascader
  66. style="width: 100%"
  67. v-model="form.directoryId"
  68. :options="folderList"
  69. :props="{
  70. value: 'id',
  71. label: 'name',
  72. children: 'sonDirectoryList',
  73. emitPath: false,
  74. checkStrictly: true
  75. }"
  76. ></el-cascader>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="24">
  80. <el-form-item label="备注" prop="remark">
  81. <el-input
  82. v-model="form.remark"
  83. type="textarea"
  84. placeholder="请输入"
  85. ></el-input>
  86. </el-form-item>
  87. </el-col>
  88. </el-row>
  89. </el-form>
  90. <template v-slot:footer>
  91. <el-button @click="cancel">取消</el-button>
  92. <el-button type="primary" :loading="loading" @click="save">
  93. 确认
  94. </el-button>
  95. </template>
  96. <getCode ref="getCode" @success="success"></getCode>
  97. </ele-modal>
  98. </template>
  99. <script>
  100. import { fileSaveAPI, getDocTreeListAPI } from './api';
  101. import FileUpload from './fileUpload.vue';
  102. import { setFolderList } from './util.js';
  103. import getCode from './getCode.vue';
  104. import { mapGetters } from 'vuex';
  105. export default {
  106. components: { FileUpload, getCode },
  107. data() {
  108. const defaultForm = {
  109. name: '', //名称
  110. type: '', //类型
  111. sizeUnit: '', //大小,
  112. unit: '', //单位
  113. remark: '', //备注
  114. status: '', //状态
  115. storagePathId: '',
  116. directoryId: '',
  117. storagePath: [],
  118. id: '',
  119. lcyStatus: 1,
  120. fileType: 0
  121. };
  122. return {
  123. rules: {
  124. name: [{ required: true, message: '请输入', trigger: 'blur' }],
  125. code: [{ required: true, message: '请输入', trigger: 'blur' }],
  126. directoryId: [{ required: true, message: '请选择', trigger: 'blur' }],
  127. storagePath: [{ required: true, message: '请选择', trigger: 'blur' }]
  128. },
  129. templateVisible: false,
  130. folderList: [],
  131. defaultForm,
  132. code: '',
  133. // 表单数据
  134. form: { ...defaultForm },
  135. // 提交状态
  136. loading: false,
  137. showEditFlag: false,
  138. title: '新建附件'
  139. };
  140. },
  141. computed: {
  142. // 是否开启响应式布局
  143. styleResponsive() {
  144. return this.$store.state.theme.styleResponsive;
  145. },
  146. ...mapGetters(['user'])
  147. },
  148. async created() {
  149. let query = {
  150. type: 0,
  151. currentUserId: this.user.info.userId
  152. };
  153. this.folderList = await getDocTreeListAPI(query);
  154. setFolderList(this.folderList); //权限过滤
  155. },
  156. methods: {
  157. async open() {
  158. this.showEditFlag = true;
  159. },
  160. getCodeOpen() {
  161. this.$refs.getCode.open();
  162. },
  163. fileChange(file) {
  164. this.form.name = file.name.replace(/\.[^/.]+$/, '');
  165. },
  166. success(code) {
  167. this.code = code;
  168. this.$nextTick(() => {
  169. this.$set(this.form, 'code', code);
  170. });
  171. },
  172. /* 保存编辑 */
  173. save() {
  174. this.$refs.form.validate(async (valid) => {
  175. if (!valid) {
  176. return false;
  177. }
  178. const data = {
  179. ...this.form
  180. };
  181. this.loading = true;
  182. fileSaveAPI(data)
  183. .then((msg) => {
  184. this.loading = false;
  185. this.cancel();
  186. this.$emit('done', msg);
  187. })
  188. .catch((e) => {
  189. this.loading = false;
  190. });
  191. });
  192. },
  193. cancel() {
  194. this.form = { ...this.defaultForm };
  195. this.$refs.form.clearValidate();
  196. this.showEditFlag = false;
  197. }
  198. }
  199. };
  200. </script>
  201. <style scoped lang="scss">
  202. .aaa {
  203. width: 100%;
  204. ::v-deep .upload-demo {
  205. width: 100%;
  206. .el-upload--text {
  207. width: 100%;
  208. button {
  209. width: 100%;
  210. background: #ffffff;
  211. border: 1px solid #dbdbdb;
  212. border-radius: 5px;
  213. }
  214. }
  215. .el-upload-list {
  216. transform: translate(10px, -39px);
  217. position: absolute;
  218. }
  219. }
  220. }
  221. </style>