修改课程字体颜色 难度等级课程说明

master
15004070936 5 days ago
parent eb3ad532b9
commit 9b94070dc5

@ -7,7 +7,7 @@ ENV = 'development'
# 若依管理系统/开发环境 # 若依管理系统/开发环境
#VUE_APP_BASE_API = 'https://mall.ichengle.top/api' #VUE_APP_BASE_API = 'https://mall.ichengle.top/api'
#VUE_APP_BASE_API = '/dev-api' #VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://localhost:8080' VUE_APP_BASE_API = 'http://localhost:8081'
# 路由懒加载 # 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true
VUE_APP_JUDGE_STAR = 0 VUE_APP_JUDGE_STAR = 0

@ -1,9 +1,9 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 若依商城管理系统,开源免费,软件开发,微信小程序,ruoyi VUE_APP_TITLE = 瑜伽汇后台管理系统
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'
# 若依管理系统/生产环境 # 若依管理系统/生产环境
VUE_APP_BASE_API = 'https://mall.ichengle.top/api' VUE_APP_BASE_API = 'https://www.sanduolantoyoga.com/yoga-manager'
VUE_APP_JUDGE_STAR = 0 VUE_APP_JUDGE_STAR = 0

@ -1,7 +1,7 @@
{ {
"name": "ruoyi-ui-merge", "name": "ruoyi-ui-merge",
"version": "3.8.3", "version": "3.8.3",
"description": "yoga后台管理系统", "description": "瑜伽汇后台管理系统",
"author": "", "author": "",
"license": "", "license": "",
"scripts": { "scripts": {

@ -78,3 +78,11 @@ export function confirmCla(data) {
}) })
} }
// 课程 预约会员列表
export function searchCourseClaStudent(query) {
return request({
url: '/api/sc/cla/time/list/searchCourseClaStudent',
method: 'get',
params: query
})
}

@ -52,12 +52,5 @@ export function delCla(claId) {
} }
// 课程 预约会员列表
export function searchCourseClaStudent(query) {
return request({
url: '/api/sc/course/cla/list/searchCourseClaStudent',
method: 'get',
params: query
})
}

@ -11,10 +11,11 @@ export function listCourse(query) {
// select // select
export function select() { export function select(query) {
return request({ return request({
url: '/api/sc/course/list/select', url: '/api/sc/course/list/select',
method: 'get' method: 'get',
params: query
}) })
} }

@ -59,12 +59,6 @@ export function delMemberCard(cardIds) {
}) })
} }
export function orderCardTypeDetail(query) {
return request({
url: '/api/sc/memberCardTypes/info/orderCardTypeDetail',
method: 'get',
params: query
})
}

@ -65,10 +65,12 @@ export default {
roomSelect({ roomSelect({
deptId: this.deptId deptId: this.deptId
}).then(response => { }).then(response => {
response.data?.forEach(item=>{
item.roomId=item.roomId+''
})
this.roomOptions = response.data this.roomOptions = response.data
const flag = this.roomOptions.some(item => item.roomId == this.roomId);
if (!flag) {
this.roomId = undefined
}
}) })
}, },
handleSelect: function(val) { handleSelect: function(val) {

@ -11,15 +11,11 @@
<div class="cla-base-info" style="border-bottom-width: 2px;"> <div class="cla-base-info" style="border-bottom-width: 2px;">
<div class="item"> <div class="item">
<div class="item-name">校区:</div> <div class="item-name">校区:</div>
<div class="item-value">{{ claInfo.deptName }}</div> <div class="item-value">{{ claTimeInfo.deptName }}</div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-name">所属课程:</div> <div class="item-name">所属课程:</div>
<div class="item-value">{{ claCourseInfo.courseName }}</div> <div class="item-value">{{ claTimeInfo.courseName }}</div>
</div>
<div class="item">
<div class="item-name">班级:</div>
<div class="item-value">{{ claInfo.claName }}</div>
</div> </div>
<div class="item"> <div class="item">
@ -188,10 +184,8 @@ import claTimeSelect from '@/components/sc/claTime/claTimeSelect'
import roomSelect from '@/components/sc/base/roomSelect' import roomSelect from '@/components/sc/base/roomSelect'
import claSelect from '@/components/sc/course/cla/claSelect' import claSelect from '@/components/sc/course/cla/claSelect'
import deptSelect from '@/components/system/dept/deptSelect' import deptSelect from '@/components/system/dept/deptSelect'
import { allDetailInfoById } from '@/api/school/sc/cla'
import moment from 'moment' import moment from 'moment'
import { searchCourseClaStudent } from '@/api/school/sc/cla/index' import {claTimeInfo as loadClaTimeInfo,confirmCla,searchCourseClaStudent} from "@/api/school/sc/cla/claTime";
import {claTimeInfo as loadClaTimeInfo,confirmCla} from "@/api/school/sc/cla/claTime";
import memberCardApi from "@/api/school/sc/memberCard"; import memberCardApi from "@/api/school/sc/memberCard";
export default { export default {
components: { components: {
@ -306,22 +300,15 @@ export default {
}, },
loadClaInfo() { loadClaInfo() {
if (this.claId) {
this.loadingClaDetail = true this.loadingClaDetail = true
loadClaTimeInfo(this.appointCourseTimeId).then(response => { loadClaTimeInfo(this.appointCourseTimeId).then(response => {
this.claTimeInfo = response.data this.claTimeInfo = response.data
// //
this.autoSetFormByClaTimeInfo() this.autoSetFormByClaTimeInfo()
return allDetailInfoById(this.claId)
}).then(response => {
this.loadingClaDetail = false
this.claInfo = response.data.courseCla
this.claCourseInfo = response.data.course
this.getList()
}).catch(() => {
this.loadingClaDetail = false this.loadingClaDetail = false
}) })
}
this.getList()
}, },
// //
autoSetFormByClaTimeInfo() { autoSetFormByClaTimeInfo() {
@ -365,7 +352,7 @@ export default {
this.claStudentList = claStudentList this.claStudentList = claStudentList
this.loading = false this.loading = false
}) })
this.loading = false
}, },
// //

@ -5,15 +5,11 @@
<div class="cla-base-info" style="border-bottom-width: 2px;"> <div class="cla-base-info" style="border-bottom-width: 2px;">
<div class="item"> <div class="item">
<div class="item-name">校区:</div> <div class="item-name">校区:</div>
<div class="item-value">{{ claInfo.deptName }}</div> <div class="item-value">{{ claTimeInfo.deptName }}</div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-name">所属课程:</div> <div class="item-name">所属课程:</div>
<div class="item-value">{{ claCourseInfo.courseName }}</div> <div class="item-value">{{ claTimeInfo.courseName }}</div>
</div>
<div class="item">
<div class="item-name">班级:</div>
<div class="item-value">{{ claInfo.claName }}</div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-name required">上课教练:</div> <div class="item-name required">上课教练:</div>
@ -69,9 +65,9 @@
v-model="form.endTime" v-model="form.endTime"
size="small" size="small"
:picker-options="{ :picker-options="{
start: '08:00', start: '00:00',
step: '00:01', step: '00:01',
end: '20:00' end: '23:59'
}" }"
style="width: 135px;" style="width: 135px;"
placeholder="下课时间" placeholder="下课时间"
@ -162,10 +158,10 @@
import { selectDictLabel } from '@/utils/commonUtils' import { selectDictLabel } from '@/utils/commonUtils'
import staffSelect from '@/components/system/staff/staffSelect' import staffSelect from '@/components/system/staff/staffSelect'
import roomSelect from '@/components/sc/base/roomSelect' import roomSelect from '@/components/sc/base/roomSelect'
import { allDetailInfoById } from '@/api/school/sc/cla' // import { allDetailInfoById } from '@/api/school/sc/cla'
import { claTimeInfo as loadClaTimeInfo, } from '@/api/school/sc/cla/claTime' import { claTimeInfo as loadClaTimeInfo, } from '@/api/school/sc/cla/claTime'
import moment from 'moment' import moment from 'moment'
import { searchCourseClaStudent } from '@/api/school/sc/cla/index' import { searchCourseClaStudent } from '@/api/school/sc/cla/claTime'
export default { export default {
components: { components: {
staffSelect, staffSelect,
@ -283,17 +279,11 @@ export default {
this.loadingClaDetail = true this.loadingClaDetail = true
loadClaTimeInfo(this.courseTimeId).then(response => { loadClaTimeInfo(this.courseTimeId).then(response => {
this.claTimeInfo = response.data this.claTimeInfo = response.data
//
this.autoSetFormByClaTimeInfo() this.autoSetFormByClaTimeInfo()
return allDetailInfoById(this.claId)
}).then(response => {
this.loadingClaDetail = false
this.claInfo = response.data.courseCla
this.claCourseInfo = response.data.course
this.loadCourseClaStudentAndAttendDetail()
}).catch(() => {
this.loadingClaDetail = false this.loadingClaDetail = false
}) })
this.loadCourseClaStudentAndAttendDetail()
} }
}, },
// //
@ -301,8 +291,8 @@ export default {
this.form.teacherId = this.claTimeInfo.teacherId this.form.teacherId = this.claTimeInfo.teacherId
this.form.roomId = this.claTimeInfo.roomId this.form.roomId = this.claTimeInfo.roomId
this.form.claDate = this.claTimeInfo.realClaDate this.form.claDate = this.claTimeInfo.realClaDate
this.form.startTime = this.claTimeInfo.realStartTime.substr(0, 5) this.form.startTime = this.claTimeInfo.realStartTime?.substr(0, 5)
this.form.endTime = this.claTimeInfo.realEndTime.substr(0, 5) this.form.endTime = this.claTimeInfo.realEndTime?.substr(0, 5)
this.form.memo = this.claTimeInfo.memo this.form.memo = this.claTimeInfo.memo
this.form.classTheme = this.claTimeInfo.classTheme this.form.classTheme = this.claTimeInfo.classTheme
}, },
@ -334,6 +324,7 @@ export default {
this.loading = false this.loading = false
}) })
this.loading = false
}, },
} }
} }

