index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. /* eslint-disable no-duplicate-case */
  2. <template>
  3. <div class="school-container">
  4. <div class="topic">
  5. <el-form :inline="true" :model="formInline" class="demo-form-inline">
  6. <el-form-item label="code">
  7. <el-input v-model="formInline.code" placeholder="code" clearable />
  8. </el-form-item>
  9. <el-form-item label="名字">
  10. <el-input v-model="formInline.title" placeholder="名字" clearable />
  11. </el-form-item>
  12. <el-form-item label="状态">
  13. <el-select v-model="formInline.status" placeholder="请选择状态">
  14. <el-option label="未上架" value="ABNORMAL" />
  15. <el-option label="上架" value="NORMAL" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item>
  19. <el-button type="primary" @click="onSubmit">查询</el-button>
  20. </el-form-item>
  21. </el-form>
  22. <el-button
  23. type="primary"
  24. style="position: absolute;right: 20px; top: 15px;"
  25. @click="addTopic"
  26. >添加</el-button>
  27. <el-table
  28. :data="getCourseData.list"
  29. style="width: 100%"
  30. >
  31. <el-table-column
  32. label="id"
  33. width="180"
  34. prop="id"
  35. />
  36. <el-table-column
  37. label="code"
  38. width="180"
  39. prop="code"
  40. />
  41. <el-table-column
  42. label="icon"
  43. width="140"
  44. >
  45. <template slot-scope="scope">
  46. <img :src="scope.row.iconImg" width="75">
  47. </template>
  48. </el-table-column>
  49. <el-table-column
  50. label="标题"
  51. width="200"
  52. prop="title"
  53. />
  54. <el-table-column
  55. label="类型"
  56. width="100"
  57. >
  58. <template slot-scope="scope">
  59. <span style="margin-left: 10px">{{ scope.row.courseType === 'KNOWLEDGE' ? '知识付费' : '图书馆' }}</span>
  60. </template>
  61. </el-table-column>
  62. <el-table-column
  63. label="状态"
  64. width="100"
  65. >
  66. <template slot-scope="scope">
  67. <span style="margin-left: 10px">{{ scope.row.status === 'ABNORMAL' ? '未上架' : '已上架' }}</span>
  68. </template>
  69. </el-table-column>
  70. <el-table-column
  71. label="创建时间"
  72. width="200"
  73. >
  74. <template slot-scope="scope">
  75. <i class="el-icon-time" />
  76. <span style="margin-left: 10px">{{ newDate(scope.row.gmtCreated) }}</span>
  77. </template>
  78. </el-table-column>
  79. <el-table-column
  80. label="修改时间"
  81. width="200"
  82. >
  83. <template slot-scope="scope">
  84. <i class="el-icon-time" />
  85. <span style="margin-left: 10px">{{ newDate(scope.row.gmtModified) }}</span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="操作">
  89. <template slot-scope="scope">
  90. <el-button
  91. size="mini"
  92. @click="handleDel(scope.$index, scope.row)"
  93. >{{ scope.row.status === 'ABNORMAL' ? '上架' : '下架' }}</el-button>
  94. <el-button
  95. size="mini"
  96. @click="handleSet(scope.$index, scope.row)"
  97. >修改</el-button>
  98. <el-button
  99. size="mini"
  100. @click="handleDetail(scope.$index, scope.row)"
  101. >课件</el-button>
  102. </template>
  103. </el-table-column>
  104. </el-table>
  105. <el-dialog title="课程" :visible.sync="dialogFormVisible">
  106. <el-form ref="ruleForm" :model="form" :rules="rules">
  107. <el-form-item label="code" :label-width="formLabelWidth" prop="code">
  108. <el-input v-model="form.code" autocomplete="off" clearable />
  109. </el-form-item>
  110. <el-form-item label="名字" :label-width="formLabelWidth" prop="title">
  111. <el-input v-model="form.title" autocomplete="off" clearable />
  112. </el-form-item>
  113. <el-form-item label="短名称" :label-width="formLabelWidth">
  114. <el-input v-model="form.subTitle" autocomplete="off" clearable />
  115. </el-form-item>
  116. <el-form-item label="类型" :label-width="formLabelWidth" prop="courseType">
  117. <el-select v-model="form.courseType" placeholder="请选择状态">
  118. <el-option label="知识付费" value="KNOWLEDGE" />
  119. <el-option label="图书馆" value="LIBRARY" />
  120. </el-select>
  121. </el-form-item>
  122. <el-form-item label="icon" :label-width="formLabelWidth">
  123. <el-input v-model="form.iconImg" autocomplete="off" clearable />
  124. </el-form-item>
  125. <el-form-item label="封面图" :label-width="formLabelWidth">
  126. <el-input v-model="form.coverImg" autocomplete="off" clearable />
  127. </el-form-item>
  128. <el-form-item label="课程简介" :label-width="formLabelWidth">
  129. <el-input v-model="form.summary" autocomplete="off" clearable />
  130. </el-form-item>
  131. <el-form-item label="关键词" :label-width="formLabelWidth">
  132. <el-input v-model="form.keyWords" autocomplete="off" clearable />
  133. </el-form-item>
  134. <el-form-item label="播放状态" :label-width="formLabelWidth">
  135. <el-select v-model="form.status" placeholder="请选择状态">
  136. <el-option label="连续" value="CONTINUOUS_PLAY" />
  137. <el-option label="不连续" value="DISCONTINUOUS_PLAY" />
  138. <el-option label="循环" value="CIRCULATION_PLAY" />
  139. </el-select>
  140. </el-form-item>
  141. <el-form-item label="排序" :label-width="formLabelWidth">
  142. <el-input v-model="form.sort" autocomplete="off" clearable />
  143. </el-form-item>
  144. <el-form-item label="价格" :label-width="formLabelWidth">
  145. <el-input v-model="form.price" autocomplete="off" clearable />
  146. </el-form-item>
  147. <el-form-item label="吊牌价" :label-width="formLabelWidth">
  148. <el-input v-model="form.originPrice" autocomplete="off" clearable />
  149. </el-form-item>
  150. <el-form-item label="状态" :label-width="formLabelWidth">
  151. <el-select v-model="form.status" placeholder="请选择状态">
  152. <el-option label="未上架" value="ABNORMAL" />
  153. <el-option label="上架" value="NORMAL" />
  154. </el-select>
  155. </el-form-item>
  156. <el-form-item label="优惠" :label-width="formLabelWidth">
  157. <el-select v-model="form.isDiscount" placeholder="请选择状态">
  158. <el-option label="不限时优惠" value="NO" />
  159. <el-option label="优惠" value="YES" />
  160. </el-select>
  161. </el-form-item>
  162. <el-form-item label="优惠券" :label-width="formLabelWidth">
  163. <el-input v-model="form.voucher" autocomplete="off" clearable />
  164. </el-form-item>
  165. </el-form>
  166. <div slot="footer" class="dialog-footer">
  167. <el-button @click="dialogFormVisible = false">取 消</el-button>
  168. <el-button type="primary" @click="handOk('ruleForm')">确 定</el-button>
  169. </div>
  170. </el-dialog>
  171. <el-pagination
  172. background
  173. layout="prev, pager, next"
  174. :total="getCourseData.totalSize"
  175. @current-change="handleCurrentChange"
  176. />
  177. </div>
  178. </div>
  179. </template>
  180. <script>
  181. import { mapGetters } from 'vuex'
  182. export default {
  183. data() {
  184. return {
  185. dialogFormVisible: false,
  186. formInline: {
  187. code: '',
  188. titl: '',
  189. status: ''
  190. },
  191. form: {},
  192. formLabelWidth: '120px',
  193. rules: {
  194. code: [{ required: true, message: '请输入code', trigger: 'blur' }],
  195. title: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  196. courseType: [{ required: true, message: '请选择状态', trigger: 'change' }]
  197. },
  198. page: 1,
  199. type: ''
  200. }
  201. },
  202. created() {
  203. this.$store.dispatch('courseList/getCourseLists', {
  204. page: this.page
  205. })
  206. },
  207. // eslint-disable-next-line vue/order-in-components
  208. computed: {
  209. ...mapGetters([
  210. 'getCourseData'
  211. ])
  212. },
  213. methods: {
  214. newDate(date) {
  215. return new Date(date).toLocaleString()
  216. },
  217. onSubmit() {
  218. this.$store.dispatch('courseList/getCourseLists', this.formInline)
  219. },
  220. handleDel(index, row) {
  221. const id = row.id
  222. const status = row.status === 'ABNORMAL' ? 'NORMAL' : 'ABNORMAL'
  223. this.$store.dispatch('courseList/setCourseLists', {
  224. id,
  225. status
  226. }).then(() => {
  227. this.$store.dispatch('courseList/getCourseLists', {
  228. page: this.page
  229. })
  230. })
  231. },
  232. handleSet(index, row) {
  233. console.log(index, row)
  234. this.dialogFormVisible = true
  235. this.type = 'set'
  236. this.form = {
  237. id: row.id,
  238. code: row.code,
  239. title: row.title,
  240. subTitle: row.subTitle,
  241. courseType: row.courseType,
  242. iconImg: row.iconImg,
  243. coverImg: row.coverImg,
  244. summary: row.summary,
  245. keyWords: row.keyWords,
  246. continuity: row.continuity,
  247. sort: row.sort,
  248. price: row.price,
  249. originPrice: row.originPrice,
  250. status: row.status,
  251. isDiscount: row.isDiscount,
  252. voucher: row.voucher
  253. }
  254. },
  255. handOk(formName) {
  256. this.$refs[formName].validate((valid) => {
  257. if (valid) {
  258. if (this.type === 'add') {
  259. this.$store.dispatch('courseList/addCourseLists', this.form).then(() => {
  260. this.dialogFormVisible = false
  261. this.$store.dispatch('courseList/getCourseLists', {
  262. page: this.page
  263. })
  264. })
  265. } else {
  266. this.$store.dispatch('courseList/setCourseLists', this.form).then(() => {
  267. this.dialogFormVisible = false
  268. this.$store.dispatch('courseList/getCourseLists', {
  269. page: this.page
  270. })
  271. })
  272. }
  273. } else {
  274. console.log('error submit!!')
  275. return false
  276. }
  277. })
  278. },
  279. addTopic() {
  280. this.dialogFormVisible = true
  281. this.type = 'add'
  282. this.form = {
  283. code: '',
  284. title: '',
  285. subTitle: '',
  286. courseType: '',
  287. iconImg: '',
  288. coverImg: '',
  289. summary: '',
  290. keyWords: '',
  291. continuity: '',
  292. sort: '',
  293. price: '',
  294. originPrice: '',
  295. status: '',
  296. isDiscount: '',
  297. voucher: ''
  298. }
  299. },
  300. handleCurrentChange(val) {
  301. console.log(val)
  302. this.page = val
  303. this.$store.dispatch('courseList/getCourseLists', {
  304. page: this.page
  305. })
  306. },
  307. handleDetail(index, row) {
  308. console.log(index, row)
  309. this.$router.push({
  310. path: '/courseWareList/courseWareList',
  311. query: {
  312. id: row.id
  313. }
  314. })
  315. }
  316. }
  317. }
  318. </script>
  319. <style lang="scss" scoped>
  320. .topic {
  321. margin-top: 20px;
  322. }
  323. .el-form {
  324. width: 80%;
  325. }
  326. .el-input {
  327. width: 300px;
  328. }
  329. .el-select>.el-input {
  330. width: 300px;
  331. }
  332. .el-pagination {
  333. text-align: center;
  334. margin-top: 20px;
  335. }
  336. </style>