linyongLynn 3 months ago
commit 950953b512

@ -5,5 +5,7 @@ ENV='development'
VUE_APP_BASE_API=https://suzhoukeji-test.ali251.langye.net
VUE_APP_UPLOAD_API=https://suzhoukeji-test.ali251.langye.net/api/admin/upload-file
VUE_APP_PRO_API = https://www.sstbc.com
#VUE_APP_BASE_API = https://wx.sstbc.com
#VUE_APP_UPLOAD_API = https://wx.sstbc.com/api/admin/upload-file

@ -6,6 +6,8 @@ ENV = 'production'
VUE_APP_BASE_API=https://suzhoukeji-test.ali251.langye.net
VUE_APP_UPLOAD_API=https://suzhoukeji-test.ali251.langye.net/api/admin/upload-file
VUE_APP_PRO_API =https://www.sstbc.com
#VUE_APP_BASE_API = https://wx.sstbc.com
#VUE_APP_UPLOAD_API = https://wx.sstbc.com/api/admin/upload-file

@ -7,3 +7,4 @@ ENV = 'staging'
VUE_APP_BASE_API=https://suzhoukeji-test.ali251.langye.net
VUE_APP_UPLOAD_API=https://suzhoukeji-test.ali251.langye.net/api/admin/upload-file
VUE_APP_PRO_API =https://www.sstbc.com

@ -21,6 +21,7 @@
"axios": "0.18.1",
"core-js": "3.6.5",
"echarts": "^4.2.1",
"echarts-gl": "^1.1.1",
"element-ui": "2.15.13",
"file-saver": "^2.0.5",
"js-cookie": "2.2.0",

