فهرست منبع

资料归集,排序

MaiXinRong 1 سال پیش
والد
کامیت
87ec237de7

+ 8 - 2
app/controller/file_controller.js

@@ -126,11 +126,17 @@ module.exports = app => {
         async loadFile(ctx) {
             try {
                 const data = JSON.parse(ctx.request.body.data);
+                const order = data.order.split('|');
+                if (order.length !== 2) throw '加载文件错误';
+                if (order[0] !== 'filename' && order[0] !== 'create_time') throw '加载文件错误';
+                if (order[1] !== 'asc' && order[1] !== 'desc') throw '加载文件错误';
+
                 const result = await ctx.service.file.getFiles({
                     where: { filing_id: data.filing_id, is_deleted: 0 },
+                    orders: [order],
                     limit: data.count,
-                    offset: (data.page-1)*data.count
-                });
+                    offset: (data.page-1)*data.count,
+                }, order);
                 ctx.body = { err: 0, msg: '', data: result };
             } catch (err) {
                 ctx.log(err);

+ 38 - 5
app/public/js/file_detail.js

@@ -20,6 +20,21 @@ $(document).ready(function() {
             this.expandCache = cache ? _.uniq(cache.split(',')) : [];
             this.curFilingKey = 'cur-filing-' + window.location.pathname.split('/')[2];
             $('#filing').height($(".sjs-height-0").height()-$('.d-flex',".sjs-height-0").height());
+            this.fileOrderKey = 'fileOrder';
+            this.fileOrder = getLocalCache(this.fileOrderKey) || 'create_time|desc';
+        }
+        refreshFileOrderButton() {
+            const orderBy = this.fileOrder.split('|');
+            const field = orderBy[0], sort = orderBy[1];
+            const buttons = $('[name=file-sort]');
+            for (const b of buttons) {
+                const curField = b.getAttribute('field');
+                if (curField === field) {
+                    $(b).html(`<i class="fa fa-sort-amount-${sort}" aria-hidden="true"></i>`).attr('tag', `${curField}|${sort === 'asc' ? 'desc' : 'asc'}`);
+                } else {
+                    $(b).html('<i class="fa fa-sort" aria-hidden="true">').attr('tag', `${curField}|desc`);
+                }
+            }
         }
         calcTotalFileCount() {
             this.dragTree.recursiveFun(this.dragTree.children, x => {
@@ -135,7 +150,7 @@ $(document).ready(function() {
             const needFiles = Math.min(page*this.pageCount, node.source_node.file_count);
             if (node.source_node.files && needFiles <= node.source_node.files.length) return;
 
-            const files = await postDataAsync('file/load', { filing_id: node.id, page, count: this.pageCount });
+            const files = await postDataAsync('file/load', { filing_id: node.id, page, count: this.pageCount, order: this.fileOrder });
             files.forEach(x => {
                 const file = node.source_node.files.find(f => {return x.id === f.id; });
                 if (file) {
@@ -144,9 +159,9 @@ $(document).ready(function() {
                     node.source_node.files.push(x);
                 }
             });
-            node.source_node.files.sort((x, y) => {
-                return x.create_time - y.create_time;
-            });
+            // node.source_node.files.sort((x, y) => {
+            //     return x.create_time - y.create_time;
+            // });
         }
         addSiblingFiling(node) {
             const self = this;
@@ -226,8 +241,8 @@ $(document).ready(function() {
                 formData.append('file[]', file);
             }
             postDataWithFile('file/upload', formData, function (data) {
-                filingObj.curFiling.source_node.files.unshift(...data.files);
                 filingObj.updateFilingFileCount(filingObj.curFiling, data.filing.file_count);
+                filingObj.curFiling.source_node.files.unshift(...data.files);
                 filingObj.refreshPages();
                 filingObj.refreshFilesTable();
                 if (callback) callback();
@@ -389,6 +404,20 @@ $(document).ready(function() {
                 }
             });
         }
+        _clearAllFileCache() {
+            const nodes = this.filingTree.getNodes();
+            for (const node of nodes) {
+                if (node.children && node.children.length > 0) continue;
+                if (node.source_node.files) node.source_node.files.length = 0;
+            }
+        }
+        changeFileOrder(fileOrder) {
+            this.fileOrder = fileOrder;
+            setLocalCache(this.fileOrderKey, fileOrder);
+            this.refreshFileOrderButton();
+            this._clearAllFileCache();
+            this.setCurFiling(this.curFiling);
+        }
     }
     const levelTreeSetting = {
         treeId: 'filing',
@@ -516,6 +545,10 @@ $(document).ready(function() {
 
         filingObj.addChildFiling(filingObj.curFiling);
     });
+    $('[name=file-sort]').click(function() {
+        const tag = this.getAttribute('tag');
+        filingObj.changeFileOrder(tag);
+    });
     // $('#del-filing-btn').click(() => {
     //     if (!filingObj.curFiling) return;
     //     if (filingObj.curFiling.source_node.is_fixed) {

+ 25 - 2
app/public/js/stage.js

@@ -4128,6 +4128,10 @@ $(document).ready(() => {
                                 const billsPos = self.findBillsPos(curChange, cb);
                                 if (billsPos) data.bills.push({ ...billsPos, cid: cb.cid, cbid: cb.id })
                             }
+                            if (data.bills.length === 0) {
+                                toastr.warning('无可调用的清单或计量单元');
+                                return;
+                            }
                             postData(window.location.pathname + '/auto-use-change', data, function(result) {
                                 if (result.pos) {
                                     stagePos.loadCurStageData(result.pos.curStageData);
@@ -4262,9 +4266,20 @@ $(document).ready(() => {
                 return null;
             } else if (changeBills.gcl_id) {
                 const node = stageTree.nodes.find(x => {return x.id === changeBills.gcl_id});
+                if (node.settle_status === settleStatus.finish) return null;
+
                 posData = stagePos.getLedgerPos(node.id) || [];
                 const changePos = posData.find(x => { return x.name === changeBills.bwmx; });
-                return { lid: node.id, pid: changePos ? changePos.id : (posData.length > 0 ? posData[0].id : '-1') };
+                if (changePos.settle_status) return null;
+
+                let defaultPos;
+                if (posData.length > 0) {
+                    defaultPos = posData.length > 0 ? posData.find(x => { return !x.settle_status}) : null;
+                    if (!defaultPos) return null;
+                } else {
+                    defaultPos = { id: '-1' };
+                }
+                return { lid: node.id, pid: changePos ? changePos.id : defaultPos.id };
             } else {
                 const cb = {
                     b_code: changeBills.code || '',
@@ -4274,6 +4289,7 @@ $(document).ready(() => {
                 };
                 for (const node of stageTree.nodes) {
                     if (node.children && node.children.length > 0) continue;
+                    if (node.settle_status === settleStatus.finish) return null;
 
                     const b = {
                         b_code: node.b_code || '',
@@ -4283,7 +4299,14 @@ $(document).ready(() => {
                     };
                     if (_.isMatch(cb, b)) {
                         posData = stagePos.getLedgerPos(node.id) || [];
-                        return { lid: node.id, pid: posData.length > 0 ? posData[0].id : '-1' };
+                        let defaultPos;
+                        if (posData.length > 0) {
+                            defaultPos = posData.length > 0 ? posData.find(x => { return !x.settle_status}) : null;
+                            if (!defaultPos) return null;
+                        } else {
+                            defaultPos = { id: '-1' };
+                        }
+                        return { lid: node.id, pid: defaultPos.id };
                     }
                 }
                 return null;

+ 1 - 1
app/service/file.js

@@ -38,7 +38,7 @@ module.exports = app => {
         }
 
         async getFiles(condition) {
-            condition.orders = [['create_time', 'desc']];
+            // condition.orders = [['create_time', 'desc']];
             const result = await this.getAllDataByCondition(condition);
             this.analysisFiles(result);
             return result;

+ 4 - 2
app/service/settle.js

@@ -174,8 +174,10 @@ module.exports = app => {
             try {
                 const settleInfo = await this.getDataById(id);
                 await transaction.delete(this.tableName, { id });
-                await transaction.delete(this.ctx.service.settleAudit.tableName, { sid: id });
-                // await transaction.delete(this.ctx.service.settleAuditAss.tableName, { sid: id });
+                await transaction.delete(this.ctx.service.settleAudit.tableName, { settle_id: id });
+                await transaction.delete(this.ctx.service.settleBills.tableName, { settle_id: id });
+                await transaction.delete(this.ctx.service.settlePos.tableName, { settle_id: id });
+                await transaction.delete(this.ctx.service.settleSelect.tableName, { settle_id: id });
                 // 记录删除日志
                 await this.ctx.service.projectLog.addProjectLog(transaction, projectLogConst.type.settle, projectLogConst.status.delete, `第${settleInfo.settle_order}期`);
                 await transaction.commit();

+ 2 - 1
app/service/settle_audit.js

@@ -762,7 +762,7 @@ module.exports = app => {
                 const updateData = settle.curAuditors.map(x => {
                     return {
                         id: x.id, audit_status: auditConst.settle.status.uncheck,
-                        audit_time: null, opinion: null,
+                        audit_time: null, opinion: '',
                     }
                 });
                 await transaction.updateRows(this.tableName, updateData);
@@ -986,6 +986,7 @@ module.exports = app => {
             // 3.审批人撤回审批退回上一人,并删除退回人,增加流程,并回到它审批中,并更新计量期状态为审批中
             // 4.审批人撤回退回原报操作,删除新增的审批流,增加流程,回滚到它审批中
             // 5.会签审批人撤回审批通过(还有其他审批人未审批通过),仅修改本人流程状态
+            console.log(settle.cancancel);
             if (settle.cancancel === 5) {
                 await this._auditCheckCancelAnd(settle);
             } else {

+ 2 - 2
app/view/file/file.ejs

@@ -52,9 +52,9 @@
                         <thead>
                         <tr class="text-center">
                             <th width="60px">选择</th>
-                            <th>文件名称</th>
+                            <th>文件名称 <span name="file-sort" field="filename" tag="filename|desc"><i class="fa fa-sort" aria-hidden="true"></i></span></th>
                             <th width="10%">上传人</th>
-                            <th width="20%">上传时间</th>
+                            <th width="20%">上传时间 <span name="file-sort" field="create_time" tag="create_time|asc"><i class="fa fa-sort-amount-desc" aria-hidden="true"></i></span></th>
                             <th width="10%">文件类型</th>
                         </tr>
                         </thead>

+ 2 - 2
app/view/settle/audit_btn.ejs

@@ -2,7 +2,7 @@
     <% if (ctx.settle.audit_status === auditConst.status.uncheck) { %>
         <% if (ctx.session.sessionUser.accountId === ctx.settle.user_id) { %>
             <a id="sub-sp-btn" href="javascript: void(0);" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm btn-block">上报审批</a>
-            <% if (ctx.settle.order === ctx.settle.highOrder) { %>
+            <% if (ctx.settle.settle_order === ctx.settle.highOrder) { %>
                 <a href="#del-qi" data-toggle="modal" data-target="#del-qi" class="btn btn-outline-danger btn-sm btn-block mt-5">删除本期</a>
             <% } %>
         <% } else { %>
@@ -31,7 +31,7 @@
         <a href="#sp-list"  data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm btn-block text-muted sp-list-btn">审批退回</a>
         <% if (ctx.session.sessionUser.accountId === ctx.settle.user_id) { %>
             <a href="#sp-list" data-type="show" data-toggle="modal" data-target="#sp-list"  class="btn btn-primary btn-sm btn-block sp-list-btn">重新上报</a>
-            <% if (ctx.settle.order === ctx.settle.highOrder) { %>
+            <% if (ctx.settle.settle_order === ctx.settle.highOrder) { %>
                 <a href="#del-qi" data-toggle="modal" data-target="#del-qi" class="btn btn-outline-danger btn-sm btn-block mt-5">删除本期</a>
             <% } %>
         <% } %>

+ 2 - 2
app/view/settle/audit_modal.ejs

@@ -573,11 +573,11 @@
                 <h5 class="modal-title">删除期</h5>
             </div>
             <div class="modal-body">
-                <h5>确认删除「第<%= ctx.settle.order %>期」?</h5>
+                <h5>确认删除「第<%= ctx.settle.settle_order %>期」?</h5>
                 <h5>删除后,数据无法恢复,请谨慎操作。</h5>
             </div>
             <div class="modal-footer">
-                <input type="hidden" name="stage_id" value="<%= ctx.settle.id %>">
+                <input type="hidden" name="settle_id" value="<%= ctx.settle.id %>">
                 <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>" />
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
                 <button type="submit" class="btn btn-danger btn-sm">确定删除</button>

+ 9 - 2
db_script/test_query.js

@@ -12,8 +12,8 @@ const saveJSON = async function(obj, file) {
 
 const loadReportArchiveData = async function() {
     //const tid = 4417, sOrder = 2;
-    // const tid = 3698, sOrder = 7;
-    const tid = 5161, sOrder = 11;
+    const tid = 3698, sOrder = 7;
+    // const tid = 5161, sOrder = 11;
     const stage = await querySql('SELECT * FROM zh_stage where tid = ? and `order` = ?', [tid, sOrder]);
     const rptArchive = await querySql('SELECT * FROM zh_rpt_archive where stage_id = ?', [stage[0].id]);
     for (const ra of rptArchive) {
@@ -29,6 +29,12 @@ const loadReportArchiveData = async function() {
         //     }
         // }
         // await saveJSON(roleContent, BaseUtil.getFileName('roleContent.json'));
+        if (rptArchive.indexOf(ra) === 0) {
+            const rptTpl = await querySql('SELECT * FROM zh_rpt_tpl where id = ?', [ra.content[0].rpt_id]);
+            rptTpl[0].rpt_content = rptTpl[0].rpt_content ? JSON.parse(rptTpl[0].rpt_content) : {};
+            console.log('rptTpl.json');
+            await saveJSON(rptTpl[0], BaseUtil.getFileName('rptTpl.json'));
+        }
     }
     const roleContent = [];
     const rptRole = await querySql('SELECT * FROM zh_role_rpt_rel WHERE sid = ?', [stage[0].id]);
@@ -37,6 +43,7 @@ const loadReportArchiveData = async function() {
     }
     await saveJSON(roleContent, BaseUtil.getFileName('roleContent.json'));
 
+
     const rptSign = await querySql('SELECT * FROM zh_rpt_archive_encryption where stage_id = ?', [stage[0].id]);
     for (const rs of rptSign) {
         rs.content = rs.content ? JSON.parse(rs.content) : [];