pengjing před 1 rokem
revize
2a1a22cb09
100 změnil soubory, kde provedl 29748 přidání a 0 odebrání
  1. 39 0
      .gitignore
  2. binární
      .mvn/wrapper/maven-wrapper.jar
  3. 2 0
      .mvn/wrapper/maven-wrapper.properties
  4. 0 0
      doc/已更新脚本
  5. 0 0
      doc/待更新脚本
  6. 6 0
      h5app/.browserslistrc
  7. 38 0
      h5app/.eslintrc.js
  8. 32 0
      h5app/.gitignore
  9. 5 0
      h5app/babel.config.js
  10. 3 0
      h5app/cypress.json
  11. 5 0
      h5app/ionic.config.json
  12. 13 0
      h5app/ionic.starter.json
  13. 4 0
      h5app/jest.config.js
  14. 28623 0
      h5app/package-lock.json
  15. 56 0
      h5app/package.json
  16. 3 0
      h5app/public/appconfig.json
  17. binární
      h5app/public/assets/icon/favicon.png
  18. binární
      h5app/public/assets/icon/icn_loading.png
  19. binární
      h5app/public/assets/icon/icon.png
  20. 1 0
      h5app/public/assets/shapes.svg
  21. 62 0
      h5app/public/index.html
  22. 270 0
      h5app/src/App.vue
  23. 53 0
      h5app/src/api/account/index.ts
  24. 55 0
      h5app/src/api/account/model.d.ts
  25. 65 0
      h5app/src/api/approve/index.ts
  26. 35 0
      h5app/src/api/approve/model.d.ts
  27. 92 0
      h5app/src/api/common.ts
  28. 38 0
      h5app/src/api/login/index.ts
  29. 26 0
      h5app/src/api/login/model.d.ts
  30. 27 0
      h5app/src/api/oauth/index.ts
  31. 25 0
      h5app/src/api/system/dictionary.ts
  32. 63 0
      h5app/src/api/system/file.ts
  33. 1 0
      h5app/src/assets/fonts/dj-search.svg
  34. 1 0
      h5app/src/assets/fonts/empty.svg
  35. 8 0
      h5app/src/assets/fonts/ios-back.svg
  36. 8 0
      h5app/src/assets/fonts/ios-back2.svg
  37. 1 0
      h5app/src/assets/fonts/line.svg
  38. binární
      h5app/src/assets/icon/anquanxj.png
  39. 11 0
      h5app/src/assets/icon/appadd.svg
  40. 11 0
      h5app/src/assets/icon/appremove.svg
  41. binární
      h5app/src/assets/icon/attend-bg.png
  42. binární
      h5app/src/assets/icon/attendance.png
  43. 8 0
      h5app/src/assets/icon/back.svg
  44. binární
      h5app/src/assets/icon/banner1.png
  45. binární
      h5app/src/assets/icon/baoyang2.png
  46. binární
      h5app/src/assets/icon/bg.png
  47. binární
      h5app/src/assets/icon/bq.png
  48. binární
      h5app/src/assets/icon/bsx.png
  49. binární
      h5app/src/assets/icon/btnadd.png
  50. binární
      h5app/src/assets/icon/bzyfk.png
  51. 34 0
      h5app/src/assets/icon/card-bg.svg
  52. 1 0
      h5app/src/assets/icon/change-role.svg
  53. binární
      h5app/src/assets/icon/checkup.png
  54. binární
      h5app/src/assets/icon/chuanychuqin.png
  55. binární
      h5app/src/assets/icon/chuanyuangl.png
  56. binární
      h5app/src/assets/icon/chuqinbeijing.png
  57. binární
      h5app/src/assets/icon/cj.png
  58. binární
      h5app/src/assets/icon/dk.png
  59. binární
      h5app/src/assets/icon/documentdistribute.png
  60. binární
      h5app/src/assets/icon/drug.png
  61. 1 0
      h5app/src/assets/icon/education.svg
  62. binární
      h5app/src/assets/icon/entertain.png
  63. binární
      h5app/src/assets/icon/evaluation.png
  64. binární
      h5app/src/assets/icon/favicon.png
  65. binární
      h5app/src/assets/icon/feiyonggl.png
  66. binární
      h5app/src/assets/icon/forward.png
  67. binární
      h5app/src/assets/icon/grxx.png
  68. binární
      h5app/src/assets/icon/gywm.png
  69. binární
      h5app/src/assets/icon/handover.png
  70. binární
      h5app/src/assets/icon/icon-back-white.png
  71. binární
      h5app/src/assets/icon/icon-change.png
  72. binární
      h5app/src/assets/icon/icon-check.png
  73. 12 0
      h5app/src/assets/icon/icon-feeflag.svg
  74. binární
      h5app/src/assets/icon/icon-filter.png
  75. binární
      h5app/src/assets/icon/icon-mine-democracy.png
  76. binární
      h5app/src/assets/icon/icon-mine-help.png
  77. binární
      h5app/src/assets/icon/icon-mine-punish.png
  78. binární
      h5app/src/assets/icon/icon-mine-reward.png
  79. binární
      h5app/src/assets/icon/icon-mine-train.png
  80. binární
      h5app/src/assets/icon/icon-mine-userinfo.png
  81. 8 0
      h5app/src/assets/icon/icon-more.svg
  82. 1 0
      h5app/src/assets/icon/icon-right.svg
  83. binární
      h5app/src/assets/icon/icon-search.png
  84. binární
      h5app/src/assets/icon/icon-user-2x.png
  85. binární
      h5app/src/assets/icon/icon-user-3x.png
  86. binární
      h5app/src/assets/icon/icon-user.png
  87. binární
      h5app/src/assets/icon/icon-volume.png
  88. binární
      h5app/src/assets/icon/kq.png
  89. binární
      h5app/src/assets/icon/lk.png
  90. binární
      h5app/src/assets/icon/login-bg.jpg
  91. binární
      h5app/src/assets/icon/login-logo.png
  92. binární
      h5app/src/assets/icon/login-system.png
  93. binární
      h5app/src/assets/icon/logo.png
  94. binární
      h5app/src/assets/icon/logon.png
  95. binární
      h5app/src/assets/icon/main-bg.png
  96. binární
      h5app/src/assets/icon/mark.png
  97. binární
      h5app/src/assets/icon/meeting.png
  98. 1 0
      h5app/src/assets/icon/message-warn.svg
  99. binární
      h5app/src/assets/icon/msx.png
  100. 0 0
      h5app/src/assets/icon/nenghaogl.png

