修改bug

This commit is contained in:
yangjun 2023-08-13 12:20:45 +08:00
parent 6659371f74
commit 91e275c30c
20 changed files with 1289 additions and 45 deletions

View File

@ -59,6 +59,15 @@ const site: AppRouteModule = {
title: '评价结果',
},
},
{
path: 'ktsbMore',
name: 'ktsbMore',
component: () => import('/@/views/site/ktsb/more.vue'),
meta: {
// affix: true,
title: '评价结果',
},
},
{
path: 'yuyuekechengMore',
name: 'yuyuekechengMore',

View File

@ -0,0 +1,233 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '报错时间',
align: "center",
dataIndex: 'reportstime'
},
{
title: '报错人姓名',
align: "center",
dataIndex: 'username'
},
{
title: '报错课程',
align: "center",
dataIndex: 'kcmc'
},
{
title: '开课单位',
align: "center",
dataIndex: 'kkdw'
},
{
title: '上课日期',
align: "center",
dataIndex: 'skrq'
},
{
title: '上课节次',
align: "center",
dataIndex: 'hh'
},
{
title: '错误类型',
align: "center",
dataIndex: 'meetingpsw'
},
{
title: '错误信息',
align: "center",
dataIndex: 'errortext'
},
];
export const kcxxcolumns: BasicColumn[] = [
{
title: '报错时间',
align: "center",
dataIndex: 'reportstime'
},
{
title: '报错人工号',
align: "center",
dataIndex: 'userid'
},
{
title: '报错人姓名',
align: "center",
dataIndex: 'username'
},
{
title: '报错人单位',
align: "center",
dataIndex: 'college'
},
{
title: '报错课程',
align: "center",
dataIndex: 'kcmc'
},
{
title: '开课单位',
align: "center",
dataIndex: 'kkdw'
},
{
title: '上课日期',
align: "center",
dataIndex: 'skrq'
},
{
title: '上课节次',
align: "center",
dataIndex: 'hh'
},
{
title: '错误信息描述',
align: "center",
dataIndex: 'errortext'
},
{
title: '修改方式',
align: "center",
dataIndex: 'edittype_dictText'
},
];
export const jscjcolumns: BasicColumn[] = [
{
title: '报错时间',
align: "center",
dataIndex: 'reportstime'
},
{
title: '报错人工号',
align: "center",
dataIndex: 'userid'
},
{
title: '报错人姓名',
align: "center",
dataIndex: 'username'
},
{
title: '报错人单位',
align: "center",
dataIndex: 'college'
},
{
title: '报错课程',
align: "center",
dataIndex: 'kcmc'
},
{
title: '开课单位',
align: "center",
dataIndex: 'kkdw'
},
{
title: '上课日期',
align: "center",
dataIndex: 'skrq'
},
{
title: '上课节次',
align: "center",
dataIndex: 'hh'
},
{
title: '要求是否出镜',
align: "center",
dataIndex: 'ktbsfcj_dictText'
},
{
title: '当前是否出镜',
align: "center",
dataIndex: 'sfcj_dictText'
},
{
title: '修改方式',
align: "center",
dataIndex: 'edittype_dictText'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '错误类型',
field: 'optionsradios',
component: 'JDictSelectTag',
componentProps:{
dictCode: "optionsradios"
},
dynamicRules: ({model,schema}) => {
return [
{ required: true, message: '请输入错误类型!'},
];
},
},
{
label: '会议号',
field: 'meetingnum',
component: 'Input',
},
{
label: '会议密码',
field: 'meetingpsw',
component: 'Input',
},
{
label: '会议邀请链接',
field: 'meetinglink',
component: 'Input',
},
{
label: '修改类型0-本堂课修改1-',
field: 'edittype',
component: 'JDictSelectTag',
componentProps:{
dictCode: "edittype"
},
dynamicRules: ({model,schema}) => {
return [
{ required: true, message: '请输入修改类型0-本堂课修改1-!'},
];
},
},
{
label: '是否修改0-未修改1-已修改',
field: 'ismodified',
component: 'InputNumber',
},
{
label: '课程的上课日期',
field: 'skrq',
component: 'Input',
},
{
label: '是否出镜0-出镜1-不出镜',
field: 'sfcj',
component: 'InputNumber',
},
// TODO 主键隐藏字段目前写死为ID
{
label: '',
field: 'id',
component: 'Input',
show: false,
},
];

