2023年5月4日 新增表

This commit is contained in:
bai 2023-05-04 23:51:10 +08:00
parent e2bbf87914
commit b4a6a5d61c
14 changed files with 875 additions and 1 deletions

View File

@ -0,0 +1,163 @@
package org.jeecg.modules.kc.kcKetangSuibi.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.kc.kcKetangSuibi.entity.KcKetangSuibi;
import org.jeecg.modules.kc.kcKetangSuibi.service.IKcKetangSuibiService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 课堂随笔
* @Author: jeecg-boot
* @Date: 2023-05-04
* @Version: V1.0
*/
@Api(tags="课堂随笔")
@RestController
@RequestMapping("/kc/kcKetangSuibi")
@Slf4j
public class KcKetangSuibiController extends JeecgController<KcKetangSuibi, IKcKetangSuibiService> {
@Autowired
private IKcKetangSuibiService kcKetangSuibiService;
/**
* 分页列表查询
*
* @param kcKetangSuibi
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "课堂随笔-分页列表查询")
@ApiOperation(value="课堂随笔-分页列表查询", notes="课堂随笔-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<KcKetangSuibi>> queryPageList(KcKetangSuibi kcKetangSuibi,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<KcKetangSuibi> queryWrapper = QueryGenerator.initQueryWrapper(kcKetangSuibi, req.getParameterMap());
Page<KcKetangSuibi> page = new Page<KcKetangSuibi>(pageNo, pageSize);
IPage<KcKetangSuibi> pageList = kcKetangSuibiService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param kcKetangSuibi
* @return
*/
@AutoLog(value = "课堂随笔-添加")
@ApiOperation(value="课堂随笔-添加", notes="课堂随笔-添加")
// @RequiresPermissions("kc:kc_ketang_suibi:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody KcKetangSuibi kcKetangSuibi) {
kcKetangSuibiService.save(kcKetangSuibi);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param kcKetangSuibi
* @return
*/
@AutoLog(value = "课堂随笔-编辑")
@ApiOperation(value="课堂随笔-编辑", notes="课堂随笔-编辑")
// @RequiresPermissions("kc:kc_ketang_suibi:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody KcKetangSuibi kcKetangSuibi) {
kcKetangSuibiService.updateById(kcKetangSuibi);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "课堂随笔-通过id删除")
@ApiOperation(value="课堂随笔-通过id删除", notes="课堂随笔-通过id删除")
@RequiresPermissions("kc:kc_ketang_suibi:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
kcKetangSuibiService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "课堂随笔-批量删除")
@ApiOperation(value="课堂随笔-批量删除", notes="课堂随笔-批量删除")
@RequiresPermissions("kc:kc_ketang_suibi:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.kcKetangSuibiService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "课堂随笔-通过id查询")
@ApiOperation(value="课堂随笔-通过id查询", notes="课堂随笔-通过id查询")
@GetMapping(value = "/queryById")
public Result<KcKetangSuibi> queryById(@RequestParam(name="id",required=true) String id) {
KcKetangSuibi kcKetangSuibi = kcKetangSuibiService.getById(id);
if(kcKetangSuibi==null) {
return Result.error("未找到对应数据");
}
return Result.OK(kcKetangSuibi);
}
/**
* 导出excel
*
* @param request
* @param kcKetangSuibi
*/
@RequiresPermissions("kc:kc_ketang_suibi:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, KcKetangSuibi kcKetangSuibi) {
return super.exportXls(request, kcKetangSuibi, KcKetangSuibi.class, "课堂随笔");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("kc:kc_ketang_suibi:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, KcKetangSuibi.class);
}
}

View File

@ -0,0 +1,66 @@
package org.jeecg.modules.kc.kcKetangSuibi.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 课堂随笔
* @Author: jeecg-boot
* @Date: 2023-05-04
* @Version: V1.0
*/
@Data
@TableName("kc_ketang_suibi")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="kc_ketang_suibi对象", description="课堂随笔")
public class KcKetangSuibi implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**用户ID*/
@Excel(name = "用户ID", width = 15)
@ApiModelProperty(value = "用户ID")
private java.lang.String userId;
/**课堂表ID*/
@Excel(name = "课堂表ID", width = 15)
@ApiModelProperty(value = "课堂表ID")
private java.lang.String ketangbiaoId;
/**笔记内容*/
@Excel(name = "笔记内容", width = 15)
@ApiModelProperty(value = "笔记内容")
private java.lang.String notes;
}

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.kc.kcKetangSuibi.mapper;
import org.jeecg.modules.kc.kcKetangSuibi.entity.KcKetangSuibi;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 课堂随笔
* @Author: jeecg-boot
* @Date: 2023-05-04
* @Version: V1.0
*/
public interface KcKetangSuibiMapper extends BaseMapper<KcKetangSuibi> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.business.kc.mapper.KcKetangSuibiMapper">
</mapper>

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.kc.kcKetangSuibi.service;
import org.jeecg.modules.kc.kcKetangSuibi.entity.KcKetangSuibi;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 课堂随笔
* @Author: jeecg-boot
* @Date: 2023-05-04
* @Version: V1.0
*/
public interface IKcKetangSuibiService extends IService<KcKetangSuibi> {
}

View File

@ -0,0 +1,19 @@
package org.jeecg.modules.kc.kcKetangSuibi.service.impl;
import org.jeecg.modules.kc.kcKetangSuibi.entity.KcKetangSuibi;
import org.jeecg.modules.kc.kcKetangSuibi.mapper.KcKetangSuibiMapper;
import org.jeecg.modules.kc.kcKetangSuibi.service.IKcKetangSuibiService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 课堂随笔
* @Author: jeecg-boot
* @Date: 2023-05-04
* @Version: V1.0
*/
@Service
public class KcKetangSuibiServiceImpl extends ServiceImpl<KcKetangSuibiMapper, KcKetangSuibi> implements IKcKetangSuibiService {
}

