Kaynağa Gözat

变更和bug修复

laiguoran 5 yıl önce
ebeveyn
işleme
98903b28f1

+ 1 - 1
app/controller/change_controller.js

@@ -214,7 +214,7 @@ module.exports = app => {
                 }
                 const data = JSON.parse(ctx.request.body.data);
                 if (!data.code || data.code === '' || !data.name || data.name === '') {
-                    throw '变更令名称不能为空';
+                    throw '变更令不能为空';
                 }
 
                 const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.name);

+ 20 - 0
app/public/css/main.css

@@ -39,6 +39,15 @@ font-size: .875rem;
   background: #e9ecef;
   font-weight: normal;
 }
+.form-check,.form-check-label{
+  cursor: pointer;
+}
+.input-group-text .group-checkbox[type="checkbox"],.input-group-text .group-checkbox[type="radio"]{
+  margin-top: .3rem;
+}
+.custom-control {
+  min-height: 1.2rem
+}
 /*自定义css*/
 .in-1{padding-left:5px!important}
 .in-2{padding-left:21px!important}
@@ -651,4 +660,15 @@ font-size: .875rem;
 }
 .m-close-side:hover{
   background:#eae9e9;
+}
+.flowtoolsbar{
+  display:none;
+  position: absolute;
+  bottom: 0;
+  left:50%;
+  margin-left:-110px;
+  background-color: #33425b
+}
+.showtoolsbar:hover .flowtoolsbar{
+  display: block
 }

+ 30 - 0
app/public/js/change.js

@@ -72,6 +72,10 @@ class codeRuleSet {
                 }
                 case ruleConst.ruleType.text: {
                     rule.text = $('#text>input', obj).val();
+                    if (rule.text === '') {
+                        toast('文本内容不允许为空。', 'error');
+                        return false;
+                    }
                     preview = rule.text;
                     break;
                 }
