培训计划 编辑 查看

This commit is contained in:
wyw 2025-11-07 17:44:59 +08:00
parent bcec039dd8
commit 701d64f20b
4 changed files with 655 additions and 1731 deletions

View File

@ -0,0 +1,171 @@
import { Button, Descriptions, Modal, Badge, Popconfirm, Row, Col, Form, Input, Select, Table } from 'antd';
import React from 'react';
import { initFilter, extendRule, extendInclude, setDataFieldValue, showApprove, guid, initQueryFilter, ShowDateTime, ShowPrintClose, GetFileModel, showFiles } from '../../../utils/common';
import ReactToPrint from 'react-to-print';
import { ExportToExcel } from '@woowalker/feui'
import XLSX from 'xlsx';
import { connect } from 'dva';
import moment from 'moment';
import { message } from 'antd/lib/index';
import styles from '../../../components/CustomPages/HI/StepForm.css';
import config from '../../../config.js';
import FormPage from '../../FormPage'
class SE071ShowPrint extends React.Component {
constructor(props) {
super(props);
this.state = {
data: null,
btndisplay: 'none',
isCheck: false, //是否待办 审批
fileForm: {
title: '',
visible: false,
},
}
}
componentDidMount() {
if (this.props.data?.id)
this.loadData(this.props.data?.id);
}
componentWillReceiveProps(NextProps) {
if (NextProps.data?.id && this.props.data?.id != NextProps.data?.id) {
this.loadData(NextProps.data?.id);
}
}
onTableBtnExport() {
let TableWrap = document.getElementById('table1');
let Table = TableWrap.getElementsByTagName('table1')[0];
const wb = XLSX.utils.table_to_book(Table);
XLSX.writeFile(wb, this.props.record.Nav_Department.NAME + '.xlsx')
}
onClickApprove = (appVisible) => {
const newtmpData = {
data: { id: this.props.data.id, isShow: true, key: guid(), param: this.props.data.param, appVisible: appVisible, BtnAgreeDisplay: 'none' },
formCode: 'PF123',
}
this.setState({
tmpData: newtmpData,
});
}
loadData = (id) => {
var isCheck = (this.props.data.tableKey != undefined && this.props.data.tableKey == '1') ? true : false
var orgId = this.props.login ? this.props.login.OrgId : '';
let json = initFilter(orgId);
extendRule(json, 'ID', 1, id);
extendInclude(json, 'Nav_Department')
extendInclude(json, 'Nav_User')
extendInclude(json, 'Nav_Files.Nav_ImgFile.Nav_File')
extendInclude(json, 'Nav_ListPlanDetail.Nav_Department')
extendInclude(json, 'Nav_ListPlanDetail.Nav_ListDetailDepartment.Nav_Department')
extendInclude(json, 'Nav_ListPlanDetail.Nav_TrainTypeEnum')
this.props.dispatch({
type: 'app/getDataByPost',
payload: json,
url: 'SE/SETrainPlan/GetSuit',
onComplete: (ret) => {
if (ret) {
this.setState({
data: ret,
})
}
}
});
}
render() {
const { data } = this.state;
const enums = this.props.data.enums ? this.props.data.enums : this.props.app.enums;
return <div>
<div style={{ padding: '10px' }}>
<table>
<tr>
<td><Button onClick={() => this.onClickApprove(true)} style={{ marginRight: '8px' }} icon='export'>审批详情</Button></td>
<td><ReactToPrint trigger={() => <Button type={'default'} icon={'printer'} >打印</Button>} content={() => this.componentRef} /></td>
<td><ExportToExcel fileName='年度培训计划' tableId={'tableId' + this.props.data.id} /></td>
</tr>
</table>
</div>
<FormPage {...this.state.tmpData} />
<div ref={el => (this.componentRef = el)} style={{ padding: '20px', paddingTop: '20px' }} id={'tableId' + this.props.data.id}>
<h1 className={styles.showPrintHead}>年度培训计划</h1>
{
data ? <div>
<Descriptions title='' size='middle' bordered>
<Descriptions.Item label="计划年度">{data.YEAR}</Descriptions.Item>
<Descriptions.Item label="发起时间">{data.LAUNCH_TIME}</Descriptions.Item>
<Descriptions.Item label="发起部门">{data.Nav_Department.NAME}</Descriptions.Item>
<Descriptions.Item label="发起人员">{data.Nav_User?.NAME}</Descriptions.Item>
<Descriptions.Item label="计划名称">{data.PLAN_NAME}</Descriptions.Item>
<Descriptions.Item label="附件">{showFiles(data.Nav_Files, config.picServerHost, this)}</Descriptions.Item>
{
data.TYPE == 5 ?
<Descriptions.Item label="指导原则">{data.GUIDE_PRINCIPLE}</Descriptions.Item>
: null
}
{
data.TYPE == 5 ?
<Descriptions.Item label="培训要求">{data.TRAIN_REQUIREMENT}</Descriptions.Item>
: null
}
</Descriptions>
</div> : null
}
{
(data?.Nav_ListPlanDetail && data?.Nav_ListPlanDetail.length > 0) ?
<table className={styles.PrintFormLight}>
<tbody>
<tr>
<td colSpan={10} className={styles.showPrintHead2}>年度培训计划详情</td>
</tr>
<tr className={styles.PrintFormLightTh}>
<td>月份</td>
<td>培训性质</td>
<td>培训类型</td>
<td>培训名称</td>
<td>培训对象</td>
<td>培训形式</td>
<td>考核方式</td>
<td>培训学时</td>
<td>培训组织</td>
{/* <td>培训老师</td> */}
{
data.TYPE != 5 ?
<td>被培训组织</td>
: null
}
</tr>
{data?.Nav_ListPlanDetail?.map((item, i) => {
return <tr>
<td>{item.MONTH} </td>
<td>{enums.TrainInOut.enums[item.IN_OUT]} </td>
<td>{item.Nav_TrainTypeEnum.NAME} </td>
<td>{item.NAME} </td>
<td>{item.OBJECT} </td>
<td>{enums.TrainType.enums[item.TRAINTYPE]} </td>
<td>{enums.PlanCheckType.enums[item.CHECKTYPE]} </td>
<td>{item.CLASSHOUR} </td>
<td>{item.Nav_Department.NAME} </td>
{
data.TYPE != 5 ?
<td>{item.Nav_ListDetailDepartment?.map((itemtype, j) => { return (j > 0 ? '' : '') + itemtype.Nav_Department.NAME })}</td>
: null
}
</tr>
})}
</tbody>
</table>
: null
}
</div>
{
GetFileModel(Modal, FormPage, this, this.state.fileForm.visible)
}
</div>
}
}
export default connect(({ login, app }) => ({ login, app }))(SE071ShowPrint)