@ -2,11 +2,11 @@
<el-dialog :title="title" :visible.sync="open" width="600px"> <el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" v-loading="loadingChange" class="add-form auto-width" :model="form" :rules="rules" label-width="90px"> <el-form ref="form" v-loading="loadingChange" class="add-form auto-width" :model="form" :rules="rules" label-width="90px">
<el-row v-if="form.courseTimeId !== undefined && form.courseTimeId !== ''"> <el-row v-if="form.courseTimeId !== undefined && form.courseTimeId !== ''">
<el-col :span="12"> <!-- <el-col :span="12">-->
<el-form-item label="班级:"> <!-- <el-form-item label="班级:">-->
<el-input :value="oldTimeInfo.claName" readonly disabled size="small" /> <!-- <el-input :value="oldTimeInfo.claName" readonly disabled size="small" />-->
</el-form-item> <!-- </el-form-item>-->
</el-col> <!-- </el-col>-->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="原日期:"> <el-form-item label="原日期:">
<el-input :value="oldTimeInfo.claDate" readonly disabled size="small" /> <el-input :value="oldTimeInfo.claDate" readonly disabled size="small" />
@ -34,11 +34,11 @@
<dept-select v-model="form.deptId" :disabled="!canChangeCla" /> <dept-select v-model="form.deptId" :disabled="!canChangeCla" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-if="form.courseTimeId === undefined || form.courseTimeId === ''" :span="12"> <!-- <el-col v-if="form.courseTimeId === undefined || form.courseTimeId === ''" :span="12">-->
<el-form-item label="班级:" prop="claId"> <!-- <el-form-item label="班级:" prop="claId">-->
<cla-select v-model="form.claId" :dept-id="form.deptId" :disabled="!canChangeCla" mounted-load-all /> <!-- <cla-select v-model="form.claId" :dept-id="form.deptId" :disabled="!canChangeCla" mounted-load-all />-->
</el-form-item> <!-- </el-form-item>-->
</el-col> <!-- </el-col>-->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="上课日期:" prop="claDate"> <el-form-item label="上课日期:" prop="claDate">
<el-date-picker <el-date-picker

