Browse Source

静态图片模式

laiguoran 3 years ago
parent
commit
ccbf0d4672
5 changed files with 138 additions and 29 deletions
  1. 39 0
      app/controller/tender_controller.js
  2. 1 0
      app/router.js
  3. 13 3
      app/view/tender/detail.ejs
  4. 83 26
      app/view/tender/detail_modal.ejs
  5. 2 0
      sql/update.sql

+ 39 - 0
app/controller/tender_controller.js

@@ -571,10 +571,12 @@ module.exports = app => {
                     // reviseNum,
                     stage_total,
                     hadMap,
+                    map_pic: tenderALLInfo.map_pic,
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.tender.tenderInfo),
                     gclChapter,
                     tenderMapList,
                     map_json,
+                    fujianOssPath: ctx.app.config.fujianOssPath,
                 };
                 if (ctx.session.sessionUser.is_admin) {
                     renderData.tourists = await ctx.service.tenderTourist.getTourists(tender.id);
@@ -1367,6 +1369,43 @@ module.exports = app => {
             }
         }
 
+        /**
+         * 上传静态图
+         *
+         * @param {object} ctx - egg全局变量
+         * @return {void}
+         */
+        async uploadMap(ctx) {
+            const responseData = {
+                err: 0, msg: '', data: null,
+            };
+            try {
+                const stream = await ctx.getFileStream();
+                const create_time = Date.parse(new Date()) / 1000;
+                const fileInfo = path.parse(stream.filename);
+                const filepath = `app/public/upload/${ctx.tender.id}/map/${create_time}${fileInfo.ext}`;
+                await ctx.app.fujianOss.put(ctx.app.config.fujianOssFolder + filepath, stream);
+                await sendToWormhole(stream);
+                const tenderInfo = await ctx.service.tender.getDataById(ctx.tender.id);
+                const oldMapPic = tenderInfo && tenderInfo.map_pic ? tenderInfo.map_pic : null;
+                const result = await ctx.service.tender.update({ map_pic: filepath }, { id: ctx.tender.id });
+                if (result) {
+                    // 移除旧的map_pic oss
+                    if (oldMapPic) {
+                        await ctx.app.fujianOss.delete(ctx.app.config.fujianOssFolder + oldMapPic);
+                    }
+                    responseData.data = { map_pic: filepath };
+                } else {
+                    throw '添加数据库失败';
+                }
+            } catch (err) {
+                this.log(err);
+                responseData.err = 1;
+                responseData.msg = err;
+            }
+            ctx.body = responseData;
+        }
+
         async loadData(ctx) {
             try {
                 const data = JSON.parse(ctx.request.body.data);

+ 1 - 0
app/router.js

@@ -162,6 +162,7 @@ module.exports = app => {
     app.post('/tender/:id/copy-setting', sessionAuth, tenderCheck, 'tenderController.copyTender');
     app.post('/tender/:id/tourist/audit/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveTourist');
     app.post('/tender/:id/map/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveMap');
+    app.post('/tender/:id/map/upload', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.uploadMap');
     app.post('/tender/:id/load', sessionAuth, tenderCheck, 'tenderController.loadData');
     app.post('/tender/:id/saveRela', sessionAuth, tenderCheck, 'tenderController.saveRelaData');
 

+ 13 - 3
app/view/tender/detail.ejs

@@ -184,7 +184,17 @@
                             <div class="col-6 pl-0">
                                 <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
                                     <% if (hadMap === 1) { %>
-                                        <div class="card-body" id="map" style="height: 388px; width: 100%;">
+                                        <div class="card-body" id="map" style="height: 388px; width: 100%;"></div>
+                                    <% } else if (hadMap === 2) { %>
+                                        <div style="height: 388px; width: 100%;">
+                                            <% if (map_pic) { %>
+                                            <img style="display:block;width:100%;height: 388px;margin:0 auto;" src="<%- fujianOssPath + map_pic %>">
+                                            <% } else { %>
+                                            <div class="p-5 text-center text-muted">
+                                                <img src="/public/images/nulllogo.png" />
+                                                <div class="pt-3">请上传你的静态图片</div>
+                                            </div>
+                                            <% } %>
                                         </div>
                                     <% } else  { %>
                                         <div class="card-header"><h6 class="mb-0">章节计量情况图</h6></div>
@@ -342,7 +352,7 @@
                             <!--期进度表-->
                             <div class="col-6">
                                 <div class="card mb-3 <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %> bottom-height">
-                                    <% if (hadMap === 1) { %>
+                                    <% if (hadMap === 1 || hadMap === 2) { %>
                                         <div class="card-header"><h6 class="mb-0">章节计量情况表</h6></div>
                                         <div class="card-body">
                                             <div id="jlchart3" style="height: 300px; width: 100%;"></div>
@@ -358,7 +368,7 @@
                             <!--月进度表-->
                             <div class="col-6 pl-0">
                                 <div class="card mb-3 bottom-height <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
-                                    <% if (hadMap === 1) { %>
+                                    <% if (hadMap === 1 || hadMap === 2) { %>
                                         <div class="card-header">
                                             <ul class="nav nav-tabs card-header-tabs panel-card-tabs <% if (ctx.tender.info.display.dayMode) { %>nav-white-tabs<% } %>" id="change-echarts">
                                                 <li class="nav-item">

+ 83 - 26
app/view/tender/detail_modal.ejs

@@ -2083,7 +2083,7 @@
                                         </div>
                                         <div>
                                             <a href="#bd-set-11-1" class="show-map-edit" data-toggle="modal" data-target="#bd-set-11-1" data-dismiss="modal">编辑坐标</a>
-                                            <a href="javascript:void(0);" class="show-map-edit" style="display:none;">上传图片</a>
+                                            <a href="#bd-set-11-5" class="show-map-edit" data-toggle="modal" data-target="#bd-set-11-5" data-dismiss="modal" style="display:none;">上传图片</a>
                                         </div>
                                     </div>
                                 </div>
@@ -2100,6 +2100,37 @@
         </div>
     </div>
 </div>
+<!--上传图片-->
+<div class="modal fade" id="bd-set-11-5" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">上传静态图片</h5>
+            </div>
+            <div class="modal-body">
+                <p><input value="选择图片" type="file" id="upload-map-pic" /></p>
+                <p>预览</p>
+                <div id="show-map-pic" style="border: 1px solid rgba(0,0,0,.125);height: 388px; width: 100%;">
+                    <% if (map_pic) { %>
+                        <img style="display:block;width:100%;height: 387px;margin:0 auto;" src="<%- fujianOssPath + map_pic %>">
+                    <% } else { %>
+                        <div class="p-5 text-center text-muted">
+                            <img src="/public/images/nulllogo.png" />
+                            <div class="pt-3">暂无静态图片</div>
+                        </div>
+                    <% } %>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <a href="javascript:void(0)" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</a>
+                <a href="#bd-set-11" class="btn btn-sm btn-outline-primary show-map-edit" data-toggle="modal" data-target="#bd-set-11" onclick="back=true" data-dismiss="modal">返回概况设置</a>
+                <% if (hadMap === 2) { %>
+                    <button type="button" class="btn btn-sm btn-success" onclick="window.location.reload()" >刷新显示</button>
+                <% } %>
+            </div>
+        </div>
+    </div>
+</div>
 <!--地图路线-->
 <div class="modal fade" id="bd-set-11-1" data-backdrop="static">
     <div class="modal-dialog" role="document">
@@ -2192,34 +2223,40 @@
 
 <script>
     const hadMap = parseInt(<%- hadMap %>);
+    const fujianOssPath = JSON.parse(unescape('<%- escape(JSON.stringify(fujianOssPath)) %>'));
+    let back = false;
     $(function () {
-        $('#bd-set-11').on('show.bs.modal', function () {
-            if (hadMap === 1 || hadMap === 2) {
-                $('#bd-set-11').find('.card').eq(1).addClass('card-gk-active');
-                $('#bd-set-11').find('.card').eq(1).find('.sel-width').removeClass('sel-gary').addClass('sel-blue');
-                $('#bd-set-11').find('.card').eq(0).removeClass('card-gk-active');
-                $('#bd-set-11').find('.card').eq(0).find('.sel-width').removeClass('sel-blue').addClass('sel-gary');
-                $('#bd-set-11').find('.card').eq(1).attr('data-value', hadMap);
-                if (hadMap === 1) {
-                    $('.change-map').eq(0).removeClass('btn-outline-primary').addClass('btn-secondary');
-                    $('.change-map').eq(1).removeClass('btn-secondary').addClass('btn-outline-primary');
-                    $('.show-map-edit').eq(0).show();
-                    $('.show-map-edit').eq(1).hide();
-                    $('#bd-set-11').find('.card').eq(1).find('img').attr('src', '/public/images/dongtai.png');
-                } else {
-                    $('.change-map').eq(1).removeClass('btn-outline-primary').addClass('btn-secondary');
-                    $('.change-map').eq(0).removeClass('btn-secondary').addClass('btn-outline-primary');
-                    $('.show-map-edit').eq(1).show();
-                    $('.show-map-edit').eq(0).hide();
-                    $('#bd-set-11').find('.card').eq(1).find('img').attr('src', '/public/images/jingtai.png');
+        $('#bd-set-11').on('shown.bs.modal', function () {
+            if (!back) {
+                if (hadMap === 1 || hadMap === 2) {
+                    $('#bd-set-11').find('.card').eq(1).addClass('card-gk-active');
+                    $('#bd-set-11').find('.card').eq(1).find('.sel-width').removeClass('sel-gary').addClass('sel-blue');
+                    $('#bd-set-11').find('.card').eq(0).removeClass('card-gk-active');
+                    $('#bd-set-11').find('.card').eq(0).find('.sel-width').removeClass('sel-blue').addClass('sel-gary');
+                    $('#bd-set-11').find('.card').eq(1).attr('data-value', hadMap);
+                    if (hadMap === 1) {
+                        $('.change-map').eq(0).removeClass('btn-outline-primary').addClass('btn-secondary');
+                        $('.change-map').eq(1).removeClass('btn-secondary').addClass('btn-outline-primary');
+                        $('.show-map-edit').eq(0).show();
+                        $('.show-map-edit').eq(1).hide();
+                        $('#bd-set-11').find('.card').eq(1).find('img').attr('src', '/public/images/dongtai.png');
+                    } else {
+                        $('.change-map').eq(1).removeClass('btn-outline-primary').addClass('btn-secondary');
+                        $('.change-map').eq(0).removeClass('btn-secondary').addClass('btn-outline-primary');
+                        $('.show-map-edit').eq(1).show();
+                        $('.show-map-edit').eq(0).hide();
+                        $('#bd-set-11').find('.card').eq(1).find('img').attr('src', '/public/images/jingtai.png');
+                    }
+                } else if (hadMap === 3) {
+                    $('#bd-set-11').find('.card').eq(0).addClass('card-gk-active');
+                    $('#bd-set-11').find('.card').eq(0).find('.sel-width').removeClass('sel-gary').addClass('sel-blue');
+                    $('#bd-set-11').find('.card').eq(1).removeClass('card-gk-active');
+                    $('#bd-set-11').find('.card').eq(1).find('.sel-width').removeClass('sel-blue').addClass('sel-gary');
                 }
-            } else if (hadMap === 3) {
-                $('#bd-set-11').find('.card').eq(0).addClass('card-gk-active');
-                $('#bd-set-11').find('.card').eq(0).find('.sel-width').removeClass('sel-gary').addClass('sel-blue');
-                $('#bd-set-11').find('.card').eq(1).removeClass('card-gk-active');
-                $('#bd-set-11').find('.card').eq(1).find('.sel-width').removeClass('sel-blue').addClass('sel-gary');
+                $('#map-value').val(hadMap);
+            } else {
+                back = false;
             }
-            $('#map-value').val(hadMap);
         })
         $('body').on('click', '#bd-set-11 .select-map', function () {
             // const val = parseInt($(this).data('value'));
@@ -2250,6 +2287,26 @@
             }
         });
 
+        $('#upload-map-pic').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)) {
+                toastr.error('请上传正确的图片格式文件');
+                $('#upload-map-pic').val('');
+                return
+            }
+            if ($(this).val()) {
+                const formData = new FormData();
+                formData.append('file', this.files[0]);
+                postDataWithFile('/tender/' + tenderId + '/map/upload', formData, function (result) {
+                    const html = '<img style="display:block;width:100%;height: 387px;margin:0 auto;" src="'+ fujianOssPath + result.map_pic +'">';
+                    $('#show-map-pic').html(html);
+                    $('#upload-map-pic').val('');
+                });
+            }
+        })
+
         $('#save-select-map').click(function () {
             $(this).attr('disabled', true);
             const val = parseInt($('#map-value').val());

+ 2 - 0
sql/update.sql

@@ -3,3 +3,5 @@ ADD COLUMN `bills_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '清单条
 ADD COLUMN `pos_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '计量单元数量' AFTER `bills_count`;
 
 UPDATE `zh_tender` SET `had_map`=3 WHERE `had_map`=1;
+
+ALTER TABLE `zh_tender` ADD `map_pic` VARCHAR(255) NULL DEFAULT NULL COMMENT '静态图片地址' AFTER `had_map`;