| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- $(document).ready(() => {
- autoFlashHeight();
- const compareUtils = {
- refreshSpreadSetting(roles, spreadSetting) {
- spreadSetting.cols = [];
- spreadSetting.fieldSufs = [];
- for (const col of spreadSetting.baseCols) {
- spreadSetting.cols.push(col);
- }
- for (const role of roles) {
- spreadSetting.fieldSufs.push(role.active_order);
- for (const ec of spreadSetting.extraCols) {
- const col = JSON.parse(JSON.stringify(ec));
- col.title = _.replace(col.title, '%s', role.name);
- col.field = col.field + '_' + role.active_order;
- spreadSetting.cols.push(col);
- }
- }
- },
- analysisCompareData(datas, roles, extraCols){
- const findHis = function (role, history) {
- let his = null;
- for (const h of history) {
- if (h.audit_times < role.audit_times || (h.audit_times === role.audit_times && h.active_order <= role.active_order)) {
- his = h;
- } else {
- break;
- }
- }
- return his;
- };
- for (const d of datas) {
- if (d.tree_id && !d.tree_is_leaf) continue;
- if (!d.calc_his) d.calc_his = [];
- d.calc_his.sort((x, y) => { return x.audit_times === y.audit_times ? x.active_order - y.active_order : x.audit_times - y.audit_times; });
- for (const r of roles) {
- if (r.latest) {
- for (const col of extraCols){
- d[col.field + '_' + r.active_order] = d[col.field];
- }
- } else {
- const rHis = findHis(r, d.calc_his);
- if (rHis) {
- for (const col of extraCols){
- d[col.field + '_' + r.active_order] = rHis[col.field];
- }
- }
- }
- }
- }
- },
- filterSameRoles(roles) {
- const result = [];
- for (const af of roles) {
- const naf = roles.find(x => { return x.audit_order === af.audit_order && x.active_order > af.active_order; });
- if (!naf) result.push(af);
- }
- return result;
- }
- };
- const converseSpreadSetting = function(setting) {
- setting.baseCols = [];
- setting.extraCols = [];
- let firstExtraCol;
- for (const col of setting.cols) {
- if (calcFields.indexOf(col.field) < 0) {
- if (firstExtraCol) continue;
- col.rowSpan = (setting.headRows + 1) + '';
- setting.baseCols.push(col);
- } else {
- if (!firstExtraCol) {
- firstExtraCol = col;
- col.title = '%s|' + col.title;
- col.rowSpan = '1|' + col.rowSpan;
- } else {
- col.title = '|' + col.title;
- col.colSpan = '|' + col.colSpan;
- col.rowSpan = '|' + col.rowSpan;
- }
- setting.extraCols.push(col);
- }
- }
- firstExtraCol.colSpan = setting.extraCols.length + '|' + firstExtraCol.colSpan;
- setting.headRows = setting.headRows + 1;
- setting.headRowHeight.unshift(setting.headRowHeight[0]);
- setting.cols = [...setting.baseCols];
- return setting;
- };
- 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,
- calcFields: ['yf_tp', 'sf_tp', 'pay_tp', 'cut_tp', 'yf_excl_tax_tp', 'sf_excl_tax_tp', 'end_yf_tp', 'end_sf_tp', 'end_pay_tp', 'end_cut_tp', 'end_yf_excl_tax_tp', 'end_sf_excl_tax_tp'],
- keys: ['id', 'stage_id', 'tree_id'],
- };
- this.tree = createNewPathTree('ledger', this.treeSetting);
- this.spreadSetting = converseSpreadSetting(bllsSpreadSetting);
- sjsSettingObj.setFxTreeStyle(this.spreadSetting, sjsSettingObj.FxTreeStyle.phasePay);
- this.ckBillsSpread = window.location.pathname + '-billsSelect';
- this.initSpread();
- }
- initSpread() {
- SpreadJsObj.initSheet(this.sheet, this.spreadSetting);
- this.spread.bind(spreadNS.Events.SelectionChanged, this.selectionChanged);
- this.spread.bind(spreadNS.Events.topRowChanged, this.topRowChanged);
- }
- loadRelaData() {
- SpreadJsObj.saveTopAndSelect(this.sheet, this.ckBillsSpread);
- const select = SpreadJsObj.getSelectObject(this.sheet);
- detailObj.loadDetailData(select);
- }
- initSpreadSetting(roles = []) {
- compareUtils.refreshSpreadSetting(roles, this.spreadSetting);
- SpreadJsObj.initSheet(this.sheet, this.spreadSetting);
- }
- loadData(datas, roles) {
- this.initSpreadSetting(roles);
- compareUtils.analysisCompareData(datas, roles, this.spreadSetting.extraCols);
- this.tree.loadDatas(datas);
- this.tree.setting.calcFields = [];
- for (const r of roles) {
- for (const col of this.spreadSetting.extraCols) {
- this.tree.setting.calcFields.push(col.field + '_' + r.active_order);
- }
- }
- treeCalc.calculateAll(this.tree);
- SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Tree, this.tree);
- SpreadJsObj.loadTopAndSelect(this.sheet, this.ckBillsSpread);
- }
- // 事件
- selectionChanged(e, info) {
- if (info.newSelections) {
- if (!info.oldSelections || info.newSelections[0].row !== info.oldSelections[0].row) {
- billsObj.loadRelaData();
- }
- }
- }
- topRowChanged(e, info) {
- SpreadJsObj.saveTopAndSelect(info.sheet, billsObj.ckBillsSpread);
- }
- }
- const billsObj = new BillsObj();
- class DetailObj {
- constructor() {
- this.spread = SpreadJsObj.createNewSpread($('#detail-spread')[0]);
- this.sheet = this.spread.getActiveSheet();
- this.data = createAncillaryGcl({ id: 'id', masterId: 'ledger_id', sort: [['d_order', 'asc']] });
- this.dealSpreadSetting = converseSpreadSetting(dealSpreadSetting);
- this.commonSpreadSetting = converseSpreadSetting(commonSpreadSetting);
- this.initSpread();
- }
- initSpread() {
- SpreadJsObj.initSheet(this.sheet, this.commonSpreadSetting);
- }
- refreshSpreadSetting(roles, spreadSetting) {
- spreadSetting.cols = [];
- spreadSetting.fieldSufs = [];
- for (const col of spreadSetting.baseCols) {
- spreadSetting.cols.push(col);
- }
- for (const role of roles) {
- spreadSetting.fieldSufs.push(role.active_order);
- for (const ec of spreadSetting.extraCols) {
- const col = JSON.parse(JSON.stringify(ec));
- col.title = _.replace(col.title, '%s', role.name);
- col.field = col.field + '_' + role.active_order;
- spreadSetting.cols.push(col);
- }
- }
- }
- initSpreadSetting(roles = []) {
- this.refreshSpreadSetting(roles, this.commonSpreadSetting);
- this.refreshSpreadSetting(roles, this.dealSpreadSetting);
- SpreadJsObj.initSheet(this.sheet, this.commonSpreadSetting);
- }
- loadData(datas, roles) {
- this.initSpreadSetting(roles);
- compareUtils.analysisCompareData(datas, roles, this.dealSpreadSetting.extraCols);
- this.data.loadDatas(datas);
- this.loadDetailData(SpreadJsObj.getSelectObject(billsObj.sheet));
- }
- refreshSheet() {
- if (this.sheet.zh_data.length === 0) {
- this.reloadDetailData();
- } else {
- SpreadJsObj.reLoadSheetData(this.sheet);
- }
- }
- reloadDetailData() {
- const data = this.billsNode ? this.data.getPartData(this.billsNode.id) || [] : [];
- SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Data, data);
- }
- loadDetailData(bills) {
- detailObj.billsNode = bills;
- const spreadSetting = bills && bills.is_deal ? this.dealSpreadSetting : this.commonSpreadSetting;
- SpreadJsObj.initSheet(this.sheet, spreadSetting);
- this.reloadDetailData();
- SpreadJsObj.locateRow(this.sheet, 0, false);
- }
- }
- const detailObj = new DetailObj();
- const searchObj = $.ledgerSearch({
- selector: '#search',
- searchRangeStr: '编号/名称',
- ledger: {
- billsTree: billsObj.tree,
- getLedgerPos: function(node) { return detailObj.data.getPartData(node.id); },
- posId: 'id',
- },
- resultSpreadSetting: {
- cols: [
- {title: '编号', field: 'code', hAlign: 0, width: 90, formatter: '@'},
- {title: '名称', field: 'name', width: 150, hAlign: 0, formatter: '@'},
- {title: '单位', field: 'unit', width: 50, hAlign: 1, formatter: '@'},
- ],
- emptyRows: 0,
- headRows: 1,
- headRowHeight: [32],
- headColWidth: [30],
- defaultRowHeight: 21,
- headerFont: '12px 微软雅黑',
- font: '12px 微软雅黑',
- selectedBackColor: '#fffacd',
- readOnly: true,
- },
- locate: function(cur) {
- if (!cur.lid) return;
- SpreadJsObj.locateTreeNode(billsObj.sheet, cur.lid, true);
- billsObj.loadRelaData();
- if (cur.pid) {
- const pIndex = detailObj.sheet.zh_data.findIndex(x => { return x.id === cur.pid; });
- if (pIndex >= 0) SpreadJsObj.locateRow(detailObj.sheet, pIndex);
- }
- },
- });
- // 加载数据
- postData('load', { filter: 'billsCompare;detailCompare;auditFlow' }, function(result) {
- const filter = true;
- const roles = filter ? compareUtils.filterSameRoles(result.auditFlow) : result.auditFlow;
- billsObj.loadData(result.billsCompare, roles);
- detailObj.loadData(result.detailCompare, roles);
- });
- // 展开收起标准清单
- $('a', '#side-menu').bind('click', function (e) {
- e.preventDefault();
- const tab = $(this), tabPanel = $(tab.attr('content'));
- // 展开工具栏、切换标签
- if (!tab.hasClass('active')) {
- // const close = $('.active', '#side-menu').length === 0;
- $('a', '#side-menu').removeClass('active');
- $('.tab-content .tab-select-show.tab-pane.active').removeClass('active');
- tab.addClass('active');
- tabPanel.addClass('active');
- // $('.tab-content .tab-pane').removeClass('active');
- showSideTools(tab.hasClass('active'));
- if (tab.attr('content') === '#search') {
- searchObj.spread.refresh();
- }
- } else { // 收起工具栏
- tab.removeClass('active');
- tabPanel.removeClass('active');
- showSideTools(tab.hasClass('active'));
- }
- billsObj.spread.refresh();
- detailObj.spread.refresh();
- });
- $.divResizer({
- select: '#detail-spr',
- callback: function () {
- billsObj.spread.refresh();
- detailObj.spread.refresh();
- }
- });
- // 工具栏spr
- $.divResizer({
- select: '#right-spr',
- callback: function () {
- billsObj.spread.refresh();
- detailObj.spread.refresh();
- searchObj.spread.refresh();
- }
- });
- // 导航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();
- detailObj.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);
- });
|