@ -0,0 +1,10 @@
import request from '@/utils/request'
export function home(params,isLoading) {
return request({
url: '/api/admin/other/home',
method: 'get',
params,
isLoading: true
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

@ -1,5 +1,5 @@
<template>
<section class="app-main">
<section class="app-main" :style="{'padding':key.includes('/dashboard')?'0!important':''}">
<transition name="fade-transform" mode="out-in">
<router-view :key="key" />
</transition>
@ -17,7 +17,7 @@ export default {
}
</script>
<style scoped>
<style scoped lang="scss">
.app-main {
/*50 = navbar */
min-height: calc(100vh - 50px);

@ -3,7 +3,7 @@
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
<sidebar class="sidebar-container" />
<div class="main-container">
<div :class="{'fixed-header':fixedHeader}">
<div :class="{'fixed-header':fixedHeader}" :style="{'display':key.includes('/dashboard')?'none':''}">
<navbar />
</div>
<app-main />
@ -24,6 +24,9 @@ export default {
},
mixins: [ResizeMixin],
computed: {
key() {
return this.$route.path
},
sidebar() {
return this.$store.state.app.sidebar
},

@ -54,39 +54,40 @@
</div>
</div>
</template>
<template v-if="form.type===4" v-slot:url>
<template v-if="form.type===4 || form.type===1" v-slot:url>
<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-input v-model="form.url" placeholder="请输入跳转链接,例:/news/2025-07-02/146.html" clearable
style="width: 100%;"></el-input>
<el-select filterable remote v-model="form.url" :remote-method="remoteMethod" :loading="loading"
placeholder="请输入关键词查询资讯" clearable style="width: 100%;">
<el-option v-for="item in zixunList" :key="item.id" :label="item.title" :value="item.titleurl">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:date>
<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 v-model="form.date" style="width: 100%;"
type="date" value-format="yyyy-MM-dd" format="yyyy-MM-dd" placeholder="选择日期时间" align="right">
</el-date-picker>
</div>
</div>
</template>
<!-- <template v-slot:date>
<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 v-model="form.date" style="width: 100%;"
type="date" value-format="yyyy-MM-dd" format="yyyy-MM-dd" placeholder="选择日期时间" align="right">
</el-date-picker>
</div>
</div>
</template> -->
<template v-slot:start_time>
<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 v-model="form.start_time"
style="width: 100%;"
value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择日期时间" align="right"
<el-date-picker v-model="form.start_time" style="width: 100%;" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="选择日期时间" align="right"
:picker-options="pickerOptions">
</el-date-picker>
</div>
@ -98,23 +99,20 @@
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>截止时间
</div>
<div class="xy-table-item-content">
<el-date-picker v-model="form.end_time"
style="width: 100%;"
value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择日期时间" align="right"
<el-date-picker v-model="form.end_time" style="width: 100%;" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="选择日期时间" align="right"
:picker-options="pickerOptions">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:content>
<template v-slot:content v-if="form.type===3">
<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 v-if="showTinymce" @input="saveContent" :value="form.content"></my-tinymce>
<my-tinymce v-if="showTinymce" @input="saveContent" :value="form.content"></my-tinymce>
</div>
</div>
</template>
@ -142,7 +140,7 @@
return {
isShow: false,
type: 'add',
id: '',
id: '',
showTinymce: false,
pickerOptions: {
shortcuts: [{
@ -167,21 +165,22 @@
}]
},
type_options: [{
id: 1,
value: '课程'
},
// {
// id: 2,
// value: ''
// },
{
id: 3,
value: '自定义事件'
}, {
id: 4,
value: '资讯'
}],
course_content_options:[],
id: 1,
value: '课程'
},
// {
// id: 2,
// value: ''
// },
{
id: 3,
value: '自定义事件'
}, {
id: 4,
value: '资讯'
}
],
course_content_options: [],
course_options: [],
canSelect: false,
form: {
@ -190,9 +189,9 @@
course_content_id: '',
title: '',
url: '',
date: '',
// date: '',
start_time: '',
end_time: '',
end_time: '',
content: '',
},
rules: {
@ -204,17 +203,52 @@
required: true,
message: '请选择开始时间'
}],
end_time: [{
required: true,
message: '请选择结束时间'
}],
}
// end_time: [{
// required: true,
// message: ''
// }],
},
zixunList:[],
}
},
created() {
this.getCourseList()
this.getCourseList()
this.getZxList()
},
methods: {
remoteMethod(query) {
if (query !== '') {
this.loading = true;
this.getZxList(query)
} else {
this.zixunList = [];
}
},
async getZxList(query) {
const proUrl = `${process.env.VUE_APP_PRO_API}`
var baseUrl = proUrl + '/e/extend/news.php'
try {
// axios.get()
const response = await axios.get(baseUrl, {
params: {
page: 1,
pagesize: 999,
keyword: query
}, // GET URL
timeout: 5000 //
});
//
if (response.status === 200) {
this.zixunList = response.data.rows;
}
this.loading = false
console.log('GET 请求成功:', response);
} catch (error) {
//
console.error('GET 请求失败:', error);
alert('请求失败:' + (error.response?.data?.msg || '网络错误'));
}
},
async getCourseList() {
const res = await courseIndex({
page: 1,
@ -240,44 +274,45 @@
return
}
this.course_content_options = res.data
},
saveContent(e) {
this.form.content = e
},
saveContent(e) {
this.form.content = e
},
changeType(e) {
console.log("type", e)
},
changeCourse(e) {
console.log("course", e)
console.log("course", e)
//
if (this.form.type == 2) {
this.form.course_content_id = ''
this.getCourseContentList(e)
}
//
if(this.form.type==1){
this.course_options.map(item=>{
if(item.id===e){
this.form.title = item.name
this.form.start_time = item.start_date
this.form.end_time = item.end_date
}
//
if (this.form.type == 1) {
this.course_options.map(item => {
if (item.id === e) {
this.form.title = item.name
this.form.start_time = item.start_date?item.start_date+' 00:00:00':''
this.form.end_time = item.end_date?item.end_date+' 00:00:00':''
this.form.date = item.start_date
}
})
this.form.url = item.url
}
})
}
},
changeCourseContent(e) {
//
if(this.form.type==2){
this.course_content_options.map(item=>{
if(item.id===e){
this.form.title = item.theme
//
if (this.form.type == 2) {
this.course_content_options.map(item => {
if (item.id === e) {
this.form.title = item.theme
this.form.start_time = item.start_date
this.form.end_time = item.end_date
this.form.date = item.start_date
}
})
this.form.end_time = item.end_date
this.form.date = item.start_date
}
})
}
},
submit() {
@ -311,24 +346,24 @@
watch: {
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
console.log("id",this.id)
if (this.type === 'editor') {
console.log("id", this.id)
this.getDetail()
}else{
this.showTinymce = true
} else {
this.showTinymce = true
}
} else {
this.id = ''
this.showTinymce = false
this.form = {
type: '',
course_id: '',
course_content_id: '',
title: '',
url: '',
date: '',
start_time: '',
end_time: '',
type: '',
course_id: '',
course_content_id: '',
title: '',
url: '',
date: '',
start_time: '',
end_time: '',
content: '',
}
this.$refs['dialog'].reset()

@ -0,0 +1,173 @@
<template>
<div class="admin-calendar">
<div class="admin-main">
<!-- 数据拉取区 -->
<div class="admin-panel" style="max-width: 350px;">
<el-button type="success" icon="el-icon-plus" style="width:100%;margin-top:10px;"
@click="openCreateModal('add')">新建日历事件</el-button>
</div>
<!-- 日历预览区 -->
<div class="admin-panel" style="min-width:0;flex:2;">
<div class="admin-panel-title"><i class="el-icon-view"></i> 日历预览区</div>
<el-calendar v-model="calendarDate">
<template slot="dateCell" slot-scope="{date}">
<div class="cell-content">
<span>{{ date.getDate() }}</span>
<div v-for="ev in eventsForDate(date)" :key="ev._id" class="event-dot" :title="ev.title"></div>
</div>
</template>
</el-calendar>
<div class="mt-4">
<h3 class="mb-2"><i class="el-icon-menu"></i> 当月事件列表</h3>
<el-empty v-if="list.length === 0" description="本月暂无事件" />
<el-timeline v-else>
<el-timeline-item v-for="ev in list" :key="ev._id" :timestamp="ev.start | formatDateTime"
:color="'#409EFF'">
<div>
<b>{{ ev.title }}</b>
<el-tag size="mini" style="margin-left:8px;">{{ typeText(ev.type) }}</el-tag>
<span style="font-size:13px;"> {{ ev.start_time | formatDateTime }} ~ {{ ev.end_time | formatDateTime }}</span>
</div>
<div style="margin-top:4px;">
<el-button size="mini" type="primary" icon="el-icon-edit" @click="openCreateModal('editor',ev.id)"></el-button>
</div>
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
<addCalendar ref="addCalendar" @refresh="getList"></addCalendar>
</div>
</template>
<script>
import addCalendar from './components/addCalendar.vue'
import {
index
} from '@/api/calendars/index.js'
export default {
components: {
addCalendar
},
data() {
return {
list: [],
calendarDate: new Date()
}
},
computed: {
selectMonth() {
const now = this.calendarDate instanceof Date ? this.calendarDate : new Date(this.calendarDate)
const month = now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1
const year = now.getFullYear()
return year + '-' + month
}
},
created() {
this.getList()
},
methods: {
async getList() {
const res = await index({
month: this.selectMonth
})
this.list = res
},
openCreateModal(type, id) {
if (type === 'editor') {
this.$refs.addCalendar.id = id
}
this.$refs.addCalendar.type = type
this.$refs.addCalendar.isShow = true
},
eventsForDate(date) {
const d = new Date(date)
return this.list.filter(ev => {
const evDate = new Date(ev.start_time)
return evDate.getFullYear() === d.getFullYear() && evDate.getMonth() === d.getMonth() && evDate.getDate() === d.getDate()
})
},
typeText(className) {
if (!className) return ''
if (className === 1) return '课程'
if (className === 3) return '自定义事件'
if (className === 4) return '资讯'
return ''
}
},
filters: {
formatDateTime(val) {
if (!val) return ''
return val.replace('T', ' ')
}
}
}
</script>
<style scoped>
.admin-calendar {
background: #f4f6fa;
min-height: 100vh;
}
.admin-main {
display: flex;
gap: 24px;
padding: 30px 30px 0 30px;
min-height: 90vh;
}
.admin-panel {
background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
padding: 24px 18px;
flex: 1 1 0;
min-width: 320px;
display: flex;
flex-direction: column;
gap: 18px;
}
.admin-panel-title {
font-size: 18px;
font-weight: 600;
margin-bottom: 10px;
color: #1565c0;
}
.cell-content {
position: relative;
min-height: 24px;
}
.event-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #409EFF;
display: inline-block;
margin-right: 2px;
cursor: pointer;
}
.mt-4 {
margin-top: 24px;
}
.mb-2 {
margin-bottom: 8px;
}
@media (max-width: 1200px) {
.admin-main {
flex-direction: column;
gap: 18px;
padding: 18px 6px 0 6px;
}
}
</style>

File diff suppressed because it is too large Load Diff

@ -37,19 +37,33 @@
<el-input v-model="form.name" placeholder="请输入课程名称" clearable style="width: 100%;"></el-input>
</div>
</div>
</template>
<template v-slot:is_virtual v-if="active===0">
<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.is_virtual" placeholder="请选择" clearable style="width: 100%;">
<el-option v-for="item in false_or_true" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:is_virtual v-if="active===0">
<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.is_virtual" placeholder="请选择" clearable style="width: 100%;">
<el-option v-for="item in false_or_true" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:url v-if="active===0">
<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 filterable remote v-model="form.url" :remote-method="remoteMethod" :loading="loading"
placeholder="请输入关键词查询资讯" clearable style="width: 100%;">
<el-option v-for="item in zixunList" :key="item.id" :label="item.title" :value="item.titleurl">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:year v-if="active===0">
<div class="xy-table-item">
@ -111,7 +125,7 @@
</template>
<!-- <template v-slot:status v-if="active===0">
<!-- <template v-slot:status v-if="active===0">
<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>状态
@ -245,8 +259,9 @@
<Button v-if="formList.length>0" ghost type="primary" @click="editForm('editor')"></Button>
<Button v-else ghost type="primary" @click="editForm('add')"></Button>
</template>
<el-form style="min-height: 300px;display: flex;flex-wrap: wrap;justify-content: space-between;padding: 0 4%;" label-width="80px"
label-position="top" size="small">
<el-form
style="min-height: 300px;display: flex;flex-wrap: wrap;justify-content: space-between;padding: 0 4%;"
label-width="80px" label-position="top" size="small">
<!-- <el-divider>基础字段</el-divider>
<el-form-item :label="i.name" :required="
i.rule ? !!i.rule.includes('required') : false
@ -273,21 +288,21 @@
<template v-slot:footerContent>
<Button ghost type="primary" v-if="active===1" @click="active=0"></Button>
<!-- <Button ghost type="primary" v-if="active===0" @click="next"></Button> -->
<Button type="primary" ghost @click="checkSubmit" v-if="active===0"></Button>
<Button type="primary" ghost v-if="active===1" @click="closeSubmit(0)" >保存待发</Button>
<Button type="primary" ghost @click="checkSubmit" v-if="active===0"></Button>
<Button type="primary" ghost v-if="active===1" @click="closeSubmit(0)"></Button>
<Button type="primary" v-if="active===1" @click="closeSubmit(1)"></Button>
</template>
</xy-dialog>
<!-- 发布提示 -->
<el-dialog title="是否确认发布" :visible.sync="showTips" width="30%">
<div style="padding: 30px;font-size: 24px;text-indent: 2em;">请确认报名表单无误后再发布</div>
<span slot="footer" class="dialog-footer">
<el-button @click="showTips = false"> </el-button>
<el-button type="primary" @click="saveSubmit"> </el-button>
</span>
</xy-dialog>
<!-- 发布提示 -->
<el-dialog title="是否确认发布" :visible.sync="showTips" width="30%">
<div style="padding: 30px;font-size: 24px;text-indent: 2em;">请确认报名表单无误后再发布</div>
<span slot="footer" class="dialog-footer">
<el-button @click="showTips = false"> </el-button>
<el-button type="primary" @click="saveSubmit"> </el-button>
</span>
</el-dialog>
<applyForm ref="applyForm" @refresh="getFormList"></applyForm>
@ -310,6 +325,7 @@
} from "@/utils";
import applyForm from "../components/applyForm.vue";
import formSlotRender from "@/views/system/components/formSlotRender.vue";
import axios from 'axios'
export default {
mixins: [myMixins, formMixins],
components: {
@ -318,8 +334,8 @@
},
data() {
return {
isShow: false,
showTips:false,
isShow: false,
showTips: false,
type: 'add',
active: 0,
id: '',
@ -333,8 +349,9 @@
form: {
step: '', //
type: '',
name: '',
is_virtual:0, //01
name: '',
is_virtual: 0, //01
url: '',
year: '',
dateRange: '',
total: '',
@ -389,11 +406,48 @@
sort_name: 'sort',
sort_type: 'ASC'
},
formList: []
formList: [],
loading: false,
zixunList: []
}
},
created() {},
created() {
this.getZxList()
},
methods: {
remoteMethod(query) {
if (query !== '') {
this.loading = true;
this.getZxList(query)
} else {
this.zixunList = [];
}
},
async getZxList(query) {
const proUrl = `${process.env.VUE_APP_PRO_API}`
var baseUrl = proUrl + '/e/extend/news.php'
try {
// axios.get()
const response = await axios.get(baseUrl, {
params: {
page: 1,
pagesize: 999,
keyword: query
}, // GET URL
timeout: 5000 //
});
//
if(response.status===200){
this.zixunList = response.data.rows;
}
this.loading = false
console.log('GET 请求成功:', response);
} catch (error) {
//
console.error('GET 请求失败:', error);
alert('请求失败:' + (error.response?.data?.msg || '网络错误'));
}
},
changeType(e) {
// if (e == 1) {
@ -476,9 +530,9 @@
submit() {
if (this.id) {
this.form.id = this.id
}else{
this.form.id = ''
}
} else {
this.form.id = ''
}
//
if (this.form.start_date && this.form.sign_end_date) {
@ -513,58 +567,58 @@
this.active = 1
// this.active = 1
})
},
//
saveSubmit(){
this.form.id = this.id
this.form.status = 1
save({
...this.form
}).then(res => {
this.$message({
type: 'success',
message: '发布成功',
duration: 2000
})
this.showTips = false
this.$emit('refresh')
this.isShow = false
})
},
closeSubmit(status) {
//
if(status==1){
if(this.formList.length<1){
this.$message({
type:'warning',
message:'需要先创建报名表单才可以发布',
duration:2000
})
return
}
//
if(this.form.status===1){
this.$emit('refresh')
this.isShow = false
}else{
this.showTips = true
}
}else{
this.form.id = this.id
this.form.status = 0
save({
...this.form
}).then(res => {
this.$message({
type: 'success',
message: '保存成功',
duration: 2000
})
this.$emit('refresh')
this.isShow = false
})
}
//
saveSubmit() {
this.form.id = this.id
this.form.status = 1
save({
...this.form
}).then(res => {
this.$message({
type: 'success',
message: '发布成功',
duration: 2000
})
this.showTips = false
this.$emit('refresh')
this.isShow = false
})
},
closeSubmit(status) {
//
if (status == 1) {
if (this.formList.length < 1) {
this.$message({
type: 'warning',
message: '需要先创建报名表单才可以发布',
duration: 2000
})
return
}
//
if (this.form.status === 1) {
this.$emit('refresh')
this.isShow = false
} else {
this.showTips = true
}
} else {
this.form.id = this.id
this.form.status = 0
save({
...this.form
}).then(res => {
this.$message({
type: 'success',
message: '保存成功',
duration: 2000
})
this.$emit('refresh')
this.isShow = false
})
}
},
getDetail() {
@ -584,8 +638,8 @@
this.form.dateRange = res.start_date ? [res.start_date, res.end_date] : ''
this.form.status = res.status ? res.status : 0
this.form.is_arrange = res.is_arrange ? res.is_arrange : 0
this.form.is_fee = res.is_fee ? res.is_fee : 0
this.form.is_virtual = res.is_virtual?res.is_virtual:0
this.form.is_fee = res.is_fee ? res.is_fee : 0
this.form.is_virtual = res.is_virtual ? res.is_virtual : 0
this.form.show_txl = res.show_txl === 0 ? 0 : 1
this.form.show_mobile = res.show_mobile ? res.show_mobile : 0
this.showTinymce = true
@ -613,9 +667,9 @@
},
//
editForm(type, id) {
// this.$refs.applyForm.formList = deepCopy(this.formList)
if(type==='add'){
this.$refs.applyForm.showStartTips = true
// this.$refs.applyForm.formList = deepCopy(this.formList)
if (type === 'add') {
this.$refs.applyForm.showStartTips = true
}
this.$refs.applyForm.course_id = this.id
this.$refs.applyForm.course_signs_count = this.course_signs_count
@ -645,8 +699,9 @@
this.form = {
step: '', //
type: '',
name: '',
is_virtual:0,
name: '',
is_virtual: 0,
url: '',
year: '',
dateRange: '',
total: '',

@ -31,7 +31,7 @@
<div class="course-info">
<span><i class="el-icon-date"></i> {{ course.date }} - {{course.period}}</span>
<span><i class="el-icon-location"></i> {{ course.address }}</span>
<span><i class="el-icon-user"></i> {{ course.teacher.name }}</span>
<span><i class="el-icon-user"></i> {{ course.teacher?course.teacher.name:'' }}</span>
</div>
</div>
</template>
@ -64,7 +64,7 @@
<div><strong>主题</strong>{{ selectedCourse.theme }}</div>
<div><strong>时间</strong>{{ selectedCourse.date }} - {{selectedCourse.period}}</div>
<div><strong>地点</strong>{{ selectedCourse.address }}</div>
<div><strong>主讲</strong>{{ selectedCourse.teacher.name }}</div>
<div><strong>主讲</strong>{{ selectedCourse.teacher?selectedCourse.teacher.name:'' }}</div>
</div>
</div>
<div class="qr-actions">
@ -185,8 +185,14 @@
op: 'eq',
value: date ? date : ''
}]
})
this.courseContentList = res.data
})
if(res.data.length>0){
this.courseContentList = res.data
}else{
this.courseContentList = []
this.$message.warning("该课程还未添加课表");
}
},
getCousreContent(){
this.getCourseContent(this.course_id,this.course_date)

File diff suppressed because it is too large Load Diff

@ -0,0 +1,92 @@
<template>
<div class="jsc" :style="bgStyle">
</div>
</template>
<script>
import echarts from "echarts"
import PanelGroup from './components/PanelGroup'
import {
getChartsHome
} from "../../api/dashboard.js"
export default {
components: {
PanelGroup
},
data() {
return {
screenWidth: 0,
screenHeight: 0,
bgStyle: {
width: 0,
height: 0
},
col: '',
line: '',
business_data: [],
collect_data: [],
list: {},
customerArr: [],
orderArr: [],
chartData: {},
}
},
watch: {
// chartData(val, newval) {
// if (newval){
// this.init();
// }
// }
},
created() {
},
mounted() {
this.$store.dispatch('app/closeSideBar', {
withoutAnimation: false
})
this.calculateScreenSize()
},
destroyed() {
window.onresize = null
},
methods: {
calculateScreenSize() {
this.screenWidth = window.innerWidth
this.screenHeight = window.innerHeight
this.bgStyle = {
width: this.screenWidth - 56 + 'px',
height: this.screenHeight + 'px',
position: 'relative',
left: '-20px',
top: '-50px',
'z-index': 999
}
},
},
}
</script>
<style lang="scss" scoped>
::v-deep .app-main {
padding: 0 !important
}
::v-deep .hideSidebar .fixed-header {
display: none !important;
}
.jsc {
height: 100%;
background: url(../../assets/dashboard.png) no-repeat center top;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 10px;
padding-top: 0;
}
</style>

File diff suppressed because it is too large Load Diff

@ -30,7 +30,7 @@
<template v-slot:company_name>
<el-table-column align='left' label="企业名称" width="240" header-align="center">
<template slot-scope="scope">
<div @click="toQicc(scope.row.overseas_experience)" style="color:blue;cursor: pointer;text-decoration: underline;">
<div @click="toQicc(scope.row.company_name)" style="color:blue;cursor: pointer;text-decoration: underline;">
{{scope.row.company_name}}
</div>
</template>
@ -39,7 +39,7 @@
<template v-slot:company_legal_representative>
<el-table-column align='center' label="法人代表" width="120" header-align="center">
<template slot-scope="scope">
<div @click="toQicc(scope.row.overseas_experience)" style="color:blue;cursor: pointer;text-decoration: underline;">
<div @click="toQicc(scope.row.company_name)" style="color:blue;cursor: pointer;text-decoration: underline;">
{{scope.row.company_legal_representative}}
</div>
</template>
@ -48,7 +48,7 @@
<template v-slot:company_shareholder>
<el-table-column align='center' label="股东信息" width="120" header-align="center">
<template slot-scope="scope">
<div @click="toQicc(item.overseas_experience)" style="color:blue;cursor: pointer;text-decoration: underline;">
<div @click="toQicc(item.company_name)" style="color:blue;cursor: pointer;text-decoration: underline;">
{{scope.row.company_shareholder}}
</div>
</template>
@ -77,28 +77,24 @@
<template v-slot:users>
<el-table-column align='left' label="校友信息" width="240" header-align="center">
<template slot-scope="scope">
<div v-if="scope.row.id===1">
<div>
校友王磊
</div>
<div>
职务
</div>
<div>
课程2025产业加速营 | 具身智能机器人专赛暨具身智能极客营
</div>
</div>
<div v-if="scope.row.id===2">
<div>
校友周肖虹
</div>
<div>
职务总裁
</div>
<div>
课程2024高研班 | 第六期高级科创人才研修班
<template v-if="scope.row.users && scope.row.users.length>0">
<div v-for="item in scope.row.users">
<div>
校友{{item.name}}
</div>
<div>
职务{{item.company_position}}
</div>
<div v-if="item.course_signs && item.course_signs.length>0">
课程
<template v-for="(item1,index) in item.course_signs">
<span>{{item1.course.name}}</span>
<span v-if="(index+1)<item.course_signs.length"></span>
</template>
</div>
</div>
</div>
</template>
</template>
</el-table-column>
@ -200,10 +196,10 @@
this.getList()
},
methods: {
toQicc(overseas_experience) {
if(overseas_experience){
window.open(overseas_experience, '_blank')
toQicc(company_name) {
var url = 'https://www.qcc.com/web/search?key='
if(company_name){
window.open(url+company_name, '_blank')
}
// 'https://www.qcc.com/firm/ffb3379dc6b254336ecd31fc20d1dd30.html'
// https://www.qcc.com/firm/0a07162e2b34a5ee8046d46a1a446ed2.html

@ -56,7 +56,14 @@ module.exports = {
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: process.env.VUE_APP_BASE_API
}
}
},
[process.env.VUE_APP_PRO_API]: {
target: process.env.VUE_APP_PRO_API,
changeOrigin: true, //配置跨域
pathRewrite: {
['^' + process.env.VUE_APP_PRO_API]: process.env.VUE_APP_PRO_API
}
},
}
},
configureWebpack: {

Loading…
Cancel
Save