View File

@ -18,7 +18,7 @@
import { ref, reactive,defineExpose, createVNode,h } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns } from './KcErrorreport.data';
import { columns } from './KcZbErrorreport.data';
import { list } from './KcErrorreport.api';
import { Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined,CheckOutlined } from '@ant-design/icons-vue';

View File

@ -0,0 +1,154 @@
<template>
<a-spin :spinning="confirmLoading">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" style="font-weight: 600;">
<a-row>
<a-col :span="24">
<a-form-item label="错误类型" v-bind="validateInfos.meetingpsw">
<j-dict-select-tag type='radio' v-model:value="formData.meetingpsw" dictCode="meetingpsw" placeholder="请选择错误类型" :disabled="disabled"/>
</a-form-item>
</a-col>
<a-col :span="24" v-show="formData.optionsradios=='errokcxx'">
<a-form-item label="错误信息描述" v-bind="validateInfos.errortext">
<a-textarea v-model:value="formData.errortext" placeholder="请输入错误信息描述" style="height: 100px;" :disabled="disabled"></a-textarea>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from '../KcErrorreport.api';
import { Form } from 'ant-design-vue';
import { getUserId } from '/@/views/site/utils/index';
//
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: ()=>{} },
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
optionsradios: 'errohyhmm',
meetingnum: '',
meetingpsw: '',
meetinglink: '',
edittype: '0',
ismodified: undefined,
skrq: '',
sfcj: '0',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = {
optionsradios: [{ required: true, message: '请输入错误类型!'},],
edittype: [{ required: true, message: '请输入修改类型!'},],
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add(record) {
console.log(`🚀 ~ file: KcErrorreportIndexForm.vue:114 ~ add ~ record:`, record)
var param = {kechengbiaoid:record.kechengbiaoid,userid:getUserId()}
edit(param);
}
/**
* 编辑
*/
function edit(record) {
console.log(`🚀 ~ file: KcErrorreportIndexForm.vue:107 ~ edit ~ record:`, record)
nextTick(() => {
resetFields();
//
Object.assign(formData, record);
console.log(`🚀 ~ file: KcErrorreportIndexForm.vue:112 ~ nextTick ~ formData:`, formData)
});
}
/**
* 提交数据
*/
async function submitForm() {
//
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
model.subper = userStore?.getUserInfo?.realname
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 500px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
</style>

View File

@ -0,0 +1,78 @@
<template>
<a-modal :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<template #title>
<div style="text-align: center;font-size: 22px;">{{title}}</div>
</template>
<KcErrorreportForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></KcErrorreportForm>
</a-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import KcErrorreportForm from './KcErrorreportIndexZbForm.vue'
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add(record) {
title.value = '错误报告提交';
visible.value = true;
nextTick(() => {
registerForm.value.add(record);
});
}
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style>
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>

View File

@ -5,12 +5,13 @@
<div class="divTitle">
当前学期
</div>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-form ref="formRef" class="antd-modal-form1" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="6">
<a-form-item label="本学期名称" v-bind="validateInfos.flag1">
<!-- <a-input v-model:value="formData.flag1" placeholder="请输入本学期名称" ></a-input> -->
<JDictSelectTag type="list" v-model:value="formData.flag1" dictCode="xnxq" placeholder="请选择" :dropdownStyle="{'z-index':'1000'}" />
<JDictSelectTag type="list" v-model:value="formData.flag1" dictCode="xnxq" placeholder="请选择" :dropdownStyle="{zIndex:'99000'}" />
</a-form-item>
</a-col>
<a-col :span="6">

View File

@ -6,7 +6,7 @@
<headerPage/>
<!-- 主体部分 -->
<a-layout-content>
<div style="width:100%;height: 100%;margin-top: 1rem;" v-if="!isError">
<div style="width:100%;height: 100%;margin-top: 1rem;" v-if="isError">
<a-row :gutter="[16,16]">
<a-col :xs="{ span: 24 }" :sm="{ span: 19 }" :lg="{ span: 19 }">
<div>
@ -27,7 +27,8 @@
<a-textarea style="width: calc(100% - 7rem);height:120px;float: left;" v-model:value="model.notes" placeholder="您可以填写听课笔记"></a-textarea>
<div style="width: 7rem;height: 100%;float: right;">
<a-button type="primary" style="width: 7rem;height: 100%;" @click="openAllSuiBi">查看听课笔记</a-button>
<a-button type="primary" style="width: 7rem;height: 100%;margin-top: 1rem;" @click="saveSuibi">保存听课笔记</a-button>
<a-button type="primary" style="width: 7rem;height: 100%;margin-top: 10px;" @click="saveSuibi">保存听课笔记</a-button>
<a-button type="primary" style="width: 7rem;height: 100%;margin-top: 10px;" @click="handleBaocuo(ktangInfo)">报错</a-button>
</div>
</div>
</div>
@ -72,6 +73,7 @@
</a-layout>
</div>
</div>
<KcErrorreportIndexModal ref="kcErrorreportIndexModal"></KcErrorreportIndexModal>
<addModalPage ref="tingKeZuJiAddModal"/>
<a-modal title="查看听课笔记" width="800px" :visible="tkbjVisible" :okButtonProps="{ class: { 'jee-hidden': true } }" @cancel="() => tkbjVisible = false" cancelText="关闭">
<div style="white-space:normal; word-break:break-all;overflow:hidden;">
@ -93,9 +95,11 @@ import addModalPage from '/@/views/site/tingKeZuJi/components/addModal.vue';
import { nextTick } from 'vue';
import { useRoute } from 'vue-router'
import { getUserId } from '/@/views/site/utils/index';
import KcErrorreportIndexModal from '/@/views/kc/kcErrorreport/components/KcErrorreportIndexZbModal.vue'
const mainVideo = ref<any>();
const bVideoRefs = ref<any>([]);
const kcErrorreportIndexModal = ref();
const tingKeZuJiAddModal = ref<any>({});
const curentPlayerVideo = ref<any>({});
@ -149,6 +153,10 @@ onMounted(() => {
}
});
function handleBaocuo(item) {
kcErrorreportIndexModal.value.disableSubmit = false;
kcErrorreportIndexModal.value.add(item);
}
/**
* 子页加载完成后回调
* @param player

View File

@ -45,6 +45,7 @@ import { getUserId } from '/@/views/site/utils/index';
const queryParam = ref<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
@ -57,7 +58,6 @@ import { getUserId } from '/@/views/site/utils/index';
immediate: false,
beforeFetch: (params) => {
params.column = '',params.order = '';//
return Object.assign(params, queryParam.value);
},
},
@ -65,10 +65,10 @@ import { getUserId } from '/@/views/site/utils/index';
name: "听课笔记",
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
const labelCol = reactive({

View File

@ -0,0 +1,75 @@
<template>
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<ktsbDetialForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ktsbDetialForm>
</a-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import ktsbDetialForm from './ktsbDetialForm.vue'
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add() {
title.value = '新增';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
}
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style>
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>

View File

@ -0,0 +1,162 @@
<template>
<a-spin :spinning="confirmLoading">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="24" v-if="formData.sbType == '1'">
<a-form-item label="标题" v-bind="validateInfos.title">
{{formData.title}}
</a-form-item>
</a-col>
<a-col :span="24" v-if="formData.sbType == '0'">
<a-form-item label="课程名称" v-bind="validateInfos.kcmc">
{{formData.kcmc}}
</a-form-item>
</a-col>
<a-col :span="24" v-if="formData.sbType == '0'">
<a-form-item label="上课日期" v-bind="validateInfos.skrq">
{{formData.skrq}}
</a-form-item>
</a-col>
<a-col :span="24" v-if="formData.sbType == '0'">
<a-form-item label="授课教师" v-bind="validateInfos.skjs">
{{formData.skjs}}
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="笔记类型" v-bind="validateInfos.sbType">
{{formData.sbType=='0'?'课堂笔记':'个人笔记'}}
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="记录时间" v-bind="validateInfos.createTime">
{{formData.createTime}}
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="笔记内容" v-bind="validateInfos.notes" style="height: 200px;">
{{formData.notes}}
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from '../KtbjInfoList.api';
import { Form } from 'ant-design-vue';
import { getUserId } from '/@/views/site/utils/index';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: ()=>{} },
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
title: '',
notes: '',
sbType: '1',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = {
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
//
Object.assign(formData, record);
});
}
/**
* 提交数据
*/
async function submitForm() {
//
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
model.createBy = getUserId();
model.userId = getUserId();
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 500px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
</style>

View File

@ -0,0 +1,137 @@
<template>
<a-spin :spinning="confirmLoading">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="24">
<a-form-item label="标题" v-bind="validateInfos.title">
<a-input v-model:value="formData.title" placeholder="请输入标题" :disabled="disabled"></a-input>
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="笔记内容" v-bind="validateInfos.notes" style="height: 200px;">
<a-textarea v-model:value="formData.notes" :auto-size="{ minRows: 5, maxRows: 8 }"></a-textarea>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from '../KtbjInfoList.api';
import { Form } from 'ant-design-vue';
import { getUserId } from '/@/views/site/utils/index';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: ()=>{} },
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
title: '',
notes: '',
sbType: '1',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = {
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
//
Object.assign(formData, record);
});
}
/**
* 提交数据
*/
async function submitForm() {
//
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
model.createBy = getUserId();
model.userId = getUserId();
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 500px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
</style>

View File

@ -0,0 +1,75 @@
<template>
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<ktsbForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ktsbForm>
</a-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import ktsbForm from './ktsbForm.vue'
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add() {
title.value = '新增';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
}
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style>
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>

View File

@ -2,9 +2,14 @@
<a-card class="rowGutter" id="ktsbDom">
<template #title>
<span class="titleName">听课笔记</span>
<span style="float:right;">
<a style="padding-right: 0.5rem;" @click="addTkbj()">新增笔记</a>
<RouterLink to="/site/ktsbMore">查看更多</RouterLink>
</span>
</template>
<ktsbPage />
<ktsbModalPage ref="ktsbAddModalPage"/>
</a-card>
</template>
@ -13,11 +18,13 @@ import { defHttp } from '/@/utils/http/axios';
import { ref, onMounted } from 'vue';
import { getSysConfig } from '/@/views/site/utils/index';
import ktsbPage from '/@/views/site/ktsb/ktsbList.vue'
import ktsbModalPage from '/@/views/site/ktsb/components/ktsbModal.vue'
const zzskTitle = ref('正在上课');
const queryParam = ref<any>({});
const ktsbAddModalPage = ref();
const jclist = (queryParam) => defHttp.get({ url: '/kcJieci/kcJieci/getIndexJcList', params:queryParam });
//
onMounted(() => {
@ -41,6 +48,9 @@ onMounted(() => {
})
});
function addTkbj(){
ktsbAddModalPage.value.add()
}
</script>
<style lang="less" scoped>

View File

@ -3,10 +3,10 @@
<a-row class="rowGutter" :gutter="[16, 16]">
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 6 }" v-for="(item, index) in listData"
:key="index" style="margin-bottom: 40px;">
<div style="border: 2px #eef1f2 solid;">
<div style="border: 2px #eef1f2 solid;" v-if="item.sbType == '0'">
<div>
<div style="width: 100%;height: 20px;background-color: #1c84c6;"></div>
<div style="width:100%;white-space:normal; word-break:break-all;overflow:hidden;padding: 10px;height: 70px;font-weight: 600;font-size: 16px;">
<div style="width:100%;white-space:normal; word-break:break-all;overflow:hidden;padding: 10px;height: 65px;font-weight: 600;font-size: 16px;">
{{ item.kcmc }}
</div>
</div>
@ -44,36 +44,74 @@
</a-row>
</div>
</div>
<div style="border: 2px #eef1f2 solid;" v-else>
<div>
<div style="width: 100%;height: 20px;background-color: #1c84c6;"></div>
<div style="width:100%;white-space:normal; word-break:break-all;overflow:hidden;padding: 10px;height: 65px;font-weight: 600;font-size: 16px;" :title="item.title">
{{ item.title }}
</div>
</div>
<a-divider style="margin: 0px;color: #eef1f2;" />
<div style="padding: 20px;font-weight: 600;">
<a-row>
<a-col :span="24">
<div style="height: 38px;font-size: 16px;font-weight: 700;">笔记类型个人笔记</div>
</a-col>
<a-col :span="24">
<div style="height: 130px;font-weight: 700;margin-bottom: 14px;" class="notesClass" :title="item.notes">
笔记内容{{ item.notes }}
</div>
</a-col>
<a-col :span="24" style="text-align: center;">
<div >
<a-button type="primary" class="bcClass" @click="tingkebiji(item)">听课笔记</a-button>
</div>
</a-col>
</a-row>
</div>
</div>
</a-col>
</a-row>
<!-- 报错列表 -->
<KtbjInfoListModal ref="KtbjInfoListModalPage"></KtbjInfoListModal>
<ktsbDetailModal ref="ktsbDetailModalPage"></ktsbDetailModal>
</div>
</template>
<script lang="ts" setup>
import { ref,onMounted } from 'vue';
import { ref,onMounted ,defineExpose} from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { getUserId } from '/@/views/site/utils/index';
import KtbjInfoListModal from '/@/views/site/ktsb/KtbjInfoListModal.vue';
import ktsbDetailModal from '/@/views/site/ktsb/components/ktsbDetailModal.vue';
let listData = ref<any>([]);
const list = (params) => defHttp.get({ url: '/ktgl/kcKetangbiao/getKtbjList', params });
const KtbjInfoListModalPage = ref();
const list = (params) => defHttp.get({ url: '/ktgl/kcKetangbiao/getKtsbMorelist', params });
const ktsbDetailModalPage = ref();
onMounted(() => {
let userid = getUserId();
list({ userid: userid}).then(res => {
listData.value = res
})
// let userid = getUserId();
// list({ userid: userid}).then(res => {
// listData.value = res
// })
onSearch({});
})
function onSearch(queryParam){
let userid = getUserId();
list({ userid: userid,startTime:queryParam.startTime,endTime:queryParam.endTime,pageSize:4}).then(res => {
console.log(`🚀 ~ file: ktsbList.vue:99 ~ list ~ res:`, res)
listData.value = res.records
})
}
function tingkebiji(record){
KtbjInfoListModalPage.value.disableSubmit = true;
KtbjInfoListModalPage.value.edit(record);
ktsbDetailModalPage.value.disableSubmit = true;
ktsbDetailModalPage.value.edit(record);
}
defineExpose({
onSearch
});
</script>
<style lang="less" scoped>
@ -86,4 +124,12 @@ function tingkebiji(record){
.bcClass{
background-color: #1c84c6;font-weight: 600;border-radius: 5px;line-height: 23px;
}
.notesClass{
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>

View File

@ -0,0 +1,135 @@
<template>
<div>
<a-row class="rowGutter" :gutter="[16, 16]">
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 6 }" v-for="(item, index) in listData"
:key="index" style="margin-bottom: 40px;">
<div style="border: 2px #eef1f2 solid;" v-if="item.sbType == '0'">
<div>
<div style="width: 100%;height: 20px;background-color: #1c84c6;"></div>
<div style="width:100%;white-space:normal; word-break:break-all;overflow:hidden;padding: 10px;height: 65px;font-weight: 600;font-size: 16px;">
{{ item.kcmc }}
</div>
</div>
<a-divider style="margin: 0px;color: #eef1f2;" />
<div style="padding: 20px;font-weight: 600;">
<a-row>
<a-col :span="16">
<div style="height: 38px;font-size: 16px;font-weight: 700;">{{ item.skjs }}</div>
<div style="font-size: 14px;font-weight: 700;height: 50px;">{{ item.kkdw }}</div>
</a-col>
<a-col :span="8" style="text-align: center;height: 70px;">
<div style="color: #1c84c6;font-size: 24px;font-weight: 600;">{{ item.xkrs }}</div>
<div style="font-size: 14px;font-weight: 700;">选课人数</div>
</a-col>
<a-col :span="24" style="margin-top:0px;font-weight: 700;">
<div>
<span>{{ item.hh }}</span>
</div>
</a-col>
<a-col :span="24">
<div style="width:100%;text-align: center;font-weight: 700;">
线下上课地点
</div>
</a-col>
<a-col :span="24">
<div style="height: 50px;font-weight: 700;">
{{ item.skdd }}
</div>
</a-col>
<a-col :span="24" style="text-align: center;">
<div >
<a-button type="primary" class="bcClass" @click="tingkebiji(item)">听课笔记</a-button>
</div>
</a-col>
</a-row>
</div>
</div>
<div style="border: 2px #eef1f2 solid;" v-else>
<div>
<div style="width: 100%;height: 20px;background-color: #1c84c6;"></div>
<div style="width:100%;white-space:normal; word-break:break-all;overflow:hidden;padding: 10px;height: 65px;font-weight: 600;font-size: 16px;" :title="item.title">
{{ item.title }}
</div>
</div>
<a-divider style="margin: 0px;color: #eef1f2;" />
<div style="padding: 20px;font-weight: 600;">
<a-row>
<a-col :span="24">
<div style="height: 38px;font-size: 16px;font-weight: 700;">笔记类型个人笔记</div>
</a-col>
<a-col :span="24">
<div style="height: 130px;font-weight: 700;margin-bottom: 14px;" class="notesClass" :title="item.notes">
笔记内容{{ item.notes }}
</div>
</a-col>
<a-col :span="24" style="text-align: center;">
<div >
<a-button type="primary" class="bcClass" @click="tingkebiji(item)">听课笔记</a-button>
</div>
</a-col>
</a-row>
</div>
</div>
</a-col>
</a-row>
<!-- 报错列表 -->
<ktsbDetailModal ref="ktsbDetailModalPage"></ktsbDetailModal>
</div>
</template>
<script lang="ts" setup>
import { ref,onMounted ,defineExpose} from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { getUserId } from '/@/views/site/utils/index';
import ktsbDetailModal from '/@/views/site/ktsb/components/ktsbDetailModal.vue';
let listData = ref<any>([]);
const list = (params) => defHttp.get({ url: '/ktgl/kcKetangbiao/getKtsbMorelist', params });
const ktsbDetailModalPage = ref();
onMounted(() => {
// let userid = getUserId();
// list({ userid: userid}).then(res => {
// listData.value = res
// })
onSearch({});
})
function onSearch(queryParam){
let userid = getUserId();
list({ userid: userid,startTime:queryParam.startTime,endTime:queryParam.endTime,pageSize:12}).then(res => {
console.log(`🚀 ~ file: ktsbList.vue:99 ~ list ~ res:`, res)
listData.value = res.records
})
}
function tingkebiji(record){
ktsbDetailModalPage.value.disableSubmit = true;
ktsbDetailModalPage.value.edit(record);
}
defineExpose({
onSearch
});
</script>
<style lang="less" scoped>
.yyyClass{
background: #6cafda;font-weight: 600;color:#fff;border-radius: 5px;line-height: 23px;
}
.yyClass{
background-color: #1c84c6;font-weight: 600;color:#fff;border-radius: 5px;line-height: 23px;
}
.bcClass{
background-color: #1c84c6;font-weight: 600;border-radius: 5px;line-height: 23px;
}
.notesClass{
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>

View File

@ -0,0 +1,120 @@
<template>
<div id="siteMain">
<div id="maxSite">
<a-layout>
<!-- 页头 -->
<headerPage/>
<!-- 主体部分 -->
<a-layout-content>
<a-card style="min-height: calc(100vh - 68px * 2);">
<div style="font-size: 24px;font-weight: bold;height: 70px;">听课笔记
<span>{{getSysConfig().flag1}} {{dateFormat(getSysConfig().bxqkssj, 'MM月dd日')}} {{dateFormat(getSysConfig().bxqjssj, 'MM月dd日')}}</span>
</div>
<a-row :gutter="[16,16]">
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 4 }">
<a-date-picker placeholder="请选择开始日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" v-model:value="queryParam.startTime" style="width: 100%" />
</a-col>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 4 }">
<a-date-picker placeholder="请选择结束日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" v-model:value="queryParam.endTime" style="width: 100%" />
</a-col>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 4 }">
<a-button type="primary" @click="onSearch" >查询</a-button>
</a-col>
</a-row>
<a-divider class="divider"/>
<a-row>
<a-col :span="24">
<listPage ref="listRef" :queryParam="queryParam" flagPage @change-param="changeParam"/>
</a-col>
</a-row>
</a-card>
</a-layout-content>
<!-- 页尾 -->
<footerPage/>
</a-layout>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, watch, onMounted } from 'vue';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import listPage from '/@/views/site/ktsb/ktsbMoreList.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getSysConfig } from '/@/views/site/utils/index';
import { dateFormat } from '/@/utils/common/compUtils';
const queryParam = ref<any>({ pj: '', pageSize: 10,pageNo:1 });
//
onMounted(() => {
queryParam.value.xnxq = getSysConfig().flag1
// const format = 'yyyy-MM-dd';
// queryParam.value.endDate = dateFormat(new Date(), format)
onSearch()
});
const listRef = ref();
function onSearch(){
listRef.value.onSearch(queryParam.value);
}
function changeParam(pageNo){
queryParam.value.pageNo = pageNo;
onSearch();
}
</script>
<style lang="less" scoped>
#siteMain {
// font-size: ;
// height: 100%;
background: #f3f3f4;
#maxSite {
//
max-width: 1170px;
//
margin: 0 auto;
.rowGutter{
margin-top: 1rem;
margin-bottom: 1rem;
}
.ant-layout-header {
color: #fff;
background: #1ab394;
}
.ant-layout-footer {
line-height: 1.5;
background: #FFF;
}
.ant-layout-sider {
color: #fff;
line-height: 120px;
background: #3ba0e9;
}
.ant-layout-content {
min-height: 120px;
color: #000;
line-height: 120px;
background: #f3f3f4;
}
.dictBox :deep(.ant-select) {
width: 100%;
}
}
}
/**暗黑模式特殊配色*/
[data-theme='dark'] #siteMain #maxSite {
.ant-layout-header, .ant-layout-footer {
background: #6aa0c7;
}
.ant-layout-content {
background: #107bcb;
}
.ant-layout-sider {
background: #3499ec;
}
}
</style>

