123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- $(document).ready(function() {
- autoFlashHeight();
- class BillsObj {
- constructor() {
- this.spread = SpreadJsObj.createNewSpread($('#bills-spread')[0]);
- this.sheet = this.spread.getActiveSheet();
- this.treeSetting = {
- id: 'tree_id',
- pid: 'tree_pid',
- order: 'tree_order',
- level: 'tree_level',
- isLeaf: 'tree_is_leaf',
- fullPath: 'tree_full_path',
- rootId: -1,
- };
- this.spreadSetting = {
- baseCols: [
- {title: '编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 230, formatter: '@', cellType: 'tree'},
- {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 185, formatter: '@'},
- {title: '规格', colSpan: '1', rowSpan: '2', field: 'spec', hAlign: 0, width: 150, formatter: '@'},
- {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 50, formatter: '@', cellType: 'unit'},
- {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number'},
- ],
- extraCols: [
- {title: '%s|数量', colSpan: '2|1', rowSpan: '1|1', field: 'qty_{%d}', hAlign: 2, width: 60, type: 'Number', },
- {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'tp_{%d}', hAlign: 2, width: 60, type: 'Number', },
- ],
- emptyRows: 3,
- headRows: 2,
- headRowHeight: [25, 25],
- defaultRowHeight: 21,
- headerFont: '12px 微软雅黑',
- font: '12px 微软雅黑',
- readOnly: true,
- };
- this.spreadSetting.getColor = function (sheet, data, row, col, defaultColor) {
- function checkDiffer(data) {
- const fieldSufs = sheet.zh_setting.fieldSufs;
- if (fieldSufs.length <= 1) return false;
- const base = data['qty_' + fieldSufs[0]];
- for (let i = 1; i< fieldSufs.length; i++) {
- const compare = data['qty_' + fieldSufs[i]];
- if ((base || compare) && (compare!== base)) return true;
- }
- }
- return checkDiffer(data) ? spreadColor.safe.differ : defaultColor;
- };
- this.tree = createNewPathTree('ledger', this.treeSetting);
- this.ckBillsSpread = window.location.pathname + '-billsSelect';
- this.initSpread();
- }
- refreshSpreadSetting(roles) {
- this.spreadSetting.cols = [];
- this.spreadSetting.fieldSufs = [];
- for (const col of this.spreadSetting.baseCols) {
- this.spreadSetting.cols.push(col);
- }
- for (const role of roles) {
- this.spreadSetting.fieldSufs.push(role.order);
- for (const ec of this.spreadSetting.extraCols) {
- const col = JSON.parse(JSON.stringify(ec));
- col.title = _.replace(col.title, '%s', role.name);
- col.field = _.replace(col.field, '{%d}', role.order);
- this.spreadSetting.cols.push(col);
- }
- }
- }
- initSpread(roles = []) {
- this.refreshSpreadSetting(roles);
- SpreadJsObj.initSheet(this.sheet, this.spreadSetting);
- }
- analysisCompareData(datas, roles){
- const findHis = function (role, history) {
- let his = null;
- for (const h of history) {
- if (h.times < role.times || (h.times === role.times && h.order <= role.order)) {
- his = h;
- } else {
- break;
- }
- }
- return his;
- };
- for (const d of datas) {
- if (!d.tree_is_leaf) continue;
- d.cur_his.sort((x, y) => { return x.times === y.times ? x.order - y.order : x.times - y.times; });
- for (const r of roles) {
- if (r.latest) {
- d[`qty_${r.order}`] = d.cur_qty;
- d[`tp_${r.order}`] = d.cur_tp;
- } else {
- const rHis = findHis(r, d.cur_his);
- if (rHis) {
- d[`qty_${r.order}`] = rHis.qty;
- d[`tp_${r.order}`] = rHis.tp;
- }
- }
- }
- }
- }
- loadData(datas, roles) {
- // todo 整理数据
- this.initSpread(roles);
- this.analysisCompareData(datas, roles);
- this.tree.loadDatas(datas);
- this.tree.setting.calcFields = roles.map(x => { return `tp_${x.order}`});
- treeCalc.calculateAll(this.tree);
- SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Tree, this.tree);
- SpreadJsObj.loadTopAndSelect(this.sheet, this.ckBillsSpread);
- }
- }
- const billsObj = new BillsObj();
- // 加载安全生产费数据
- postData('load', { filter: 'billsCompare;auditFlow' }, function(result) {
- billsObj.loadData(result.billsCompare, result.auditFlow);
- });
- // 导航Menu
- $.subMenu({
- menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
- toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
- key: 'menu.1.0.0',
- miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
- callback: function (info) {
- if (info.mini) {
- $('.panel-title').addClass('fluid');
- $('#sub-menu').removeClass('panel-sidebar');
- } else {
- $('.panel-title').removeClass('fluid');
- $('#sub-menu').addClass('panel-sidebar');
- }
- autoFlashHeight();
- billsObj.spread.refresh();
- }
- });
- // 显示层次
- (function (select, sheet) {
- $(select).click(function () {
- if (!sheet.zh_tree) return;
- const tag = $(this).attr('tag');
- const tree = sheet.zh_tree;
- setTimeout(() => {
- showWaitingView();
- switch (tag) {
- case "1":
- case "2":
- case "3":
- case "4":
- tree.expandByLevel(parseInt(tag));
- SpreadJsObj.refreshTreeRowVisible(sheet);
- break;
- case "last":
- tree.expandByCustom(() => { return true; });
- SpreadJsObj.refreshTreeRowVisible(sheet);
- break;
- }
- closeWaitingView();
- }, 100);
- });
- })('a[name=showLevel]', billsObj.sheet);
- });
|