edit.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-attachment');
  4. ComponentHelper::loadComponentView('com-rich-text');
  5. ?>
  6. <div id="app" v-cloak>
  7. <el-card shadow="never" style="border:0" class="box-card" body-style="background-color: #f3f3f3;padding: 10px 0 0;" class="box-card" v-loading="cardLoading">
  8. <div slot="header">
  9. <span>应用修改</span>
  10. </div>
  11. <div class="form-body">
  12. <el-form :model="formData" :rules="rules" size="small" ref="ruleForm" v-loading="loading" label-width="80px">
  13. <el-form-item label="应用标题" prop="title">
  14. <el-input placeholder="请输入应用标题" v-model="formData.title" type="text"></el-input>
  15. <p class="tips-text">显示在用户的插件列表中. 长度不要超过20个字符</p>
  16. </el-form-item>
  17. <el-form-item label="插件分组" prop="group">
  18. <el-select v-model="formData.group" class="select">
  19. <el-option v-for="item in formData.addons_group" :key="item.name" :label="item.title" :value="item.name"></el-option>
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="应用封面" prop="cover">
  23. <com-attachment v-if="!formData.cover" :multiple="false" :max="1" type="images" @selected="coverPic">
  24. <div class="card-upload">
  25. <i class="el-icon-plus"></i>
  26. </div>
  27. </com-attachment>
  28. <div class="card-coverimg" v-else>
  29. <el-image style="width: 80px; height: 80px" :src="formData.cover"></el-image>
  30. <el-button @click="delPic()" class="icon-close" type="danger" size="mini" icon="el-icon-close" circle></el-button>
  31. </div>
  32. <p class="tips-text">作用于商城列表、分享头图;建议尺寸:750*750像素。</p>
  33. </el-form-item>
  34. <el-form-item label="教程链接" prop="course_url">
  35. <el-input placeholder="请输入教程链接" v-model="formData.course_url" type="text"></el-input>
  36. <p class="tips-text">显示在用户的插件列表中. 长度不要超过500个字符</p>
  37. </el-form-item>
  38. <el-form-item label="插件简介" prop="brief_introduction">
  39. <el-input type="textarea" :rows="5" placeholder="请输入插件简介,最多140个字符" v-model="formData.brief_introduction" type="text"></el-input>
  40. </el-form-item>
  41. <el-form-item label="插件描述" prop="description">
  42. <com-rich-text v-model="formData.description" ></com-rich-text>
  43. <p class="tips-text">详细介绍插件的功能和使用方法</p>
  44. </el-form-item>
  45. </el-form>
  46. <el-button :loading="btnLoading" class="button-item" type="primary" style="margin-top: 24px;" @click="save('ruleForm')" size="small">保存
  47. </el-button>
  48. </div>
  49. </el-card>
  50. </div>
  51. <script>
  52. const app = new Vue({
  53. el: '#app',
  54. data() {
  55. return {
  56. formData: {
  57. title: '',
  58. group: '',
  59. brief_introduction: '',
  60. cover: '',
  61. addons_group: {}
  62. },
  63. loading: false,
  64. btnLoading: false,
  65. rules: {
  66. title: [{
  67. required: true,
  68. message: '请输入应用标题',
  69. trigger: 'blur'
  70. },
  71. {
  72. min: 2,
  73. max: 20,
  74. message: '长度在 2 到 20 个字符',
  75. trigger: 'blur'
  76. }
  77. ],
  78. group: [{
  79. required: true,
  80. message: '请选择应用分组',
  81. trigger: 'blur'
  82. }],
  83. // cover: [{
  84. // required: true,
  85. // message: '请选择应用封面图片',
  86. // trigger: 'blur'
  87. // }]
  88. },
  89. cardLoading: false
  90. }
  91. },
  92. watch: {
  93. },
  94. mounted: function() {
  95. let name = getQuery('name');
  96. this.loadData(name);
  97. },
  98. methods: {
  99. save(formName) {
  100. //保存
  101. this.$refs[formName].validate((valid) => {
  102. if (valid) {
  103. this.submitConfirm()
  104. } else {
  105. this.$message({
  106. showClose: true,
  107. message: '必填信息不能为空',
  108. type: 'error'
  109. });
  110. }
  111. });
  112. },
  113. submitConfirm() {
  114. // console.log(this.formData)
  115. this.btnLoading = true;
  116. this.$request({
  117. params: {
  118. r: 'admin/addons/edit'
  119. },
  120. data: this.formData,
  121. method: 'post'
  122. }).then(res => {
  123. this.btnLoading = false;
  124. if (res.data.code == 0) {
  125. this.$message.success(res.data.msg);
  126. this.$navigate({
  127. r: 'admin/addons/index'
  128. });
  129. } else {
  130. this.$message.error(res.data.msg);
  131. }
  132. }).catch(err => {
  133. this.btnLoading = false;
  134. this.$message.error('网络错误');
  135. })
  136. },
  137. loadData(name) {
  138. // 反显数据
  139. let self = this
  140. if (!name) {
  141. self.$message.error('参数错误');
  142. }
  143. request({
  144. params: {
  145. r: 'admin/addons/edit',
  146. name: name
  147. },
  148. method: 'get',
  149. }).then(e => {
  150. console.log(e);
  151. if (e.data.code == 0) {
  152. self.formData = e.data.data;
  153. } else {
  154. self.$message.error(e.data.msg);
  155. }
  156. }).catch(e => {
  157. // console.log(e);
  158. self.$message.error('网络错误');
  159. });;
  160. },
  161. coverPic(e) {
  162. // console.log(e);
  163. this.formData.cover = e[0].url
  164. },
  165. delPic(e) {
  166. this.formData.cover = ''
  167. }
  168. },
  169. });
  170. </script>