Kaynağa Gözat

项目初始化

pengjing 1 yıl önce
işleme
2a1a22cb09
100 değiştirilmiş dosya ile 29748 ekleme ve 0 silme
  1. 39 0
      .gitignore
  2. BIN
      .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
      h5app/public/assets/icon/favicon.png
  18. BIN
      h5app/public/assets/icon/icn_loading.png
  19. BIN
      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
      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
      h5app/src/assets/icon/attend-bg.png
  42. BIN
      h5app/src/assets/icon/attendance.png
  43. 8 0
      h5app/src/assets/icon/back.svg
  44. BIN
      h5app/src/assets/icon/banner1.png
  45. BIN
      h5app/src/assets/icon/baoyang2.png
  46. BIN
      h5app/src/assets/icon/bg.png
  47. BIN
      h5app/src/assets/icon/bq.png
  48. BIN
      h5app/src/assets/icon/bsx.png
  49. BIN
      h5app/src/assets/icon/btnadd.png
  50. BIN
      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
      h5app/src/assets/icon/checkup.png
  54. BIN
      h5app/src/assets/icon/chuanychuqin.png
  55. BIN
      h5app/src/assets/icon/chuanyuangl.png
  56. BIN
      h5app/src/assets/icon/chuqinbeijing.png
  57. BIN
      h5app/src/assets/icon/cj.png
  58. BIN
      h5app/src/assets/icon/dk.png
  59. BIN
      h5app/src/assets/icon/documentdistribute.png
  60. BIN
      h5app/src/assets/icon/drug.png
  61. 1 0
      h5app/src/assets/icon/education.svg
  62. BIN
      h5app/src/assets/icon/entertain.png
  63. BIN
      h5app/src/assets/icon/evaluation.png
  64. BIN
      h5app/src/assets/icon/favicon.png
  65. BIN
      h5app/src/assets/icon/feiyonggl.png
  66. BIN
      h5app/src/assets/icon/forward.png
  67. BIN
      h5app/src/assets/icon/grxx.png
  68. BIN
      h5app/src/assets/icon/gywm.png
  69. BIN
      h5app/src/assets/icon/handover.png
  70. BIN
      h5app/src/assets/icon/icon-back-white.png
  71. BIN
      h5app/src/assets/icon/icon-change.png
  72. BIN
      h5app/src/assets/icon/icon-check.png
  73. 12 0
      h5app/src/assets/icon/icon-feeflag.svg
  74. BIN
      h5app/src/assets/icon/icon-filter.png
  75. BIN
      h5app/src/assets/icon/icon-mine-democracy.png
  76. BIN
      h5app/src/assets/icon/icon-mine-help.png
  77. BIN
      h5app/src/assets/icon/icon-mine-punish.png
  78. BIN
      h5app/src/assets/icon/icon-mine-reward.png
  79. BIN
      h5app/src/assets/icon/icon-mine-train.png
  80. BIN
      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
      h5app/src/assets/icon/icon-search.png
  84. BIN
      h5app/src/assets/icon/icon-user-2x.png
  85. BIN
      h5app/src/assets/icon/icon-user-3x.png
  86. BIN
      h5app/src/assets/icon/icon-user.png
  87. BIN
      h5app/src/assets/icon/icon-volume.png
  88. BIN
      h5app/src/assets/icon/kq.png
  89. BIN
      h5app/src/assets/icon/lk.png
  90. BIN
      h5app/src/assets/icon/login-bg.jpg
  91. BIN
      h5app/src/assets/icon/login-logo.png
  92. BIN
      h5app/src/assets/icon/login-system.png
  93. BIN
      h5app/src/assets/icon/logo.png
  94. BIN
      h5app/src/assets/icon/logon.png
  95. BIN
      h5app/src/assets/icon/main-bg.png
  96. BIN
      h5app/src/assets/icon/mark.png
  97. BIN
      h5app/src/assets/icon/meeting.png
  98. 1 0
      h5app/src/assets/icon/message-warn.svg
  99. BIN
      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
.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)']
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 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
h5app/public/assets/icon/favicon.png


BIN
h5app/public/assets/icon/icn_loading.png


BIN
h5app/public/assets/icon/icon.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 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'
+    })
+}
+

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/fonts/dj-search.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/fonts/empty.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 8 - 0
h5app/src/assets/fonts/ios-back.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 8 - 0
h5app/src/assets/fonts/ios-back2.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/fonts/line.svg


BIN
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
h5app/src/assets/icon/attend-bg.png


BIN
h5app/src/assets/icon/attendance.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 8 - 0
h5app/src/assets/icon/back.svg


BIN
h5app/src/assets/icon/banner1.png


BIN
h5app/src/assets/icon/baoyang2.png


BIN
h5app/src/assets/icon/bg.png


BIN
h5app/src/assets/icon/bq.png


BIN
h5app/src/assets/icon/bsx.png


BIN
h5app/src/assets/icon/btnadd.png


BIN
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>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/icon/change-role.svg


BIN
h5app/src/assets/icon/checkup.png


BIN
h5app/src/assets/icon/chuanychuqin.png


BIN
h5app/src/assets/icon/chuanyuangl.png


BIN
h5app/src/assets/icon/chuqinbeijing.png


BIN
h5app/src/assets/icon/cj.png


BIN
h5app/src/assets/icon/dk.png


BIN
h5app/src/assets/icon/documentdistribute.png


BIN
h5app/src/assets/icon/drug.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/icon/education.svg


BIN
h5app/src/assets/icon/entertain.png


BIN
h5app/src/assets/icon/evaluation.png


BIN
h5app/src/assets/icon/favicon.png


BIN
h5app/src/assets/icon/feiyonggl.png


BIN
h5app/src/assets/icon/forward.png


BIN
h5app/src/assets/icon/grxx.png


BIN
h5app/src/assets/icon/gywm.png


BIN
h5app/src/assets/icon/handover.png


BIN
h5app/src/assets/icon/icon-back-white.png


BIN
h5app/src/assets/icon/icon-change.png


BIN
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
h5app/src/assets/icon/icon-filter.png


BIN
h5app/src/assets/icon/icon-mine-democracy.png


BIN
h5app/src/assets/icon/icon-mine-help.png


BIN
h5app/src/assets/icon/icon-mine-punish.png


BIN
h5app/src/assets/icon/icon-mine-reward.png


BIN
h5app/src/assets/icon/icon-mine-train.png


BIN
h5app/src/assets/icon/icon-mine-userinfo.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 8 - 0
h5app/src/assets/icon/icon-more.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/icon/icon-right.svg


BIN
h5app/src/assets/icon/icon-search.png


BIN
h5app/src/assets/icon/icon-user-2x.png


BIN
h5app/src/assets/icon/icon-user-3x.png


BIN
h5app/src/assets/icon/icon-user.png


BIN
h5app/src/assets/icon/icon-volume.png


BIN
h5app/src/assets/icon/kq.png


BIN
h5app/src/assets/icon/lk.png


BIN
h5app/src/assets/icon/login-bg.jpg


BIN
h5app/src/assets/icon/login-logo.png


BIN
h5app/src/assets/icon/login-system.png


BIN
h5app/src/assets/icon/logo.png


BIN
h5app/src/assets/icon/logon.png


BIN
h5app/src/assets/icon/main-bg.png


BIN
h5app/src/assets/icon/mark.png


BIN
h5app/src/assets/icon/meeting.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
h5app/src/assets/icon/message-warn.svg


BIN
h5app/src/assets/icon/msx.png


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


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor