MaiXinRong 4 недель назад
Родитель
Сommit
b767f4507a

+ 6 - 0
app/const/spread.js

@@ -31,6 +31,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         },
         pos: {
             cols: [],
@@ -41,6 +42,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         }
     },
     tz_stage_set: {
@@ -64,6 +66,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         }
     },
     gcl_ledger_set:{
@@ -75,6 +78,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         },
         pos: {
             cols: [],
@@ -85,6 +89,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         }
     },
     gcl_stage_set: {
@@ -108,6 +113,7 @@ const EmptySpreadSetting = {
             defaultRowHeight: 21,
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
+            frozenLineColor: '#93b5e4',
         }
     },
 };

+ 2 - 0
app/controller/setting_controller.js

@@ -1184,6 +1184,8 @@ module.exports = app => {
             try {
                 const data = JSON.parse(ctx.request.body.data);
                 const [billsSpread, posSpread] = this.ctx.service.projectSpread.generateRelaSpread(data.sType, data.colSet);
+                if (billsSpread.frozenField) billsSpread.frozenColCount = billsSpread.cols.findIndex(x => {return x.field === billsSpread.frozenField; }) + 1;
+                if (posSpread.frozenField) posSpread.frozenColCount = posSpread.cols.findIndex(x => {return x.field === posSpread.frozenField; }) + 1;
                 ctx.body = { err: 0, msg: '', data: { billsSpread, posSpread } };
             } catch (error) {
                 ctx.log(error);

+ 4 - 0
app/lib/spread_setting.js

@@ -99,6 +99,8 @@ const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
 
     // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
     // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
+    if (ledger.frozenField) ledger.frozenColCount = ledger.cols.findIndex(x => {return x.field === ledger.frozenField; }) + 1;
+    if (pos.frozenField) pos.frozenColCount = pos.cols.findIndex(x => {return x.field === pos.frozenField; }) + 1;
 
     return [ledger, pos];
 };
@@ -134,6 +136,8 @@ const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) {
 
     // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
     // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
+    if (ledger.frozenField) ledger.frozenColCount = ledger.cols.findIndex(x => {return x.field === ledger.frozenField; }) + 1;
+    if (pos.frozenField) pos.frozenColCount = pos.cols.findIndex(x => {return x.field === pos.frozenField; }) + 1;
 
     return [ledger, pos];
 };

+ 34 - 17
app/public/js/project_spread.js

