杨豪
4 years ago
3 changed files with 474 additions and 0 deletions
@ -0,0 +1,34 @@
|
||||
import request from '@/utils/request' |
||||
|
||||
export function add(data) { |
||||
return request({ |
||||
url: 'api/StudyList', |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
export function del(ids) { |
||||
return request({ |
||||
url: 'api/StudyList/', |
||||
method: 'delete', |
||||
data: ids |
||||
}) |
||||
} |
||||
|
||||
export function edit(data) { |
||||
return request({ |
||||
url: 'api/StudyList', |
||||
method: 'put', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
export function get(id) { |
||||
return request({ |
||||
url: 'api/StudyList/info/?id=' + id, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
export default { add, edit, del, get } |
@ -0,0 +1,281 @@
|
||||
<template> |
||||
<div class="app-container"> |
||||
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="110px"> |
||||
<el-form-item label="分类"> |
||||
<el-cascader |
||||
v-model="form.categoryId" |
||||
:options="categoryList" |
||||
:show-all-levels="false" |
||||
:props="{ checkStrictly: true }" |
||||
@change="handleChange"> |
||||
</el-cascader> |
||||
</el-form-item> |
||||
<el-form-item label="打榜时间"> |
||||
<el-date-picker |
||||
v-model="form.listStartTime" |
||||
type="datetime" |
||||
value-format="yyyy-MM-dd HH:mm:ss" |
||||
placeholder="请选择打榜开始时间" |
||||
:picker-options="listStart"> |
||||
</el-date-picker> |
||||
<span>~</span> |
||||
<el-date-picker |
||||
v-model="form.listEndTime" |
||||
type="datetime" |
||||
value-format="yyyy-MM-dd HH:mm:ss" |
||||
placeholder="请选择打榜结束时间" |
||||
:picker-options="listEnd"> |
||||
</el-date-picker> |
||||
</el-form-item> |
||||
<el-form-item label="打卡时间"> |
||||
<el-time-select |
||||
v-model="form.signStartTime" |
||||
:picker-options="{ |
||||
start: '00:30', |
||||
step: '00:15', |
||||
end: '24:00' |
||||
}" |
||||
placeholder="请选择打卡开始时间"> |
||||
</el-time-select> |
||||
<span>~</span> |
||||
<el-time-select |
||||
v-model="form.signEndTime" |
||||
:picker-options="{ |
||||
start: form.signStartTime, |
||||
step: '00:15', |
||||
end: '24:00' |
||||
}" |
||||
placeholder="请选择打卡结束时间"> |
||||
</el-time-select> |
||||
</el-form-item> |
||||
<el-form-item label="报名截止时间"> |
||||
<el-date-picker |
||||
v-model="form.enterEndTime" |
||||
type="datetime" |
||||
value-format="yyyy-MM-dd HH:mm:ss" |
||||
placeholder="请选择报名结束时间"> |
||||
</el-date-picker> |
||||
</el-form-item> |
||||
<el-form-item label="要求打卡次数"> |
||||
<el-input-number v-model="form.clockTimes" :min="1" label="请输入要求打卡次数"></el-input-number> |
||||
</el-form-item> |
||||
<el-form-item label="允许缺卡次数"> |
||||
<el-input-number v-model="form.missedClockTimes" :min="1" label="请输入允许缺卡次数"></el-input-number> |
||||
</el-form-item> |
||||
<el-form-item label="榜单状态"> |
||||
<el-radio-group v-model="form.listState"> |
||||
<el-radio :label="0">未开始</el-radio> |
||||
<el-radio :label="1">打榜中</el-radio> |
||||
<el-radio :label="2">已完成</el-radio> |
||||
<el-radio :label="3">已取消</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
<el-form-item label="榜单介绍"> |
||||
<!--<editor v-model="form.content" />--> |
||||
<ueditor-wrap v-model="form.content" :config="myConfig" @beforeInit="addCustomDialog" style="width: 90%;"></ueditor-wrap> |
||||
</el-form-item> |
||||
<el-form-item label="奖惩积分"> |
||||
<el-input v-model="form.integral" style="width: 370px;" /> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<!--<el-button type="text" @click="cancel">取消</el-button>--> |
||||
<el-button :loading="loading" type="primary" @click="doSubmit">保存</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
</template> |
||||
<script> |
||||
import { add, edit, get } from '@/api/StudyList' |
||||
import yamedit from '@/components/YamlEdit' |
||||
import MaterialList from '@/components/material' |
||||
import UeditorWrap from 'vue-ueditor-wrap'; |
||||
import { initData } from '@/api/data' |
||||
export default { |
||||
components: { yamedit, MaterialList, UeditorWrap }, |
||||
data() { |
||||
return { |
||||
loading: false, dialog: false, |
||||
form: { |
||||
id: null, |
||||
categoryId: null, |
||||
imgPath: null, |
||||
content: null, |
||||
listStartTime: null, |
||||
listEndTime: null, |
||||
signStartTime: null, |
||||
signEndTime: null, |
||||
enterStartTime: null, |
||||
enterEndTime: null, |
||||
clockTimes: null, |
||||
missedClockTimes: null, |
||||
listState: null, |
||||
createTime: null, |
||||
updateTime: null, |
||||
integral: null |
||||
}, |
||||
rules: { |
||||
}, |
||||
categoryList:[], |
||||
listStart: { |
||||
disabledDate: time => { |
||||
const endDateVal = new Date(this.form.listEndTime).getTime() |
||||
if (endDateVal) { |
||||
return time.getTime() > endDateVal - 0 |
||||
} |
||||
} |
||||
}, |
||||
listEnd: { |
||||
disabledDate: time => { |
||||
const beginDateVal = new Date(this.form.listStartTime).getTime() |
||||
if (beginDateVal) { |
||||
return time.getTime() < beginDateVal - 0 |
||||
} |
||||
} |
||||
}, |
||||
myConfig: { |
||||
autoHeightEnabled: false, // 编辑器不自动被内容撑高 |
||||
initialFrameHeight: 500, // 初始容器高度 |
||||
initialFrameWidth: '100%', // 初始容器宽度 |
||||
UEDITOR_HOME_URL: '/UEditor/', |
||||
serverUrl: '' |
||||
} |
||||
} |
||||
}, |
||||
watch: { |
||||
}, |
||||
created() { |
||||
this.getCategory(); |
||||
this.form.id = this.$route.params.id |
||||
this.$nextTick(() => { |
||||
//this.init() |
||||
if(this.form.id){ |
||||
console.log(this.form.id) |
||||
get(this.form.id).then(data => { |
||||
this.form = data |
||||
}) |
||||
} |
||||
}) |
||||
}, |
||||
methods: { |
||||
getCategory(){ |
||||
initData('/api/CourseCategory',this.getQueryParams()).then((res)=>{ |
||||
// console.log(res) |
||||
res.content.forEach((item)=>{ |
||||
item.label = item.categoryName |
||||
item.value = item.id |
||||
item.children = item.categoryList |
||||
item.categoryList.forEach((child)=>{ |
||||
child.label = child.categoryName |
||||
child.value = child.id |
||||
child.children = child.categoryList |
||||
}) |
||||
}) |
||||
this.categoryList = res.content |
||||
}) |
||||
}, |
||||
getQueryParams: function() { |
||||
return { |
||||
page: 1, |
||||
size: 10, |
||||
sort: ['id,desc'], |
||||
} |
||||
}, |
||||
handleChange(value){ |
||||
console.log(value) |
||||
this.form.categoryId = value[value.length-1]; |
||||
}, |
||||
addCustomDialog () { |
||||
window.UE.registerUI('yshop', function (editor, uiName) { |
||||
let dialog = new window.UE.ui.Dialog({ |
||||
iframeUrl: '/yshop/materia/index', |
||||
editor: editor, |
||||
name: uiName, |
||||
title: '上传图片', |
||||
cssRules: 'width:1200px;height:500px;padding:20px;' |
||||
}); |
||||
this.dialog = dialog; |
||||
var btn = new window.UE.ui.Button({ |
||||
name: 'dialog-button', |
||||
title: '上传图片', |
||||
cssRules: `background-image: url(../../../assets/images/icons.png);background-position: -726px -77px;`, |
||||
onclick: function () { |
||||
dialog.render(); |
||||
dialog.open(); |
||||
} |
||||
}); |
||||
|
||||
return btn; |
||||
}, 37); |
||||
}, |
||||
cancel() { |
||||
this.resetForm() |
||||
}, |
||||
doSubmit() { |
||||
this.loading = true |
||||
if (!this.form.id) { |
||||
this.doAdd() |
||||
} else { |
||||
this.doEdit() |
||||
} |
||||
}, |
||||
doAdd() { |
||||
add(this.form).then(res => { |
||||
this.resetForm() |
||||
this.$notify({ |
||||
title: '添加成功', |
||||
type: 'success', |
||||
duration: 2500 |
||||
}) |
||||
this.loading = false |
||||
// this.$parent.init() |
||||
setTimeout(() => { |
||||
this.$router.push({ path: '/course/studyList' }); |
||||
}, 500); |
||||
}).catch(err => { |
||||
this.loading = false |
||||
console.log(err.response.data.message) |
||||
}) |
||||
}, |
||||
doEdit() { |
||||
edit(this.form).then(res => { |
||||
this.resetForm() |
||||
this.$notify({ |
||||
title: '修改成功', |
||||
type: 'success', |
||||
duration: 2500 |
||||
}) |
||||
this.loading = false |
||||
// this.$parent.init() |
||||
setTimeout(() => { |
||||
this.$router.push({ path: '/course/studyList' }); |
||||
}, 500); |
||||
}).catch(err => { |
||||
this.loading = false |
||||
console.log(err.response.data.message) |
||||
}) |
||||
}, |
||||
resetForm() { |
||||
this.dialog = false |
||||
this.$refs['form'].resetFields() |
||||
this.form = { |
||||
id: '', |
||||
categoryId: '', |
||||
imgPath: '', |
||||
content: '', |
||||
listStartTime: '', |
||||
listEndTime: '', |
||||
signStartTime: '', |
||||
signEndTime: '', |
||||
enterStartTime: '', |
||||
enterEndTime: '', |
||||
clockTimes: '', |
||||
missedClockTimes: '', |
||||
listState: '', |
||||
createTime: '', |
||||
updateTime: '', |
||||
integral: '' |
||||
} |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -0,0 +1,159 @@
|
||||
<template> |
||||
<div class="app-container"> |
||||
<!--工具栏--> |
||||
<div class="head-container"> |
||||
<!-- 新增 --> |
||||
<div style="display: inline-block;margin: 0px 2px;"> |
||||
<el-button |
||||
v-permission="['admin','YXARTICLE_ALL','YXARTICLE_CREATE']" |
||||
class="filter-item" |
||||
size="mini" |
||||
type="primary" |
||||
icon="el-icon-plus"> |
||||
<router-link :to="'/course/addStudy'"> 新增 </router-link> |
||||
</el-button> |
||||
</div> |
||||
<!--表格渲染--> |
||||
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler"> |
||||
<el-table-column type="selection" width="55" /> |
||||
<el-table-column v-if="columns.visible('id')" prop="id" label="id" /> |
||||
<el-table-column v-if="columns.visible('categoryName')" prop="categoryName" label="分类" /> |
||||
<el-table-column v-if="columns.visible('courseStartTime')" prop="courseStartTime" label="打榜时间" :show-overflow-tooltip="true"> |
||||
<template slot-scope="scope"> |
||||
<span>{{ parseTime(scope.row.listStartTime)}} ~ {{parseTime(scope.row.listEndTime)}}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="columns.visible('listEndTime')" prop="listEndTime" label="打榜结束时间" :show-overflow-tooltip="true"> |
||||
<template slot-scope="scope"> |
||||
<span>{{ parseTime(scope.row.listEndTime) }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="columns.visible('signStartTime')" prop="signStartTime" label="签到时间" :show-overflow-tooltip="true"> |
||||
<template slot-scope="scope"> |
||||
<span>{{ scope.row.signStartTime }} ~ {{scope.row.signEndTime}}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="columns.visible('enterStartTime')" prop="enterStartTime" label="报名时间" :show-overflow-tooltip="true"> |
||||
<template slot-scope="scope"> |
||||
<span>{{ parseTime(scope.row.enterEndTime) }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="columns.visible('clockTimes')" prop="clockTimes" label="要求打卡次数" /> |
||||
<el-table-column v-if="columns.visible('missedClockTimes')" prop="missedClockTimes" label="允许缺卡次数" /> |
||||
<el-table-column v-if="columns.visible('listState')" prop="listState" label="榜单状态"> |
||||
<template slot-scope="scope"> |
||||
<span v-if="scope.row.listState == 0">未开始</span> |
||||
<span v-if="scope.row.listState == 1">打榜中</span> |
||||
<span v-if="scope.row.listState == 2">已完成</span> |
||||
<span v-if="scope.row.listState == 3">已取消</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="columns.visible('integral')" prop="integral" label="奖惩积分" /> |
||||
<el-table-column label="操作" width="150px" align="center"> |
||||
<template slot-scope="scope"> |
||||
<el-button size="mini" type="primary" icon="el-icon-edit"> |
||||
<router-link :to="'/course/addStudy/'+scope.row.id">编辑</router-link> |
||||
</el-button> |
||||
<el-popover |
||||
:ref="scope.row.id" |
||||
placement="top" |
||||
width="180" |
||||
> |
||||
<p>确定删除本条数据吗?</p> |
||||
<div style="text-align: right; margin: 0"> |
||||
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button> |
||||
<el-button type="primary" size="mini" @click="crud.doDelete(scope.row)">确定</el-button> |
||||
</div> |
||||
<el-button slot="reference" type="danger" icon="el-icon-delete" size="mini" /> |
||||
</el-popover> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<!--分页组件--> |
||||
<pagination /> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import crudStudyList from '@/api/StudyList' |
||||
import CRUD, { presenter, header, form, crud } from '@crud/crud' |
||||
import rrOperation from '@crud/RR.operation' |
||||
import crudOperation from '@crud/CRUD.operation' |
||||
import udOperation from '@crud/UD.operation' |
||||
import pagination from '@crud/Pagination' |
||||
import MaterialList from "@/components/material"; |
||||
import { del } from '@/api/StudyList' |
||||
import initData from '@/mixins/crud' |
||||
// crud交由presenter持有 |
||||
const defaultCrud = CRUD({ title: '学习榜', url: 'api/StudyList', sort: 'id,desc', crudMethod: { ...crudStudyList }}) |
||||
const defaultForm = { |
||||
id: null, |
||||
categoryId: null, |
||||
imgPath: null, |
||||
content: null, |
||||
listStartTime: null, |
||||
listEndTime: null, |
||||
signStartTime: null, |
||||
signEndTime: null, |
||||
enterStartTime: null, |
||||
enterEndTime: null, |
||||
clockTimes: null, |
||||
missedClockTimes: null, |
||||
listState: null, |
||||
createTime: null, |
||||
updateTime: null, |
||||
integral: null } |
||||
export default { |
||||
name: 'StudyList', |
||||
components: { pagination, crudOperation, rrOperation, udOperation ,MaterialList}, |
||||
mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], |
||||
data() { |
||||
return { |
||||
loading: false, dialog: false, |
||||
permission: { |
||||
add: ['admin', 'StudyList:add'], |
||||
edit: ['admin', 'StudyList:edit'], |
||||
del: ['admin', 'StudyList:del'] |
||||
}, |
||||
rules: { |
||||
}, |
||||
} |
||||
}, |
||||
watch: { |
||||
}, |
||||
created(){ |
||||
}, |
||||
methods: { |
||||
// 获取数据前设置好接口地址 |
||||
[CRUD.HOOK.beforeRefresh]() { |
||||
return true |
||||
}, // 新增与编辑前做的操作 |
||||
[CRUD.HOOK.afterToCU](crud, form) { |
||||
}, |
||||
[CRUD.HOOK.afterDelete](crud, data) { |
||||
console.log('data',data) |
||||
this.$refs[data.id].doClose() |
||||
}, |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
</script> |
||||
|
||||
<style scoped> |
||||
.table-img { |
||||
display: inline-block; |
||||
text-align: center; |
||||
background: #ccc; |
||||
color: #fff; |
||||
white-space: nowrap; |
||||
position: relative; |
||||
overflow: hidden; |
||||
vertical-align: middle; |
||||
width: 32px; |
||||
height: 32px; |
||||
line-height: 32px; |
||||
} |
||||
</style> |
Loading…
Reference in new issue