145
src/files/edit/SE071.js Normal file
View File

@ -0,0 +1,145 @@
import { message } from "antd/lib/index";
import { getPropertyData, extendInclude, extendRule, auditOptionShow, initFilter, guid } from "../../utils/common";
// import { now } from "core-js/core/date";
// import { connect } from 'dva';
// import { forEach } from "core-js/core/array";
/**
* @return {string}
*/
// 编辑
export default {
onBeforeSaveHandleRecord(params) {
params.record.TaskID = params.data.TaskID //TaskID传递消息表ID
params.record.STATUS = params.customParams;
// EXPIRY_DATE_EDIT
// EXPIRY_START_DATE
// EXPIRY_DATE
// if (params.record.EXPIRY_DATE_EDIT) {
// var dt = params.record.EXPIRY_DATE_EDIT.split(',')
// params.record.EXPIRY_START_DATE = dt[0]
// params.record.EXPIRY_DATE = dt[1]
// }
},
onBeforeEdit: ({ isNew, dispatch, setRowFieldVisible, setStateData, stateData, getFieldValue, setFieldVisible, login, setFieldValueByBatch }) => {
var TYPE = 10
if (isNew) {
setFieldVisible("AUDIT_OPINION", false)
TYPE = (login.user.Nav_Department.DEPARTMENT_TYPE == 5 || login.user.Nav_Department.DEPARTMENT_STATUS == 2) ? 5 : 10
var temps = []
temps.push({ field: "YEAR", value: (new Date()).getFullYear() });
temps.push({ field: "DEPARTMENT_ID", value: login.user.DEPARTMENT_ID });
temps.push({ field: "Nav_Department.NAME", value: login.user.Nav_Department.NAME });
temps.push({ field: "LAUNCH_USER_ID", value: login.user.ID });
temps.push({ field: "Nav_User.NAME", value: login.user.NAME });
temps.push({ field: "TYPE", value: TYPE });
setFieldValueByBatch(temps);
} else {
TYPE = stateData.TYPE
auditOptionShow(stateData, stateData.STATUS, 40, 'AUDIT_OPINION', stateData.ID, dispatch, setFieldVisible)
}
if (TYPE == 5) {
setRowFieldVisible("T_SE_TRAIN_PLAN_DETAIL", { Nav_ListDetailDepartment: false })
} else {
setFieldVisible("GUIDE_PRINCIPLE", false)
setFieldVisible("TRAIN_REQUIREMENT", false)
if (isNew) {
var year = getFieldValue("YEAR")
if (year == null) {
year = stateData.YEAR
}
if (year == null) {
year = (new Date()).getFullYear()
}
//部门 新增 默认加载 公司培训计划信息
let json = initFilter(stateData.ORG_ID, 'false', null, null, null, year);
dispatch({
type: 'app/getDataByPost',
url: 'SE/SETrainPlan/GetIni',
payload: json,
onlyData: false,
onComplete: (ret) => {
if (!ret.Data.Nav_Department)
ret.Data.Nav_Department = {}
if (!ret.Data.Nav_User)
ret.Data.Nav_User = {}
ret.Data.Nav_Department.NAME = login.user.Nav_Department.NAME
ret.Data.DEPARTMENT_ID = login.user.DEPARTMENT_ID
ret.Data.Nav_User.NAME = login.user.NAME
ret.Data.LAUNCH_USER_ID = login.user.ID
setStateData(ret.Data);
}
})
}
}
},
onSubChange: ({ record, colInfo, setDataState, stateData }) => {
if (colInfo.FIELD_NAME == "IN_OUT" && record.IN_OUT == '8') {
stateData.Nav_ListPlanDetail.forEach(e => {
if (e.ID == record.ID) {
e.TRAINTYPE = 80
e.CHECKTYPE = 81
}
})
setDataState({ ...stateData });
}
},
btnCopy: ({ stateData, getSelectedRecords, setState }) => {
let DetailCheck = getSelectedRecords();
if (DetailCheck == null || DetailCheck.length < 1) {
message.error("请选择需要复制的行!")
} else {
DetailCheck.forEach(e => {
var add = JSON.parse(JSON.stringify(e))
add.ID = guid()
add.ROW_NO = stateData.Nav_ListPlanDetail.length + 1
stateData.Nav_ListPlanDetail.push(add)
})
setState({ data: stateData });
}
},
//向下同步培训组织 单选
btnSyncDep: ({ stateData, saveRowRecord }) => {
var totalCount = stateData.Nav_ListPlanDetail.length
if (totalCount < 2) {
return
}
for (var i = 1; i < totalCount; i++) {
//本行数据 如果为空 取上一行的 DEPARTMENT_ID Nav_Department
if (stateData.Nav_ListPlanDetail[i].DEPARTMENT_ID == null || stateData.Nav_ListPlanDetail[i].DEPARTMENT_ID == undefined) {
let iRow = { ...stateData.Nav_ListPlanDetail[i] };
iRow.DEPARTMENT_ID = stateData.Nav_ListPlanDetail[i - 1].DEPARTMENT_ID
iRow.Nav_Department = stateData.Nav_ListPlanDetail[i - 1].Nav_Department
saveRowRecord({ record: iRow, editCode: "T_SE_TRAIN_PLAN_DETAIL" })
}
}
},
//向下同步被培训组织 多选
btnSyncListDep: ({ stateData, saveRowRecord }) => {
var totalCount = stateData.Nav_ListPlanDetail.length
var listDetailDepartment = []
for (var i = 0; i < totalCount; i++) {
if (stateData.Nav_ListPlanDetail[i].Nav_ListDetailDepartment != null && stateData.Nav_ListPlanDetail[i].Nav_ListDetailDepartment.length > 0) {
listDetailDepartment = stateData.Nav_ListPlanDetail[i].Nav_ListDetailDepartment //取被同步的数据 只要有数据就赋值
} else if (listDetailDepartment != null && listDetailDepartment.length > 0) {
let updateList = [];
for (let j = 0; j < listDetailDepartment.length; j++) {
let updateObj = { ...listDetailDepartment[j] };
updateObj["ID"] = guid()
updateObj["PLAN_DETAIL_ID"] = stateData.Nav_ListPlanDetail[i].ID
updateList.push(updateObj);
}
let iRow = { ...stateData.Nav_ListPlanDetail[i] };
iRow.Nav_ListDetailDepartment = updateList;
saveRowRecord({ record: iRow, editCode: "T_SE_TRAIN_PLAN_DETAIL" })
for (var x = 0; x < totalCount; x++) {
if (iRow.ID == stateData.Nav_ListPlanDetail[x].ID) {
stateData.Nav_ListPlanDetail[x].Nav_ListDetailDepartment = updateList;
continue;
}
}
}
}
},
}