+ 39 - 0
.gitignore

@@ -0,0 +1,39 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+/src/main/resources/static/mobile/
+/src/main/resources/static/web/
+/src/main/resources/static/doc/down/
+/out/
+/src/main/resources/META-INF/MANIFEST.MF
+
+

binární
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

+ 0 - 0
doc/已更新脚本


+ 0 - 0
doc/待更新脚本


+ 6 - 0
h5app/.browserslistrc

@@ -0,0 +1,6 @@
+Chrome >=79
+ChromeAndroid >=79
+Firefox >=70
+Edge >=79
+Safari >=14
+iOS >=14

+ 38 - 0
h5app/.eslintrc.js

@@ -0,0 +1,38 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  'extends': [
+    'plugin:vue/vue3-essential',
+    'eslint:recommended',
+    '@vue/typescript/recommended'
+  ],
+  parserOptions: {
+    ecmaVersion: 2020
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    // vue
+    'vue/no-deprecated-slot-attribute': 'off',
+    'vue/no-v-html': 'off',
+    'vue/require-default-prop': 'off',
+    'vue/require-explicit-emits': 'off',
+    'vue/multi-word-component-names': 'off',
+
+    '@typescript-eslint/no-explicit-any': 'off',
+    '@typescript-eslint/no-var-requires': 'off',
+  },
+  overrides: [
+    {
+      files: [
+        '**/__tests__/*.{j,t}s?(x)',
+        '**/tests/unit/**/*.spec.{j,t}s?(x)'
+      ],
+      env: {
+        jest: true
+      }
+    }
+  ]
+}

+ 32 - 0
h5app/.gitignore

