Browse Source

针对分题阅重构调整API与图片获取方式

luoshi 4 years ago
parent
commit
65e54a1e72

+ 5 - 21
config.json

@@ -7,8 +7,7 @@
         "database": "stmms_ft"
     },
     "imageUrl": {
-        "sheet": "/{{examId}}-{{campusCode}}/{{subjectCode}}/{{examNumber}}-{{index}}.jpg",
-        "slice": "/{{examId}}-{{campusCode}}/{{subjectCode}}/{{examNumber}}-{{index}}.jpg",
+        "sheet": "/{{examId}}/{{subjectCode}}/{{examNumber}}-{{index}}.jpg",
         "package": "/{{examId}}/{{code}}/{{index}}.jpg"
     },
     "watermark": {
@@ -20,29 +19,14 @@
     },
     "openDevTools": false,
     "localStore": "",
-    "servers": [{
-            "name": "高校",
-            "host": "gx.markingcloud.com",
-            "bucketPrefix": "gx",
-            "upyunDomain": ""
-        },
-        {
-            "name": "奥鹏",
-            "host": "ap.markingcloud.com",
-            "bucketPrefix": "ap",
-            "upyunDomain": ""
-        },
+    "servers": [
         {
-            "name": "分题",
-            "host": "ft.markingcloud.com",
-            "bucketPrefix": "ft",
-            "upyunDomain": ""
+            "name": "线上",
+            "host": "ft.markingcloud.com"
         },
         {
             "name": "局域网",
-            "host": "localhost:8090",
-            "bucketPrefix": "gx",
-            "upyunDomain": ""
+            "host": "localhost:8090"
         }
     ]
 }

+ 18 - 26
source/lib/api.js

@@ -16,7 +16,7 @@ async function execute(uri, method, form) {
             maxAttempts: 50,
             retryDelay: 500,
             retryStrategy: request.RetryStrategies.HTTPOrNetworkError
-        }, function(error, response, body) {
+        }, function (error, response, body) {
             if (response.statusCode == 200) {
                 resolve(body);
             } else {
@@ -28,11 +28,11 @@ async function execute(uri, method, form) {
     })
 }
 
