Selaa lähdekoodia

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

TonyKang 5 vuotta sitten
vanhempi
commit
b4a7c34b3b

+ 185 - 0
app/public/css/jquery-ui/datepicker.css

@@ -0,0 +1,185 @@
+/*!
+ * jQuery UI Datepicker 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/#theming
+ */
+.ui-datepicker {
+    width: 17em;
+    padding: .2em .2em 0;
+    display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+    position: relative;
+    padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+    position: absolute;
+    top: 2px;
+    width: 1.8em;
+    height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+    top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+    left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+    right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+    left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+    right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+    display: block;
+    position: absolute;
+    left: 50%;
+    margin-left: -8px;
+    top: 50%;
+    margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+    margin: 0 2.3em;
+    line-height: 1.8em;
+    text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+    font-size: 1em;
+    margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+    width: 45%;
+}
+.ui-datepicker table {
+    width: 100%;
+    font-size: .9em;
+    border-collapse: collapse;
+    margin: 0 0 .4em;
+}
+.ui-datepicker th {
+    padding: .7em .3em;
+    text-align: center;
+    font-weight: bold;
+    border: 0;
+}
+.ui-datepicker td {
+    border: 0;
+    padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+    display: block;
+    padding: .2em;
+    text-align: right;
+    text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+    background-image: none;
+    margin: .7em 0 0 0;
+    padding: 0 .2em;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+    float: right;
+    margin: .5em .2em .4em;
+    cursor: pointer;
+    padding: .2em .6em .3em .6em;
+    width: auto;
+    overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+    float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+    width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+    float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+    width: 95%;
+    margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+    width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+    width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+    width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+    border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+    clear: left;
+}
+.ui-datepicker-row-break {
+    clear: both;
+    width: 100%;
+    font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+    direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+    right: 2px;
+    left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+    left: 2px;
+    right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+    right: 1px;
+    left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+    left: 1px;
+    right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+    clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+    float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+    float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+    border-right-width: 0;
+    border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+    display: block;
+    text-indent: -99999px;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    left: .5em;
+    top: .3em;
+}

+ 37 - 0
app/public/js/jquery-ui/datepicker-zh-CN.js

@@ -0,0 +1,37 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+( function( factory ) {
+    if ( typeof define === "function" && define.amd ) {
+
+        // AMD. Register as an anonymous module.
+        define( [ "../widgets/datepicker" ], factory );
+    } else {
+
+        // Browser globals
+        factory( jQuery.datepicker );
+    }
+}( function( datepicker ) {
+
+    datepicker.regional[ "zh-CN" ] = {
+        closeText: "关闭",
+        prevText: "<上月",
+        nextText: "下月>",
+        currentText: "今天",
+        monthNames: [ "一月","二月","三月","四月","五月","六月",
+            "七月","八月","九月","十月","十一月","十二月" ],
+        monthNamesShort: [ "一月","二月","三月","四月","五月","六月",
+            "七月","八月","九月","十月","十一月","十二月" ],
+        dayNames: [ "星期日","星期一","星期二","星期三","星期四","星期五","星期六" ],
+        dayNamesShort: [ "周日","周一","周二","周三","周四","周五","周六" ],
+        dayNamesMin: [ "日","一","二","三","四","五","六" ],
+        weekHeader: "周",
+        dateFormat: "yy-mm-dd",
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: "年" };
+    datepicker.setDefaults( datepicker.regional[ "zh-CN" ] );
+
+    return datepicker.regional[ "zh-CN" ];
+
+} ) );

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 2120 - 0
app/public/js/jquery-ui/datepicker.js


+ 61 - 65
app/public/js/material.js

@@ -20,62 +20,56 @@ function loadUpdateMaterials(newMaterial, fields) {
     }
 }
 
