index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. <!-- 知识学习 -->
  2. <template>
  3. <div class="app-container knowledgeLearning">
  4. <div class="page-container knowledgeLearningPage">
  5. <p class="pageTitle">知识学习</p>
  6. <div class="max-big-box">
  7. <div class="left-box scrollbar-box">
  8. <p @click="leftCheckButton(index)"
  9. v-for="(item,index) in letDataList" :key="index"
  10. class="left-for-p" :class="index==leftDataIndex?'leftCheck':''">
  11. {{item.name}}
  12. </p>
  13. </div>
  14. <div class="right-box">
  15. <div class="top-max-button-box">
  16. <p :class="topButtonIndex == 1?'top-check-button':''" @click="topCheckButton(1)">视频资源</p>
  17. <p :class="topButtonIndex == 2?'top-check-button':''" @click="topCheckButton(2)">文档文章</p>
  18. </div>
  19. <div class="page-form-title-box">
  20. <el-form :model="queryParams" class="form-box" ref="queryForm"
  21. :inline="true" style="width:100%;">
  22. <div class="table-top-button-box">
  23. <div>
  24. <p :class="shareStatus === ''?'check-table-button':''" @click="tableTypeButton('')">全部</p>
  25. <p :class="shareStatus === 1?'check-table-button':''" @click="tableTypeButton(1)">未学习</p>
  26. <p :class="shareStatus === 2?'check-table-button':''" @click="tableTypeButton(2)">学习中</p>
  27. <p :class="shareStatus === 3?'check-table-button':''" @click="tableTypeButton(3)">已学完</p>
  28. </div>
  29. </div>
  30. <el-form-item label="" prop="queryParamsData1">
  31. <el-cascader
  32. v-model="queryParams.queryParamsData1"
  33. :options="optionListB"
  34. :props="{
  35. emitPath:false,
  36. checkStrictly: true,
  37. value: 'id',
  38. label: 'knowledgePointName',
  39. children: 'children',
  40. }"
  41. style="width: 180px"
  42. :show-all-levels="false"
  43. filterable
  44. placeholder="知识点"
  45. ></el-cascader>
  46. </el-form-item>
  47. <el-form-item label="" prop="queryParamsData2">
  48. <el-input
  49. maxLength="30"
  50. v-model="queryParams.queryParamsData2"
  51. placeholder="搜索名称"
  52. style="width: 200px"
  53. />
  54. </el-form-item>
  55. <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
  56. <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
  57. </el-form>
  58. </div>
  59. <div class="page-content-box">
  60. <div class="for-max-big-box scrollbar-box">
  61. <div class="for-big-box" v-for="(item,index) in dataList" :key="index">
  62. <img :src="item.data1" alt="未配置封面">
  63. <div class="bottom-big-box">
  64. <p class="name-p">{{item.data3}}</p>
  65. <p class="time-p">{{item.data4}}分钟 丨 {{item.data5}}学时 丨 {{item.data6}}积分</p>
  66. </div>
  67. <p class="type-p" :class="item.data2=='1'?'type-p-1':(item.data2=='2'?'type-p-2':(item.data2=='3'?'type-p-3':''))">{{item.data2=='1'?'未学习':(item.data2=='2'?'学习中':(item.data2=='3'?'已学完':''))}}</p>
  68. </div>
  69. </div>
  70. <pagination :page-sizes="[20, 30, 40, 50]"
  71. v-show="total>0"
  72. :total="total"
  73. :page.sync="queryParams.page"
  74. :limit.sync="queryParams.pageSize"
  75. @pagination="getList"
  76. />
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </template>
  83. <script>
  84. //import { getDicts } from "@/api/commonality/noPermission";
  85. //import { systemUserSelect } from "@/api/commonality/permission";
  86. //import { getInfo } from "@/api/basicsModules/index";
  87. //import addPage from "./addPage.vue";
  88. export default {
  89. name: 'index',
  90. //components: {
  91. // addPage
  92. //},
  93. data() {
  94. return {
  95. //页面状态
  96. pageType: 1,
  97. //页面遮罩
  98. loading: false,
  99. letDataList:[
  100. {name:'全部知识点',id:'1'},{name:'全部知识点',id:'2'},
  101. {name:'全部知识点',id:'3'},{name:'全部知识点',id:'4'},
  102. {name:'全部知识点',id:'5'},{name:'全部知识点',id:'6'},
  103. {name:'全部知识点',id:'7'},{name:'全部知识点',id:'8'},
  104. {name:'全部知识点',id:'9'},{name:'全部知识点',id:'10'},
  105. {name:'全部知识点',id:'11'},{name:'全部知识点',id:'12'},
  106. {name:'全部知识点',id:'13'},{name:'全部知识点',id:'14'},
  107. ],
  108. leftDataIndex:0,
  109. topButtonIndex:1,
  110. //下拉列表数据
  111. optionListB: [],
  112. //查询条件
  113. shareStatus:'',
  114. queryParams: {
  115. page: 1,
  116. pageSize: 20,
  117. queryParamsData1: '',
  118. queryParamsData2: null
  119. },
  120. //列表数据
  121. dataList: [
  122. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'1',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  123. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'1',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  124. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'2',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  125. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'2',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  126. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'3',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  127. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'3',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  128. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'1',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  129. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'2',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  130. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'3',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  131. {data1:'https://img1.baidu.com/it/u=1480196961,2254893225&fm=253&app=138&f=JPEG?w=800&h=1010',data2:'1',data3:'课程名称',data4:'20',data5:'1',data6:'3',data7:'0',data8:'2',data9:'50',},
  132. ],
  133. //数据数量
  134. total: 0,
  135. }
  136. },
  137. created() {
  138. },
  139. mounted() {
  140. this.examElKnowledgePointTreeList();
  141. //this.getList();
  142. },
  143. methods: {
  144. //左侧列表切换
  145. leftCheckButton(index){
  146. if(this.leftDataIndex != index){
  147. this.$set(this,'leftDataIndex',index);
  148. }
  149. },
  150. //顶部切换
  151. topCheckButton(index){
  152. if(this.topButtonIndex != index){
  153. this.$set(this,'topButtonIndex',index);
  154. }
  155. },
  156. //切换按钮
  157. tableTypeButton(val){
  158. if(this.shareStatus != val){
  159. this.$set(this,'shareStatus',val);
  160. this.handleQuery();
  161. }
  162. },
  163. //查询按钮
  164. handleQuery() {
  165. this.$set(this.queryParams, 'page', 1)
  166. this.getList()
  167. },
  168. //重置按钮
  169. resetQuery() {
  170. this.$set(this, 'dateRange', [])
  171. this.$set(this, 'queryParams', {
  172. page: 1,
  173. pageSize: 20,
  174. queryParamsData1: '',
  175. queryParamsData2: null
  176. })
  177. this.getList()
  178. },
  179. //获取数据列表
  180. getList() {
  181. this.$set(this, 'loading', true)
  182. let obj = JSON.parse(JSON.stringify(this.queryParams))
  183. if (this.dateRange[0]) {
  184. obj.startTime = this.dateRange[0] + 'T00:00:00'
  185. obj.endTime = this.dateRange[1] + 'T23:59:59'
  186. } else {
  187. obj.startTime = ''
  188. obj.endTime = ''
  189. }
  190. getListFunction(obj).then(response => {
  191. this.$set(this, 'loading', false)
  192. this.$set(this, 'dataList', response.data.records)
  193. this.$set(this, 'total', response.data.total)
  194. })
  195. },
  196. //操作按钮
  197. tableButton(type, row) {
  198. let self = this
  199. if (type == 1) {
  200. //新增
  201. this.$set(this, 'pageType', 2)
  202. this.$set(this, 'propsData', {})
  203. } else if (type == 2) {
  204. //详情
  205. this.$set(this, 'pageType', 2)
  206. let obj = JSON.parse(JSON.stringify(row))
  207. obj.showType = true
  208. this.$set(this, 'propsData', obj)
  209. } else if (type == 3) {
  210. //编辑
  211. this.$set(this, 'pageType', 2)
  212. let obj = JSON.parse(JSON.stringify(row))
  213. obj.showType = false
  214. this.$set(this, 'propsData', obj)
  215. } else if (type == 4) {
  216. //删除
  217. this.$confirm('是否确认删除?', '警告', {
  218. confirmButtonText: '确定',
  219. cancelButtonText: '取消',
  220. type: 'warning'
  221. }).then(function() {
  222. }).then(() => {
  223. deleteFunction({ id: row.id }).then(response => {
  224. self.msgSuccess(response.message)
  225. self.getList()
  226. })
  227. }).catch(() => {
  228. })
  229. } else if (type == 5) {
  230. //启用&停用
  231. let text = row.state ? '停用' : '启用'
  232. this.$confirm('是否确认' + text + '?', '警告', {
  233. confirmButtonText: '确定',
  234. cancelButtonText: '取消',
  235. type: 'warning'
  236. }).then(function() {
  237. }).then(() => {
  238. stateFunction({ id: row.id, state: !row.state }).then(response => {
  239. self.msgSuccess(response.message)
  240. self.getList()
  241. })
  242. }).catch(() => {
  243. })
  244. } else if (type == 6) {
  245. //返回并刷新
  246. this.$set(this, 'pageType', 1)
  247. this.getList()
  248. }
  249. },
  250. examElKnowledgePointTreeList(){
  251. examElKnowledgePointTreeList({}).then(response => {
  252. const list = response.data || [];
  253. this.formatTreeData(list);
  254. this.$set(this, 'optionListB', list);
  255. });
  256. },
  257. }
  258. }
  259. </script>
  260. <style scoped lang="scss">
  261. .knowledgeLearning {
  262. .knowledgeLearningPage {
  263. .pageTitle{
  264. height:60px;
  265. line-height:60px;
  266. padding:0 20px;
  267. border-bottom:1px solid #dedede;
  268. }
  269. .max-big-box{
  270. display: flex;
  271. overflow: hidden;
  272. .left-box{
  273. width:200px;
  274. border-right:1px solid #dedede;
  275. padding:20px 0 ;
  276. .left-for-p{
  277. margin:5px 0;
  278. padding:0 20px;
  279. text-align: center;
  280. border-right:4px solid #ffffff;
  281. cursor: pointer;
  282. font-weight:700;
  283. font-size:16px;
  284. line-height:40px;
  285. }
  286. .left-for-p:hover{
  287. background-color: #0183fa;
  288. color: #ffffff;
  289. }
  290. .leftCheck{
  291. color: #0183fa;
  292. border-right:4px solid #0183fa;
  293. }
  294. }
  295. .right-box{
  296. flex:1;
  297. display: flex;
  298. flex-direction: column;
  299. overflow: hidden;
  300. .top-max-button-box{
  301. display: flex;
  302. margin:20px 0 0 20px;
  303. p{
  304. width:120px;
  305. line-height:40px;
  306. border-radius:4px;
  307. color:#333;
  308. border:1px solid #333;
  309. text-align: center;
  310. margin-right:20px;
  311. cursor: pointer;
  312. }
  313. .top-check-button{
  314. border:1px solid #0183fa;
  315. background-color: #0183fa;
  316. color:#fff;
  317. }
  318. }
  319. .table-top-button-box{
  320. display: inline-block;
  321. vertical-align: top;
  322. margin-right:10px;
  323. div{
  324. display: flex;
  325. p{
  326. border:1px solid #DCDFE6;
  327. width:80px;
  328. text-align: center;
  329. height:40px;
  330. line-height:40px;
  331. cursor: pointer;
  332. font-size:14px;
  333. }
  334. p:nth-child(1){
  335. border-top-left-radius:4px;
  336. border-bottom-left-radius:4px;
  337. }
  338. p:nth-child(2){
  339. border-left:none;
  340. border-right:none;
  341. }
  342. p:nth-child(3){
  343. border-left:none;
  344. border-right:none;
  345. }
  346. p:nth-child(4){
  347. border-top-right-radius:4px;
  348. border-bottom-right-radius:4px;
  349. }
  350. .check-table-button{
  351. border:1px solid #0183fa;
  352. background-color: #0183fa;
  353. color:#fff;
  354. }
  355. }
  356. }
  357. .page-content-box{
  358. padding:20px 0;
  359. }
  360. .for-max-big-box{
  361. flex:1;
  362. .for-big-box{
  363. cursor: pointer;
  364. display: inline-block;
  365. width:320px;
  366. margin:0 0 20px 20px;
  367. border-radius:6px;
  368. overflow: hidden;
  369. box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);
  370. position: relative;
  371. img{
  372. width:320px;
  373. height:180px;
  374. }
  375. .bottom-big-box{
  376. padding:10px 0 10px 10px;
  377. .name-p{
  378. line-height:30px;
  379. font-size:16px;
  380. font-weight:700;
  381. }
  382. .time{
  383. line-height:30px;
  384. font-size:14px;
  385. }
  386. }
  387. .type-p{
  388. position: absolute;
  389. right:20px;
  390. bottom:15px;
  391. padding:5px 10px;
  392. border-radius:4px;
  393. font-size:14px;
  394. }
  395. .type-p-1{
  396. color:#fff;
  397. background-color: #999;
  398. }
  399. .type-p-2{
  400. color:#fff;
  401. background-color: #7CCD7C;
  402. }
  403. .type-p-3{
  404. color:#fff;
  405. background-color: #0183fa;
  406. }
  407. }
  408. }
  409. }
  410. }
  411. }
  412. }
  413. </style>