瀏覽代碼

feat: 预付款列表管理员增加删除功能

lanjianrong 3 年之前
父節點
當前提交
ecaa943a6f
共有 4 個文件被更改,包括 43 次插入11 次删除
  1. 5 8
      app/controller/advance_controller.js
  2. 23 2
      app/service/advance.js
  3. 11 0
      app/service/advance_file.js
  4. 4 1
      app/view/advance/index.ejs

+ 5 - 8
app/controller/advance_controller.js

@@ -246,18 +246,15 @@ module.exports = app => {
                     throw '参数错误';
                 }
                 // 检查权限等
-                if (advance.uid !== ctx.session.sessionUser.accountId) {
+                if (!ctx.session.sessionUser.is_admin && advance.uid !== ctx.session.sessionUser.accountId) {
                     throw '您无权删除';
                 }
-                if (advance.status !== auditConst.status.uncheck && advance.status !== auditConst.status.checkNo) {
-                    console.log(advance.status !== auditConst.status.uncheck);
-                    console.log(advance.status !== auditConst.status.checkNo);
+                if (!ctx.session.sessionUser.is_admin && advance.status !== auditConst.status.uncheck && advance.status !== auditConst.status.checkNo) {
+                    // console.log(advance.status !== auditConst.status.uncheck);
+                    // console.log(advance.status !== auditConst.status.checkNo);
                     throw '当前不允许删除';
                 }
-                const isDeleted = await ctx.service.advance.deleteAdvance(id);
-                if (!isDeleted) {
-                    throw '删除失败,请重试';
-                }
+                await ctx.service.advance.deleteAdvance(id, ctx.tender.id);
                 ctx.body = { err: 0, msg: '' };
             } catch (error) {
                 this.log(error);

+ 23 - 2
app/service/advance.js

@@ -1,6 +1,8 @@
 'use strict';
 
 const auditConst = require('../const/audit').advance;
+const path = require('path');
+const fs = require('fs');
 
 module.exports = app => {
     class Advance extends app.BaseService {
@@ -205,9 +207,28 @@ module.exports = app => {
         /**
          * 删除预付款记录
          * @param {String} id 预付款id
+         * @param {String} tid 标段id
          */
-        async deleteAdvance(id) {
-            return await this.deleteById(id);
+        async deleteAdvance(id, tid) {
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 删除预付款记录
+                await transaction.delete(this.tableName, { id, tid });
+                // 删除附件
+                const fileInfo = await this.db.select(this.ctx.service.advanceFile.tableName, { where: { vid: id, tid } });
+                await transaction.delete(this.ctx.service.advanceFile.tableName, { vid: id, tid });
+                // 先删除文件
+                for (let i = 0; i < fileInfo.length; i++) {
+                    const file = fileInfo[i];
+                    fs.unlinkSync(path.resolve(this.app.baseDir, './app', file.filepath));
+                }
+                // 删除审批记录
+                await transaction.delete(this.ctx.service.advanceAudit.tableName, { vid: id, tid });
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
         }
     }
     return Advance;

+ 11 - 0
app/service/advance_file.js

@@ -50,6 +50,17 @@ module.exports = app => {
         async delete(id) {
             return await this.deleteById(id);
         }
+
+        /**
+         * 根据预付款id删除附件
+         * @param {String} vid - 预付款id
+         * @return {void}
+         */
+        async deleteByVid(vid) {
+            await this.db.delete(this.tableName, {
+                vid,
+            });
+        }
     }
     return AdvanceFile;
 };

+ 4 - 1
app/view/advance/index.ejs

@@ -62,7 +62,7 @@
                         </tr>
                     </thead>
                     <tbody id="advanceList">
-                        <% advanceList.forEach(item => { %>
+                        <% advanceList.forEach((item, idx) => { %>
                             <tr>
                                 <td><a href="/tender/<%- ctx.tender.id %>/advance/<%- item.id %>/detail" data-id="<%- item.id %>">第<%- item.order %>期</a></td>
                                 <td><%- item.pay_ratio %>%</td>
@@ -88,6 +88,9 @@
                                     <% } else {%>
                                         <span class="<%- auditConst.statusClass[item.status] %>"><%- auditConst.statusString[item.status] %></span>
                                     <% } %>
+                                    <% if (item.status === auditConst.status.checked && !!ctx.session.sessionUser.is_admin && item.order === advanceList.length) { %>
+                                      <a href="del-qi" class="btn btn-outline-danger btn-sm ml-1" data-toggle="modal" data-target="#del-qi" data-id="<%- item.id %>" data-order="<%- item.order %>">删除</a>
+                                    <% } %>
                                 </td>
                             </tr>
                         <% }) %>