Browse Source

(*)部门资源库逻辑重新调整

master
周沫沫历险记 2 years ago
parent
commit
44c5295d18
  1. 120
      api/app/lib/controllers/resourceRepository/index.js
  2. 61
      api/app/lib/models/training_information_level.js
  3. 60
      api/app/lib/models/training_information_record.js
  4. 70
      web/client/src/sections/humanAffairs/containers/resourceRepository.jsx

120
api/app/lib/controllers/resourceRepository/index.js

@ -4,92 +4,94 @@ const moment = require('moment')
async function getResourceClassify(ctx) {
try {
const { models } = ctx.fs.dc;
const { limit, offset } = ctx.query;
// const { limit, offset } = ctx.query;
let rlst = [];
const findObj = {}
if (Number(limit) > 0 && Number(offset) >= 0) {
findObj.limit = Number(limit);
findObj.offset = Number(offset);
}
// const findObj = {}
// if (Number(limit) > 0 && Number(offset) >= 0) {
// findObj.limit = Number(limit);
// findObj.offset = Number(offset);
// }
rlst = [{
label: "公司培训资料", value: "company", key: "company", operation: true, children: []
}, { label: "部门培训资料", value: 'dept', key: 'dept', operation: false, children: [] }];
const trainingInformationLevel = await models.TrainingInformationLevel.findAll(findObj);
if (trainingInformationLevel.length) {
for (let level of trainingInformationLevel) {
const { id, type, departmentname, traindate, origin } = level;
/**type:1级, departmentname:2级,traindate:3级 */
const arrIndex = rlst.findIndex(item => item.label == type)
if (arrIndex > -1) {//一级分类名称正确
const operation = "import" == origin ? true : false;
if (departmentname) {
if (traindate) {
label: "公司培训资料", value: "company", key: "公司培训资料", operation: true, children: []
}, { label: "部门培训资料", value: 'dept', key: '部门培训资料', operation: false, children: [] }];
const filterData = (arrayData, arrIndex, operation) => {
if (arrayData.length) {
for (let level of arrayData) {
const { departmentName, trainDate } = level.dataValues;
/** departmentName:2级,trainDate:3级 */
if (departmentName) {
if (trainDate) {
const depKey = rlst[arrIndex].label + '/' + departmentName
//区分2级是否记录
if (rlst[arrIndex].children) {
const depIndex = rlst[arrIndex].children.findIndex(r => r.label == departmentname);
const depIndex = rlst[arrIndex].children.findIndex(r => r.key == depKey);
if (depIndex > -1) {
const dateKey = rlst[arrIndex].label + '/' + rlst[arrIndex].children[depIndex].label + '/' + moment(trainDate).format('YYYY-MM');
if (rlst[arrIndex].children[depIndex].children) {
rlst[arrIndex].children[depIndex].children.push({
label: moment(traindate).format('YYYY-MM'),
value: id,
key: id,
operation
})
const dateIndex = rlst[arrIndex].children[depIndex].children.findIndex(r => r.key == dateKey);
if (dateIndex == -1) {
rlst[arrIndex].children[depIndex].children.push({
label: moment(trainDate).format('YYYY-MM'),
value: dateKey,
key: dateKey,
operation
});
}
} else {
rlst[arrIndex].children[depIndex].children = [{
label: moment(traindate).format('YYYY-MM'),
value: id,
key: id,
label: moment(trainDate).format('YYYY-MM'),
value: dateKey,
key: dateKey,
operation
}]
}
} else {
rlst[arrIndex].children.push({
label: departmentname,
label: departmentName,
value: depKey,
key: depKey,
operation,
children: [{
label: moment(traindate).format('YYYY-MM'),
value: id,
key: id,
label: moment(trainDate).format('YYYY-MM'),
value: depKey + '/' + moment(trainDate).format('YYYY-MM'),
key: depKey + '/' + moment(trainDate).format('YYYY-MM'),
operation
}]
});
}
} else {
rlst[arrIndex].children = [{
label: departmentname,
label: departmentName,
value: depKey,
key: depKey,
operation,
children: [{
label: moment(traindate).format('YYYY-MM'),
value: id,
key: id,
label: moment(trainDate).format('YYYY-MM'),
value: depKey + '/' + moment(trainDate).format('YYYY-MM'),
key: depKey + '/' + moment(trainDate).format('YYYY-MM'),
operation
}]
}]
}
} else {
//只有2级目录的情况
if (rlst[arrIndex].children) {
const depIndex = rlst[arrIndex].children.findIndex(r => r.label == departmentname);
if (depIndex > -1) {
if (!rlst[arrIndex].children[depIndex].value) {
rlst[arrIndex].children[depIndex].value = id;
rlst[arrIndex].children[depIndex].key = id;
rlst[arrIndex].children[depIndex].operation = operation;
}
} else {
const depIndex = rlst[arrIndex].children.findIndex(r => r.key == rlst[arrIndex].label + '/' + departmentName);
if (depIndex == -1) {
rlst[arrIndex].children.push({
label: departmentname,
value: id,
key: id,
operation
label: departmentName,
value: rlst[arrIndex].label + '/' + departmentName,
key: rlst[arrIndex].label + '/' + departmentName,
operation,
children: []
})
}
} else {
rlst[arrIndex].children = [{
label: departmentname,
value: id,
key: id,
operation
value: rlst[arrIndex].label + '/' + departmentName,
key: rlst[arrIndex].label + '/' + departmentName,
operation,
children: []
}]
}
}
@ -97,6 +99,16 @@ async function getResourceClassify(ctx) {
}
}
}
const deptTraining = await models.DeptTraining.findAll({});
if (deptTraining.length) {
filterData(deptTraining, 1, false);
}
const trainingInformation = await models.TrainingInformation.findAll({});
if (trainingInformation.length) {
filterData(trainingInformation, 0, true);
}
ctx.status = 200;
ctx.body = rlst;

61
api/app/lib/models/training_information_level.js

@ -1,61 +0,0 @@
/* eslint-disable*/
'use strict';
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const TrainingInformationLevel = sequelize.define("trainingInformationLevel", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: true,
field: "id",
autoIncrement: true
},
type: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "type",
autoIncrement: false
},
departmentname: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: '部门(2级目录)',
primaryKey: false,
field: "departmentname",
autoIncrement: false
},
traindate: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null,
comment: '培训时间(3级目录)',
primaryKey: false,
field: "traindate",
autoIncrement: false
},
origin: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "origin",
autoIncrement: false
}
}, {
tableName: "training_information_level",
comment: "",
indexes: []
});
dc.models.TrainingInformationLevel = TrainingInformationLevel;
return TrainingInformationLevel;
};

60
api/app/lib/models/training_information_record.js

@ -5,7 +5,7 @@
module.exports = dc => {
const DataTypes = dc.ORM;
const sequelize = dc.orm;
const TrainingInformationRecord = sequelize.define("trainingInformationRecord", {
const TrainingInformation = sequelize.define("training_information", {
id: {
type: DataTypes.INTEGER,
allowNull: false,
@ -15,16 +15,7 @@ module.exports = dc => {
field: "id",
autoIncrement: true
},
type: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "type",
autoIncrement: false
},
departmentname: {
departmentName: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: null,
@ -33,52 +24,52 @@ module.exports = dc => {
field: "departmentname",
autoIncrement: false
},
traindate: {
trainDate: {
type: DataTypes.DATE,
allowNull: false,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "traindate",
autoIncrement: false
},
filetype: {
fileType: {
type: DataTypes.STRING,
allowNull: false,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "filetype",
autoIncrement: false
},
filename: {
fileName: {
type: DataTypes.STRING,
allowNull: false,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "filename",
autoIncrement: false
},
filesize: {
fileSize: {
type: DataTypes.STRING,
allowNull: false,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "filesize",
autoIncrement: false
},
updatedate: {
updateDate: {
type: DataTypes.DATE,
allowNull: false,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "updatedate",
autoIncrement: false
},
attachpath: {
attachPath: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
@ -86,30 +77,13 @@ module.exports = dc => {
primaryKey: false,
field: "attachpath",
autoIncrement: false
},
origin: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null,
comment: null,
primaryKey: false,
field: "origin",
autoIncrement: false
},
traininginformationlevelid: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: null,
comment: null,
primaryKey: false,
field: "traininginformationlevelid",
autoIncrement: false
}
}, {
tableName: "training_information_record",
tableName: "training_information",
comment: "",
indexes: []
});
dc.models.TrainingInformationRecord = TrainingInformationRecord;
return TrainingInformationRecord;
dc.models.TrainingInformation = TrainingInformation;
return TrainingInformation;
};

70
web/client/src/sections/humanAffairs/containers/resourceRepository.jsx

@ -8,70 +8,17 @@ import '../style.less'
const ResourceRepository = (props) => {
const { dispatch, actions, clientHeight, resourceClassify } = props;
const [treeData, setTreeData] = useState([]);
const ref = useRef();
useEffect(() => {
dispatch(getResourceClassify());
dispatch(getResourceClassify()).then(res => {
const { success, payload } = res;
if (success)
setTreeData(payload.data);
});
}, [])
const treeData = [
{
label: (<div>
<span>亚洲</span>
<span className='tree-icon'>
<IconEditStroked size='default' onClick={() => alert("bianji")} />
<IconMinusCircleStroked size='default' onClick={() => alert("sahnchu")} />
<IconPlusCircleStroked size='default' onClick={() => alert("+")} /></span>
</div>
),
value: 'Asia',
key: '0',
children: [
{
label: '中国',
value: 'China',
key: '0-0',
children: [
{
label: '北京',
value: 'Beijing',
key: '0-0-0',
},
{
label: '上海',
value: 'Shanghai',
key: '0-0-1',
},
],
},
],
},
{
label: '北美洲',
value: 'North America',
key: '1',
children: [
{
label: '中国',
value: 'China',
key: '1-0',
children: [
{
label: '北京',
value: 'Beijing2',
key: '1-0-0',
},
{
label: '上海',
value: 'Shanghai',
key: '1-0-1',
},
],
},
],
}
];
const style = {
width: 260,
height: clientHeight - 294,
@ -197,7 +144,8 @@ const ResourceRepository = (props) => {
<span className='tree-icon'>
<IconEditStroked size='default' onClick={() => alert("bianji")} />
<IconMinusCircleStroked size='default' onClick={() => alert("sahnchu")} />
<IconPlusCircleStroked size='default' onClick={() => alert("+")} /></span>
{data.children ? <IconPlusCircleStroked size='default' onClick={() => alert("+")} /> : ''}
</span>
: ''}
</div>
)
@ -228,7 +176,7 @@ const ResourceRepository = (props) => {
<Input suffix={<IconSearch />} showClear onChange={v => ref.current.search(v)} placeholder="请输入"></Input>
<Tree
ref={ref}
treeData={resourceClassify}
treeData={treeData}
defaultExpandAll
filterTreeNode
searchRender={false}

Loading…
Cancel
Save