View File

@ -56,13 +56,17 @@
</a-col>
</a-row>
</div>
<!-- 报错列表 -->
<KcErrorreportIndexModalPage ref="kcErrorreportIndexModal"></KcErrorreportIndexModalPage>
</div>
</template>
<script lang="ts" setup>
import { ref,watch,reactive,defineExpose,onMounted,computed } from 'vue';
import dayjs from 'dayjs';
import KcErrorreportIndexModalPage from '/@/views/kc/kcErrorreport/components/KcErrorreportIndexModal.vue'
const kcErrorreportIndexModal = ref();
const props = defineProps({
data: { type: Object },
});
@ -89,6 +93,13 @@ function isNow(item){
}
}
/**
* 报错事件
*/
function handleBaocuo(item) {
kcErrorreportIndexModal.value.disableSubmit = false;
kcErrorreportIndexModal.value.add(item);
}
</script>

View File

@ -39,8 +39,6 @@
</div> -->
</a-col>
</a-row>
<!-- 报错列表 -->
<KcErrorreportIndexModal ref="kcErrorreportIndexModal"></KcErrorreportIndexModal>
<addModalPage ref="tingKeZuJiAddModal"/>
</template>
@ -48,7 +46,6 @@
import { ref,watch,reactive,defineExpose,onMounted, createVNode,h } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import KcErrorreportIndexModal from '/@/views/kc/kcErrorreport/components/KcErrorreportIndexModal.vue'
import { addTingKeLog, getUserId } from '/@/views/site/utils/index';
import addModalPage from '/@/views/site/tingKeZuJi/components/addModal.vue';
import itemPage from './itemPage.vue';
@ -60,7 +57,6 @@ import { CloseOutlined } from '@ant-design/icons-vue';
//
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
const kcErrorreportIndexModal = ref();
const tingKeZuJiAddModal = ref();
const route = useRouter();
@ -97,14 +93,15 @@ function loadData(num?) {
pageNo.value = 1
listData.value = [];
}
queryParam.value.pageSize = '4'
queryParam.value.pageNo = pageNo
queryParam.value.sfyzhjs = '1'
queryParam.value.hh = queryParam.value.jieci+","+queryParam.value.jieci.split("、").join(',')
queryParam.value.skrq = queryParam.value.ywTime
queryParam.value.userid = getUserId()
queryParam.value.skxs = 1
queryParam.value.type = 1
// queryParam.value.pageSize = '4'
// queryParam.value.pageNo = pageNo
// queryParam.value.sfyzhjs = '1'
// queryParam.value.hh = queryParam.value.jieci+","+queryParam.value.jieci.split("").join(',')
// queryParam.value.skrq = queryParam.value.ywTime
// queryParam.value.userid = getUserId()
// queryParam.value.skxs = 1
// queryParam.value.type = 1
queryParam.value.ywskxs = ''
console.log(`🚀 ~ file: index.vue:112 ~ rkbLoadData ~ newRow:`, queryParam)
if(queryParam.value.hh!=","){
@ -147,13 +144,6 @@ listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => {
});
}
/**
* 报错事件
*/
function handleBaocuo(item) {
kcErrorreportIndexModal.value.disableSubmit = false;
kcErrorreportIndexModal.value.add(item);
}
/**

View File

@ -1,6 +1,6 @@
<template>
<!-- <a-list item-layout="horizontal" :data-source="list" :grid="{ gutter: 16, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: 3, xxxl: 2 }"> -->
<a-list item-layout="horizontal" :data-source="list" :loading="loadingList" style="min-height: 105px;">
<a-list item-layout="horizontal" :data-source="list" :loading="loadingList" style="height: 105px;">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta>

View File

@ -1,7 +1,7 @@
<template>
<!-- <a-list item-layout="horizontal" :data-source="list" :grid="{ gutter: 16, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: 3, xxxl: 2 }"> -->
<div>
<a-list item-layout="horizontal" :data-source="list" :loading="loadingList" style="min-height: 105px;" >
<a-list item-layout="horizontal" :data-source="list" :loading="loadingList" style="height: 105px;" >
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta>