浏览代码

sync 连接数据库

Michael Wang 3 年之前
父节点
当前提交
84fc325835

+ 5 - 5
config.json

@@ -1,10 +1,10 @@
 {
     "db": {
-        "host": "localhost",
-        "post": 3306,
-        "user": "root",
-        "password": "root",
-        "database": "stmms_ft"
+        "host": "192.168.10.224",
+        "port": 3309,
+        "user": "stmms",
+        "password": "stmms",
+        "database": "stmms_ft_test"
     },
     "imageUrl": {
         "sheet": "/{{examId}}/{{subjectCode}}/{{examNumber}}-{{index}}.jpg",

+ 1 - 1
public/styles/style.css

@@ -12,7 +12,7 @@ html, body {
 	height: 100%;
 	background: #F2F4F9 url(../img/bg.jpg) no-repeat 50% 0;
 	color: #647C92;
-	overflow-x: hidden;
+	/* overflow-x: hidden; */
 }
 a {
 	text-decoration: none;

+ 16 - 9
src/lib/db.ts

@@ -36,7 +36,7 @@ function getTransactionConnection() {
   });
 }
 
-function query(connection, sql, datas) {
+function _query(connection, sql, datas) {
   return new Promise((resolve, reject) => {
     connection.query(sql, datas, (err, results, fields) => {
       if (err) {
@@ -48,22 +48,22 @@ function query(connection, sql, datas) {
   });
 }
 
-export funtion init () {
+export function init() {
   if (pool != undefined) {
     pool.end();
     pool = undefined;
   }
   initPool();
-};
+}
 
-export funtion close () {
+export function close() {
   if (pool != undefined) {
     pool.end();
     pool = undefined;
   }
-};
+}
 
-export funtion query (sql, datas) {
+export function query(sql, datas) {
   return new Promise((resolve, reject) => {
     pool.query(sql, datas, (err, results, fields) => {
       if (err) {
@@ -73,15 +73,15 @@ export funtion query (sql, datas) {
       }
     });
   });
-};
+}
 
-export funtion batchQuery (sql, datas) {
+export function batchQuery(sql, datas) {
   return new Promise((resolve, reject) => {
     getTransactionConnection()
       .then((connection) => {
         const results = [];
         for (let i = 0; i < datas.length; i++) {
-          results.push(query(connection, sql, datas[i]));
+          results.push(_query(connection, sql, datas[i]));
         }
 
         Promise.all(results)
@@ -107,4 +107,11 @@ export funtion batchQuery (sql, datas) {
         reject(err);
       });
   });
+}
+
+export default {
+  init,
+  close,
+  query,
+  batchQuery,
 };

+ 11 - 2
src/lib/sync.ts

@@ -7,6 +7,15 @@ import api from "./api";
 import _logger from "./logger";
 const logger = _logger("sync.js");
 
+export async function queryStudentCount(store) {
+  db.init();
+  const results = await db.query(
+    "select count(*) as count from eb_exam_student where exam_id=?",
+    [store.env.exam.id]
+  );
+  return results[0].count;
+}
+
 class executor extends EventEmitter {
   async start() {
     try {
@@ -141,6 +150,6 @@ class executor extends EventEmitter {
   }
 }
 
-module.exports = function () {
+export default function () {
   return new executor();
-};
+}

+ 1 - 1
src/plugins/axiosApp.ts

@@ -22,7 +22,7 @@ _axiosApp.interceptors.request.use(
     if (config.setGlobalMask) {
       store.globalMask = true;
     }
-    config.baseURL = store.env.server;
+    config.baseURL = store.env.server.host;
     config.headers = {
       "auth-info":
         "loginname=" + store.env.loginName + ";password=" + store.env.password,

+ 2 - 0
src/preload.ts

@@ -4,6 +4,7 @@ import env from "./lib/env";
 import config from "./lib/config";
 // import api from "./lib/api";
 import { addWatermark } from "./lib/watermark";
+import { queryStudentCount } from "./lib/sync";
 
 export const electronInWindow = {
   dialog: remote.dialog,
@@ -11,6 +12,7 @@ export const electronInWindow = {
   config,
   // api,
   addWatermark,
+  queryStudentCount,
   updateEnv(env) {
     ipcRenderer.sendSync("update-env", env);
   },

+ 6 - 0
src/router/index.ts

@@ -39,6 +39,12 @@ const routes: Array<RouteRecordRaw> = [
         /* webpackChunkName: "about" */ "../views/features/ImageDownload/ImageDownload.vue"
       ),
   },
+  {
+    path: "/sync",
+    name: "Sync",
+    component: () =>
+      import(/* webpackChunkName: "about" */ "../views/features/Sync/Sync.vue"),
+  },
 ];
 
 const router = createRouter({

+ 1 - 1
src/store.ts

@@ -8,7 +8,7 @@ const _store = {
   env: {
     loginName: "",
     password: "",
-    server: "",
+    server: { host: "", name: "" },
     user: {},
   },
   config: JSON.parse(JSON.stringify(window.electron.config)) || {},

+ 1 - 1
src/types/index.ts

@@ -2,7 +2,7 @@ export interface Store {
   globalMask: boolean;
 
   env: {
-    server: string;
+    server: Server;
     loginName: string;
     password: string;
     user: {

+ 0 - 5
src/views/About.vue

@@ -1,5 +0,0 @@
-<template>
-  <div class="about">
-    <h1>This is an about page</h1>
-  </div>
-</template>

+ 0 - 18
src/views/Home.vue

@@ -1,18 +0,0 @@
-<template>
-  <div class="home">
-    <img alt="Vue logo" src="../assets/logo.png" />
-    <HelloWorld msg="Welcome to Your Vue.js + TypeScript App" />
-  </div>
-</template>
-
-<script lang="ts">
-import { defineComponent } from "vue";
-import HelloWorld from "@/components/HelloWorld.vue"; // @ is an alias to /src
-
-export default defineComponent({
-  name: "Home",
-  components: {
-    HelloWorld,
-  },
-});
-</script>

+ 1 - 1
src/views/features/Home/Home.vue

@@ -20,7 +20,7 @@
             <router-link to="/exam-list"><span></span>考试切换</router-link>
           </li>
           <li class="l2">
-            <a href="sync.html"><span></span>数据同步</a>
+            <a href="/sync"><span></span>数据同步</a>
           </li>
           <li class="l3">
             <router-link to="/image"><span></span>图片下载</router-link>

+ 7 - 4
src/views/features/Login/Login.vue

@@ -57,9 +57,12 @@ const servers = store.config.servers.map((v) => {
 let loginName = ref("");
 let password = ref("");
 
-onMounted(() => {
-  window.localStorage.clear();
-});
+// onMounted(() => {
+//   window.localStorage.clear();
+// });
+server.value = "http://192.168.10.224:80";
+loginName.value = "admin-test";
+password.value = "123456";
 
 const loginAction = () => {
   // window.electron.env.server = server.value;
@@ -67,7 +70,7 @@ const loginAction = () => {
   // window.electron.env.loginName = loginName.value;
   // window.electron.env.password = password.value;
   Object.assign(store.env, {
-    server: server.value,
+    server: store.config.servers.find((v) => v.host === server.value),
     loginName: loginName.value,
     password: password.value,
   });

+ 51 - 0
src/views/features/Sync/Sync.vue

@@ -0,0 +1,51 @@
+<template>
+  <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">
+        <span class="y"><a href="index.html">返回考试主页</a></span>
+        <h2>数据同步</h2>
+      </div>
+      <div class="data">
+        <p>
+          本地已下载考生数量:<b id="student-count">{{ studentCount }}</b>
+        </p>
+        <p>
+          上次下载完成时间:<b id="last-time">{{ lastTime }}</b>
+        </p>
+        <div class="btn">
+          <a href="/sync-run"><span>开始同步数据</span></a>
+        </div>
+      </div>
+    </div>
+    <div class="ft">
+      Copyright © 2011-2020 www.qmth.com.cn, All Rights Reserved
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { store } from "@/store";
+import { computed, onMounted, ref } from "vue";
+import router from "@/router";
+import { getStudents, countStudents } from "@/api/api";
+import { httpApp } from "@/plugins/axiosApp";
+
+const lastTime =
+  store.config["syncTime"][store.env.server.host + store.env.exam.id];
+
+let studentCount = ref(0);
+onMounted(async () => {
+  const studentCountRes = await window.electron.queryStudentCount(
+    JSON.parse(JSON.stringify(store))
+  );
+  console.log(studentCountRes);
+  studentCount.value = studentCountRes;
+});
+</script>

二进制
src/views/features/Sync/img/logo.png


二进制
src/views/features/Sync/img/logo_blue.png