@ -1,18 +1,36 @@
<template> <template>
<el-dialog :title="title" :visible.sync="open" width="700px"> <el-dialog :title="title" :visible.sync="open" width="700px">
<el-form ref="form" v-loading="loadingChange" class="add-form auto-width" :model="form" :rules="rules" label-width="120px"> <el-form ref="form"
v-loading="loadingChange"
class="add-form auto-width"
:model="form"
:rules="rules"
:validate-on-rule-change="false"
label-width="120px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="校区:" prop="deptId"> <el-form-item label="校区:" prop="deptId">
<dept-select v-model="form.deptId" :disabled="!canChangeCla" /> <dept-select v-model="form.deptId" :disabled="!canChangeCourse" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="班级:" prop="claId"> <el-form-item label="课程:" prop="courseId">
<cla-select v-model="form.claId" :dept-id="form.deptId" :disabled="!canChangeCla" mounted-load-all /> <div class="input-with-color-picker-container">
<course-select
v-model="form.courseId"
:dept-id="form.deptId"
:disabled="!canChangeCourse"
clearable
mounted-load-all
style="width: 80%"
/>
<el-tooltip class="item" effect="dark" content="选择颜色,便于课表中区分" placement="right">
<el-color-picker v-model="form.claColor" :predefine="colorArray" />
</el-tooltip>
</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" style="text-align: left"> <el-col :span="12" style="text-align: left">
<el-form-item label="规则类型:"> <el-form-item label="规则类型:">
<el-radio-group v-model="form.ruleType" @change="handleRuleTypeChange"> <el-radio-group v-model="form.ruleType" @change="handleRuleTypeChange">
<el-radio <el-radio
@ -23,6 +41,29 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="课表字体大小:" prop="fontSize">
<div class="input-with-color-picker-container">
<el-select
v-model="form.fontSize"
filterable
clearable
style="width: 160px"
size="small"
>
<el-option
v-for="item in fontSizeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-tooltip class="item" effect="dark" content="选择颜色,便于课表中区分" placement="right">
<el-color-picker v-model="form.fontColor" :predefine="colorArray" />
</el-tooltip>
</div>
</el-form-item>
</el-col>
<div v-if="form.ruleType === '1'"> <div v-if="form.ruleType === '1'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开始日期:" prop="beginDate"> <el-form-item label="开始日期:" prop="beginDate">
@ -63,7 +104,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-if="form.repeatType !== '2'" :span="24" style="text-align: left"> <el-col v-if="form.repeatType !== '2'" :span="24" style="text-align: left">
<el-form-item label="上课星期:"> <el-form-item label="上课星期:" prop="weekDays">
<el-checkbox v-model="checkAllWeekDay" :indeterminate="isIndeterminate" @change="handleCheckAllChange"></el-checkbox> <el-checkbox v-model="checkAllWeekDay" :indeterminate="isIndeterminate" @change="handleCheckAllChange"></el-checkbox>
<el-checkbox-group v-model="form.weekDays" @change="handleCheckedChange"> <el-checkbox-group v-model="form.weekDays" @change="handleCheckedChange">
<el-checkbox v-for="dict in weekDayOptions" :key="dict.dictValue" :label="dict.dictValue" name="weekDays">{{ dict.dictLabel }}</el-checkbox> <el-checkbox v-for="dict in weekDayOptions" :key="dict.dictValue" :label="dict.dictValue" name="weekDays">{{ dict.dictLabel }}</el-checkbox>
@ -92,9 +133,9 @@
v-model="form.startTime" v-model="form.startTime"
size="small" size="small"
:picker-options="{ :picker-options="{
start: '08:00', start: '00:00',
step: '00:01', step: '00:01',
end: '20:00' end: '23:59'
}" }"
@change="startTimeChange" @change="startTimeChange"
placeholder="选择上课时间" placeholder="选择上课时间"
@ -111,7 +152,7 @@
<el-time-select <el-time-select
v-model="form.endTime" v-model="form.endTime"
size="small" size="small"
disabled="true" :disabled="true"
placeholder="选择下课时间" placeholder="选择下课时间"
/> />
</el-form-item> </el-form-item>
@ -154,6 +195,7 @@
<script> <script>
import { selectDictLabel } from '@/utils/commonUtils' import { selectDictLabel } from '@/utils/commonUtils'
import claSelect from '@/components/sc/course/cla/claSelect' import claSelect from '@/components/sc/course/cla/claSelect'
import courseSelect from '@/components/sc/course/courseSelect'
import deptSelect from '@/components/system/dept/deptSelect' import deptSelect from '@/components/system/dept/deptSelect'
import staffSelect from '@/components/system/staff/staffSelect' import staffSelect from '@/components/system/staff/staffSelect'
import roomSelect from '@/components/sc/base/roomSelect' import roomSelect from '@/components/sc/base/roomSelect'
@ -162,11 +204,19 @@ import { addRule, getRule, updateRule } from '@/api/school/sc/cla/claTimeRule'
let that let that
export default { export default {
components: { components: {
claSelect, courseSelect,
deptSelect, deptSelect,
staffSelect, staffSelect,
roomSelect roomSelect
}, },
props: {
colorArray: {
type: Array,
default: function() {
return ['#409EFF', '#67C23A', '#E6A23C', '#F56C6C']
}
}
},
data() { data() {
return { return {
// //
@ -181,17 +231,31 @@ export default {
repeatTypeOptions: [], repeatTypeOptions: [],
// //
weekDayOptions: [], weekDayOptions: [],
// //
filterHolidayOptions: [{ fontSizeList:[
dictLabel: '过滤', {
dictValue: true label: '12px',
}, { value: 12
dictLabel: '不过滤', },
dictValue: false {
}], label: '13px',
value: 13
},
{
label: '14px',
value: 14
},
{
label: '15px',
value: 15
},
],
// //
form: { form: {
atClassCnt:20 atClassCnt:20,
claColor:'#409EFF',
fontColor:'#000000',
fontSize:12
}, },
isIndeterminate: true, isIndeterminate: true,
checkAllWeekDay: false, checkAllWeekDay: false,
@ -205,17 +269,17 @@ export default {
return time.valueOf() < moment(that.form.beginDate).valueOf() return time.valueOf() < moment(that.form.beginDate).valueOf()
} }
}, },
canChangeCla: true canChangeCourse: true
} }
}, },
computed: { computed: {
rules() { rules() {
const tempRules = { const tempRules = {
deptId: [ deptId: [
{ required: true, message: '请选择校区', trigger: 'blur' } { required: true, message: '请选择校区', trigger: 'change' }
], ],
claId: [ courseId: [
{ required: true, message: '班级不能为空', trigger: 'blur' } { required: true, message: '课程不能为空', trigger: 'change' }
], ],
ruleType: [ ruleType: [
{ required: true, message: '规则类型不能为空', trigger: 'blur' } { required: true, message: '规则类型不能为空', trigger: 'blur' }
@ -224,17 +288,14 @@ export default {
{ required: true, message: '重复方式不能为空', trigger: 'blur' } { required: true, message: '重复方式不能为空', trigger: 'blur' }
], ],
weekDays: [ weekDays: [
{ required: true, message: '上课星期不能为空', trigger: 'blur' } { required: true, message: '上课星期不能为空', trigger: 'change' }
],
filterHoliday: [
{ required: true, message: '是否过滤节假日', trigger: 'blur' }
], ],
startTime: [ startTime: [
{ required: true, message: '上课时间不能为空', trigger: 'blur' }, { required: true, message: '上课时间不能为空', trigger: 'change' },
{ {
pattern: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/, pattern: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,
message: "时间格式应为HH:mm", message: "时间格式应为HH:mm",
trigger: "blur" trigger: "change"
} }
], ],
// endTime: [ // endTime: [
@ -246,7 +307,7 @@ export default {
// } // }
// ], // ],
teacherId: [ teacherId: [
{ required: true, message: '任课教练不能为空', trigger: 'blur' } { required: true, message: '任课教练不能为空', trigger: 'change' }
], ],
claDuration: [ claDuration: [
{ {
@ -261,14 +322,14 @@ export default {
} }
if (this.form.ruleType === '1') { if (this.form.ruleType === '1') {
tempRules['beginDate'] = [ tempRules['beginDate'] = [
{ required: true, message: '开始日期不能为空', trigger: 'blur' } { required: true, message: '开始日期不能为空', trigger: 'change' }
] ]
tempRules['endDate'] = [ tempRules['endDate'] = [
{ required: true, message: '结束日期不能为空', trigger: 'blur' } { required: true, message: '结束日期不能为空', trigger: 'change' }
] ]
} else if (this.form.ruleType === '2') { } else if (this.form.ruleType === '2') {
tempRules['chooseDate'] = [ tempRules['chooseDate'] = [
{ required: true, message: '请选择上课日期', trigger: 'blur' } { required: true, message: '请选择上课日期', trigger: 'change' }
] ]
} }
return tempRules return tempRules
@ -320,12 +381,13 @@ export default {
cancel() { cancel() {
this.open = false this.open = false
this.reset() this.reset()
}, },
// //
reset() { reset() {
this.form = { this.form = {
deptId: undefined, deptId: undefined,
claId: undefined, courseId: undefined,
ruleType: '1', ruleType: '1',
beginDate: undefined, beginDate: undefined,
endDate: undefined, endDate: undefined,
@ -341,18 +403,22 @@ export default {
lessCnt:0, lessCnt:0,
atClassCnt:20, atClassCnt:20,
claDuration:0, claDuration:0,
claColor: '#409EFF',
fontColor:'#000000',
fontSize:12
} }
this.resetForm('form') this.resetForm('form')
this.canChangeCla = true
this.canChangeCourse = true
}, },
loadInfo(id) { loadInfo(id) {
this.loadingChange = true this.loadingChange = true
this.reset() this.reset()
getRule(id).then(response => { getRule(id).then(response => {
this.loadingChange = false this.loadingChange = false
const date = response.data const date = response.data
date.deptId=date.deptId+''
date.weekDays = date.weekDay?.split(',') date.weekDays = date.weekDay?.split(',')
if (date.startTime !== undefined && date.startTime.length > 5) { if (date.startTime !== undefined && date.startTime.length > 5) {
date.startTime = date.startTime.substr(0, 5) date.startTime = date.startTime.substr(0, 5)
@ -364,11 +430,14 @@ export default {
date.chooseDate = date.onceDate.split(',') date.chooseDate = date.onceDate.split(',')
} }
this.form = date this.form = date
console.log(date)
console.log(this.form)
this.open = true this.open = true
}).catch(() => { }).catch(() => {
this.loadingChange = false this.loadingChange = false
}) })
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm: function() {
@ -424,7 +493,12 @@ export default {
}, },
handleCheckedChange(value) { handleCheckedChange(value) {
const checkedCount = value.length const checkedCount = value.length
this.checkAllWeekDay = checkedCount === this.form.weekDays.length if (checkedCount<1){
this.checkAllWeekDay =false;
this.isIndeterminate =true;
return;
}
this.checkAllWeekDay = checkedCount === this.weekDayOptions.length
this.isIndeterminate = checkedCount > 0 && checkedCount < this.weekDayOptions.length this.isIndeterminate = checkedCount > 0 && checkedCount < this.weekDayOptions.length
}, },
// //

@ -87,8 +87,15 @@
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<div style="overflow-x: auto;"> <div style="overflow-x: auto;height: 700px" >
<table v-if="columnTitles.length > 0" v-loading="loading" cellspacing="0" cellpadding="0" border="0" class="cla-time-table"> <table v-if="columnTitles.length > 0"
v-loading="loading"
cellspacing="0"
cellpadding="0"
border="0"
class="cla-time-table"
>
<thead> <thead>
<tr> <tr>
<th> <th>
@ -106,9 +113,12 @@
</td> </td>
<td v-for="(claTimeArray, claTimeArrayIdx) in item.claTimeWeekDayMap" :key="claTimeArrayIdx" class="cell"> <td v-for="(claTimeArray, claTimeArrayIdx) in item.claTimeWeekDayMap" :key="claTimeArrayIdx" class="cell">
<div v-for="(claTime, claTimeIdx) in claTimeArray" :key="claTime.courseTimeId" class="cla-time-item-container"> <div v-for="(claTime, claTimeIdx) in claTimeArray" :key="claTime.courseTimeId" class="cla-time-item-container">
<div v-if="claTimeIdx < 5" class="cla-time-item success" :style="'background-color: ' + claTime.claColor + ';'"> <div v-if="claTimeIdx < 5" class="cla-time-item success" :style=
"'background-color: ' + claTime.claColor + ';'+
'color: ' + claTime.fontColor + ';'+
'font-size: ' + claTime.fontSize + 'px;'">
<div class="overflow-ellipsis">{{ claTime.startTime }} ~ {{ claTime.endTime }}</div> <div class="overflow-ellipsis">{{ claTime.startTime }} ~ {{ claTime.endTime }}</div>
<div class="overflow-ellipsis" >{{ claTime.claName }}{{ claTime.courseName }}</div> <div class="overflow-ellipsis" >{{ claTime.courseName }}</div>
<div class="overflow-ellipsis">{{ claTime.staffName }} </div> <div class="overflow-ellipsis">{{ claTime.staffName }} </div>
<div class="right-top-tag"> <div class="right-top-tag">
<div v-if="claTime.claTimeStatus === '2'" class="claTimeStatus success"><span>已上课</span></div> <div v-if="claTime.claTimeStatus === '2'" class="claTimeStatus success"><span>已上课</span></div>
@ -116,8 +126,7 @@
</div> </div>
<div class="tooltip"> <div class="tooltip">
<div class="content"> <div class="content">
<div class="title">班级{{ claTime.claName }}</div> <div class="title">{{ claTime.courseName }}</div>
<div class="item"><i class="el-icon-collection" />课程 {{ claTime.courseName }}</div>
<div class="item"><i class="el-icon-notebook-1" />日期 {{ claTime.claDate }}</div> <div class="item"><i class="el-icon-notebook-1" />日期 {{ claTime.claDate }}</div>
<div class="item"><i class="el-icon-mouse" />星期{{ claTime.weekDay }}</div> <div class="item"><i class="el-icon-mouse" />星期{{ claTime.weekDay }}</div>
<div class="item"><i class="el-icon-paperclip" />时间 {{ claTime.startTime }} ~ {{ claTime.endTime }}</div> <div class="item"><i class="el-icon-paperclip" />时间 {{ claTime.startTime }} ~ {{ claTime.endTime }}</div>
@ -149,7 +158,7 @@
<div class="cell"> <div class="cell">
<div v-for="(claTime) in moreData" :key="claTime.courseTimeId" class="cla-time-item-container"> <div v-for="(claTime) in moreData" :key="claTime.courseTimeId" class="cla-time-item-container">
<div class="cla-time-item success" :style="'background-color: ' + claTime.claColor + ';'"> <div class="cla-time-item success" :style="'background-color: ' + claTime.claColor + ';'">
<div class="overflow-ellipsis">{{ claTime.claName }}</div> <div class="overflow-ellipsis">{{ claTime.courseName }}</div>
<div class="overflow-ellipsis">{{ claTime.staffName }} {{ claTime.startTime }} ~ {{ claTime.endTime }}</div> <div class="overflow-ellipsis">{{ claTime.staffName }} {{ claTime.startTime }} ~ {{ claTime.endTime }}</div>
<div class="right-top-tag"> <div class="right-top-tag">
<div v-if="claTime.claTimeStatus === '2'" class="claTimeStatus success"><span>已上课</span></div> <div v-if="claTime.claTimeStatus === '2'" class="claTimeStatus success"><span>已上课</span></div>
@ -157,8 +166,7 @@
</div> </div>
<div class="tooltip"> <div class="tooltip">
<div class="content"> <div class="content">
<div class="title">{{ claTime.claName }}</div> <div class="title">{{ claTime.courseName }}</div>
<div class="item"><i class="el-icon-collection" />课程 {{ claTime.courseName }}</div>
<div class="item"><i class="el-icon-notebook-1" />日期 {{ claTime.claDate }}</div> <div class="item"><i class="el-icon-notebook-1" />日期 {{ claTime.claDate }}</div>
<div class="item"><i class="el-icon-mouse" />星期{{ claTime.weekDay }}</div> <div class="item"><i class="el-icon-mouse" />星期{{ claTime.weekDay }}</div>
<div class="item"><i class="el-icon-paperclip" />时间 {{ claTime.startTime }} ~ {{ claTime.endTime }}</div> <div class="item"><i class="el-icon-paperclip" />时间 {{ claTime.startTime }} ~ {{ claTime.endTime }}</div>
@ -411,7 +419,7 @@ export default {
this.loading = false this.loading = false
const claInfo = response.data.claInfo const claInfo = response.data.claInfo
this.$refs['changeTimeRule'].reset() this.$refs['changeTimeRule'].reset()
this.$refs['changeTimeRule'].canChangeCla = false this.$refs['changeTimeRule'].canChangeCourse = false
this.$refs['changeTimeRule'].form.deptId = claInfo.departId this.$refs['changeTimeRule'].form.deptId = claInfo.departId
this.$refs['changeTimeRule'].form.claId = claInfo.claId this.$refs['changeTimeRule'].form.claId = claInfo.claId
this.$refs['changeTimeRule'].open = true this.$refs['changeTimeRule'].open = true
@ -462,6 +470,7 @@ export default {
border-right: none; border-right: none;
border-bottom: none; border-bottom: none;
th { th {
border-right: 1px solid #ebeef5; border-right: 1px solid #ebeef5;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;

@ -16,9 +16,6 @@
<el-form-item label="校区:" prop="deptId"> <el-form-item label="校区:" prop="deptId">
<dept-select v-model="queryParams.deptId" /> <dept-select v-model="queryParams.deptId" />
</el-form-item> </el-form-item>
<el-form-item label="班级:" prop="claId">
<cla-select v-model="queryParams.claId" :dept-id="queryParams.deptId" clearable mounted-load-all />
</el-form-item>
<el-form-item style="float: right"> <el-form-item style="float: right">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item> </el-form-item>
@ -32,8 +29,8 @@
<span v-else-if="scope.row.status === '1'">{{ scope.row.claDate }} {{ scope.row.startTime.substr(0,5) }}~{{ scope.row.endTime.substr(0,5) }}</span> <span v-else-if="scope.row.status === '1'">{{ scope.row.claDate }} {{ scope.row.startTime.substr(0,5) }}~{{ scope.row.endTime.substr(0,5) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" width="180" prop="deptName" label="上课校区" />
<el-table-column align="center" width="180" prop="courseName" label="课程" /> <el-table-column align="center" width="180" prop="courseName" label="课程" />
<el-table-column align="center" width="180" prop="claName" label="上课班级" />
<el-table-column align="center" width="180" prop="staffName" label="上课教练" /> <el-table-column align="center" width="180" prop="staffName" label="上课教练" />
<el-table-column align="center" width="100" prop="bookAttendCnt" label="预约人数" /> <el-table-column align="center" width="100" prop="bookAttendCnt" label="预约人数" />
<el-table-column align="center" width="100" prop="realAttendCnt" label="签到人数" /> <el-table-column align="center" width="100" prop="realAttendCnt" label="签到人数" />
@ -202,7 +199,7 @@ export default {
handleClaTimeAttend(claTime) { handleClaTimeAttend(claTime) {
this.needChooseCla = false this.needChooseCla = false
this.chooseCourseTimeId = claTime.courseTimeId this.chooseCourseTimeId = claTime.courseTimeId
this.chooseClaId = claTime.claId // this.chooseClaId = claTime.claId
this.$refs.addClaTimeAttend.open = true this.$refs.addClaTimeAttend.open = true
}, },
/** 已上课编辑 */ /** 已上课编辑 */

@ -16,9 +16,6 @@
<el-form-item label="校区:" prop="deptId"> <el-form-item label="校区:" prop="deptId">
<dept-select v-model="queryParams.deptId" /> <dept-select v-model="queryParams.deptId" />
</el-form-item> </el-form-item>
<el-form-item label="班级:" prop="claId">
<cla-select v-model="queryParams.claId" :dept-id="queryParams.deptId" clearable mounted-load-all />
</el-form-item>
<el-form-item style="float: right"> <el-form-item style="float: right">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item> </el-form-item>
@ -36,7 +33,7 @@
<span>{{ scope.row.realClaDate }} {{ scope.row.realStartTime.substr(0,5) }}~{{ scope.row.realEndTime.substr(0,5) }}</span> <span>{{ scope.row.realClaDate }} {{ scope.row.realStartTime.substr(0,5) }}~{{ scope.row.realEndTime.substr(0,5) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" width="180" prop="claName" label="上课班级" /> <el-table-column align="center" width="180" prop="deptName" label="上课校区" />
<el-table-column align="center" width="180" prop="courseName" label="所属课程" /> <el-table-column align="center" width="180" prop="courseName" label="所属课程" />
<el-table-column align="center" width="180" prop="staffName" label="上课教练" /> <el-table-column align="center" width="180" prop="staffName" label="上课教练" />
<el-table-column align="center" width="180" prop="needAttendCnt" label="预约/实到"> <el-table-column align="center" width="180" prop="needAttendCnt" label="预约/实到">
@ -91,12 +88,10 @@
import { selectListForAttend } from '@/api/school/sc/cla/claTime' import { selectListForAttend } from '@/api/school/sc/cla/claTime'
import changeClaTimeAttend from '@/components/sc/claTime/changeClaTimeAttend' import changeClaTimeAttend from '@/components/sc/claTime/changeClaTimeAttend'
import deptSelect from '@/components/system/dept/deptSelect' import deptSelect from '@/components/system/dept/deptSelect'
import claSelect from '@/components/sc/course/cla/claSelect'
import moment from 'moment' import moment from 'moment'
export default { export default {
components: { components: {
deptSelect, deptSelect,
claSelect,
changeClaTimeAttend changeClaTimeAttend
}, },
data() { data() {

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<el-dialog title="新设课程" :visible.sync="open" width="700px"> <el-dialog title="新设课程" :visible.sync="open" width="900px" append-to-body @opened="onDialogOpened">
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="120px">
<div class="title top"> <div class="title top">
<div class="title-content">课程基础信息</div> <div class="title-content">课程基础信息</div>
@ -11,7 +11,7 @@
<el-input v-model="form.courseName" placeholder="请输入课程名称" /> <el-input v-model="form.courseName" placeholder="请输入课程名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="form.courseId==undefined">
<el-form-item label="课程类别:" prop="courseTypeId" > <el-form-item label="课程类别:" prop="courseTypeId" >
<div class="select-with-btn-container"> <div class="select-with-btn-container">
<el-select <el-select
@ -36,9 +36,9 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12" v-if="form.courseId==undefined">
<el-form-item label="上课校区:" prop="courseCampus" class="align-left"> <el-form-item label="上课校区:" prop="courseCampus" class="align-left">
<el-radio-group v-model="form.courseCampus" :disabled="form.courseId!=undefined"> <el-radio-group v-model="form.courseCampus" >
<el-radio <el-radio
v-for="item in courseCampus" v-for="item in courseCampus"
:key="item.id" :key="item.id"
@ -57,7 +57,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="form.courseCampus ==='部分校区'"> <el-row v-if="form.courseCampus ==='' && form.courseId==undefined" >
<el-form-item label="选择校区:" prop="partCampus" class="align-left"> <el-form-item label="选择校区:" prop="partCampus" class="align-left">
<el-checkbox-group v-model="form.partCampus" :disabled="form.courseId!=undefined"> <el-checkbox-group v-model="form.partCampus" :disabled="form.courseId!=undefined">
<el-checkbox v-for="(item) in campusOptions" :key="item.id" :label="item.id" name="partCampus">{{ item.label }}</el-checkbox> <el-checkbox v-for="(item) in campusOptions" :key="item.id" :label="item.id" name="partCampus">{{ item.label }}</el-checkbox>
@ -77,14 +77,32 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="课程简介:" prop="courseIntro"> <el-form-item label="课程难度:" prop="star" >
<el-input v-model="form.courseIntro" type="textarea" placeholder="请输入课程简介" /> <el-rate
v-model="form.star"
style="padding-top: 8px;"
:disabled="false"
:colors="['#F7BA2A', '#F7BA2A', '#F7BA2A']"
:void-color="'#C6D1DE'"
:max="5"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row >
<el-form-item label="备注:" prop="courseIntro">
<el-input v-model="form.courseIntro" type="textarea" placeholder="请输入课程简介(app不做展示)" />
</el-form-item>
</el-row>
<el-row>
<el-form-item label="课程说明app展示" prop="remark">
<div class="editor-container remark-editor">
<div ref="remarkEditor" style="width: 100%; min-height: 200px;"></div>
</div>
</el-form-item>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button :loading="loadingChange" type="primary" @click="submitForm"> </el-button> <el-button :loading="loadingChange" type="primary" @click="submitForm"> </el-button>
@ -103,6 +121,9 @@ import feeModeDate from '@/components/sc/course/feeModeDate'
import feeModeCycle from '@/components/sc/course/feeModeCycle' import feeModeCycle from '@/components/sc/course/feeModeCycle'
import addCourseType from '@/components/sc/course/type/addCourseType' import addCourseType from '@/components/sc/course/type/addCourseType'
import feeModePrepaid from '@/components/sc/course/feeModePrepaid1.vue' import feeModePrepaid from '@/components/sc/course/feeModePrepaid1.vue'
import WangEditor from "wangeditor";
import axios from "axios";
import {getToken} from "@/utils/auth";
export default { export default {
components: { components: {
@ -121,7 +142,12 @@ export default {
teachingMode: '1', teachingMode: '1',
partCampus: [], partCampus: [],
sale:'1', sale:'1',
star: 0,
courseIntro: '',
remark: ''
}, },
//
remarkEditor: null,
// //
rules: { rules: {
courseName: [ courseName: [
@ -133,14 +159,6 @@ export default {
teachingMode: [ teachingMode: [
{ required: true, message: '请选择上课模式', trigger: 'blur' } { required: true, message: '请选择上课模式', trigger: 'blur' }
], ],
// tuitionFee: [
// { required: true, message: '', trigger: 'blur' },
// {
// pattern: /^\d+(\.\d{1,2})?$/,
// message: '2',
// trigger: 'blur'
// },
// ],
claFee: [ claFee: [
{ required: true, message: '请输入教练课时费', trigger: 'blur' }, { required: true, message: '请输入教练课时费', trigger: 'blur' },
{ {
@ -151,7 +169,14 @@ export default {
], ],
courseCampus: [ courseCampus: [
{ required: true, message: '请选择上课校区', trigger: 'blur' } { required: true, message: '请选择上课校区', trigger: 'blur' }
] ],
courseIntro: [
{
pattern: /^[\s\S]{0,100}$/,
message: '最多输入100个字符',
trigger: 'blur'
},
],
}, },
// //
courseCampus: [], courseCampus: [],
@ -164,9 +189,25 @@ export default {
}, },
methods: { methods: {
init: function() { init: function() {
this.courseTypeList() this.courseTypeList()
this.campusList() this.campusList()
this.campusSelect() this.campusSelect()
//
if (this.form.remark){
this.$nextTick(() => {
setTimeout(() => {
if (this.remarkEditor ) {
const processedHtml = this.form.remark.replace(
/<img/g,
'<img style="max-width:100%;height:auto;"'
);
this.remarkEditor.txt.html(processedHtml);
}
}, 500);
});
}
}, },
submitForm: function() { submitForm: function() {
this.$refs['form'].validate(valid => { this.$refs['form'].validate(valid => {
@ -231,15 +272,58 @@ export default {
this.form = { this.form = {
courseCampus: '全部校区', courseCampus: '全部校区',
teachingMode: '1', teachingMode: '1',
partCampus: [] partCampus: [],
star: 0,
courseIntro: '',
remark: '',
claFee:0.0,
tuitionFee:0.00
} }
this.resetForm('form') this.resetForm('form')
//
if (this.remarkEditor) {
this.remarkEditor.txt.clear();
}
}, },
// //
handleAddCourseType() { handleAddCourseType() {
this.$refs.addCourseType.open = true this.$refs.addCourseType.open = true
} },
/** 对话框打开后初始化富文本编辑器 */
onDialogOpened() {
if (!this.remarkEditor) {
this.initRemarkEditor();
}
},
/** 初始化富文本编辑器 */
initRemarkEditor() {
if (this.$refs.remarkEditor) {
this.remarkEditor = new WangEditor(this.$refs.remarkEditor);
//
this.remarkEditor.config.showLinkImg = false;
//
this.remarkEditor.config.onchange = (html) => {
const processedHtml = html.replace(/<img/g, '<img style="max-width:100%;height:auto;"');
this.form.remark = processedHtml;
};
//
this.remarkEditor.config.menus = [
'head', 'bold', 'fontSize', 'foreColor', 'backColor',
'list', 'justify', 'quote', 'undo', 'redo'
];
//
this.remarkEditor.create();
} else {
setTimeout(() => this.initRemarkEditor(), 100);
}
},
} }
} }
</script> </script>
@ -283,4 +367,24 @@ export default {
padding-left: 10px; padding-left: 10px;
} }
} }
/* 富文本样式 */
.editor-container {
border: 1px solid #e6e6e6;
border-radius: 4px;
padding: 5px;
margin-bottom: 10px;
}
.remark-editor {
min-height: 200px;
}
.profile-editor {
min-height: 300px;
}
.editor-container img {
max-width: 100% !important;
height: auto !important;
}
</style> </style>

@ -118,10 +118,6 @@ export default {
}, },
mounted() { mounted() {
this.loadCla() this.loadCla()
// if (this.mountedLoadAll && this.claList.length === 0) {
// this.pageNum = 1
// this.loadCla()
// }
}, },
methods: { methods: {
loadCla: function() { loadCla: function() {

@ -21,7 +21,7 @@
</el-select> </el-select>
</template> </template>
<script> <script>
import { listCourse } from '@/api/school/sc/course' import { select } from '@/api/school/sc/course'
export default { export default {
props: { props: {
clearable: { clearable: {
@ -93,7 +93,13 @@ export default {
this.$emit('input', newValue) this.$emit('input', newValue)
}, },
immediate: true immediate: true
} },
deptId(newVal, oldVal) {
if (newVal === oldVal && newVal === undefined) {
return
}
this.loadData()
},
}, },
mounted() { mounted() {
if (this.mountedLoadAll && this.courseList.length === 0) { if (this.mountedLoadAll && this.courseList.length === 0) {
@ -103,40 +109,22 @@ export default {
}, },
methods: { methods: {
loadData: function() { loadData: function() {
if (this.pageNum === 1) {
this.courseList = [] this.courseList = []
if (this.multiple) { select({
this.courseId = [] departId: this.deptId
} else {
this.courseId = undefined
}
listCourse({
departId: this.deptId,
pageNum: this.pageNum
}).then(response => { }).then(response => {
if (response.respCode === '0000') { if (response.respCode === '0000') {
this.courseList = response.data.rows this.courseList = response.data
this.hasMoreData = response.data.rows.length > 0 const flag = this.courseList.some(item => item.courseId == this.courseId);
this.pageNum = this.pageNum + 1 console.log(flag)
if (!flag) {
this.courseId = this.multiple ? [] : undefined
}
} else { } else {
this.msgError(response.respMsg) this.msgError(response.respMsg)
} }
}) })
} else if (this.hasMoreData) {
listCourse({
departId: this.deptId,
pageNum: this.pageNum
}).then(response => {
if (response.respCode === '0000') {
this.courseList = this.courseList.concat(response.data.rows)
this.hasMoreData = response.data.rows.length > 0
this.pageNum = this.pageNum + 1
} else {
this.msgError(response.respMsg)
}
})
}
}, },
handleSelect: function(val) { handleSelect: function(val) {
this.$emit('input', val) this.$emit('input', val)

@ -33,7 +33,7 @@ export default {
}, },
data() { data() {
return { return {
title: 'yoga后台管理系统', title: '瑜伽汇后台管理系统',
logo: logoImg logo: logoImg
} }
} }

@ -1,18 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="门店图片" prop="banner">--> <el-form-item label="场馆名称" prop="storeName">
<!-- <el-input-->
<!-- v-model="queryParams.banner"-->
<!-- placeholder="请输入门店图片标识"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="门店名称" prop="storeName">
<el-input <el-input
v-model="queryParams.storeName" v-model="queryParams.storeName"
placeholder="请输入门店名称" placeholder="请输入场馆名称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -25,10 +17,10 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="门店电话" prop="phone"> <el-form-item label="场馆电话" prop="phone">
<el-input <el-input
v-model="queryParams.phone" v-model="queryParams.phone"
placeholder="请输入门店电话" placeholder="请输入场馆电话"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -39,48 +31,6 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['system:store:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['system:store:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['system:store:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['system:store:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -93,7 +43,7 @@
:cell-style="{'text-align': 'center'}" :cell-style="{'text-align': 'center'}"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="门店图片" align="center" prop="banner" width="220"> <el-table-column label="场馆图片" align="center" prop="banner" width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.banner" class="album-images"> <div v-if="scope.row.banner" class="album-images">
<el-image <el-image
@ -112,7 +62,7 @@
<span v-else class="no-image">无图片</span> <span v-else class="no-image">无图片</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="门店名称" align="center" prop="storeName" /> <el-table-column label="场馆名称" align="center" prop="storeName" />
<el-table-column label="地址" align="center" prop="address" /> <el-table-column label="地址" align="center" prop="address" />
<el-table-column label="门店电话" align="center" prop="phone" /> <el-table-column label="门店电话" align="center" prop="phone" />
<el-table-column label="创始人/店长简介" align="center" prop="founder"> <el-table-column label="创始人/店长简介" align="center" prop="founder">
@ -124,7 +74,7 @@
>查看内容</el-button> >查看内容</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="企业/门店简介" align="center" prop="profile"> <el-table-column label="企业/场馆简介" align="center" prop="profile">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
@ -133,7 +83,7 @@
>查看内容</el-button> >查看内容</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="所属校区" align="center" prop="deptName" /> <el-table-column label="对应校区" align="center" prop="deptName" />
<el-table-column label="是否展示" align="center" width="100"> <el-table-column label="是否展示" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
@ -153,13 +103,6 @@
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:store:edit']" v-hasPermi="['system:store:edit']"
>修改</el-button> >修改</el-button>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['system:store:remove']"-->
<!-- >删除</el-button>-->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -175,7 +118,7 @@
<!-- 添加或修改门店对话框 --> <!-- 添加或修改门店对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened"> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="onDialogOpened">
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="门店图片" prop="banner"> <el-form-item label="场馆图片" prop="banner">
<el-upload <el-upload
:action="uploadImgUrl" :action="uploadImgUrl"
list-type="picture-card" list-type="picture-card"
@ -193,14 +136,14 @@
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="门店名称" prop="storeName"> <el-form-item label="场馆名称" prop="storeName">
<el-input v-model="form.storeName" placeholder="请输入门店名称" /> <el-input v-model="form.storeName" placeholder="请输入校区名称(展示)" />
</el-form-item> </el-form-item>
<el-form-item label="地址" prop="address"> <el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" /> <el-input v-model="form.address" placeholder="请输入地址" />
</el-form-item> </el-form-item>
<el-form-item label="门店电话" prop="phone"> <el-form-item label="场馆电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入门店电话" /> <el-input v-model="form.phone" placeholder="请输入场馆电话" />
</el-form-item> </el-form-item>
<!-- 创始人/店长简介 - 富文本编辑器 --> <!-- 创始人/店长简介 - 富文本编辑器 -->
@ -211,7 +154,7 @@
</el-form-item> </el-form-item>
<!-- 企业/门店简介 - 富文本编辑器 --> <!-- 企业/门店简介 - 富文本编辑器 -->
<el-form-item label="企业/门店简介" prop="profile"> <el-form-item label="企业/场馆简介" prop="profile">
<div class="editor-container profile-editor"> <div class="editor-container profile-editor">
<div ref="profileEditor" style="width: 100%; min-height: 300px;"></div> <div ref="profileEditor" style="width: 100%; min-height: 300px;"></div>
</div> </div>
@ -235,7 +178,7 @@
<!-- 门店简介查看对话框 --> <!-- 门店简介查看对话框 -->
<el-dialog <el-dialog
title="企业/门店简介" title="企业/场馆简介"
:visible.sync="profileDialogVisible" :visible.sync="profileDialogVisible"
width="800px" width="800px"
:before-close="handleProfileDialogClose" :before-close="handleProfileDialogClose"
@ -312,13 +255,13 @@ export default {
// //
rules: { rules: {
storeName: [ storeName: [
{ required: true, message: "门店名称不能为空", trigger: "blur" } { required: true, message: "场馆名称不能为空", trigger: "blur" }
], ],
phone: [ phone: [
{ required: true, message: "门店电话不能为空", trigger: "blur" } { required: true, message: "场馆电话不能为空", trigger: "blur" }
], ],
address: [ address: [
{ required: true, message: "门店地址不能为空", trigger: "blur" } { required: true, message: "场馆地址不能为空", trigger: "blur" }
] ]
} }
}; };
@ -330,7 +273,7 @@ export default {
// //
handleStatusChange(row) { handleStatusChange(row) {
let text = row.display === "0" ? "不展示" : "展示"; let text = row.display === "0" ? "不展示" : "展示";
this.$modal.confirm('确认要' + text + '"' + row.storeName + '"门店吗?').then(function() { this.$modal.confirm('确认要' + text + '"' + row.storeName + '"场馆吗?').then(function() {
return updateStore({deptId:row.deptId, display:row.display}); return updateStore({deptId:row.deptId, display:row.display});
}).then(() => { }).then(() => {
this.$modal.msgSuccess(text + "成功"); this.$modal.msgSuccess(text + "成功");
@ -458,7 +401,7 @@ export default {
} }
} }
} catch (error) { } catch (error) {
console.error('门店简介图片上传错误:', error); console.error('场馆简介图片上传错误:', error);
this.$message.error('上传失败,请检查网络或联系管理员'); this.$message.error('上传失败,请检查网络或联系管理员');
} finally { } finally {
this.isUploading = false; this.isUploading = false;
@ -637,7 +580,7 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加门店"; this.title = "添加场馆";
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
@ -687,7 +630,7 @@ export default {
} }
this.open = true; this.open = true;
this.title = "修改门店"; this.title = "修改场馆";
}).catch(() => { }).catch(() => {
this.$message.error('获取数据失败'); this.$message.error('获取数据失败');
}); });
@ -710,7 +653,7 @@ export default {
const profileHtml = this.profileEditor.txt.html(); const profileHtml = this.profileEditor.txt.html();
// //
if (profileHtml.includes('<img') && profileHtml.includes('src=""')) { if (profileHtml.includes('<img') && profileHtml.includes('src=""')) {
this.$message.error('门店简介中存在无效图片,请重新上传'); this.$message.error('场馆简介中存在无效图片,请重新上传');
return; return;
} }
this.form.profile = profileHtml; this.form.profile = profileHtml;
@ -747,7 +690,7 @@ export default {
return; return;
} }
this.$modal.confirm(`是否确认删除选中的门店信息?`).then(() => { this.$modal.confirm(`是否确认删除选中的场馆信息?`).then(() => {
return delStore(deptIds); return delStore(deptIds);
}).then(() => { }).then(() => {
this.getList(); this.getList();

@ -80,17 +80,17 @@
<div class="title">快捷入口</div> <div class="title">快捷入口</div>
</div> </div>
<div class="content-container"> <div class="content-container">
<router-link to="/edu/cla"> <!-- <router-link to="/edu/cla">-->
<div class="content-item"> <!-- <div class="content-item">-->
<div class="icon"> <!-- <div class="icon">-->
<svg-icon icon-class="dashboard-cla" style="height: 33px;width: 28px;" /> <!-- <svg-icon icon-class="dashboard-cla" style="height: 33px;width: 28px;" />-->
</div> <!-- </div>-->
<div class="txt"> <!-- <div class="txt">-->
<div class="value">班级</div> <!-- <div class="value">班级</div>-->
<div class="name">班级数 <span class="cnt">{{ dashboardData.claCnt }}</span></div> <!-- <div class="name">班级数 <span class="cnt">{{ dashboardData.claCnt }}</span></div>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</router-link> <!-- </router-link>-->
<router-link to="/edu/course"> <router-link to="/edu/course">
<div class="content-item"> <div class="content-item">
<div class="icon"> <div class="icon">

@ -1,7 +1,7 @@
<template> <template>
<div class="login"> <div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">yoga-manager登录</h3> <h3 class="title">瑜伽汇登录</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
v-model="loginForm.username" v-model="loginForm.username"

@ -21,10 +21,11 @@
</ul> </ul>
<ul> <ul>
<li class="da" style="width: 50%"> <li class="da" style="width: 50%">
<router-link :to="{path:'/order/aftersale', query:{status:0}}">{{ orderAndAftersaleStatisticsObj.pendingAftersaleCount }}</router-link> <router-link to="/mall/aftersale">
{{ orderAndAftersaleStatisticsObj.pendingAftersaleCount }}</router-link>
</li> </li>
<li class="da" style="width: 50%"> <li class="da" style="width: 50%">
<router-link :to="{path:'/order/aftersale', query:{status:1}}">{{ orderAndAftersaleStatisticsObj.processingAftersaleCount }}</router-link> <router-link to="/mall/aftersale">{{ orderAndAftersaleStatisticsObj.processingAftersaleCount }}</router-link>
</li> </li>
</ul> </ul>
</el-card> </el-card>
@ -45,16 +46,16 @@
</ul> </ul>
<ul> <ul>
<li class="da"> <li class="da">
<router-link :to="{path:'/order/order',query:{status:1}}">{{ orderAndAftersaleStatisticsObj.waitDeliveredCount }}</router-link> <router-link :to="{path:'/mall/order',query:{status:1}}">{{ orderAndAftersaleStatisticsObj.waitDeliveredCount }}</router-link>
</li> </li>
<li class="da"> <li class="da">
<router-link :to="{path:'/order/order',query:{today:true}}">{{ orderAndAftersaleStatisticsObj.todayOrderCount }}</router-link> <router-link :to="{path:'/mall/order',query:{today:true}}">{{ orderAndAftersaleStatisticsObj.todayOrderCount }}</router-link>
</li> </li>
<li class="da"> <li class="da">
<router-link :to="{path:'/order/order',query:{today:true,status:1}}">{{ orderAndAftersaleStatisticsObj.todayTransactionAmount }}</router-link> <router-link :to="{path:'/mall/order',query:{today:true,status:1}}">{{ orderAndAftersaleStatisticsObj.todayTransactionAmount }}</router-link>
</li> </li>
<li class="da"> <li class="da">
<router-link :to="{path:'/order/order',query:{today:true, status: 2}}">{{ orderAndAftersaleStatisticsObj.todayHasDeliveredCount }}</router-link> <router-link :to="{path:'/mall/order',query:{today:true, status: 2}}">{{ orderAndAftersaleStatisticsObj.todayHasDeliveredCount }}</router-link>
</li> </li>
</ul> </ul>
</div> </div>

@ -36,7 +36,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-hasPermi="['pms:productCategory:list']">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="品牌" prop="brandId"> <el-form-item label="品牌" prop="brandId">
<brand-select v-model="form.brandId" @change="onBrandChange"></brand-select> <brand-select v-model="form.brandId" @change="onBrandChange"></brand-select>
@ -52,7 +52,6 @@
<el-input v-model="form.sort" placeholder="请输入排序" style="width: 20%" ></el-input> <el-input v-model="form.sort" placeholder="请输入排序" style="width: 20%" ></el-input>
<span style="color: #999; font-size: 12px; ">排序越小越靠前,排名第12的商品会展示在达人好物,排名第12的课程会展示在精品课程</span> <span style="color: #999; font-size: 12px; ">排序越小越靠前,排名第12的商品会展示在达人好物,排名第12的课程会展示在精品课程</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>

@ -1,7 +1,7 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">yoga后台管理系统</h3> <h3 class="title">瑜伽汇后台管理系统</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

@ -1,293 +0,0 @@
<template>
<div class="app-container">
<el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="收费模式 hour:课时 date:时间 cycle:期" prop="chargeType">
<el-select v-model="queryParams.chargeType" placeholder="请选择收费模式 hour:课时 date:时间 cycle:期" clearable size="small">
<el-option
v-for="dict in chargeTypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="出席状态 1:到课 2:请假 3:缺勤" prop="attendStatus">
<el-input
v-model="queryParams.attendStatus"
placeholder="请输入出席状态 1:到课 2:请假 3:缺勤"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:claTime:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:claTime:update']"
type="primary"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sc:claTime:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['::export']"
type="primary"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="chargeType" label="收费模式 hour:课时 date:时间 cycle:期" />
<el-table-column prop="attendStatus" label="出席状态 1:到课 2:请假 3:缺勤" />
<el-table-column prop="teacherGetHour" label="教练获取课时数量" />
<el-table-column prop="payHour" label="扣减课时数量" />
<el-table-column prop="memo" label="备注" />
<el-table-column width="150" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['sc:claTime:update']"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['sc:claTime:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="收费模式 hour:课时 date:时间 cycle:期:">
<el-select v-model="form.chargeType" placeholder="请选择收费模式 hour:课时 date:时间 cycle:期">
<el-option
v-for="dict in chargeTypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出席状态 1:到课 2:请假 3:缺勤:" prop="attendStatus">
<el-input v-model="form.attendStatus" placeholder="请输入出席状态 1:到课 2:请假 3:缺勤" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loadingChange" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listClaTimeAttend, getClaTimeAttend, delClaTimeAttend, addClaTimeAttend, updateClaTimeAttend } from '@/api/school/sc/cla/claTimeAttend'
export default {
name: 'ClaTime',
data() {
return {
//
loading: true,
loadingChange: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
dataList: [],
//
title: '',
//
open: false,
// hour: date: cycle:
chargeTypeOptions: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
chargeType: undefined,
attendStatus: undefined
},
//
form: {},
//
rules: {
attendStatus: [
{ required: true, message: '出席状态 1:到课 2:请假 3:缺勤不能为空', trigger: 'blur' }
]
}
}
},
created() {
this.getList()
this.getDictListByDictType('').then(response => {
this.chargeTypeOptions = response.data
})
},
methods: {
getList() {
this.loading = true
listClaTimeAttend(this.queryParams).then(response => {
this.dataList = response.data.rows
this.total = response.data.total
this.loading = false
})
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
chargeType: undefined,
attendStatus: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
this.open = true
this.title = '添加上课出勤表'
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.attendId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
getClaTimeAttend(row.attendId || this.ids).then(response => {
this.form = response.data
this.open = true
this.title = '修改上课出勤表'
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingChange = true
if (this.form.attendId !== undefined) {
updateClaTimeAttend(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
} else {
addClaTimeAttend(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.getList()
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.attendId || this.ids
this.$confirm('是否确认删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delClaTimeAttend(id)
}).then((response) => {
if (response.respCode === '0000') {
this.getList()
this.msgSuccess('删除成功')
} else {
this.msgError(response.respMsg)
}
}).catch(function() {})
}
}
}
</script>

@ -4,14 +4,11 @@
<el-form-item label="校区:" prop="deptId"> <el-form-item label="校区:" prop="deptId">
<dept-select v-model="queryParams.deptId" placeholder="选择校区" @change="handleChangeDept" /> <dept-select v-model="queryParams.deptId" placeholder="选择校区" @change="handleChangeDept" />
</el-form-item> </el-form-item>
<el-form-item label="班级:" prop="claId">
<cla-select v-model="queryParams.claId" :dept-id="queryParams.deptId" clearable placeholder="选择班级" @change="handleChangeCla" />
</el-form-item>
<el-form-item label="任课教练:" prop="teacherId"> <el-form-item label="任课教练:" prop="teacherId">
<staff-select v-model="queryParams.teacherId" clearable placeholder="选择任课教练" @change="handleChangeTeacher" /> <staff-select v-model="queryParams.teacherId" clearable placeholder="选择任课教练" @change="handleChangeTeacher" />
</el-form-item> </el-form-item>
<el-form-item v-if="activeTab === 'table'" label="上课时间:" prop="claDateArray"> <el-form-item v-if="activeTab === 'table'" label="上课日期:" prop="claDateArray">
<el-date-picker <el-date-picker
v-model="claDateArray" v-model="claDateArray"
clearable clearable
@ -70,7 +67,7 @@
:cell-style="{'text-align': 'center'}" :cell-style="{'text-align': 'center'}"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column prop="claName" label="班级" width="120" align="center" show-overflow-tooltip fixed="left" /> <el-table-column prop="deptName" label="校区" width="120" align="center" show-overflow-tooltip fixed="left" />
<el-table-column prop="courseName" label="课程" width="120" align="center" show-overflow-tooltip /> <el-table-column prop="courseName" label="课程" width="120" align="center" show-overflow-tooltip />
<el-table-column label="规则类型" align="center" prop="ruleType" width="100"> <el-table-column label="规则类型" align="center" prop="ruleType" width="100">
<template slot-scope="scope"> <template slot-scope="scope">

@ -375,7 +375,7 @@ export default {
const claInfo = response.data.claInfo const claInfo = response.data.claInfo
this.$refs['changeTimeRule'].reset() this.$refs['changeTimeRule'].reset()
this.$refs['changeTimeRule'].canChangeCla = false this.$refs['changeTimeRule'].canChangeCourse = false
this.$refs['changeTimeRule'].form.deptId = claInfo.departId this.$refs['changeTimeRule'].form.deptId = claInfo.departId
this.$refs['changeTimeRule'].form.claId = claInfo.claId this.$refs['changeTimeRule'].form.claId = claInfo.claId
this.$refs['changeTimeRule'].open = true this.$refs['changeTimeRule'].open = true

@ -121,7 +121,7 @@
:cell-style="{'text-align': 'center'}" :cell-style="{'text-align': 'center'}"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column prop="courseName" width="120" align="center" label="课程名称" /> <el-table-column prop="courseName" width="180" align="center" label="课程名称" />
<el-table-column prop="courseTypeName" align="center" label="课程类型" /> <el-table-column prop="courseTypeName" align="center" label="课程类型" />
<el-table-column prop="teachingMode" align="center" label="授课模式"> <el-table-column prop="teachingMode" align="center" label="授课模式">
<template slot-scope="scope"> <template slot-scope="scope">
@ -137,13 +137,11 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="tuitionFee" align="center" label="课程价值/节" > <el-table-column prop="tuitionFee" align="center" label="课程价值/节" >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.tuitionFee }} {{ scope.row.tuitionFee }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="claCount" align="center" label="开班数" />
<el-table-column prop="claFee" align="center" label="教练课时费/节" > <el-table-column prop="claFee" align="center" label="教练课时费/节" >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.claFee }} {{ scope.row.claFee }}
@ -161,20 +159,30 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="star" width="200" align="center" label="课程难度">
<template slot-scope="scope">
<el-rate
v-model="scope.row.star"
:disabled="true"
:colors="['#F7BA2A', '#F7BA2A', '#F7BA2A']"
:void-color="'#C6D1DE'"
:max="5"
/>
</template>
</el-table-column>
<el-table-column label="课程说明app展示"width="150" align="center" prop="remark">
<template slot-scope="scope">
<el-button
type="text"
@click="showProfileDialog(scope.row.remark)"
size="mini"
>查看内容</el-button>
</template>
</el-table-column>
<el-table-column prop="courseIntro" align="center" label="备注(不做展示)" :show-overflow-tooltip="true" />
<el-table-column prop="createTime" width="100" align="center" label="创建时间"> <el-table-column prop="createTime" width="100" align="center" label="创建时间">
<template slot-scope="scope">{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</template> <template slot-scope="scope">{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="sale" align="center" label="开售">-->
<!-- <template slot-scope="scope">-->
<!-- <el-switch-->
<!-- v-model="scope.row.sale"-->
<!-- active-value="1"-->
<!-- inactive-value="0"-->
<!-- @change="handleSaleChange(scope.row)"-->
<!-- />-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="courseIntro" align="center" label="课程简介" :show-overflow-tooltip="true" />
<el-table-column width="170" label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column width="170" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -205,7 +213,14 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
<el-dialog
title="课程说明app展示"
:visible.sync="remarkDialogVisible"
width="800px"
:before-close="handleRemarkDialogClose"
>
<div v-html="remarkDialogContent" class="content-viewer"></div>
</el-dialog>
<add-course-components ref="addCourseComponents" @success="getList" /> <add-course-components ref="addCourseComponents" @success="getList" />
<upload-import-excel ref="uploadImportExcel" title="课程批量导入" import-template-name="import_course" download-template-name="" /> <upload-import-excel ref="uploadImportExcel" title="课程批量导入" import-template-name="import_course" download-template-name="" />
</div> </div>
@ -251,6 +266,8 @@ export default {
chargeType: undefined, chargeType: undefined,
sale: '' sale: ''
}, },
remarkDialogVisible: false,
remarkDialogContent: "",
// //
courseTypeOptions: [], courseTypeOptions: [],
// //
@ -327,8 +344,9 @@ export default {
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
getCourse(row.courseId || this.ids).then(response => { getCourse(row.courseId || this.ids).then(response => {
this.$refs.addCourseComponents.init()
this.$refs.addCourseComponents.form = response.data this.$refs.addCourseComponents.form = response.data
this.$refs.addCourseComponents.init()
if (response.data.partCampus==null){ if (response.data.partCampus==null){
this.$refs.addCourseComponents.form.partCampus=[] this.$refs.addCourseComponents.form.partCampus=[]
} }
@ -359,7 +377,21 @@ export default {
that.loadingChange = false that.loadingChange = false
}) })
}, },
/** 课程说明 */
showProfileDialog(content) {
let processedContent = content || '暂无说明';
processedContent = processedContent.replace(
/<img/g,
'<img style="max-width:100%;height:auto;margin:10px auto;display:block;"'
);
this.remarkDialogContent = processedContent;
this.remarkDialogVisible = true;
},
/** 关闭课程说明对话框 */
handleRemarkDialogClose() {
this.remarkDialogContent = "";
this.remarkDialogVisible = false;
},
chargeNameByCodes(chargeNames) { chargeNameByCodes(chargeNames) {
if (chargeNames) { if (chargeNames) {
const chargeNameArray = [] const chargeNameArray = []

@ -196,7 +196,15 @@ export default {
rules: { rules: {
roomName: [ roomName: [
{ required: true, message: '教室名不能为空', trigger: 'blur' } { required: true, message: '教室名不能为空', trigger: 'blur' }
] ],
venueFee: [
{ required: true, message: '请输入场地费', trigger: 'blur' },
{
pattern: /^\d+(\.\d{1,2})?$/,
message: '请输入数字且最多保留2位小数',
trigger: 'blur'
},
],
} }
} }
}, },
@ -222,7 +230,7 @@ export default {
this.form = { this.form = {
deptId: undefined, deptId: undefined,
roomName: undefined, roomName: undefined,
venueFee: undefined, venueFee: 0.00,
memo: undefined memo: undefined
} }
this.resetForm('form') this.resetForm('form')

@ -16,14 +16,16 @@
<el-row style="padding-bottom: 10px"> <el-row style="padding-bottom: 10px">
<span style="color: #999; font-size: 12px;"> <span style="color: #999; font-size: 12px;">
* 说明佣金方案为app端提成统计提供数据依据计算结果仅供参考 * 说明佣金方案为app端提成统计提供数据依据计算结果仅供参考
<br>* 计算方式 <br>* 系统自动计算方式
1.按成交订单使用的佣金方案分组 1.按成交订单使用的佣金方案分组
2.按照方案中的比例计算某一组的提成 2.按照方案中的比例计算某一组的提成
3.所有分组的提成之和 = 最后应得提成 3.所有分组的提成之和 = 最后应得提成
<br>* 举例 <br>* 举例
课程顾问Amy本月成交了10单其中有3单使用了佣金方案A 课程顾问Amy本月成交了10单其中有3单使用了佣金方案A
如果单的销售额之和为12000元大于方案A的第一阶梯阈值8000元小于方案A的第二阶梯阈值15000元 如果这3单的销售额之和为12000元大于方案A的第一阶梯阈值8000元小于方案A的第二阶梯阈值15000元
那么这三单的提成=Amy这三单的销售额之和 方案A的第二阶梯比例8% = 120000.08 = 960 那么这三单的提成=Amy这三单的销售额之和 方案A的第二阶梯比例8% = 120000.08 = 960
以此类推将剩余7单再按照佣金方案分组分别计算提成
最后将提成结果相加就是Amy本月成交的10单总提成
</span> </span>
</el-row> </el-row>
</el-form> </el-form>

@ -1,16 +1,16 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="部门名称" prop="deptName"> <el-form-item label="校区/部门名称" prop="deptName">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
placeholder="请输入部门名称" placeholder="请输入校区/部门名称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="部门状态" clearable> <el-select v-model="queryParams.status" placeholder="状态" clearable>
<el-option <el-option
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
@ -74,6 +74,11 @@
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="入驻期限" align="center" width="200">
<template slot-scope="scope">
<span>{{ scope.row.activationDate }} ~ {{scope.row.expiryDate}}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="200"> <el-table-column label="创建时间" align="center" prop="createTime" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -112,25 +117,25 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row> <el-row>
<el-col :span="24" v-if="form.parentId !== '0'"> <el-col :span="24" v-if="form.parentId !== '0'">
<el-form-item label="上级部门" prop="parentId"> <el-form-item label="上级校区" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" /> <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级校区" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="部门名称" prop="deptName"> <el-form-item label="校区名称" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入部门名称" /> <el-input v-model="form.deptName" placeholder="请输入校区名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="form.parentId !== '0'"> <el-col :span="12">
<el-form-item label="部门类型:"> <el-form-item label="状态">
<el-radio-group v-model="form.deptType" @change="changeDeptType" > <el-radio-group v-model="form.status">
<el-radio <el-radio
v-for="dict in deptTypeOptions" v-for="dict in dict.type.sys_normal_disable"
:key="dict.deptType" :key="dict.value"
:label="dict.deptType" :label="dict.value"
>{{ dict.deptTypeName }}</el-radio> >{{dict.label}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -141,48 +146,31 @@
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="12" >
<el-row> <el-form-item label="类型:">
<el-col :span="12"> <!-- <el-radio-group v-model="form.deptType" @change="changeDeptType" disabled>-->
<el-form-item label="负责人" prop="leaderId"> <el-radio-group v-model="form.deptType" disabled>
<el-select v-model="form.leaderId" placeholder="部门负责人" @change="changeLeader" clearable> <el-radio
<el-option v-for="dict in deptTypeOptions"
v-for="dict in leaderOptions" :key="dict.deptType"
:key="dict.userId" :label="dict.deptType"
:label="dict.nickName" >{{ dict.deptTypeName }}</el-radio>
:value="dict.userId" </el-radio-group>
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="负责人" prop="leader">
<el-input v-model="form.leader" placeholder="部门负责人" maxlength="20" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" placeholder="负责人联系电话" maxlength="11" :disabled="true"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="24">
<el-form-item label="邮箱" prop="email"> <el-form-item label="入驻期限" prop="dateRange">
<el-input v-model="form.email" placeholder="负责人邮箱" maxlength="50" :disabled="true"/> <el-date-picker
</el-form-item> v-model="form.dateRange"
</el-col> style="width: 240px"
<el-col :span="12"> value-format="yyyy-MM-dd"
<el-form-item label="部门状态"> type="daterange"
<el-radio-group v-model="form.status"> range-separator="-"
<el-radio start-placeholder="开始日期"
v-for="dict in dict.type.sys_normal_disable" end-placeholder="结束日期"
:key="dict.value" ></el-date-picker>
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -229,7 +217,8 @@ export default {
// //
queryParams: { queryParams: {
deptName: undefined, deptName: undefined,
status: undefined status: undefined,
dateRange: undefined,
}, },
// //
deptTypeOptions: [{ deptTypeOptions: [{
@ -252,20 +241,9 @@ export default {
orderNum: [ orderNum: [
{ required: true, message: "显示排序不能为空", trigger: "blur" } { required: true, message: "显示排序不能为空", trigger: "blur" }
], ],
email: [ dateRange: [
{ { required: true, message: "入驻期限不能为空", trigger: "change" }
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
], ],
phone: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
} }
}; };
}, },
@ -281,22 +259,6 @@ export default {
}).catch(() => {}); }).catch(() => {});
} }
},
/****/
changeLeader(value){
if (value){
const selectedOption = this.leaderOptions.find(opt => opt.userId === value);
this.form.leader=selectedOption.nickName;
this.form.phone=selectedOption.phonenumber;
this.form.email=selectedOption.email;
}else {
this.form.leader=null;
this.form.phone=null;
this.form.email=null;
}
}, },
/** 查询部门列表 */ /** 查询部门列表 */
getList() { getList() {
@ -328,6 +290,9 @@ export default {
deptId: undefined, deptId: undefined,
parentId: undefined, parentId: undefined,
deptName: undefined, deptName: undefined,
dateRange: undefined,
activationDate: undefined,
expiryDate: undefined,
deptType:'2', deptType:'2',
orderNum: undefined, orderNum: undefined,
leader: undefined, leader: undefined,
@ -376,6 +341,9 @@ export default {
this.reset(); this.reset();
getDept(row.deptId).then(response => { getDept(row.deptId).then(response => {
this.form = response.data; this.form = response.data;
if (this.form.activationDate!=undefined && this.form.expiryDate!=null){
this.form.dateRange=[new Date(response.data.activationDate), new Date(response.data.expiryDate)]
}
this.oldType=response.data.deptType this.oldType=response.data.deptType
this.open = true; this.open = true;
this.title = "修改部门"; this.title = "修改部门";
@ -388,6 +356,8 @@ export default {
submitForm: function() { submitForm: function() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
this.form.activationDate=this.form.dateRange[0];
this.form.expiryDate= this.form.dateRange[1];
if (this.form.deptId != undefined) { if (this.form.deptId != undefined) {
updateDept(this.form).then(response => { updateDept(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");

@ -531,7 +531,7 @@ export default {
this.reset(); this.reset();
const roleId = row.roleId || this.ids const roleId = row.roleId || this.ids
const roleMenu = this.getRoleMenuTreeselect(roleId); const roleMenu = this.getRoleMenuTreeselect(roleId);
if (roleId<=108 && this.userId!==1 ){ if (roleId<=108 && this.userId!=1 ){
this.disabledFlag=true; this.disabledFlag=true;
} }
getRole(roleId).then(response => { getRole(roleId).then(response => {
@ -547,7 +547,7 @@ export default {
}) })
}); });
}); });
this.title = this.userId===1?"修改角色":"角色权限展示"; this.title = this.userId==1?"修改角色":"角色权限展示";
}); });
}, },
/** 选择角色权限范围触发 */ /** 选择角色权限范围触发 */

@ -48,21 +48,21 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <!-- <el-form-item label="状态" prop="status">-->
<el-select <!-- <el-select-->
v-model="queryParams.status" <!-- v-model="queryParams.status"-->
placeholder="员工状态" <!-- placeholder="员工状态"-->
clearable <!-- clearable-->
style="width: 240px" <!-- style="width: 240px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="dict in dict.type.sys_normal_disable" <!-- v-for="dict in dict.type.sys_normal_disable"-->
:key="dict.value" <!-- :key="dict.value"-->
:label="dict.label" <!-- :label="dict.label"-->
:value="dict.value" <!-- :value="dict.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item style="float: right" > <el-form-item style="float: right" >
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
@ -104,6 +104,7 @@
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
:disabled="scope.row.userId == '26'"
@change="handleStatusChange(scope.row)" @change="handleStatusChange(scope.row)"
></el-switch> ></el-switch>
</template> </template>
@ -120,7 +121,7 @@
width="160" width="160"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
> >
<template slot-scope="scope" v-if="scope.row.userId !== 1"> <template slot-scope="scope" v-if="!['1','26'].includes(scope.row.userId) ">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin') const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || 'yoga后台管理系统' // 网页标题 const name = process.env.VUE_APP_TITLE || '瑜伽汇后台管理系统' // 网页标题
const port = process.env.port || process.env.npm_config_port || 8099 // 端口 const port = process.env.port || process.env.npm_config_port || 8099 // 端口

Loading…
Cancel
Save