add.php 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  1. {extend name="public/container"}
  2. {block name='head_top'}
  3. <style>
  4. .layui-table {
  5. width: 100%!important;
  6. }
  7. .layui-form-item .special-label {
  8. width: 50px;
  9. float: left;
  10. height: 30px;
  11. line-height: 38px;
  12. margin-left: 10px;
  13. margin-top: 5px;
  14. border-radius: 5px;
  15. background-color: #0092DC;
  16. text-align: center;
  17. }
  18. .layui-form-item .special-label i {
  19. display: inline-block;
  20. width: 18px;
  21. height: 18px;
  22. font-size: 18px;
  23. color: #fff;
  24. }
  25. .layui-form-item .label-box {
  26. border: 1px solid;
  27. border-radius: 10px;
  28. position: relative;
  29. padding: 10px;
  30. height: 30px;
  31. color: #fff;
  32. background-color: #393D49;
  33. text-align: center;
  34. cursor: pointer;
  35. display: inline-block;
  36. line-height: 10px;
  37. }
  38. .layui-form-item .label-box p {
  39. line-height: inherit;
  40. }
  41. .edui-default .edui-for-image .edui-icon {
  42. background-position: -380px 0px;
  43. }
  44. </style>
  45. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/third-party/zeroclipboard/ZeroClipboard.js"></script>
  46. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.config.js"></script>
  47. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.all.min.js"></script>
  48. {/block}
  49. {block name="content"}
  50. <div v-cloak id="app" class="layui-fluid">
  51. <div class="layui-card">
  52. <div class="layui-card-body">
  53. <form class="layui-form" action="">
  54. <div class="layui-tab layui-tab-brief" lay-filter="tab">
  55. <ul class="layui-tab-title">
  56. <li class="layui-this" lay-id="0">基本设置</li>
  57. <li lay-id="1">题库选择</li>
  58. <li v-show="type==2" lay-id="2">价格设置</li>
  59. </ul>
  60. <div class="layui-tab-content">
  61. <div class="layui-tab-item layui-show">
  62. <div class="layui-form-item">
  63. <label class="layui-form-label required">{$type==1 ? '练习名称' : '考试名称'}:</label>
  64. <div class="layui-input-block">
  65. <input type="text" name="title" v-model.trim="formData.title" autocomplete="off" placeholder="请输入{$type==1 ? '练习名称' : '考试名称'}" maxlength="30" class="layui-input">
  66. </div>
  67. </div>
  68. <div class="layui-form-item">
  69. <label class="layui-form-label required">{$type==1 ? '练习分类' : '考试分类'}:</label>
  70. <div class="layui-input-block">
  71. <select name="tid" v-model="formData.tid" lay-search="" lay-filter="tid">
  72. <option value="">请选择{$type==1 ? '练习分类' : '考试分类'}</option>
  73. <option v-for="item in cateList" :disabled="item.pid==0 ? true : false" :value="item.id">{{item.html}}{{item.title}}</option>
  74. </select>
  75. </div>
  76. </div>
  77. <div class="layui-form-item" v-show="type==2">
  78. <label :class="{ required: type == 2 }" class="layui-form-label">考试封面:(710*400)</label>
  79. <div class="layui-input-block">
  80. <div class="upload-image-box" v-if="formData.image">
  81. <img :src="formData.image" alt="">
  82. <div class="mask">
  83. <p><i class="fa fa-eye" @click="look(formData.image)"></i><i class="fa fa-trash-o" @click="delect('image')"></i></p>
  84. </div>
  85. </div>
  86. <div class="upload-image" v-show="!formData.image" @click="upload('image')">
  87. <div class="fiexd"><i class="fa fa-plus"></i></div>
  88. <p>选择图片</p>
  89. </div>
  90. </div>
  91. </div>
  92. <div class="layui-form-item">
  93. <div class="layui-inline">
  94. <label class="layui-form-label required">单选题数量:</label>
  95. <div class="layui-input-inline">
  96. <input type="number" name="single_number" v-model.number="formData.single_number" min="0" autocomplete="off" class="layui-input">
  97. </div>
  98. </div>
  99. <div class="layui-inline" >
  100. <label class="layui-form-label">题型排序/倒序:</label>
  101. <div class="layui-input-inline">
  102. <input type="number" name="single_sort" v-model="formData.single_sort" autocomplete="off" class="layui-input">
  103. </div>
  104. </div>
  105. <div class="layui-inline" v-show="type==2">
  106. <label class="layui-form-label">每题分数:</label>
  107. <div class="layui-input-inline">
  108. <input type="number" name="single_score" v-model="formData.single_score" autocomplete="off" class="layui-input">
  109. </div>
  110. </div>
  111. </div>
  112. <div class="layui-form-item">
  113. <div class="layui-inline">
  114. <label class="layui-form-label required">多选题数量:</label>
  115. <div class="layui-input-inline">
  116. <input type="number" name="many_number" v-model.number="formData.many_number" min="0" autocomplete="off" class="layui-input">
  117. </div>
  118. </div>
  119. <div class="layui-inline" >
  120. <label class="layui-form-label">题型排序/倒序:</label>
  121. <div class="layui-input-inline">
  122. <input type="number" name="many_sort" v-model="formData.many_sort" autocomplete="off" class="layui-input">
  123. </div>
  124. </div>
  125. <div class="layui-inline" v-show="type==2">
  126. <label class="layui-form-label">每题分数:</label>
  127. <div class="layui-input-inline">
  128. <input type="number" name="many_score" v-model="formData.many_score" autocomplete="off" class="layui-input">
  129. </div>
  130. </div>
  131. </div>
  132. <div class="layui-form-item">
  133. <div class="layui-inline">
  134. <label class="layui-form-label required">判断题数量:</label>
  135. <div class="layui-input-inline">
  136. <input type="number" name="judge_number" v-model.number="formData.judge_number" min="0" autocomplete="off" class="layui-input">
  137. </div>
  138. </div>
  139. <div class="layui-inline" >
  140. <label class="layui-form-label">题型排序/倒序:</label>
  141. <div class="layui-input-inline">
  142. <input type="number" name="judge_sort" v-model="formData.judge_sort" autocomplete="off" class="layui-input">
  143. </div>
  144. </div>
  145. <div class="layui-inline" v-show="type==2">
  146. <label class="layui-form-label">每题分数:</label>
  147. <div class="layui-input-inline">
  148. <input type="number" name="judge_score" v-model="formData.judge_score" autocomplete="off" class="layui-input">
  149. </div>
  150. </div>
  151. </div>
  152. <div class="layui-form-item">
  153. <div class="layui-inline">
  154. <label class="layui-form-label">试题总数:</label>
  155. <div class="layui-input-inline">
  156. <input type="number" name="item_number" :value="sum" min="0" disabled autocomplete="off" class="layui-input">
  157. </div>
  158. </div>
  159. <div class="layui-inline" v-show="type==2">
  160. <label class="layui-form-label">总分数:</label>
  161. <div class="layui-input-inline">
  162. <input type="number" name="total_score" :value="total" autocomplete="off" disabled class="layui-input">
  163. </div>
  164. </div>
  165. <div class="layui-inline">
  166. <label class="layui-form-label">虚拟答题人数:</label>
  167. <div class="layui-input-inline">
  168. <input type="number" name="fake_sales" v-model="formData.fake_sales" autocomplete="off" class="layui-input">
  169. </div>
  170. </div>
  171. </div>
  172. <div class="layui-form-item">
  173. <div class="layui-inline" v-show="type==2">
  174. <label :class="{ required: type == 2 }" class="layui-form-label">时长/分:</label>
  175. <div class="layui-input-inline">
  176. <input type="number" name="txamination_time" v-model="formData.txamination_time" lay-verify="number" autocomplete="off" class="layui-input" min="0">
  177. </div>
  178. </div>
  179. <div class="layui-inline" v-show="type==2">
  180. <label :class="{ required: type == 2 }" class="layui-form-label">考试次数:</label>
  181. <div class="layui-input-inline">
  182. <input type="number" name="frequency" v-model="formData.frequency" autocomplete="off" class="layui-input">
  183. </div>
  184. </div>
  185. <div class="layui-inline" v-show="type==2" style="color: red;">注:[0为不限制次数]</div>
  186. </div>
  187. <div class="layui-form-item submit" v-show="type==2">
  188. <label class="layui-form-label">分数显示:</label>
  189. <div class="layui-input-block">
  190. <input type="radio" name="is_score" lay-filter="is_score" v-model="formData.is_score" value="1" title="显示">
  191. <input type="radio" name="is_score" lay-filter="is_score" v-model="formData.is_score" value="0" title="隐藏">
  192. </div>
  193. </div>
  194. <div class="layui-form-item">
  195. <label class="layui-form-label">试卷难度:</label>
  196. <div class="layui-input-block">
  197. <div id="rate"></div>
  198. </div>
  199. </div>
  200. <div v-for="(item, index) in grade" :key="index" class="layui-form-item" v-show="type==2">
  201. <label v-if="!index" class="layui-form-label">分数等级:</label>
  202. <div class="layui-input-block">
  203. <div class="layui-inline">
  204. <div class="layui-input-inline">
  205. <input v-model="item.grade_name" type="text" required lay-verify="required" maxlength="60" placeholder="名称" autocomplete="off" class="layui-input">
  206. </div>
  207. </div>
  208. <div class="layui-inline">
  209. <div class="layui-input-inline">
  210. <input v-model="item.grade_standard" type="text" required lay-verify="required" maxlength="60" placeholder="区间" autocomplete="off" class="layui-input">
  211. </div>
  212. </div>
  213. <div v-if="index && index === grade.length - 1" class="layui-inline">
  214. <button type="button" class="layui-btn layui-btn-danger layui-btn-sm" @click="onDel">删除选项</button>
  215. </div>
  216. </div>
  217. </div>
  218. <div class="layui-form-item" v-show="type==2">
  219. <div class="layui-input-block">
  220. <button type="button" class="layui-btn layui-btn-normal layui-btn-sm" @click="onAdd">添加选项</button>
  221. </div>
  222. </div>
  223. <div class="layui-form-item submit">
  224. <label class="layui-form-label">组题方式:</label>
  225. <div class="layui-input-block">
  226. <input type="radio" name="is_group" lay-filter="is_group" v-model="formData.is_group" value="1" title="手动组题">
  227. <input type="radio" name="is_group" lay-filter="is_group" v-model="formData.is_group" value="2" title="随机组题">
  228. </div>
  229. </div>
  230. <div class="layui-form-item submit">
  231. <label class="layui-form-label">{$type==1 ? '练习状态' : '考试状态'}:</label>
  232. <div class="layui-input-block">
  233. <input type="radio" name="is_show" lay-filter="is_show" v-model="formData.is_show" value="1" title="显示">
  234. <input type="radio" name="is_show" lay-filter="is_show" v-model="formData.is_show" value="0" title="隐藏">
  235. </div>
  236. </div>
  237. </div>
  238. <div class="layui-tab-item">
  239. <div class="layui-form-item" v-show="formData.is_group==1">
  240. <label class="layui-form-label">单选题:</label>
  241. <div class="layui-input-block">
  242. <input type="hidden" id="check_questions_tmp_1" name="check_questions_tmp_1"/>
  243. <button type="button" class="layui-btn layui-btn-normal" @click='questions_task(1)'>
  244. 选择单选试题
  245. </button>
  246. </div>
  247. </div>
  248. <div class="layui-form-item" v-show="formData.is_group==1">
  249. <label class="layui-form-label">题库展示:</label>
  250. <div class="layui-input-block">
  251. <input type="hidden" id="check_questions_sure_1" name="check_questions_sure_1"/>
  252. <table class="layui-hide" id="showQuestionsList_1" lay-filter="showQuestionsList_1"></table>
  253. </div>
  254. </div>
  255. <div class="layui-form-item" v-show="formData.is_group==1">
  256. <label class="layui-form-label">多选题:</label>
  257. <div class="layui-input-block">
  258. <input type="hidden" id="check_questions_tmp_2" name="check_questions_tmp_2"/>
  259. <button type="button" class="layui-btn layui-btn-normal" @click='questions_task(2)'>
  260. 选择多选试题
  261. </button>
  262. </div>
  263. </div>
  264. <div class="layui-form-item" v-show="formData.is_group==1">
  265. <label class="layui-form-label">题库展示:</label>
  266. <div class="layui-input-block">
  267. <input type="hidden" id="check_questions_sure_2" name="check_questions_sure_2"/>
  268. <table class="layui-hide" id="showQuestionsList_2" lay-filter="showQuestionsList_2"></table>
  269. </div>
  270. </div>
  271. <div class="layui-form-item" v-show="formData.is_group==1">
  272. <label class="layui-form-label">判断题:</label>
  273. <div class="layui-input-block">
  274. <input type="hidden" id="check_questions_tmp_3" name="check_questions_tmp_3"/>
  275. <button type="button" class="layui-btn layui-btn-normal" @click='questions_task(3)'>
  276. 选择判断试题
  277. </button>
  278. </div>
  279. </div>
  280. <div class="layui-form-item" v-show="formData.is_group==1">
  281. <label class="layui-form-label">题库展示:</label>
  282. <div class="layui-input-block">
  283. <input type="hidden" id="check_questions_sure_3" name="check_questions_sure_3"/>
  284. <table class="layui-hide" id="showQuestionsList_3" lay-filter="showQuestionsList_3"></table>
  285. </div>
  286. </div>
  287. <div class="layui-form-item" v-show="formData.is_group==2">
  288. <label class="layui-form-label">题库分类:</label>
  289. <div class="layui-input-block">
  290. <select name="cate_id" v-model="formData.cate_id" lay-search="" lay-filter="cate_id">
  291. <option v-for="item in questionsCateList" :value="item.id">{{item.html}}{{item.title}}</option>
  292. </select>
  293. </div>
  294. </div>
  295. </div>
  296. <div class="layui-tab-item">
  297. <div class="layui-form-item">
  298. <label class="layui-form-label">付费方式:</label>
  299. <div class="layui-input-block">
  300. <input type="radio" name="pay_type" lay-filter="pay_type" v-model="formData.pay_type" value="1" title="付费">
  301. <input type="radio" name="pay_type" lay-filter="pay_type" v-model="formData.pay_type" value="0" title="免费">
  302. </div>
  303. </div>
  304. <div class="layui-form-item" v-show="formData.pay_type == 1">
  305. <label class="layui-form-label">购买金额:</label>
  306. <div class="layui-input-block">
  307. <input style="width: 300px" type="number" name="money" lay-verify="number" v-model="formData.money" autocomplete="off" class="layui-input">
  308. </div>
  309. <!-- <div class="layui-form-item">
  310. <label class="layui-form-label" style="padding: 9px 0;">会员付费方式:</label>
  311. <div class="layui-input-block">
  312. <input type="radio" name="member_pay_type" lay-filter="member_pay_type" v-model="formData.member_pay_type" value="1" title="付费">
  313. <input type="radio" name="member_pay_type" lay-filter="member_pay_type" v-model="formData.member_pay_type" value="0" title="免费">
  314. </div>
  315. </div>
  316. <div class="layui-form-item" v-show="formData.member_pay_type == 1">
  317. <label class="layui-form-label" style="padding: 9px 0;">会员购买金额:</label>
  318. <div class="layui-input-block">
  319. <input style="width: 300px" type="number" name="member_money" lay-verify="number" v-model="formData.member_money" autocomplete="off" class="layui-input" min="0">
  320. </div>
  321. </div> -->
  322. </div>
  323. </div>
  324. </div>
  325. </div>
  326. <div class="layui-form-item">
  327. <div class="layui-input-block">
  328. <button type="button" class="layui-btn layui-btn-primary" @click="clone_form">取消</button>
  329. <button v-show="tabIndex" type="button" class="layui-btn layui-btn-primary" @click="tabChange(-1)">上一步</button>
  330. <button v-show="(tabIndex != 1 && type == 1) || (tabIndex != 2 && type == 2)" type="button" class="layui-btn layui-btn-normal" @click="tabChange(1)">下一步</button>
  331. <button v-show="(tabIndex == 1 && type == 1) || (tabIndex == 2 && type == 2)" type="button" class="layui-btn layui-btn-normal" @click="save">{$id ?'确认修改':'立即提交'}</button>
  332. </div>
  333. </div>
  334. </form>
  335. </div>
  336. </div>
  337. </div>
  338. <script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
  339. {/block}
  340. {block name='script'}
  341. <script>
  342. var id={$id},type={$type},test=<?=isset($test) ? $test : []?>,grades=<?=isset($grade) ? $grade : []?>,
  343. single_tmp_list =<?= isset($single_tmp_list) ? $single_tmp_list : "{}"?>,
  344. many_tmp_list =<?= isset($many_tmp_list) ? $many_tmp_list : "{}"?>,
  345. judge_tmp_list =<?= isset($judge_tmp_list) ? $judge_tmp_list : "{}"?>;
  346. require(['vue','helper','zh-cn','request','plupload','aliyun-oss','OssUpload'], function (Vue,$h) {
  347. new Vue({
  348. el: "#app",
  349. data: {
  350. cateList:[],
  351. questionsCateList:[],
  352. single_list:[],//用于子页父业选中素材传值的临时变量
  353. many_list:[],//用于子页父业选中素材传值的临时变量
  354. judge_list:[],//用于子页父业选中素材传值的临时变量
  355. formData:{
  356. singleIds:'',
  357. manyIds:'',
  358. judgeIds:'',
  359. title:test.title || '',
  360. image:test.image || '',
  361. tid: test.tid || 0,
  362. is_show: test.is_show || 1,
  363. item_number:Number(test.item_number) || 0,
  364. total_score:Number(test.total_score) || 0,
  365. single_number:Number(test.single_number) || 0,
  366. single_score:Number(test.single_score) || 0,
  367. many_number:Number(test.many_number) || 0,
  368. many_score:Number(test.many_score) || 0,
  369. judge_number:Number(test.judge_number) || 0,
  370. judge_score:Number(test.judge_score) || 0,
  371. single_sort:Number(test.single_sort) || 0,
  372. many_sort:Number(test.many_sort) || 0,
  373. judge_sort:Number(test.judge_sort) || 0,
  374. fake_sales:test.fake_sales || 0,
  375. difficulty:test.difficulty || 1,
  376. pay_type:test.pay_type || 0,
  377. money:test.money || 0,
  378. member_pay_type:test.member_pay_type || 0,
  379. member_money:test.member_money || 0,
  380. txamination_time:Number(test.txamination_time) || 0,
  381. single_tmp_list:single_tmp_list ? single_tmp_list : {},
  382. many_tmp_list:many_tmp_list ? many_tmp_list : {},
  383. judge_tmp_list:judge_tmp_list ? judge_tmp_list : {},
  384. is_score:test.is_score || 0,
  385. frequency:test.frequency > 0 ? test.frequency : (id > 0 ? 0 : 1),
  386. sort:Number(test.sort) || 0,
  387. is_group:test.is_group || 1,
  388. cate_id:test.cate_id || 0,
  389. },
  390. type:type,
  391. mask:{
  392. image:false
  393. },
  394. grade: [
  395. {
  396. grade_name:'优秀',
  397. grade_standard: '91~100'
  398. },
  399. {
  400. grade_name:'良好',
  401. grade_standard: '81~90'
  402. },
  403. {
  404. grade_name:'合格',
  405. grade_standard: '61~80'
  406. },
  407. {
  408. grade_name:'不合格',
  409. grade_standard: '0~60'
  410. }
  411. ],
  412. difficultyHover: 0,
  413. tabIndex: 0
  414. },
  415. computed: {
  416. sum: function () {
  417. return this.formData.single_number + this.formData.many_number + this.formData.judge_number;
  418. },
  419. total: function () {
  420. return this.formData.single_number * this.formData.single_score + this.formData.many_number * this.formData.many_score + this.formData.judge_number * this.formData.judge_score;
  421. }
  422. },
  423. methods: {
  424. onRateClick: function (value) {
  425. this.formData.difficulty = value;
  426. },
  427. onRateMousemove: function (value) {
  428. this.difficultyHover = value;
  429. },
  430. onRateMouseleave: function () {
  431. this.difficultyHover = 0;
  432. },
  433. onAdd: function () {
  434. this.grade.push({
  435. grade_name: '',
  436. grade_standard: ''
  437. });
  438. },
  439. onDel: function () {
  440. this.grade.pop();
  441. },
  442. //删除图片
  443. delect: function (key, index) {
  444. var that = this;
  445. if (index != undefined) {
  446. that.formData[key].splice(index, 1);
  447. that.$set(that.formData, key, that.formData[key]);
  448. } else {
  449. that.$set(that.formData, key, '');
  450. }
  451. },
  452. //查看图片
  453. look: function (pic) {
  454. parent.$eb.openImage(pic);
  455. },
  456. //鼠标移入事件
  457. enter: function (item) {
  458. if (item) {
  459. item.is_show = true;
  460. } else {
  461. this.mask = true;
  462. }
  463. },
  464. //鼠标移出事件
  465. leave: function (item) {
  466. if (item) {
  467. item.is_show = false;
  468. } else {
  469. this.mask = false;
  470. }
  471. },
  472. changeIMG: function (key, value, multiple) {
  473. if (multiple) {
  474. var that = this;
  475. value.map(function (v) {
  476. that.formData[key].push({pic: v, is_show: false});
  477. });
  478. this.$set(this.formData, key, this.formData[key]);
  479. } else {
  480. this.$set(this.formData, key, value);
  481. }
  482. },
  483. //上传图片
  484. upload: function (key, count) {
  485. ossUpload.createFrame('请选择图片', {fodder: key, max_count: count === undefined ? 0 : count},{w:800,h:550});
  486. },
  487. get_subject_list: function () {
  488. var that = this;
  489. layList.baseGet(layList.U({a: 'add_cate_list',p:{type:type}}), function (res) {
  490. that.$set(that, 'cateList', res.data);
  491. that.$nextTick(function () {
  492. layList.form.render('select');
  493. })
  494. });
  495. },
  496. get_questions_list: function () {
  497. var that = this;
  498. layList.baseGet(layList.U({a: 'cate_questions',p:{type:type}}), function (res) {
  499. that.$set(that, 'questionsCateList', res.data);
  500. that.$nextTick(function () {
  501. layList.form.render('select');
  502. })
  503. });
  504. },
  505. questions_task:function (question_type) {
  506. var that=this;
  507. var url="{:Url('questions.test_paper/questions')}?question_type="+question_type+'&id='+id;
  508. layer.open({
  509. type: 2 //Page层类型
  510. ,area: ['80%', '90%']
  511. ,title: '关联试题'
  512. ,shade: 0.6 //遮罩透明度
  513. ,maxmin: true //允许全屏最小化
  514. ,anim: 1 //0-6的动画形式,-1不开启
  515. ,content: url,
  516. btn: '确定',
  517. btnAlign: 'c', //按钮居中
  518. closeBtn:1,
  519. yes: function(){
  520. layer.closeAll();
  521. var questions_tmp = $("#check_questions_tmp_"+question_type).val();
  522. if(question_type==1){
  523. that.single_list = JSON.parse(questions_tmp).slice(0, that.formData.single_number);
  524. var array=that.formData.single_tmp_list;
  525. that.formData.single_tmp_list=array.concat(JSON.parse(questions_tmp).slice(0, that.formData.single_number));
  526. that.show_single_list();
  527. }else if(question_type==2){
  528. that.many_list = JSON.parse(questions_tmp).slice(0, that.formData.many_number);
  529. var array=that.formData.many_tmp_list;
  530. that.formData.many_tmp_list = array.concat(JSON.parse(questions_tmp).slice(0, that.formData.many_number));
  531. that.show_many_list();
  532. }else{
  533. that.judge_list = JSON.parse(questions_tmp).slice(0, that.formData.judge_number);
  534. var array=that.formData.judge_tmp_list;
  535. that.formData.judge_tmp_list = array.concat(JSON.parse(questions_tmp).slice(0, that.formData.judge_number));
  536. that.show_judge_list();
  537. }
  538. }
  539. });
  540. },
  541. show_single_list:function () {
  542. var that = this;
  543. var table = layui.table,form = layui.form;
  544. table.render({
  545. elem: '#showQuestionsList_1'
  546. ,cols: [[
  547. {field: 'id', title: '编号', align: 'center',width:60},
  548. {field: 'stem', title: '题干',align: 'center'},
  549. {field: 'sort', title: '排序/倒序(以整套试卷排列)',edit:'sort',align: 'center'},
  550. {field: 'right', title: '操作',align: 'center',templet:function(d){
  551. return '<div><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon">&#xe640;</i> 移除</a></div>';
  552. }}
  553. ]]
  554. ,data: (Object.keys(that.formData.single_tmp_list).length > 0) ? that.formData.single_tmp_list : []
  555. ,id: 'table_1'
  556. });
  557. table.on('tool(showQuestionsList_1)', function(obj){
  558. var data = obj.data;
  559. if(obj.event === 'del'){
  560. if (that.formData.single_tmp_list) {
  561. for(var i=0;i<that.formData.single_tmp_list.length;i++){
  562. if(that.formData.single_tmp_list[i].id==data.id){
  563. that.formData.single_tmp_list.splice(i,1);
  564. }
  565. }
  566. that.formData.single_tmp_list=that.formData.single_tmp_list;
  567. that.show_single_list();
  568. }
  569. }
  570. });
  571. table.on('edit(showQuestionsList_1)', function(obj){
  572. var id=obj.data.id,values=Number(obj.value);
  573. switch (obj.field) {
  574. case 'sort':
  575. if (that.formData.single_tmp_list) {
  576. $.each(that.formData.single_tmp_list, function(index, value){
  577. if(value.id == id){
  578. that.formData.single_tmp_list[index].sort = values;
  579. }
  580. })
  581. }
  582. break;
  583. }
  584. });
  585. //监听素材是否删除
  586. form.on('switch(delect)', function(obj){
  587. if (that.formData.single_tmp_list) {
  588. for(var i=0;i<that.formData.single_tmp_list.length;i++){
  589. if(that.formData.single_tmp_list[i].id==obj.value){
  590. that.formData.single_tmp_list.splice(i,1);
  591. }
  592. }
  593. that.formData.single_tmp_list=that.formData.single_tmp_list;
  594. that.show_single_list();
  595. }
  596. });
  597. },
  598. show_many_list:function () {
  599. var that = this;
  600. var table = layui.table,form = layui.form;
  601. table.render({
  602. elem: '#showQuestionsList_2'
  603. ,cols: [[
  604. {field: 'id', title: '编号', align: 'center',width:60},
  605. {field: 'stem', title: '题干',align: 'center'},
  606. {field: 'sort', title: '排序/倒序(以整套试卷排列)',edit:'sort',align: 'center'},
  607. {field: 'right', title: '操作',align: 'center',templet:function(d){
  608. return '<div><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon">&#xe640;</i> 移除</a></div>';
  609. }}
  610. ]]
  611. ,data: (Object.keys(that.formData.many_tmp_list).length > 0) ? that.formData.many_tmp_list : []
  612. ,id: 'table_2'
  613. });
  614. table.on('tool(showQuestionsList_2)', function(obj){
  615. var data = obj.data;
  616. if(obj.event === 'del'){
  617. if (that.formData.many_tmp_list) {
  618. for(var i=0;i<that.formData.many_tmp_list.length;i++){
  619. if(that.formData.many_tmp_list[i].id==data.id){
  620. that.formData.many_tmp_list.splice(i,1);
  621. }
  622. }
  623. that.formData.many_tmp_list=that.formData.many_tmp_list;
  624. that.show_many_list();
  625. }
  626. }
  627. });
  628. table.on('edit(showQuestionsList_2)', function(obj){
  629. var id=obj.data.id,values=Number(obj.value);
  630. switch (obj.field) {
  631. case 'sort':
  632. if (that.formData.many_tmp_list) {
  633. $.each(that.formData.many_tmp_list, function(index, value){
  634. if(value.id == id){
  635. that.formData.many_tmp_list[index].sort = values;
  636. }
  637. })
  638. }
  639. break;
  640. }
  641. });
  642. //监听素材是否删除
  643. form.on('switch(delect)', function(obj){
  644. if (that.formData.many_tmp_list) {
  645. for(var i=0;i<that.formData.many_tmp_list.length;i++){
  646. if(that.formData.many_tmp_list[i].id==obj.value){
  647. that.formData.many_tmp_list.splice(i,1);
  648. }
  649. }
  650. that.formData.many_tmp_list=that.formData.many_tmp_list;
  651. that.show_many_list();
  652. }
  653. });
  654. },
  655. show_judge_list:function () {
  656. var that = this;
  657. var table = layui.table,form = layui.form;
  658. table.render({
  659. elem: '#showQuestionsList_3'
  660. ,cols: [[
  661. {field: 'id', title: '编号', align: 'center',width:60},
  662. {field: 'stem', title: '题干',align: 'center'},
  663. {field: 'sort', title: '排序/倒序(以整套试卷排列)',edit:'sort',align: 'center'},
  664. {field: 'right', title: '操作',align: 'center',templet:function(d){
  665. return '<div><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon">&#xe640;</i> 移除</a></div>';
  666. }}
  667. ]]
  668. ,data: (Object.keys(that.formData.judge_tmp_list).length > 0) ? that.formData.judge_tmp_list : []
  669. ,id: 'table_3'
  670. });
  671. table.on('tool(showQuestionsList_3)', function(obj){
  672. var data = obj.data;
  673. if(obj.event === 'del'){
  674. if (that.formData.judge_tmp_list) {
  675. for(var i=0;i<that.formData.judge_tmp_list.length;i++){
  676. if(that.formData.judge_tmp_list[i].id==data.id){
  677. that.formData.judge_tmp_list.splice(i,1);
  678. }
  679. }
  680. that.formData.judge_tmp_list=that.formData.judge_tmp_list;
  681. that.show_judge_list();
  682. }
  683. }
  684. });
  685. table.on('edit(showQuestionsList_3)', function(obj){
  686. var id=obj.data.id,values=Number(obj.value);
  687. switch (obj.field) {
  688. case 'sort':
  689. if (that.formData.judge_tmp_list) {
  690. $.each(that.formData.judge_tmp_list, function(index, value){
  691. if(value.id == id){
  692. that.formData.judge_tmp_list[index].sort = values;
  693. }
  694. })
  695. }
  696. break;
  697. }
  698. });
  699. //监听素材是否删除
  700. form.on('switch(delect)', function(obj){
  701. if (that.formData.judge_tmp_list) {
  702. for(var i=0;i<that.formData.judge_tmp_list.length;i++){
  703. if(that.formData.judge_tmp_list[i].id==obj.value){
  704. that.formData.judge_tmp_list.splice(i,1);
  705. }
  706. }
  707. that.formData.judge_tmp_list=that.formData.judge_tmp_list;
  708. that.show_judge_list();
  709. }
  710. });
  711. },
  712. save: function () {
  713. var that = this;
  714. var grade=that.grade;
  715. for(var i=0;i<grade.length;i++){
  716. var v=i+1;
  717. if(grade[i].grade_name=='' || grade[i].grade_standard=='') return layList.msg('第'+v+'没填完整');
  718. var arr=grade[i].grade_standard.split('~');
  719. if(arr.length<=1) return layList.msg('第'+v+'分数区间有误');
  720. if(arr[0]<0 || arr[1]<0) return layList.msg('第'+v+'分数区间分数不能小于0');
  721. }
  722. that.$nextTick(function () {
  723. if(!that.formData.title) return layList.msg('请输入' + (type === 1 ? '练习' : '考试') + '名称');
  724. if(that.formData.tid<=0) return layList.msg('请选择' + (type === 1 ? '练习' : '考试') + '分类');
  725. if(that.formData.image=='' && type==2) return layList.msg('请输入' + (type === 1 ? '练习' : '考试') + '封面');
  726. if(Number(that.formData.txamination_time)<=0 && type==2) return layList.msg((type === 1 ? '练习' : '考试') + '时长填写不正确');
  727. if(Number(that.formData.frequency)<0 && type==2) return layList.msg((type === 1 ? '练习' : '考试') + '次数填写不正确');
  728. if (!Number(that.formData.single_number) && !Number(that.formData.many_number) && !Number(that.formData.judge_number)) {
  729. return layList.msg('至少有一类题型数量大于0');
  730. }
  731. that.formData.grade=JSON.stringify(grade);
  732. if (that.formData.pay_type == 1 && type==2) {
  733. if (Number(that.formData.money)<0 || that.formData.money == 0.00) return layList.msg('购买金额未填或填写不正确');
  734. }
  735. if (that.formData.member_pay_type == 1 && type==2) {
  736. if (Number(that.formData.member_money)<0 || that.formData.member_money == 0.00) return layList.msg('会员购买金额未填或填写不正确');
  737. }
  738. if(that.formData.is_group==1){
  739. if(Object.keys(that.formData.single_tmp_list).length == 0 && that.formData.single_number>0) return layList.msg('请选择单选题');
  740. if(Object.keys(that.formData.many_tmp_list).length == 0 && that.formData.many_number>0) return layList.msg('请选择多选题');
  741. if(Object.keys(that.formData.judge_tmp_list).length == 0 && that.formData.judge_number>0) return layList.msg('请选择判断题');
  742. that.formData.singleIds=JSON.stringify(that.formData.single_tmp_list);
  743. that.formData.manyIds=JSON.stringify(that.formData.many_tmp_list);
  744. that.formData.judgeIds=JSON.stringify(that.formData.judge_tmp_list);
  745. }else{
  746. if(that.formData.cate_id<=0) return layList.msg('请选择随机组题的题库分类');
  747. }
  748. var data={};
  749. for (var key in that.formData) {
  750. data[key] = that.formData[key]
  751. }
  752. layList.loadFFF();
  753. layList.basePost(layList.U({
  754. a: 'save_add',
  755. q: {id: id,type:type}
  756. }), data, function (res) {
  757. layList.loadClear();
  758. if (parseInt(id) == 0) {
  759. layList.layer.confirm('添加成功,您要继续添加' + (type === 1 ? '练习' : '考试') + '吗?', {
  760. btn: ['继续添加', '立即提交'] //按钮
  761. }, function (index) {
  762. layList.layer.close(index);
  763. }, function () {
  764. parent.layer.closeAll();
  765. });
  766. } else {
  767. layList.msg('修改成功', function () {
  768. parent.layer.closeAll();
  769. })
  770. }
  771. }, function (res) {
  772. layList.msg(res.msg);
  773. layList.loadClear();
  774. });
  775. })
  776. },
  777. clone_form: function () {
  778. parent.layer.closeAll();
  779. },
  780. del:function (e) {
  781. },
  782. // 上一步、下一步
  783. tabChange: function (value) {
  784. layui.element.tabChange('tab', this.tabIndex + value);
  785. }
  786. },
  787. mounted: function () {
  788. var that=this;
  789. window.changeIMG = that.changeIMG;
  790. that.get_subject_list();
  791. that.get_questions_list();
  792. that.show_single_list();
  793. that.show_many_list();
  794. that.show_judge_list();
  795. if(grades && grades.length){
  796. that.grade=grades;
  797. }
  798. this.$nextTick(function () {
  799. layList.form.render();
  800. layList.select('tid', function (obj) {
  801. that.formData.tid = obj.value;
  802. });
  803. layList.select('cate_id', function (obj) {
  804. that.formData.cate_id = obj.value;
  805. });
  806. layList.form.on('radio(pay_type)', function (data) {
  807. that.formData.pay_type = parseInt(data.value);
  808. if(that.formData.pay_type!=1){
  809. that.formData.money=0.00;
  810. }
  811. });
  812. layList.form.on('radio(member_pay_type)', function (data) {
  813. that.formData.member_pay_type = parseInt(data.value);
  814. if(that.formData.member_pay_type!=1){
  815. that.formData.member_money=0.00;
  816. }
  817. });
  818. layList.form.on('radio(is_score)', function (data) {
  819. that.formData.is_score = parseInt(data.value);
  820. });
  821. layList.form.on('radio(is_group)', function (data) {
  822. that.formData.is_group = parseInt(data.value);
  823. });
  824. layList.form.on('radio(is_show)', function (data) {
  825. that.formData.is_show = parseInt(data.value);
  826. });
  827. layList.form.on('radio(difficulty)', function (data) {
  828. that.formData.difficulty = parseInt(data.value);
  829. });
  830. // 难度
  831. layui.rate.render({
  832. elem: '#rate',
  833. value: that.formData.difficulty,
  834. choose: function (value) {
  835. that.formData.difficulty = value;
  836. }
  837. });
  838. layui.element.on('tab(tab)', function (data) {
  839. that.tabIndex = data.index;
  840. layui.table.resize('table_1');
  841. layui.table.resize('table_2');
  842. layui.table.resize('table_3');
  843. });
  844. });
  845. }
  846. })
  847. })
  848. </script>
  849. {/block}