@@ -0,0 +1,32 @@
+# Specifies intentionally untracked files to ignore when using Git
+# http://git-scm.com/docs/gitignore
+
+*~
+*.sw[mnpcod]
+.tmp
+*.tmp
+*.tmp.*
+*.sublime-project
+*.sublime-workspace
+.DS_Store
+Thumbs.db
+UserInterfaceState.xcuserstate
+$RECYCLE.BIN/
+
+*.log
+log.txt
+npm-debug.log*
+
+/.idea
+/.ionic
+/.sass-cache
+/.sourcemaps
+/.versions
+/.vscode/*
+!/.vscode/extensions.json
+/coverage
+/dist
+/node_modules
+/platforms
+/plugins
+/www

+ 5 - 0
h5app/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

+ 3 - 0
h5app/cypress.json

@@ -0,0 +1,3 @@
+{
+  "pluginsFile": "tests/e2e/plugins/index.js"
+}

+ 5 - 0
h5app/ionic.config.json

@@ -0,0 +1,5 @@
+{
+  "name": "h5app",
+  "integrations": {},
+  "type": "vue"
+}

+ 13 - 0
h5app/ionic.starter.json

@@ -0,0 +1,13 @@
+{
+  "name": "Tabs Starter",
+  "baseref": "main",
+  "tarignore": [
+    "node_modules",
+    "package-lock.json",
+    "www"
+  ],
+  "scripts": {
+    "build": "npm run build",
+    "serve": "ionic serve --port 8202"
+  }
+}

+ 4 - 0
h5app/jest.config.js

@@ -0,0 +1,4 @@
+module.exports = {
+  preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel',
+  transformIgnorePatterns: ['/node_modules/(?!@ionic/vue|@ionic/vue-router|@ionic/core|@stencil/core|ionicons)']
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 28623 - 0
h5app/package-lock.json


+ 56 - 0
h5app/package.json

@@ -0,0 +1,56 @@
+{
+  "name": "ionic-app-base",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "dev": "ionic serve --port 8202",
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "test:unit": "vue-cli-service test:unit",
+    "test:e2e": "vue-cli-service test:e2e",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@capacitor/camera": "^4.1.4",
+    "@capacitor/core": "^4.7.1",
+    "@capacitor/geolocation": "^4.1.0",
+    "@ionic/core": "^7.0.0",
+    "@ionic/vue": "^7.0.0",
+    "@ionic/vue-router": "^7.0.0",
+    "@vuelidate/core": "^2.0.1",
+    "@vuelidate/validators": "^2.0.1",
+    "axios": "~0.27.2",
+    "core-js": "^3.6.5",
+    "crypto-js": "^4.1.1",
+    "dayjs": "~1.11.5",
+    "ionicons": "^6.0.3",
+    "pinia": "~2.0.18",
+    "vue": "^3.2.47",
+    "vue-baidu-map-3x": "^1.0.31",
+    "vue-router": "^4.1.6"
+  },
+  "devDependencies": {
+    "@types/jest": "^27.0.2",
+    "@typescript-eslint/eslint-plugin": "^5.6.0",
+    "@typescript-eslint/parser": "^5.6.0",
+    "@vue/cli-plugin-babel": "~5.0.0-rc.1",
+    "@vue/cli-plugin-e2e-cypress": "~5.0.0-rc.1",
+    "@vue/cli-plugin-eslint": "~5.0.0-rc.1",
+    "@vue/cli-plugin-router": "~5.0.0-rc.1",
+    "@vue/cli-plugin-typescript": "~5.0.0-rc.1",
+    "@vue/cli-plugin-unit-jest": "~5.0.0-rc.1",
+    "@vue/cli-service": "~5.0.0-rc.1",
+    "@vue/eslint-config-typescript": "^11.0.2",
+    "@vue/test-utils": "^2.0.0-rc.16",
+    "@vue/vue3-jest": "^27.0.0-alpha.3",
+    "babel-jest": "^27.3.1",
+    "cypress": "^8.7.0",
+    "eslint": "^8.4.1",
+    "eslint-plugin-vue": "^9.8.0",
+    "jest": "^27.3.1",
+    "less": "^4.1.3",
+    "less-loader": "^11.1.0",
+    "ts-jest": "^27.0.7",
+    "typescript": "^4.3.5"
+  }
+}

+ 3 - 0
h5app/public/appconfig.json

@@ -0,0 +1,3 @@
+{
+  "isDev": true
+}

binární
h5app/public/assets/icon/favicon.png


binární
h5app/public/assets/icon/icn_loading.png


binární
h5app/public/assets/icon/icon.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/public/assets/shapes.svg


+ 62 - 0
h5app/public/index.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <title>实习管理系统</title>
+
+    <base href="/"/>
+
+    <meta name="color-scheme" content="light dark"/>
+    <meta
+            name="viewport"
+            content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
+    />
+    <meta name="format-detection" content="telephone=no"/>
+    <meta name="msapplication-tap-highlight" content="no"/>
+
+    <link rel="shortcut icon" type="image/png" href="<%= BASE_URL %>assets/icon/favicon.png"/>
+
+    <!-- add to homescreen for ios -->
+    <meta name="apple-mobile-web-app-capable" content="yes"/>
+    <meta name="apple-mobile-web-app-title" content="Ionic App"/>
+    <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
+
+    <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
+
+    <style type="text/css">
+        .appLoading {
+            width: 100%;
+            height: 100%;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+
+        .appLoading img {
+            display: block;
+            -webkit-animation: rotation 2s linear infinite;
+            animation: rotation 2s linear infinite;
+        }
+
+        @keyframes rotation {
+            0% {
+                -webkit-transform: rotate(0deg);
+            }
+
+            100% {
+                -webkit-transform: rotate(360deg);
+            }
+        }
+    </style>
+</head>
+
+<body style="height: 100%;">
+
+<div id="app"></div>
+<div class="appLoading" style="z-index: 0">
+    <img src="mobile/assets/icon/icn_loading.png" alt=""/>
+</div>
+</body>
+
+</html>
+

+ 270 - 0
h5app/src/App.vue

@@ -0,0 +1,270 @@
+<template >
+  <ion-app style="z-index: 1">
+    <ion-router-outlet/>
+  </ion-app>
+</template>
+
+<script setup lang="ts">
+import {IonApp, IonRouterOutlet} from '@ionic/vue';
+import {getCurrentInstance, ref} from "vue";
+import {useUserStore} from "@/store/modules/user";
+
+const {appContext: {config: {globalProperties}}} = getCurrentInstance();
+
+const userStore = useUserStore();
+
+const user = ref(userStore.getUserInfo);
+
+if (user.value != null) {
+  globalProperties.$routeActive = true;
+}
+
+</script>
+
+<style lang="less">
+ion-content {
+  --background: #fafafa !important;
+}
+
+/*顶部导航白色背景主题样式*/
+.header-theme2 {
+  background: white;
+  text-align: center;
+
+  ion-toolbar {
+    --background: white;
+    color: #4F4F63;
+    font-weight: bold;
+
+    ion-icon {
+      padding: 0px 10px;
+      font-size: 24px !important;
+      height: 44px !important;
+    }
+  }
+
+  ion-title {
+    margin-left: -40px;
+    font-weight: bold;
+  }
+}
+
+.grid-content {
+  margin: 10px 10px;
+  background-color: #f0f2f5;
+  border-radius: 20px;
+  position: relative;
+
+  #btnDetail {
+    position: absolute;
+    top: 50%;
+    right: 10px;
+  }
+
+  h6 {
+    text-align: center;
+    color: #1a1a1a;
+  }
+
+  ion-item::part(native) {
+    padding-left: 10px;
+  }
+
+  ion-item {
+    border-radius: 10px;
+    --border-width: 0px;
+    --border-style: unset !important;
+  }
+}
+
+.back-icon {
+  font-size: 24px;
+  padding-left: 7px;
+  height: 44px;
+}
+
+.panel {
+  margin: 0px;
+
+
+  .panel-content {
+    margin-top: 10px;
+    background-color: white;
+    border-radius: 10px;
+    padding: 10px;
+  }
+}
+
+
+.panel-title2 {
+  font-size: 16px;
+  color: #380F0A;
+  display: flex;
+  font-weight: bold;
+  padding-top: 5px;
+
+  .item-flag {
+    height: 20px;
+    width: 3px;
+    border-radius: 8px;
+    margin-top: 1px;
+    margin-right: 7px;
+    background: linear-gradient(to bottom, #fff, #0094FF);
+  }
+}
+
+.add-icon {
+  font-size: 24px;
+  height: 44px;
+}
+
+.edit-del-icon {
+  padding: 0px 0px;
+  font-size: 13px;
+  height: 15px !important;
+}
+
+.edit-page {
+  .edit-content {
+    margin: 12px;
+    background: white;
+    border-radius: 10px;
+    padding: 7px;
+  }
+
+  ion-item {
+    --border-style: none;
+  }
+
+  ion-select {
+    max-width: 75%;
+  }
+
+  .edit-button {
+    text-align: right;
+
+    ion-button {
+      width: 100px;
+      --border-radius: 18px !important;
+    }
+  }
+
+  ion-input {
+    text-align: right;
+  }
+}
+
+.danger {
+  color: red;
+}
+
+.detail-page {
+
+  .detail-content {
+    margin: 12px;
+    background: white;
+    border-radius: 10px;
+    padding: 7px;
+  }
+
+  ion-list {
+    padding: 0px;
+  }
+
+  ion-item {
+    --border-style: none;
+  }
+
+  ion-label {
+    min-width: 120px;
+  }
+}
+
+.list-page {
+  --background: #fafafa !important;
+
+  .list-content {
+    margin: 10px 8px;
+    background-color: #f0f2f5;
+    border-radius: 20px;
+    position: relative;
+
+    ion-item::part(native) {
+      padding-left: 10px;
+    }
+
+    ion-item {
+      border-radius: 10px;
+    }
+  }
+
+  ion-item {
+    --border-style: none;
+  }
+
+  ion-grid {
+    ion-row {
+      /* ion-col:last-child {
+         text-align: left;
+         font-size: 14px;
+       }
+
+       ion-col:last-child {
+         //display: flex;
+         overflow: hidden;
+         text-overflow: ellipsis;
+
+         span {
+           white-space: nowrap;
+         }
+       }*/
+    }
+
+    .row-detail {
+      ion-col {
+        text-align: left;
+        color: #333333;
+        font-size: 14px;
+      }
+    }
+  }
+}
+
+ion-grid {
+  ion-row {
+    /* ion-col:last-child {
+       text-align: left;
+       font-size: 14px;
+     }
+
+     ion-col:last-child {
+       //display: flex;
+       overflow: hidden;
+       text-overflow: ellipsis;
+
+       span {
+         white-space: nowrap;
+       }
+     }*/
+  }
+
+  .row-detail {
+    ion-col {
+      text-align: left;
+      color: #333333;
+      font-size: 14px;
+    }
+  }
+}
+
+.ion-buttonLen {
+  --border-radius: 18px;
+  --background: #0094FF;
+  color: #fff;
+  font-size: 14px;
+  --border-color: #0094FF;
+  width: 70%;
+}
+
+
+</style>

+ 53 - 0
h5app/src/api/account/index.ts

@@ -0,0 +1,53 @@
+import type { BaseResponse } from '@/utils/request';
+import { request } from '@/utils/request';
+import crtyptoHelp from '@/utils/crypto';
+
+export function updateAccountInfo(data: any) {
+  return request<BaseResponse<any>>({
+    url: 'account/update',
+    method: 'post',
+    data,
+  });
+}
+
+export function updateUserPassword(data: any) {
+
+  const user = {
+    userID: data.userID,
+    pwd_default: crtyptoHelp.encryptDes(`${crtyptoHelp.MD5(data.pwd_default)}`),
+    pwd_confirm: crtyptoHelp.encryptDes(`${crtyptoHelp.MD5(data.pwd_confirm)}`)
+  }
+
+  return request(
+      {
+        url: 'user/updatePassword',
+        method: 'post',
+        data: user,
+      },
+      {
+        successMsg: '修改成功!',
+        errorMsg: '修改失败!'
+      },
+  );
+}
+
+export function getInfo() {
+  return request<API.AdminUserInfo>({
+    url: 'account/info',
+    method: 'get',
+  },{isNew:true});
+}
+
+export function permmenu() {
+  return request<API.PermMenu>({
+    url: 'account/permmenu?MenuNo=T010102',
+    method: 'get',
+  },{isNew:true});
+}
+
+export function logout() {
+  return request({
+    url: 'account/logout',
+    method: 'get',
+  },{isNew:true});
+}

+ 55 - 0
h5app/src/api/account/model.d.ts

@@ -0,0 +1,55 @@
+declare namespace API {
+  type Menu = {
+    /*
+    createTime: Date;
+    updateTime: Date;*/
+    id: string;
+    parentId: string;
+    name: string;
+    router: string;
+    perms: string;
+    /** 当前菜单类型 0: 目录 | 1: 菜单 | 2: 权限 */
+    type: 0 | 1 | 2;
+    icon: string;
+    orderNum: number;
+    viewPath: string;
+    keepalive: boolean;
+    isShow: boolean;
+  };
+
+  type PermMenu = {
+    menus: Menu[];
+    perms: string[];
+  };
+
+  type AdminUserInfo = {
+    IDNo: string
+    birthday: string
+    collegeID: string
+    collegeName: string
+    createBy: string
+    createTime: string
+    genderID: string
+    genderName: string
+    idno: string
+    key: string
+    loginId: string
+    majorClassID: string
+    majorClassName: string
+    majorGradeID: string
+    majorGradeName: string
+    name: "钟薇溥"
+    recordStatus: null
+    studentID: "2d08a9aa-b346-11ed-be3c-7085c2a9999e"
+    studentTypeID: null
+    studentTypeName: null
+    teacherID: null
+    titleName: null
+    updateBy: null
+    updateTime: null
+    userCode: "20210900205"
+    userId: "2d08a9aa-b346-11ed-be3c-7085c2a9999e"
+    userName: "钟薇溥"
+    userTypeId: "2"
+  };
+}

+ 65 - 0
h5app/src/api/approve/index.ts

@@ -0,0 +1,65 @@
+import {request} from "@/utils/request";
+
+export const ACTION_OK = 1;
+export const ACTION_CANCEL = 2;
+export const ACTION_RETURN = 3;
+
+export const STATUS_AVAILABLE = 1;
+
+export function approve(input: any) {
+    return request<boolean>(
+        {
+            url: 'system/approve/go',
+            method: 'post',
+            data: input,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+export function getList(page: number, rows: number, tableName: string, keyID: string) {
+    return request<any>(
+        {
+            url: 'system/approve/list',
+            method: 'get',
+            params: {
+                page: page,
+                rows: rows,
+                tableName: tableName,
+                keyID: keyID
+            },
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function addTask(params: TaskInputModel) {
+    return request<boolean>(
+        {
+            url: 'system/approve/addTask',
+            method: 'post',
+            data: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function getTaskList(page: number, rows: number) {
+    return request<any>(
+        {
+            url: 'system/approve/taskList',
+            method: 'get',
+            params: {
+                page: page,
+                rows: rows
+            },
+        },
+        {
+            isNew: true,
+        });
+}

+ 35 - 0
h5app/src/api/approve/model.d.ts

@@ -0,0 +1,35 @@
+declare namespace API {
+    type ApproveOptions = {
+        title: string;
+        visible?: boolean;
+        tableName: string;
+        keyCol: string;
+        keyIDs?: string[];
+        statusDictionaryCode: string;
+        recordStatusColumn?: string | null;
+        actions: ApproveAction[];
+    }
+
+    type ApproveAction = {
+        actionID: number;
+        toStatusID: number;
+    }
+
+    type ApproveInputModel = {
+        tableName: string;
+        keyColumn: string;
+        keyIDs: string[];
+        statusDicionaryCode: string;
+        comment: string;
+        recordStatusColumn?: string | null;
+        action: ApproveAction;
+    }
+}
+
+type TaskInputModel = {
+    userID: string;
+    title: string;
+    url: string;
+    returnUrl: string;
+    keyID: string;
+}

+ 92 - 0
h5app/src/api/common.ts

@@ -0,0 +1,92 @@
+import {request} from "@/utils/request";
+import {alertController} from "@ionic/vue";
+
+export function save(url: string, data: any) {
+  return request<object>(
+    {
+      url: url,
+      method: 'post',
+      data: data,
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+export function get(url: string,params: any) {
+  return request(
+    {
+      url: url,
+      method: 'get',
+      params: params,
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+export function del(url: string,params: any) {
+  return request<object>(
+    {
+      url: url,
+      method: 'get',
+      params: params,
+    },
+    {
+      successMsg: '删除成功!',
+      errorMsg: '删除失败!',
+      isNew: true,
+    },
+  );
+}
+export function postdel(url: string,params: any) {
+  return request<object>(
+    {
+      url: url,
+      method: 'post',
+      data: params,
+    },
+    {
+      successMsg: '删除成功!',
+      errorMsg: '删除失败!',
+      isNew: true,
+    },
+  );
+}
+export function post(url: string,params: any,action:string) {
+  return request<object>(
+    {
+      url: url,
+      method: 'post',
+      data: params,
+    },
+    {
+      successMsg: action+'成功!',
+      errorMsg: action+'失败!',
+      isNew: true,
+    },
+  );
+}
+export function postData(url: string,params: any) {
+    return request<object>(
+        {
+            url: url,
+            method: 'post',
+            data: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+export const presentAlert = async (message: string) => {
+    const alert = await alertController.create({
+        header: '提示!',
+        message: message,
+        buttons: [
+            '确定'
+        ],
+    });
+
+    await alert.present();
+}

+ 38 - 0
h5app/src/api/login/index.ts

@@ -0,0 +1,38 @@
+//import type { BaseResponse } from '@/utils/request';
+import { request } from '@/utils/request';
+import crtyptoHelp from '@/utils/crypto';
+
+/**
+ * @description 登录
+ * @param {LoginParams} data
+ * @returns
+ */
+export function login(data: API.LoginParams) {
+  const desVal = crtyptoHelp.encryptDes(`${data.username}|${crtyptoHelp.MD5(data.password)}|${data.verifyCode}`)
+  return request<API.LoginResult>(
+    {
+      url: 'account/login',
+      method: 'post',
+      data:desVal,
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+
+/**
+ * @description 获取验证码
+ */
+export function getImageCaptcha(params?: API.CaptchaParams) {
+  return request<API.CaptchaResult>(
+    {
+      url: 'account/captcha',
+      method: 'get',
+      params,
+    },
+    {
+      isNew: true,
+    },
+  );
+}

+ 26 - 0
h5app/src/api/login/model.d.ts

@@ -0,0 +1,26 @@
+declare namespace API {
+  /** 登录参数 */
+  type LoginParams = {
+    captchaId: string;
+    password: string;
+    username: string;
+    verifyCode: string;
+  };
+
+  /** 登录成功结果 */
+  type LoginResult = {
+    token: string;
+  };
+
+  /** 获取验证码参数 */
+  type CaptchaParams = {
+    width?: number;
+    height?: number;
+  };
+
+  /** 获取验证码结果 */
+  type CaptchaResult = {
+    img: string;
+    id: string;
+  };
+}

+ 27 - 0
h5app/src/api/oauth/index.ts

@@ -0,0 +1,27 @@
+import {request} from "@/utils/request";
+
+export function getOAuthUrl(type: string) {
+    return request<object>(
+        {
+            url: 'oauth/getOAuthUrl',
+            method: 'get',
+            params: {appType: 'mobile', oauthType: type},
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function oauthLogin(type: string, ticket: string, tm: string) {
+    return request<API.LoginResult>(
+        {
+            url: 'oauth/oauthLogin',
+            method: 'get',
+            params: {appType:'mobile',type: type, ticket: ticket, tm: tm},
+        },
+        {
+            isNew: true,
+        },
+    );
+}

+ 25 - 0
h5app/src/api/system/dictionary.ts

@@ -0,0 +1,25 @@
+import {request} from "@/utils/request";
+
+export function getDictionaryItemList(params: any) {
+    return request<any>(
+        {
+            url: 'system/dictionary/getDictionaryItemList',
+            method: 'get',
+            params: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function getSysDictionaryList(code: string) {
+    return request<any>({
+        url: 'system/dictionary/getDictionaryItemByCodeList',
+        method: 'get',
+        params: {code: code},
+    }, {
+        isNew: true,
+    });
+}
+

+ 63 - 0
h5app/src/api/system/file.ts

@@ -0,0 +1,63 @@
+import {request} from "@/utils/request";
+
+export function getList(params: any) {
+    return request<object>(
+        {
+            url: 'system/file/getList',
+            method: 'get',
+            params: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function upload(data: any) {
+    return request<object>(
+        {
+            url: 'system/file/upload',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function uploadBase64(data: any) {
+    return request<object>(
+        {
+            url: 'system/file/uploadBase64',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function deleteFile(params: any) {
+    return request<object>(
+        {
+            url: 'system/file/delete',
+            method: 'get',
+            params: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+// 下载文件接口
+export function downloadPdm(url: any) {
+    return request({
+        url: url,
+        method: 'get',
+        responseType: 'blob'
+    })
+}
+

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/fonts/dj-search.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/fonts/empty.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 8 - 0
h5app/src/assets/fonts/ios-back.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 8 - 0
h5app/src/assets/fonts/ios-back2.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/fonts/line.svg


binární
h5app/src/assets/icon/anquanxj.png


+ 11 - 0
h5app/src/assets/icon/appadd.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon/26+应用-添加</title>
+    <g id="icon/26+应用-添加" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="-9.5" y="0.5" width="35" height="35"></rect>
+        <g id="选中">
+            <rect id="矩形" fill="#007EFF" x="0" y="0" width="26" height="26" rx="13"></rect>
+            <path d="M13.5,7 C14.3284271,7 15,7.67157288 15,8.5 L15,12 L18.5,12 C19.3284271,12 20,12.6715729 20,13.5 C20,14.3284271 19.3284271,15 18.5,15 L15,15 L15,18.5 C15,19.3284271 14.3284271,20 13.5,20 C12.6715729,20 12,19.3284271 12,18.5 L12,15 L8.5,15 C7.67157288,15 7,14.3284271 7,13.5 C7,12.6715729 7.67157288,12 8.5,12 L12,12 L12,8.5 C12,7.67157288 12.6715729,7 13.5,7 Z" id="形状结合" fill="#FFFFFF"></path>
+        </g>
+    </g>
+</svg>

+ 11 - 0
h5app/src/assets/icon/appremove.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon/26+应用-删除</title>
+    <g id="icon/26+应用-删除" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="-9.5" y="0.5" width="35" height="35"></rect>
+        <g id="选中">
+            <rect id="矩形" fill="#B9A9A7" x="0" y="0" width="26" height="26" rx="13"></rect>
+            <rect id="形状结合" fill="#FFFFFF" x="7" y="11" width="13" height="3" rx="1.5"></rect>
+        </g>
+    </g>
+</svg>

binární
h5app/src/assets/icon/attend-bg.png


binární
h5app/src/assets/icon/attendance.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 8 - 0
h5app/src/assets/icon/back.svg


binární
h5app/src/assets/icon/banner1.png


binární
h5app/src/assets/icon/baoyang2.png


binární
h5app/src/assets/icon/bg.png


binární
h5app/src/assets/icon/bq.png


binární
h5app/src/assets/icon/bsx.png


binární
h5app/src/assets/icon/btnadd.png


binární
h5app/src/assets/icon/bzyfk.png


+ 34 - 0
h5app/src/assets/icon/card-bg.svg

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="690px" height="260px" viewBox="0 0 690 260" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>card-bg</title>
+    <defs>
+        <rect id="path-1" x="0" y="0" width="690" height="260" rx="20"></rect>
+        <linearGradient x1="27.4272923%" y1="17.3471826%" x2="100%" y2="100%" id="linearGradient-3">
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" stop-opacity="0.150622815" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="0%" y1="0%" x2="73.6795897%" y2="70.2195624%" id="linearGradient-4">
+            <stop stop-color="#FFFFFF" stop-opacity="0.19798951" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="0%" y1="100%" x2="73.6795897%" y2="70.2195624%" id="linearGradient-5">
+            <stop stop-color="#FFFFFF" stop-opacity="0.19798951" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="作业" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="作业信息" transform="translate(-30.000000, -345.000000)">
+            <g id="卡片" transform="translate(29.500000, 345.000000)">
+                <g id="card-bg" transform="translate(0.500000, 0.000000)">
+                    <mask id="mask-2" fill="white">
+                        <use xlink:href="#path-1"></use>
+                    </mask>
+                    <use id="矩形" fill="#014C85" xlink:href="#path-1"></use>
+                    <circle id="椭圆形" fill="url(#linearGradient-3)" mask="url(#mask-2)" cx="56" cy="75" r="104"></circle>
+                    <circle id="椭圆形备份-3" stroke="url(#linearGradient-4)" stroke-width="10" mask="url(#mask-2)" cx="634" cy="235" r="51"></circle>
+                    <circle id="椭圆形备份-3" stroke="url(#linearGradient-5)" stroke-width="10" mask="url(#mask-2)" cx="500" cy="-29" r="73"></circle>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/icon/change-role.svg


binární
h5app/src/assets/icon/checkup.png


binární
h5app/src/assets/icon/chuanychuqin.png


binární
h5app/src/assets/icon/chuanyuangl.png


binární
h5app/src/assets/icon/chuqinbeijing.png


binární
h5app/src/assets/icon/cj.png


binární
h5app/src/assets/icon/dk.png


binární
h5app/src/assets/icon/documentdistribute.png


binární
h5app/src/assets/icon/drug.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/icon/education.svg


binární
h5app/src/assets/icon/entertain.png


binární
h5app/src/assets/icon/evaluation.png


binární
h5app/src/assets/icon/favicon.png


binární
h5app/src/assets/icon/feiyonggl.png


binární
h5app/src/assets/icon/forward.png


binární
h5app/src/assets/icon/grxx.png


binární
h5app/src/assets/icon/gywm.png


binární
h5app/src/assets/icon/handover.png


binární
h5app/src/assets/icon/icon-back-white.png


binární
h5app/src/assets/icon/icon-change.png


binární
h5app/src/assets/icon/icon-check.png


+ 12 - 0
h5app/src/assets/icon/icon-feeflag.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组</title>
+    <g id="控件" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="党费-已交" transform="translate(-56.000000, 0.000000)">
+            <g id="编组" transform="translate(56.000000, 0.000000)">
+                <path d="M0,0 L32,0 L32,32 C14.326888,32 2.164332e-15,17.673112 0,0 L0,0 L0,0 Z" id="矩形" fill="#FFCA00"></path>
+                <polygon id="路径" fill="#FFFFFF" fill-rule="nonzero" points="19.3582196 18.0180851 27.5 9.34521277 26.0072316 8 17.123956 16.337766 12.8721736 13.1414894 11.5 14.6031915 17.4743329 19.9824468 17.4759625 19.9792553 17.4987778 20 19.3239967 18.0547872"></polygon>
+            </g>
+        </g>
+    </g>
+</svg>

binární
h5app/src/assets/icon/icon-filter.png


binární
h5app/src/assets/icon/icon-mine-democracy.png


binární
h5app/src/assets/icon/icon-mine-help.png


binární
h5app/src/assets/icon/icon-mine-punish.png


binární
h5app/src/assets/icon/icon-mine-reward.png


binární
h5app/src/assets/icon/icon-mine-train.png


binární
h5app/src/assets/icon/icon-mine-userinfo.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 8 - 0
h5app/src/assets/icon/icon-more.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/icon/icon-right.svg


binární
h5app/src/assets/icon/icon-search.png


binární
h5app/src/assets/icon/icon-user-2x.png


binární
h5app/src/assets/icon/icon-user-3x.png


binární
h5app/src/assets/icon/icon-user.png


binární
h5app/src/assets/icon/icon-volume.png


binární
h5app/src/assets/icon/kq.png


binární
h5app/src/assets/icon/lk.png


binární
h5app/src/assets/icon/login-bg.jpg


binární
h5app/src/assets/icon/login-logo.png


binární
h5app/src/assets/icon/login-system.png


binární
h5app/src/assets/icon/logo.png


binární
h5app/src/assets/icon/logon.png


binární
h5app/src/assets/icon/main-bg.png


binární
h5app/src/assets/icon/mark.png


binární
h5app/src/assets/icon/meeting.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
h5app/src/assets/icon/message-warn.svg


binární
h5app/src/assets/icon/msx.png


+ 0 - 0
h5app/src/assets/icon/nenghaogl.png


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů