file-add.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <template>
  2. <div class="main">
  3. <div class="main-body">
  4. <el-form class="p20" label-width="90px" label-position="center"
  5. ref="elForm" :model="info" :rules="rules" >
  6. <el-row>
  7. <el-col :span="6" >
  8. <el-form-item label="所属部门" class="mt20" prop="department" >
  9. <el-select v-model="info.department"
  10. @change="selectDepartment($event)"
  11. collapse-tags placeholder="请选择" :disabled="info.articalId?true:false" clearable>
  12. <el-option
  13. v-for="item in showDepartments"
  14. :value="item"
  15. :key="item.departmentId">
  16. {{item.department}}
  17. </el-option>
  18. </el-select>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item label="文件分类" class="mt20" prop="category">
  23. <el-select v-model="info.category" collapse-tags placeholder="请选择" clearable>
  24. <el-option v-for="(item,index) in categorys"
  25. :value="index" :key="index" :label="item"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="5">
  30. <el-form-item label="选择年度" class="mt20" prop="bucket">
  31. <el-date-picker v-model="info.bucket" type="year"
  32. format="yyyy" value-format="yyyy" clearable></el-date-picker>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="4">
  36. <el-form-item label="是否公开" class="mt20" prop="category">
  37. <el-switch :active-value="1" :inactive-value="0" v-model="info.isOpen"></el-switch>
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. <el-form-item label="文件标题" prop="title">
  42. <el-input v-model="info.title" type="text"></el-input>
  43. </el-form-item>
  44. <el-form-item label="上传附件" prop="filename">
  45. <span>
  46. <upload-file placeholder="上传文档" @rmImage="info.filename=''" @onFinish="onUpload"/>
  47. <span style="float: left;"> {{info.filename}}</span>
  48. </span>
  49. </el-form-item>
  50. <el-form-item label="" class="mt20" prop="brief" label-width="0">
  51. <tinymce v-model="info.brief" :height="500" :width="980" />
  52. <!-- <el-input class="ipt-select" type="textarea" v-model="info.brief"></el-input> -->
  53. </el-form-item>
  54. <el-form-item label="上传附件" prop="filename" v-if="info.articalId==0">
  55. <upload-file placeholder="上传文档" @rmImage="info.filename=''" @onFinish="onUpload"/>
  56. </el-form-item>
  57. <el-form-item label="">
  58. <el-button type="primary" @click="onSubmit" class="btn-md">
  59. 提交文件
  60. </el-button>
  61. <el-button type="primary" @click="preview(info.filename )" v-if="info.articalId>0" class="btn-md">
  62. 预览附件
  63. </el-button>
  64. </el-form-item>
  65. </el-form>
  66. </div>
  67. </div>
  68. </template>
  69. <script>
  70. import UploadFile from "@/components/Upload/uploadFile.vue";
  71. import Tinymce from "@/components/Tinymce/index.vue";
  72. import data from '../data/data.js'
  73. import {mapGetters } from 'vuex'
  74. import {addArtical,getArticalInfo, editArtical} from '@/api/article.js'
  75. export default {
  76. name: 'application',
  77. components:{ UploadFile,Tinymce },
  78. data() {
  79. return {
  80. loading:false,
  81. isLike: 0,
  82. articalId:0,
  83. dropDownValue:'',
  84. showDepartments:[],
  85. categorys:data.categorys,
  86. isLeader:0,
  87. info: {
  88. filename:'',
  89. departmentId:0,
  90. category:'',
  91. department:'',
  92. title:'',
  93. isOpen: 1,
  94. brief:''
  95. },
  96. rules: {
  97. title:[{required:true, message:'请输入标题'}],
  98. brief:[{required:true, message:'请输入简介'}],
  99. bucket:[{required:true, message:'请输入年度'}],
  100. category:[{required:true, message:'请输入选择分类'}],
  101. isOpen:[{required:true, message:'请'}],
  102. department:[{required:true, message:'请选择部门'}],
  103. filename:[{required:true, message:'请上传文件'}]
  104. }
  105. }
  106. },
  107. computed: {
  108. ...mapGetters("user", ["userDepartments"])
  109. },
  110. filters:{
  111. leader(val){
  112. return data.owners[ val ]
  113. }
  114. },
  115. created(){
  116. this.articalId = +this.$route.query.articalId;
  117. if( this.articalId){
  118. this.loadArtical( this.articalId )
  119. }
  120. this.initShowDepartment()
  121. },
  122. methods:{
  123. initShowDepartment(){
  124. this.showDepartments = this.userDepartments.filter( item=>{
  125. return item.isLeader == 1
  126. })
  127. if( this.showDepartments.length >0){
  128. let department = this.showDepartments[0];
  129. this.info.departmentId = department.departmentId
  130. this.info.department = department.department;
  131. }
  132. },
  133. useIframe(){
  134. let {filename} = this.info;
  135. this.info.brief = `<p><iframe src="${data.preview}${filename}" style="width:100%;height:800px"></iframe></p>`;
  136. },
  137. loadArtical( articalId ){
  138. getArticalInfo({articalId}).then(res => {
  139. if (res.code == 200) {
  140. this.info = res.data.info;
  141. this.isLeader=res.data.isLeader
  142. if( this.isLeader < 1){
  143. let query= {articalId: articalId }
  144. this.$router.push( {path: '/file-info', query})
  145. return;
  146. }
  147. this.initShowDepartment()
  148. }
  149. })
  150. },
  151. onUpload(filename){
  152. this.info.filename = filename;
  153. },
  154. selectDepartment(item){
  155. this.info.departmentId = +item.departmentId;
  156. this.info.department = item.department
  157. },
  158. showFinish(){
  159. let that = this
  160. this.$msgbox({
  161. title: "提交成功",
  162. message: "恭喜你-提交成功",
  163. showCancelButton: true,
  164. cancelButtonText:"继续提交文件",
  165. confirmButtonText: "回到我的文件",
  166. beforeClose: (action, instance, done) => {
  167. if (action === 'confirm') {
  168. that.$router.back()
  169. // push({path:'/my-file'});
  170. done();
  171. }else{
  172. done();
  173. }
  174. }
  175. }).catch((res) => {
  176. console.log(res)
  177. });
  178. },
  179. preview(filename){
  180. window.open( "http://smoa.ndjsxh.cn:8888/preview/"+filename)
  181. },
  182. onSubmit(){
  183. this.$refs["elForm"].validate((valid) => {
  184. if (!valid) return;
  185. let {articalId, category,brief, title, isOpen,filename,bucket } = this.info;
  186. if( !articalId){
  187. addArtical( this.info ).then(res=>{
  188. if( res.code == 200){
  189. this.showFinish()
  190. }
  191. })
  192. }else{
  193. editArtical( {articalId, category, brief, title, isOpen,filename,bucket }).then( res=>{
  194. if( res.code == 200){
  195. this.$router.go(-1);
  196. }
  197. })
  198. }
  199. })
  200. }
  201. }
  202. }
  203. </script>
  204. <style>
  205. .ipt-select{
  206. width: 500px;
  207. }
  208. </style>