form.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. {extend name="../../admin/view/main"}
  2. {block name='content'}
  3. <style>
  4. .layui-card-body{
  5. background: white;
  6. }
  7. #newForm{
  8. width: 80%;
  9. }
  10. </style>
  11. <div id="newForm">
  12. <el-form :model="form" label-width="140px" ref="form">
  13. <el-form-item label="标题" prop="title" :rules="{message:'此项必须',required:true}">
  14. <el-input v-model="form.title"/>
  15. </el-form-item>
  16. <el-form-item label="图片" prop="imgs">
  17. <el-button @click="addFile('image',form.imgs)">增加</el-button>
  18. <div>
  19. <span v-for="(item,idx) in form.imgs" :key="idx" style="width: 300px;">
  20. <img :src="item" style="max-width: 100px;height: 100px"/>
  21. <el-button type="text" @click="form.imgs.splice(idx,1)">删除</el-button>
  22. </span>
  23. </div>
  24. </el-form-item>
  25. <el-form-item label="视频" prop="video">
  26. <el-button @click="addFile('video',form.video)">增加</el-button>
  27. <div>
  28. <span v-for="(item,idx) in form.video" :key="idx" style="width: 300px;">
  29. <video controls :src="item" style="max-width: 300px;height: 300px"/>
  30. <el-button type="text" @click="form.video.splice(idx,1)">删除</el-button>
  31. </span>
  32. </div>
  33. </el-form-item>
  34. <el-form-item label="文件" prop="file">
  35. <el-button @click="addFile(null,form.file)">增加</el-button>
  36. <div>
  37. <span v-for="(item,idx) in form.file" :key="idx">
  38. <el-tag type="text" @close="form.file.splice(idx,1)" closable>文件{{idx+1}}</el-tag>
  39. </span>
  40. </div>
  41. </el-form-item>
  42. <el-form-item label="内容" prop="content" :rules="{message:'此项必须',required:true}">
  43. <textarea name="content" class="content"></textarea>
  44. </el-form-item>
  45. <el-form-item>
  46. <el-button type="primary" @click="save" :loading="saving">保存</el-button>
  47. <el-button @click="history.back()">取消</el-button>
  48. </el-form-item>
  49. </el-form>
  50. <div style="display: none;">
  51. <a data-file id="fileUpload"></a>
  52. </div>
  53. </div>
  54. <script>
  55. let editorContent;
  56. let vo={:json_encode($vo?:null,256)};
  57. require(['ckeditor'], function () {
  58. editorContent=window.createEditor('[name=content]', {height: 350})
  59. if(vo){
  60. editorContent.setData(vo.content)
  61. }
  62. });
  63. if(vo){
  64. /*vo.imgs=vo.imgs?vo.imgs.split(',').filter(a=>{
  65. return a
  66. }):[]*/
  67. //vo.file=vo.file?vo.file.split(',').filter():[]
  68. vo.video=vo.video?vo.video.split(',').filter(a=>{
  69. return a
  70. }):[]
  71. }
  72. new Vue({
  73. el:'#newForm',
  74. data:()=>({
  75. form:vo||{
  76. title:null,
  77. content:null,
  78. video:[],
  79. imgs:[],
  80. file:[],
  81. },
  82. saving:false,
  83. }),
  84. methods:{
  85. addFile(ext,form){
  86. $('#fileUpload').unbind('upload.done')
  87. $('#fileUpload').on('upload.done', (e,obj) => {
  88. if(ext && obj.file.type.indexOf(ext)===-1){
  89. this.$message.error('请上传正确的格式')
  90. return
  91. }
  92. form.push(obj.data.url)
  93. });
  94. $('#fileUpload').trigger('click')
  95. },
  96. save(){
  97. this.form.content=editorContent.getData()
  98. let _this=this,
  99. form=JSON.parse(JSON.stringify(this.form))
  100. form.imgs=form.imgs.join(',')
  101. form.video=form.video.join(',')
  102. form.file=form.file.join(',')
  103. delete form.create_at
  104. delete form.update_at
  105. this.$refs.form.validate(v=>{
  106. if(!v){
  107. return
  108. }
  109. $.ajax('{:sysuri()}',{
  110. data:form,
  111. type:'post',
  112. beforeSend(){
  113. _this.saving=true
  114. },
  115. success({code,info}){
  116. if(code===1){
  117. _this.$message.success('保存成功')
  118. window.history.back()
  119. }else{
  120. _this.$message.error(info)
  121. }
  122. },
  123. complete(){
  124. _this.saving=false
  125. }
  126. })
  127. })
  128. }
  129. }
  130. })
  131. </script>
  132. {/block}