@@ -82,6 +86,10 @@ class codeRuleSet {
                 case ruleConst.ruleType.addNo: {
                     rule.format = parseInt($('#format>input', obj).val());
                     rule.start = parseInt($('#text>input', obj).val());
+                    if ($('#text>input', obj).val().length !== rule.format) {
+                        toast('起始编号位数和自动编号位数不一致。', 'error');
+                        return false;
+                    }
                     const s = '0000000000';
                     preview = s.substr(s.length - rule.format);
                     break;
@@ -180,6 +188,28 @@ $(document).ready(() => {
     // 新增变更令 确认
     $('#addOk').click(function () {
         $(this).attr('disabled', true);
+        if ($('#bj-name').val().length === 0) {
+            $('#bj-name').addClass('is-invalid');
+            $('#name_error_msg').show();
+            $('#name_error_msg').text('工程名称不能为空。');
+            $(this).attr('disabled', false);
+            setTimeout(function () {
+                $('#bj-name').removeClass('is-invalid');
+                $('#name_error_msg').hide();
+            }, 2000);
+            return;
+        }
+        if ($('#bj-name').val().length > 100) {
+            $('#bj-name').addClass('is-invalid');
+            $('#name_error_msg').show();
+            $('#name_error_msg').text('名称超过100个字,请缩减名称。');
+            $(this).attr('disabled', false);
+            setTimeout(function () {
+                $('#bj-name').removeClass('is-invalid');
+                $('#name_error_msg').hide();
+            }, 2000);
+            return;
+        }
         const data = {
             code: $('#bj-code').val(),
             name: $('#bj-name').val(),

+ 7 - 0
app/public/js/stage_detail.js

@@ -572,6 +572,13 @@ $(document).ready(() => {
         $('#upload-img-file').trigger('click');
     });
     $('#upload-img-file').change(function () {
+        const file = this.files[0];
+        const ext = file.name.toLowerCase().split('.').splice(-1)[0];
+        const imgStr = /\.(jpg|jpeg|png|bmp|BMP|JPG|PNG|JPEG)$/;
+        if (!imgStr.test(ext)) {
+            toast('请上传正确的图片格式文件', 'error');
+            return
+        }
         if ($(this).val()) {
             const formData = new FormData();
             formData.append('file', this.files[0]);

+ 1 - 1
app/public/js/tender_list.js

@@ -302,7 +302,7 @@ function recursiveGetTenderNodeHtml (node, arr) {
 function getTenderTreeHtml () {
     if (tenderTree.length > 0) {
         const html = [];
-        html.push('<table class="table table-bordered">');
+        html.push('<table class="table table-hover table-bordered">');
         html.push('<thead>', '<tr>');
         html.push('<th>', '名称', '</th>');
         html.push('<th>', '计量模式', '</th>');

+ 7 - 4
app/public/js/tender_list_manage.js

@@ -259,9 +259,12 @@ function recursiveGetTenderNodeHtml (node, arr) {
     html.push('<td tid="' + node.id + '">');
     if (!node.cid) {
         html.push('<a href="#javascript: void(0)" name="edit" class="btn btn-outline-primary btn-sm">编辑</a>');
-        // if (node.ledger_status === auditConst.ledger.status.uncheck) {
-            html.push('<a href="javascript: void(0)" name="del" class="btn btn-outline-danger btn-sm">删除</a>');
-        // }
+        console.log(node.ledger_status);
+        if (node.ledger_status === auditConst.ledger.status.uncheck) {
+            html.push('<a href="javascript: void(0)" name="del" class="btn btn-outline-danger btn-sm ml-1">删除</a>');
+        } else {
+            html.push('<button class="btn btn-outline-secondary btn-sm ml-1" data-toggle="tooltip" data-placement="top" title="请先删除所有期">删除</button>');
+        }
     }
     html.push('</td>');
     html.push('</tr>');
@@ -287,7 +290,7 @@ function getTenderTreeHeaderHtml() {
 function getTenderTreeHtml () {
     if (tenderTree.length > 0) {
         const html = [];
-        html.push('<table class="table table-bordered">');
+        html.push('<table class="table table-hover table-bordered">');
         html.push(getTenderTreeHeaderHtml());
         for (const t of tenderTree) {
             html.push(recursiveGetTenderNodeHtml(t, tenderTree));

+ 1 - 1
app/public/js/tender_list_progress.js

@@ -276,7 +276,7 @@ function recursiveGetTenderNodeHtml (node, arr) {
 function getTenderTreeHtml () {
     if (tenderTree.length > 0) {
         const html = [];
-        html.push('<table class="table table-bordered">');
+        html.push('<table class="table table-hover table-bordered">');
         html.push('<thead>', '<tr>');
         html.push('<th>', '名称', '</th>');
         html.push('<th>', '计量期数', '</th>');

+ 5 - 5
app/service/change.js

@@ -191,7 +191,7 @@ module.exports = app => {
             switch (status) {
                 case 0:// 包含你的所有变更令
                     sql = 'SELECT a.* FROM ?? AS a WHERE a.tid = ? AND ' +
-                        '(a.uid = ? OR (a.status != 1 AND a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? GROUP BY b.cid))) ORDER BY a.in_time DESC';
+                        '(a.uid = ? OR (a.status != 1 AND a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? AND a.times = b.times GROUP BY b.cid))) ORDER BY a.in_time DESC';
                     sqlParam = [this.tableName, tenderId, this.ctx.session.sessionUser.accountId,
                         this.ctx.service.changeAudit.tableName, this.ctx.session.sessionUser.accountId];
                     break;
@@ -210,7 +210,7 @@ module.exports = app => {
                 case 3:// 已完成(所有的)
                 case 4:// 终止(所有的)
                     sql = 'SELECT a.* FROM ?? AS a WHERE ' +
-                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? GROUP BY b.cid) AND ' +
+                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? AND a.times = b.times GROUP BY b.cid) AND ' +
                         'a.status = ? AND a.tid = ? ORDER BY a.in_time DESC';
                     sqlParam = [this.tableName, this.ctx.service.changeAudit.tableName,
                         this.ctx.session.sessionUser.accountId, status, tenderId];
@@ -237,7 +237,7 @@ module.exports = app => {
             switch (status) {
                 case 0:// 包含你的所有变更令
                     const sql = 'SELECT count(*) AS count FROM ?? AS a WHERE a.tid = ? AND ' +
-                        '(a.uid = ? OR a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? GROUP BY b.cid))';
+                        '(a.uid = ? OR a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? AND a.times = b.times GROUP BY b.cid))';
                     const sqlParam = [this.tableName, tenderId, this.ctx.session.sessionUser.accountId,
                         this.ctx.service.changeAudit.tableName, this.ctx.session.sessionUser.accountId];
                     const result = await this.db.query(sql, sqlParam);
@@ -250,7 +250,7 @@ module.exports = app => {
                     });
                 case 5:// 待上报(所有的)PS:取未上报和退回的变更令
                     const sql2 = 'SELECT count(*) AS count FROM ?? AS a WHERE ' +
-                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? GROUP BY b.cid) ' +
+                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? AND a.times = b.times GROUP BY b.cid) ' +
                         'AND (a.status = 1 OR a.status = 5) AND a.tid = ?';
                     const sqlParam2 = [this.tableName, this.ctx.service.changeAudit.tableName,
                         this.ctx.session.sessionUser.accountId, tenderId];
@@ -260,7 +260,7 @@ module.exports = app => {
                 case 3:// 已完成(所有的)
                 case 4:// 终止(所有的)
                     const sql3 = 'SELECT count(*) AS count FROM ?? AS a WHERE ' +
-                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? GROUP BY b.cid) AND a.status = ? AND a.tid = ?';
+                        'a.cid IN (SELECT b.cid FROM ?? AS b WHERE b.uid = ? AND a.times = b.times GROUP BY b.cid) AND a.status = ? AND a.tid = ?';
                     const sqlParam3 = [this.tableName, this.ctx.service.changeAudit.tableName,
                         this.ctx.session.sessionUser.accountId, status, tenderId];
                     const result3 = await this.db.query(sql3, sqlParam3);

+ 1 - 1
app/view/change/index.ejs

@@ -66,7 +66,7 @@
                         <span class="<%- auditConst.auditStatusClass[c.changeAudit.status] %>"><%- auditConst.auditStatusString[c.changeAudit.status] %></span>
                     </td>
                     <% } %>
-                    <td><% if (c.status === auditConst.status.uncheck || c.status === auditConst.status.back) { %><a href="#del-bg" cid="<%= c.cid %>" data-toggle="modal" data-target="#del-bg" class="btn btn-outline-danger btn-sm delete-cid-modal">删除</a><% } %></td>
+                    <td><% if (c.status === auditConst.status.uncheck || (c.status === auditConst.status.back && c.uid === uid)) { %><a href="#del-bg" cid="<%= c.cid %>" data-toggle="modal" data-target="#del-bg" class="btn btn-outline-danger btn-sm delete-cid-modal">删除</a><% } %></td>
                 </tr>
                 <% } %>
                 </tbody>

+ 2 - 1
app/view/change/modal.ejs

@@ -33,12 +33,13 @@
                         <div class="input-group-append" id="autoCodeShow" <% if (codeRule.length === 0) { %>style="display: none"<% } %>>
                             <button class="btn btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
                         </div>
-                        <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在</div>
+                        <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在</div>
                     </div>
                 </div>
                 <div class="form-group">
                     <label>工程名称<b class="text-danger">*</b></label>
                     <input class="form-control" value="" type="text" id="bj-name">
+                    <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
                 </div>
             </div>
             <div class="modal-footer">