-module.exports.login = function() {
-    return execute('/api/user/login?withSchoolList=true', 'GET');
+module.exports.login = function () {
+    return execute('/api/user/login', 'GET');
 }
 
-module.exports.getExams = function(pageNumber, pageSize, schoolId) {
+module.exports.getExams = function (pageNumber, pageSize) {
     let uri = '/api/exams'
     let param = [];
     if (pageNumber != undefined) {
@@ -41,33 +41,18 @@ module.exports.getExams = function(pageNumber, pageSize, schoolId) {
     if (pageSize != undefined) {
         param.push('pageSize=' + pageSize)
     }
-    if (schoolId != undefined) {
-        param.push('schoolId=' + schoolId)
-    }
     if (param.length > 0) {
         uri = uri + '?' + param.join('&')
     }
     return execute(uri, 'GET');
 }
 
-module.exports.getStudents = function(examId, pageNumber, pageSize, upload, absent, withScoreDetail, withMarkTrack, params) {
+module.exports.getStudents = function (examId, pageNumber, pageSize, params) {
     let form = {
         examId: examId,
         pageNumber: pageNumber,
         pageSize: pageSize
     }
-    if (upload != undefined) {
-        form.upload = upload
-    }
-    if (absent != undefined) {
-        form.absent = absent
-    }
-    if (withScoreDetail != undefined) {
-        form.withScoreDetail = withScoreDetail
-    }
-    if (withMarkTrack != undefined) {
-        form.withMarkTrack = withMarkTrack
-    }
     if (params != undefined) {
         for (let key in params) {
             if (params[key] && params[key] != '') {
@@ -78,9 +63,9 @@ module.exports.getStudents = function(examId, pageNumber, pageSize, upload, abse
     return execute('/api/exam/students', 'POST', form);
 }
 
-module.exports.countStudents = function(examId, upload, absent) {
+module.exports.countStudents = function (examId, upload, absent) {
     let uri = '/api/students/count/' + examId
-    let param = [];
+    let param = []
     if (upload != undefined) {
         param.push('upload=' + (upload ? 'true' : 'false'))
     }
@@ -90,13 +75,20 @@ module.exports.countStudents = function(examId, upload, absent) {
     if (param.length > 0) {
         uri = uri + '?' + param.join('&')
     }
-    return execute(uri, 'GET');
+    return execute(uri, 'GET')
 }
 
-module.exports.getPackages = function(examId, upload) {
+module.exports.getPackages = function (examId, upload, withUrl) {
     let uri = '/api/package/count/' + examId
+    let param = []
     if (upload != undefined) {
-        uri = uri + '?upload=' + (upload ? 'true' : false)
+        param.push('upload=' + (upload ? 'true' : 'false'))
     }
-    return execute(uri, 'GET');
+    if (withUrl != undefined) {
+        param.push('withUrl=' + (withUrl ? 'true' : 'false'))
+    }
+    if (param.length > 0) {
+        uri = uri + '?' + param.join('&')
+    }
+    return execute(uri, 'GET')
 }

+ 0 - 4
source/lib/config.js

@@ -14,10 +14,6 @@ if (fs.existsSync(path.join(__dirname, '../../logs/time.log'))) {
     }
 }
 store['syncTime'] = syncTime
-store['upyun'] = {
-    operator: 'qmth',
-    password: 'qmth123456'
-}
 
 module.exports = store;
 

+ 1 - 14
source/lib/env.js

@@ -2,24 +2,11 @@ var store = {}
 
 module.exports = store;
 
-module.exports.merge = function(obj) {
+module.exports.merge = function (obj) {
     if (obj == undefined) {
         return
     }
     for (var field in obj) {
         store[field] = obj[field]
     }
-}
-
-module.exports.getSchoolName = function() {
-    let schoolName = undefined;
-    if (store.user != undefined && store.user.schoolList != undefined) {
-        for (let i = 0; i < store.user.schoolList.length; i++) {
-            if (store.user.schoolId == store.user.schoolList[i].id) {
-                schoolName = store.user.schoolList[i].name
-                break
-            }
-        }
-    }
-    return schoolName
 }

+ 46 - 167
source/lib/image.js

@@ -5,15 +5,13 @@ const env = require('./env.js')
 const config = require('./config.js')
 const logger = require('./logger.js')('image.js')
 const downloadLogger = require('./logger.js')('download')
-const upyun = require('./upyun.js')
-const PromisePool = require('./promise-pool.js')
 const fs = require('fs')
 const path = require('path')
 const readline = require('readline')
+const request_util = require('requestretry')
 const sizeOf = require('image-size')
 const mustache = require('mustache')
 const mkdirp = require('mkdirp')
-const moment = require('moment')
 const gm = config.imagemagick != undefined ? require('gm').subClass({
     imageMagick: true,
     appPath: config.imagemagick
@@ -40,13 +38,6 @@ class executor extends EventEmitter {
         })
     }
 
-    async checkFile(url, client) {
-        let size = sizeOf(await client.download(url))
-        if (size.width == 0 || size.height == 0) {
-            throw 'invalid image data:' + url
-        }
-    }
-
     async addWatermark(image, file, student, index, showMarker, showHeader) {
         let fontFile = config.watermark.fontFile
         let color = config.watermark.color
@@ -154,9 +145,29 @@ class executor extends EventEmitter {
         })
     }
 
-    async downloadFile(append, remoteTemplate, localTemplate, data, dir, client, bucket, index, watermark, showMarker, showHeader) {
+    async downloadUrl(url) {
+        return new Promise((resolve, reject) => {
+            request_util({
+                url: url,
+                method: 'GET',
+                timeout: 3000,
+                maxAttempts: 3,
+                retryDelay: 500,
+                retryStrategy: request_util.RetryStrategies.HTTPOrNetworkError
+            }, function (error, response, body) {
+                if (response.statusCode == 200) {
+                    resolve(body);
+                } else {
+                    let message = response.statusCode + ' ' + (error || '') + (response.headers['error-info'] || '')
+                    logger.error(message)
+                    reject(message)
+                }
+            })
+        })
+    }
+
+    async downloadFile(type, append, url, localTemplate, data, dir, index, watermark, showMarker, showHeader) {
         data.index = index
-        let remote = mustache.render(remoteTemplate, data)
         let local = path.join(dir, mustache.render(localTemplate, data))
         mkdirp.sync(path.dirname(local))
 
@@ -165,26 +176,19 @@ class executor extends EventEmitter {
             return Promise.resolve()
         } else {
             let imgData
-            if (config.localStore != undefined && config.localStore.length > 0) {
-                let cache = path.join(config.localStore, bucket, remote)
-                if (fs.existsSync(cache)) {
-                    imgData = fs.readFileSync(cache)
-                }
-            }
-            if (imgData == undefined) {
-                try {
-                    imgData = await client.download(remote)
-                } catch (err) {
-                    if (err.code === 404) {
-                        //文件不存在,记录日志并跳过
-                        downloadLogger.error('404 ' + bucket + ' ' + remote)
-                        return Promise.resolve()
-                    } else {
-                        logger.error(err)
-                        return Promise.reject(err)
-                    }
+            try {
+                imgData = await this.downloadUrl(url)
+            } catch (err) {
+                if (err.code === 404) {
+                    //文件不存在,记录日志并跳过
+                    downloadLogger.error('404 ' + type + ' ' + url)
+                    return Promise.resolve()
+                } else {
+                    logger.error(err)
+                    return Promise.reject(err)
                 }
             }
+
             //是否需要添加分数水印
             if (watermark) {
                 return this.addWatermark(imgData, local, data, index, showMarker, showHeader)
@@ -205,15 +209,8 @@ class executor extends EventEmitter {
     }
 
     async downloadSheet(dir, template, append, failover, watermark, showMarker, showHeader, params) {
-        let bucket = env.server.bucketPrefix + '-sheet'
-        let client = upyun(bucket, config.upyun.operator, config.upyun.password)
-        if (env.server.upyunDomain && env.server.upyunDomain != '') {
-            //局域网模式修改图片服务器地址
-            client.setDomain(env.server.upyunDomain)
-        }
-
         try {
-            let totalCount = await api.countStudents(env.examId, true, undefined)
+            let totalCount = await api.countStudents(env.examId, true)
             this.emit('total', totalCount)
 
             let count = 0
@@ -222,7 +219,11 @@ class executor extends EventEmitter {
             for (;;) {
                 pageNumber++
 
-                let array = await api.getStudents(env.examId, pageNumber, 10, true, undefined, watermark === true, watermark === true, params)
+                params.upload = true
+                params.withSheeturl = true
+                params.withScoreDetail = watermark === true
+                params.withMarkTrack = watermark === true
+                let array = await api.getStudents(env.examId, pageNumber, 10, params)
                 if (array == undefined || array.length == 0) {
                     break
                 }
@@ -230,8 +231,8 @@ class executor extends EventEmitter {
                     let promises = []
                     let student = array[i]
                     student.examId = env.examId
-                    for (let i = 1; i <= student.sheetCount; i++) {
-                        promises.push(this.downloadFile(append, config.imageUrl.sheet, template, student, dir, client, bucket, i, watermark, showMarker, showHeader))
+                    for (let i = 0; i < student.sheetUrls.length; i++) {
+                        promises.push(this.downloadFile('sheet', append, student.sheetUrls[i], template, student, dir, i + 1, watermark, showMarker, showHeader))
                     }
                     try {
                         //等待所有图片下载完毕
@@ -259,23 +260,17 @@ class executor extends EventEmitter {
     }
 
     async downloadPackage(dir, template, append, failover) {
-        let bucket = env.server.bucketPrefix + '-package'
-        let client = upyun(bucket, config.upyun.operator, config.upyun.password)
-        if (env.server.upyunDomain && env.server.upyunDomain != '') {
-            client.setDomain(env.server.upyunDomain)
-        }
-
         try {
-            let array = await api.getPackages(env.examId, true)
+            let array = await api.getPackages(env.examId, true, true)
             this.emit('total', array.length)
             let count = 0
             this.emit('count', 0)
             for (let i = 0; i < array.length; i++) {
                 let p = array[i]
                 p.examId = env.examId
-                for (let i = 1; i <= p.picCount; i++) {
+                for (let i = 0; i < p.urls.length; i++) {
                     try {
-                        await this.downloadFile(append, config.imageUrl.package, template, p, dir, client, bucket, i)
+                        await this.downloadFile('package', append, p.urls[i], template, p, dir, i + 1)
                     } catch (err) {
                         //判断是否异常终止
                         if (failover) {
@@ -297,124 +292,8 @@ class executor extends EventEmitter {
             this.emit('error', error)
         }
     }
-
-    async checkSlice(dir, concurrent) {
-        let bucket = env.server.bucketPrefix + '-slice'
-        let client = upyun(bucket, config.upyun.operator, config.upyun.password)
-        if (env.server.upyunDomain && env.server.upyunDomain != '') {
-            //局域网模式修改图片服务器地址
-            client.setDomain(env.server.upyunDomain)
-        }
-
-        try {
-            let logFile = path.join(dir, 'result.txt')
-            fs.writeFileSync(logFile, moment().format('YYYY-MM-DD HH:mm:ss') + ', examId=' + env.examId + '\r\n')
-
-            let totalCount = await api.countStudents(env.examId, true, false)
-            this.emit('total', totalCount)
-
-            let self = this
-            let count = 0
-            let pageNumber = 0
-            let pool = PromisePool.create(concurrent, function(student) {
-                student.examId = env.examId
-                student.promises = []
-                for (let i = 1; i <= student.sliceCount; i++) {
-                    student.index = i
-                    let url = mustache.render(config.imageUrl.slice, student)
-                    student.promises.push(new Promise(resolved => {
-                        self.checkFile(url, client).then(() => {
-                            //fs.appendFileSync(logFile, url + ': success\r\n')
-                        }).catch(() => {
-                            fs.appendFileSync(logFile, url + ': error\r\n')
-                        }).finally(() => {
-                            resolved()
-                        })
-                    }))
-                }
-                return Promise.all(student.promises)
-            })
-            pool.on('count', function(offset) {
-                self.emit('count', count + offset)
-            })
-
-            this.emit('count', 0)
-            for (;;) {
-                pageNumber++
-                let array = await api.getStudents(env.examId, pageNumber, 200, true, false, false, false)
-                if (array == undefined || array.length == 0) {
-                    break
-                }
-                await pool.start(array)
-                count += array.length
-            }
-            this.emit('finish')
-            fs.appendFileSync(logFile, moment().format('YYYY-MM-DD HH:mm:ss') + ', examId=' + env.examId)
-        } catch (error) {
-            logger.error('check slice error:' + error)
-            logger.error(error)
-            this.emit('error', error)
-        }
-    }
-
-    async checkSliceSerial(dir) {
-        let bucket = env.server.bucketPrefix + '-slice'
-        let client = upyun(bucket, config.upyun.operator, config.upyun.password)
-        if (env.server.upyunDomain && env.server.upyunDomain != '') {
-            //局域网模式修改图片服务器地址
-            client.setDomain(env.server.upyunDomain)
-        }
-
-        try {
-            let logFile = path.join(dir, 'result.txt')
-            fs.writeFileSync(logFile, moment().format('YYYY-MM-DD HH:mm:ss') + ', examId=' + env.examId + '\r\n')
-
-            let totalCount = await api.countStudents(env.examId, true, false)
-            this.emit('total', totalCount)
-
-            let self = this
-            let count = 0
-            let pageNumber = 0
-            this.emit('count', 0)
-            for (;;) {
-                pageNumber++
-
-                let array = await api.getStudents(env.examId, pageNumber, 100, true, false, false, false)
-                if (array == undefined || array.length == 0) {
-                    break
-                }
-                for (let i = 0; i < array.length; i++) {
-                    let student = array[i]
-                    student.examId = env.examId
-                    student.promises = []
-                    for (let i = 1; i <= student.sliceCount; i++) {
-                        student.index = i
-                        let url = mustache.render(config.imageUrl.slice, student)
-                        student.promises.push(new Promise(resolved => {
-                            self.checkFile(url, client).then(() => {
-                                //fs.appendFileSync(logFile, url + ': success\r\n')
-                            }).catch(() => {
-                                fs.appendFileSync(logFile, url + ': error\r\n')
-                            }).finally(() => {
-                                resolved()
-                            })
-                        }))
-                    }
-                    await Promise.all(student.promises)
-                    count++
-                    this.emit('count', count)
-                }
-            }
-            this.emit('finish')
-            fs.appendFileSync(logFile, moment().format('YYYY-MM-DD HH:mm:ss') + ', examId=' + env.examId)
-        } catch (error) {
-            logger.error('check slice error:' + error)
-            logger.error(error)
-            this.emit('error', error)
-        }
-    }
 }
 
-module.exports = function() {
+module.exports = function () {
     return new executor()
 }

+ 17 - 37
source/lib/sync.js

@@ -16,14 +16,15 @@ class executor extends EventEmitter {
             this.emit('total', totalCount)
 
             let promises = []
-            let campus = {}
             let count = 0
             let pageNumber = 0
             this.emit('student', 0)
             while (true) {
                 pageNumber++
                 logger.info('student page=' + pageNumber)
-                let array = await api.getStudents(env.examId, pageNumber, 100, undefined, undefined, true)
+                let array = await api.getStudents(env.examId, pageNumber, 100, {
+                    withScoreDetail: true
+                })
                 if (array == undefined || array.length == 0) {
                     break
                 }
@@ -46,14 +47,9 @@ class executor extends EventEmitter {
                     }
                     datas.push([obj['id'], env.examId, obj['schoolId'], obj['examNumber'], obj['name'], obj['studentCode'], obj['subjectCode'],
                         obj['subjectName'], obj['campusName'], obj['packageCode'], obj['batchCode'], obj['sheetCount'], obj['sliceCount'], obj['answers'],
-                        obj['upload'] ? 1 : 0, obj['absent'] ? 1 : 0, obj['breach'] ? 1 : 0, obj['manualAbsent'] ? 1 : 0, obj['objectiveScore'].length>0?obj['objectiveScore']:0,
-                        obj['subjectiveScore'].length>0?obj['subjectiveScore']:0, objList.join(';'), subList.join(';'), obj['examSite'], obj['examRoom'], obj['remark']
+                        obj['upload'] ? 1 : 0, obj['absent'] ? 1 : 0, obj['breach'] ? 1 : 0, obj['manualAbsent'] ? 1 : 0, obj['objectiveScore'].length > 0 ? obj['objectiveScore'] : 0,
+                        obj['subjectiveScore'].length > 0 ? obj['subjectiveScore'] : 0, objList.join(';'), subList.join(';'), obj['examSite'], obj['examRoom'], obj['remark']
                     ])
-
-                    campus[obj['campusCode']] = {
-                        schoolId: obj['schoolId'],
-                        name: obj['campusName']
-                    }
                 }
                 //console.log('get:' + array.length)
                 promises.push(new Promise((resolve, reject) => {
@@ -74,40 +70,24 @@ class executor extends EventEmitter {
                 }))
             }
 
-            //save campus
-            this.emit('campus', 0)
-            let campusData = []
-            for (let code in campus) {
-                campusData.push([code, campus[code].schoolId, campus[code].name])
+            //get and save package
+            this.emit('package', 0)
+            let packages = await api.getPackages(env.examId)
+            let packageData = []
+            for (let i = 0; i < packages.length; i++) {
+                let obj = packages[i]
+                packageData.push([env.examId, obj['code'], obj['picCount']])
             }
-            logger.info('campus count:' + campusData.length)
+            logger.info('package count:' + packageData.length)
             promises.push(new Promise((resolve, reject) => {
-                db.batchQuery('replace into b_campus(id, school_id, name) values (?,?,?)', campusData).then(() => {
-                    this.emit('campus', campusData.length)
+                db.batchQuery('replace into eb_exam_package(exam_id, code, pic_count) values (?,?,?)', packageData).then(() => {
+                    this.emit('package', packageData.length)
                     resolve()
-                }).catch(err => {
+                }).catch((err) => {
                     reject(err)
                 })
             }))
 
-            //get and save package
-            // this.emit('package', 0)
-            // let packages = await api.getPackages(env.examId)
-            // let packageData = []
-            // for (let i = 0; i < packages.length; i++) {
-            //     let obj = packages[i]
-            //     packageData.push([env.examId, obj['code'], obj['picCount']])
-            // }
-            // logger.info('package count:' + packageData.length)
-            // promises.push(new Promise((resolve, reject) => {
-            //     db.batchQuery('replace into eb_exam_package(exam_id, code, pic_count) values (?,?,?)', packageData).then(() => {
-            //         this.emit('package', packageData.length)
-            //         resolve()
-            //     }).catch((err) => {
-            //         reject(err)
-            //     })
-            // }))
-
             await Promise.all(promises)
             this.emit('finish')
         } catch (err) {
@@ -119,6 +99,6 @@ class executor extends EventEmitter {
     }
 }
 
-module.exports = function() {
+module.exports = function () {
     return new executor()
 }

+ 0 - 365
source/lib/upyun.js

@@ -1,365 +0,0 @@
-var util = require("thinkjs-util");
-var request = require("requestretry");
-var fs = require("fs");
-var path = require("path");
-
-module.exports = util.Class(function() {
-    return {
-        /**
-         * 默认接口域名
-         * @type {String}
-         */
-        DEFAULT_DOMAIN: "v0.api.upyun.com",
-        /**
-         * 接口的域名
-         * @type {String}
-         */
-        domain: this.DEFAULT_DOMAIN,
-        /**
-         * 初始化
-         * @param  {[type]} bucketname [description]
-         * @param  {[type]} username   [description]
-         * @param  {[type]} password   [description]
-         * @return {[type]}            [description]
-         */
-        init: function(bucketname, username, password) {
-            this.bucketname = bucketname;
-            this.username = username;
-            this.password = util.md5(password);
-            this.domain = this.DEFAULT_DOMAIN;
-        },
-        /**
-         * 设置接口的domain
-         * @param {[type]} domain [description]
-         */
-        setDomain: function(domain) {
-            this.domain = domain;
-            return this;
-        },
-        /**
-         * 签名
-         * @param  {[type]} method [description]
-         * @param  {[type]} uri    [description]
-         * @param  {[type]} date   [description]
-         * @param  {[type]} length [description]
-         * @return {[type]}        [description]
-         */
-        sign: function(method, uri, date, length) {
-            var sign = method + '&' + uri + '&' + date + '&' + length + '&' + this.password;
-            return 'UpYun ' + this.username + ':' + util.md5(sign);
-        },
-        /**
-         * 获取文件或者文件夹的信息
-         * @param  {[type]} file [description]
-         * @return {[type]}      [description]
-         */
-        getInfo: function(file) {
-            return this.request(file, 'HEAD').then(function(response) {
-                var headers = response.headers;
-                return {
-                    type: headers['x-upyun-file-type'],
-                    size: headers['x-upyun-file-size'],
-                    date: headers['x-upyun-file-date']
-                };
-            });
-        },
-        /**
-         * 查看空间占用信息
-         * @return {[type]} [description]
-         */
-        getUsage: function(path) {
-            path = path || "/";
-            return this.request(path + "?usage").then(function(response) {
-                return parseInt(response.body, 10);
-            });
-        },
-        /**
-         * 从返回的headers里获取图片的信息
-         * @param  {[type]} response [description]
-         * @return {[type]}          [description]
-         */
-        getPicInfo: function(response) {
-            var headers = response.headers;
-            return {
-                width: headers['x-upyun-width'],
-                height: headers['x-upyun-height'],
-                frames: headers['x-upyun-frames'],
-                type: headers['x-upyun-file-type']
-            };
-        },
-        /**
-         * 上传文件或者文件夹
-         * @param  {[type]} savePath [description]
-         * @param  {[type]} filePath [description]
-         * @return {[type]}          [description]
-         */
-        upload: function(savePath, filePath, headers) {
-            var defaultHeaders = {
-                mkdir: true
-            };
-            if (util.isObject(headers)) {
-                defaultHeaders = util.extend(defaultHeaders, headers);
-            } else if (headers) {
-                defaultHeaders["Content-Secret"] = headers;
-            }
-            var self = this;
-            //文件上传
-            if (util.isFile(filePath)) {
-                var stream = fs.readFileSync(filePath);
-                var filename;
-                if (!(/\.\w+$/.test(savePath))) {
-                    filename = filePath.split('/');
-                    filename = filename[filename.length - 1];
-                    savePath += '/' + filename;
-                }
-                return this.request(savePath, 'PUT', stream, defaultHeaders).then(function(response) {
-                    return self.getPicInfo(response);
-                }).then(function(data) {
-                    if (filename) {
-                        data.filename = filename;
-                    }
-                    return data;
-                });
-            } else if (util.isDir(filePath)) { //文件夹上传
-                if (savePath.slice(-1) !== '/') {
-                    savePath += '/';
-                }
-                if (filePath.slice(-1) !== '/') {
-                    filePath += '/';
-                }
-                var promises = [];
-                var files = fs.readdirSync(filePath);
-                files.forEach(function(item) {
-                    var nFilePath = filePath + item;
-                    var state = fs.statSync(nFilePath);
-                    if (state.isFile() || state.isDirectory()) {
-                        var promise = self.upload(savePath + item, nFilePath);
-                        promises.push(promise);
-                    }
-                });
-                if (promises.length) {
-                    return util.Promise.all(promises);
-                } else {
-                    return self.mkDir(savePath);
-                }
-            } else { //普通内容上传
-                return this.request(savePath, 'PUT', filePath, defaultHeaders).then(function(response) {
-                    return self.getPicInfo(response);
-                });
-            }
-        },
-        /**
-         * 文件或者文件夹下载
-         * @param  {[type]} path     [description]
-         * @param  {[type]} savePath [description]
-         * @return {[type]}          [description]
-         */
-        download: function(sourcePath, savePath, typeData) {
-            sourcePath = sourcePath || "/";
-            //if (savePath && savePath.slice(-1) !== "/") {
-            //	savePath += "/";
-            //}
-            var self = this;
-            var promise = typeData ? util.getPromise(typeData) : this.getInfo(sourcePath);
-            return promise.then(function(data) {
-                if (data.type === 'folder') {
-                    if (sourcePath.slice(-1) !== "/") {
-                        sourcePath += "/";
-                    }
-                    return self.readDir(sourcePath).then(function(data) {
-                        var promises = [];
-                        data.forEach(function(item) {
-                            var nPath = sourcePath + item.name;
-                            var promise;
-                            //文件夹
-                            if (item.type === 'F') {
-                                promise = self.download(nPath + "/", savePath + item.name + "/", {
-                                    type: 'folder'
-                                });
-                            } else if (item.type) { //文件
-                                promise = self.download(nPath, savePath, {
-                                    type: 'file'
-                                });
-                            }
-                            promises.push(promise);
-                        });
-                        return util.Promise.all(promises);
-                    });
-                } else {
-                    //单个文件
-                    return self.request(sourcePath, 'GET', '', {}, {
-                        encoding: null
-                    }).then(function(response) {
-                        if (!savePath) {
-                            return response.body;
-                        }
-                        var sourceExt = path.extname(sourcePath);
-                        var saveExt = path.extname(savePath);
-                        var fileSavePath = savePath;
-                        if (sourceExt && sourceExt === saveExt) {
-                            util.mkdir(path.dirname(savePath));
-                        } else {
-                            util.mkdir(savePath);
-                            fileSavePath = savePath + path.basename(sourcePath);
-                        }
-                        fs.writeFileSync(fileSavePath, response.body);
-                    });
-                }
-            });
-        },
-        /**
-         * 删除文件或者文件夹
-         * @param  {[type]} path  [description]
-         * @param  {[type]} force [description]
-         * @return {[type]}       [description]
-         */
-        rm: function(path, force) {
-            if (!path) {
-                return util.getPromise(new Error("path can't empty"), true);
-            }
-            if (path.slice(-1) !== '/') {
-                path += '/';
-            }
-            var self = this;
-            return this.getInfo(path).then(function(data) {
-                if (data.type === 'folder') {
-                    if (!force) {
-                        return self.request(path, 'DELETE').then(function(response) {
-                            return response.body;
-                        });
-                    }
-                    return self.readDir(path).then(function(data) {
-                        var promises = [];
-                        data.forEach(function(item) {
-                            var nPath = path + item.name;
-                            var promise;
-                            //文件夹
-                            if (item.type === 'F') {
-                                promise = self.rm(nPath + "/", true);
-                            } else if (item.type) { //文件
-                                promise = self.rm(nPath);
-                            }
-                            promises.push(promise);
-                        });
-                        if (promises.length) {
-                            return util.Promise.all(promises);
-                        }
-                    }).then(function() {
-                        return self.rm(path, false);
-                    });
-                } else {
-                    return self.request(path, 'DELETE').then(function(response) {
-                        return response.body;
-                    });
-                }
-            });
-        },
-        /**
-         * 递归创建目录
-         * @param  {[type]} path [description]
-         * @return {[type]}      [description]
-         */
-        mkDir: function(path) {
-            return this.request(path, 'PUT', '', {
-                mkdir: true,
-                folder: true
-            }).then(function(response) {
-                return response.body;
-            });
-        },
-        /**
-         * 读取目录下的文件和子目录
-         * @param  {[type]} dir [description]
-         * @return {[type]}     [description]
-         */
-        readDir: function(path, recursive) {
-            path = path || "/";
-            if (path.slice(-1) !== '/') {
-                path += '/';
-            }
-            var self = this;
-            return this.request(path, "GET").then(function(response) {
-                var dirs = response.body.split("\n");
-                var result = [];
-                var promises = [];
-                for (var i = 0; i < dirs.length; i++) {
-                    var dir = dirs[i];
-                    var attrs = dir.split("\t");
-                    dir = {
-                        name: attrs[0],
-                        type: attrs[1],
-                        size: attrs[2],
-                        time: attrs[3]
-                    };
-                    if (recursive && dir.type === 'F') {
-                        var promise = self.readDir(path + dir.name, true).then(function(data) {
-                            dir.children = data;
-                        });
-                        promises.push(promise);
-                    }
-                    result.push(dir);
-                }
-                if (promises.length) {
-                    return util.Promise.all(promises).then(function() {
-                        return result;
-                    });
-                } else {
-                    return result;
-                }
-            });
-        },
-        /**
-         * 请求数据
-         * @param  {[type]} uri     [description]
-         * @param  {[type]} method  [description]
-         * @param  {[type]} data    [description]
-         * @param  {[type]} headers [description]
-         * @param  {[type]} options [description]
-         * @return {[type]}         [description]
-         */
-        request: function(uri, method, data, headers, options) {
-            uri = "/" + this.bucketname + uri;
-            method = method || "GET";
-            headers = headers || {};
-            var length = 0;
-            if (data) {
-                length = !util.isBuffer(data) ? Buffer.byteLength(data) : data.length;
-            }
-            var date = (new Date()).toUTCString();
-            var Authorization = this.sign(method, uri, date, length);
-            headers = util.extend(headers, {
-                'Content-Length': length,
-                'Date': date,
-                'Authorization': Authorization
-            });
-            var deferred = util.getDefer();
-            var url = '';
-            if (this.domain == this.DEFAULT_DOMAIN) {
-                url = "https://" + this.domain + uri;
-            } else {
-                url = "http://" + this.domain + uri;
-            }
-            var opts = util.extend({
-                url: url,
-                method: method,
-                body: data || "",
-                timeout: 120000,
-                headers: headers,
-                maxAttempts: 5,
-                retryDelay: 500,
-                retryStrategy: request.RetryStrategies.HTTPOrNetworkError
-            }, options);
-            request(opts, function(error, response, body) {
-                if (error || response == undefined || response.statusCode !== 200) {
-                    deferred.reject({
-                        code: (response && response.statusCode) ? response.statusCode : -1,
-                        message: error || "statusCode: " + response.statusCode + "; body: " + body
-                    });
-                } else {
-                    deferred.resolve(response);
-                }
-            });
-            return deferred.promise;
-        }
-    };
-});

+ 0 - 16
source/test/upyun-test.js

@@ -1,16 +0,0 @@
-const upyun = require('../lib/upyun.js')
-const config = require('../lib/config.js')
-
-//env.server = config.servers[0]
-let client = upyun('gx-sheet', config.upyun.operator, config.upyun.password)
-client.getInfo('/55-1402/20053A/181000885-2.jpg').then(result => {
-    console.log(result)
-}).catch(err => {
-    console.log(err)
-})
-
-client.download('/55-1402/20053A/181000885-2.jpg').then(result => {
-    console.log('success:' + result.length)
-}).catch(err => {
-    console.log(err)
-})

+ 2 - 10
source/view/check.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="school-list.html"></a>
-                </span>
                 <span class="pipe">|</span><a href="login.html">退出</a>
             </span>
         </div>
@@ -65,12 +63,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             $('#path-select').click(() => {
                 dialog.showOpenDialog({
                     title: '请选择保存目录',

+ 6 - 13
source/view/exam-list.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="school-list.html"></a>
-                </span>
                 <span class="pipe">|</span><a href="login.html">退出</a>
             </span>
         </div>
@@ -62,13 +60,7 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
-            api.getExams(1, 1000, env.user.schoolId).then(list => {
+            api.getExams(1, 1000).then(list => {
                 examList = list
                 initPage()
             }).catch(err => {
@@ -79,7 +71,8 @@
         function initPage() {
             let totalCount = examList.length
             if (totalCount > 0) {
-                pageCount = totalCount % pageSize == 0 ? parseInt(totalCount / pageSize) : parseInt(totalCount / pageSize) + 1
+                pageCount = totalCount % pageSize == 0 ? parseInt(totalCount / pageSize) : parseInt(totalCount /
+                    pageSize) + 1
             } else {
                 pageCount = 0
             }
@@ -92,7 +85,7 @@
                 }))
                 $('#page-list').append(dom)
 
-                dom.click(function() {
+                dom.click(function () {
                     changePage(parseInt($(this).attr('data-number')))
                 })
             }

+ 4 - 11
source/view/image-check.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="##"></a>
-                </span>
                 <span class="pipe">|</span><a href="##">退出</a>
             </span>
         </div>
@@ -27,7 +25,8 @@
                 <h3>正在检查图片,请耐心等候 ~</h3>
                 <div class="progress">
                     <div class="progress-outer">
-                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span></div>
+                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span>
+                        </div>
                     </div>
                 </div>
                 <p>已检查人数:<b id="finish-count"></b> / 全部人数:<b id="total-count"></b></p>
@@ -56,12 +55,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             let config = JSON.parse(window.localStorage.getItem('check-config'))
             let totalCount;
             imageUtil.on('total', (count) => {

+ 9 - 16
source/view/image-download.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="##"></a>
-                </span>
                 <span class="pipe">|</span><a href="##">退出</a>
             </span>
         </div>
@@ -27,7 +25,8 @@
                 <h3>正在下载图片,请耐心等候 ~</h3>
                 <div class="progress">
                     <div class="progress-outer">
-                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span></div>
+                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span>
+                        </div>
                     </div>
                 </div>
                 <p>已下载图片:<b id="finish-count"></b> / 全部图片:<b id="total-count"></b></p>
@@ -59,12 +58,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             let config = JSON.parse(window.localStorage.getItem('image-config'))
             let totalCount;
             imageUtil.on('total', (count) => {
@@ -96,11 +89,11 @@
                 $('#popup').show()
             })
             if (config.type == '1') {
-                imageUtil.downloadSheet(config.dir, config.template, config.append, config.failover, config.watermark, config.showMarker, config.showHeader, {
-                    examNumberIn: config.examNumber,
-                    subjectCode: config.subjectCode,
-                    campusName: config.campusName
-                })
+                imageUtil.downloadSheet(config.dir, config.template, config.append, config.failover, config
+                    .watermark, config.showMarker, config.showHeader, {
+                        examNumberIn: config.examNumber,
+                        subjectCode: config.subjectCode
+                    })
             } else {
                 imageUtil.downloadPackage(config.dir, config.template, config.append, config.failover)
             }

+ 5 - 21
source/view/image.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="school-list.html"></a>
-                </span>
                 <span class="pipe">|</span><a href="login.html">退出</a>
             </span>
         </div>
@@ -93,16 +91,13 @@
                     </tr>
                     <tr id="examNumber-select" style="display: none">
                         <th>准考证号:</th>
-                        <td><input id="examNumber-input" type="text" style="width: 600px" placeholder="多个准考证号用逗号分隔" /></td>
+                        <td><input id="examNumber-input" type="text" style="width: 600px" placeholder="多个准考证号用逗号分隔" />
+                        </td>
                     </tr>
                     <tr id="subjectCode-select" style="display: none">
                         <th>科目代码:</th>
                         <td><input id="subjectCode-input" type="text" style="width: 600px" /></td>
                     </tr>
-                    <tr id="campusName-select" style="display: none">
-                        <th>学习中心:</th>
-                        <td><input id="campusName-input" type="text" style="width: 600px" /></td>
-                    </tr>
 
                     <tr id="message-tr" style="display: none">
                         <th></th>
@@ -132,12 +127,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             $('input:radio[name="type"]').change(() => {
                 let type = $('input:radio:checked').val()
                 if (type == '1') {
@@ -146,7 +135,6 @@
                     $('#watermark-select').show()
                     $('#marker-select').show()
                     $('#header-select').show()
-                    $('#examNumber-select').show()
                     $('#subjectCode-select').show()
                     $('#campusName-select').show()
                 } else if (type == '2') {
@@ -157,7 +145,6 @@
                     $('#header-select').hide()
                     $('#examNumber-select').hide()
                     $('#subjectCode-select').hide()
-                    $('#campusName-select').hide()
                 } else {
                     $('#message-tr').hide()
                     $('#watermark-select').hide()
@@ -165,7 +152,6 @@
                     $('#header-select').hide()
                     $('#examNumber-select').hide()
                     $('#subjectCode-select').hide()
-                    $('#campusName-select').hide()
                 }
             })
 
@@ -189,7 +175,6 @@
                 let showHeader = $('input:radio[name="showHeader"]:checked').val()
                 let examNumber = $('#examNumber-input').val()
                 let subjectCode = $('#subjectCode-input').val()
-                let campusName = $('#campusName-input').val()
                 let template = $('#template-input').val()
                 let dir = $('#path-text').val()
                 if (type == undefined || type == '') {
@@ -230,8 +215,7 @@
                     showMarker: showMarker == '1',
                     showHeader: showHeader == '1',
                     examNumber: examNumber,
-                    subjectCode: subjectCode,
-                    campusName: campusName
+                    subjectCode: subjectCode
                 }))
                 window.location.href = 'image-download.html'
             })

+ 3 - 11
source/view/index.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="school-list.html"></a>
-                </span>
                 <span class="pipe">|</span><a href="login.html">退出</a>
             </span>
         </div>
@@ -30,7 +28,7 @@
                     <li class="l1"><a href="exam-list.html"><span></span>考试切换</a></li>
                     <li class="l2"><a href="sync.html"><span></span>数据同步</a></li>
                     <li class="l3"><a href="image.html"><span></span>图片下载</a></li>
-                    <li class="l2"><a href="check.html"><span></span>图片检查</a></li>
+                    <!--<li class="l2"><a href="check.html"><span></span>图片检查</a></li>-->
                 </ul>
             </div>
         </div>
@@ -45,12 +43,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             $('#exam-title').find('.id').html(env.exam.id)
             $('#exam-title').find('.name').html(env.exam.name)
             $('#exam-title').find('.time').html(env.exam.examTime)

+ 5 - 4
source/view/login.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
     <style type="text/css">
         body {
@@ -20,7 +21,7 @@
             <form>
                 <div>
                     <select id="server-select">
-                        <option value="">请选择云端环境</option>
+                        <option value="">请选择服务地址</option>
                     </select>
                 </div>
                 <div>
@@ -48,7 +49,7 @@
             }
         })
 
-        document.onkeydown = function(event) {
+        document.onkeydown = function (event) {
             var e = event || window.event;
             if (e && e.keyCode == 13) { //回车键的键值为13
                 $('#login-button').click() //调用登录按钮的登录事件
@@ -65,7 +66,7 @@
             env.loginName = $('#loginName-input').val()
             env.password = $('#password-input').val()
             if (env.server == undefined) {
-                alert('请选择云端环境')
+                alert('请选择服务地址')
                 return
             }
             if (env.loginName == '') {

+ 0 - 129
source/view/school-list.html

@@ -1,129 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
-    <link rel="stylesheet" href="css/style.css">
-</head>
-
-<body>
-    <div class="wp">
-        <div class="hd">
-            <div class="logo"><img src="img/logo.png" /></div>
-            <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span class="pipe">|</span><a href="login.html">退出</a>
-            </span>
-        </div>
-        <div class="cont">
-            <div class="title cl" style="background:#FFF;">
-                <span class="y">共有<b id="total-count">0</b>所学校,请选择</span>
-                <h2>学校列表</h2>
-            </div>
-            <table cellpadding="0" cellspacing="0" width="100%" class="tablelist">
-                <thead>
-                    <th>ID</th>
-                    <th>学校名称</th>
-                    <th>操作</th>
-                </thead>
-                <tbody id="school-list">
-                </tbody>
-            </table>
-            <div class="page">
-                <span class="back" id="previous-button">上页</span>
-                <div id="page-list">
-                </div>
-                <span class="next" id="next-button">下页</span>
-            </div>
-        </div>
-        <div class="ft">Copyright © 2011-2020 www.qmth.com.cn, All Rights Reserved</div>
-    </div>
-
-    <script>
-        const $ = require('jquery')
-        const env = require('../lib/env.js')
-        const api = require('../lib/api.js')
-        const mustache = require('mustache')
-        const schoolTemplate = '<tr><td>{{id}}</td><td>{{name}}</td>\
-            <td><a href="##" data-index="{{index}}">切换学校</a></td></tr>'
-        const pageTemplate = '<a href="##" data-number="{{number}}">{{number}}</a>'
-        const pageSize = 10
-
-        let schoolList = []
-        let currentPage
-        let pageCount
-        $(document).ready(() => {
-            env.merge(JSON.parse(window.localStorage.getItem('env')))
-            $('#user-name').html(env.user.userName)
-
-            schoolList = env.user.schoolList
-            initPage()
-        })
-
-        function initPage() {
-            let totalCount = schoolList.length
-            if (totalCount > 0) {
-                pageCount = totalCount % pageSize == 0 ? parseInt(totalCount / pageSize) : parseInt(totalCount / pageSize) + 1
-            } else {
-                pageCount = 0
-            }
-            $('#total-count').html(totalCount)
-
-            $('#page-list').empty()
-            for (let i = 1; i <= pageCount; i++) {
-                let dom = $(mustache.render(pageTemplate, {
-                    number: i
-                }))
-                $('#page-list').append(dom)
-
-                dom.click(function() {
-                    changePage(parseInt($(this).attr('data-number')))
-                })
-            }
-            $('#previous-button').click(() => {
-                if (currentPage > 1) {
-                    changePage(currentPage - 1)
-                }
-            })
-            $('#next-button').click(() => {
-                if (currentPage < pageCount) {
-                    changePage(currentPage + 1)
-                }
-            })
-            if (pageCount > 0) {
-                changePage(1)
-            }
-        }
-
-        function render() {
-            $('#page-list').find('a').removeClass('on')
-            $('#page-list').find('a[data-number="' + currentPage + '"]').addClass('on')
-
-            $('#school-list').empty()
-            let start = (currentPage - 1) * pageSize
-            let end = start + pageSize
-            for (let i = start; i < end && i < schoolList.length; i++) {
-                schoolList[i].index = i
-                let dom = $(mustache.render(schoolTemplate, schoolList[i]))
-                $('#school-list').append(dom)
-
-                dom.find('a').click(selectSchool)
-            }
-        }
-
-        function selectSchool() {
-            let school = schoolList[parseInt($(this).attr('data-index'))]
-            env.user.schoolId = school.id
-            window.localStorage.setItem('env', JSON.stringify(env))
-            window.location.href = 'exam-list.html'
-        }
-
-        function changePage(pageNumber) {
-            currentPage = pageNumber
-            render()
-        }
-    </script>
-</body>
-
-</html>

+ 4 - 11
source/view/sync-run.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="##"></a>
-                </span>
                 <span class="pipe">|</span><a href="##">退出</a>
             </span>
         </div>
@@ -27,7 +25,8 @@
                 <h3 id="message">正在下载考生...</h3>
                 <div class="progress">
                     <div class="progress-outer">
-                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span></div>
+                        <div id="progress" class="progress-inner" style="width: 0%;"><span class="progress-text"></span>
+                        </div>
                     </div>
                 </div>
                 <p>已数据同步考生:<b id="finish-count"></b> / 全部考生:<b id="total-count"></b></p>
@@ -57,12 +56,6 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             var totalCount = 0;
             sync.on('total', (count) => {
                 totalCount = count

+ 4 - 11
source/view/sync.html

@@ -4,7 +4,8 @@
 <head>
     <meta charset="UTF-8">
     <title>云阅卷本地代理工具</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
     <link rel="stylesheet" href="css/style.css">
 </head>
 
@@ -13,9 +14,6 @@
         <div class="hd">
             <div class="logo"><img src="img/logo.png" /></div>
             <span class="y"> 欢迎您,<span id="user-name"></span>
-                <span id="school-switch" style="display:none">
-                    <span class="pipe">|</span><a href="school-list.html"></a>
-                </span>
                 <span class="pipe">|</span><a href="login.html">退出</a>
             </span>
         </div>
@@ -43,16 +41,11 @@
             env.merge(JSON.parse(window.localStorage.getItem('env')))
             $('#user-name').html(env.user.userName)
 
-            let schoolName = env.getSchoolName()
-            if (schoolName != undefined) {
-                $('#school-switch').find('a').html(schoolName)
-                $('#school-switch').show()
-            }
-
             $('#last-time').html(config['syncTime'][env.server.host + '_' + env.exam.id])
 
             db.init()
-            db.query('select count(*) as count from eb_exam_student where exam_id=?', [env.exam.id]).then((results) => {
+            db.query('select count(*) as count from eb_exam_student where exam_id=?', [env.exam.id]).then((
+                results) => {
                 $('#student-count').html(results[0].count)
             }).catch(err => {
                 alert('数据库查询失败\n' + (err || ''))