Bläddra i källkod

签名上传和更改

laiguoran 4 år sedan
förälder
incheckning
606eb7cc64
4 ändrade filer med 73 tillägg och 5 borttagningar
  1. 28 1
      app/controller/tender_controller.js
  2. 33 1
      app/public/js/shenpi.js
  3. 4 3
      app/router.js
  4. 8 0
      app/service/ledger_cooperation.js

+ 28 - 1
app/controller/tender_controller.js

@@ -18,6 +18,8 @@ const accountGroup = require('../const/account_group').group;
 const accountPermission = require('../const/account_permission');
 const measureType = require('../const/tender').measureType;
 const billsPosConvert = require('../lib/bills_pos_convert');
+const path = require('path');
+const sendToWormhole = require('stream-wormhole');
 
 module.exports = app => {
 
@@ -896,6 +898,31 @@ module.exports = app => {
                 ctx.body = this.ajaxErrorBody(err, '保存审批流程设置失败');
             }
         }
+
+        /**
+         * 签名,上传图片 (Ajax)
+         * @param ctx
+         * @return {Promise<void>}
+         */
+        async saveCooperateSign(ctx) {
+            try {
+                const stream = await ctx.getFileStream();
+                const create_time = Date.parse(new Date()) / 1000;
+                const id = stream.fields.id;
+                const fileInfo = path.parse(stream.filename);
+                const fileName = path.join('public/upload', ctx.tender.id.toString(), 'sign', 'signImg_' + create_time + fileInfo.ext);
+                await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, 'app', fileName));
+                if (stream) {
+                    await sendToWormhole(stream);
+                }
+                await ctx.service.ledgerCooperation.saveSign(id, fileName);
+                ctx.body = { err: 0, msg: '', data: fileName };
+            } catch (err) {
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: null };
+            }
+        }
+
         /**
          * 拷贝设置
          * @param {object} ctx - 上下文
@@ -938,7 +965,7 @@ module.exports = app => {
             try {
                 const data = JSON.parse(ctx.request.body.data);
                 const result = await ctx.service.ledgerTag.update(data);
-                ctx.body = {err: 0, msg: '', data: result};
+                ctx.body = { err: 0, msg: '', data: result };
             } catch (err) {
                 this.log(err);
                 ctx.body = this.ajaxErrorBody(err, '书签数据错误');

+ 33 - 1
app/public/js/shenpi.js

@@ -904,6 +904,37 @@ $(document).ready(function () {
         });
     });
 
+    // 上传图片
+    $('body').on('click', '.upload-img', function () {
+        $(this).siblings('input').trigger('click');
+        // $('.upload-img-file').trigger('click');
+    });
+    $('body').on('change', '.upload-img-file', function () {
+        const file = this.files[0];
+        const ext = file.name.toLowerCase().split('.').splice(-1)[0];
+        const imgStr = /(png|PNG)$/;
+        if (!imgStr.test(ext)) {
+            toastr.error('请上传签名大小为600x300,格式PNG透明背景。');
+            return
+        }
+        if ($(this).val()) {
+            var _self = $(this);
+            const formData = new FormData();
+            formData.append('id', $(this).data('id'));
+            formData.append('file', this.files[0]);
+            postDataWithFile(window.location.pathname + '/save-sign', formData, function (result) {
+                _self.siblings('img').attr('src', '/' + result);
+                _self.siblings('img').show();
+                _self.siblings('a').removeClass('btn btn-outline-primary btn-sm').addClass('d-inline-flex').text('更改');
+                _self.val('');
+                const lcindex = _.findIndex(ledger_cooperation_list, { id: _self.data('id') });
+                ledger_cooperation_list[lcindex].sign_path = result;
+                ledger_cooperation_list.splice(lcindex, 1, ledger_cooperation_list[lcindex]);
+            });
+        }
+    });
+
+
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
@@ -963,7 +994,8 @@ function setLeftTable(ledgerList, coolist, uid, title) {
 
     let html = '';
     for (const sc of showCooList) {
-        const pichtml = sc.sign_path ? `<img src="${sc.sign_path}" width="60"><a href="javascript:void(0);" class="d-inline-flex">更改</a>` : '<input type="file">';
+        const pichtml = sc.sign_path ? `<img src="/${sc.sign_path}" width="60"><input type="file" data-id="${sc.id}" class="upload-img-file" style="display: none;"><a href="javascript: void(0);" class="d-inline-flex upload-img">更改</a>`
+            : `<img src="" style="display: none" width="60"><input type="file" data-id="${sc.id}" class="upload-img-file" style="display: none;"><a href="javascript: void(0);" class="btn btn-outline-primary btn-sm upload-img">上传签名</a>`;
         html += `<tr>` +
             `<td>${sc.code} ${sc.name}</td>` +
             `<td><p class="mb-0">${sc.pwd}</p><a href="javascript:void(0);" data-lid="${sc.ledger_id}" data-uid="${sc.user_id}" data-pwd="${sc.pwd}" class="edit-pwd">修改</a> <a href="javascript:void(0)" data-lid="${sc.ledger_id}" data-uid="${sc.user_id}" class="del-pwd text-danger">移除</a></td>` +

+ 4 - 3
app/router.js

@@ -112,10 +112,11 @@ module.exports = app => {
     app.post('/tender/:id/save', sessionAuth, tenderCheck, 'tenderController.saveTenderInfo');
     app.post('/tender/rule', sessionAuth, 'tenderController.rule');
     app.post('/tender/:id/rule/first', sessionAuth, tenderCheck, 'tenderController.ruleFirst');
-    app.get('/tender/:id/shenpi', sessionAuth, tenderCheck, 'tenderController.shenpiSet');
-    app.post('/tender/:id/shenpi/save', sessionAuth, tenderCheck, 'tenderController.saveTenderInfoShenpi');
-    app.post('/tender/:id/shenpi/audit/save', sessionAuth, tenderCheck, 'tenderController.saveShenpiAudit');
+    app.get('/tender/:id/shenpi', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.shenpiSet');
+    app.post('/tender/:id/shenpi/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveTenderInfoShenpi');
+    app.post('/tender/:id/shenpi/audit/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveShenpiAudit');
     app.post('/tender/:id/shenpi/ledger/load', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.loadLedgerData');
+    app.post('/tender/:id/shenpi/save-sign', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveCooperateSign');
     app.post('/tender/:id/copy-setting', sessionAuth, tenderCheck, 'tenderController.copyTender');
 
     // 预付款

+ 8 - 0
app/service/ledger_cooperation.js

@@ -49,6 +49,14 @@ module.exports = app => {
             return await this.db.update(this.ctx.service.ledgerCooperation.tableName, updateData, options);
         }
 
+        async saveSign(id, path) {
+            const updateData = {
+                id,
+                sign_path: path,
+            };
+            return await this.db.update(this.tableName, updateData);
+        }
+
         async getValidData(tid, uid) {
             const condition = {where: {tid: tid, status: 1}};
             if (uid) {