@@ -11,8 +11,9 @@ $(document).ready(() => {
             { title: '可显示列', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 200, formatter: '@', readOnly: true, },
             { title: '项目节\n清单', colSpan: '1', rowSpan: '2', field: 'bills_valid', hAlign: 1, width: 80, readOnly: true, cellType: 'signalCheckbox', show: canCheck, relaField: 'bills', },
             { title: '计量单元', colSpan: '1', rowSpan: '2', field: 'pos_valid', hAlign: 1, width: 80, readOnly: true, cellType: 'signalCheckbox', show: canCheck, relaField: 'pos', },
-            { title: '配置项|是否显示', colSpan: '2|1', rowSpan: '1|1', field: 'valid', hAlign: 1, width: 60, cellType: 'checkbox', readOnly: true },
+            { title: '配置项|是否显示', colSpan: '3|1', rowSpan: '1|1', field: 'valid', hAlign: 1, width: 60, cellType: 'checkbox', readOnly: true },
             { title: '|别名', colSpan: '|1', rowSpan: '1|1', field: 'alias', hAlign: 0, width: 120, formatter: '@',  },
+            { title: '|冻结', colSpan: '|1', rowSpan: '1|1', field: 'frozen', hAlign: 1, width: 60, cellType: 'checkbox'  },
         ],
         headRows: 2,
         headRowHeight: [25, 25],
@@ -28,6 +29,7 @@ $(document).ready(() => {
                 case 'valid':
                     return data.fixed.indexOf('valid') >= 0 ? '#eeeeee' : defaultColor;
                 case 'alias':
+                case 'forzen':
                     return data.fixed.indexOf(col.field) >= 0 ? '#eeeeee' : defaultColor;
                 default:
                     return defaultColor;
@@ -122,6 +124,9 @@ $(document).ready(() => {
                 case 'alias':
                     info.cancel = node.fixed.indexOf('alias') >= 0;
                     break;
+                case 'frozen':
+                    info.cancel = node.fixed.indexOf('frozen') >= 0;
+                    break;
             }
         },
         editEnded: function (e, info) {
@@ -178,22 +183,31 @@ $(document).ready(() => {
             if (!info.sheet.zh_setting) return;
 
             const col = info.sheet.zh_setting.cols[info.col];
-            if (col.field.indexOf('valid') < 0) return;
-
             const node = SpreadJsObj.getSelectObject(info.sheet);
-            if (col.field === 'pos_valid' && !node.pos) return;
-            if (col.field === 'bills_valid' && !node.bills) return;
-            if (node.fixed.indexOf('valid') >= 0) return;
-            if (col.field === 'valid') {
-                node.valid = !node.valid;
-                node.bills_valid = node.valid && node.bills;
-                node.pos_valid = node.valid && node.pos;
-            } else {
-                node[col.field] = !node[col.field];
-                if (node.bills_valid || node.pos_valid) node.valid = 1;
-                if (!node.bills_valid && !node.pos_valid) node.valid = 0;
+            if (col.field.indexOf('valid') >= 0) {
+                if (col.field === 'pos_valid' && !node.pos) return;
+                if (col.field === 'bills_valid' && !node.bills) return;
+                if (node.fixed.indexOf('valid') >= 0) return;
+                if (col.field === 'valid') {
+                    node.valid = !node.valid;
+                    node.bills_valid = node.valid && node.bills;
+                    node.pos_valid = node.valid && node.pos;
+                } else {
+                    node[col.field] = !node[col.field];
+                    if (node.bills_valid || node.pos_valid) node.valid = 1;
+                    if (!node.bills_valid && !node.pos_valid) node.valid = 0;
+                }
+                SpreadJsObj.reLoadRowData(info.sheet, info.row);
+            } else if (col.field === 'frozen') {
+                const preFrozenNode = info.sheet.zh_data.find(x => { return !!x.frozen; });
+                if (preFrozenNode && preFrozenNode.key === node.key) {
+                    node.frozen = 0;
+                } else {
+                    if (preFrozenNode) preFrozenNode.frozen = 0;
+                    node.frozen = 1;
+                }
+                SpreadJsObj.reloadColData(info.sheet, info.col);
             }
-            SpreadJsObj.reLoadRowData(info.sheet, info.row);
         },
     };
 
@@ -208,7 +222,7 @@ $(document).ready(() => {
     });
 
     const getCurrentColSet = function() {
-        const cols = { key: 0, name: 1, bills_valid: 2, pos_valid: 3, valid: 4, alias: 5};
+        const cols = { key: 0, name: 1, bills_valid: 2, pos_valid: 3, valid: 4, alias: 5, frozen: 6};
         const rowCount = colSheet.getRowCount();
         const result = [];
         for (let iRow = 0; iRow < rowCount; iRow++) {
@@ -230,9 +244,12 @@ $(document).ready(() => {
                 const alias = colSheet.getText(iRow, cols.alias);
                 if (alias) colSet.alias = alias;
             }
+            if (baseCol.fixed.indexOf('frozen') < 0) {
+                const frozen = colSheet.getText(iRow, cols.frozen);
+                if (frozen) colSet.frozen = frozen;
+            }
             result.push(colSet);
         }
-        console.log(result);
         return result;
     };
     let previewSpreadSetting, previewBillsSpread, previewPosSpread;

+ 1 - 0
app/service/project_spread.js

@@ -72,6 +72,7 @@ module.exports = app => {
                     }
                 }
                 spreadSetting.cols.push(...baseCols);
+                if (spreadType === 'bills' && col.frozen) spreadSetting.frozenField = baseCols[baseCols.length - 1].field;
             }
             return spreadSetting;
         }