2023年4月9日 添加问卷功能
This commit is contained in:
parent
5b614ff176
commit
1702dcbe47
|
@ -50,6 +50,15 @@ const site: AppRouteModule = {
|
|||
title: '预约课程',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'qaAddPage',
|
||||
name: 'qaAddPage',
|
||||
component: () => import('/@/views/site/tingKeZuJi/page/qaAddPage.vue'),
|
||||
meta: {
|
||||
// affix: true,
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
|
||||
],
|
||||
};
|
||||
|
|
|
@ -38,7 +38,7 @@ import { defHttp } from '/@/utils/http/axios';
|
|||
|
||||
const barMultiData = reactive<any>([]);
|
||||
const queryParam = ref<any>({});
|
||||
const list = (queryParam) => defHttp.get({ url: '/kcEvaluation/kcEvaluation/getPkfglTjt', params:queryParam });
|
||||
const list = (queryParam) => defHttp.get({ url: '/qa/kcEvaluation/getPkfglTjt', params:queryParam });
|
||||
|
||||
//进入就加载
|
||||
onMounted(() => {
|
||||
|
@ -48,7 +48,7 @@ const list = (queryParam) => defHttp.get({ url: '/kcEvaluation/kcEvaluation/getP
|
|||
queryParam.value.endTime = dateFormat(new Date(), format)
|
||||
loadData()
|
||||
});
|
||||
|
||||
|
||||
function loadData(){
|
||||
barMultiData.length = 0
|
||||
list(queryParam.value).then(res=>{
|
||||
|
@ -61,9 +61,9 @@ const list = (queryParam) => defHttp.get({ url: '/kcEvaluation/kcEvaluation/getP
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
</style>
|
||||
|
|
|
@ -4,13 +4,13 @@ import { useMessage } from "/@/hooks/web/useMessage";
|
|||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/kcEvaluation/kcEvaluation/getPkmxbList',
|
||||
save='/kcEvaluation/kcEvaluation/add',
|
||||
edit='/kcEvaluation/kcEvaluation/edit',
|
||||
deleteOne = '/kcEvaluation/kcEvaluation/delete',
|
||||
deleteBatch = '/kcEvaluation/kcEvaluation/deleteBatch',
|
||||
importExcel = '/kcEvaluation/kcEvaluation/importExcel',
|
||||
exportXls = '/kcEvaluation/kcEvaluation/exportXls',
|
||||
list = '/qa/kcEvaluation/getPkmxbList',
|
||||
save='/qa/kcEvaluation/add',
|
||||
edit='/qa/kcEvaluation/edit',
|
||||
deleteOne = '/qa/kcEvaluation/delete',
|
||||
deleteBatch = '/qa/kcEvaluation/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluation/importExcel',
|
||||
exportXls = '/qa/kcEvaluation/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,13 +4,13 @@ import { useMessage } from "/@/hooks/web/useMessage";
|
|||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/kcEvaluation/kcEvaluation/getPktjbList',
|
||||
save='/kcEvaluation/kcEvaluation/add',
|
||||
edit='/kcEvaluation/kcEvaluation/edit',
|
||||
deleteOne = '/kcEvaluation/kcEvaluation/delete',
|
||||
deleteBatch = '/kcEvaluation/kcEvaluation/deleteBatch',
|
||||
importExcel = '/kcEvaluation/kcEvaluation/importExcel',
|
||||
exportXls = '/kcEvaluation/kcEvaluation/exportXls',
|
||||
list = '/qa/kcEvaluation/getPktjbList',
|
||||
save='/qa/kcEvaluation/add',
|
||||
edit='/qa/kcEvaluation/edit',
|
||||
deleteOne = '/qa/kcEvaluation/delete',
|
||||
deleteBatch = '/qa/kcEvaluation/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluation/importExcel',
|
||||
exportXls = '/qa/kcEvaluation/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -43,7 +43,7 @@ import { defHttp } from '/@/utils/http/axios';
|
|||
|
||||
const barMultiData = reactive<any>([]);
|
||||
const queryParam = ref<any>({});
|
||||
const list = (queryParam) => defHttp.get({ url: '/kcEvaluation/kcEvaluation/getPkztjTjt', params:queryParam });
|
||||
const list = (queryParam) => defHttp.get({ url: '/qa/kcEvaluation/getPkztjTjt', params:queryParam });
|
||||
|
||||
//进入就加载
|
||||
onMounted(() => {
|
||||
|
@ -68,8 +68,8 @@ const list = (queryParam) => defHttp.get({ url: '/kcEvaluation/kcEvaluation/getP
|
|||
console.log(`🚀 ~ file: tkztj.vue:67 ~ list ~ barMultiData:`, barMultiData)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from "/@/hooks/web/useMessage";
|
||||
|
||||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/qa/kcEvaluation/list',
|
||||
save='/qa/kcEvaluation/add',
|
||||
edit='/qa/kcEvaluation/edit',
|
||||
deleteOne = '/qa/kcEvaluation/delete',
|
||||
deleteBatch = '/qa/kcEvaluation/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluation/importExcel',
|
||||
exportXls = '/qa/kcEvaluation/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出api
|
||||
* @param params
|
||||
*/
|
||||
export const getExportUrl = Api.exportXls;
|
||||
|
||||
/**
|
||||
* 导入api
|
||||
*/
|
||||
export const getImportUrl = Api.importExcel;
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||
|
||||
/**
|
||||
* 删除单个
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const deleteOne = (params,handleSuccess) => {
|
||||
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const batchDelete = (params, handleSuccess) => {
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者更新
|
||||
* @param params
|
||||
* @param isUpdate
|
||||
*/
|
||||
export const saveOrUpdate = (params, isUpdate) => {
|
||||
let url = isUpdate ? Api.edit : Api.save;
|
||||
return defHttp.post({ url: url, params }, { isTransformResponse: false });
|
||||
}
|
|
@ -0,0 +1,213 @@
|
|||
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: 'upDate',
|
||||
customRender:({text}) =>{
|
||||
return !text?"":(text.length>10?text.substr(0,10):text);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '上传时间',
|
||||
align: "center",
|
||||
dataIndex: 'upTime',
|
||||
customRender:({text}) =>{
|
||||
return !text?"":(text.length>10?text.substr(0,10):text);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '答案',
|
||||
align: "center",
|
||||
dataIndex: 'answer1'
|
||||
},
|
||||
{
|
||||
title: '上传人',
|
||||
align: "center",
|
||||
dataIndex: 'upuser'
|
||||
},
|
||||
{
|
||||
title: '上传人id',
|
||||
align: "center",
|
||||
dataIndex: 'upuserid'
|
||||
},
|
||||
{
|
||||
title: '上传时间戳',
|
||||
align: "center",
|
||||
dataIndex: 'upTimestamp'
|
||||
},
|
||||
{
|
||||
title: '课程最小id',
|
||||
align: "center",
|
||||
dataIndex: 'minkcid'
|
||||
},
|
||||
{
|
||||
title: '答案2',
|
||||
align: "center",
|
||||
dataIndex: 'answer2'
|
||||
},
|
||||
{
|
||||
title: '答案3',
|
||||
align: "center",
|
||||
dataIndex: 'answer3'
|
||||
},
|
||||
{
|
||||
title: '答案4',
|
||||
align: "center",
|
||||
dataIndex: 'answer4'
|
||||
},
|
||||
{
|
||||
title: '答案5',
|
||||
align: "center",
|
||||
dataIndex: 'answer5'
|
||||
},
|
||||
{
|
||||
title: '答案6',
|
||||
align: "center",
|
||||
dataIndex: 'answer6'
|
||||
},
|
||||
{
|
||||
title: '答案7',
|
||||
align: "center",
|
||||
dataIndex: 'answer7'
|
||||
},
|
||||
{
|
||||
title: '答案8',
|
||||
align: "center",
|
||||
dataIndex: 'answer8'
|
||||
},
|
||||
{
|
||||
title: '答案9',
|
||||
align: "center",
|
||||
dataIndex: 'answer9'
|
||||
},
|
||||
{
|
||||
title: '答案10',
|
||||
align: "center",
|
||||
dataIndex: 'answer10'
|
||||
},
|
||||
{
|
||||
title: '答案11',
|
||||
align: "center",
|
||||
dataIndex: 'answer11'
|
||||
},
|
||||
{
|
||||
title: '问卷版本',
|
||||
align: "center",
|
||||
dataIndex: 'evaluationver'
|
||||
},
|
||||
];
|
||||
|
||||
//查询数据
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
];
|
||||
|
||||
//表单数据
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '上传日期',
|
||||
field: 'upDate',
|
||||
component: 'DatePicker',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入上传日期!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '上传时间',
|
||||
field: 'upTime',
|
||||
component: 'DatePicker',
|
||||
},
|
||||
{
|
||||
label: '答案',
|
||||
field: 'answer1',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '上传人',
|
||||
field: 'upuser',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '上传人id',
|
||||
field: 'upuserid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '上传时间戳',
|
||||
field: 'upTimestamp',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '课程最小id',
|
||||
field: 'minkcid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '答案2',
|
||||
field: 'answer2',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案3',
|
||||
field: 'answer3',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案4',
|
||||
field: 'answer4',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案5',
|
||||
field: 'answer5',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案6',
|
||||
field: 'answer6',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案7',
|
||||
field: 'answer7',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案8',
|
||||
field: 'answer8',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案9',
|
||||
field: 'answer9',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案10',
|
||||
field: 'answer10',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '答案11',
|
||||
field: 'answer11',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '问卷版本',
|
||||
field: 'evaluationver',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
// TODO 主键隐藏字段,目前写死为ID
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
];
|
|
@ -0,0 +1,215 @@
|
|||
<template>
|
||||
<div>
|
||||
<!--查询区域-->
|
||||
<div class="jeecg-basic-table-form-container">
|
||||
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-row :gutter="24">
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item key="1" @click="batchHandleDelete">
|
||||
<Icon icon="ant-design:delete-outlined"></Icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button>批量操作
|
||||
<Icon icon="mdi:chevron-down"></Icon>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
|
||||
</template>
|
||||
<!--字段回显插槽-->
|
||||
<template #htmlSlot="{text}">
|
||||
<div v-html="text"></div>
|
||||
</template>
|
||||
<!--省市区字段回显插槽-->
|
||||
<!--<template #pcaSlot="{text}">
|
||||
{{ getAreaTextByCode(text) }}
|
||||
</template>-->
|
||||
<template #fileSlot="{text}">
|
||||
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<KcEvaluationModal ref="registerModal" @success="handleSuccess"></KcEvaluationModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="qa-kcEvaluation" setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns } from './KcEvaluation.data';
|
||||
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './KcEvaluation.api';
|
||||
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||
import KcEvaluationModal from './components/KcEvaluationModal.vue'
|
||||
|
||||
const queryParam = ref<any>({});
|
||||
const toggleSearchStatus = ref<boolean>(false);
|
||||
const registerModal = ref();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '调查问卷-回答主表',
|
||||
api: list,
|
||||
columns,
|
||||
canResize:false,
|
||||
useSearchForm: false,
|
||||
actionColumn: {
|
||||
width: 120,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: (params) => {
|
||||
params.column = '',params.order = '';//新生成的默认不带排序
|
||||
return Object.assign(params, queryParam.value);
|
||||
},
|
||||
},
|
||||
exportConfig: {
|
||||
name: "调查问卷-回答主表",
|
||||
url: getExportUrl,
|
||||
},
|
||||
importConfig: {
|
||||
url: getImportUrl,
|
||||
success: handleSuccess
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 7 },
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 16 },
|
||||
});
|
||||
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
function handleAdd() {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.add();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑事件
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
function handleDetail(record: Recordable) {
|
||||
registerModal.value.disableSubmit = true;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
async function handleDelete(record) {
|
||||
await deleteOne({ id: record.id }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
(selectedRowKeys.value = []) && reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: handleDetail.bind(null, record),
|
||||
}, {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
queryParam.value = {};
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.jeecg-basic-table-form-container {
|
||||
.table-page-search-submitButtons {
|
||||
display: block;
|
||||
margin-bottom: 24px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.query-group-cust{
|
||||
width: calc(50% - 15px);
|
||||
min-width: 100px !important;
|
||||
}
|
||||
.query-group-split-cust{
|
||||
width: 30px;
|
||||
display: inline-block;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,72 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from "/@/hooks/web/useMessage";
|
||||
|
||||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/qa/kcEvaluationans/list',
|
||||
save='/qa/kcEvaluationans/add',
|
||||
edit='/qa/kcEvaluationans/edit',
|
||||
deleteOne = '/qa/kcEvaluationans/delete',
|
||||
deleteBatch = '/qa/kcEvaluationans/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluationans/importExcel',
|
||||
exportXls = '/qa/kcEvaluationans/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出api
|
||||
* @param params
|
||||
*/
|
||||
export const getExportUrl = Api.exportXls;
|
||||
|
||||
/**
|
||||
* 导入api
|
||||
*/
|
||||
export const getImportUrl = Api.importExcel;
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||
|
||||
/**
|
||||
* 删除单个
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const deleteOne = (params,handleSuccess) => {
|
||||
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const batchDelete = (params, handleSuccess) => {
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者更新
|
||||
* @param params
|
||||
* @param isUpdate
|
||||
*/
|
||||
export const saveOrUpdate = (params, isUpdate) => {
|
||||
let url = isUpdate ? Api.edit : Api.save;
|
||||
return defHttp.post({ url: url, params }, { isTransformResponse: false });
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
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: '问题ID',
|
||||
align: "center",
|
||||
dataIndex: 'queid'
|
||||
},
|
||||
{
|
||||
title: '内容',
|
||||
align: "center",
|
||||
dataIndex: 'content'
|
||||
},
|
||||
{
|
||||
title: '分数',
|
||||
align: "center",
|
||||
dataIndex: 'score'
|
||||
},
|
||||
{
|
||||
title: '排序',
|
||||
align: "center",
|
||||
dataIndex: 'ordernum'
|
||||
},
|
||||
{
|
||||
title: '状态 0:可用 1:停用',
|
||||
align: "center",
|
||||
dataIndex: 'status'
|
||||
},
|
||||
{
|
||||
title: '是否参与评分 0:参与 1:不参与',
|
||||
align: "center",
|
||||
dataIndex: 'inavg'
|
||||
},
|
||||
];
|
||||
|
||||
//查询数据
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
];
|
||||
|
||||
//表单数据
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '问题ID',
|
||||
field: 'queid',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入问题ID!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '内容',
|
||||
field: 'content',
|
||||
component: 'Input',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入内容!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '分数',
|
||||
field: 'score',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入分数!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '排序',
|
||||
field: 'ordernum',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入排序!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '状态 0:可用 1:停用',
|
||||
field: 'status',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入状态 0:可用 1:停用!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '是否参与评分 0:参与 1:不参与',
|
||||
field: 'inavg',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
// TODO 主键隐藏字段,目前写死为ID
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
];
|
|
@ -0,0 +1,215 @@
|
|||
<template>
|
||||
<div>
|
||||
<!--查询区域-->
|
||||
<div class="jeecg-basic-table-form-container">
|
||||
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-row :gutter="24">
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item key="1" @click="batchHandleDelete">
|
||||
<Icon icon="ant-design:delete-outlined"></Icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button>批量操作
|
||||
<Icon icon="mdi:chevron-down"></Icon>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
|
||||
</template>
|
||||
<!--字段回显插槽-->
|
||||
<template #htmlSlot="{text}">
|
||||
<div v-html="text"></div>
|
||||
</template>
|
||||
<!--省市区字段回显插槽-->
|
||||
<!--<template #pcaSlot="{text}">
|
||||
{{ getAreaTextByCode(text) }}
|
||||
</template>-->
|
||||
<template #fileSlot="{text}">
|
||||
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<KcEvaluationansModal ref="registerModal" @success="handleSuccess"></KcEvaluationansModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="qa-kcEvaluationans" setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns } from './KcEvaluationans.data';
|
||||
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './KcEvaluationans.api';
|
||||
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||
import KcEvaluationansModal from './components/KcEvaluationansModal.vue'
|
||||
|
||||
const queryParam = ref<any>({});
|
||||
const toggleSearchStatus = ref<boolean>(false);
|
||||
const registerModal = ref();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '调查问卷-答案表',
|
||||
api: list,
|
||||
columns,
|
||||
canResize:false,
|
||||
useSearchForm: false,
|
||||
actionColumn: {
|
||||
width: 120,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: (params) => {
|
||||
params.column = '',params.order = '';//新生成的默认不带排序
|
||||
return Object.assign(params, queryParam.value);
|
||||
},
|
||||
},
|
||||
exportConfig: {
|
||||
name: "调查问卷-答案表",
|
||||
url: getExportUrl,
|
||||
},
|
||||
importConfig: {
|
||||
url: getImportUrl,
|
||||
success: handleSuccess
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 7 },
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 16 },
|
||||
});
|
||||
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
function handleAdd() {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.add();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑事件
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
function handleDetail(record: Recordable) {
|
||||
registerModal.value.disableSubmit = true;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
async function handleDelete(record) {
|
||||
await deleteOne({ id: record.id }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
(selectedRowKeys.value = []) && reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: handleDetail.bind(null, record),
|
||||
}, {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
queryParam.value = {};
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.jeecg-basic-table-form-container {
|
||||
.table-page-search-submitButtons {
|
||||
display: block;
|
||||
margin-bottom: 24px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.query-group-cust{
|
||||
width: calc(50% - 15px);
|
||||
min-width: 100px !important;
|
||||
}
|
||||
.query-group-split-cust{
|
||||
width: 30px;
|
||||
display: inline-block;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,72 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from "/@/hooks/web/useMessage";
|
||||
|
||||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/qa/kcEvaluationque/list',
|
||||
save='/qa/kcEvaluationque/add',
|
||||
edit='/qa/kcEvaluationque/edit',
|
||||
deleteOne = '/qa/kcEvaluationque/delete',
|
||||
deleteBatch = '/qa/kcEvaluationque/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluationque/importExcel',
|
||||
exportXls = '/qa/kcEvaluationque/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出api
|
||||
* @param params
|
||||
*/
|
||||
export const getExportUrl = Api.exportXls;
|
||||
|
||||
/**
|
||||
* 导入api
|
||||
*/
|
||||
export const getImportUrl = Api.importExcel;
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||
|
||||
/**
|
||||
* 删除单个
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const deleteOne = (params,handleSuccess) => {
|
||||
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const batchDelete = (params, handleSuccess) => {
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者更新
|
||||
* @param params
|
||||
* @param isUpdate
|
||||
*/
|
||||
export const saveOrUpdate = (params, isUpdate) => {
|
||||
let url = isUpdate ? Api.edit : Api.save;
|
||||
return defHttp.post({ url: url, params }, { isTransformResponse: false });
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
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: 'content'
|
||||
},
|
||||
{
|
||||
title: '状态 0:可用 1:不可用',
|
||||
align: "center",
|
||||
dataIndex: 'status'
|
||||
},
|
||||
{
|
||||
title: '分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他',
|
||||
align: "center",
|
||||
dataIndex: 'genre'
|
||||
},
|
||||
{
|
||||
title: '排序',
|
||||
align: "center",
|
||||
dataIndex: 'ordernum'
|
||||
},
|
||||
{
|
||||
title: '问题形式 1:单选 2:多选 3:多行文本',
|
||||
align: "center",
|
||||
dataIndex: 'quetype'
|
||||
},
|
||||
{
|
||||
title: '是否必填 0:是 1:否',
|
||||
align: "center",
|
||||
dataIndex: 'isrequire'
|
||||
},
|
||||
{
|
||||
title: '问题版本',
|
||||
align: "center",
|
||||
dataIndex: 'evaluationver'
|
||||
},
|
||||
];
|
||||
|
||||
//查询数据
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
];
|
||||
|
||||
//表单数据
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '内容',
|
||||
field: 'content',
|
||||
component: 'Input',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入内容!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '状态 0:可用 1:不可用',
|
||||
field: 'status',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入状态 0:可用 1:不可用!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他',
|
||||
field: 'genre',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '排序',
|
||||
field: 'ordernum',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '问题形式 1:单选 2:多选 3:多行文本',
|
||||
field: 'quetype',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '是否必填 0:是 1:否',
|
||||
field: 'isrequire',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '问题版本',
|
||||
field: 'evaluationver',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
// TODO 主键隐藏字段,目前写死为ID
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
];
|
|
@ -0,0 +1,215 @@
|
|||
<template>
|
||||
<div>
|
||||
<!--查询区域-->
|
||||
<div class="jeecg-basic-table-form-container">
|
||||
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-row :gutter="24">
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item key="1" @click="batchHandleDelete">
|
||||
<Icon icon="ant-design:delete-outlined"></Icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button>批量操作
|
||||
<Icon icon="mdi:chevron-down"></Icon>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
|
||||
</template>
|
||||
<!--字段回显插槽-->
|
||||
<template #htmlSlot="{text}">
|
||||
<div v-html="text"></div>
|
||||
</template>
|
||||
<!--省市区字段回显插槽-->
|
||||
<!--<template #pcaSlot="{text}">
|
||||
{{ getAreaTextByCode(text) }}
|
||||
</template>-->
|
||||
<template #fileSlot="{text}">
|
||||
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<KcEvaluationqueModal ref="registerModal" @success="handleSuccess"></KcEvaluationqueModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="qa-kcEvaluationque" setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns } from './KcEvaluationque.data';
|
||||
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './KcEvaluationque.api';
|
||||
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||
import KcEvaluationqueModal from './components/KcEvaluationqueModal.vue'
|
||||
|
||||
const queryParam = ref<any>({});
|
||||
const toggleSearchStatus = ref<boolean>(false);
|
||||
const registerModal = ref();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '调查问卷-题目表',
|
||||
api: list,
|
||||
columns,
|
||||
canResize:false,
|
||||
useSearchForm: false,
|
||||
actionColumn: {
|
||||
width: 120,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: (params) => {
|
||||
params.column = '',params.order = '';//新生成的默认不带排序
|
||||
return Object.assign(params, queryParam.value);
|
||||
},
|
||||
},
|
||||
exportConfig: {
|
||||
name: "调查问卷-题目表",
|
||||
url: getExportUrl,
|
||||
},
|
||||
importConfig: {
|
||||
url: getImportUrl,
|
||||
success: handleSuccess
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 7 },
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 16 },
|
||||
});
|
||||
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
function handleAdd() {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.add();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑事件
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
function handleDetail(record: Recordable) {
|
||||
registerModal.value.disableSubmit = true;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
async function handleDelete(record) {
|
||||
await deleteOne({ id: record.id }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
(selectedRowKeys.value = []) && reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: handleDetail.bind(null, record),
|
||||
}, {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
queryParam.value = {};
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.jeecg-basic-table-form-container {
|
||||
.table-page-search-submitButtons {
|
||||
display: block;
|
||||
margin-bottom: 24px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.query-group-cust{
|
||||
width: calc(50% - 15px);
|
||||
min-width: 100px !important;
|
||||
}
|
||||
.query-group-split-cust{
|
||||
width: 30px;
|
||||
display: inline-block;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,72 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from "/@/hooks/web/useMessage";
|
||||
|
||||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/qa/kcEvaluations/list',
|
||||
save='/qa/kcEvaluations/add',
|
||||
edit='/qa/kcEvaluations/edit',
|
||||
deleteOne = '/qa/kcEvaluations/delete',
|
||||
deleteBatch = '/qa/kcEvaluations/deleteBatch',
|
||||
importExcel = '/qa/kcEvaluations/importExcel',
|
||||
exportXls = '/qa/kcEvaluations/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出api
|
||||
* @param params
|
||||
*/
|
||||
export const getExportUrl = Api.exportXls;
|
||||
|
||||
/**
|
||||
* 导入api
|
||||
*/
|
||||
export const getImportUrl = Api.importExcel;
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||
|
||||
/**
|
||||
* 删除单个
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const deleteOne = (params,handleSuccess) => {
|
||||
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const batchDelete = (params, handleSuccess) => {
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者更新
|
||||
* @param params
|
||||
* @param isUpdate
|
||||
*/
|
||||
export const saveOrUpdate = (params, isUpdate) => {
|
||||
let url = isUpdate ? Api.edit : Api.save;
|
||||
return defHttp.post({ url: url, params }, { isTransformResponse: false });
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
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: 'upDate',
|
||||
customRender:({text}) =>{
|
||||
return !text?"":(text.length>10?text.substr(0,10):text);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '上传时间',
|
||||
align: "center",
|
||||
dataIndex: 'upTime',
|
||||
customRender:({text}) =>{
|
||||
return !text?"":(text.length>10?text.substr(0,10):text);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '上传人',
|
||||
align: "center",
|
||||
dataIndex: 'upuser'
|
||||
},
|
||||
{
|
||||
title: '上传人id',
|
||||
align: "center",
|
||||
dataIndex: 'upuserid'
|
||||
},
|
||||
{
|
||||
title: '上传时间戳',
|
||||
align: "center",
|
||||
dataIndex: 'upTimestamp'
|
||||
},
|
||||
{
|
||||
title: '课堂表id',
|
||||
align: "center",
|
||||
dataIndex: 'ketangbiaoid'
|
||||
},
|
||||
{
|
||||
title: '问题id',
|
||||
align: "center",
|
||||
dataIndex: 'queid'
|
||||
},
|
||||
{
|
||||
title: '答案id',
|
||||
align: "center",
|
||||
dataIndex: 'ansid'
|
||||
},
|
||||
{
|
||||
title: '多行文本型答案内容',
|
||||
align: "center",
|
||||
dataIndex: 'textanscontent'
|
||||
},
|
||||
{
|
||||
title: '问卷版本',
|
||||
align: "center",
|
||||
dataIndex: 'evaluationid'
|
||||
},
|
||||
];
|
||||
|
||||
//查询数据
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
];
|
||||
|
||||
//表单数据
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '上传日期',
|
||||
field: 'upDate',
|
||||
component: 'DatePicker',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入上传日期!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '上传时间',
|
||||
field: 'upTime',
|
||||
component: 'DatePicker',
|
||||
},
|
||||
{
|
||||
label: '上传人',
|
||||
field: 'upuser',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '上传人id',
|
||||
field: 'upuserid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '上传时间戳',
|
||||
field: 'upTimestamp',
|
||||
component: 'Input',
|
||||
},
|
||||
{
|
||||
label: '课堂表id',
|
||||
field: 'ketangbiaoid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '问题id',
|
||||
field: 'queid',
|
||||
component: 'InputNumber',
|
||||
dynamicRules: ({model,schema}) => {
|
||||
return [
|
||||
{ required: true, message: '请输入问题id!'},
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '答案id',
|
||||
field: 'ansid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
{
|
||||
label: '多行文本型答案内容',
|
||||
field: 'textanscontent',
|
||||
component: 'InputTextArea',
|
||||
},
|
||||
{
|
||||
label: '问卷版本',
|
||||
field: 'evaluationid',
|
||||
component: 'InputNumber',
|
||||
},
|
||||
// TODO 主键隐藏字段,目前写死为ID
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
];
|
|
@ -0,0 +1,215 @@
|
|||
<template>
|
||||
<div>
|
||||
<!--查询区域-->
|
||||
<div class="jeecg-basic-table-form-container">
|
||||
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-row :gutter="24">
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item key="1" @click="batchHandleDelete">
|
||||
<Icon icon="ant-design:delete-outlined"></Icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button>批量操作
|
||||
<Icon icon="mdi:chevron-down"></Icon>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
|
||||
</template>
|
||||
<!--字段回显插槽-->
|
||||
<template #htmlSlot="{text}">
|
||||
<div v-html="text"></div>
|
||||
</template>
|
||||
<!--省市区字段回显插槽-->
|
||||
<!--<template #pcaSlot="{text}">
|
||||
{{ getAreaTextByCode(text) }}
|
||||
</template>-->
|
||||
<template #fileSlot="{text}">
|
||||
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<KcEvaluationsModal ref="registerModal" @success="handleSuccess"></KcEvaluationsModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="qa-kcEvaluations" setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns } from './KcEvaluations.data';
|
||||
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './KcEvaluations.api';
|
||||
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||
import KcEvaluationsModal from './components/KcEvaluationsModal.vue'
|
||||
|
||||
const queryParam = ref<any>({});
|
||||
const toggleSearchStatus = ref<boolean>(false);
|
||||
const registerModal = ref();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '调查问卷-回答子表',
|
||||
api: list,
|
||||
columns,
|
||||
canResize:false,
|
||||
useSearchForm: false,
|
||||
actionColumn: {
|
||||
width: 120,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: (params) => {
|
||||
params.column = '',params.order = '';//新生成的默认不带排序
|
||||
return Object.assign(params, queryParam.value);
|
||||
},
|
||||
},
|
||||
exportConfig: {
|
||||
name: "调查问卷-回答子表",
|
||||
url: getExportUrl,
|
||||
},
|
||||
importConfig: {
|
||||
url: getImportUrl,
|
||||
success: handleSuccess
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 7 },
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: { span: 24 },
|
||||
sm: { span: 16 },
|
||||
});
|
||||
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
function handleAdd() {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.add();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑事件
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
function handleDetail(record: Recordable) {
|
||||
registerModal.value.disableSubmit = true;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
async function handleDelete(record) {
|
||||
await deleteOne({ id: record.id }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
(selectedRowKeys.value = []) && reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '详情',
|
||||
onClick: handleDetail.bind(null, record),
|
||||
}, {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
queryParam.value = {};
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.jeecg-basic-table-form-container {
|
||||
.table-page-search-submitButtons {
|
||||
display: block;
|
||||
margin-bottom: 24px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.query-group-cust{
|
||||
width: calc(50% - 15px);
|
||||
min-width: 100px !important;
|
||||
}
|
||||
.query-group-split-cust{
|
||||
width: 30px;
|
||||
display: inline-block;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,230 @@
|
|||
<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.upDate">
|
||||
<a-date-picker placeholder="请选择上传日期" v-model:value="formData.upDate" value-format="YYYY-MM-DD" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传时间" v-bind="validateInfos.upTime">
|
||||
<a-date-picker placeholder="请选择上传时间" v-model:value="formData.upTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案" v-bind="validateInfos.answer1">
|
||||
<a-input v-model:value="formData.answer1" placeholder="请输入答案" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传人" v-bind="validateInfos.upuser">
|
||||
<a-input v-model:value="formData.upuser" placeholder="请输入上传人" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传人id" v-bind="validateInfos.upuserid">
|
||||
<a-input-number v-model:value="formData.upuserid" placeholder="请输入上传人id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传时间戳" v-bind="validateInfos.upTimestamp">
|
||||
<a-input v-model:value="formData.upTimestamp" placeholder="请输入上传时间戳" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="课程最小id" v-bind="validateInfos.minkcid">
|
||||
<a-input-number v-model:value="formData.minkcid" placeholder="请输入课程最小id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案2" v-bind="validateInfos.answer2">
|
||||
<a-input v-model:value="formData.answer2" placeholder="请输入答案2" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案3" v-bind="validateInfos.answer3">
|
||||
<a-input v-model:value="formData.answer3" placeholder="请输入答案3" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案4" v-bind="validateInfos.answer4">
|
||||
<a-input v-model:value="formData.answer4" placeholder="请输入答案4" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案5" v-bind="validateInfos.answer5">
|
||||
<a-input v-model:value="formData.answer5" placeholder="请输入答案5" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案6" v-bind="validateInfos.answer6">
|
||||
<a-input v-model:value="formData.answer6" placeholder="请输入答案6" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案7" v-bind="validateInfos.answer7">
|
||||
<a-input v-model:value="formData.answer7" placeholder="请输入答案7" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案8" v-bind="validateInfos.answer8">
|
||||
<a-input v-model:value="formData.answer8" placeholder="请输入答案8" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案9" v-bind="validateInfos.answer9">
|
||||
<a-input v-model:value="formData.answer9" placeholder="请输入答案9" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案10" v-bind="validateInfos.answer10">
|
||||
<a-input v-model:value="formData.answer10" placeholder="请输入答案10" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案11" v-bind="validateInfos.answer11">
|
||||
<a-input v-model:value="formData.answer11" placeholder="请输入答案11" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="问卷版本" v-bind="validateInfos.evaluationver">
|
||||
<a-input-number v-model:value="formData.evaluationver" placeholder="请输入问卷版本" style="width: 100%" :disabled="disabled"/>
|
||||
</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 '../KcEvaluation.api';
|
||||
import { Form } from 'ant-design-vue';
|
||||
|
||||
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: '',
|
||||
upDate: '',
|
||||
upTime: '',
|
||||
answer1: '',
|
||||
upuser: '',
|
||||
upuserid: undefined,
|
||||
upTimestamp: '',
|
||||
minkcid: undefined,
|
||||
answer2: '',
|
||||
answer3: '',
|
||||
answer4: '',
|
||||
answer5: '',
|
||||
answer6: '',
|
||||
answer7: '',
|
||||
answer8: '',
|
||||
answer9: '',
|
||||
answer10: '',
|
||||
answer11: '',
|
||||
evaluationver: undefined,
|
||||
});
|
||||
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 = {
|
||||
upDate: [{ 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() {
|
||||
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(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
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>
|
|
@ -0,0 +1,75 @@
|
|||
<template>
|
||||
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<KcEvaluationForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></KcEvaluationForm>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import KcEvaluationForm from './KcEvaluationForm.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>
|
|
@ -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">
|
||||
<a-form-item label="问题ID" v-bind="validateInfos.queid">
|
||||
<a-input-number v-model:value="formData.queid" placeholder="请输入问题ID" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="内容" v-bind="validateInfos.content">
|
||||
<a-input v-model:value="formData.content" placeholder="请输入内容" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="分数" v-bind="validateInfos.score">
|
||||
<a-input-number v-model:value="formData.score" placeholder="请输入分数" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="排序" v-bind="validateInfos.ordernum">
|
||||
<a-input-number v-model:value="formData.ordernum" placeholder="请输入排序" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="状态 0:可用 1:停用" v-bind="validateInfos.status">
|
||||
<a-input-number v-model:value="formData.status" placeholder="请输入状态 0:可用 1:停用" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="是否参与评分 0:参与 1:不参与" v-bind="validateInfos.inavg">
|
||||
<a-input-number v-model:value="formData.inavg" placeholder="请输入是否参与评分 0:参与 1:不参与" style="width: 100%" :disabled="disabled"/>
|
||||
</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 '../KcEvaluationans.api';
|
||||
import { Form } from 'ant-design-vue';
|
||||
|
||||
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: '',
|
||||
queid: undefined,
|
||||
content: '',
|
||||
score: undefined,
|
||||
ordernum: undefined,
|
||||
status: undefined,
|
||||
inavg: undefined,
|
||||
});
|
||||
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 = {
|
||||
queid: [{ required: true, message: '请输入问题ID!'},],
|
||||
content: [{ required: true, message: '请输入内容!'},],
|
||||
score: [{ required: true, message: '请输入分数!'},],
|
||||
ordernum: [{ required: true, message: '请输入排序!'},],
|
||||
status: [{ required: true, message: '请输入状态 0:可用 1:停用!'},],
|
||||
};
|
||||
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(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
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>
|
|
@ -0,0 +1,75 @@
|
|||
<template>
|
||||
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<KcEvaluationansForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></KcEvaluationansForm>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import KcEvaluationansForm from './KcEvaluationansForm.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>
|
|
@ -0,0 +1,166 @@
|
|||
<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.content">
|
||||
<a-input v-model:value="formData.content" placeholder="请输入内容" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="状态 0:可用 1:不可用" v-bind="validateInfos.status">
|
||||
<a-input-number v-model:value="formData.status" placeholder="请输入状态 0:可用 1:不可用" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他" v-bind="validateInfos.genre">
|
||||
<a-input-number v-model:value="formData.genre" placeholder="请输入分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="排序" v-bind="validateInfos.ordernum">
|
||||
<a-input-number v-model:value="formData.ordernum" placeholder="请输入排序" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="问题形式 1:单选 2:多选 3:多行文本" v-bind="validateInfos.quetype">
|
||||
<a-input-number v-model:value="formData.quetype" placeholder="请输入问题形式 1:单选 2:多选 3:多行文本" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="是否必填 0:是 1:否" v-bind="validateInfos.isrequire">
|
||||
<a-input-number v-model:value="formData.isrequire" placeholder="请输入是否必填 0:是 1:否" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="问题版本" v-bind="validateInfos.evaluationver">
|
||||
<a-input-number v-model:value="formData.evaluationver" placeholder="请输入问题版本" style="width: 100%" :disabled="disabled"/>
|
||||
</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 '../KcEvaluationque.api';
|
||||
import { Form } from 'ant-design-vue';
|
||||
|
||||
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: '',
|
||||
content: '',
|
||||
status: undefined,
|
||||
genre: undefined,
|
||||
ordernum: undefined,
|
||||
quetype: undefined,
|
||||
isrequire: undefined,
|
||||
evaluationver: undefined,
|
||||
});
|
||||
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 = {
|
||||
content: [{ required: true, message: '请输入内容!'},],
|
||||
status: [{ required: true, message: '请输入状态 0:可用 1:不可用!'},],
|
||||
genre: [{ required: true, message: '请输入分类 0:总评 1:教学准备 2:教师情况 3:学生情况 4:教学效果 5:其他!'},],
|
||||
};
|
||||
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(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
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>
|
|
@ -0,0 +1,75 @@
|
|||
<template>
|
||||
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<KcEvaluationqueForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></KcEvaluationqueForm>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import KcEvaluationqueForm from './KcEvaluationqueForm.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>
|
|
@ -0,0 +1,183 @@
|
|||
<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.upDate">
|
||||
<a-date-picker placeholder="请选择上传日期" v-model:value="formData.upDate" value-format="YYYY-MM-DD" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传时间" v-bind="validateInfos.upTime">
|
||||
<a-date-picker placeholder="请选择上传时间" v-model:value="formData.upTime" value-format="YYYY-MM-DD" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传人" v-bind="validateInfos.upuser">
|
||||
<a-input v-model:value="formData.upuser" placeholder="请输入上传人" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传人id" v-bind="validateInfos.upuserid">
|
||||
<a-input-number v-model:value="formData.upuserid" placeholder="请输入上传人id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="上传时间戳" v-bind="validateInfos.upTimestamp">
|
||||
<a-input v-model:value="formData.upTimestamp" placeholder="请输入上传时间戳" :disabled="disabled"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="课堂表id" v-bind="validateInfos.ketangbiaoid">
|
||||
<a-input-number v-model:value="formData.ketangbiaoid" placeholder="请输入课堂表id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="问题id" v-bind="validateInfos.queid">
|
||||
<a-input-number v-model:value="formData.queid" placeholder="请输入问题id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="答案id" v-bind="validateInfos.ansid">
|
||||
<a-input-number v-model:value="formData.ansid" placeholder="请输入答案id" style="width: 100%" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="多行文本型答案内容" v-bind="validateInfos.textanscontent">
|
||||
<a-textarea v-model:value="formData.textanscontent" rows="4" placeholder="请输入多行文本型答案内容" :disabled="disabled"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="问卷版本" v-bind="validateInfos.evaluationid">
|
||||
<a-input-number v-model:value="formData.evaluationid" placeholder="请输入问卷版本" style="width: 100%" :disabled="disabled"/>
|
||||
</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 '../KcEvaluations.api';
|
||||
import { Form } from 'ant-design-vue';
|
||||
|
||||
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: '',
|
||||
upDate: '',
|
||||
upTime: '',
|
||||
upuser: '',
|
||||
upuserid: undefined,
|
||||
upTimestamp: '',
|
||||
ketangbiaoid: undefined,
|
||||
queid: undefined,
|
||||
ansid: undefined,
|
||||
textanscontent: '',
|
||||
evaluationid: undefined,
|
||||
});
|
||||
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 = {
|
||||
upDate: [{ required: true, message: '请输入上传日期!'},],
|
||||
queid: [{ required: true, message: '请输入问题id!'},],
|
||||
};
|
||||
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(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
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>
|
|
@ -0,0 +1,75 @@
|
|||
<template>
|
||||
<a-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<KcEvaluationsForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></KcEvaluationsForm>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import KcEvaluationsForm from './KcEvaluationsForm.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>
|
|
@ -1,143 +1,49 @@
|
|||
<template>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-card>
|
||||
您可根据实际情况选择下面三个评价表中的一个或者两个给予评价:
|
||||
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||
<a-row>
|
||||
<a-col :span="24">
|
||||
<!-- <a-form-item label="课前15分钟提醒"> -->
|
||||
<a-checkbox-group v-model:value="formData.kqtx">
|
||||
<a-checkbox value="1"/>
|
||||
</a-checkbox-group>
|
||||
课前15分钟提醒
|
||||
<!-- <j-checkbox type="checkbox" v-model:value="formData.kqtx" dictCode="skzc" placeholder="请选择开课周次"/> -->
|
||||
<!-- </a-form-item> -->
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<!-- <a-form-item label="每天下午4点提醒明日课程"> -->
|
||||
<a-checkbox-group v-model:value="formData.mrkctx">
|
||||
<a-checkbox value="1"/>
|
||||
</a-checkbox-group>
|
||||
每天下午4点提醒明日课程
|
||||
<!-- <j-checkbox type="checkbox" v-model:value="formData.mrkctx" dictCode="skzc" placeholder="请选择开课周次"/> -->
|
||||
<!-- </a-form-item> -->
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</a-card>
|
||||
</a-spin>
|
||||
<a-card>
|
||||
您可根据实际情况选择下面三个评价表中的一个或者两个给予评价:
|
||||
<div class="p15">
|
||||
<a-row>
|
||||
<a-col :span="8">
|
||||
<a-button type="primary"><RouterLink target='_blank' :to="{path:'/site/qaAddPage',query:{ type: 4, ktId }}">线上课题评价表</RouterLink></a-button>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-button type="primary"><RouterLink target='_blank' :to="{path:'/site/qaAddPage',query:{ type: 3, ktId }}">听课记录表</RouterLink></a-button>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-button type="primary"><RouterLink target='_blank' :to="{path:'/site/qaAddPage',query:{ type: 2, ktId }}">同行评价表</RouterLink></a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<p>
|
||||
说明:
|
||||
</p>
|
||||
<p>
|
||||
1.线上课堂评价表:是根据线上课堂的特点研制的,如果您听的是线上课堂,请您填写该评价表;如果您同时是该课程所属学科的专家/教师,也欢迎您同时填写《同行评价表》。
|
||||
</p>
|
||||
<p>
|
||||
2.听课记录表:是方便行政人员和非该课程所属学科的教师听课使用的评价表,主要用来反映课堂教学的整体情况。
|
||||
</p>
|
||||
<p>
|
||||
3.同行评价表:是专门为该课程方面的专家/教师听课研制的评价表,更能反映该课堂的教学质量。
|
||||
</p>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, watch } from 'vue';
|
||||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
// import JCheckbox from "/@/components/Form/src/jeecg/components/JCheckbox.vue";
|
||||
import { getValueType } from '/@/utils';
|
||||
import { Form } from 'ant-design-vue';
|
||||
import { ref, defineExpose } from 'vue';
|
||||
|
||||
import { getUserId } from '/@/views/site/utils/index';
|
||||
|
||||
const formRef = ref();
|
||||
const useForm = Form.useForm;
|
||||
const emit = defineEmits(['register', 'ok']);
|
||||
const formData = reactive<Record<string, any>>({
|
||||
userid: '',
|
||||
kqtx: '',
|
||||
mrkctx: '',
|
||||
});
|
||||
|
||||
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 });
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function add() {
|
||||
edit({});
|
||||
}
|
||||
let ktId = ref('');
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
function edit( record ) {
|
||||
nextTick(() => {
|
||||
resetFields();
|
||||
//查询数据
|
||||
let recordData = {};
|
||||
let params = { userid: getUserId(), pageSize: 1 };//没有ID,用list查吧,,
|
||||
defHttp.get({ url: '/kcKechengtixingdingyue/kcKechengtixingdingyue/list', params }).then(res => {
|
||||
recordData = ((res?.records) ?? [])[0]
|
||||
// recordData = {} //DEBUG
|
||||
Object.assign(formData, recordData);
|
||||
})
|
||||
//赋值
|
||||
});
|
||||
function view( ...data ) {
|
||||
let record = data[0]??{};
|
||||
ktId.value = record.ketangbiaoid
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 提交数据
|
||||
*/
|
||||
async function submitForm() {
|
||||
// 触发表单验证
|
||||
await validate();
|
||||
confirmLoading.value = true;
|
||||
const isUpdate = ref<boolean>(false);
|
||||
//时间格式化
|
||||
// let model = Object.assign({},formData);
|
||||
let model = formData;
|
||||
|
||||
if (model.userid) {
|
||||
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.kqtx = model.kqtx || 0;
|
||||
model.mrkctx = model.mrkctx || 0;
|
||||
let url = '';
|
||||
if(isUpdate.value){
|
||||
url = '/kcKechengtixingdingyue/kcKechengtixingdingyue/edit';
|
||||
}else{
|
||||
url = '/kcKechengtixingdingyue/kcKechengtixingdingyue/add';
|
||||
//新增补充用户ID
|
||||
model.userid = getUserId();
|
||||
}
|
||||
|
||||
await defHttp.post({ url: url, params: model }, { isTransformResponse: false }).then((res) => {
|
||||
if (res.success) {
|
||||
createMessage.success(res.message);
|
||||
emit('ok');
|
||||
} else {
|
||||
createMessage.warning(res.message);
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
confirmLoading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
defineExpose({
|
||||
add,
|
||||
edit,
|
||||
submitForm,
|
||||
view,
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -147,4 +53,7 @@
|
|||
overflow-y: auto;
|
||||
padding: 24px 24px 24px 24px;
|
||||
}
|
||||
.p15 {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -25,21 +25,11 @@
|
|||
/**
|
||||
* 新增
|
||||
*/
|
||||
function add() {
|
||||
function view(...data) {
|
||||
visible.value = true;
|
||||
disableSubmit.value = true;
|
||||
nextTick(() => {
|
||||
registerForm.value.add();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param record
|
||||
*/
|
||||
function edit(record) {
|
||||
visible.value = true;
|
||||
nextTick(() => {
|
||||
registerForm.value.edit(record);
|
||||
registerForm.value.view(...data);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -65,8 +55,7 @@
|
|||
}
|
||||
|
||||
defineExpose({
|
||||
add,
|
||||
edit,
|
||||
view,
|
||||
disableSubmit,
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
<template>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-card>
|
||||
<a-table :data-source="list" :pagination="false" bordered size="middle" :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)" class="ant-table-striped">
|
||||
<a-table-column title="题号" key="index" data-index="index">
|
||||
<template #default="{ index }">
|
||||
{{ index + 1 }}
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="问题" key="content" data-index="content"/>
|
||||
<a-table-column title="选项" key="list" data-index="list">
|
||||
<template #default="{ text: ansList, record }">
|
||||
<template v-if="record.quetype != 3">
|
||||
<div v-for="(ans,ansIndex) in ansList" :key="ansIndex">{{ ans.content }}</div>
|
||||
</template>
|
||||
<template v-else-if="record.quetype ==3">
|
||||
-
|
||||
</template>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="评价" key="seleckedList" data-index="seleckedList">
|
||||
<template #default="{ text: seleckedList,record }">
|
||||
<div v-for="(selecked,seleckedIndex) in seleckedList" :key="seleckedIndex">
|
||||
<template v-if="record.quetype != 3">
|
||||
{{ getAns(selecked)?.content }}
|
||||
</template>
|
||||
<template v-else-if="record.quetype = 3">
|
||||
{{ selecked.textanscontent }}
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="赋分" key="score" data-index="score">
|
||||
<template #default="{ record }">
|
||||
<template v-if="record.quetype != 3">
|
||||
{{ calcSum(record.seleckedList,'score') }}
|
||||
</template>
|
||||
<!-- <div v-for="(selecked,seleckedIndex) in record.seleckedList" :key="seleckedIndex">{{ getAns(selecked).score }}</div> -->
|
||||
</template>
|
||||
</a-table-column>
|
||||
</a-table>
|
||||
</a-card>
|
||||
</a-spin>
|
||||
</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 { defHttp } from '/@/utils/http/axios';
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { getUserId } from '/@/views/site/utils';
|
||||
|
||||
enum Api {
|
||||
queryResData = '/qa/kcEvaluation/queryByParam',
|
||||
que = '//qa/kcEvaluationque/list',
|
||||
ans = '/qa/kcEvaluationans/list',
|
||||
}
|
||||
|
||||
const form = ref<any>({});
|
||||
const list = ref<any>([]);
|
||||
const ansvMap = ref<any>({});
|
||||
const selectedMap = ref<any>({});
|
||||
|
||||
const confirmLoading = ref<boolean>(false);
|
||||
const { createMessage } = useMessage();
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
function view(record){
|
||||
console.log(route.query);
|
||||
|
||||
let params = { pageSize: -1, status: 0 }
|
||||
//回答记录
|
||||
let queryData = defHttp.get({ url: Api.queryResData, params: { userid: record.userid, minkcid: record.ketangbiaoid, evaluationver: record.evaluationver} });
|
||||
//题目
|
||||
let queryQue = defHttp.get({ url: Api.que, params: { ...params, evaluationver: record.evaluationver } });
|
||||
//答案列表
|
||||
let queryAns = defHttp.get({ url: Api.ans, params });
|
||||
Promise.all([queryData,queryQue,queryAns]).then(([resData, resQue, resAns]) => {
|
||||
console.log('resData =>',resData);
|
||||
|
||||
let dataList = resData?.ansList ?? [];
|
||||
let queList = resQue?.records;
|
||||
let ansList = resAns?.records;
|
||||
let queMap = {},ansMap = {}, dataMap = {};
|
||||
dataList.forEach(x => {
|
||||
let list = dataMap[x.queid];
|
||||
if(!list){
|
||||
list = [];
|
||||
dataMap[x.queid] = list;
|
||||
}
|
||||
list.push(x);
|
||||
})
|
||||
queList.forEach(x => {
|
||||
x.seleckedList = [];
|
||||
queMap[x.id] = x;
|
||||
|
||||
x.seleckedList = dataMap[x.id];
|
||||
selectedMap.value[x.id] = '';
|
||||
});
|
||||
ansList.forEach(x => {
|
||||
let data = queMap[x.queid];
|
||||
ansMap[x.id] = x;
|
||||
if(data){
|
||||
let list = data.list;
|
||||
if(!list){
|
||||
list = [];
|
||||
queMap[x.queid].list = list;
|
||||
}
|
||||
|
||||
list.push(x);
|
||||
}
|
||||
});
|
||||
list.value = queList;
|
||||
ansvMap.value = ansMap;
|
||||
});
|
||||
}
|
||||
|
||||
function getAns(selecked){
|
||||
if(!selecked || !ansvMap.value) return {};
|
||||
return ansvMap.value[selecked.ansid]??{};
|
||||
}
|
||||
|
||||
function calcSum(list,key) {
|
||||
let sum = 0;
|
||||
list.forEach(x => {
|
||||
let num = getAns(x)[key];
|
||||
if(num){
|
||||
sum += Number(num);
|
||||
}
|
||||
});
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
||||
defineExpose({
|
||||
view,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.antd-modal-form {
|
||||
// min-height: 500px !important;
|
||||
overflow-y: auto;
|
||||
padding: 24px 24px 24px 24px;
|
||||
}
|
||||
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,87 @@
|
|||
<template>
|
||||
<div class="renKeJiaoChengBase">
|
||||
<a-modal :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" :getContainer="getPDom" cancelText="关闭">
|
||||
<template #title>
|
||||
<div style="text-align: center;">{{ form.kcmc }}-{{ form.skjs }}-星期{{ form.WEEK }}-{{ form.hh }}节</div>
|
||||
</template>
|
||||
<KcKetangbiaoForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"/>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import KcKetangbiaoForm from './viewForm.vue'
|
||||
|
||||
const width = ref<number>(1200);
|
||||
const visible = ref<boolean>(false);
|
||||
const disableSubmit = ref<boolean>(false);
|
||||
const registerForm = ref();
|
||||
const form = ref();
|
||||
|
||||
function getPDom() {
|
||||
return document.querySelector('.renKeJiaoChengBase')
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function view(record) {
|
||||
visible.value = true;
|
||||
disableSubmit.value = true;
|
||||
form.value = record;
|
||||
nextTick(() => {
|
||||
registerForm.value.view(record);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定按钮点击事件
|
||||
*/
|
||||
function handleOk() {
|
||||
registerForm.value.submitForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* form保存回调事件
|
||||
*/
|
||||
function submitCallback() {
|
||||
handleCancel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消按钮回调事件
|
||||
*/
|
||||
function handleCancel() {
|
||||
visible.value = false;
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
view,
|
||||
disableSubmit,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
/**隐藏样式-modal确定按钮 */
|
||||
|
||||
// .renKeJiaoChengBaseModal :deep(.ant-modal-content) {
|
||||
// text-align: center;
|
||||
// background: red;
|
||||
// }
|
||||
.renKeJiaoChengBase {
|
||||
.jee-hidden {
|
||||
display: none !important;
|
||||
}
|
||||
// background: orange;
|
||||
|
||||
:deep(.ant-modal-content) {
|
||||
// background: green;
|
||||
.ant-modal-footer {
|
||||
text-align: center;
|
||||
// background: red;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
|
@ -10,8 +10,9 @@
|
|||
</div>
|
||||
</template>
|
||||
<template #description>
|
||||
<span v-if="item.score" style="color: #337ab7;">已评分:{{ item.score }}分</span>
|
||||
<span v-else style="color: #337ab7;"><FormOutlined/>填写评价</span>
|
||||
<!-- -{{ item }}- -->
|
||||
<span v-if="item.score" style="color: #337ab7;" @click="viewModal.view(item)">已评分:{{ item.score }}分</span>
|
||||
<span v-else style="color: #337ab7;" @click="tingKeZuJiAddModal.view(item)"><FormOutlined/>填写评价</span>
|
||||
</template>
|
||||
<template #avatar>
|
||||
<div class="wenZiJuZhong">
|
||||
|
@ -24,18 +25,24 @@
|
|||
</a-list-item>
|
||||
</template>
|
||||
</a-list>
|
||||
|
||||
<addModalPage ref="tingKeZuJiAddModal"/>
|
||||
<viewModalPage ref="viewModal"/>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { TeamOutlined, FormOutlined } from '@ant-design/icons-vue';
|
||||
import { getUserId } from '/@/views/site/utils/index';
|
||||
|
||||
import addModalPage from '/@/views/site/tingKeZuJi/components/addModal.vue';
|
||||
import viewModalPage from '/@/views/site/tingKeZuJi/components/viewModal.vue';
|
||||
import { defHttp } from '/@/utils/http/axios';
|
||||
enum Api {
|
||||
list = '/kcTingke/kcTingke/findTingKeZuJiBytingketimeAndUserId'
|
||||
}
|
||||
|
||||
const tingKeZuJiAddModal = ref();
|
||||
const viewModal = ref();
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
|
|
|
@ -0,0 +1,290 @@
|
|||
<template>
|
||||
<div id="siteMain">
|
||||
<div id="maxSite">
|
||||
<a-layout>
|
||||
<!-- 页头 -->
|
||||
<headerPage/>
|
||||
<!-- 主体部分 -->
|
||||
<a-layout-content>
|
||||
<a-card>
|
||||
<template #title>
|
||||
<div style="text-align: center; font-size: 24px;font-weight: bold;">
|
||||
<!-- 听课足迹{{ $route.query.ktId }}-{{ $route.query.type }} -->
|
||||
<span v-if="$route.query.type == '4'">东北师范大学本科课堂教学质量评价表(同行专家用)</span>
|
||||
<span v-else-if="$route.query.type == '3'">东北师范大学听课记录表</span>
|
||||
<span v-else-if="$route.query.type == '2'">线上教学课堂看课、听课评价表</span>
|
||||
</div>
|
||||
<div style="text-align: center; font-size: 16px;font-weight: bold;font-weight: 400;line-height: 1;color: #777;">
|
||||
<!-- 学院名,课程名,授课教师 -->
|
||||
{{ form.kcmc }}-{{ form.kkdw }}-{{ form.skjs }}
|
||||
<!-- kcmc,kkdw,skjs -->
|
||||
</div>
|
||||
</template>
|
||||
<div style="text-align: center;font-size: 1rem;font-weight: 700;margin: 1rem;">
|
||||
<span v-if="$route.query.type == '4'">该评价表是专门为该课程方面的专家/教师听课研制的评价表,更能反映该课堂的教学质量。</span>
|
||||
<span v-else-if="$route.query.type == '3'">东北师范大学听课记录表</span>
|
||||
<span v-else-if="$route.query.type == '2'">线上教学课堂看课、听课评价表</span>
|
||||
</div>
|
||||
<div style="padding: 0 15rem;font-weight: 700;">
|
||||
<a-row :gutter="[16,16]">
|
||||
<a-col :span="24" v-for="(item,index) in list" :key="index">
|
||||
<template v-if="item.isrequire != 0"><span style="color:red;">*</span></template>
|
||||
{{ index + 1 }}.{{ item.content }}
|
||||
<a-row>
|
||||
<template v-if="item.quetype == 3">
|
||||
<a-col :span="24">
|
||||
<a-textarea v-model:value="selectedMap[item.id]"></a-textarea>
|
||||
</a-col>
|
||||
</template>
|
||||
<template v-else-if="item.quetype == 1">
|
||||
<a-radio-group v-model:value="selectedMap[item.id]">
|
||||
<a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
|
||||
<a-radio :value="ans.id">
|
||||
({{ ansIndex + 1 }}){{ ans.content }}
|
||||
</a-radio>
|
||||
</a-col>
|
||||
</a-radio-group>
|
||||
</template>
|
||||
<template v-else-if="item.quetype == 2">
|
||||
<a-checkbox-group v-model:value="selectedMap[item.id]">
|
||||
<a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
|
||||
<a-checkbox :value="ans.id">
|
||||
({{ ansIndex + 1 }}){{ ans.content }}
|
||||
</a-checkbox>
|
||||
</a-col>
|
||||
</a-checkbox-group>
|
||||
</template>
|
||||
|
||||
<!-- <a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
|
||||
<template v-if="item.quetype == 1">
|
||||
单选
|
||||
</template>
|
||||
<template v-if="item.quetype == 2">
|
||||
多选
|
||||
</template>
|
||||
({{ ansIndex + 1 }}){{ ans.content }}
|
||||
</a-col> -->
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div style="text-align: center;padding-top: 1rem;">
|
||||
<a-button type="primary" @click="save" :loading="confirmLoading">提交</a-button>
|
||||
</div>
|
||||
<!-- <div>
|
||||
{{ selectedMap }}
|
||||
</div> -->
|
||||
<!--<div style="border:#777;">
|
||||
{{ list }}
|
||||
</div> -->
|
||||
</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 { defHttp } from '/@/utils/http/axios';
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { getUserId } from '/@/views/site/utils';
|
||||
// const queryParam = ref<any>({ startDate: '2023-02-19', endDate: '2023-02-19', pj: '' });
|
||||
|
||||
enum Api {
|
||||
queryById = '/ktgl/kcKetangbiao/queryById',
|
||||
que = '//qa/kcEvaluationque/list',
|
||||
ans = '/qa/kcEvaluationans/list',
|
||||
save = '/qa/kcEvaluation/addQaAll',
|
||||
}
|
||||
|
||||
const form = ref<any>({});
|
||||
const list = ref<any>([]);
|
||||
const selectedMap = ref<any>({});
|
||||
|
||||
const confirmLoading = ref<boolean>(false);
|
||||
const { createMessage } = useMessage();
|
||||
|
||||
const route = useRoute();
|
||||
onMounted(() => {
|
||||
console.log(route.query );
|
||||
let params = { pageSize: -1, status: 0 }
|
||||
let queryQue = defHttp.get({ url: Api.que, params: { ...params, evaluationver: route.query.type } });
|
||||
let queryAns = defHttp.get({ url: Api.ans, params });
|
||||
|
||||
Promise.all([queryQue,queryAns]).then(([resQue, resAns]) => {
|
||||
let queList = resQue?.records;
|
||||
let ansList = resAns?.records;
|
||||
let queMap = {}
|
||||
queList.forEach(x => {
|
||||
// x.list = [];
|
||||
queMap[x.id] = x;
|
||||
selectedMap.value[x.id] = '';
|
||||
});
|
||||
ansList.forEach(x => {
|
||||
let data = queMap[x.queid];
|
||||
if(data){
|
||||
let list = data.list;
|
||||
if(!list){
|
||||
list = [];
|
||||
queMap[x.queid].list = list;
|
||||
}
|
||||
list.push(x);
|
||||
}
|
||||
});
|
||||
list.value = queList;
|
||||
});
|
||||
defHttp.get({ url: Api.queryById, params: { id: route.query.ktId } }).then(res => {
|
||||
form.value = res;
|
||||
});
|
||||
});
|
||||
|
||||
function genAns(x,data,isArray): Array<Object> {
|
||||
let textanscontent,ansid,queid,upuserid,ketangbiaoid;
|
||||
if(isArray){
|
||||
let rList = Array<Object>();
|
||||
data.forEach(x2 => {
|
||||
rList.push(...genAns(x,x2,false))
|
||||
})
|
||||
return rList;
|
||||
}else{
|
||||
queid = x.id;
|
||||
ansid = data;
|
||||
if(x.quetype == 3){
|
||||
textanscontent = data;
|
||||
ansid = 0;
|
||||
}
|
||||
upuserid = getUserId();
|
||||
ketangbiaoid = route.query.ktId;
|
||||
return [{ textanscontent,ansid,queid,upuserid,ketangbiaoid }];
|
||||
}
|
||||
}
|
||||
|
||||
function save() {
|
||||
confirmLoading.value = true;
|
||||
console.log('selectedMap ->',selectedMap);
|
||||
let $selectedMap = Object.assign({},selectedMap.value);
|
||||
let formData = {
|
||||
evaluationver: route.query.type,
|
||||
upuserid: getUserId(),
|
||||
minkcid: route.query.ktId,
|
||||
ansList: Array<Object>()
|
||||
};
|
||||
//验证
|
||||
let errorMsg = '';
|
||||
list.value.forEach(x => {
|
||||
if(x.isrequire != 0){
|
||||
let data = $selectedMap[x.id];
|
||||
if(data){
|
||||
if(Array.isArray(data)){
|
||||
if(!data.length){
|
||||
errorMsg = '有必填选项未填写,请检查后重新提交。';
|
||||
}else{
|
||||
formData.ansList.push(...genAns(x,data,true))
|
||||
}
|
||||
}else{
|
||||
formData.ansList.push(...genAns(x,data,false))
|
||||
}
|
||||
}else{
|
||||
errorMsg = '有必填选项未填写,请检查后重新提交。'+x.id+'-'+x.content + data;
|
||||
}
|
||||
}else{
|
||||
//非必填收集数据
|
||||
let data = $selectedMap[x.id];
|
||||
if(data){
|
||||
if(Array.isArray(data)){
|
||||
if(data.length){
|
||||
formData.ansList.push(...genAns(x,data,true))
|
||||
}
|
||||
}else{
|
||||
formData.ansList.push(...genAns(x,data,false))
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
if(errorMsg){
|
||||
confirmLoading.value = false
|
||||
createMessage.warning(errorMsg);
|
||||
return;
|
||||
}
|
||||
console.log('formData =>',formData);
|
||||
//保存
|
||||
defHttp.post({ url: Api.save, params: formData }, { isTransformResponse: false })
|
||||
.then((res) => {
|
||||
if (res.success) {
|
||||
createMessage.success(res.message);
|
||||
// emit('ok');
|
||||
} else {
|
||||
createMessage.warning(res.message);
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
confirmLoading.value = false;
|
||||
});
|
||||
|
||||
|
||||
// setTimeout(() => {
|
||||
// confirmLoading.value = false
|
||||
// },5000)
|
||||
|
||||
}
|
||||
|
||||
|
||||
</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>
|
Loading…
Reference in New Issue