-// function DatePickerCellType() {
-// }
-// DatePickerCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
-// DatePickerCellType.prototype.createEditorElement = function () {
-//     //Create input presenter.
-//     var input = document.createElement("input");
-//     return input;
-// };
-// DatePickerCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect) {
-//     //Initialize input editor.
-//     if (editorContext) {
-//         const $editor = $(editorContext);
-//         GC.Spread.Sheets.CellTypes.Base.prototype.activateEditor.apply(this, arguments);
-//         $editor.datepicker({
-//             language: 'zh',
-//         });
-//         $editor.css("position", "absolute");
-//         $editor.attr("gcUIElement", "gcEditingInput");
-//         $(".ui-datepicker").attr("gcUIElement", "gcEditingInput");
-//     }
-// }
-// // DatePickerCellType.prototype.deactivateEditor = function (editorContext) {
-// //     //Remove input editor when end editor status.
-// //     if (editorContext) {
-// //         var element = editorContext;
-// //         $(element).datepicker().data('datepicker').hide();
-// //         $(element).datepicker().data('datepicker').destroy();
-// //         // $(element).datepicker("hide");
-// //         // $(element).datepicker("destroy");
-// //     }
-// //     GC.Spread.Sheets.CellTypes.Base.prototype.deactivateEditor.apply(this, arguments)
-// // };
-// // DatePickerCellType.prototype.setEditorValue = function (editor, value) {
-// //     //Sync value from Cell value to editor value.
-// //     console.log($(editor), value);
-// //     // $(editor).datepicker("setDate", value);
-// //     $(editor).datepicker().data('datepicker').selectDate(value);
-// // };
-// // DatePickerCellType.prototype.getEditorValue = function (editor) {
-// //     //Sync value from editor value to cell value.
-// //     $(editor).datepicker({
-// //         onSelect: function onSelect(fd, date) {
-// //             console.log(fd);
-// //             $(editor).val(fd);
-// //         }
-// //     });
-// //     // return $(editor).datepicker("getDate");
-// //     return $(editor).val();
-// // };
-// DatePickerCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect) {
-//     if (editorContext) {
-//         const $editor = $(editorContext);
-//         $editor.css("width", cellRect.width - 1);
-//         $editor.css("height", cellRect.height - 3);
-//     }
-// };
+function DatePickerCellType() {
+}
+DatePickerCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
+DatePickerCellType.prototype.createEditorElement = function () {
+    //Create input presenter.
+    var input = document.createElement("input");
+    return input;
+};
+DatePickerCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect) {
+    //Initialize input editor.
+    if (editorContext) {
+        const $editor = $(editorContext);
+        GC.Spread.Sheets.CellTypes.Base.prototype.activateEditor.apply(this, arguments);
+        $editor.datepicker({});
+        $editor.css("position", "absolute");
+        $editor.attr("gcUIElement", "gcEditingInput");
+        $(".ui-datepicker").attr("gcUIElement", "gcEditingInput");
+    }
+}
+DatePickerCellType.prototype.deactivateEditor = function (editorContext) {
+    //Remove input editor when end editor status.
+    if (editorContext) {
+        var element = editorContext;
+        // $(element).datepicker().data('datepicker').hide();
+        // $(element).datepicker().data('datepicker').destroy();
+        $(element).datepicker("hide");
+        $(element).datepicker("destroy");
+    }
+    GC.Spread.Sheets.CellTypes.Base.prototype.deactivateEditor.apply(this, arguments)
+};
+DatePickerCellType.prototype.setEditorValue = function (editor, value) {
+    //Sync value from Cell value to editor value.
+    // console.log($(editor), value);
+    $(editor).datepicker("setDate", value);
+    // $(editor).datepicker().data('datepicker').selectDate(value ? new Date(value) : new Date());
+};
+DatePickerCellType.prototype.getEditorValue = function (editor, context) {
+    // console.log($(editor).datepicker().data('datepicker'), context);
+    //Sync value from editor value to cell value.
+    // console.log($(editor).datepicker("getDate"));
+    // return $(editor).datepicker("getDate");
+    return $(editor).val();
+};
+DatePickerCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect) {
+    if (editorContext) {
+        const $editor = $(editorContext);
+        $editor.css("width", cellRect.width - 1);
+        $editor.css("height", cellRect.height - 3);
+    }
+};
 
 function resetTpTable() {
     const rate = $('#changeRate').val();
@@ -113,9 +107,9 @@ $(document).ready(() => {
             {title: '工料分类', colSpan: '1', rowSpan: '2', field: 'm_type', hAlign: 1, width: 60, readOnly: 'readOnly.isEdit', cellType: 'customizeCombo', comboItems: materialType.m_type, cellTypeKey: 2},
             {title: '本期应耗数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 100, type: 'Number', readOnly: true},
             {title: '基准价', colSpan: '1', rowSpan: '2', field: 'basic_price', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit'},
-            {title: '基准时间', colSpan: '1', rowSpan: '2', field: 'basic_times', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'},
+            {title: '基准时间', colSpan: '1', rowSpan: '2', field: 'basic_times', hAlign: 0, width: 80, formatter: '@', readOnly: 'readOnly.isEdit'},
             {title: '本期信息价|单价', colSpan: '3|1', rowSpan: '1|1', field: 'msg_tp', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit'},
-            {title: '|时间', colSpan: '|1', rowSpan: '|1', field: 'msg_times', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'},
+            {title: '|时间', colSpan: '|1', rowSpan: '|1', field: 'msg_times', hAlign: 0, width: 80, formatter: '@', readOnly: 'readOnly.isEdit'},
             {title: '|价差', colSpan: '1', rowSpan: '1|1', field: 'msg_spread', hAlign: 2, width: 60, type: 'Number', readOnly: true, getValue: 'getValue.msg_spread'},
             {title: '本期材料调差|上涨幅度(%)', colSpan: '4|1', rowSpan: '1|1', field: 'm_up_risk', hAlign: 2, width: 100, type: 'Number', readOnly: 'readOnly.isEdit'},
             {title: '|下跌幅度(%)', colSpan: '|1', rowSpan: '|1', field: 'm_down_risk', hAlign: 2, width: 100, type: 'Number', readOnly: 'readOnly.isEdit'},
@@ -480,13 +474,15 @@ $(document).ready(() => {
     materialSpread.bind(spreadNS.Events.SelectionChanged, materialSpreadObj.selectionChanged);
     materialSpread.bind(spreadNS.Events.ClipboardPasted, materialSpreadObj.clipboardPasted);
     SpreadJsObj.addDeleteBind(materialSpread, materialSpreadObj.deletePress);
-    // const sheet = materialSpread.getActiveSheet();
-    // sheet.suspendPaint();
-    // var range = sheet.getRange(-1, 8, -1, 1);
-    // console.log(range);
-    // range.cellType(new DatePickerCellType());
-    // // range.formatter("yyyy-MM-dd");
-    // sheet.resumePaint();
+    const sheet = materialSpread.getActiveSheet();
+    sheet.suspendPaint();
+    const basic_range = sheet.getRange(-1, 8, -1, 1);
+    basic_range.cellType(new DatePickerCellType());
+    basic_range.formatter("yyyy-MM-dd");
+    const msg_range = sheet.getRange(-1, 10, -1, 1);
+    msg_range.cellType(new DatePickerCellType());
+    msg_range.formatter("yyyy-MM-dd");
+    sheet.resumePaint();
 
     if (!readOnly) {
         $('#add').click(materialSpreadObj.add);

+ 10 - 0
app/public/js/setting.js

@@ -181,6 +181,11 @@ function checkUserForm(status) {
             if ($('#add-user input[name="role"]').val() == '') {
                 throw '职位名称不能为空';
             }
+            $('#add-user input[name="account"]').val(trimInvalidChar($('#add-user input[name="account"]').val()));
+            $('#add-user input[name="name"]').val(trimInvalidChar($('#add-user input[name="name"]').val()));
+            $('#add-user input[name="company"]').val(trimInvalidChar($('#add-user input[name="company"]').val()));
+            $('#add-user input[name="role"]').val(trimInvalidChar($('#add-user input[name="role"]').val()));
+            $('#add-user input[name="telephone"]').val(trimInvalidChar($('#add-user input[name="telephone"]').val()));
         } else {
             if ($('#edit-user select[name="account_group"]').val() == 0) {
                 throw '请选择账号组';
@@ -197,6 +202,11 @@ function checkUserForm(status) {
             if ($('#edit-user input[name="role"]').val() == '') {
                 throw '职位名称不能为空';
             }
+            $('#edit-user input[name="account"]').val(trimInvalidChar($('#edit-user input[name="account"]').val()));
+            $('#edit-user input[name="name"]').val(trimInvalidChar($('#edit-user input[name="name"]').val()));
+            $('#edit-user input[name="company"]').val(trimInvalidChar($('#edit-user input[name="company"]').val()));
+            $('#edit-user input[name="role"]').val(trimInvalidChar($('#edit-user input[name="role"]').val()));
+            $('#edit-user input[name="telephone"]').val(trimInvalidChar($('#edit-user input[name="telephone"]').val()));
         }
     } catch (err) {
         toastr.error(err);

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

@@ -38,7 +38,7 @@
                             <td class="text-center"><%= moment(m.in_time).format('YYYY-MM-DD') %></td>
                             <td class="text-center">第 <%= m.s_order %> 期</td>
                             <td class="text-right"><%= m.m_tp !== null ? ctx.helper.round(ctx.helper.mul(m.m_tp, 1+m.rate/100), 2) : null %></td>
-                            <td class="text-right"><%= m.m_tp %></td>
+                            <td class="text-right"><%= m.m_tp !== null ? ctx.helper.round(m.m_tp, 2) : null %></td>
                             <td class="<%- auditConst.auditProgressClass[m.status] %>">
                                 <% if (m.curAuditor) { %>
                                     <a href="#sp-list" data-toggle="modal" data-target="#sp-list" m-order="<%- m.order %>"><%- m.curAuditor.name %><%if (m.curAuditor.role !== '' && m.curAuditor.role !== null) { %>-<%- m.curAuditor.role %><% } %></a>

+ 4 - 3
app/view/material/info.ejs

@@ -48,7 +48,7 @@
                         <div class="col-4 p-0">
                             <table class="table table-sm table-bordered">
                                 <tr><th></th><th>本期金额</th><th>截止本期金额</th></tr>
-                                <tr id="tp_set"><td>材料价差费用</td><td><%= material.m_tp %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.add(material.pre_tp, material.m_tp), 2) : null %></td></tr>
+                                <tr id="tp_set"><td>材料价差费用</td><td><%= material.m_tp !== null ? ctx.helper.round(material.m_tp, 2) : null %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.add(material.pre_tp, material.m_tp), 2) : null %></td></tr>
                                 <tr id="rate_set"><td>材料价差费用(含税)</td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), 2) : null %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(ctx.helper.add(material.pre_tp, material.m_tp), 1+material.rate/100), 2) : null %></td></tr>
                             </table>
                         </div>
@@ -62,8 +62,9 @@
     <img src="/public/images/ellipsis_horizontal.png" id="ellipsis-icon" />
     <img src="/public/images/icon-ok.png" id="icon-ok" />
 </div>
-<!--<script src="/public/js/datepicker/datepicker.min.js"></script>-->
-<!--<script src="/public/js/datepicker/datepicker.zh.js"></script>-->
+<link rel="stylesheet" href="/public/css/jquery-ui/datepicker.css">
+<script src="/public/js/jquery-ui/datepicker.js"></script>
+<script src="/public/js/jquery-ui/datepicker-zh-CN.js"></script>
 <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) {%>
 <script>
     const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');

+ 9 - 1
app/view/profile/info.ejs

@@ -11,7 +11,7 @@
                 <div class="row m-0">
                     <div class="col-5 my-3">
                         <!--账号资料-->
-                        <form action="/profile/save" method="post" id="base-form">
+                        <form action="/profile/save" method="post" id="base-form" onsubmit="return checkUserForm();">
                             <input-text label="账号" value="<%= accountData.account %>" readonly="readonly"></input-text>
                             <input-text label="姓名" value="<%= accountData.name %>" placeholder="请输入姓名" name="name"></input-text>
                             <input-text label="单位" value="<%= accountData.company %>" name="company"></input-text>
@@ -35,3 +35,11 @@
     const csrf = '<%= ctx.csrf %>';
 </script>
 <script type="text/javascript" src="/public/js/profile.js"></script>
+<script>
+function checkUserForm () {
+    $('input[name="name"]').val(trimInvalidChar($('input[name="name"]').val()));
+    $('input[name="company"]').val(trimInvalidChar($('input[name="company"]').val()));
+    $('input[name="role"]').val(trimInvalidChar($('input[name="role"]').val()));
+    $('input[name="telephone"]').val(trimInvalidChar($('input[name="telephone"]').val()));
+}
+</script>

+ 1 - 0
config/config.default.js

@@ -120,6 +120,7 @@ module.exports = appInfo => {
             '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.cad', '.dwg',
             '.zip', '.rar', '.7z', ''],
         fileSize: '30mb',
+        fields: '15',
     };
 
     // 是否压缩替换前端js

+ 0 - 83
sql/update.sql

@@ -1,138 +0,0 @@
-
-
-CREATE TABLE `zh_external_data` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `tid` int(11) NOT NULL COMMENT '标段id',
-  `sid` int(11) NOT NULL DEFAULT '-1' COMMENT '所属期id,-1表示整个标段共用',
-  `ex_type` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '额外数据 - 类型(''fl'': 富龙接口数据)',
-  `ex_field` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '额外数据 - 名称(具体细分由ex_type决定)',
-  `ex_value` text CHARACTER SET utf8 COMMENT '额外数据 - 值',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='外部所需数据\r\n非计量支付内部运行所需数据,当接入外部系统时,这些系统可能要求我们提供某些额外的数据,例如:富龙接口,wbs_code\r\n类似数据,均存储在这里';
-
-ALTER TABLE `zh_stage_bonus`
-ADD COLUMN `doc_co`  varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '发文单位' AFTER `code`;
-
-ALTER TABLE `zh_stage_bonus`
-ADD COLUMN `proof_file`  text CHARACTER SET utf8 NULL COMMENT '依据材料 - 文件列表(json)' AFTER `proof`;
-
-
-ALTER TABLE `zh_role_rpt_rel`
-ADD COLUMN `sid` INT NULL AFTER `rpt_id`,
-DROP INDEX `tender_idx` ,
-ADD INDEX `tender_idx` (`tender_id` ASC, `rpt_id` ASC);
-
-
-CREATE TABLE `zh_maintain` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `maintain_time` varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT '维护时间',
-  `duration` tinyint(4) NOT NULL DEFAULT '2' COMMENT '维护时长',
-  `msg` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '维护内容',
-  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '维护状态,0:未设置,1:未开始,2:进行中',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='系统维护信息表';
-
-
-INSERT INTO `zh_maintain` (`id`, `maintain_time`, `duration`, `msg`, `status`) VALUES
-(1, '', 2, '', 0);
-
-ALTER TABLE `zh_message`
-ADD COLUMN `create_uid` int(11) DEFAULT NULL COMMENT '创建者id' AFTER `create_time`;
-
-ALTER TABLE `zh_message`
-ADD COLUMN `project_id` int(11) DEFAULT NULL COMMENT '项目id,针对项目通知' AFTER `create_uid`;
-
-ALTER TABLE `zh_message`
-ADD COLUMN `istop` varchar(15) NOT NULL DEFAULT '0' COMMENT '是否置顶,0为非置顶,时间戳为置顶时间' AFTER `release_time`;
-
-ALTER TABLE `zh_message`
-CHANGE `content` `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '消息内容';
-
-ALTER TABLE `zh_message`
-CHANGE `create_time` `create_time` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '创建时间';
-
-ALTER TABLE `zh_message`
-CHANGE `creator` `creator` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '创建者';
-
-ALTER TABLE `zh_message`
-CHANGE `type` `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '消息类型 1为项目 2为系统';
-
-ALTER TABLE `zh_message`
-CHANGE `status` `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '消息状态,1:已发布,2:未发布';
-
-ALTER TABLE `zh_message`
-CHANGE `release_time` `release_time` int(10) NOT NULL DEFAULT '0' COMMENT '发布时间';
-
-ALTER TABLE `zh_project`
-ADD COLUMN `custom` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否是定制项目' AFTER `dealpay_json`;
-
-ALTER TABLE `zh_project`
-ADD COLUMN `can_api` tinyint(1) NOT NULL DEFAULT '1' COMMENT '定制项目接口是否可用';
-
-ALTER TABLE `zh_project`
-ADD COLUMN `secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '定制项目私钥';
-
-ALTER TABLE `zh_project_account`
-ADD COLUMN `bind` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已绑定定制项目' AFTER `sms_type`;
-
-INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('67', '系统维护', 'maintain', '', '11', '', NULL, '1');
-INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('68', '第三方接口', 'project', 'api2other', '38', 'api2other', NULL, '1');
-INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('69', '第三方接口设置', 'project', 'api2otherSave', '38', '', NULL, '1');
-
-update `calculation`.`zh_permission` set `name` = '消息通知', `isshow` = 1 where `id` = 31;
-update `calculation`.`zh_permission` set `create_time` = '1' where `id` = 62;

+ 279 - 0
sql/update20200410-1.sql

@@ -0,0 +1,279 @@
+
+-- ----------------------------
+-- Table structure for zh_external_data
+-- ----------------------------
+
+CREATE TABLE `zh_external_data` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `sid` int(11) NOT NULL DEFAULT '-1' COMMENT '所属期id,-1表示整个标段共用',
+  `ex_type` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '额外数据 - 类型(''fl'': 富龙接口数据)',
+  `ex_field` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '额外数据 - 名称(具体细分由ex_type决定)',
+  `ex_value` text CHARACTER SET utf8 COMMENT '额外数据 - 值',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='外部所需数据\r\n非计量支付内部运行所需数据,当接入外部系统时,这些系统可能要求我们提供某些额外的数据,例如:富龙接口,wbs_code\r\n类似数据,均存储在这里';
+
+-- ----------------------------
+-- zh_stage_bonus add column 发文单位
+-- ----------------------------
+ALTER TABLE `zh_stage_bonus`
+ADD COLUMN `doc_co`  varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '发文单位' AFTER `code`;
+
+-- ----------------------------
+-- zh_stage_bonus add column 依据材料 - 文件列表
+-- ----------------------------
+ALTER TABLE `zh_stage_bonus`
+ADD COLUMN `proof_file`  text CHARACTER SET utf8 NULL COMMENT '依据材料 - 文件列表(json)' AFTER `proof`;
+
+
+-- 更改 zh_role_rpt_rel 结构,增加stage id
+ALTER TABLE `zh_role_rpt_rel`
+ADD COLUMN `sid` INT NULL AFTER `rpt_id`,
+DROP INDEX `tender_idx` ,
+ADD INDEX `tender_idx` (`tender_id` ASC, `rpt_id` ASC);
+
+
+-- ----------------------------
+-- Table structure for zh_maintain
+-- ----------------------------
+CREATE TABLE `zh_maintain` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `maintain_time` varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT '维护时间',
+  `duration` tinyint(4) NOT NULL DEFAULT '2' COMMENT '维护时长',
+  `msg` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '维护内容',
+  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '维护状态,0:未设置,1:未开始,2:进行中',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='系统维护信息表';
+
+
+INSERT INTO `zh_maintain` (`id`, `maintain_time`, `duration`, `msg`, `status`) VALUES
+(1, '', 2, '', 0);
+
+-- ----------------------------
+-- zh_message add column 创建者id
+-- ----------------------------
+ALTER TABLE `zh_message`
+ADD COLUMN `create_uid` int(11) DEFAULT NULL COMMENT '创建者id' AFTER `create_time`;
+
+-- ----------------------------
+-- zh_message add column 项目id
+-- ----------------------------
+ALTER TABLE `zh_message`
+ADD COLUMN `project_id` int(11) DEFAULT NULL COMMENT '项目id,针对项目通知' AFTER `create_uid`;
+
+-- ----------------------------
+-- zh_message add column 是否置顶
+-- ----------------------------
+ALTER TABLE `zh_message`
+ADD COLUMN `istop` varchar(15) NOT NULL DEFAULT '0' COMMENT '是否置顶,0为非置顶,时间戳为置顶时间' AFTER `release_time`;
+
+-- ----------------------------
+-- zh_message change column content
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `content` `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '消息内容';
+
+-- ----------------------------
+-- zh_message change column create_time
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `create_time` `create_time` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '创建时间';
+
+-- ----------------------------
+-- zh_message change column creator
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `creator` `creator` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '创建者';
+
+-- ----------------------------
+-- zh_message change column type
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `type` `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '消息类型 1为项目 2为系统';
+
+-- ----------------------------
+-- zh_message change column status
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `status` `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '消息状态,1:已发布,2:未发布';
+
+-- ----------------------------
+-- zh_message change column release_time
+-- ----------------------------
+ALTER TABLE `zh_message`
+CHANGE `release_time` `release_time` int(10) NOT NULL DEFAULT '0' COMMENT '发布时间';
+
+-- ----------------------------
+-- zh_project add column 是否定制项目
+-- ----------------------------
+ALTER TABLE `zh_project`
+ADD COLUMN `custom` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否是定制项目' AFTER `dealpay_json`;
+
+-- ----------------------------
+-- zh_project add column 定制项目接口是否可用
+-- ----------------------------
+ALTER TABLE `zh_project`
+ADD COLUMN `can_api` tinyint(1) NOT NULL DEFAULT '1' COMMENT '定制项目接口是否可用';
+
+-- ----------------------------
+-- zh_project add column 定制项目私钥
+-- ----------------------------
+ALTER TABLE `zh_project`
+ADD COLUMN `secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '定制项目私钥';
+
+-- ----------------------------
+-- zh_project_account add column 是否已绑定定制项目
+-- ----------------------------
+ALTER TABLE `zh_project_account`
+ADD COLUMN `bind` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已绑定定制项目' AFTER `sms_type`;
+
+-- ----------------------------
+-- 权限控制表,新增部分权限
+-- ----------------------------
+INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('67', '系统维护', 'maintain', '', '11', '', NULL, '1');
+INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('68', '第三方接口', 'project', 'api2other', '38', 'api2other', NULL, '1');
+INSERT INTO `calculation`.`zh_permission` (`id`, `name`, `controller`, `action`, `pid`, `icon_class`, `create_time`, `isshow`) VALUES ('69', '第三方接口设置', 'project', 'api2otherSave', '38', '', NULL, '1');
+
+update `calculation`.`zh_permission` set `name` = '消息管理', `isshow` = 1 where `id` = 31;
+update `calculation`.`zh_permission` set `name` = '消息通知', `isshow` = 1 where `id` = 32;
+update `calculation`.`zh_permission` set `create_time` = '1' where `id` = 62;
+
+
+
+-- ----------------------------
+-- 先删除旧的调差表和数据,再新增
+-- ----------------------------
+DROP TABLE `zh_material`;
+DROP TABLE `zh_material_audit`;
+DROP TABLE `zh_material_bills`;
+DROP TABLE `zh_material_list`;
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material`
+--
+
+CREATE TABLE `zh_material` (
+  `id` int(11) NOT NULL COMMENT '自增id' AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `user_id` int(11) NOT NULL COMMENT '创建者id',
+  `times` int(11) NOT NULL COMMENT '审批次数',
+  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '审批状态',
+  `stage_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '期id列表',
+  `s_order` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '期数order列表',
+  `order` tinyint(4) NOT NULL COMMENT '材料调差期数',
+  `m_tp` decimal(30,8) DEFAULT NULL COMMENT '本期金额',
+  `pre_tp` decimal(30,8) DEFAULT NULL COMMENT '截止上期金额',
+  `rate` tinyint(11) NOT NULL DEFAULT '9' COMMENT '税率',
+  `in_time` datetime NOT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='材料调差期列表';
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material_audit`
+--
+
+CREATE TABLE `zh_material_audit` (
+  `id` int(11) NOT NULL COMMENT '主键' AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `mid` int(11) NOT NULL COMMENT '材料调差id',
+  `aid` int(11) NOT NULL COMMENT '审批人id',
+  `order` int(11) NOT NULL COMMENT '审批顺序',
+  `times` int(11) NOT NULL COMMENT '审批次数',
+  `status` tinyint(1) NOT NULL COMMENT '审批状态',
+  `begin_time` datetime DEFAULT NULL COMMENT '开始审批时间',
+  `end_time` datetime DEFAULT NULL COMMENT '结束审批时间',
+  `opinion` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '审批意见',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='材料调差审批表';
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material_bills`
+--
+
+CREATE TABLE `zh_material_bills` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '所属标段id',
+  `mid` int(11) NOT NULL COMMENT '所属调差调差id',
+  `t_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '调差类型,1为消耗量,2为费用',
+  `code` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '编号',
+  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '名称',
+  `unit` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '单位',
+  `spec` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '规格',
+  `m_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '工料分类',
+  `quantity` decimal(30,8) DEFAULT NULL COMMENT '本期应耗数量',
+  `expr` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '表达式',
+  `basic_price` decimal(30,8) DEFAULT NULL COMMENT '基准价',
+  `basic_times` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '基准时间',
+  `msg_tp` decimal(30,8) DEFAULT NULL COMMENT '本期信息价单价',
+  `msg_times` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '本期信息价时间',
+  `msg_spread` decimal(30,8) DEFAULT NULL COMMENT '本期信息价价差',
+  `m_up_risk` tinyint(3) DEFAULT NULL COMMENT '本期材料调差上涨风险幅度',
+  `m_down_risk` tinyint(3) DEFAULT NULL COMMENT '本期材料调差下跌风险幅度',
+  `m_spread` decimal(30,8) DEFAULT NULL COMMENT '本期材料调差有效价差',
+  `pre_tp` decimal(30,8) DEFAULT NULL COMMENT '截止上期调差金额',
+  `remark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
+  `in_time` datetime NOT NULL COMMENT '添加时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='调差工料清单表';
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material_bills_history`
+--
+
+CREATE TABLE `zh_material_bills_history` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '所属标段',
+  `mid` int(11) NOT NULL COMMENT '调差期id',
+  `order` tinyint(4) NOT NULL COMMENT '调差期期数',
+  `mb_id` int(11) NOT NULL COMMENT '工料id',
+  `quantity` decimal(30,8) DEFAULT NULL COMMENT '本期应耗数量',
+  `pre_tp` decimal(30,8) DEFAULT NULL COMMENT '截止上期调差金额',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='工料历史期部分操作数据';
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material_list`
+--
+
+CREATE TABLE `zh_material_list` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `order` tinyint(3) NOT NULL COMMENT '清单关联添加的原始期',
+  `mid` int(11) NOT NULL COMMENT '调差期id',
+  `mb_id` int(11) NOT NULL COMMENT '所属工料id',
+  `gcl_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '清单id',
+  `xmj_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '项目节id',
+  `mx_id` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '部位明细id',
+  `gather_qty` decimal(30,8) DEFAULT NULL COMMENT '本期计量数量-小计',
+  `quantity` decimal(30,8) NOT NULL DEFAULT '0.00000000' COMMENT '数量',
+  `is_join` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否参与调差',
+  `in_time` datetime NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='调差工料-调差清单关联表';
+
+-- --------------------------------------------------------
+
+--
+-- 表的结构 `zh_material_list_notjoin`
+--
+
+CREATE TABLE `zh_material_list_notjoin` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `mid` int(11) NOT NULL COMMENT '调差期id',
+  `gcl_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '清单id',
+  `xmj_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '项目节id',
+  `mx_id` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '部位明细id',
+  `in_time` datetime NOT NULL COMMENT '添加时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='不参与调差的清单表';