瀏覽代碼

项目初始化

pengjing 1 年之前
當前提交
2a1a22cb09
共有 100 個文件被更改,包括 29748 次插入0 次删除
  1. 39 0
      .gitignore
  2. 二進制
      .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. 二進制
      h5app/public/assets/icon/favicon.png
  18. 二進制
      h5app/public/assets/icon/icn_loading.png
  19. 二進制
      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. 二進制
      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. 二進制
      h5app/src/assets/icon/attend-bg.png
  42. 二進制
      h5app/src/assets/icon/attendance.png
  43. 8 0
      h5app/src/assets/icon/back.svg
  44. 二進制
      h5app/src/assets/icon/banner1.png
  45. 二進制
      h5app/src/assets/icon/baoyang2.png
  46. 二進制
      h5app/src/assets/icon/bg.png
  47. 二進制
      h5app/src/assets/icon/bq.png
  48. 二進制
      h5app/src/assets/icon/bsx.png
  49. 二進制
      h5app/src/assets/icon/btnadd.png
  50. 二進制
      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. 二進制
      h5app/src/assets/icon/checkup.png
  54. 二進制
      h5app/src/assets/icon/chuanychuqin.png
  55. 二進制
      h5app/src/assets/icon/chuanyuangl.png
  56. 二進制
      h5app/src/assets/icon/chuqinbeijing.png
  57. 二進制
      h5app/src/assets/icon/cj.png
  58. 二進制
      h5app/src/assets/icon/dk.png
  59. 二進制
      h5app/src/assets/icon/documentdistribute.png
  60. 二進制
      h5app/src/assets/icon/drug.png
  61. 1 0
      h5app/src/assets/icon/education.svg
  62. 二進制
      h5app/src/assets/icon/entertain.png
  63. 二進制
      h5app/src/assets/icon/evaluation.png
  64. 二進制
      h5app/src/assets/icon/favicon.png
  65. 二進制
      h5app/src/assets/icon/feiyonggl.png
  66. 二進制
      h5app/src/assets/icon/forward.png
  67. 二進制
      h5app/src/assets/icon/grxx.png
  68. 二進制
      h5app/src/assets/icon/gywm.png
  69. 二進制
      h5app/src/assets/icon/handover.png
  70. 二進制
      h5app/src/assets/icon/icon-back-white.png
  71. 二進制
      h5app/src/assets/icon/icon-change.png
  72. 二進制
      h5app/src/assets/icon/icon-check.png
  73. 12 0
      h5app/src/assets/icon/icon-feeflag.svg
  74. 二進制
      h5app/src/assets/icon/icon-filter.png
  75. 二進制
      h5app/src/assets/icon/icon-mine-democracy.png
  76. 二進制
      h5app/src/assets/icon/icon-mine-help.png
  77. 二進制
      h5app/src/assets/icon/icon-mine-punish.png
  78. 二進制
      h5app/src/assets/icon/icon-mine-reward.png
  79. 二進制
      h5app/src/assets/icon/icon-mine-train.png
  80. 二進制
      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. 二進制
      h5app/src/assets/icon/icon-search.png
  84. 二進制
      h5app/src/assets/icon/icon-user-2x.png
  85. 二進制
      h5app/src/assets/icon/icon-user-3x.png
  86. 二進制
      h5app/src/assets/icon/icon-user.png
  87. 二進制
      h5app/src/assets/icon/icon-volume.png
  88. 二進制
      h5app/src/assets/icon/kq.png
  89. 二進制
      h5app/src/assets/icon/lk.png
  90. 二進制
      h5app/src/assets/icon/login-bg.jpg
  91. 二進制
      h5app/src/assets/icon/login-logo.png
  92. 二進制
      h5app/src/assets/icon/login-system.png
  93. 二進制
      h5app/src/assets/icon/logo.png
  94. 二進制
      h5app/src/assets/icon/logon.png
  95. 二進制
      h5app/src/assets/icon/main-bg.png
  96. 二進制
      h5app/src/assets/icon/mark.png
  97. 二進制
      h5app/src/assets/icon/meeting.png
  98. 1 0
      h5app/src/assets/icon/message-warn.svg
  99. 二進制
      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
+
+

二進制
.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)']
+}

文件差異過大導致無法顯示
+ 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
+}

二進制
h5app/public/assets/icon/favicon.png


二進制
h5app/public/assets/icon/icn_loading.png


二進制
h5app/public/assets/icon/icon.png


文件差異過大導致無法顯示
+ 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'
+    })
+}
+

文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/fonts/dj-search.svg


文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/fonts/empty.svg


文件差異過大導致無法顯示
+ 8 - 0
h5app/src/assets/fonts/ios-back.svg


文件差異過大導致無法顯示
+ 8 - 0
h5app/src/assets/fonts/ios-back2.svg


文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/fonts/line.svg


二進制
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>

二進制
h5app/src/assets/icon/attend-bg.png


二進制
h5app/src/assets/icon/attendance.png


文件差異過大導致無法顯示
+ 8 - 0
h5app/src/assets/icon/back.svg


二進制
h5app/src/assets/icon/banner1.png


二進制
h5app/src/assets/icon/baoyang2.png


二進制
h5app/src/assets/icon/bg.png


二進制
h5app/src/assets/icon/bq.png


二進制
h5app/src/assets/icon/bsx.png


二進制
h5app/src/assets/icon/btnadd.png


二進制
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>

文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/icon/change-role.svg


二進制
h5app/src/assets/icon/checkup.png


二進制
h5app/src/assets/icon/chuanychuqin.png


二進制
h5app/src/assets/icon/chuanyuangl.png


二進制
h5app/src/assets/icon/chuqinbeijing.png


二進制
h5app/src/assets/icon/cj.png


二進制
h5app/src/assets/icon/dk.png


二進制
h5app/src/assets/icon/documentdistribute.png


二進制
h5app/src/assets/icon/drug.png


文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/icon/education.svg


二進制
h5app/src/assets/icon/entertain.png


二進制
h5app/src/assets/icon/evaluation.png


二進制
h5app/src/assets/icon/favicon.png


二進制
h5app/src/assets/icon/feiyonggl.png


二進制
h5app/src/assets/icon/forward.png


二進制
h5app/src/assets/icon/grxx.png


二進制
h5app/src/assets/icon/gywm.png


二進制
h5app/src/assets/icon/handover.png


二進制
h5app/src/assets/icon/icon-back-white.png


二進制
h5app/src/assets/icon/icon-change.png


二進制
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>

二進制
h5app/src/assets/icon/icon-filter.png


二進制
h5app/src/assets/icon/icon-mine-democracy.png


二進制
h5app/src/assets/icon/icon-mine-help.png


二進制
h5app/src/assets/icon/icon-mine-punish.png


二進制
h5app/src/assets/icon/icon-mine-reward.png


二進制
h5app/src/assets/icon/icon-mine-train.png


二進制
h5app/src/assets/icon/icon-mine-userinfo.png


文件差異過大導致無法顯示
+ 8 - 0
h5app/src/assets/icon/icon-more.svg


文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/icon/icon-right.svg


二進制
h5app/src/assets/icon/icon-search.png


二進制
h5app/src/assets/icon/icon-user-2x.png


二進制
h5app/src/assets/icon/icon-user-3x.png


二進制
h5app/src/assets/icon/icon-user.png


二進制
h5app/src/assets/icon/icon-volume.png


二進制
h5app/src/assets/icon/kq.png


二進制
h5app/src/assets/icon/lk.png


二進制
h5app/src/assets/icon/login-bg.jpg


二進制
h5app/src/assets/icon/login-logo.png


二進制
h5app/src/assets/icon/login-system.png


二進制
h5app/src/assets/icon/logo.png


二進制
h5app/src/assets/icon/logon.png


二進制
h5app/src/assets/icon/main-bg.png


二進制
h5app/src/assets/icon/mark.png


二進制
h5app/src/assets/icon/meeting.png


文件差異過大導致無法顯示
+ 1 - 0
h5app/src/assets/icon/message-warn.svg


二進制
h5app/src/assets/icon/msx.png


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


部分文件因文件數量過多而無法顯示