lion 2 years ago
parent 8f2e872166
commit 640e3def28

@ -0,0 +1,82 @@
import request from "@/utils/request";
function customParamsSerializer(params) {
let result = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
if (Array.isArray(params[key])) {
params[key].forEach((item,index) => {
if(item.key){
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
}else{
result +=`${key}[${index}]=${item}&`
}
});
} else {
result += `${key}=${params[key]}&`;
}
}
}
return result.slice(0, -1);
}
export function index(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/course-signs/index",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}
export function show(params, isLoading = true) {
return request({
method: "get",
url: "/api/admin/course-signs/show",
params,
isLoading
})
}
export function save(data) {
return request({
method: "post",
url: "/api/admin/course-signs/save",
data
})
}
export function destroy(params) {
return request({
method: "get",
url: "/api/admin/course-signs/destroy",
params
})
}
export function updateStatus(data) {
return request({
method: "post",
url: "/api/admin/course-signs/batch-update-status",
data
})
}
export function updateFeeStatus(data) {
return request({
method: "post",
url: "/api/admin/course-signs/batch-update-fee-status",
data
})
}
export function sendNotice(data) {
return request({
method: "post",
url: "/api/admin/course-signs/batch-notice",
data
})
}

@ -0,0 +1,55 @@
import request from "@/utils/request";
function customParamsSerializer(params) {
let result = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
if (Array.isArray(params[key])) {
params[key].forEach((item,index) => {
if(item.key){
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
}else{
result +=`${key}[${index}]=${item}&`
}
});
} else {
result += `${key}=${params[key]}&`;
}
}
}
return result.slice(0, -1);
}
export function index(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/course-settings/index",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}
export function show(params, isLoading = true) {
return request({
method: "get",
url: "/api/admin/course-settings/show",
params,
isLoading
})
}
export function save(data) {
return request({
method: "post",
url: "/api/admin/course-settings/save",
data
})
}
export function destroy(params) {
return request({
method: "get",
url: "/api/admin/course-settings/destroy",
params
})
}

@ -0,0 +1,55 @@
import request from "@/utils/request";
function customParamsSerializer(params) {
let result = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
if (Array.isArray(params[key])) {
params[key].forEach((item,index) => {
if(item.key){
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
}else{
result +=`${key}[${index}]=${item}&`
}
});
} else {
result += `${key}=${params[key]}&`;
}
}
}
return result.slice(0, -1);
}
export function index(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/courses/index",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}
export function show(params, isLoading = true) {
return request({
method: "get",
url: "/api/admin/courses/show",
params,
isLoading
})
}
export function save(data) {
return request({
method: "post",
url: "/api/admin/courses/save",
data
})
}
export function destroy(params) {
return request({
method: "get",
url: "/api/admin/courses/destroy",
params
})
}

@ -0,0 +1,66 @@
import request from "@/utils/request";
function customParamsSerializer(params) {
let result = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
if (Array.isArray(params[key])) {
params[key].forEach((item,index) => {
if(item.key){
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
}else{
result +=`${key}[${index}]=${item}&`
}
});
} else {
result += `${key}=${params[key]}&`;
}
}
}
return result.slice(0, -1);
}
export function index(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/users/index",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}
export function indexStudy(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/users/study",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}
export function show(params, isLoading = true) {
return request({
method: "get",
url: "/api/admin/users/show",
params,
isLoading
})
}
export function destroy(params) {
return request({
method: "get",
url: "/api/admin/users/destroy",
params
})
}
export function importStudy(data) {
return request({
method: "post",
url: "/api/admin/users/import-study",
data
})
}

@ -0,0 +1,96 @@
export default {
data() {
return {
false_or_true: [{
id: 0,
value: '否'
}, {
id: 1,
value: '是'
}],
apply_status_list:[{
id: 0,
value: '待审核'
}, {
id: 1,
value: '通过'
}, {
id: 1,
value: '驳回'
}],
fee_status_list:[{
id: 0,
value: '待缴费'
}, {
id: 1,
value: '缴费成功'
}, {
id: 1,
value: '缴费失败'
}],
// 课程
course_type: [{
id: 1,
value: '长期课程'
}, {
id: 2,
value: '短期课程'
}],
course_status: [{
id: 0,
value: '待发布',
type: 'info'
}, {
id: 1,
value: '已发布',
type: ''
}],
course_date: [{
value: '未开始',
type: 'info',
}, {
value: '进行中',
type: '',
}, {
value: '已结束',
type: 'success',
}],
// 学员
company_education: [{
id: 1,
value: '小学'
}, {
id: 2,
value: '初中'
}, {
id: 3,
value: '高中'
}, {
id: 4,
value: '专科'
}, {
id: 5,
value: '本科'
}, {
id: 6,
value: '硕士'
}, {
id: 7,
value: '博士'
}],
company_type_list:[{
id: 0,
value: '上市公司'
}, {
id: 1,
value: '上市公司子公司'
}],
}
},
computed: {},
created() {},
mounted() {},
methods: {
},
};

@ -73,6 +73,21 @@ export const constantRoutes = [{
icon: 'dashboard'
}
}]
},
{
path: '/course/txl',
component: Layout,
redirect: '/dashboard',
children: [{
path: '/course/txl',
name: '通讯录',
component: () => import('@/views/course/txl'),
meta: {
title: '通讯录',
icon: ''
}
}],
hidden: true
},
{
path: '/course/apply_list',

@ -8,6 +8,8 @@
<div class="searchwrap" style="display: flex;align-items: center;">
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
end-placeholder="结束日期">
</el-date-picker>
</div>

@ -31,7 +31,7 @@
<div>
<xy-table :list="list" :total="total" :table-item="table_item">
<template v-slot:image_id>
<el-table-column align='center' label="图片" width="80" header-align="center">
<el-table-column align='center' label="图片" width="100" header-align="center">
<template slot-scope="scope">
<el-image style="width: 60px; height: 60px" :src="scope.row.image.url" :preview-src-list="[scope.row.image.url]">
</el-image>

@ -24,19 +24,19 @@
</el-select>
</div>
</div>
</template>
<template v-slot:jump_type>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>跳转类型
</div>
<div class="xy-table-item-content">
<el-select v-model="form.jump_type" placeholder="请选择跳转类型" clearable style="width: 100%;">
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:jump_type>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>跳转类型
</div>
<div class="xy-table-item-content">
<el-select v-model="form.jump_type" placeholder="请选择跳转类型" clearable style="width: 100%;">
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:jump_url>
<div class="xy-table-item">
@ -54,7 +54,7 @@
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>排序
</div>
<div class="xy-table-item-content">
<el-input v-model="form.sort" placeholder="请输入排序" clearable style="width: 100%;"></el-input>
<el-input v-model="form.sort" placeholder="请输入排序" clearable style="width: 100%;"></el-input>
</div>
</div>
@ -62,12 +62,13 @@
<template v-slot:image_id>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>图片
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>图片750*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :limit="1" list-type="picture-card" :file-list="imgList"
ref="pictureUpload" :auto-upload="true" :on-success="uploadSuccess" :on-remove="uploadRemove">
<i class="el-icon-plus"></i>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :limit="1" list-type="picture-card" :file-list="imgList"
ref="pictureUpload" :before-upload="beforeUpload" :auto-upload="true" :on-success="uploadSuccess"
:on-remove="uploadRemove">
<i class="el-icon-plus"></i>
</el-upload>
</div>
</div>
@ -77,10 +78,10 @@
</div>
</template>
<script>
import {
show,
save
<script>
import {
show,
save
} from "@/api/info/banners.js"
export default {
components: {
@ -91,51 +92,60 @@
isShow: false,
type: 'add',
action: `${process.env.VUE_APP_UPLOAD_API}`,
id: '',
type_options:[],
id: '',
type_options: [],
position_options: [],
form: {
name: '',
position:'',
name: '',
position: '',
jump_type: '',
jump_url: '',
sort:0,
jump_url: '',
sort: 0,
image_id: '',
},
imgList:[],
},
imgList: [],
rules: {
name:[{
required:true,
message:'请输入标题'
}],
position:[{
required:true,
message:'请选择显示位置'
}],
image_id:[{
required:true,
message:'请上传图片'
name: [{
required: true,
message: '请输入标题'
}],
position: [{
required: true,
message: '请选择显示位置'
}],
image_id: [{
required: true,
message: '请上传图片'
}]
}
}
},
created() {},
methods: {
setOptions(position,type){
this.position_options = position?position:[]
this.type_options = type?type:[]
methods: {
setOptions(position, type) {
this.position_options = position ? position : []
this.type_options = type ? type : []
},
uploadFail(err) {
console.log(err)
beforeUpload(file) {
console.log(file)
const isImage = file.type.includes('image');
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isImage) {
this.$message.error('请上传正确的图片格式文件');
}
if (!isLt2M) {
this.$message.error('上传文件大小不能超过2MB');
}
return isImage && isLt2M;
},
uploadSuccess(response, file, fileList) {
console.log(response, file, fileList)
this.form.image_id = response.id
uploadSuccess(response, file, fileList) {
console.log(response, file, fileList)
this.form.image_id = response.id
this.imgList = fileList
},
uploadRemove(file, fileList){
this.imgList = fileList
this.form.image_id = ''
},
uploadRemove(file, fileList) {
this.imgList = fileList
this.form.image_id = ''
},
submit() {
if (this.id) {
@ -143,21 +153,7 @@
}
if (this.type == 'add') {
this.form.id = ''
}
// if(this.imgList && this.imgList.length>0){
// this.imgList.map(item=>{
// if(item.response){
// this.form.image_id = item.response.id
// }else{
// this.form.image_id = item.id
// }
// })
// }else{
// this.$message({
// type: 'warning',
// message: ''
// })
// }
}
save({
...this.form
}).then(res => {
@ -172,10 +168,10 @@
getDetail() {
show({
id: this.id,
id: this.id,
show_relation: ['image']
}).then(res => {
this.form = this.base.requestToForm(res,this.form)
this.form = this.base.requestToForm(res, this.form)
this.imgList.push(res.image)
})
}
@ -187,7 +183,7 @@
this.getDetail()
}
} else {
this.id = ''
this.id = ''
this.imgList = []
this.$refs['dialog'].reset()
}
@ -197,8 +193,8 @@
}
</script>
<style scoped lang="scss">
::v-deep .image_id{
flex-basis: 100%;
<style scoped lang="scss">
::v-deep .image_id {
flex-basis: 100%;
}
</style>

@ -0,0 +1,255 @@
<template>
<div>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" :text="$route.meta.title" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content">
<div class="searchwrap" style="display: flex;align-items: center;">
<div>
<el-input v-model="select.name" placeholder="请输入课程名称"></el-input>
</div>
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
value-format="yyyy-MM-dd" format="yyyy-MM-dd" end-placeholder="结束日期">
</el-date-picker>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择类别" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
</div>
</div>
</div>
</lx-header>
</div>
</div>
<div>
<xy-table :list="list" :total="total" :table-item="table_item">
</xy-table>
</div>
</div>
</template>
<script>
import {
index
} from "@/api/apply/index.js"
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
components: {
},
data() {
return {
select: {
name: '',
daterange: '',
type: ''
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
status_options: [{
id: 0,
value: '进行中'
}, {
id: 1,
value: '未开始'
}],
list: [{
name: '第六期高级科创人才研修班',
daterange: '2024.3.1-2024.9.1',
type: '常规课程',
total: 60,
now_apply: 50,
success_apply: 20,
no_apply: 5,
by_apply: 25
}],
total: 0,
table_item: [{
prop: 'name',
label: '课程名称',
align: 'left'
}, {
prop: 'daterange',
label: '开课日期',
align: 'center',
width: 180,
}, {
prop: 'type',
label: '类别',
align: 'center',
width: 160,
}, {
prop: 'total',
label: '拟开课人数',
align: 'center',
width: 120,
}, {
prop: 'now_apply',
label: '目前报名人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {
{
cursor: 'pointer',
color: "blue",
textDecoration: "underline"
}
}
on = {
{
['click']: (e) => {
if (cell.now_apply < 1) {
return
}
this.goApply(cell, '')
}
}
} > {
cell.now_apply ? cell.now_apply : 0
} < /div> )
}
},
{
prop: 'success_apply',
label: '审核通过人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {
{
cursor: 'pointer',
color: "blue",
textDecoration: "underline"
}
}
on = {
{
['click']: (e) => {
if (cell.success_apply < 1) {
return
}
this.goApply(cell, 1)
}
}
} > {
cell.success_apply ? cell.success_apply : 0
} < /div> )
}
},
{
prop: 'no_apply',
label: '审核不通过人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {
{
cursor: 'pointer',
color: "blue",
textDecoration: "underline"
}
}
on = {
{
['click']: (e) => {
if (cell.no_apply < 1) {
return
}
this.goApply(cell, 2)
}
}
} > {
cell.no_apply ? cell.no_apply : 0
} < /div> )
}
},
{
prop: 'by_apply',
label: '待审核人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {
{
cursor: 'pointer',
color: "blue",
textDecoration: "underline"
}
}
on = {
{
['click']: (e) => {
if (cell.by_apply < 1) {
return
}
this.goApply(cell, 0)
}
}
} > {
cell.by_apply ? cell.by_apply : 0
} < /div> )
}
}]
}
},
created() {
},
methods: {
goApply(row, status) {
let value = ''
this.course_type.map(item => {
if (item.id == row.type) {
value = item.value
}
})
this.$router.push({
path: '/course/apply_list',
query: {
title: row.name,
id: row.id,
status: status,
date: row.start_date + '至' + row.end_date,
leibie: value
}
})
},
}
}
</script>
<style lang="scss" scoped>
.searchwrap {
display: flex;
align-items: center;
&>div {
display: flex;
align-items: center;
margin-right: 10px;
span {
min-width: 70px;
}
}
}
</style>