View File

@ -0,0 +1,72 @@
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from "/@/hooks/web/useMessage";
const { createConfirm } = useMessage();
enum Api {
list = '/kc/kcKetangSuibi/list',
save='/kc/kcKetangSuibi/add',
edit='/kc/kcKetangSuibi/edit',
deleteOne = '/kc/kcKetangSuibi/delete',
deleteBatch = '/kc/kcKetangSuibi/deleteBatch',
importExcel = '/kc/kcKetangSuibi/importExcel',
exportXls = '/kc/kcKetangSuibi/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 });
}

View File

@ -0,0 +1,52 @@
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: 'userId'
},
{
title: '课堂表ID',
align: "center",
dataIndex: 'ketangbiaoId'
},
{
title: '笔记内容',
align: "center",
dataIndex: 'notes'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '用户ID',
field: 'userId',
component: 'Input',
},
{
label: '课堂表ID',
field: 'ketangbiaoId',
component: 'Input',
},
{
label: '笔记内容',
field: 'notes',
component: 'Input',
},
// TODO 主键隐藏字段目前写死为ID
{
label: '',
field: 'id',
component: 'Input',
show: false,
},
];

View File

@ -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>
<!-- 表单区域 -->
<KcKetangSuibiModal ref="registerModal" @success="handleSuccess"></KcKetangSuibiModal>
</div>
</template>
<script lang="ts" name="kc-kcKetangSuibi" setup>
import { ref, reactive } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns } from './KcKetangSuibi.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './KcKetangSuibi.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import KcKetangSuibiModal from './components/KcKetangSuibiModal.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>

View File

@ -0,0 +1,26 @@
-- 注意该页面对应的前台目录为views/kc文件夹下
-- 如果你想更改到其他目录请修改sql中component字段对应的值
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
VALUES ('2023050409036750280', NULL, '课堂随笔', '/kc/kcKetangSuibiList', 'kc/KcKetangSuibiList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0);
-- 权限控制sql
-- 新增
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750281', '2023050409036750280', '添加课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);
-- 编辑
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750282', '2023050409036750280', '编辑课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);
-- 删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750283', '2023050409036750280', '删除课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);
-- 批量删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750284', '2023050409036750280', '批量删除课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);
-- 导出excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750285', '2023050409036750280', '导出excel_课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);
-- 导入excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2023050409036750286', '2023050409036750280', '导入excel_课堂随笔', NULL, NULL, 0, NULL, NULL, 2, 'kc:kc_ketang_suibi:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-05-04 21:03:28', NULL, NULL, 0, 0, '1', 0);

View File

@ -0,0 +1,139 @@
<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.userId">
<a-input v-model:value="formData.userId" placeholder="请输入用户ID" :disabled="disabled"></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="课堂表ID" v-bind="validateInfos.ketangbiaoId">
<a-input v-model:value="formData.ketangbiaoId" placeholder="请输入课堂表ID" :disabled="disabled"></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="笔记内容" v-bind="validateInfos.notes">
<a-input v-model:value="formData.notes" placeholder="请输入笔记内容" :disabled="disabled"></a-input>
</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 '../KcKetangSuibi.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: '',
userId: '',
ketangbiaoId: '',
notes: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//表单验证
const validatorRules = {
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
// 表单禁用
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
//赋值
Object.assign(formData, record);
});
}
/**
* 提交数据
*/
async function submitForm() {
// 触发表单验证
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//时间格式化
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//循环数据
for (let data in model) {
//如果该数据是数组并且是字符串类型
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//如果是字符串类型的需要变成以逗号分割的字符串
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 500px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
</style>

View File

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

View File

@ -268,4 +268,7 @@ public class KcKetangbiao implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String ts; private String ts;
@TableField(exist = false)
private String zhjsId;
} }

View File

@ -409,7 +409,7 @@
SELECT SELECT
tingketime, tkrq, shijian, hq, mq, tingketime, tkrq, shijian, hq, mq,
tk.kcmc, tk.ketangbiaoid, tk.skjs, tk.kkdw, tk.userid, tk.hh, tk.WEEK, tk.kcmc, tk.ketangbiaoid, tk.skjs, tk.kkdw, tk.userid, tk.hh, tk.WEEK,
ev.evaluationid, ev.evaluationver, ev.score ev.evaluationid, ev.evaluationver, ev.score, suibi.id as suibiId ,suibi.notes as suibiNotes
FROM FROM
( (
SELECT SELECT
@ -457,6 +457,17 @@
AND evs.upuserid = #{userid} AND evs.upuserid = #{userid}
</if> </if>
) ev ON tk.ketangbiaoid = ev.ketangbiaoid ) ev ON tk.ketangbiaoid = ev.ketangbiaoid
left join (
SELECT
id, user_id, ketangbiao_id, notes
FROM ( SELECT distinct id, user_id, ketangbiao_id, notes FROM kc_ketang_suibi WHERE
<if test="userid != null and userid != ''">
user_id = #{userid}
</if>
ORDER BY create_time DESC ) a
GROUP BY user_id, ketangbiao_id
) suibi on suibi.ketangbiao_id = tk.ketangbiaoid
<where> <where>
<if test="startDate != null and startDate != ''"> <if test="startDate != null and startDate != ''">