View File

@ -139,6 +139,7 @@ const SE018PaperPage = createLoadableComponent(() => import('../components/Custo
const SE019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE019ShowPrint')) const SE019ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE019ShowPrint'))
const SE021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE021ShowPrint')) const SE021ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE021ShowPrint'))
const SE061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE061ShowPrint')) const SE061ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE061ShowPrint'))
const SE071ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE071ShowPrint'))
const SE061PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE061PaperPage')) const SE061PaperPage = createLoadableComponent(() => import('../components/CustomPages/SE/SE061PaperPage'))
const SE062ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE062ShowPrint')) const SE062ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE062ShowPrint'))
const SE063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE063ShowPrint')) const SE063ShowPrint = createLoadableComponent(() => import('../components/CustomPages/SE/SE063ShowPrint'))
@ -340,6 +341,7 @@ export default function (componentName, formId, formParam, data, formCode, formD
SE021ShowPrint: <SE021ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE021ShowPrint: <SE021ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE061PaperPage: <SE061PaperPage formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE061PaperPage: <SE061PaperPage formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE061ShowPrint: <SE061ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE061ShowPrint: <SE061ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE071ShowPrint: <SE071ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE062ShowPrint: <SE062ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE062ShowPrint: <SE062ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE063ShowPrint: <SE063ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE063ShowPrint: <SE063ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,
SE051ShowPrint: <SE051ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />, SE051ShowPrint: <SE051ShowPrint formId={formId} formParam={formParam} data={data} formCode={formCode} />,

File diff suppressed because it is too large Load Diff