vian 5 anni fa
parent
commit
82ff0b5b8e

+ 41 - 0
modules/main/controllers/project_controller.js

@@ -5,6 +5,8 @@ var Project = require('../models/project');
 let logger = require('../../../logs/log_helper').logger;
 let project_facade = require("../facade/project_facade");
 const redirectToImportServer = require('../../pm/controllers/pm_controller').redirectToImportServer;
+const multiparty = require("multiparty");
+const iconv = require('iconv-lite'); 
 
 //统一回调函数
 var callback = function(req, res, err, message, data){
@@ -206,5 +208,44 @@ module.exports = {
             result.message = err.message;
         }
         res.json(result);
+    },
+    getDecodedStr: async function(req, res) {
+        /* const data = JSON.parse(req.body.data);
+        const unit8ArraySouces = data.unit8ArraySouces;
+        try {
+
+        } catch (err) {
+            
+        } */
+        function toArrayBuffer(src) {
+            var ab = new ArrayBuffer(src.length);
+            var view = new Uint8Array(ab);
+            for (var i = 0; i < src.length; ++i) {
+                view[i] = +src[i];
+            }
+            return ab;
+        }
+        const responseData = {
+            err: 0,
+            msg: '',
+            data: null
+        };
+
+        const form = new multiparty.Form();
+        form.parse(req, async function(err, fields, files) {
+            try{
+                const unit8ArrayList = JSON.parse(fields.blobList[0]);
+                unit8ArrayList.forEach(unit8ArrayNumbers => {
+                    const buffer = toArrayBuffer(unit8ArrayNumbers);
+                    const str = iconv.decode(Buffer.from(buffer), 'gbk');
+                });
+            }
+            catch (error){
+                responseData.err = 1;
+                responseData.msg = typeof error === 'object' ? '文件名编码失败' : error;
+                res.json(responseData);
+            }
+
+        });
     }
 };

+ 1 - 0
modules/main/routes/project_route.js

@@ -19,6 +19,7 @@ module.exports = function (app) {
     projectRouter.post('/getDefaultColSetting', projectController.getDefaultColSetting);
     projectRouter.post('/getSEIProjects', projectController.getSEIProjects);
     projectRouter.post('/loadSEIProjectData', projectController.loadSEIProjectData);
+    projectRouter.post('/getDecodedStr', projectController.getDecodedStr);
     app.use('/project',projectRouter);
 };
 

File diff suppressed because it is too large
+ 14297 - 0
package-lock.json


+ 6 - 5
package.json

@@ -42,6 +42,7 @@
     "gulp-size": "^1.2.1",
     "gulp-uglify": "^1.1.0",
     "gulp-uglify-es": "^0.1.3",
+    "iconv-lite": "^0.5.1",
     "ioredis": "^3.1.4",
     "jszip": "^3.1.3",
     "log4js": "~2.3.3",
@@ -53,20 +54,20 @@
     "node-schedule": "^1.3.0",
     "node-xlsx": "^0.11.2",
     "pdfkit": "^0.8.2",
+    "qiniu": "^7.1.1",
     "request-promise": "^4.2.5",
     "socket.io": "2.0.3",
     "ua-parser-js": "^0.7.14",
     "uuid": "^3.1.0",
-    "wiredep": "^2.2.2",
-    "qiniu": "^7.1.1"
+    "wiredep": "^2.2.2"
   },
   "scripts": {
     "start": "C:\\Users\\mai\\AppData\\Roaming\\npm\\babel-node.cmd server.js",
     "server": "node --max-old-space-size=2048 server.js",
     "socket": "node socket.js",
     "import": "node --max-old-space-size=2048 importserver.js",
-    "dev_server":"SET NODE_ENV=qa&& babel-node server.js",
-    "dev_socket":"SET NODE_ENV=qa&& babel-node socket.js",
-    "dev_import":"SET NODE_ENV=qa&& babel-node importserver.js"
+    "dev_server": "SET NODE_ENV=qa&& babel-node server.js",
+    "dev_socket": "SET NODE_ENV=qa&& babel-node socket.js",
+    "dev_import": "SET NODE_ENV=qa&& babel-node importserver.js"
   }
 }

+ 25 - 0
web/building_saas/main/js/models/importStdInterfaceBase.js

@@ -289,6 +289,30 @@ const importXMLBase = (() => {
             { templateLibID });
     }
 
