|
@@ -0,0 +1,147 @@
|
|
|
+'use strict';
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * @author Mai
|
|
|
+ * @date 2021/10/27
|
|
|
+ * @version
|
|
|
+ */
|
|
|
+
|
|
|
+module.exports = app => {
|
|
|
+ class BudgetController extends app.BaseController {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 概算投资
|
|
|
+ *
|
|
|
+ * @param ctx
|
|
|
+ * @returns {Promise<void>}
|
|
|
+ */
|
|
|
+ async list(ctx) {
|
|
|
+ try {
|
|
|
+ const renderData = {
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.budget.list),
|
|
|
+ };
|
|
|
+ renderData.budgetList = await ctx.service.budget.getAllDataByCondition({
|
|
|
+ where: { pid: ctx.session.sessionProject.id },
|
|
|
+ orders: [['name', 'asc']],
|
|
|
+ });
|
|
|
+ renderData.budgetStd = await ctx.service.budgetStd.getDataByProjectId(ctx.session.sessionProject.id);
|
|
|
+ await this.layout('budget/list.ejs', renderData, 'budget/list_modal.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ ctx.log(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async add(ctx) {
|
|
|
+ try {
|
|
|
+ const data = JSON.parse(ctx.request.body.data);
|
|
|
+ if (!data.name || data.name.length > 100) throw '项目名称有误';
|
|
|
+ if (!data.std_id) throw '概预算标准有误';
|
|
|
+ const result = await ctx.service.budget.add(data);
|
|
|
+ ctx.body = { err: 0, msg: '', data: result };
|
|
|
+ } catch (err) {
|
|
|
+ ctx.log(err);
|
|
|
+ ctx.ajaxErrorBody(err, '新建项目失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async del(ctx) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ async save(ctx) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ async compare(ctx) {
|
|
|
+ try {
|
|
|
+ const renderData = {
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.budget.compare),
|
|
|
+ };
|
|
|
+ await this.layout('budget/compare.ejs', renderData, 'budget/compare_modal.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ ctx.log(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _getSpreadSetting(type) {
|
|
|
+ const spreadSetting = {
|
|
|
+ cols: [
|
|
|
+ {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 150, formatter: '@', cellType: 'tree'},
|
|
|
+ {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 230, formatter: '@'},
|
|
|
+ {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 230, formatter: '@'},
|
|
|
+ {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 50, formatter: '@', cellType: 'unit'},
|
|
|
+ {title: '清单数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '设计数量|数量1', colSpan: '2|1', rowSpan: '1|1', field: 'dgn_qty1', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '|数量2', colSpan: '|1', rowSpan: '|1', field: 'dgn_qty2', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '经济指标', colSpan: '1', rowSpan: '2', field: 'dgn_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '金额', colSpan: '1', rowSpan: '2', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 100, formatter: '@'},
|
|
|
+ {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 100, formatter: '@'},
|
|
|
+ ],
|
|
|
+ emptyRows: 3,
|
|
|
+ headRows: 2,
|
|
|
+ headRowHeight: [25, 25],
|
|
|
+ defaultRowHeight: 21,
|
|
|
+ headerFont: '12px 微软雅黑',
|
|
|
+ font: '12px 微软雅黑',
|
|
|
+ readOnly: true,
|
|
|
+ };
|
|
|
+ // todo 根据设置判断预算是否需要清单
|
|
|
+ if (type !== 'yu') {
|
|
|
+ spreadSetting.cols = spreadSetting.cols.filter(x => {
|
|
|
+ return ['b_code', 'quantity'].indexOf(x.field) < 0;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return spreadSetting;
|
|
|
+ }
|
|
|
+ _getRelaService(type) {
|
|
|
+ switch(type) {
|
|
|
+ case 'gu': return ctx.serivce.budgetGu;
|
|
|
+ case 'gai': return ctx.serivce.budgetGai;
|
|
|
+ case 'yu': return ctx.serivce.budgetYu;
|
|
|
+ default: return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ async detail(ctx) {
|
|
|
+ try {
|
|
|
+ const renderData = {
|
|
|
+ spreadSetting: this._getSpreadSetting(ctx.params.btype),
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.budget.detail),
|
|
|
+ needGcl: ctx.params.btype === 'yu',
|
|
|
+ };
|
|
|
+ [renderData.stdBills, renderData.stdChapters] = await ctx.service.budgetStd.getStdList(ctx.budget.std_id, ctx.params.btype);
|
|
|
+ await this.layout('budget/detail.ejs', renderData, 'budget/detail_modal.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ ctx.log(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async detailLoad(ctx) {
|
|
|
+ try {
|
|
|
+ const relaService = this._getRelaService(ctx.params.btype);
|
|
|
+ ctx.body = {
|
|
|
+ err: 0,
|
|
|
+ msg: '',
|
|
|
+ data: await relaService.getData(ctx.budget.id),
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ ctx.log(err);
|
|
|
+ ctx.ajaxErrorBody(err, '获取数据错误');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async detailUpdate(ctx) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ async detailUploadExcel(ctx) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return BudgetController;
|
|
|
+};
|