course.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ?>
  4. <div id="app" v-cloak>
  5. <el-card class="box-card" v-loading="loading" shadow="never" style="border:0;min-width: 1200px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  6. <div class="form_box">
  7. <template>
  8. <el-card>
  9. <el-form :model="ruleForm" size="small" ref="ruleForm" label-width="150px">
  10. <el-tabs v-model="activeName" type="card">
  11. <el-tab-pane label="教程设置" name="system">
  12. <el-row>
  13. <el-col :span="24">
  14. <el-form-item label="教程链接">
  15. <el-col :span="12">
  16. <el-input v-model="ruleForm.system.course_url.value"></el-input>
  17. <div class="tips-text" v-if="ruleForm.system.course_url.remark">{{ruleForm.system.course_url.remark}}</div>
  18. </el-col>
  19. </el-form-item>
  20. <el-form-item label="常见问题">
  21. <el-col :span="12">
  22. <el-input v-model="ruleForm.system.question_url.value"></el-input>
  23. <div class="tips-text" v-if="ruleForm.system.question_url.remark">{{ruleForm.system.question_url.remark}}</div>
  24. </el-col>
  25. </el-form-item>
  26. <el-form-item label="APP对接">
  27. <el-col :span="12">
  28. <el-input v-model="ruleForm.system.app_url.value"></el-input>
  29. <div class="tips-text" v-if="ruleForm.system.app_url.remark">{{ruleForm.system.question_url.remark}}</div>
  30. </el-col>
  31. </el-form-item>
  32. <el-form-item label="公众号对接">
  33. <el-col :span="12">
  34. <el-input v-model="ruleForm.system.wx_url.value"></el-input>
  35. <div class="tips-text" v-if="ruleForm.system.wx_url.remark">{{ruleForm.system.wx_url.remark}}</div>
  36. </el-col>
  37. </el-form-item>
  38. <el-form-item label="小程序对接">
  39. <el-col :span="12">
  40. <el-input v-model="ruleForm.system.mini_app.value"></el-input>
  41. <div class="tips-text" v-if="ruleForm.system.mini_app.remark">{{ruleForm.system.mini_app.remark}}</div>
  42. </el-col>
  43. </el-form-item>
  44. <el-form-item label="视频教程">
  45. <el-col :span="12">
  46. <el-switch v-model="ruleForm.system.is_show_video_tutorials.value" :active-value="1" :inactive-value="0">
  47. </el-switch>
  48. </el-col>
  49. </el-form-item>
  50. </el-col>
  51. </el-row>
  52. </el-tab-pane>
  53. <el-tab-pane label="视频教程" name="video_tutorials">
  54. <template>
  55. <el-table :data="video_tutorials" border style="width: 100%">
  56. <el-table-column prop="id" label="视频id" width="100" align="center"></el-table-column>
  57. <el-table-column prop="name" label="视频名称" width="180" align="center">
  58. <template slot-scope="scope">
  59. <span class="over2">{{scope.row.name}}</span>
  60. </template>
  61. </el-table-column>
  62. <el-table-column prop="url" label="视频链接" align="center">
  63. </el-table-column>
  64. <el-table-column label="操作" align="center">
  65. <template slot-scope="scope">
  66. <el-button type="text" @click="handle(scope.row)">编辑</el-button>
  67. </template>
  68. </el-table-column>
  69. </el-table>
  70. </template>
  71. </el-tab-pane>
  72. </el-tabs>
  73. <el-button :loading="btnLoading" class="button-item" type="primary" style="margin-top: 24px;" @click="submit" size="small" v-if="activeName=='system'">保存
  74. </el-button>
  75. </el-form>
  76. </el-card>
  77. </template>
  78. </div>
  79. <el-dialog
  80. title="编辑视频教程" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
  81. <el-form ref="form" :model="form" label-width="80px">
  82. <el-form-item label="视频名称">
  83. <el-input v-model="name" placeholder="视频名称"></el-input>
  84. </el-form-item>
  85. <el-form-item label="视频文件">
  86. <com-attachment :type="'videos'" :multiple="false" :max="1" v-model="video_url" @selected="handleSelected">
  87. <el-button size="mini">选择文件</el-button>
  88. <span style="margin-left: 15px;">{{selectedVideo}}</span>
  89. </com-attachment>
  90. </el-form-item>
  91. <el-form-item label="">
  92. <el-input v-model="url" placeholder="视频链接"></el-input>
  93. </el-form-item>
  94. </el-form>
  95. <span slot="footer" class="dialog-footer">
  96. <el-button @click="dialogVisible = false">取 消</el-button>
  97. <el-button type="primary" @click="submitUpdate">确 定</el-button>
  98. </span>
  99. </el-dialog>
  100. </el-card>
  101. </div>
  102. <script>
  103. const app = new Vue({
  104. el: '#app',
  105. data() {
  106. return {
  107. loading: false,
  108. btnLoading: false,
  109. params: {},
  110. activeName: 'system',
  111. setting_group_name:{
  112. system:'教程设置',
  113. video_tutorials:'视频教程',
  114. },
  115. ruleForm: {
  116. // 基础设置
  117. system: {
  118. course_url:{title:'教程链接',value:'',remark: ''},
  119. question_url:{title:'常见问题',value:'',remark: ''},
  120. app_url:{title:'app对接',value:'',remark: ''},
  121. wx_url:{title:'微信对接',value:'',remark: ''},
  122. mini_app:{title:'小程序对接',value:'',remark: ''},
  123. is_show_video_tutorials:{title:'是否显示视频教程',value:0,remark: ''},
  124. }
  125. },
  126. form:{},
  127. dialogVisible: false,
  128. video_tutorials:[],
  129. video_url:"",
  130. selectedVideo: '', // 已选择的视频文件
  131. name:"",
  132. id:"",
  133. url: '', // 已选择的视频文件
  134. }
  135. },
  136. mounted: function() {
  137. this.loadData();
  138. },
  139. methods: {
  140. loadData() {
  141. if(this.loading === true) return;
  142. this.loading = true;
  143. request({
  144. params: {
  145. r: 'admin/setting/course',
  146. },
  147. method: 'get'
  148. }).then(e => {
  149. this.loading = false;
  150. if (e.data.code == 0) {
  151. if(e.data.data){//有选中的
  152. var data = e.data.data;
  153. this.video_tutorials = data.video_tutorials;
  154. if(data.question_url){
  155. this.ruleForm.system.question_url= data.question_url;
  156. }
  157. if(data.course_url){
  158. this.ruleForm.system.course_url = data.course_url;
  159. }
  160. if(data.app_url){
  161. this.ruleForm.system.app_url = data.app_url;
  162. }
  163. if(data.wx_url){
  164. this.ruleForm.system.wx_url = data.wx_url;
  165. }
  166. if(data.mini_app){
  167. this.ruleForm.system.mini_app = data.mini_app;
  168. }
  169. if(data.is_show_video_tutorials){
  170. this.ruleForm.system.is_show_video_tutorials = data.is_show_video_tutorials;
  171. }
  172. }
  173. }
  174. }).catch(e => {
  175. this.loading = false;
  176. })
  177. },
  178. submit() {
  179. this.btnLoading = true;
  180. this.$request({
  181. params: {
  182. r: 'admin/setting/course',
  183. },
  184. method: 'post',
  185. data: {
  186. setting: this.ruleForm,
  187. },
  188. }).then(e => {
  189. this.btnLoading = false;
  190. if (e.data.code === 0) {
  191. this.$message.success(e.data.msg);
  192. } else {
  193. this.$message.error(e.data.msg);
  194. }
  195. }).catch(e => {
  196. this.btnLoading = false;
  197. });
  198. },
  199. handleSelected(res) {
  200. this.url = res[0].url;
  201. this.selectedVideo = '已选择: ' + res[0].name;
  202. },
  203. handle(row){
  204. this.dialogVisible = true;
  205. this.id = row.id
  206. this.name = row.name;
  207. this.url = row.url;
  208. },
  209. handleClose(done) {
  210. this.dialogVisible = false;
  211. this.name='';
  212. this.id='';
  213. this.url='';
  214. this.selectedVideo='';
  215. },
  216. submitUpdate(){
  217. this.btnLoading = true;
  218. this.$request({
  219. params: {
  220. r: 'admin/setting/course-video',
  221. },
  222. method: 'post',
  223. data: {
  224. id: this.id,
  225. name: this.name,
  226. url: this.url,
  227. },
  228. }).then(e => {
  229. this.btnLoading = false;
  230. if (e.data.code === 0) {
  231. this.dialogVisible = false;
  232. this.name='';
  233. this.id='';
  234. this.url='';
  235. this.selectedVideo='';
  236. this.$message.success(e.data.msg);
  237. this.loadData();
  238. } else {
  239. this.$message.error(e.data.msg);
  240. }
  241. }).catch(e => {
  242. this.btnLoading = false;
  243. });
  244. }
  245. }
  246. });
  247. </script>