|
@@ -14,6 +14,7 @@ const stdDataAddType = {
|
|
next: 3,
|
|
next: 3,
|
|
};
|
|
};
|
|
const audit = require('../const/audit');
|
|
const audit = require('../const/audit');
|
|
|
|
+const accountGroup = require('../const/account_group').group;
|
|
const tenderMenu = require('../../config/menu').tenderMenu;
|
|
const tenderMenu = require('../../config/menu').tenderMenu;
|
|
const measureType = require('../const/tender').measureType;
|
|
const measureType = require('../const/tender').measureType;
|
|
const spreadConst = require('../const/spread');
|
|
const spreadConst = require('../const/spread');
|
|
@@ -44,7 +45,7 @@ module.exports = app => {
|
|
const stage = await ctx.service.stage.getLastestStage(ctx.tender.id, true);
|
|
const stage = await ctx.service.stage.getLastestStage(ctx.tender.id, true);
|
|
const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
return (ctx.tender.data.user_id === ctx.session.sessionUser.accountId) &&
|
|
return (ctx.tender.data.user_id === ctx.session.sessionUser.accountId) &&
|
|
- (ctx.tender.data.ledger_status === audit.ledger.status.checked) &&
|
|
|
|
|
|
+ (ctx.tender.data.ledger_status === audit.revise.status.checked) &&
|
|
(!stage || stage.status === audit.stage.status.checked) &&
|
|
(!stage || stage.status === audit.stage.status.checked) &&
|
|
(!revise || !revise.valid || revise.status === audit.revise.status.checked);
|
|
(!revise || !revise.valid || revise.status === audit.revise.status.checked);
|
|
}
|
|
}
|
|
@@ -195,10 +196,26 @@ module.exports = app => {
|
|
}
|
|
}
|
|
|
|
|
|
async _getDefaultReviseInfoData(ctx, revise) {
|
|
async _getDefaultReviseInfoData(ctx, revise) {
|
|
- const reviseBills = await ctx.service.reviseBills.getData(ctx.tender.id);
|
|
|
|
- const revisePos = await ctx.service.revisePos.getData(ctx.tender.id, revise.id);
|
|
|
|
|
|
+ const reviseBills = revise.bills_file
|
|
|
|
+ ? JSON.parse(await fs.readFileSync(this.ctx.app.baseDir + revise.bills_file, 'utf8'))
|
|
|
|
+ : await ctx.service.reviseBills.getData(ctx.tender.id);
|
|
|
|
+
|
|
|
|
+ const revisePos = revise.pos_file
|
|
|
|
+ ? JSON.parse(await fs.readFileSync(this.ctx.app.baseDir + revise.pos_file, 'utf8'))
|
|
|
|
+ : await ctx.service.revisePos.getData(ctx.tender.id);
|
|
const [ledgerSpread, posSpread] = this._getSpreadSetting(revise);
|
|
const [ledgerSpread, posSpread] = this._getSpreadSetting(revise);
|
|
const [stdBills, stdChapters] = await this.ctx.service.valuation.getValuationStdList(ctx.tender.data.valuation);
|
|
const [stdBills, stdChapters] = await this.ctx.service.valuation.getValuationStdList(ctx.tender.data.valuation);
|
|
|
|
+ const curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
|
|
|
|
+ const auditors = await ctx.service.reviseAudit.getAuditors(revise.id, revise.times);
|
|
|
|
+ console.log(auditors);
|
|
|
|
+ const user = await ctx.service.projectAccount.getAccountInfoById(revise.uid);
|
|
|
|
+ const auditHistory = [];
|
|
|
|
+ if (revise.times > 1) {
|
|
|
|
+ for (let i = 1; i < revise.times; i++) {
|
|
|
|
+ auditHistory.push(await ctx.service.reviseAudit.getAuditors(revise.id, i));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ console.log(auditHistory);
|
|
return {
|
|
return {
|
|
revise: revise, tender: ctx.tender.data,
|
|
revise: revise, tender: ctx.tender.data,
|
|
reviseBills, revisePos, ledgerSpread, posSpread, tenderMenu, measureType,
|
|
reviseBills, revisePos, ledgerSpread, posSpread, tenderMenu, measureType,
|
|
@@ -207,6 +224,10 @@ module.exports = app => {
|
|
jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.ledger.revise),
|
|
jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.ledger.revise),
|
|
stdBills,
|
|
stdBills,
|
|
stdChapters,
|
|
stdChapters,
|
|
|
|
+ curAuditor,
|
|
|
|
+ auditors,
|
|
|
|
+ user,
|
|
|
|
+ auditHistory,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
@@ -234,41 +255,54 @@ module.exports = app => {
|
|
* @returns {Promise<void>}
|
|
* @returns {Promise<void>}
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
- async _getReviseInfo(ctx, revise) {
|
|
|
|
|
|
+ async _getAuditReviseInfo(ctx, revise) {
|
|
const renderData = await this._getDefaultReviseInfoData(ctx, revise);
|
|
const renderData = await this._getDefaultReviseInfoData(ctx, revise);
|
|
- const readOnly = (revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked || revise.uid !== ctx.session.sessionUser.accountId);
|
|
|
|
- if (readOnly) {
|
|
|
|
- renderData.ledgerSpread.readOnly = true;
|
|
|
|
- renderData.posSpread.readOnly = true;
|
|
|
|
- }
|
|
|
|
- renderData.readOnly = readOnly;
|
|
|
|
- if (!readOnly) {
|
|
|
|
- renderData.usedInfo = {};
|
|
|
|
- const lastStage = await ctx.service.stage.getLastestStage(ctx.tender.id, true);
|
|
|
|
- if (lastStage.status === audit.stage.status.checked) {
|
|
|
|
- const usedPreBills = await ctx.service.stageBillsFinal.getUsedBills(ctx.tender.id, lastStage.order);
|
|
|
|
- for (const b of renderData.reviseBills) {
|
|
|
|
- b.used = usedPreBills.indexOf(b.id) >= 0;
|
|
|
|
- }
|
|
|
|
- const usedPrePos = await ctx.service.stagePosFinal.getUsedPos(ctx.tender.id, lastStage.order);
|
|
|
|
- for (const p of renderData.revisePos) {
|
|
|
|
- p.used = usedPrePos.indexOf(p.id) >= 0;
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- const usedPreBills = lastStage.order > 1 ? await ctx.service.stageBillsFinal.getUsedBills(ctx.tender.id, lastStage.order - 1) : [];
|
|
|
|
- const usedCurBills = await ctx.service.stageBills.getStageUsedBills(ctx.tender.id, lastStage.id);
|
|
|
|
- for (const b of renderData.reviseBills) {
|
|
|
|
- b.used = usedPreBills.indexOf(b.id) >= 0 || usedCurBills.indexOf(b.id) >= 0;
|
|
|
|
- }
|
|
|
|
- const usedPrePos = lastStage.order > 1 ? await ctx.service.stagePosFinal.getUsedPos(ctx.tender.id, lastStage.order - 1) : [];
|
|
|
|
- const usedCurPos = await ctx.service.stageBills.getStageUsedPos(ctx.tender.id, lastStage.id);
|
|
|
|
- for (const p of renderData.revisePos) {
|
|
|
|
- p.used = usedPrePos.indexOf(b.id) >= 0 || usedCurPos.indexOf(p.id) >= 0;
|
|
|
|
- }
|
|
|
|
|
|
+ renderData.readOnly = true;
|
|
|
|
+ renderData.ledgerSpread.readOnly = true;
|
|
|
|
+ renderData.posSpread.readOnly = true;
|
|
|
|
+ renderData.history = false;
|
|
|
|
+ renderData.historyRevise = [];
|
|
|
|
+ renderData.curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
|
|
|
|
+ await this.layout('revise/info.ejs', renderData, 'revise/info_modal.ejs');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ async _getDraftReviseInfo(ctx, revise) {
|
|
|
|
+ const renderData = await this._getDefaultReviseInfoData(ctx, revise);
|
|
|
|
+ // 台账只读、使用数据
|
|
|
|
+ renderData.readOnly = false;
|
|
|
|
+ const lastStage = await ctx.service.stage.getLastestStage(ctx.tender.id, true);
|
|
|
|
+ if (lastStage.status === audit.stage.status.checked) {
|
|
|
|
+ const usedPreBills = await ctx.service.stageBillsFinal.getUsedBills(ctx.tender.id, lastStage.order);
|
|
|
|
+ for (const b of renderData.reviseBills) {
|
|
|
|
+ b.used = usedPreBills.indexOf(b.id) >= 0;
|
|
|
|
+ }
|
|
|
|
+ const usedPrePos = await ctx.service.stagePosFinal.getUsedPos(ctx.tender.id, lastStage.order);
|
|
|
|
+ for (const p of renderData.revisePos) {
|
|
|
|
+ p.used = usedPrePos.indexOf(p.id) >= 0;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ const usedPreBills = lastStage.order > 1 ? await ctx.service.stageBillsFinal.getUsedBills(ctx.tender.id, lastStage.order - 1) : [];
|
|
|
|
+ const usedCurBills = await ctx.service.stageBills.getStageUsedBills(ctx.tender.id, lastStage.id);
|
|
|
|
+ for (const b of renderData.reviseBills) {
|
|
|
|
+ b.used = usedPreBills.indexOf(b.id) >= 0 || usedCurBills.indexOf(b.id) >= 0;
|
|
|
|
+ }
|
|
|
|
+ const usedPrePos = lastStage.order > 1 ? await ctx.service.stagePosFinal.getUsedPos(ctx.tender.id, lastStage.order - 1) : [];
|
|
|
|
+ const usedCurPos = await ctx.service.stageBills.getStageUsedPos(ctx.tender.id, lastStage.id);
|
|
|
|
+ for (const p of renderData.revisePos) {
|
|
|
|
+ p.used = usedPrePos.indexOf(b.id) >= 0 || usedCurPos.indexOf(p.id) >= 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // 修订历史
|
|
renderData.history = false;
|
|
renderData.history = false;
|
|
renderData.historyRevise = [];
|
|
renderData.historyRevise = [];
|
|
|
|
+ // 添加审批人相关
|
|
|
|
+ renderData.accountGroup = accountGroup;
|
|
|
|
+ renderData.accountList = await ctx.service.projectAccount.getAllDataByCondition({
|
|
|
|
+ where: { project_id: ctx.session.sessionProject.id, enable: 1 },
|
|
|
|
+ columns: ['id', 'name', 'company', 'role', 'enable', 'is_admin', 'account_group'],
|
|
|
|
+ });
|
|
|
|
+ renderData.auditorList = await ctx.service.reviseAudit.getAuditors(revise.id, revise.times);
|
|
|
|
+ renderData.curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
|
|
await this.layout('revise/info.ejs', renderData, 'revise/info_modal.ejs');
|
|
await this.layout('revise/info.ejs', renderData, 'revise/info_modal.ejs');
|
|
}
|
|
}
|
|
|
|
|
|
@@ -280,10 +314,15 @@ module.exports = app => {
|
|
async info(ctx) {
|
|
async info(ctx) {
|
|
try {
|
|
try {
|
|
const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
- if (revise.status === audit.revise.status.checked) {
|
|
|
|
- await this._getHistoryReviseInfo(ctx);
|
|
|
|
|
|
+ if (!revise) throw '台账修订数据有误';
|
|
|
|
+
|
|
|
|
+ if (revise.uid === ctx.session.sessionUser.accountId &&
|
|
|
|
+ (revise.status === audit.revise.status.uncheck || revise.status === audit.revise.status.checkNo)) {
|
|
|
|
+ await this._getDraftReviseInfo(ctx, revise);
|
|
|
|
+ } else if (revise.status === audit.revise.status.checked) {
|
|
|
|
+ await this._getHistoryReviseInfo(ctx, revise);
|
|
} else {
|
|
} else {
|
|
- await this._getReviseInfo(ctx, revise);
|
|
|
|
|
|
+ await this._getAuditReviseInfo(ctx, revise);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
} catch (err) {
|
|
this.log(err);
|
|
this.log(err);
|
|
@@ -291,41 +330,29 @@ module.exports = app => {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- async _checkRevise() {
|
|
|
|
- const revise = await this.ctx.service.ledgerRevise.getLastestRevise(this.ctx.tender.id);
|
|
|
|
- if (revise.uid !== this.ctx.session.sessionUser.accountId) {
|
|
|
|
- throw '修订数据错误';
|
|
|
|
- } else if (revise.status === audit.revise.status.checking) {
|
|
|
|
- throw '修订审批中,不可修改';
|
|
|
|
- } else if (revise.status === audit.revise.status.checked) {
|
|
|
|
- throw '修订已完成,如需修订台账,请新增修订';
|
|
|
|
- }
|
|
|
|
- this.ctx.revise = revise;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 增、删、上下移、升降级
|
|
* 增、删、上下移、升降级
|
|
* @param ctx
|
|
* @param ctx
|
|
* @returns {Promise<void>}
|
|
* @returns {Promise<void>}
|
|
*/
|
|
*/
|
|
- async _billsBase(ctx, type, data) {
|
|
|
|
|
|
+ async _billsBase(revise, type, data) {
|
|
if (isNaN(data.id) || data.id <= 0) throw '数据错误';
|
|
if (isNaN(data.id) || data.id <= 0) throw '数据错误';
|
|
if (type !== 'add') {
|
|
if (type !== 'add') {
|
|
if (isNaN(data.count) || data.count <= 0) data.count = 1;
|
|
if (isNaN(data.count) || data.count <= 0) data.count = 1;
|
|
}
|
|
}
|
|
switch (type) {
|
|
switch (type) {
|
|
case 'add':
|
|
case 'add':
|
|
- return await ctx.service.reviseBills.addReviseNode(ctx.tender.id, ctx.revise.id, data.id);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.addReviseNode(revise.tid, revise.id, data.id);
|
|
case 'delete':
|
|
case 'delete':
|
|
- return await ctx.service.reviseBills.delete(ctx.tender.id, data.id, data.count);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.delete(revise.tid, data.id, data.count);
|
|
case 'up-move':
|
|
case 'up-move':
|
|
- return await ctx.service.reviseBills.upMoveNode(ctx.tender.id, data.id, data.count);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.upMoveNode(revise.tid, data.id, data.count);
|
|
case 'down-move':
|
|
case 'down-move':
|
|
- return await ctx.service.reviseBills.downMoveNode(ctx.tender.id, data.id, data.count);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.downMoveNode(revise.tid, data.id, data.count);
|
|
case 'up-level':
|
|
case 'up-level':
|
|
- return await ctx.service.reviseBills.upLevelNode(ctx.tender.id, data.id, data.count);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.upLevelNode(revise.tid, data.id, data.count);
|
|
case 'down-level':
|
|
case 'down-level':
|
|
- return await ctx.service.reviseBills.downLevelNode(ctx.tender.id, data.id, data.count);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.downLevelNode(revise.tid, data.id, data.count);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
/**
|
|
@@ -339,26 +366,26 @@ module.exports = app => {
|
|
* @param ctx
|
|
* @param ctx
|
|
* @return {Promise<void>}
|
|
* @return {Promise<void>}
|
|
*/
|
|
*/
|
|
- async _batchInsert(ctx, data) {
|
|
|
|
|
|
+ async _batchInsert(revise, data) {
|
|
if ((isNaN(data.id) || data.id <= 0) || !data.batchType) {
|
|
if ((isNaN(data.id) || data.id <= 0) || !data.batchType) {
|
|
throw '参数错误';
|
|
throw '参数错误';
|
|
}
|
|
}
|
|
switch (data.batchType) {
|
|
switch (data.batchType) {
|
|
case 'child':
|
|
case 'child':
|
|
- return await ctx.service.reviseBills.batchInsertChild(ctx.tender.id, ctx.revise.id, data.id, data.batchData);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.batchInsertChild(revise.tid, revise.id, data.id, data.batchData);
|
|
case 'next':
|
|
case 'next':
|
|
- return await ctx.service.reviseBills.batchInsertNext(ctx.tender.id, ctx.revise.id, data.id, data.batchData);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.batchInsertNext(revise.tid, revise.id, data.id, data.batchData);
|
|
default:
|
|
default:
|
|
throw '参数错误';
|
|
throw '参数错误';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- async _pasteBlock(ctx, data) {
|
|
|
|
|
|
+ async _pasteBlock(revise, data) {
|
|
if ((isNaN(data.id) || data.id <= 0) ||
|
|
if ((isNaN(data.id) || data.id <= 0) ||
|
|
(!data.tid && data.tid <= 0) ||
|
|
(!data.tid && data.tid <= 0) ||
|
|
(!data.block || data.block.length <= 0)) throw '参数错误';
|
|
(!data.block || data.block.length <= 0)) throw '参数错误';
|
|
return await ctx.service.revise.pasteBlock(data.tid, data.id, data.block);
|
|
return await ctx.service.revise.pasteBlock(data.tid, data.id, data.block);
|
|
}
|
|
}
|
|
- async _addStd(ctx, data) {
|
|
|
|
|
|
+ async _addStd(revise, data) {
|
|
if ((isNaN(data.id) || data.id <= 0) || !data.stdType || !data.stdNode) throw '参数错误';
|
|
if ((isNaN(data.id) || data.id <= 0) || !data.stdType || !data.stdNode) throw '参数错误';
|
|
// todo 校验项目是否使用该库的权限
|
|
// todo 校验项目是否使用该库的权限
|
|
|
|
|
|
@@ -393,28 +420,28 @@ module.exports = app => {
|
|
throw '未知添加方式';
|
|
throw '未知添加方式';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- async _addDeal(ctx, data) {
|
|
|
|
|
|
+ async _addDeal(revise, data) {
|
|
if (!data.type || !data.dealBills) throw '数据错误';
|
|
if (!data.type || !data.dealBills) throw '数据错误';
|
|
if (data.type === 'child') {
|
|
if (data.type === 'child') {
|
|
- return await ctx.service.reviseBills.addChild(ctx.tender.id, data.id, data.dealBills, ctx.revise.id);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.addChild(revise.tid, data.id, data.dealBills, revise.id);
|
|
} else if (data.type === 'next') {
|
|
} else if (data.type === 'next') {
|
|
- return await ctx.service.reviseBills.addBillsNode(ctx.tender.id, data.id, data.dealBills, ctx.revise.id);
|
|
|
|
|
|
+ return await this.ctx.service.reviseBills.addBillsNode(revise.tid, data.id, data.dealBills, revise.id);
|
|
} else {
|
|
} else {
|
|
throw '数据错误';
|
|
throw '数据错误';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- async _updatePos(ctx, data) {
|
|
|
|
|
|
+ async _updatePos(revise, data) {
|
|
await this.checkMeasureType(measureType.tz.value);
|
|
await this.checkMeasureType(measureType.tz.value);
|
|
if (!data.posPostType) throw '数据错误';
|
|
if (!data.posPostType) throw '数据错误';
|
|
switch (data.posPostType) {
|
|
switch (data.posPostType) {
|
|
case 'add':
|
|
case 'add':
|
|
- return await ctx.service.revisePos.addPos(ctx.tender.id, ctx.revise.id, data.postData);
|
|
|
|
|
|
+ return await this.ctx.service.revisePos.addPos(revise.tid, revise.id, data.postData);
|
|
case 'update':
|
|
case 'update':
|
|
- return await ctx.service.revisePos.updatePos(ctx.tender.id, data.postData);
|
|
|
|
|
|
+ return await this.ctx.service.revisePos.updatePos(revise.tid, data.postData);
|
|
case 'delete':
|
|
case 'delete':
|
|
- return await ctx.service.revisePos.deletePos(ctx.tender.id, data.postData);
|
|
|
|
|
|
+ return await this.ctx.service.revisePos.deletePos(revise.tid, data.postData);
|
|
case 'paste':
|
|
case 'paste':
|
|
- return await ctx.service.revisePos.pastePosData(ctx.tender.id, ctx.revise.id, data.postData);
|
|
|
|
|
|
+ return await this.ctx.service.revisePos.pastePosData(revise.tid, revise.id, data.postData);
|
|
default:
|
|
default:
|
|
throw '未知操作';
|
|
throw '未知操作';
|
|
}
|
|
}
|
|
@@ -422,12 +449,18 @@ module.exports = app => {
|
|
async update(ctx) {
|
|
async update(ctx) {
|
|
try {
|
|
try {
|
|
if (!ctx.tender.data) throw '标段数据错误';
|
|
if (!ctx.tender.data) throw '标段数据错误';
|
|
- await this._checkRevise();
|
|
|
|
|
|
+ const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
|
|
+ if (revise.uid !== ctx.session.sessionUser.accountId) {
|
|
|
|
+ throw '修订数据错误';
|
|
|
|
+ } else if (revise.status === audit.revise.status.checking) {
|
|
|
|
+ throw '修订审批中,不可修改';
|
|
|
|
+ } else if (revise.status === audit.revise.status.checked) {
|
|
|
|
+ throw '修订已完成,如需修订台账,请新增修订';
|
|
|
|
+ }
|
|
const data = JSON.parse(ctx.request.body.data);
|
|
const data = JSON.parse(ctx.request.body.data);
|
|
if (!data.postType || !data.postData) throw '数据错误';
|
|
if (!data.postType || !data.postData) throw '数据错误';
|
|
const responseData = {err: 0, msg: '', data: {}};
|
|
const responseData = {err: 0, msg: '', data: {}};
|
|
|
|
|
|
- console.log(data);
|
|
|
|
switch (data.postType) {
|
|
switch (data.postType) {
|
|
case 'add':
|
|
case 'add':
|
|
case 'delete':
|
|
case 'delete':
|
|
@@ -435,25 +468,25 @@ module.exports = app => {
|
|
case 'down-move':
|
|
case 'down-move':
|
|
case 'up-level':
|
|
case 'up-level':
|
|
case 'down-level':
|
|
case 'down-level':
|
|
- responseData.data = await this._billsBase(ctx, data.postType, data.postData);
|
|
|
|
|
|
+ responseData.data = await this._billsBase(revise, data.postType, data.postData);
|
|
break;
|
|
break;
|
|
case 'update':
|
|
case 'update':
|
|
- responseData.data = await this.ctx.service.reviseBills.updateCalc(ctx.tender.id, data.postData);
|
|
|
|
|
|
+ responseData.data = await this.ctx.service.reviseBills.updateCalc(revise, data.postData);
|
|
break;
|
|
break;
|
|
case 'batch-insert':
|
|
case 'batch-insert':
|
|
- responseData.data = await this._batchInsert(ctx, data.postData);
|
|
|
|
|
|
+ responseData.data = await this._batchInsert(revise, data.postData);
|
|
break;
|
|
break;
|
|
case 'add-deal':
|
|
case 'add-deal':
|
|
- responseData.data = await this._addDeal(ctx, data.postData);
|
|
|
|
|
|
+ responseData.data = await this._addDeal(revise, data.postData);
|
|
break;
|
|
break;
|
|
case 'add-std':
|
|
case 'add-std':
|
|
- responseData.data = await this._addStd(ctx, data.postData);
|
|
|
|
|
|
+ responseData.data = await this._addStd(revise, data.postData);
|
|
break;
|
|
break;
|
|
case 'paste-block':
|
|
case 'paste-block':
|
|
- responseData.data = await this._pasteBlock(ctx, data.postData);
|
|
|
|
|
|
+ responseData.data = await this._pasteBlock(revise, data.postData);
|
|
break;
|
|
break;
|
|
case 'pos':
|
|
case 'pos':
|
|
- responseData.data = await this._updatePos(ctx, data);
|
|
|
|
|
|
+ responseData.data = await this._updatePos(revise, data);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
throw '未知操作';
|
|
throw '未知操作';
|
|
@@ -465,6 +498,119 @@ module.exports = app => {
|
|
ctx.body = this.ajaxErrorBody(err, '数据错误');
|
|
ctx.body = this.ajaxErrorBody(err, '数据错误');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 新增审批人(Ajax)
|
|
|
|
+ *
|
|
|
|
+ * @param ctx
|
|
|
|
+ * @return {Promise<void>}
|
|
|
|
+ */
|
|
|
|
+ async addAuditor(ctx) {
|
|
|
|
+ try {
|
|
|
|
+ const data = JSON.parse(ctx.request.body.data);
|
|
|
|
+ const id = data.auditorId;
|
|
|
|
+ if (isNaN(id) || id <= 0) {
|
|
|
|
+ throw '参数错误';
|
|
|
|
+ }
|
|
|
|
+ const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
|
|
+ if (!revise) throw '台账修订数据有误';
|
|
|
|
+ // 检查权限等
|
|
|
|
+ if (revise.uid !== ctx.session.sessionUser.accountId) throw '您无权添加审核人';
|
|
|
|
+ if (revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked) {
|
|
|
|
+ throw '当前不允许添加审核人';
|
|
|
|
+ }
|
|
|
|
+ // 检查审核人是否已存在
|
|
|
|
+ const exist = await ctx.service.reviseAudit.getAuditor(revise.id, id, revise.times);
|
|
|
|
+ if (exist) throw '该审核人已存在,请勿重复添加';
|
|
|
|
+
|
|
|
|
+ const result = await ctx.service.reviseAudit.addAuditor(revise, id);
|
|
|
|
+ if (!result) throw '添加审核人失败';
|
|
|
|
+
|
|
|
|
+ const resultData = await ctx.service.reviseAudit.getAuditor(revise.id, id, revise.times);
|
|
|
|
+ ctx.body = {err: 0, msg: '', data: resultData};
|
|
|
|
+ } catch (err) {
|
|
|
|
+ this.log(err, '数据错误');
|
|
|
|
+ ctx.body = this.ajaxErrorBody(err);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 移除审批人(Ajax)
|
|
|
|
+ *
|
|
|
|
+ * @param ctx
|
|
|
|
+ * @return {Promise<void>}
|
|
|
|
+ */
|
|
|
|
+ async removeAuditor(ctx) {
|
|
|
|
+ try {
|
|
|
|
+ const data = JSON.parse(ctx.request.body.data);
|
|
|
|
+ console.log(data);
|
|
|
|
+ const id = data.auditorId instanceof Number ? data.auditorId : this.app._.toNumber(data.auditorId);
|
|
|
|
+ if (isNaN(id) || id <= 0) {
|
|
|
|
+ throw '参数错误';
|
|
|
|
+ }
|
|
|
|
+ const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
|
|
+ if (!revise) throw '台账修订数据有误';
|
|
|
|
+
|
|
|
|
+ const result = await ctx.service.reviseAudit.deleteAuditor(revise, id);
|
|
|
|
+ if (!result) {
|
|
|
|
+ throw '移除审核人失败';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const resultData = await ctx.service.reviseAudit.getAuditors(revise.id, revise.times);
|
|
|
|
+ ctx.body = {err: 0, msg: '', data: resultData};
|
|
|
|
+ } catch (err) {
|
|
|
|
+ this.log(err, '数据错误');
|
|
|
|
+ ctx.body = this.ajaxErrorBody(err);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 上报(post)
|
|
|
|
+ *
|
|
|
|
+ * @param ctx
|
|
|
|
+ * @return {Promise<void>}
|
|
|
|
+ */
|
|
|
|
+ async start(ctx) {
|
|
|
|
+ try {
|
|
|
|
+ const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
|
|
+ if (!revise || revise.status === audit.revise.status.checking || revise.status === audit.revise.status.checked) {
|
|
|
|
+ throw '台账修订数据有误';
|
|
|
|
+ }
|
|
|
|
+ if (revise.uid !== ctx.session.sessionUser.accountId) throw '上报失败';
|
|
|
|
+
|
|
|
|
+ await ctx.service.reviseAudit.start(revise, revise.times);
|
|
|
|
+
|
|
|
|
+ ctx.redirect('/tender/' + ctx.tender.id + '/revise/info');
|
|
|
|
+ } catch (err) {
|
|
|
|
+ this.log(err);
|
|
|
|
+ this.postError(err, '上报失败');
|
|
|
|
+ ctx.redirect('/tender/' + ctx.tender.id + '/revise/info');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 审批(post)
|
|
|
|
+ *
|
|
|
|
+ * @param ctx
|
|
|
|
+ * @return {Promise<void>}
|
|
|
|
+ */
|
|
|
|
+ async check(ctx) {
|
|
|
|
+ try {
|
|
|
|
+ const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id);
|
|
|
|
+ if (!revise || revise.status !== audit.revise.status.checking) throw '台账修订数据有误';
|
|
|
|
+
|
|
|
|
+ const curAudit = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
|
|
|
|
+ if (curAudit.audit_id !== ctx.session.sessionUser.accountId) throw '审批失败';
|
|
|
|
+
|
|
|
|
+ const checkType = parseInt(ctx.request.body.checkType);
|
|
|
|
+ if (!checkType || isNaN(checkType)) throw '提交数据错误';
|
|
|
|
+
|
|
|
|
+ await ctx.service.reviseAudit.check(revise, checkType, ctx.request.body.opinion, revise.times);
|
|
|
|
+
|
|
|
|
+ ctx.redirect('/tender/' + ctx.tender.id + '/revise/info');
|
|
|
|
+ } catch (err) {
|
|
|
|
+ this.log(err);
|
|
|
|
+ this.postError(err, '审批失败');
|
|
|
|
+ ctx.redirect('/tender/' + ctx.tender.id + '/revise/info');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return ReviseController;
|
|
return ReviseController;
|