奖项管理:推荐以及导出

main
Gitea 5 months ago
parent 2b1e1f6bab
commit 98c684a1b0
  1. 64
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/awardpersion/controller/AwardPersionController.java
  2. 11
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/awardpersion/entity/AwardPersion.java
  3. 55
      jeecgboot-vue3-master/src/hooks/system/useListPage.ts
  4. 36
      jeecgboot-vue3-master/src/hooks/system/useMethods.ts
  5. 27
      jeecgboot-vue3-master/src/views/awardpersion/AwardPersion.api.ts
  6. 5
      jeecgboot-vue3-master/src/views/awardpersion/AwardPersion.data.ts
  7. 40
      jeecgboot-vue3-master/src/views/awardpersion/AwardPersionList.vue

@ -422,6 +422,38 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
public ModelAndView exportXls(HttpServletRequest request, AwardPersion awardPersion) { public ModelAndView exportXls(HttpServletRequest request, AwardPersion awardPersion) {
return super.exportXls(request, awardPersion, AwardPersion.class, "获奖管理"); return super.exportXls(request, awardPersion, AwardPersion.class, "获奖管理");
} }
/**
* 奖项推荐导出excel
*
* @param request
* @param awardPersion
*/
//@RequiresPermissions("awardpersion:award_persion:exportXls")
@RequestMapping(value = "/exportXlstj")
public ModelAndView exportXlstj(HttpServletRequest request, AwardPersion awardPersion) {
// Step.1 组装查询条件
QueryWrapper<AwardPersion> queryWrapper = QueryGenerator.initQueryWrapper(awardPersion, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 过滤选中数据
queryWrapper.eq("tj","1");
// Step.2 获取导出数据
List<AwardPersion> exportList = awardPersionService.list(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(NormalExcelConstants.FILE_NAME, "获奖推荐");
mv.addObject(NormalExcelConstants.CLASS, AwardPersion.class);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("获奖推荐" + "报表", "导出人:" + sysUser.getRealname(), "获奖推荐");
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}
/** /**
* 导出excel模板 * 导出excel模板
* *
@ -613,4 +645,36 @@ public class AwardPersionController extends JeecgController<AwardPersion, IAward
return Result.OK("成功!"); return Result.OK("成功!");
} }
/**
* 推荐
*
* @param
* @return
*/
@AutoLog(value = "推荐")
@ApiOperation(value="推荐", notes="推荐")
@GetMapping(value = "/tj")
public Result<String> tj(@RequestParam(name="id",required=true) String id) {
AwardPersion awardPersion = awardPersionService.getById(id);
awardPersion.setTj("1");
awardPersionService.updateById(awardPersion);
return Result.OK("成功!");
}
/**
* 撤销
*
* @param
* @return
*/
@AutoLog(value = "撤销")
@ApiOperation(value="撤销", notes="撤销")
@GetMapping(value = "/cx")
public Result<String> cx(@RequestParam(name="id",required=true) String id) {
AwardPersion awardPersion = awardPersionService.getById(id);
awardPersion.setTj("0");
awardPersionService.updateById(awardPersion);
return Result.OK("成功!");
}
} }

@ -77,16 +77,16 @@ public class AwardPersion implements Serializable {
@ApiModelProperty(value = "奖项名称") @ApiModelProperty(value = "奖项名称")
private java.lang.String awardname; private java.lang.String awardname;
/**状态*/ /**状态*/
@Excel(name = "状态", width = 15, dicCode = "sh_status") /*@Excel(name = "状态", width = 15, dicCode = "sh_status")*/
@Dict(dicCode = "sh_status") @Dict(dicCode = "sh_status")
@ApiModelProperty(value = "状态") @ApiModelProperty(value = "状态")
private java.lang.Integer status; private java.lang.Integer status;
/**奖项顺序*/ /**奖项顺序*/
@Excel(name = "奖项顺序", width = 15) /*@Excel(name = "奖项顺序", width = 15)*/
@ApiModelProperty(value = "奖项顺序") @ApiModelProperty(value = "奖项顺序")
private java.lang.Integer awardsort; private java.lang.Integer awardsort;
/**奖项*/ /**奖项*/
@Excel(name = "奖项", width = 15) /*@Excel(name = "奖项", width = 15)*/
@ApiModelProperty(value = "奖项") @ApiModelProperty(value = "奖项")
private java.lang.String awardid; private java.lang.String awardid;
/**学生姓名*/ /**学生姓名*/
@ -117,5 +117,10 @@ public class AwardPersion implements Serializable {
@ApiModelProperty(value = "上传证书") @ApiModelProperty(value = "上传证书")
private String sczs; private String sczs;
/**推荐*/
@Excel(name = "是否推荐", width = 15, dicCode = "yn")
@Dict(dicCode = "yn")
@ApiModelProperty(value = "推荐")
private String tj;
} }