+    // 解码文件名
+    function getDecodedNames(bufferList) {
+        //const blobs = bufferList.map(buffer => new Blob([buffer]));
+        const formData = new FormData();
+        formData.append('blobList', JSON.stringify(bufferList));
+        return new Promise((resolve, reject) => {
+            $.ajax({
+                url: '/project/getDecodedStr',
+                type: 'POST',
+                data: formData,
+                cache: false,
+                contentType: false,
+                processData: false,
+                success: function(response){
+                    if (response.err === 0) {
+                        resolve(response.data);
+                    } else {
+                        reject(response.msg);
+                    }
+                },
+                error: reject
+            });
+        });
+    }
 
     const UTIL = Object.freeze({
         escapeXMLEntity,
@@ -305,6 +329,7 @@ const importXMLBase = (() => {
         getItemsRecur,
         extractItemsRecur,
         readAsTextSync,
+        getDecodedNames,
     });
 
     // 获取接受上传的文件类型正则表达式

+ 251 - 0
web/common/components/share/index.html

@@ -0,0 +1,251 @@
+<div class="modal fade" id="share" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">分享给...</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="row justify-content-center">
+                    <div class="form-group col-6 ">
+                        <div class="input-group input-group-sm">
+                            <input id="sharePhone" type="text" class="form-control" placeholder="输入 手机号 添加分享" autofocus="autofocus">
+                            <div class="btn-group btn-group-sm ml-1">
+                                <a class="btn btn-primary dropdown-toggle" href="#" role="button" id="dropdownMenuBook2">
+                                    联系人
+                                </a>
+                                <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuBook2" style="width: 250px;">
+                                    <div class="">
+                                        <ul class="book-list">
+                                            <li>C</li>
+                                            <li>
+                                                <span class="avatar bg-0">桐杉</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">陈桐杉</h5>
+                                                    15800000000
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-1">迎华</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">陈迎华</h5>
+                                                    15800000001
+                                                </div>
+                                            </li>
+                                            <li>H</li>
+                                            <li>
+                                                <span class="avatar bg-2">木贤</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">黄木贤</h5>
+                                                    15800000002
+                                                </div>
+                                            </li>
+                                            <li>L</li>
+                                            <li>
+                                                <span class="avatar bg-3">李旭</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">李旭</h5>
+                                                    15800000003
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-4">伽淼</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">李伽淼</h5>
+                                                    15800000004
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-5">川汉</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">李川汉</h5>
+                                                    15800000005
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-6">石宝</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">李石宝</h5>
+                                                    15800000006
+                                                </div>
+                                            </li>
+                                            <li>Z</li>
+                                            <li>
+                                                <span class="avatar bg-7">白尔</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0">张白尔</h5>
+                                                    15800000007
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-8">润隆</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">张润隆</h5>
+                                                    15800000008
+                                                </div>
+                                            </li>
+                                            <li>
+                                                <span class="avatar bg-9">佳玫</span>
+                                                <div class="book-body">
+                                                    <h5 class="mt-0" title="某某有限公司">张佳玫</h5>
+                                                    15800000009
+                                                </div>
+                                            </li>
+                                        </ul>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-3">
+                        <legend>最近分享</legend>
+                        <!--最近分享-->
+                        <ul class="book-list">
+                            <li>
+                                <span class="avatar bg-8">润隆</span>
+                                <div class="book-body">
+                                    <h5 class="mt-0" title="某某有限公司">张润隆</h5>
+                                    15800000008
+                                </div>
+                            </li>
+                            <li>
+                                <span class="avatar bg-3">李旭</span>
+                                <div class="book-body">
+                                    <h5 class="mt-0" title="某某有限公司">李旭</h5>
+                                    15800000003
+                                </div>
+                            </li>
+                            <li>
+                                <span class="avatar bg-9">佳玫</span>
+                                <div class="book-body">
+                                    <h5 class="mt-0" title="某某有限公司">张佳玫</h5>
+                                    15800000009
+                                </div>
+                            </li>
+                            <li>
+                                <span class="avatar bg-4">伽淼</span>
+                                <div class="book-body">
+                                    <h5 class="mt-0" title="某某有限公司">李伽淼</h5>
+                                    15800000004
+                                </div>
+                            </li>
+                            <li>
+                                <span class="avatar bg-7">白尔</span>
+                                <div class="book-body">
+                                    <h5 class="mt-0" title="某某有限公司">张白尔</h5>
+                                    15800000007
+                                </div>
+                            </li>
+                        </ul>
+                    </div>
+                    <div class="col-9">
+                    
+                <!--搜索结果-->
+                <ul class="book-list my-3" style="height:auto">
+                    <li class="card mb-1">
+                        <div class="card-body p-1 row m-0">
+                            <span class="avatar bg-8">伽淼</span>
+                            <!--姓名手机-->
+                            <div class="book-body col-auto pl-0">
+                                <h5 class="mt-0">李伽淼</h5>
+                                15800000004
+                            </div>
+                            <!--公司-->
+                            <div class="col-5">珠海纵横创新软件有限公司</div>
+                            <!--操作-->
+                            <div class="col ml-auto p-0">
+                                <div class="d-flex justify-content-end">
+                                    <div>
+                                        <div class="custom-control custom-checkbox">
+                                            <input type="checkbox" class="custom-control-input" id="customCheck1" checked="">
+                                            <label class="custom-control-label" for="customCheck1">允许拷贝</label>
+                                        </div>
+                                        <div class="custom-control custom-checkbox">
+                                            <input type="checkbox" class="custom-control-input" id="customCheck2" checked="">
+                                            <label class="custom-control-label" for="customCheck2">允许编辑</label>
+                                        </div>
+                                    </div>
+                                    <div class="ml-3 d-flex align-items-center"><button class="btn btn-sm btn-primary">分享给Ta</button></div>
+                                </div>
+                            </div>
+                            <!--提示信息-->
+                            <!-- <div class="col-12">
+                                <p class="text-danger mb-0">允许拷贝,用户可以对您分享的项目进行拷贝复制。</p>
+                                <p class="text-danger mb-0">允许编辑,用户可以对您分享的项目进行任意编辑修改,请谨慎开启。</p>
+                            </div> -->
+                        </div>
+                    </li>
+                </ul>
+                <!--已分享列表-->
+                <legend>已分享</legend>
+                <ul class="book-list" style="max-height: 250px">
+                    <li class="card mb-1">
+                        <div class="card-body p-1 row m-0">
+                            <span class="avatar bg-8">润隆</span>
+                            <!--姓名手机-->
+                            <div class="book-body col-auto pl-0">
+                                <h5 class="mt-0">张润隆</h5>
+                                15800000008
+                            </div>
+                            <!--公司-->
+                            <div class="col-5">珠海纵横创新软件有限公司</div>
+                            <!--操作-->
+                            <div class="col ml-auto p-0">
+                            <div class="d-flex justify-content-end">
+                                <div>
+                                    <div class="custom-control custom-checkbox">
+                                        <input type="checkbox" class="custom-control-input" id="customCheck3" checked="">
+                                        <label class="custom-control-label" for="customCheck3">允许拷贝</label>
+                                    </div>
+                                    <div class="custom-control custom-checkbox">
+                                        <input type="checkbox" class="custom-control-input" id="customCheck4">
+                                        <label class="custom-control-label" for="customCheck4">允许编辑</label>
+                                    </div>
+                                </div>
+                                <div class="ml-3 d-flex align-items-center"><button class="btn btn-sm btn-outline-danger">取消分享</button></div>
+                                </div>
+                            </div>
+                        </div>
+                    </li>
+                    <li class="card mb-1">
+                        <div class="card-body p-1 row m-0">
+                            <span class="avatar bg-7">白尔</span>
+                            <!--姓名手机-->
+                            <div class="book-body col-auto pl-0">
+                                <h5 class="mt-0">张白尔</h5>
+                                15800000007
+                            </div>
+                            <!--公司-->
+                            <div class="col-5">珠海纵横创新软件有限公司</div>
+                            <!--操作-->
+                            <div class="col ml-auto p-0">
+                            <div class="d-flex justify-content-end">
+                                <div>
+                                    <div class="custom-control custom-checkbox">
+                                      <input type="checkbox" class="custom-control-input" id="customCheck5">
+                                      <label class="custom-control-label" for="customCheck5">允许拷贝</label>
+                                    </div>
+                                    <div class="custom-control custom-checkbox">
+                                      <input type="checkbox" class="custom-control-input" id="customCheck6">
+                                      <label class="custom-control-label" for="customCheck6">允许编辑</label>
+                                    </div>
+                                </div>
+                                <div class="ml-3 d-flex align-items-center"><button class="btn btn-sm btn-outline-danger">取消分享</button></div>
+                                </div>
+                            </div>
+                        </div>
+                    </li>
+                    </ul>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 0 - 0
web/common/components/share/index.js


+ 25 - 0
web/over_write/js/guangdong_2018_import.js

@@ -1526,6 +1526,14 @@ const importXML = (() => {
         return detailData;
     }
 
+    function getUnit8Numbers(unit8Array) {
+        const numbers = [];
+        for (const a of unit8Array) {
+            numbers.push(a);
+        }
+        return numbers;
+    }
+
     /**
      * 解压cos、zip文件
      * @param {File} file - 上传的文件 
@@ -1534,6 +1542,23 @@ const importXML = (() => {
     async function unzipFile(file) {
         const jsZip = new JSZip();
         const zip = await jsZip.loadAsync(file);
+        // TODO
+        /* const fileNameByteList = [];
+        let index = 0;
+        const zip = await jsZip.loadAsync(file, {
+            // zip文件中有一个标志,用于说明文件名和注释是否使用UTF-8编码。 
+            // 如果未设置,则JSZip无法知道所使用的编码(它通常是操作系统的默认编码)
+            // 因此若文件名编码非utf-8,则会调用decodeFileName。我们将其认为是gbk编码
+            decodeFileName: function (bytes) {
+                if (bytes.length) {
+                    fileNameByteList.push(getUnit8Numbers(bytes));
+                    return String(index++);
+                } else {
+                    return '';
+                }
+            }
+        });
+        const decodedNames = await util.getDecodedNames(fileNameByteList); */
         const map = {};
         for (const fileName in zip.files) {
             // 将二进制数据转换成字符串