createsteps.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. {extend name="public/container"}
  2. {block name='head_top'}
  3. <style>
  4. .layui-form-item .study-label i{display: inline-block;width: 18px;height: 18px;font-size: 18px;color: #fff;}
  5. .layui-form-item .label-box p{line-height: inherit;}
  6. .m-t-5{margin-top:5px;}
  7. #app .layui-barrage-box{margin-bottom: 10px;margin-top: 10px;margin-left: 10px;border: 1px solid #0092DC;border-radius: 5px;cursor: pointer;position: relative;}
  8. #app .layui-barrage-box.border-color{border-color: #0bb20c;}
  9. #app .layui-barrage-box .del-text{position: absolute;top: 0;left: 0;background-color: rgba(0,0,0,0.5);color: #ffffff;width: 92%;text-align: center;}
  10. #app .layui-barrage-box p{padding:5px 5px; }
  11. #app .layui-empty-text{text-align: center;font-size: 18px;}
  12. #app .layui-empty-text p{padding: 10px 10px;}
  13. .edui-default .edui-for-image .edui-icon {background-position: -380px 0px;}
  14. .layui-form-item .label-box {border: 1px solid;border-radius: 10px;position: relative;padding: 10px;height: 30px;color: #fff;background-color: #393D49;text-align: center;cursor: pointer;display: inline-block;line-height: 10px;}
  15. .layui-form-item .label-box p {line-height: inherit;}
  16. </style>
  17. {/block}
  18. {block name="content"}
  19. <div class="layui-fluid" id="app" v-cloak>
  20. <div class="layui-card">
  21. <div class="layui-card-header">{{id ? '编辑学习计划':'添加学习计划'}}</div>
  22. <div class="layui-card-body">
  23. <form action="" class="layui-form">
  24. <div class="layui-form-item">
  25. <div class="layui-form-item submit">
  26. <label class="layui-form-label">排序:</label>
  27. <div class="layui-input-inline">
  28. <input type="number" name="sort" v-model="formData.sort" min="0" max="9999" class="layui-input" v-sort>
  29. </div>
  30. </div>
  31. <div class="layui-form-item required">
  32. <label class="layui-form-label">步骤名称:</label>
  33. <div class="layui-input-inline">
  34. <input type="text" name="stepname" v-model.trim="formData.stepname" required autocomplete="off" placeholder="请输入学习计划名称" maxlength="8" class="layui-input">
  35. </div>
  36. </div>
  37. <div class="layui-form-item required">
  38. <label class="layui-form-label">步骤介绍:</label>
  39. <div class="layui-input-block">
  40. <textarea name="introduction" style="width: 80%;" rows="5" v-model="formData.introduction">{{formData.introduction}}</textarea>
  41. </div>
  42. </div>
  43. <!-- <div class="layui-form-item">
  44. <label class="layui-form-label">状态:</label>
  45. <div class="layui-input-block">
  46. <input type="radio" name="is_show" value="1" title="显示" v-model="formData.is_show" lay-filter="is_show" >
  47. <input type="radio" name="is_show" value="0" title="隐藏" v-model="formData.is_show" lay-filter="is_show">
  48. </div>
  49. </div> -->
  50. </form>
  51. </div>
  52. <div class="layui-card-header">步骤关联课程管理</div>
  53. <div>
  54. <button type="button" class="layui-btn layui-btn-normal layui-btn-sm" @click="addcouse">
  55. <i class="layui-icon layui-icon-add-1"></i>添加课程
  56. </button>
  57. </div>
  58. <table class="layui-table">
  59. <tr>
  60. <td align="center">课程ID</td>
  61. <td>图片</td>
  62. <td>名称</td>
  63. <td>类型</td>
  64. <td align="center">单价</td>
  65. <td align="center">操作</td>
  66. </tr>
  67. <tr v-for="(item, index) in courselist" :key="index">
  68. <td align="center">{{item.id}}</td>
  69. <td><img :src="item.image" height="50" /></td>
  70. <td>{{item.title}}</td>
  71. <td>课程</td>
  72. <td align="center">¥{{item.money}}</td>
  73. <td align="center"><a @click="delitem(item.id)" href="javascript:void(0);" style="color:red;"><i class="iconfont icon-shanchu"></i>删除</a></td>
  74. </tr>
  75. </table>
  76. </script>
  77. <div class="layui-form-item submit">
  78. <div class="layui-input-block">
  79. <button class="layui-btn layui-btn-normal" type="button" @click="save">{{id ? '立即修改':'立即提交'}}</button>
  80. <button class="layui-btn layui-btn-primary clone" type="button" @click="clone_form">取消</button>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. <script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
  86. {/block}
  87. {block name='script'}
  88. <script>
  89. var id={$id}, pid={$pid}, plan=<?php echo isset($plan) ? $plan : []?>;
  90. var $ = layui.jquery;
  91. var layer = layui.layer;
  92. var coursechecked = <?php echo (isset($coulist) && $coulist != '[]')? $coulist : '{}'?>;
  93. //加载列表
  94. require(['vue','helper','zh-cn','request','plupload','aliyun-oss','OssUpload'],function(Vue,$h) {
  95. new Vue({
  96. el: "#app",
  97. directives: {
  98. sort: {
  99. bind: function (el, binding, vnode) {
  100. var vm = vnode.context;
  101. el.addEventListener('change', function () {
  102. if (!this.value || this.value < 0) {
  103. vm.formData.sort = 0;
  104. } else if (this.value > 9999) {
  105. vm.formData.sort = 9999;
  106. } else {
  107. vm.formData.sort = parseInt(this.value);
  108. }
  109. });
  110. }
  111. }
  112. },
  113. data: {
  114. formData:{
  115. stepname:plan.stepname || '',
  116. pid:pid || 0,
  117. plan_head: plan.plan_head || '',
  118. introduction: plan.introduction || '',
  119. sort:Number(plan.sort) || 0,
  120. courseids:[]
  121. },
  122. courselist: [],
  123. },
  124. methods:{
  125. addcouse:function(e){
  126. that = this
  127. layer.open({
  128. type: 2,
  129. title: '添加课程',
  130. content:'{:Url('addcouse')}?id=' + id + "&pid=" + pid,
  131. area: ['80%', '80%'],
  132. maxmin: true,
  133. btn:['确定', '取消'],
  134. btn1: function (index, layero) {
  135. that.formData.courseids = []
  136. that.courselist = []
  137. for(i in coursechecked){
  138. that.courselist.push(coursechecked[i]);
  139. that.formData.courseids.push(i);
  140. }
  141. //console.log(that.courselist);
  142. layer.close(index)
  143. //return false;
  144. },
  145. btn2: function (index, layero) {
  146. coursechecked = {};
  147. layer.close(index)
  148. },
  149. end: function () {
  150. //console.log(courseids);
  151. //location.reload();
  152. }
  153. });
  154. },
  155. delitem:function (id){
  156. that = this
  157. that.formData.courseids = []
  158. that.courselist = []
  159. delete coursechecked[id];
  160. for(i in coursechecked){
  161. that.courselist.push(coursechecked[i]);
  162. that.formData.courseids.push(i);
  163. }
  164. },
  165. clone_form: function () {
  166. var that = this;
  167. if (parseInt(id) == 0) {
  168. parent.layer.closeAll();
  169. }
  170. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  171. parent.layer.close(index); //再执行关闭
  172. },
  173. save:function () {
  174. var that=this;
  175. that.$nextTick(function () {
  176. if (!that.formData.stepname) return layList.msg('请输入学习步骤名称');
  177. if (!that.formData.introduction) return layList.msg('请输入学习步骤介绍');
  178. if (that.formData.courseids.length == 0) return layList.msg('没有选择如任何课程,至少选择一个课程');
  179. layList.loadFFF();
  180. layList.basePost(layList.U({a: 'savesteps', q: {id: id}}), that.formData, function (res) {
  181. layList.loadClear();
  182. if (parseInt(id) == 0) {
  183. layList.layer.confirm('添加成功,您要继续添加吗?', {
  184. btn: ['继续添加', '立即提交']
  185. }, function (index) {
  186. layList.layer.close(index);
  187. }, function (index) {
  188. layList.layer.close(index);
  189. var index = parent.layer.getFrameIndex(window.name);
  190. parent.layer.close(index);
  191. });
  192. } else {
  193. layList.msg('修改成功', function () {
  194. parent.layer.closeAll();
  195. })
  196. }
  197. }, function (res) {
  198. layList.msg(res.msg);
  199. layList.loadClear();
  200. });
  201. })
  202. },
  203. delect:function(key){
  204. var that=this;
  205. that.formData[key]='';
  206. },
  207. changeIMG: function (key, value, multiple) {
  208. if (multiple) {
  209. var that = this;
  210. value.map(function (v) {
  211. that.formData[key].push({pic: v, is_show: false});
  212. });
  213. this.$set(this.formData, key, this.formData[key]);
  214. } else {
  215. this.$set(this.formData, key, value);
  216. }
  217. },
  218. },
  219. mounted:function () {
  220. var that=this;
  221. this.$nextTick(function () {
  222. layList.form.render();
  223. });
  224. if (coursechecked) {
  225. for(i in coursechecked) {
  226. that.courselist.push(coursechecked[i]);
  227. that.formData.courseids.push(i);
  228. }
  229. }
  230. }
  231. })
  232. });
  233. layList.tool(function (event,data,obj) {
  234. switch (event) {
  235. case 'open_image':
  236. $eb.openImage(data.image);
  237. break;
  238. }
  239. })
  240. </script>
  241. {/block}