@ -8,7 +8,7 @@ import { useMessage } from '/@/hooks/web/useMessage';
import { useMethods } from '/@/hooks/system/useMethods'; import { useMethods } from '/@/hooks/system/useMethods';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { filterObj } from '/@/utils/common/compUtils'; import { filterObj } from '/@/utils/common/compUtils';
const { handleExportXls, handleImportXls,handleExportXlsMb } = useMethods(); const { handleExportXls, handleImportXls,handleExportXlsMb,handleExportXlstj } = useMethods();
// 定义 useListPage 方法所需参数 // 定义 useListPage 方法所需参数
interface ListPageOptions { interface ListPageOptions {
@ -33,6 +33,13 @@ interface ListPageOptions {
//导出参数 //导出参数
params?: object; params?: object;
}; };
exportConfigtj?: {
url: string | (() => string);
// 导出文件名
name?: string | (() => string);
//导出参数
params?: object;
};
// 导入配置 // 导入配置
importConfig?: { importConfig?: {
//update-begin-author:taoyan date:20220507 for: erp代码生成 子表 导入地址是动态的 //update-begin-author:taoyan date:20220507 for: erp代码生成 子表 导入地址是动态的
@ -158,6 +165,51 @@ export function useListPage(options: ListPageOptions) {
} }
} }
// 导出奖项推荐数据 excel
async function onExportXlstj() {
//update-begin---author:wangshuai ---date:20220411 for:导出新增自定义参数------------
let { url, name, params } = options?.exportConfigtj ?? {};
let realUrl = typeof url === 'function' ? url() : url;
if (realUrl) {
let title = typeof name === 'function' ? name() : name;
//update-begin-author:taoyan date:20220507 for: erp代码生成 子表 导出报错,原因未知-
let paramsForm:any = {};
try {
paramsForm = await getForm().validate();
} catch (e) {
console.error(e);
}
//update-end-author:taoyan date:20220507 for: erp代码生成 子表 导出报错,原因未知-
//update-begin-author:liusq date:20230410 for:[/issues/409]导出功能没有按排序结果导出,设置导出默认排序,创建时间倒序
if(!paramsForm?.column){
Object.assign(paramsForm,{column:'createTime',order:'desc'});
}
//update-begin-author:liusq date:20230410 for: [/issues/409]导出功能没有按排序结果导出,设置导出默认排序,创建时间倒序
//如果参数不为空,则整合到一起
//update-begin-author:taoyan date:20220507 for: erp代码生成 子表 导出动态设置mainId
if (params) {
Object.keys(params).map((k) => {
let temp = (params as object)[k];
if (temp) {
paramsForm[k] = unref(temp);
}
});
}
//update-end-author:taoyan date:20220507 for: erp代码生成 子表 导出动态设置mainId
if (selectedRowKeys.value && selectedRowKeys.value.length > 0) {
paramsForm['selections'] = selectedRowKeys.value.join(',');
}
console.log()
return handleExportXlstj(title as string, realUrl, filterObj(paramsForm));
//update-end---author:wangshuai ---date:20220411 for:导出新增自定义参数--------------
} else {
$message.createMessage.warn('没有传递 exportConfig.url 参数');
return Promise.reject();
}
}
// 导入 excel // 导入 excel
function onImportXls(file) { function onImportXls(file) {
let { url, success } = options?.importConfig ?? {}; let { url, success } = options?.importConfig ?? {};
@ -220,6 +272,7 @@ export function useListPage(options: ListPageOptions) {
...$message, ...$message,
onExportXls, onExportXls,
onExportXlsMb, onExportXlsMb,
onExportXlstj,
onImportXls, onImportXls,
doRequest, doRequest,
doDeleteRecord, doDeleteRecord,

@ -49,6 +49,41 @@ export function useMethods() {
window.URL.revokeObjectURL(url); //释放掉blob对象 window.URL.revokeObjectURL(url); //释放掉blob对象
} }
} }
/**
* xls
* @param name
* @param url
*/
async function exportXlstj(name, url, params, isXlsx = false) {
const data = await defHttp.get({ url: url, params: params, responseType: 'blob' }, { isTransformResponse: false });
if (!data) {
createMessage.warning('文件下载失败');
return;
}
if (!name || typeof name != 'string') {
name = '导出文件';
}
let blobOptions = { type: 'application/vnd.ms-excel' };
let fileSuffix = '.xls';
if (isXlsx === true) {
blobOptions['type'] = XLSX_MIME_TYPE;
fileSuffix = XLSX_FILE_SUFFIX;
}
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(new Blob([data], blobOptions), name + fileSuffix);
} else {
let url = window.URL.createObjectURL(new Blob([data], blobOptions));
let link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', name + fileSuffix);
document.body.appendChild(link);
link.click();
document.body.removeChild(link); //下载完成移除元素
window.URL.revokeObjectURL(url); //释放掉blob对象
}
}
/** /**
* xls * xls
* @param name * @param name
@ -128,5 +163,6 @@ export function useMethods() {
handleImportXls: (data, url, success) => importXls(data, url, success), handleImportXls: (data, url, success) => importXls(data, url, success),
handleExportXlsx: (name: string, url: string, params?: object) => exportXls(name, url, params, true), handleExportXlsx: (name: string, url: string, params?: object) => exportXls(name, url, params, true),
handleExportXlsMb: (name: string, url: string, params?: object) => exportXlsMb(name, url, params), handleExportXlsMb: (name: string, url: string, params?: object) => exportXlsMb(name, url, params),
handleExportXlstj: (name: string, url: string, params?: object) => exportXlstj(name, url, params),
}; };
} }

@ -17,7 +17,9 @@ enum Api {
queryOptions = '/awardpersion/awardPersion/queryOptions', queryOptions = '/awardpersion/awardPersion/queryOptions',
personalAbilityEvaluation = '/abilityEvaluation/personalAbilityEvaluation/personalAbilityEvaluation2', personalAbilityEvaluation = '/abilityEvaluation/personalAbilityEvaluation/personalAbilityEvaluation2',
sczs='/awardpersion/awardPersion/sczs', sczs='/awardpersion/awardPersion/sczs',
exportXlstj = '/awardpersion/awardPersion/exportXlstj',
tj = '/awardpersion/awardPersion/tj',
qxtj = '/awardpersion/awardPersion/cx',
} }
/** /**
@ -26,6 +28,7 @@ enum Api {
*/ */
export const getExportUrl = Api.exportXls; export const getExportUrl = Api.exportXls;
export const getExportUrlMb = Api.exportXlsMb; export const getExportUrlMb = Api.exportXlsMb;
export const getExportUrltj = Api.exportXlstj;
/** /**
* api * api
@ -51,6 +54,28 @@ export const deleteOne = (params,handleSuccess) => {
}); });
} }
/**
*
* @param params
* @param handleSuccess
*/
export const tj = (params,handleSuccess) => {
return defHttp.get({url: Api.tj, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
* @param handleSuccess
*/
export const qxtj = (params,handleSuccess) => {
return defHttp.get({url: Api.qxtj, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/** /**
* *
* @param params * @param params

@ -45,6 +45,11 @@ export const columns: BasicColumn[] = [
dataIndex: 'sczs', dataIndex: 'sczs',
customRender: render.renderImagezs, customRender: render.renderImagezs,
}, },
{
title: '是否推荐',
align: "center",
dataIndex: 'tj_dictText'
},
/* { /* {
title: '状态', title: '状态',
align: "center", align: "center",

@ -40,6 +40,7 @@
<a-button type="primary" @click="cxhq" preIcon="ant-design:sync-outlined"> 重新获取</a-button> <a-button type="primary" @click="cxhq" preIcon="ant-design:sync-outlined"> 重新获取</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button> <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXlsMb"> 导出模板</a-button> <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXlsMb"> 导出模板</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXlstj"> 导出推荐</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0"> <a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay> <template #overlay>
@ -118,6 +119,9 @@ import {
getImportUrl, getImportUrl,
getExportUrl, getExportUrl,
getExportUrlMb, getExportUrlMb,
getExportUrltj,
tj,
qxtj,
// personalAbilityEvaluation // personalAbilityEvaluation
} from './AwardPersion.api'; } from './AwardPersion.api';
import { downloadFile } from '/@/utils/common/renderUtils'; import { downloadFile } from '/@/utils/common/renderUtils';
@ -135,7 +139,7 @@ const registerModal = ref();
const registerModal1 = ref(); const registerModal1 = ref();
const registerModal2 = ref(); const registerModal2 = ref();
//table //table
const { prefixCls, tableContext, onExportXls, onImportXls, onExportXlsMb } = useListPage({ const { prefixCls, tableContext, onExportXls, onImportXls, onExportXlsMb,onExportXlstj } = useListPage({
tableProps: { tableProps: {
title: '获奖管理', title: '获奖管理',
api: list, api: list,
@ -160,6 +164,11 @@ const { prefixCls, tableContext, onExportXls, onImportXls, onExportXlsMb } = use
url: getExportUrlMb, url: getExportUrlMb,
params: null, params: null,
}, },
exportConfigtj: {
name: "获奖推荐",
url: getExportUrltj,
params: null,
},
importConfig: { importConfig: {
url: getImportUrl, url: getImportUrl,
success: handleSuccess success: handleSuccess
@ -213,6 +222,18 @@ function handleDetail(record: Recordable) {
async function handleDelete(record) { async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess); await deleteOne({ id: record.id }, handleSuccess);
} }
/**
* 推荐事件
*/
async function tjjx(record) {
await tj({ id: record.id }, handleSuccess);
}
/**
* 取消推荐事件
*/
async function qxtjjx(record) {
await qxtj({ id: record.id }, handleSuccess);
}
/** /**
* 上传证书事件 * 上传证书事件
@ -267,6 +288,23 @@ function getTableAction(record) {
confirm: handleDelete.bind(null, record), confirm: handleDelete.bind(null, record),
} }
}); });
if (record.tj === "0") {
actions.unshift({
label: '推荐',
popConfirm: {
title: '是否确认推荐',
confirm: tjjx.bind(null, record),
}
});
}else {
actions.unshift({
label: '取消推荐',
popConfirm: {
title: '是否取消推荐',
confirm: qxtjjx.bind(null, record),
}
});
}
return actions; return actions;
} }

Loading…
Cancel
Save