@ -1,6 +1,5 @@
<template>
<div>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" :text="$route.meta.title" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
@ -10,18 +9,18 @@
<el-input v-model="select.name" placeholder="请输入课程名称"></el-input>
</div>
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
end-placeholder="结束日期">
<el-date-picker @change="changeDateRange" v-model="dateRange" type="daterange" range-separator=""
value-format="yyyy-MM-dd" format="yyyy-MM-dd" start-placeholder="开课日期" end-placeholder="结束日期">
</el-date-picker>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择类别" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
<el-button type="primary" size="small" @click="getList"></el-button>
</div>
</div>
</div>
@ -32,170 +31,187 @@
<div>
<xy-table :list="list" :total="total" :table-item="table_item">
<template v-slot:dateRange>
<el-table-column align='center' label="开课日期" width="200" header-align="center">
<template slot-scope="scope">
{{scope.row.start_date}}{{scope.row.end_date}}
</template>
</el-table-column>
</template>
<template v-slot:type>
<el-table-column align='center' label="类别" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in course_type">
<div v-if="scope.row.type===item.id">{{item.value}}</div>
</div>
</template>
</el-table-column>
</template>
<template v-slot:now_apply>
<el-table-column align='center' label="目前报名人数" width="120" header-align="center">
<template slot-scope="scope">
<div style="cursor: 'pointer';color: 'blue', text-decoration: 'underline'"
@click="toApply(scope.row,'')">
{{scope.row.now_apply?scope.row.now_apply:0}}
</div>
</template>
</el-table-column>
</template>
<template v-slot:success_apply>
<el-table-column align='center' label="审核通过人数" width="120" header-align="center">
<template slot-scope="scope">
<div style="cursor: 'pointer';color: 'blue', text-decoration: 'underline'"
@click="toApply(scope.row,1)">{{scope.row.success_apply?scope.row.success_apply:0}}</div>
</template>
</el-table-column>
</template>
<template v-slot:no_apply>
<el-table-column align='center' label="审核不通过人数" width="120" header-align="center">
<template slot-scope="scope">
<div style="cursor: 'pointer';color: 'blue', text-decoration: 'underline'"
@click="toApply(scope.row,2)">
{{scope.row.no_apply?scope.row.no_apply:0}}
</div>
</template>
</el-table-column>
</template>
<template v-slot:by_apply>
<el-table-column align='center' label="待审核人数" width="120" header-align="center">
<template slot-scope="scope">
<div style="cursor: 'pointer';color: 'blue', text-decoration: 'underline'"
@click="toApply(scope.row,0)">
{{scope.row.by_apply?scope.row.by_apply:0}}
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</div>
</template>
<script>
import myMixins from "@/mixin/selectMixin.js";
import {
index
} from "@/api/course/index.js"
export default {
components: {
},
mixins: [myMixins],
components: {},
data() {
return {
dateRange: [],
select: {
name: '',
daterange: '',
type: ''
dateRange: '',
type: "",
page: 1,
page_size: 10,
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
status_options: [{
id: 0,
value: '进行中'
}, {
id: 1,
value: '未开始'
}],
list: [{
name: '第六期高级科创人才研修班',
daterange: '2024.3.1-2024.9.1',
type: '常规课程',
total: 60,
now_apply:50,
success_apply:20,
no_apply:5,
by_apply:25
}],
list: [],
total: 0,
table_item: [{
prop: 'name',
label: '课程名称',
align: 'left'
}, {
prop: 'daterange',
label: '开课日期',
align: 'center',
width: 180,
}, {
prop: 'type',
label: '类别',
align: 'center',
width: 160,
}, {
prop: 'total',
label: '拟开课人数',
align: 'center',
width: 120,
}, {
prop: 'now_apply',
label: '目前报名人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {{cursor: 'pointer',color: "blue",textDecoration: "underline"}}
on = {
{
['click']: (e) => {
if(cell.now_apply<1){
return
}
this.goApply()
}
}
}
>
{
cell.now_apply?cell.now_apply:0
} </div> )
}
}, {
prop: 'success_apply',
label: '审核通过人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {{cursor: 'pointer',color: "blue",textDecoration: "underline"}}
on = {
{
['click']: (e) => {
if(cell.success_apply<1){
return
}
this.goApply()
}
}
}
>
{
cell.success_apply?cell.success_apply:0
} </div> )
}
}, {
prop: 'no_apply',
label: '审核不通过人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {{cursor: 'pointer',color: "blue",textDecoration: "underline"}}
on = {
{
['click']: (e) => {
if(cell.no_apply<1){
return
}
this.goApply()
}
}
}
>
{
cell.no_apply?cell.no_apply:0
} </div> )
}
}, {
prop: 'by_apply',
label: '待审核人数',
align: 'center',
width: 120,
customFn: (cell) => {
return ( < div style = {{cursor: 'pointer',color: "blue",textDecoration: "underline"}}
on = {
{
['click']: (e) => {
if(cell.by_apply<1){
return
}
this.goApply()
}
}
}
>
{
cell.by_apply?cell.by_apply:0
} </div> )
}
}]
prop: 'name',
label: '课程名称',
align: 'left'
}, {
prop: 'dateRange',
label: '开课日期',
align: 'center',
width: 180,
}, {
prop: 'type',
label: '类别',
align: 'center',
width: 180,
}, {
prop: 'total',
label: '拟开课人数',
align: 'center',
width: 120,
}, {
prop: 'now_apply',
label: '目前报名人数',
align: 'center',
width: 120,
},
{
prop: 'success_apply',
label: '审核通过人数',
align: 'center',
width: 120,
},
{
prop: 'no_apply',
label: '审核不通过人数',
align: 'center',
width: 120,
},
{
prop: 'by_apply',
label: '待审核人数',
align: 'center',
width: 120,
}]
}
},
created() {
this.getList()
},
methods: {
goApply(){
this.$router.push({
path: '/course/apply_list'
})
methods: {
async getList() {
const res = await index({
page: this.select.page,
page_size: this.select.page_size,
filter: [{
key: 'name',
op: 'like',
value: this.select.name
}, {
key: 'type',
op: 'eq',
value: this.select.type
}, {
key: 'start_date',
op: 'range',
value: this.select.dateRange
}]
})
this.list = res.data
this.total = res.total
},
changeDateRange(e) {
if (e) {
this.select.dateRange = e.join(",")
} else {
this.select.dateRange = ''
}
},
toApply(row) {
let value = ''
this.course_type.map(item => {
if (item.id == row.type) {
value = item.value
}
})
this.$router.push({
path: '/course/apply_list',
query: {
title: row.name,
id: row.id,
date: row.start_date + '至' + row.end_date,
leibie: value
}
})
},
}
}

@ -6,25 +6,24 @@
<lx-header icon="md-apps" :text="$route.meta.title" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content" style="padding-left:0">
<div class="txl">
<div>课程名称第六期高级科创人才研修班</div>
<div>开课日期2024.3.1-----2024.9.1</div>
<div>类别正常课程</div>
<div>课程名称{{subjectObj.title}}</div>
<div>开课日期{{subjectObj.date}}</div>
<div>类别{{subjectObj.leibie}}</div>
</div>
<div class="searchwrap" style="display: flex;align-items: center;">
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择状态" clearable>
<el-option v-for="item in apply_status_list" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择状态" clearable>
<el-option v-for="item in status_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
</div>
<div>
<el-button type="primary" size="small">导入</el-button>
<el-button type="primary" size="small" @click="getList"></el-button>
<el-button type="primary" size="small">导出</el-button>
</div>
</div>
</div>
@ -38,50 +37,39 @@
<template v-slot:btns>
<el-table-column align='center' fixed="right" label="操作" width="80" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="checkDetail"></el-button>
<el-button type="primary" size="small" @click="showDetail('check')"></el-button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
<student-detail ref="studentDetail"></student-detail>
</div>
</template>
<script>
import studentDetail from '@/views/student/components/detail.vue';
import myMixins from "@/mixin/selectMixin.js";
import {
indexStudy
} from '@/api/student/index.js'
export default {
mixins: [myMixins],
components: {
studentDetail
},
data() {
return {
return {
subjectObj:{},
select: {
name: '',
daterange: '',
type: ''
name: '',
course_id:'',
status:'',
page: 1,
page_size: 10,
},
status_options: [{
id: 2,
value: '待审核'
},{
id: 0,
value: '未通过'
}, {
id: 1,
value: '已通过'
}],
list: [{
name:'王同学',
sex:'男',
age:30,
company:'**股份公司',
zw:'总经理',
mobile:'13812345671',
date:'2024.2.4 10:21',
area:'往期学员推荐',
status:'待审核'
}],
list: [],
total: 0,
table_item: [{
prop: 'name',
@ -89,55 +77,78 @@
align: 'center',
width: 120
}, {
prop: 'sex',
label: '性别',
align: 'center',
width: 120
}, {
prop: 'age',
label: '年龄',
align: 'center',
width: 120
}, {
prop: 'company',
prop: 'company_name',
label: '公司',
align: 'left'
align: 'left',
}, {
prop: 'zw',
prop: 'company_position',
label: '职务',
align: 'center',
width: 160,
width: 120,
}, {
prop: 'mobile',
label: '联系电话',
align: 'center',
width: 180,
width: 120,
}, {
prop: 'date',
label: '报名时间',
prop: 'company_type',
label: '企业性质',
align: 'center',
width: 180,
}, {
prop: 'area',
label: '报名来源',
prop: 'company_industry',
label: '所属行业',
align: 'center',
width: 120,
}, {
prop: 'company_area',
label: '所属区域',
align: 'center',
width: 120,
}, {
prop: 'date',
label: '报名时间',
align: 'center',
width: 180,
}, {
prop: 'status',
label: '状态',
label: '审核状态',
align: 'center',
width: 120,
width: 180,
}]
}
},
created() {
mounted() {
this.subjectObj = this.$route.query
this.select.course_id = this.subjectObj.id
this.select.status = this.subjectObj.status
this.getList()
},
methods: {
checkDetail(type, id) {
this.$refs.studentDetail.type = 'check'
methods: {
async getList() {
const res = await indexStudy({
page: this.select.page,
page_size: this.select.page_size,
filter: [ {
key: 'name',
op: 'like',
value: this.select.name
},{
key: 'course_id',
op: 'eq',
value: this.select.course_id
}, {
key: 'status',
op: 'eq',
value: this.select.status
}]
})
this.list = res.data
this.total = res.total
},
showDetail(type, id) {
this.$refs.studentDetail.id = id
this.$refs.studentDetail.type = type
this.$refs.studentDetail.isShow = true
},
}
@ -149,9 +160,10 @@
display: flex;
align-items: center;
margin-bottom: 10px;
font-size:18px;
&>div {
margin-right: 10px;
margin-right: 15px;
}
}

@ -10,7 +10,9 @@
<el-input v-model="select.name" placeholder="请输入课时名称"></el-input>
</div>
<div>
<el-date-picker v-model="select.daterange" type="date" placeholder="考勤日期">
<el-date-picker v-model="select.daterange" type="date" placeholder="考勤日期"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd">
</el-date-picker>
</div>
<div>

@ -11,6 +11,8 @@
</div>
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
end-placeholder="结束日期">
</el-date-picker>
</div>

@ -19,97 +19,93 @@
</div>
<div class="xy-table-item-content">
<el-select v-model="form.type" placeholder="请选择类别" clearable style="width: 100%;">
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:pic>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>课程封面
</div>
<div class="xy-table-item-content">
<el-upload
accept="picture"
:limit="1"
class="avatar-uploader"
list-type="picture-card"
:action="action"
:show-file-list="true"
:on-error="uploadFail"
:on-success="uploadSuccess"
:before-upload="uploadBefore">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
</template>
<template v-slot:menu>
<template v-slot:image_id>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>课程封面750*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :limit="1" list-type="picture-card" :file-list="imgList"
ref="pictureUpload" :before-upload="beforeUpload" :auto-upload="true" :on-success="uploadSuccess"
:on-remove="uploadRemove">
<i class="el-icon-plus"></i>
</el-upload>
</div>
</div>
</template>
<template v-slot:content>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>课程简介
</div>
<div class="xy-table-item-content">
<my-tinymce :value="form.menu"></my-tinymce>
<my-tinymce v-if="showTinymce" @input="saveContent" :value="form.content"></my-tinymce>
</div>
</div>
</template>
<template v-slot:level>
<template v-slot:dateRange>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>开课日期
</div>
<div class="xy-table-item-content">
<el-date-picker style="width: 100%;" v-model="form.daterange" type="daterange" range-separator=""
<el-date-picker @change="changeDateRange" style="width: 100%;" v-model="form.dateRange"
type="daterange" range-separator="至"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
start-placeholder="开课日期" end-placeholder="结束日期">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:period>
<template v-slot:total>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>开课人数
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>开课人数
</div>
<div class="xy-table-item-content">
<el-input style="width: 100%;" v-model="form.period" placeholder="请输入开课人数" clearable></el-input>
<el-input style="width: 100%;" v-model="form.total" placeholder="请输入开课人数" clearable></el-input>
</div>
</div>
</template>
<template v-slot:end_time>
<template v-slot:class>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>所在班级地点
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>所在班级地点
</div>
<div class="xy-table-item-content">
<el-input style="width: 100%;" v-model="form.end_time" placeholder="请输入所在班级(地点)" clearable></el-input>
<el-input style="width: 100%;" v-model="form.class" placeholder="请输入所在班级(地点)" clearable></el-input>
</div>
</div>
</template>
<template v-slot:content>
<template v-slot:company_type>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>面向学员的企业性质
</div>
<div class="xy-table-item-content">
<el-select style="width: 100%;" v-model="form.content" placeholder="请选择" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-select style="width: 100%;" v-model="form.company_type" placeholder="请选择" clearable>
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:require>
<template v-slot:industry>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>所属行业
</div>
<div class="xy-table-item-content">
<el-select style="width: 100%;" v-model="form.require" placeholder="请选择" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-select style="width: 100%;" v-model="form.industry" placeholder="请选择" clearable>
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
@ -122,7 +118,7 @@
</div>
<div class="xy-table-item-content">
<el-select style="width: 100%;" v-model="form.status" placeholder="请选择" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in course_status" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
@ -134,129 +130,143 @@
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>
</div>
<div class="xy-table-item-content" style="flex-grow: 1;">
课程设置<el-button
type="primary"
icon="md-add"
style="margin-bottom: 10px"
@click="form.settings.push({ name: '',desc:''})"
>新增</el-button>
<xy-table
style="width: 100%"
:height="260"
:is-page="false"
:list="form.settings"
:table-item="settings_Table"
>
<template v-slot:btns>
<el-table-column
label="操作"
width="90"
header-align="center"
align="center"
>
<template v-slot:default="scope">
<el-button
size="small"
type="danger"
plain
@click="form.settings.splice(scope.$index, 1)"
>删除</el-button>
</template>
</el-table-column>
</template>
课时设置<el-button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="form.settings.push({ name: '',desc:''})">新增</el-button>
<xy-table style="width: 100%" :height="260" :is-page="false" :list="form.settings"
:table-item="settings_Table">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<el-button size="small" type="danger" plain
@click="form.settings.splice(scope.$index, 1)">删除</el-button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:footerContent>
<el-button type="primary" style='margin-left:5px;margin-bottom:5px;' @click="submit"></el-button>
<el-button type="primary" plain style='margin-left:5px;margin-bottom:5px;' @click="isShow=false"></el-button>
</template>
</xy-dialog>
</div>
</template>
<script>
import myMixins from "@/mixin/selectMixin.js";
import {
show,
save
} from "@/api/course/index.js"
export default {
components: {
},
mixins: [myMixins],
data() {
return {
isShow: false,
type: 'add',
action:'',
id: '',
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
type: 'add',
action: `${process.env.VUE_APP_UPLOAD_API}`,
id: '',
showTinymce: false,
imgList: [],
form: {
name: '',
type: '',
pic:'',
menu: '',
level: '',
period: '',
end_time: '',
type: '',
image_id: '',
content: '',
require: '',
status: '',
dateRange: '',
total: '',
class: '',
company_type: '',
industry: '',
status: 0,
settings: [],
},
settings_Table:[{
label: "课时名称",
width: 180,
customFn: (row) => {
return ( <el-input placeholder = "请输入课时名称"
type = "text"
v-model = {
row.name
} >
</el-input>
);
},
},{
label: "课时简介",
customFn: (row) => {
return ( <el-input placeholder = "请输入课时简介"
type = "text"
v-model = {
row.desc
} >
</el-input>
);
},
},],
},
settings_Table: [{
label: "课时名称",
width: 180,
customFn: (row) => {
return ( <el-input placeholder = "请输入课时名称"
type = "text"
v-model = {
row.name
}>
</el-input>
);
},
}, {
label: "课时简介",
customFn: (row) => {
return ( <el-input placeholder = "请输入课时简介"
type = "text"
v-model = {
row.desc
}>
</el-input>
);
},
}],
rules: {
name: [{
required: true,
message: '请输入标题'
}],
type: [{
required: true,
message: '请选择课程类别'
}],
content: [{
required: true,
message: '请输入课程简介'
}],
// image_id: [{
// required: true,
// message: ''
// }],
dateRange:[{
required: true,
message: '请选择开课日期'
}],
}
}
},
created() {},
methods: {
uploadFail(err){
console.log(err)
},
uploadSuccess(response){
// console.log(response)
// this.form.pic = response.url
methods: {
saveContent(e) {
this.form.content = e
},
uploadBefore(file){
// if((file.size/1000) > 2024){
// Message({
// type:'warning',
// message:'2M'
// })
// return false
// }
changeDateRange(e){
if(e){
this.form.start_date = e[0]
this.form.end_date = e[1]
console.log(e,this.form)
}else{
this.form.start_date = ''
this.form.end_date = ''
}
},
uploadFail(err) {
console.log(err)
},
beforeUpload(file) {
console.log(file)
const isImage = file.type.includes('image');
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isImage) {
this.$message.error('请上传正确的图片格式文件');
}
if (!isLt2M) {
this.$message.error('上传文件大小不能超过2MB');
}
return isImage && isLt2M;
},
uploadSuccess(response, file, fileList) {
console.log(response, file, fileList)
this.form.image_id = response.id
this.imgList = fileList
},
uploadRemove(file, fileList) {
this.imgList = fileList
this.form.image_id = ''
},
submit() {
if (this.id) {
@ -266,10 +276,9 @@
this.form.id = ''
}
save({
table_name: 'new_plans',
...this.form
}).then(res => {
Message({
this.$message({
type: 'success',
message: this.type === 'add' ? '新增课程成功' : '编辑课程成功'
})
@ -281,9 +290,15 @@
getDetail() {
show({
id: this.id,
table_name: 'new_plans',
// show_relation: ['image']
}).then(res => {
this.form = this.base.requestToForm(res, this.form)
if(res.image){
this.imgList.push(res.image)
}
this.form.dateRange = [res.start_date,res.end_date]
this.showTinymce = true
})
}
},
@ -291,10 +306,14 @@
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
// this.getDetail()
this.getDetail()
}else{
this.showTinymce = true
}
} else {
this.id = ''
this.id = ''
this.showTinymce = false
this.imgList = []
this.$refs['dialog'].reset()
}
},
@ -304,8 +323,8 @@
</script>
<style scoped lang="scss">
::v-deep .menu,
::v-deep .settings{
::v-deep .content,
::v-deep .settings {
flex-basis: 100%;
}
</style>

@ -0,0 +1,35 @@
<!-- <template>
<div>
<div>
课时设置<el-button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="form.settings.push({ name: '',desc:''})">新增</el-button>
</div>
<xy-table style="width: 100%" :height="260" :is-page="false" :list="form.settings"
:table-item="settings_Table">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
<template v-slot:default="scope">
<el-button size="small" type="danger" plain
@click="form.settings.splice(scope.$index, 1)">删除</el-button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
}
}
</script>
<style>
</style> -->

@ -10,15 +10,19 @@
<div class="content">
<div>
<div>课程名称</div>
<div>第六期高级科创人才研修班</div>
<div>{{showform.name}}</div>
</div>
<div>
<div>开课日期</div>
<div>2024.3.1-2024.9.1</div>
<div>{{showform.start_date}}{{showform.end_date}}</div>
</div>
<div>
<div>类别</div>
<div>正常课程</div>
<div>
<div v-for="item in course_type">
<div v-if="showform.type===item.id">{{item.value}}</div>
</div>
</div>
</div>
<div>
<div>课程封面</div>
@ -26,15 +30,17 @@
</div>
<div class="top_bottom">
<div>课程简介</div>
<div>正常课程</div>
<div>
<div v-html="showform.content?showform.content:''"></div>
</div>
</div>
<div>
<div>开课人数</div>
<div>30</div>
<div>{{showform.total}}</div>
</div>
<div>
<div>所在班级</div>
<div>会议室</div>
<div>{{showform.class}}</div>
</div>
<div>
<div>面向学员的企业性质</div>
@ -46,9 +52,9 @@
</div>
<div>
<div>状态</div>
<div>已结束</div>
<div>{{showform.date_status}}</div>
</div>
<div class="top_bottom">
<div class="top_bottom">
<div>课程设置</div>
<div>
123
@ -70,18 +76,24 @@
</template>
<script>
import {
show
} from "@/api/course/index.js"
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
components: {
},
data() {
return {
isShow: false,
type: 'add',
type: 'show',
id: '',
form: {
settings: '',
},
showform: {}
}
},
created() {},
@ -89,21 +101,21 @@
getDetail() {
show({
id: this.id,
table_name: 'new_plans',
id: this.id
}).then(res => {
this.showform = res
})
}
},
watch: {
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
// this.getDetail()
if (this.type === 'show') {
this.getDetail()
}
} else {
this.id = ''
this.showform = {}
this.$refs['dialog'].reset()
}
},
@ -120,18 +132,21 @@
.content {
&>div {
display: flex;
// >div:first-child{
// width:140px;
// text-align: right;
// }
font-size:18px;
>div:first-child{
width:180px;
text-align: right;
font-weight:bold;
}
}
.pic {
width: 150px;
height: 150px;
}
.top_bottom{
flex-direction: column;
}
.top_bottom {
flex-direction: column;
}
}
</style>

@ -10,13 +10,13 @@
<el-input v-model="select.name" placeholder="请输入课程名称"></el-input>
</div>
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
end-placeholder="结束日期">
<el-date-picker @change="changeDateRange" v-model="dateRange" type="daterange" range-separator=""
start-placeholder="开课日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" end-placeholder="结束日期">
</el-date-picker>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择类别" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
@ -31,11 +31,27 @@
</div>
<div>
<xy-table :list="list" :total="total" :table-item="table_item">
<xy-table :list="list" :total="total" :table-item="table_item">
<template v-slot:dateRange>
<el-table-column align='center' label="开课日期" width="200" header-align="center">
<template slot-scope="scope">
{{scope.row.start_date}}{{scope.row.end_date}}
</template>
</el-table-column>
</template>
<template v-slot:type>
<el-table-column align='center' label="类别" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in course_type">
<div v-if="scope.row.type===item.id">{{item.value}}</div>
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column align='center' label="操作" width="280" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="showCourse"></el-button>
<el-button type="primary" size="small" @click="showCourse('show',scope.row.id)"></el-button>
<el-button type="primary" size="small" @click="goTxl"></el-button>
<el-button type="primary" size="small" @click="goPay"></el-button>
</template>
@ -50,36 +66,34 @@
<script>
import showCourse from './components/showCourse.vue';
import myMixins from "@/mixin/selectMixin.js";
import {
index
} from "@/api/course/index.js"
export default {
mixins: [myMixins],
components: {
showCourse
},
data() {
return {
dateRange: [],
select: {
name: '',
daterange: '',
type: ''
name: '',
dateRange: '',
type: "",
date_status:'已结束',
page: 1,
page_size: 10,
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
list: [{
name: '第六期高级科创人才研修班',
daterange: '2024.3.1-2024.9.1',
type: '短期课程'
}],
list: [],
total: 0,
table_item: [{
prop: 'name',
label: '课程名称',
align: 'left'
}, {
prop: 'daterange',
prop: 'dateRange',
label: '开课日期',
align: 'center',
width: 180,
@ -87,23 +101,67 @@
prop: 'type',
label: '类别',
align: 'center',
width: 160,
}]
width: 180,
}, ]
}
},
created() {
this.getList()
},
methods: {
methods: {
async getList() {
const res = await index({
page: this.select.page,
page_size: this.select.page_size,
filter: [{
key: 'name',
op: 'like',
value: this.select.name
}, {
key: 'type',
op: 'eq',
value: this.select.type
},
// {
// key: 'date_status',
// op: 'eq',
// value: this.select.date_status
// },
{
key: 'start_date',
op: 'range',
value: this.select.dateRange
}]
})
this.list = res.data
this.total = res.total
},
changeDateRange(e) {
if (e) {
this.select.dateRange = e.join(",")
} else {
this.select.dateRange = ''
}
},
showCourse(type, id) {
if(id){
this.$refs.showCourse.id = id
}
this.$refs.showCourse.type = type
this.$refs.showCourse.isShow = true
},
goTxl() {
goTxl() {
let value = ''
this.course_type.map(item=>{
if(item.id==row.type){
value = item.value
}
})
this.$router.push({
path: '/course/txl'
path: '/course/txl',
query: { title: row.name, id:row.id, date: row.start_date+'至'+row.end_date,leibie:value }
})
},
goPay() {

@ -10,24 +10,26 @@
<el-input v-model="select.name" placeholder="请输入课程名称"></el-input>
</div>
<div>
<el-date-picker v-model="select.daterange" type="daterange" range-separator="" start-placeholder=""
end-placeholder="结束日期">
<el-date-picker @change="changeDateRange" v-model="dateRange" type="daterange" range-separator=""
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
start-placeholder="开课日期" end-placeholder="结束日期">
</el-date-picker>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择类别" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in course_type" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择课程状态" clearable>
<el-option v-for="item in status_options" :key="item.id" :label="item.value" :value="item.id">
<el-select v-model="select.status" placeholder="请选择发布状态" clearable>
<el-option v-for="item in course_status" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
<el-button type="primary" size="small" @click="getList"></el-button>
</div>
<div>
<el-button type="primary" size="small" @click="editCourse('add')"></el-button>
@ -41,18 +43,48 @@
<div>
<xy-table :list="list" :total="total" :table-item="table_item">
<template v-slot:dateRange>
<el-table-column align='center' label="开课日期" width="200" header-align="center">
<template slot-scope="scope">
{{scope.row.start_date}}{{scope.row.end_date}}
</template>
</el-table-column>
</template>
<template v-slot:type>
<el-table-column align='center' label="类别" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in course_type">
<div v-if="scope.row.type===item.id">{{item.value}}</div>
</div>
</template>
</el-table-column>
</template>
<template v-slot:date_status>
<el-table-column align='center' label="课程状态" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in course_date">
<el-tag :type="item.type" v-if="scope.row.date_status===item.value">{{item.value}}</el-tag>
</div>
</template>
</el-table-column>
</template>
<template v-slot:status>
<el-table-column align='center' label="发布状态" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in course_status">
<el-tag :type="item.type" v-if="scope.row.status===item.id">{{item.value}}</el-tag>
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column align='center' label="操作" width="380" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="editCourse('add',scope.row.id)"></el-button>
<el-popconfirm
style="margin:0 10px"
@confirm="deleteList(scope.row.id)"
title="确定删除吗?"
>
<el-button type="danger" size="small" slot="reference">删除</el-button>
<el-button type="primary" size="small" @click="editCourse('editor',scope.row.id)"></el-button>
<el-popconfirm style="margin:0 10px" @confirm="deleteList(scope.row.id)" title="确定删除吗?">
<el-button type="danger" size="small" slot="reference">删除</el-button>
</el-popconfirm>
<el-button type="primary" size="small" @click="toTxl"></el-button>
<el-button type="primary" size="small" @click="toTxl(scope.row)"></el-button>
<el-button type="primary" size="small" @click="toPay"></el-button>
<el-button type="primary" size="small" @click="showQrCode"></el-button>
</template>
@ -61,55 +93,44 @@
</xy-table>
</div>
<add-course ref="addCourse"></add-course>
<add-course ref="addCourse" @refresh="getList"></add-course>
<show-code ref="showCode"></show-code>
</div>
</template>
<script>
import myMixins from "@/mixin/selectMixin.js";
import addCourse from './components/addCourse.vue';
import showCode from './components/showCode.vue';
import {
index,
destroy
} from "@/api/course/index.js"
export default {
mixins: [myMixins],
components: {
addCourse,
showCode
},
data() {
return {
dateRange: [],
select: {
name: '',
daterange: '',
type: ''
dateRange: '',
type: "",
status: '',
page: 1,
page_size: 10,
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
status_options: [{
id: 0,
value: '进行中'
}, {
id: 1,
value: '未开始'
}],
list: [{
name: '第六期高级科创人才研修班',
daterange: '2024.3.1-2024.9.1',
type: '常规课程',
status: '进行中',
status2: '已发布'
}],
list: [],
total: 0,
table_item: [{
prop: 'name',
label: '课程名称',
align: 'left'
}, {
prop: 'daterange',
prop: 'dateRange',
label: '开课日期',
align: 'center',
width: 180,
@ -117,14 +138,14 @@
prop: 'type',
label: '类别',
align: 'center',
width: 160,
width: 180,
}, {
prop: 'status',
prop: 'date_status',
label: '课程状态',
align: 'center',
width: 180,
}, {
prop: 'status2',
prop: 'status',
label: '发布状态',
align: 'center',
width: 180,
@ -133,36 +154,77 @@
}
},
created() {
this.getList()
},
methods: {
editCourse(type, id) {
async getList() {
const res = await index({
page: this.select.page,
page_size: this.select.page_size,
filter: [{
key: 'name',
op: 'like',
value: this.select.name
}, {
key: 'type',
op: 'eq',
value: this.select.type
}, {
key: 'status',
op: 'eq',
value: this.select.status
}, {
key: 'start_date',
op: 'range',
value: this.select.dateRange
}]
})
this.list = res.data
this.total = res.total
},
changeDateRange(e) {
if (e) {
this.select.dateRange = e.join(",")
} else {
this.select.dateRange = ''
}
},
editCourse(type, id) {
if(id){
this.$refs.addCourse.id = id
}
this.$refs.addCourse.type = type
this.$refs.addCourse.isShow = true
},
showQrCode() {
this.$refs.showCode.isShow = true
},
toTxl() {
this.$router.push({
path: '/course/txl'
})
},
toPay(){
this.$router.push({
path: '/course/pay'
toTxl(row) {
let value = ''
this.course_type.map(item=>{
if(item.id==row.type){
value = item.value
}
})
this.$router.push({
path: '/course/txl',
query: { title: row.name, id:row.id, date: row.start_date+'至'+row.end_date,leibie:value }
})
},
toPay() {
this.$router.push({
path: '/course/pay'
})
},
deleteList() {
deleteList(id) {
var that = this;
destroy({
id: this.id,
table_name: 'new_plans'
id: id,
}).then(response => {
this.$Message.success('操作成功');
this.isShow = false
this.$emit('refresh')
this.$Message.success('删除成功');
this.getList()
}).catch(error => {
console.log(error)
reject(error)

@ -4,44 +4,47 @@
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" :text="$route.meta.title" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content" style="padding-left:0">
<div class="txl">
<div>课程名称第六期高级科创人才研修班</div>
<div>开课日期2024.3.1-----2024.9.1</div>
<div>类别正常课程</div>
<div slot="content" style="padding-left:0">
<div class="txl">
<div>课程名称{{subjectObj.title}}</div>
<div>开课日期{{subjectObj.date}}</div>
<div>类别{{subjectObj.leibie}}</div>
</div>
<div class="searchwrap" style="display: flex;align-items: center;">
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-input v-model="select.company_name" placeholder="请输入公司名称"></el-input>
</div>
<div>
<el-select v-model="select.company_position" placeholder="请选择职务" clearable>
<el-option v-for="item in company_position_list" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_type" placeholder="请选择企业性质" clearable>
<el-option v-for="item in company_type_list" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_area" placeholder="请选择所属区域" clearable>
<el-option v-for="item in company_area_list" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_industry" placeholder="请选择所属行业" clearable>
<el-option v-for="item in company_industry_list" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择企业性质" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择所属行业" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择所属区域" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择审核状态" clearable>
<el-option v-for="item in status_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
</div>
<div>
<el-button type="primary" size="small" @click="getList"></el-button>
<el-button type="primary" size="small">导出</el-button>
</div>
</div>
@ -56,7 +59,7 @@
<template v-slot:btns>
<el-table-column align='center' fixed="right" label="操作" width="80" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="showDetail('show')"></el-button>
<el-button type="primary" size="small" @click="showDetail('show')"></el-button>
</template>
</el-table-column>
</template>
@ -67,122 +70,149 @@
</div>
</template>
<script>
<script>
import studentDetail from '@/views/student/components/detail.vue';
export default {
components:{
studentDetail
import myMixins from "@/mixin/selectMixin.js";
import {
indexStudy
} from '@/api/student/index.js'
export default {
mixins: [myMixins],
components: {
studentDetail
},
data() {
return {
return {
subjectObj:{},
select: {
name: '',
daterange: '',
type: ''
name: '',
course_id:'',
course_name: '',
company_name: '',
company_position: '',
company_area: '',
company_type: '',
company_industry: '',
page: 1,
page_size: 10,
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
status_options: [{
id: 0,
value: '未通过'
}, {
id: 1,
value: '已通过'
}],
list: [{
name:'王同学'
}],
company_position_list: [],
company_type_list: [],
company_industry_list: [],
company_area_list: [],
list: [],
total: 0,
table_item: [{
prop: 'name',
label: '姓名',
align: 'center',
width:120
align: 'center',
width: 120
}, {
prop: 'compony',
prop: 'company_name',
label: '公司',
align: 'left',
width:200
align: 'left',
}, {
prop: 'zw',
prop: 'company_position',
label: '职务',
align: 'center',
width: 160,
width: 120,
}, {
prop: 'mobile',
label: '联系电话',
align: 'center',
width: 180,
}, {
prop: 'type',
width: 120,
}, {
prop: 'company_type',
label: '企业性质',
align: 'center',
width: 180,
}, {
prop: 'opc',
prop: 'company_industry',
label: '所属行业',
align: 'center',
width: 180,
width: 120,
}, {
prop: 'area',
prop: 'company_area',
label: '所属区域',
align: 'center',
width: 180,
width: 120,
}, {
prop: 'date',
label: '报名时间',
align: 'center',
width: 180,
},{
}, {
prop: 'status',
label: '审核状态',
align: 'center',
width: 180,
}]
}
},
created() {
mounted() {
this.subjectObj = this.$route.query
this.select.course_id = this.subjectObj.id
this.getList()
},
methods: {
showDetail(type,id){
this.$refs.studentDetail.type = type
this.$refs.studentDetail.isShow = true
methods: {
async getList() {
const res = await indexStudy({
page: this.select.page,
page_size: this.select.page_size,
filter: [ {
key: 'name',
op: 'like',
value: this.select.name
},{
key: 'course_id',
op: 'eq',
value: this.select.course_id
}, {
key: 'company_name',
op: 'like',
value: this.select.company_name
}, {
key: 'company_position',
op: 'eq',
value: this.select.company_position
}, {
key: 'company_area',
op: 'eq',
value: this.select.company_area
}, {
key: 'company_type',
op: 'eq',
value: this.select.company_type
}, {
key: 'company_industry',
op: 'eq',
value: this.select.company_industry
}]
})
this.list = res.data
this.total = res.total
},
deleteList() {
var that = this;
destroy({
id: this.id,
table_name: 'new_plans'
}).then(response => {
this.$Message.success('操作成功');
this.isShow = false
this.$emit('refresh')
}).catch(error => {
console.log(error)
reject(error)
})
showDetail(type, id) {
this.$refs.studentDetail.id = id
this.$refs.studentDetail.type = type
this.$refs.studentDetail.isShow = true
},
}
}
</script>
<style lang="scss" scoped>
.txl{
display: flex;
align-items: center;
margin-bottom:10px;
&>div{
margin-right:10px;
}
<style lang="scss" scoped>
.txl {
display: flex;
align-items: center;
margin-bottom: 10px;
font-size:18px;
&>div {
margin-right: 15px;
}
}
.searchwrap {
display: flex;
align-items: center;

@ -12,6 +12,19 @@
</div>
</div>
</template>
<template v-slot:image_id>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>标题图片750*400
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :limit="1" list-type="picture-card" :file-list="imgList"
ref="pictureUpload" :before-upload="beforeUpload" :auto-upload="true" :on-success="uploadSuccess" :on-remove="uploadRemove">
<i class="el-icon-plus"></i>
</el-upload>
</div>
</div>
</template>
<template v-slot:leibie>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
@ -72,7 +85,7 @@
show
} from "@/api/system/baseForm.js"
import {
deepCopy,
deepCopy,
isNull
} from "@/utils";
export default {
@ -83,8 +96,9 @@
return {
isShow: false,
type: 'add',
id: '',
showTinymce:false,
id: '',
action: `${process.env.VUE_APP_UPLOAD_API}`,
showTinymce: false,
table_name: 'notices',
leibie_options: [{
@ -108,9 +122,11 @@
id: 1,
value: '发布'
}],
imgList: [],
form: {
biaoti: '',
leibie: '',
image_id: '',
neirong: '',
shifoutongbugongzhonghao: 0,
zhuangtai: 1
@ -123,14 +139,39 @@
leibie: [{
required: true,
message: '请选择类别'
}]
}],
image_id: [{
required: true,
message: '请上传标题图片'
}],
}
}
},
created() {},
methods: {
saveContent(e){
this.form.neirong = e
methods: {
saveContent(e) {
this.form.neirong = e
},
beforeUpload(file) {
console.log(file)
const isImage = file.type.includes('image');
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isImage) {
this.$message.error('请上传正确的图片格式文件');
}
if (!isLt2M) {
this.$message.error('上传文件大小不能超过2MB');
}
return isImage && isLt2M;
},
uploadSuccess(response, file, fileList) {
console.log(response, file, fileList)
this.form.image_id = response.id
this.imgList = fileList
},
uploadRemove(file, fileList){
this.imgList = fileList
this.form.image_id = ''
},
submit() {
if (this.id) {
@ -157,7 +198,11 @@
id: this.id,
table_name: this.table_name,
}).then(res => {
this.form = this.base.requestToForm(res,this.form)
this.form = this.base.requestToForm(res, this.form)
console.log("this.form",this.form)
if(res.image_id){
this.imgList.push(res.image_id_uploads_id_relation)
}
this.showTinymce = true
})
}
@ -167,10 +212,13 @@
if (newVal) {
if (this.type === 'editor') {
this.getDetail()
} else {
this.showTinymce = true
}
} else {
this.id = ''
this.type="add"
this.id = ''
this.type = "add"
this.imgList = []
this.showTinymce = false
this.$refs['dialog'].reset()
}
@ -180,8 +228,8 @@
}
</script>
<style scoped lang="scss">
::v-deep .neirong{
flex-basis: 100%;
<style scoped lang="scss">
::v-deep .neirong {
flex-basis: 100%;
}
</style>

@ -135,7 +135,7 @@
</div>
<div class="xy-table-item-content">
<el-select style="width: 300px;" v-model="form.status" placeholder="请选择" clearable>
<el-option v-for="item in status_options" :key="item.id" :label="item.value" :value="item.id">
<el-option v-for="item in apply_status_list" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
@ -165,8 +165,13 @@
</div>
</template>
<script>
export default {
<script>
import {
show
} from '@/api/student/index.js'
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
components: {
},
@ -175,16 +180,6 @@
isShow: false,
type: 'show',
id: '',
status_options: [{
id: 0,
value: '待审核'
}, {
id: 1,
value: '通过'
}, {
id: 2,
value: '不通过'
}],
student_info: {},
form: {
show: '',
@ -216,17 +211,16 @@
getDetail() {
show({
id: this.id,
table_name: 'new_plans',
}).then(res => {
this.student_info = res
})
}
},
watch: {
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
// this.getDetail()
if (this.type === 'show' || this.type === 'check') {
this.getDetail()
}
} else {
this.id = ''

@ -4,49 +4,51 @@
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" :text="$route.meta.title" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content">
<div slot="content">
<div class="searchwrap" style="display: flex;align-items: center;">
<div v-if="path==2">
<div>
<el-input v-model="select.name" placeholder="请输入课程名称"></el-input>
</div>
</div>
<div v-else>
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-input v-model="select.company" placeholder="请输入公司名称"></el-input>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择职务" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择企业性质" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.status" placeholder="请选择所属区域" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.type" placeholder="请选择所属行业" clearable>
<el-option v-for="item in type_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
<div>
<el-button type="primary" size="small">查询</el-button>
<el-button v-if="path==2" type="primary" size="small"></el-button>
<div class="searchwrap" style="display: flex;align-items: center;">
<div v-if="path==2">
<div>
<el-input v-model="select.course_name" placeholder="请输入课程名称"></el-input>
</div>
</div>
<div v-else>
<div>
<el-input v-model="select.name" placeholder="请输入姓名"></el-input>
</div>
<div>
<el-input v-model="select.company_name" placeholder="请输入公司名称"></el-input>
</div>
<div>
<el-select v-model="select.company_position" placeholder="请选择职务" clearable>
<el-option v-for="item in company_position_list" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_type" placeholder="请选择企业性质" clearable>
<el-option v-for="item in company_type_list" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_area" placeholder="请选择所属区域" clearable>
<el-option v-for="item in company_area_list" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div>
<el-select v-model="select.company_industry" placeholder="请选择所属行业" clearable>
<el-option v-for="item in company_industry_list" :key="item.id" :label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div>
<el-button type="primary" size="small" @click="getList"></el-button>
<el-button v-if="path==2" type="primary" size="small"></el-button>
</div>
</div>
</div>
@ -55,7 +57,7 @@
</div>
</div>
<div>
<div>
<div v-if="path==2" style="margin-bottom:10px">8001500</div>
<xy-table :list="list" :total="total" :table-item="table_item">
<template v-slot:btns>
@ -74,54 +76,46 @@
<script>
import studentDetail from './components/detail.vue';
import myMixins from "@/mixin/selectMixin.js";
import {
indexStudy
} from '@/api/student/index.js'
export default {
mixins: [myMixins],
components: {
studentDetail
},
data() {
return {
path:'',
return {
path: '',
select: {
name: '',
daterange: '',
type: ''
course_name: '',
company_name: '',
company_position: '',
company_area: '',
company_type: '',
company_industry: '',
page: 1,
page_size: 10,
},
type_options: [{
id: 0,
value: '常规课程'
}, {
id: 1,
value: '短期课程'
}],
status_options: [{
id: 0,
value: '进行中'
}, {
id: 1,
value: '未开始'
}],
list: [{
name: '王同学',
company: '**股份公司',
zw: 'CEO',
mobile: '13812345678',
type: '上市及拟上市企业',
opc:'创新药物',
area:'工业园区'
}],
company_position_list: [],
company_type_list: [],
company_industry_list: [],
company_area_list: [],
list: [],
total: 0,
table_item: [{
prop: 'name',
label: '姓名',
align: 'center',
width:120
align: 'center',
width: 120
}, {
prop: 'company',
prop: 'company_name',
label: '公司',
align: 'left',
}, {
prop: 'zw',
prop: 'company_position',
label: '职务',
align: 'center',
width: 120,
@ -130,18 +124,18 @@
label: '联系电话',
align: 'center',
width: 120,
}, {
prop: 'type',
}, {
prop: 'company_type',
label: '企业性质',
align: 'center',
width: 180,
}, {
prop: 'opc',
prop: 'company_industry',
label: '所属行业',
align: 'center',
width: 120,
}, {
prop: 'area',
prop: 'company_area',
label: '所属区域',
align: 'center',
width: 120,
@ -150,38 +144,62 @@
}
},
created() {
const _path = this.$route.path.split("_")
console.log("_path",this.$route,_path)
this.path = _path[1]
if(this.path==2){
this.table_item.unshift({
prop: 'subject',
label: '课程名称',
align: 'left',
width: 200,
})
const _path = this.$route.path.split("_")
console.log("_path", this.$route, _path)
this.path = _path[1]
if (this.path == 2) {
this.table_item.unshift({
prop: 'subject',
label: '课程名称',
align: 'left',
width: 200,
})
}
this.getList()
},
methods: {
async getList() {
const res = await indexStudy({
page: this.select.page,
page_size: this.select.page_size,
filter: [{
key: 'course_name',
op: 'like',
value: this.select.course_name
}, {
key: 'name',
op: 'like',
value: this.select.name
}, {
key: 'company_name',
op: 'like',
value: this.select.company_name
}, {
key: 'company_position',
op: 'eq',
value: this.select.company_position
}, {
key: 'company_area',
op: 'eq',
value: this.select.company_area
}, {
key: 'company_type',
op: 'eq',
value: this.select.company_type
}, {
key: 'company_industry',
op: 'eq',
value: this.select.company_industry
}]
})
this.list = res.data
this.total = res.total
},
showDetail(type, id) {
this.$refs.studentDetail.id = id
this.$refs.studentDetail.type = type
this.$refs.studentDetail.isShow = true
},
deleteList() {
var that = this;
destroy({
id: this.id,
table_name: 'new_plans'
}).then(response => {
this.$Message.success('操作成功');
this.isShow = false
this.$emit('refresh')
}).catch(error => {
console.log(error)
reject(error)
})
},
}
}
}
</script>
@ -191,12 +209,13 @@
display: flex;
align-items: center;
&>div {
display: flex;
align-items: center;
&>div{
margin-right: 10px;
&>div {
display: flex;
align-items: center;
&>div {
margin-right: 10px;
}
}

Loading…
Cancel
Save