Full Code of go-admin-team/go-admin for AI

master a5cc0a9e29cc cached
248 files
1.5 MB
452.0k tokens
1814 symbols
1 requests
Download .txt
Showing preview only (1,572K chars total). Download the full file or copy to clipboard to get everything.
Repository: go-admin-team/go-admin
Branch: master
Commit: a5cc0a9e29cc
Files: 248
Total size: 1.5 MB

Directory structure:
gitextract_e1hbjlbw/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── config.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pr_cn.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── build.yml
│       ├── codeql-analysis.yml
│       ├── go.yml
│       ├── issue-check-inactive.yml
│       ├── issue-close-require.yml
│       ├── issue-labeled.yml
│       └── mirror.yaml
├── .gitignore
├── Dockerfile
├── Dockerfilebak
├── LICENSE.md
├── Makefile
├── README.Zh-cn.md
├── README.md
├── _config.yml
├── app/
│   ├── admin/
│   │   ├── apis/
│   │   │   ├── captcha.go
│   │   │   ├── go_admin.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict_data.go
│   │   │   ├── sys_dict_type.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   └── sys_user.go
│   │   ├── models/
│   │   │   ├── casbin_rule.go
│   │   │   ├── datascope.go
│   │   │   ├── initdb.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict_data.go
│   │   │   ├── sys_dict_type.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   └── sys_user.go
│   │   ├── router/
│   │   │   ├── init_router.go
│   │   │   ├── router.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   ├── sys_router.go
│   │   │   └── sys_user.go
│   │   └── service/
│   │       ├── dto/
│   │       │   ├── sys_api.go
│   │       │   ├── sys_config.go
│   │       │   ├── sys_dept.go
│   │       │   ├── sys_dict_data.go
│   │       │   ├── sys_dict_type.go
│   │       │   ├── sys_login_log.go
│   │       │   ├── sys_menu.go
│   │       │   ├── sys_opera_log.go
│   │       │   ├── sys_post.go
│   │       │   ├── sys_role.go
│   │       │   └── sys_user.go
│   │       ├── sys_api.go
│   │       ├── sys_config.go
│   │       ├── sys_dept.go
│   │       ├── sys_dict_data.go
│   │       ├── sys_dict_type.go
│   │       ├── sys_login_log.go
│   │       ├── sys_menu.go
│   │       ├── sys_opera_log.go
│   │       ├── sys_post.go
│   │       ├── sys_role.go
│   │       ├── sys_role_menu.go
│   │       └── sys_user.go
│   ├── jobs/
│   │   ├── apis/
│   │   │   └── sys_job.go
│   │   ├── examples.go
│   │   ├── jobbase.go
│   │   ├── models/
│   │   │   └── sys_job.go
│   │   ├── router/
│   │   │   ├── int_router.go
│   │   │   ├── router.go
│   │   │   └── sys_job.go
│   │   ├── service/
│   │   │   ├── dto/
│   │   │   │   └── sys_job.go
│   │   │   └── sys_job.go
│   │   └── type.go
│   └── other/
│       ├── apis/
│       │   ├── file.go
│       │   ├── sys_server_monitor.go
│       │   └── tools/
│       │       ├── db_columns.go
│       │       ├── db_tables.go
│       │       ├── gen.go
│       │       └── sys_tables.go
│       ├── models/
│       │   └── tools/
│       │       ├── db_columns.go
│       │       ├── db_tables.go
│       │       ├── sys_columns.go
│       │       └── sys_tables.go
│       ├── router/
│       │   ├── file.go
│       │   ├── gen_router.go
│       │   ├── init_router.go
│       │   ├── monitor.go
│       │   ├── router.go
│       │   └── sys_server_monitor.go
│       └── service/
│           └── dto/
│               └── sys_tables.go
├── cmd/
│   ├── api/
│   │   ├── jobs.go
│   │   ├── other.go
│   │   └── server.go
│   ├── app/
│   │   └── server.go
│   ├── cobra.go
│   ├── config/
│   │   └── server.go
│   ├── migrate/
│   │   ├── migration/
│   │   │   ├── init.go
│   │   │   ├── models/
│   │   │   │   ├── by.go
│   │   │   │   ├── casbin_rule.go
│   │   │   │   ├── initdb.go
│   │   │   │   ├── model.go
│   │   │   │   ├── role_dept.go
│   │   │   │   ├── sys_api.go
│   │   │   │   ├── sys_columns.go
│   │   │   │   ├── sys_config.go
│   │   │   │   ├── sys_dept.go
│   │   │   │   ├── sys_dict_data.go
│   │   │   │   ├── sys_dict_type.go
│   │   │   │   ├── sys_job.go
│   │   │   │   ├── sys_login_log.go
│   │   │   │   ├── sys_menu.go
│   │   │   │   ├── sys_opera_log.go
│   │   │   │   ├── sys_post.go
│   │   │   │   ├── sys_role.go
│   │   │   │   ├── sys_tables.go
│   │   │   │   ├── sys_user.go
│   │   │   │   └── tb_demo.go
│   │   │   ├── version/
│   │   │   │   ├── 1599190683659_tables.go
│   │   │   │   └── 1653638869132_migrate.go
│   │   │   └── version-local/
│   │   │       └── doc.go
│   │   └── server.go
│   └── version/
│       └── server.go
├── common/
│   ├── actions/
│   │   ├── create.go
│   │   ├── delete.go
│   │   ├── index.go
│   │   ├── permission.go
│   │   ├── type.go
│   │   ├── update.go
│   │   └── view.go
│   ├── apis/
│   │   └── api.go
│   ├── database/
│   │   ├── initialize.go
│   │   ├── open.go
│   │   └── open_sqlite3.go
│   ├── dto/
│   │   ├── auto_form.go
│   │   ├── generate.go
│   │   ├── order.go
│   │   ├── pagination.go
│   │   ├── search.go
│   │   └── type.go
│   ├── file_store/
│   │   ├── initialize.go
│   │   ├── interface.go
│   │   ├── kodo.go
│   │   ├── kodo_test.go
│   │   ├── obs.go
│   │   ├── obs_test.go
│   │   ├── oss.go
│   │   └── oss_test.go
│   ├── global/
│   │   ├── adm.go
│   │   ├── casbin.go
│   │   ├── logo.go
│   │   └── topic.go
│   ├── ip.go
│   ├── middleware/
│   │   ├── auth.go
│   │   ├── customerror.go
│   │   ├── db.go
│   │   ├── demo.go
│   │   ├── handler/
│   │   │   ├── auth.go
│   │   │   ├── httpshandler.go
│   │   │   ├── login.go
│   │   │   ├── ping.go
│   │   │   ├── role.go
│   │   │   └── user.go
│   │   ├── header.go
│   │   ├── init.go
│   │   ├── logger.go
│   │   ├── permission.go
│   │   ├── request_id.go
│   │   ├── sentinel.go
│   │   ├── settings.go
│   │   └── trace.go
│   ├── models/
│   │   ├── by.go
│   │   ├── menu.go
│   │   ├── migrate.go
│   │   ├── response.go
│   │   ├── type.go
│   │   └── user.go
│   ├── response/
│   │   └── binding.go
│   ├── service/
│   │   └── service.go
│   └── storage/
│       └── initialize.go
├── config/
│   ├── READMEN.md
│   ├── db-begin-mysql.sql
│   ├── db-end-mysql.sql
│   ├── db-sqlserver.sql
│   ├── db.sql
│   ├── extend.go
│   ├── pg.sql
│   ├── settings.demo.yml
│   ├── settings.full.yml
│   ├── settings.sqlite.yml
│   └── settings.yml
├── docker-compose.yml
├── docs/
│   └── admin/
│       ├── admin_docs.go
│       ├── admin_swagger.json
│       └── admin_swagger.yaml
├── go.mod
├── main.go
├── restart.sh
├── scripts/
│   ├── Dockerfile
│   └── k8s/
│       ├── deploy.yml
│       ├── prerun.sh
│       └── storage.yml
├── ssh/
│   └── swag.sh
├── static/
│   └── form-generator/
│       ├── css/
│       │   ├── index.1a124643.css
│       │   └── parser-example.69e16e51.css
│       ├── index.html
│       ├── js/
│       │   ├── chunk-vendors.971555db.js
│       │   ├── index.8e6d9f8f.js
│       │   ├── parser-example.ce55fa09.js
│       │   ├── preview.8ce4e0db.js
│       │   └── tinymce-example.641995ab.js
│       └── preview.html
├── stop.sh
├── template/
│   ├── api_migrate.template
│   ├── cmd_api.template
│   ├── migrate.template
│   ├── router.template
│   └── v4/
│       ├── actions/
│       │   ├── router_check_role.go.template
│       │   └── router_no_check_role.go.template
│       ├── dto.go.template
│       ├── js.go.template
│       ├── model.go.template
│       ├── no_actions/
│       │   ├── apis.go.template
│       │   ├── router_check_role.go.template
│       │   ├── router_no_check_role.go.template
│       │   └── service.go.template
│       └── vue.go.template
└── test/
    ├── api.go.template
    ├── gen_test.go
    └── model.go.template

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
 - OS: [e.g. iOS]
 - Browser [e.g. chrome, safari]
 - Version [e.g. 22]

**Smartphone (please complete the following information):**
 - Device: [e.g. iPhone6]
 - OS: [e.g. iOS8.1]
 - Browser [e.g. stock browser, safari]
 - Version [e.g. 22]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
  - name: 🆕 Create new issue
    url: http://new-issue.go-admin.dev
    about: The issue which is not created via http://new-issue.go-admin.dev will be closed immediately.
  - name: 🆕 创建一个新 Issue
    url: http://new-issue.go-admin.dev
    about: 不是用 http://new-issue.go-admin.dev 创建的 issue 会被机器人自动关闭。


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pr_cn.md
================================================
<!--
首先,感谢你的贡献!😄

新特性请提交至 feature 分支,其余可提交至 master 分支。
在维护者审核通过后会合并。
请确保填写以下 pull request 的信息,谢谢!~
-->

[[English Template / 英文模板](https://github.com/go-admin-team/go-admin/blob/master/.github/PULL_REQUEST_TEMPLATE.md)]

### 🤔 这个变动的性质是?

- [ ] 新特性提交
- [ ] 日常 bug 修复
- [ ] 站点、文档改进
- [ ] 演示代码改进
- [ ] 组件样式/交互改进
- [ ] TypeScript 定义更新
- [ ] 包体积优化
- [ ] 性能优化
- [ ] 功能增强
- [ ] 国际化改进
- [ ] 重构
- [ ] 代码风格优化
- [ ] 测试用例
- [ ] 分支合并
- [ ] 其他改动(是关于什么的改动?)

### 🔗 相关 Issue

<!--
1. 描述相关需求的来源,如相关的 issue 讨论链接。
-->

### 💡 需求背景和解决方案

<!--
1. 要解决的具体问题。
2. 列出最终的 API 实现和用法。
3. 涉及UI/交互变动需要有截图或 GIF。
-->

### 📝 更新日志

<!--
从用户角度描述具体变化,以及可能的 breaking change 和其他风险。
-->

| 语言    | 更新描述 |
| ------- | -------- |
| 🇺🇸 英文 |          |
| 🇨🇳 中文 |          |

### ☑️ 请求合并前的自查清单

⚠️ 请自检并全部**勾选全部选项**。⚠️

- [ ] 文档已补充或无须补充
- [ ] 代码演示已提供或无须提供
- [ ] TypeScript 定义已补充或无须补充
- [ ] Changelog 已提供或无须提供


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
First of all, thank you for your contribution! 😄

For requesting to pull a new feature or bugfix, please send it from a feature/bugfix branch based on the `master` branch.

Before submitting your pull request, please make sure the checklist below is confirmed.

Your pull requests will be merged after one of the collaborators approve.

Thank you!

-->

[[中文版模板 / Chinese template](https://github.com/go-admin-team/go-admin/blob/master/.github/PULL_REQUEST_TEMPLATE/pr_cn.md)]

### 🤔 This is a ...

- [ ] New feature
- [ ] Bug fix
- [ ] Site / documentation update
- [ ] Demo update
- [ ] Component style update
- [ ] TypeScript definition update
- [ ] Bundle size optimization
- [ ] Performance optimization
- [ ] Enhancement feature
- [ ] Internationalization
- [ ] Refactoring
- [ ] Code style optimization
- [ ] Test Case
- [ ] Branch merge
- [ ] Other (about what?)

### 🔗 Related issue link

<!--
1. Put the related issue or discussion links here.
-->

### 💡 Background and solution

<!--
1. Describe the problem and the scenario.
2. GIF or snapshot should be provided if includes UI/interactive modification.
3. How to fix the problem, and list the final API implementation and usage sample if that is a new feature.
-->

### 📝 Changelog

<!--
Describe changes from the user side, and list all potential break changes or other risks.
--->

| Language   | Changelog |
| ---------- | --------- |
| 🇺🇸 English |           |
| 🇨🇳 Chinese |           |

### ☑️ Self-Check before Merge

⚠️ Please check all items below before review. ⚠️

- [ ] Doc is updated/provided or not needed
- [ ] Demo is updated/provided or not needed
- [ ] TypeScript's definition is updated/provided or not needed
- [ ] Changelog is provided or not needed


================================================
FILE: .github/workflows/build.yml
================================================
name: Build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

env:
  IMAGE_NAME: registry.ap-northeast-1.aliyuncs.com/go-admin/go-admin-api # 镜像名称
  TAG: ${{ github.sha }}
  IMAGE_NAME_TAG: registry.ap-northeast-1.aliyuncs.com/go-admin/go-admin-api:${{ github.sha }}

jobs:

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.24

      - name: Tidy
        run: go mod tidy

      - name: Build
        run: env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -tags "sqlite3,json1" --ldflags "-extldflags -static" -o main .

      - name: Build the Docker image and push
        run: |
          docker login --username=${{ secrets.DOCKER_USERNAME }} registry.ap-northeast-1.aliyuncs.com --password=${{ secrets.DOCKER_PASSWORD }}
          echo "************ docker login end"
          docker build -t go-admin-api:latest .
          echo "************ docker build end"
          docker tag go-admin-api ${{ env.IMAGE_NAME_TAG }}
          echo "************ docker tag end"
          docker images
          echo "************ docker images end"
          docker push ${{ env.IMAGE_NAME_TAG }}  # 推送
          echo "************ docker push end"

      - name: Restart server   # 第五步,重启服务
        uses: appleboy/ssh-action@master
        env:
          GITHUB_SHA_X: ${GITHUB_SHA}
        with:
          host: ${{ secrets.SSH_HOST }}  # 下面三个配置与上一步类似
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.DEPLOY_KEY }}
          # 重启的脚本,根据自身情况做相应改动,一般要做的是migrate数据库以及重启服务器
          script: |
            sudo docker rm -f go-admin-api
            sudo docker login --username=${{ secrets.DOCKER_USERNAME }} registry.ap-northeast-1.aliyuncs.com --password=${{ secrets.DOCKER_PASSWORD }}
            sudo docker run -d -p 8000:8000 --name go-admin-api ${{ env.IMAGE_NAME_TAG }}


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"

on:
  push:
    branches: [ master ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ master ]

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: [ 'go' ]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 https://git.io/JvXDl

    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
    #    and modify them (or add more) to build your code if your project
    #    uses a compiled language

    #- run: |
    #   make bootstrap
    #   make release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1


================================================
FILE: .github/workflows/go.yml
================================================
name: build

on:
  push:
    branches: [ master, dev ]
  pull_request:
    branches: [ master ]
env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

    - name: Set up Go 1.18
      uses: actions/setup-go@v3
      with:
        go-version: 1.18
      id: go

    - name: Check out code into the Go module directory
      uses: actions/checkout@v3

    - name: Get dependencies
      run: go mod tidy
    - name: Build
      run: make build

    - name: Log in to the Container registry
      uses: docker/login-action@v2
      if: startsWith(${{github.ref}}, 'refs/tags/')
      with:
        registry: ${{ env.REGISTRY }}
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Extract metadata (tags, labels) for Docker
      id: meta
      if: startsWith(${{github.ref}}, 'refs/tags/')
      uses: docker/metadata-action@v4
      with:
        images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
        flavor: |
          latest=auto
        tags: |
          type=schedule
          type=ref,event=tag
          type=sha,prefix=,format=long,enable=true,priority=100

    - name: Build and push Docker image
      uses: docker/build-push-action@v3
      if: startsWith(${{github.ref}}, 'refs/tags/')
      with:
        context: .
        file: scripts/Dockerfile
        push: true
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}


================================================
FILE: .github/workflows/issue-check-inactive.yml
================================================
name: Issue Check Inactive

on:
  schedule:
    - cron: "0 0 */15 * *"

permissions:
  contents: read

jobs:
  issue-check-inactive:
    permissions:
      issues: write  # for actions-cool/issues-helper to update issues
      pull-requests: write  # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: check-inactive
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'check-inactive'
          inactive-label: 'Inactive'
          inactive-day: 30


================================================
FILE: .github/workflows/issue-close-require.yml
================================================
name: Issue Close Require

on:
  schedule:
    - cron: "0 0 * * *"

permissions:
  contents: read

jobs:
  issue-close-require:
    permissions:
      issues: write  # for actions-cool/issues-helper to update issues
      pull-requests: write  # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: need reproduce
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'close-issues'
          labels: '🤔 Need Reproduce'
          inactive-day: 3

      - name: needs more info
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'close-issues'
          labels: 'needs-more-info'
          inactive-day: 3
          body: |
            Since the issue was labeled with `needs-more-info`, but no response in 3 days. This issue will be closed. If you have any questions, you can comment and reply.
            由于该 issue 被标记为需要更多信息,却 3 天未收到回应。现关闭 issue,若有任何问题,可评论回复。


================================================
FILE: .github/workflows/issue-labeled.yml
================================================
# Origin Source
# https://github.com/ant-design/ant-design/blob/79f566b7f8abb1012ef55b0d2793bfdf5595b85d/.github/workflows/issue-reply.yml
name: Issue Labeled

on:
  issues:
    types: [labeled]

permissions:
  contents: read

jobs:
  issue-labeled:
    permissions:
      issues: write  # for actions-cool/issues-helper to update issues
      pull-requests: write  # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: help wanted
        if: github.event.label.name == 'help wanted'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment'
          token: ${{ secrets.ADMIN_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hello @${{ github.event.issue.user.login }}. We totally like your proposal/feedback, welcome to [send us a Pull Request](https://help.github.com/en/articles/creating-a-pull-request) for it. Please send your Pull Request to proper branch (feature branch for the new feature, master for bugfix and other changes), fill the [Pull Request Template](https://github.com/go-admin-team/go-admin/blob/master/.github/PULL_REQUEST_TEMPLATE.md) here, provide changelog/TypeScript/documentation/test cases if needed and make sure CI passed, we will review it soon. We appreciate your effort in advance and looking forward to your contribution!
            你好 @${{ github.event.issue.user.login }},我们完全同意你的提议/反馈,欢迎直接在此仓库 [创建一个 Pull Request](https://help.github.com/en/articles/creating-a-pull-request) 来解决这个问题。请将 Pull Request 发到正确的分支(新特性发到 feature 分支,其他发到 master 分支),务必填写 Pull Request 内的[预设模板](https://github.com/go-admin-team/go-admin/blob/master/.github/PULL_REQUEST_TEMPLATE.md),提供改动所需相应的 changelog、TypeScript 定义、测试用例、文档等,并确保 CI 通过,我们会尽快进行 Review,提前感谢和期待您的贡献。
            ![giphy](https://user-images.githubusercontent.com/507615/62342668-4735dc00-b51a-11e9-92a7-d46fbb1cc0c7.gif)
      - name: 🤔 Need Reproduce
        if: github.event.label.name == '🤔 Need Reproduce'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment'
          token: ${{ secrets.ADMIN_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hello @${{ github.event.issue.user.login }}. Please provide a online reproduction by forking this link https://u.ant.design/codesandbox-repro or a minimal GitHub repository. Issues labeled by `Need Reproduce` will be closed if no activities in 3 days.
            你好 @${{ github.event.issue.user.login }}, 我们需要你提供一个在线的重现实例以便于我们帮你排查问题。你可以通过点击 [此处](https://u.ant.design/codesandbox-repro) 创建一个 codesandbox 或者提供一个最小化的 GitHub 仓库。3 天内未跟进此 issue 将会被自动关闭。
            ![](https://gw.alipayobjects.com/zos/antfincdn/y9kwg7DVCd/reproduce.gif)
      - name: Usage
        if: github.event.label.name == 'Usage' || github.event.label.name == 'Question'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment,close-issue'
          token: ${{ secrets.ADMIN_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hello @${{ github.event.issue.user.login }}, we use GitHub issues to trace bugs or discuss plans of Ant Design. So, please [don't ask usage questions](https://github.com/ant-design/ant-design/issues/2320) here. You can try to open a new discussion in [antd discussions](https://github.com/ant-design/ant-design/discussions), select `Q&A` to ask questions, also can ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/antd) or [Segment Fault](https://segmentfault.com/t/antd), then apply tag `antd` and `react` to your question.
            你好 @${{ github.event.issue.user.login }},go-admin Issue 板块是用于 bug 反馈与需求讨论的地方。请[勿询问如何使用的问题](https://github.com/go-admin-te/ant-design/issues/699),你可以试着在 [antd discussions](https://github.com/ant-design/ant-design/discussions) 新开一个 discussion,选择 `Q&A` 类别进行提问,也可以在 [Stack Overflow](https://stackoverflow.com/questions/tagged/antd) 或者 [Segment Fault](https://segmentfault.com/t/antd) 中提问(记得添加 `antd` 和 `react` 标签哦~)。
      - name: 3.x
        if: github.event.label.name == '3.x'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment,close-issue'
          token: ${{ secrets.ADMIN_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hi @${{ github.event.issue.user.login }}. Current version (3.x) is off the maintenance period. We may not accept pull request or fix bug with it anymore. This topic will be auto closed.
            你好 @${{ github.event.issue.user.login }},当前版本(3.x)已经过了维护期。我们不会再接受对其的相关 PR 与 issue。当前 topic 会被自动关闭。
      - name: invalid
        if: github.event.label.name == 'Invalid'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment,close-issue'
          token: ${{ secrets.ADMIN_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hello @${{ github.event.issue.user.login }}, your issue has been closed because it does not conform to our issue requirements. Please use the [Issue Helper](https://new-issue.go-admin.dev) to create an issue, thank you!
            你好 @${{ github.event.issue.user.login }},为了能够进行高效沟通,我们对 issue 有一定的格式要求,你的 issue 因为不符合要求而被自动关闭。你可以通过 [issue 助手](https://new-issue.go-admin.dev) 来创建 issue 以方便我们定位错误。谢谢配合!
      - name: rtl
        if: github.event.label.name == 'rtl'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'add-assignees'
          assignees: 'xrkffgg'


================================================
FILE: .github/workflows/mirror.yaml
================================================
name: 'GitHub Actions Mirror'

on: [push, delete]

jobs:
  mirror_to_gitee:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v1
      - name: 'Mirror to gitee'
        uses: pixta-dev/repository-mirroring-action@v1
        with:
          target_repo_url:
            git@gitee.com:go-admin-team/go-admin.git
          ssh_private_key:
            ${{ secrets.GITEE_KEY }}
  mirror_to_gitlab:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v1
      - name: 'Mirror to gitlab'
        uses: pixta-dev/repository-mirroring-action@v1
        with:
          target_repo_url:
            git@gitlab.com:go-admin-team/go-admin.git
          ssh_private_key:
            ${{ secrets.GITLAB_KEY }}


================================================
FILE: .gitignore
================================================
.idea
.vscode
*/.DS_Store
static/uploadfile
main.exe
*.exe
go-admin
go-admin.exe
temp/
!temp
vendor
config/settings.dev.yml
config/settings.dev.*.yml
config/settings.dev.*.yml.log
temp/logs
config/settings.dev.yml.log
config/settings.b.dev.yml
cmd/migrate/migration/version-local/*
!cmd/migrate/migration/version-local/doc.go

# go sum
go.sum
config/settings.deva.yml


================================================
FILE: Dockerfile
================================================
FROM alpine

# ENV GOPROXY https://goproxy.cn/

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

RUN apk update --no-cache
RUN apk add --update gcc g++ libc6-compat
RUN apk add --no-cache ca-certificates
RUN apk add --no-cache tzdata
ENV TZ Asia/Shanghai

COPY ./main /main
COPY ./config/settings.demo.yml /config/settings.yml
COPY ./go-admin-db.db /go-admin-db.db
EXPOSE 8000
RUN  chmod +x /main
CMD ["/main","server","-c", "/config/settings.yml"]

================================================
FILE: Dockerfilebak
================================================
FROM golang:alpine as builder

MAINTAINER lwnmengjing

ENV GOPROXY https://goproxy.cn/

WORKDIR /go/release
#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && apk add tzdata

COPY go.mod ./go.mod
RUN go mod tidy
COPY . .
RUN pwd && ls

RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -a -installsuffix cgo -o go-admin .

FROM alpine

COPY --from=builder /go/release/go-admin /

COPY --from=builder /go/release/config/settings.yml /config/settings.yml

COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

EXPOSE 8000

CMD ["/go-admin","server","-c", "/config/settings.yml"]

================================================
FILE: LICENSE.md
================================================
MIT License

Copyright (c) 2020 go-admin-team

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Makefile
================================================
PROJECT:=go-admin

.PHONY: build
build:
	CGO_ENABLED=0 go build -ldflags="-w -s" -a -installsuffix "" -o go-admin .

# make build-linux
build-linux:
	@docker build -t go-admin:latest .
	@echo "build successful"

build-sqlite:
	go build -tags sqlite3 -ldflags="-w -s" -a -installsuffix -o go-admin .

# make run
run:
    # delete go-admin-api container
	@if [ $(shell docker ps -aq --filter name=go-admin --filter publish=8000) ]; then docker rm -f go-admin; fi

    # 启动方法一 run go-admin-api container  docker-compose 启动方式
    # 进入到项目根目录 执行 make run 命令
	@docker-compose up -d

	# 启动方式二 docker run  这里注意-v挂载的宿主机的地址改为部署时的实际决对路径
    #@docker run --name=go-admin -p 8000:8000 -v /home/code/go/src/go-admin/go-admin/config:/go-admin-api/config  -v /home/code/go/src/go-admin/go-admin-api/static:/go-admin/static -v /home/code/go/src/go-admin/go-admin/temp:/go-admin-api/temp -d --restart=always go-admin:latest

	@echo "go-admin service is running..."

	# delete Tag=<none> 的镜像
	@docker image prune -f
	@docker ps -a | grep "go-admin"

stop:
    # delete go-admin-api container
	@if [ $(shell docker ps -aq --filter name=go-admin --filter publish=8000) ]; then docker-compose down; fi
	#@if [ $(shell docker ps -aq --filter name=go-admin --filter publish=8000) ]; then docker rm -f go-admin; fi
	#@echo "go-admin stop success"


#.PHONY: test
#test:
#	go test -v ./... -cover

#.PHONY: docker
#docker:
#	docker build . -t go-admin:latest

# make deploy
deploy:

	#@git checkout master
	#@git pull origin master
	make build-linux
	make run


================================================
FILE: README.Zh-cn.md
================================================
# go-admin

  <img align="right" width="320" src="https://doc-image.zhangwj.com/img/go-admin.svg">


[![Build Status](https://github.com/wenjianzhang/go-admin/workflows/build/badge.svg)](https://github.com/go-admin-team/go-admin)
[![Release](https://img.shields.io/github/release/go-admin-team/go-admin.svg?style=flat-square)](https://github.com/go-admin-team/go-admin/releases)
[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/go-admin-team/go-admin)

[English](https://github.com/go-admin-team/go-admin/blob/master/README.md) | 简体中文

基于Gin + Vue + Element UI OR Arco Design OR Ant Design的前后端分离权限管理系统,系统初始化极度简单,只需要配置文件中,修改数据库连接,系统支持多指令操作,迁移指令可以让初始化数据库信息变得更简单,服务指令可以很简单的启动api服务

[在线文档](https://www.go-admin.pro)

[前端项目](https://github.com/go-admin-team/go-admin-ui)

[视频教程](https://space.bilibili.com/565616721/channel/detail?cid=125737)

## 🎬 在线体验

Element UI vue体验:[https://vue2.go-admin.dev](https://vue2.go-admin.dev/#/login)
> ⚠️⚠️⚠️ 账号 / 密码: admin / 123456

Arco Design vue3 demo:[https://vue3.go-admin.dev](https://vue3.go-admin.dev/#/login)
> ⚠️⚠️⚠️ 账号 / 密码: admin / 123456

antd体验:[https://antd.go-admin.pro](https://antd.go-admin.pro/)
> ⚠️⚠️⚠️ 账号 / 密码: admin / 123456

## ✨ 特性

- 遵循 RESTful API 设计规范

- 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证、跨域、访问日志、追踪ID等)

- 基于Casbin的 RBAC 访问控制模型

- JWT 认证

- 支持 Swagger 文档(基于swaggo)

- 基于 GORM 的数据库存储,可扩展多种类型数据库

- 配置文件简单的模型映射,快速能够得到想要的配置

- 代码生成工具

- 表单构建工具

- 多指令模式

- 多租户的支持

- TODO: 单元测试

## 🎁 内置

1. 多租户:系统默认支持多租户,按库分离,一个库一个租户。
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识,接口权限等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
9. 登录日志:系统登录日志记录查询包含登录异常。
1. 接口文档:根据业务代码自动生成相关的api接口文档。
1. 代码生成:根据数据表结构生成对应的增删改查相对应业务,全程可视化操作,让基本业务可以零代码实现。
1. 表单构建:自定义页面样式,拖拉拽实现页面布局。
1. 服务监控:查看一些服务器的基本信息。
1. 内容管理:demo功能,下设分类管理、内容管理。可以参考使用方便快速入门。
1. 定时任务:自动化任务,目前支持接口调用和函数调用。

## 准备工作

你需要在本地安装 [go] [gin] [node](http://nodejs.org/) 和 [git](https://git-scm.com/) 

同时配套了系列教程包含视频和文档,如何从下载完成到熟练使用,强烈建议大家先看完这些教程再来实践本项目!!!

### 轻松实现go-admin写出第一个应用 - 文档教程

[步骤一 - 基础内容介绍](https://doc.zhangwj.com/guide/intro/tutorial01.html)

[步骤二 - 实际应用 - 编写增删改查](https://doc.zhangwj.com/guide/intro/tutorial02.html)

### 手把手教你从入门到放弃 - 视频教程

[如何启动go-admin](https://www.bilibili.com/video/BV1z5411x7JG)

[使用生成工具轻松实现业务](https://www.bilibili.com/video/BV1Dg4y1i79D)

[v1.1.0版本代码生成工具-释放双手](https://www.bilibili.com/video/BV1N54y1i71P) [进阶]

[多命令启动方式讲解以及IDE配置](https://www.bilibili.com/video/BV1Fg4y1q7ph)

[go-admin菜单的配置说明](https://www.bilibili.com/video/BV1Wp4y1D715) [必看]

[如何配置菜单信息以及接口信息](https://www.bilibili.com/video/BV1zv411B7nG) [必看]

[go-admin权限配置使用说明](https://www.bilibili.com/video/BV1rt4y197d3) [必看]

[go-admin数据权限使用说明](https://www.bilibili.com/video/BV1LK4y1s71e) [必看]

**如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr ,视频教程和文档持续更新中**

## 📦 本地开发

### 环境要求

go 1.18

node版本: v14.16.0

npm版本: 6.14.11

### 开发目录创建

```bash

# 创建开发目录
mkdir goadmin
cd goadmin
```

### 获取代码

> 重点注意:两个项目必须放在同一文件夹下;

```bash
# 获取后端代码
git clone https://github.com/go-admin-team/go-admin.git

# 获取前端代码
git clone https://github.com/go-admin-team/go-admin-ui.git

```

### 启动说明

#### 服务端启动说明

```bash
# 进入 go-admin 后端项目
cd ./go-admin

# 更新整理依赖
go mod tidy

# 编译项目
go build

# 修改配置 
# 文件路径  go-admin/config/settings.yml
vi ./config/settings.yml

# 1. 配置文件中修改数据库信息 
# 注意: settings.database 下对应的配置数据
# 2. 确认log路径
```

⚠️注意 在windows环境如果没有安装中CGO,会出现这个问题;

```bash
E:\go-admin>go build
# github.com/mattn/go-sqlite3
cgo: exec /missing-cc: exec: "/missing-cc": file does not exist
```

or

```bash
D:\Code\go-admin>go build
# github.com/mattn/go-sqlite3
cgo: exec gcc: exec: "gcc": executable file not found in %PATH%
```

[解决cgo问题进入](https://doc.go-admin.dev/zh-CN/guide/faq#cgo-%E7%9A%84%E9%97%AE%E9%A2%98)


#### 初始化数据库,以及服务启动

``` bash
# 首次配置需要初始化数据库资源信息
# macOS or linux 下使用
$ ./go-admin migrate -c config/settings.dev.yml

# ⚠️注意:windows 下使用
$ go-admin.exe migrate -c config/settings.dev.yml


# 启动项目,也可以用IDE进行调试
# macOS or linux 下使用
$ ./go-admin server -c config/settings.yml


# ⚠️注意:windows 下使用
$ go-admin.exe server -c config/settings.yml
```

#### sys_api 表的数据如何添加

在项目启动时,使用`-a true` 系统会自动添加缺少的接口数据
```bash
./go-admin server -c config/settings.yml -a true
```

#### 使用docker 编译启动

```shell
# 编译镜像
docker build -t go-admin .

# 启动容器,第一个go-admin是容器名字,第二个go-admin是镜像名称
# -v 映射配置文件 本地路径:容器路径
docker run --name go-admin -p 8000:8000 -v /config/settings.yml:/config/settings.yml -d go-admin-server
```

#### 文档生成

```bash
go generate
```

#### 交叉编译

```bash
# windows
env GOOS=windows GOARCH=amd64 go build main.go

# or
# linux
env GOOS=linux GOARCH=amd64 go build main.go
```

### UI交互端启动说明

```bash
# 安装依赖
npm install

# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com

# 启动服务
npm run dev
```

## 📨 互动

<table>
   <tr>
    <td><img src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/wx.png" width="180px"></td>
    <td><img src="https://doc-image.zhangwj.com/img/qrcode_for_gh_b798dc7db30c_258.jpg" width="180px"></td>
    <td><img src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/qq2.png" width="200px"></td>
    <td><a href="https://space.bilibili.com/565616721">wenjianzhang</a></td>
  </tr>
  <tr>
    <td>微信</td>
    <td>公众号🔥🔥🔥</td>
    <td><a target="_blank" href="https://shang.qq.com/wpa/qunwpa?idkey=0f2bf59f5f2edec6a4550c364242c0641f870aa328e468c4ee4b7dbfb392627b"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="go-admin技术交流乙号" title="go-admin技术交流乙号"></a></td>
    <td>哔哩哔哩🔥🔥🔥</td>
  </tr>
</table>

## 💎 贡献者


<span style="margin: 0 5px;" ><a href="https://github.com/wenjianzhang" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/3890175?v=4&h=60&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/G-Akiraka" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/45746659?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/lwnmengjing" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/12806223?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/bing127" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/31166183?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/chengxiao" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/1379545?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/NightFire0307" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/19854086?v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/appleboy" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/21979?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/ninstein" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/580303?v=4&h=60&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/kikiyou" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/17959053?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/horizonzy" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/22524871?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Cassuis" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/48005724?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/hqcchina" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/5179057?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/nodece" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/16235121?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/stephenzhang0713" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/18169290?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zhouxixi-dev" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/100399679?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Jalins" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/31172582?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wkf928592" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/6063351?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wxxiong6" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/6983441?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Silicon-He" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/52478309?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/GizmoOAO" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/20385106?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/bestgopher" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/36840497?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wxb1207" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/20775558?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/misakichan" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/16569274?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zhuxuyang" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/19301024?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/mss-boot" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/109259065?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/AuroraV" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/37330199?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Vingurzhou" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/57127283?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/haimait" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/40926384?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zyd" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/3446278?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/infnan" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/38274826?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/d1y" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/45585937?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/qlijin" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/515900?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/logtous
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/88697234?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/stepway
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/9927079?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/NaturalGao
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/43291304?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/DemoLiang
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/23476007?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/jfcg
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/1410597?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Nicole0724
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/10487328?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>

## JetBrains 开源证书支持

`go-admin` 项目一直以来都是在 JetBrains 公司旗下的 GoLand 集成开发环境中进行开发,基于 **free JetBrains Open Source license(s)** 正版免费授权,在此表达我的谢意。

<a href="https://www.jetbrains.com/?from=kubeadm-ha" target="_blank"><img src="https://raw.githubusercontent.com/panjf2000/illustrations/master/jetbrains/jetbrains-variant-4.png" width="250" align="middle"/></a>

## 🤝 特别感谢

1. [ant-design](https://github.com/ant-design/ant-design)
2. [ant-design-pro](https://github.com/ant-design/ant-design-pro)
2. [arco-design](https://github.com/arco-design/arco-design)
2. [arco-design-pro](https://github.com/arco-design/arco-design-pro)
4. [gin](https://github.com/gin-gonic/gin)
5. [casbin](https://github.com/casbin/casbin)
6. [spf13/viper](https://github.com/spf13/viper)
7. [gorm](https://github.com/jinzhu/gorm)
8. [gin-swagger](https://github.com/swaggo/gin-swagger)
9. [jwt-go](https://github.com/dgrijalva/jwt-go)
10. [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
11. [ruoyi-vue](https://gitee.com/y_project/RuoYi-Vue)
12. [form-generator](https://github.com/JakHuang/form-generator)


## 🤟 打赏

> 如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink:

<img class="no-margin" src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/pay.png"  height="200px" >

## 🤝 链接

[Go开发者成长线路图](http://www.golangroadmap.com/)

## 🔑 License

[MIT](https://github.com/go-admin-team/go-admin/blob/master/LICENSE.md)

Copyright (c) 2024 wenjianzhang


================================================
FILE: README.md
================================================

# go-admin

<img align="right" width="320" src="https://doc-image.zhangwj.com/img/go-admin.svg">


[![Build Status](https://github.com/wenjianzhang/go-admin/workflows/build/badge.svg)](https://github.com/go-admin-team/go-admin)
[![Release](https://img.shields.io/github/release/go-admin-team/go-admin.svg?style=flat-square)](https://github.com/go-admin-team/go-admin/releases)
[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/go-admin-team/go-admin)

English | [简体中文](https://github.com/go-admin-team/go-admin/blob/master/README.Zh-cn.md)

The front-end and back-end separation authority management system based on Gin + Vue + Element UI OR Arco Design is extremely simple to initialize the system. You only need to modify the database connection in the configuration file. The system supports multi-instruction operations. Migration instructions can make it easier to initialize database information. Service instructions It's easy to start the api service.

[documentation](https://www.go-admin.dev)

[Front-end project](https://github.com/go-admin-team/go-admin-ui)

[Video tutorial](https://space.bilibili.com/565616721/channel/detail?cid=125737)

## 🎬 Online Demo

Element UI vue demo:[https://vue2.go-admin.dev](https://vue2.go-admin.dev/#/login)
> 账号 / 密码: admin / 123456

Arco Design vue3 demo:[https://vue3.go-admin.dev](https://vue3.go-admin.dev/#/login)
> 账号 / 密码: admin / 123456

antd demo:[https://antd.go-admin.pro](https://antd.go-admin.pro/)
> 账号 / 密码: admin / 123456
> 
## ✨ Feature

- Follow RESTful API design specifications

- Based on the GIN WEB API framework, it provides rich middleware support (user authentication, cross-domain, access log, tracking ID, etc.)

- RBAC access control model based on Casbin

- JWT authentication

- Support Swagger documents (based on swaggo)

- Database storage based on GORM, which can expand multiple types of databases

- Simple model mapping of configuration files to quickly get the desired configuration

- Code generation tool

- Form builder

- Multi-command mode

- TODO: unit test


## 🎁 Internal

1. User management: The user is the system operator, this function mainly completes the system user configuration.
2. Department management: configure the system organization (company, department, group), and display the tree structure to support data permissions.
3. Position management: configure the positions of system users.
4. Menu management: configure the system menu, operation authority, button authority identification, interface authority, etc.
5. Role management: Role menu permission assignment and role setting are divided into data scope permissions by organization.
6. Dictionary management: Maintain some relatively fixed data frequently used in the system.
7. Parameter management: dynamically configure common parameters for the system.
8. Operation log: system normal operation log record and query; system abnormal information log record and query.
9. Login log: The system login log record query contains login exceptions.
1. Interface documentation: Automatically generate related api interface documents according to the business code.
1. Code generation: According to the data table structure, generate the corresponding addition, deletion, modification, and check corresponding business, and the whole process of visual operation, so that the basic business can be implemented with zero code.
1. Form construction: Customize the page style, drag and drop to realize the page layout.
1. Service monitoring: View the basic information of some servers.
1. Content management: demo function, including classification management and content management. You can refer to the easy to use quick start.

## Ready to work

You need to install locally [go] [gin] [node](http://nodejs.org/) 和 [git](https://git-scm.com/)

At the same time, a series of tutorials including videos and documents are provided. How to complete the downloading to the proficient use, it is strongly recommended that you read these tutorials before you practice this project! ! !

### Easily implement go-admin to write the first application-documentation tutorial

[Step 1 - basic content introduction](https://doc.zhangwj.com/guide/intro/tutorial01.html)

[Step 2 - Practical application - writing database operations](https://doc.zhangwj.com/guide/intro/tutorial02.html)

### Teach you from getting started to giving up-video tutorial

[How to start go-admin](https://www.bilibili.com/video/BV1z5411x7JG)

[Easily implement business using build tools](https://www.bilibili.com/video/BV1Dg4y1i79D)

[v1.1.0 version code generation tool-free your hands](https://www.bilibili.com/video/BV1N54y1i71P) [Advanced]

[Explanation of multi-command startup mode and IDE configuration](https://www.bilibili.com/video/BV1Fg4y1q7ph)

[Configuration instructions for go-admin menu](https://www.bilibili.com/video/BV1Wp4y1D715) [Must see]

[How to configure menu information and interface information](https://www.bilibili.com/video/BV1zv411B7nG) [Must see]

[go-admin permission configuration instructions](https://www.bilibili.com/video/BV1rt4y197d3) [Must see]

[Instructions for use of go-admin data permissions](https://www.bilibili.com/video/BV1LK4y1s71e) [Must see]

**If you have any questions, please read the above-mentioned usage documents and articles first. If you are not satisfied, welcome to issue and pr. Video tutorials and documents are being updated continuously.**

## 📦 Local development

### Environmental requirements

go 1.18

nodejs: v14.16.0

npm: 6.14.11

### Development directory creation

```bash

# Create a development directory
mkdir goadmin
cd goadmin
```

### Get the code

> Important note: the two projects must be placed in the same folder;

```bash
# Get backend code
git clone https://github.com/go-admin-team/go-admin.git

# Get the front-end code
git clone https://github.com/go-admin-team/go-admin-ui.git

```

### Startup instructions

#### Server startup instructions

```bash
# Enter the go-admin backend project
cd ./go-admin

# Update dependencies
go mod tidy

# Compile the project
go build

# Change setting 
# File path go-admin/config/settings.yml
vi ./config/settings.yml

# 1. Modify the database information in the configuration file
# Note: The corresponding configuration data under settings.database
# 2. Confirm the log path
```

:::tip ⚠️Note that this problem will occur if CGO is not installed in the windows10+ environment;

```bash
E:\go-admin>go build
# github.com/mattn/go-sqlite3
cgo: exec /missing-cc: exec: "/missing-cc": file does not exist
```

or

```bash
D:\Code\go-admin>go build
# github.com/mattn/go-sqlite3
cgo: exec gcc: exec: "gcc": executable file not found in %PATH%
```

[Solve the cgo problem and enter](https://doc.go-admin.dev/guide/faq#cgo-%E7%9A%84%E9%97%AE%E9%A2%98)

:::

#### Initialize the database, and start the service

``` bash
# The first configuration needs to initialize the database resource information
# Use under macOS or linux
$ ./go-admin migrate -c config/settings.dev.yml

# ⚠️Note: Use under windows
$ go-admin.exe migrate -c config/settings.dev.yml

# Start the project, you can also use the IDE for debugging
# Use under macOS or linux
$ ./go-admin server -c config/settings.yml

# ⚠️Note: Use under windows
$ go-admin.exe server -c config/settings.yml
```

#### Use docker to compile and start

```shell
# Compile the image
docker build -t go-admin .


# Start the container, the first go-admin is the container name, and the second go-admin is the image name
# -v Mapping configuration file Local path: container path
docker run --name go-admin -p 8000:8000 -v /config/settings.yml:/config/settings.yml -d go-admin-server
```



#### Generation Document

```bash
go generate
```

#### Cross compile
```bash
# windows
env GOOS=windows GOARCH=amd64 go build main.go

# or
# linux
env GOOS=linux GOARCH=amd64 go build main.go
```

### UI interactive terminal startup instructions

```bash
# Installation dependencies
npm install   # or cnpm install

# Start service
npm run dev
```

## 📨 Interactive

<table>
  <tr>
    <td><img src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/wx.png" width="180px"></td>
    <td><img src="https://doc-image.zhangwj.com/img/qrcode_for_gh_b798dc7db30c_258.jpg" width="180px"></td>
    <td><img src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/qq2.png" width="200px"></td>
    <td><a href="https://space.bilibili.com/565616721">wenjianzhang</a></td>
  </tr>
  <tr>
    <td>Wechat</td>
    <td>Wechat公众号🔥🔥🔥</td>
    <td><a target="_blank" href="https://shang.qq.com/wpa/qunwpa?idkey=0f2bf59f5f2edec6a4550c364242c0641f870aa328e468c4ee4b7dbfb392627b"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="go-admin技术交流乙号" title="go-admin技术交流乙号"></a></td>
    <td>bilibili🔥🔥🔥</td>
  </tr>
</table>

## 💎 Contributors

<span style="margin: 0 5px;" ><a href="https://github.com/wenjianzhang" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/3890175?v=4&h=60&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/G-Akiraka" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/45746659?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/lwnmengjing" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/12806223?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/bing127" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/31166183?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/chengxiao" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/1379545?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/NightFire0307" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/19854086?v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/appleboy" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/21979?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/ninstein" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/580303?v=4&h=60&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/kikiyou" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/17959053?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/horizonzy" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/22524871?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Cassuis" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/48005724?s=64&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/hqcchina" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/5179057?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/nodece" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/16235121?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/stephenzhang0713" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/18169290?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zhouxixi-dev" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/100399679?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Jalins" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/31172582?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wkf928592" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/6063351?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wxxiong6" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/6983441?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Silicon-He" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/52478309?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/GizmoOAO" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/20385106?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/bestgopher" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/36840497?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/wxb1207" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/20775558?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/misakichan" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/16569274?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zhuxuyang" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/19301024?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/mss-boot" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/109259065?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/AuroraV" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/37330199?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Vingurzhou" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/57127283?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/haimait" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/40926384?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/zyd" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/3446278?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/infnan" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/38274826?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/d1y" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/45585937?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/qlijin" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/515900?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/logtous
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/88697234?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/stepway
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/9927079?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/NaturalGao
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/43291304?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/DemoLiang
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/23476007?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/jfcg
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/1410597?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>
<span style="margin: 0 5px;" ><a href="https://github.com/Nicole0724
" ><img src="https://images.weserv.nl/?url=avatars.githubusercontent.com/u/10487328?s=60&v=4&w=60&fit=cover&mask=circle&maxage=7d" /></a></span>



## JetBrains open source certificate support

The `go-admin` project has always been developed in the GoLand integrated development environment under JetBrains, based on the **free JetBrains Open Source license(s)** genuine free license. I would like to express my gratitude.

<a href="https://www.jetbrains.com/?from=kubeadm-ha" target="_blank"><img src="https://raw.githubusercontent.com/panjf2000/illustrations/master/jetbrains/jetbrains-variant-4.png" width="250" align="middle"/></a>


## 🤝 Thanks

1. [ant-design](https://github.com/ant-design/ant-design)
2. [ant-design-pro](https://github.com/ant-design/ant-design-pro)
2. [arco-design](https://github.com/arco-design/arco-design)
2. [arco-design-pro](https://github.com/arco-design/arco-design-pro)
2. [gin](https://github.com/gin-gonic/gin)
2. [casbin](https://github.com/casbin/casbin)
2. [spf13/viper](https://github.com/spf13/viper)
2. [gorm](https://github.com/jinzhu/gorm)
2. [gin-swagger](https://github.com/swaggo/gin-swagger)
2. [jwt-go](https://github.com/dgrijalva/jwt-go)
2. [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
2. [ruoyi-vue](https://gitee.com/y_project/RuoYi-Vue)
2. [form-generator](https://github.com/JakHuang/form-generator)

## 🤟 Sponsor Us

> If you think this project helped you, you can buy a glass of juice for the author to show encouragement :tropical_drink:

<img class="no-margin" src="https://raw.githubusercontent.com/wenjianzhang/image/master/img/pay.png"  height="200px" >

## 🤝 Link
- [Go developer growth roadmap](http://www.golangroadmap.com/)
- [mss-boot-io](https://docs.mss-boot-io.top/)

## 🔑 License

[MIT](https://github.com/go-admin-team/go-admin/blob/master/LICENSE.md)

Copyright (c) 2022 wenjianzhang


================================================
FILE: _config.yml
================================================
theme: jekyll-theme-cayman

================================================
FILE: app/admin/apis/captcha.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/captcha"
)

type System struct {
	api.Api
}

// GenerateCaptchaHandler 获取验证码
// @Summary 获取验证码
// @Description 获取验证码
// @Tags 登陆
// @Success 200 {object} response.Response{data=string,id=string,msg=string} "{"code": 200, "data": [...]}"
// @Router /api/v1/captcha [get]
func (e System) GenerateCaptchaHandler(c *gin.Context) {
	if err := e.MakeContext(c).Errors; err != nil {
		e.Error(500, err, "服务初始化失败!")
		return
	}
	id, b64s, answer, err := captcha.DriverDigitFunc()
	if err != nil {
		e.Logger.Errorf("DriverDigitFunc error, %s", err.Error())
		e.Error(500, err, "验证码获取失败")
		return
	}
	e.Logger.Infof("DriverDigitFunc answer: %s", answer)
	e.Custom(gin.H{
		"code": 200,
		"data": b64s,
		"id":   id,
		"msg":  "success",
	})
}


================================================
FILE: app/admin/apis/go_admin.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
)

const INDEX = `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GO-ADMIN欢迎您</title>
<style>
body{
  margin:0; 
  padding:0; 
  overflow-y:hidden
}
</style>
<script src="https://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript"> 
window.onerror=function(){return true;} 
$(function(){ 
  headerH = 0;  
  var h=$(window).height();
  $("#iframe").height((h-headerH)+"px"); 
});
</script>
</head>
<body>
<iframe id="iframe" frameborder="0" src="https://www.go-admin.pro" style="width:100%;"></iframe>
</body>
</html>
`

func GoAdmin(c *gin.Context) {
	c.Header("Content-Type", "text/html; charset=utf-8")
	c.String(200, INDEX)
}


================================================
FILE: app/admin/apis/sys_api.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"

	"go-admin/app/admin/models"
	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
	"go-admin/common/actions"
)

type SysApi struct {
	api.Api
}

// GetPage 获取接口管理列表
// @Summary 获取接口管理列表
// @Description 获取接口管理列表
// @Tags 接口管理
// @Param name query string false "名称"
// @Param title query string false "标题"
// @Param path query string false "地址"
// @Param action query string false "类型"
// @Param pageSize query int false "页条数"
// @Param pageIndex query int false "页码"
// @Success 200 {object} response.Response{data=response.Page{list=[]models.SysApi}} "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-api [get]
// @Security Bearer
func (e SysApi) GetPage(c *gin.Context) {
	s := service.SysApi{}
	req := dto.SysApiGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	//数据权限检查
	p := actions.GetPermissionFromContext(c)
	list := make([]models.SysApi, 0)
	var count int64
	err = s.GetPage(&req, p, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get 获取接口管理
// @Summary 获取接口管理
// @Description 获取接口管理
// @Tags 接口管理
// @Param id path string false "id"
// @Success 200 {object} response.Response{data=models.SysApi} "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-api/{id} [get]
// @Security Bearer
func (e SysApi) Get(c *gin.Context) {
	req := dto.SysApiGetReq{}
	s := service.SysApi{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	p := actions.GetPermissionFromContext(c)
	var object models.SysApi
	err = s.Get(&req, p, &object).Error
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

// Update 修改接口管理
// @Summary 修改接口管理
// @Description 修改接口管理
// @Tags 接口管理
// @Accept application/json
// @Product application/json
// @Param data body dto.SysApiUpdateReq true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
// @Router /api/v1/sys-api/{id} [put]
// @Security Bearer
func (e SysApi) Update(c *gin.Context) {
	req := dto.SysApiUpdateReq{}
	s := service.SysApi{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	p := actions.GetPermissionFromContext(c)
	err = s.Update(&req, p)
	if err != nil {
		e.Error(500, err, "更新失败")
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// DeleteSysApi 删除接口管理
// @Summary 删除接口管理
// @Description 删除接口管理
// @Tags 接口管理
// @Param data body dto.SysApiDeleteReq true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}"
// @Router /api/v1/sys-api [delete]
// @Security Bearer
func (e SysApi) DeleteSysApi(c *gin.Context) {
	req := dto.SysApiDeleteReq{}
	s := service.SysApi{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		return
	}
	p := actions.GetPermissionFromContext(c)
	err = s.Remove(&req, p)
	if err != nil {
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(req.GetId(), "删除成功")
}

================================================
FILE: app/admin/apis/sys_config.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"

	"go-admin/app/admin/models"
	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysConfig struct {
	api.Api
}

// GetPage 获取配置管理列表
// @Summary 获取配置管理列表
// @Description 获取配置管理列表
// @Tags 配置管理
// @Param configName query string false "名称"
// @Param configKey query string false "key"
// @Param configType query string false "类型"
// @Param isFrontend query int false "是否前端"
// @Param pageSize query int false "页条数"
// @Param pageIndex query int false "页码"
// @Success 200 {object} response.Response{data=response.Page{list=[]models.SysApi}} "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-config [get]
// @Security Bearer
func (e SysConfig) GetPage(c *gin.Context) {
	s := service.SysConfig{}
	req := dto.SysConfigGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		return
	}

	list := make([]models.SysConfig, 0)
	var count int64
	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get 获取配置管理
// @Summary 获取配置管理
// @Description 获取配置管理
// @Tags 配置管理
// @Param id path string false "id"
// @Success 200 {object} response.Response{data=models.SysConfig} "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-config/{id} [get]
// @Security Bearer
func (e SysConfig) Get(c *gin.Context) {
	req := dto.SysConfigGetReq{}
	s := service.SysConfig{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysConfig

	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}

	e.OK(object, "查询成功")
}

// Insert 创建配置管理
// @Summary 创建配置管理
// @Description 创建配置管理
// @Tags 配置管理
// @Accept application/json
// @Product application/json
// @Param data body dto.SysConfigControl true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "创建成功"}"
// @Router /api/v1/sys-config [post]
// @Security Bearer
func (e SysConfig) Insert(c *gin.Context) {
	s := service.SysConfig{}
	req := dto.SysConfigControl{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetCreateBy(user.GetUserId(c))

	err = s.Insert(&req)
	if err != nil {
		e.Error(500, err, "创建失败")
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update 修改配置管理
// @Summary 修改配置管理
// @Description 修改配置管理
// @Tags 配置管理
// @Accept application/json
// @Product application/json
// @Param data body dto.SysConfigControl true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
// @Router /api/v1/sys-config/{id} [put]
// @Security Bearer
func (e SysConfig) Update(c *gin.Context) {
	s := service.SysConfig{}
	req := dto.SysConfigControl{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Update(&req)
	if err != nil {
		e.Error(500, err, "更新失败")
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete 删除配置管理
// @Summary 删除配置管理
// @Description 删除配置管理
// @Tags 配置管理
// @Param ids body []int false "ids"
// @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}"
// @Router /api/v1/sys-config [delete]
// @Security Bearer
func (e SysConfig) Delete(c *gin.Context) {
	s := service.SysConfig{}
	req := dto.SysConfigDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))

	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(req.GetId(), "删除成功")
}

// Get2SysApp 获取系统配置信息
// @Summary 获取系统前台配置信息,主要注意这里不在验证权限
// @Description 获取系统配置信息,主要注意这里不在验证权限
// @Tags 配置管理
// @Success 200 {object} response.Response{data=map[string]string} "{"code": 200, "data": [...]}"
// @Router /api/v1/app-config [get]
func (e SysConfig) Get2SysApp(c *gin.Context) {
	req := dto.SysConfigGetToSysAppReq{}
	s := service.SysConfig{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		return
	}
	// 控制只读前台的数据
	req.IsFrontend = "1"
	list := make([]models.SysConfig, 0)
	err = s.GetWithKeyList(&req, &list)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	mp := make(map[string]string)
	for i := 0; i < len(list); i++ {
		key := list[i].ConfigKey
		if key != "" {
			mp[key] = list[i].ConfigValue
		}
	}
	e.OK(mp, "查询成功")
}

// Get2Set 获取配置
// @Summary 获取配置
// @Description 界面操作设置配置值的获取
// @Tags 配置管理
// @Accept application/json
// @Product application/json
// @Success 200 {object} response.Response{data=map[string]interface{}}	"{"code": 200, "message": "修改成功"}"
// @Router /api/v1/set-config [get]
// @Security Bearer
func (e SysConfig) Get2Set(c *gin.Context) {
	s := service.SysConfig{}
	req := make([]dto.GetSetSysConfigReq, 0)
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	err = s.GetForSet(&req)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	m := make(map[string]interface{}, 0)
	for _, v := range req {
		m[v.ConfigKey] = v.ConfigValue
	}
	e.OK(m, "查询成功")
}

// Update2Set 设置配置
// @Summary 设置配置
// @Description 界面操作设置配置值
// @Tags 配置管理
// @Accept application/json
// @Product application/json
// @Param data body []dto.GetSetSysConfigReq true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
// @Router /api/v1/set-config [put]
// @Security Bearer
func (e SysConfig) Update2Set(c *gin.Context) {
	s := service.SysConfig{}
	req := make([]dto.GetSetSysConfigReq, 0)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	err = s.UpdateForSet(&req)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}

	e.OK("", "更新成功")
}

// GetSysConfigByKEYForService 根据Key获取SysConfig的Service
// @Summary 根据Key获取SysConfig的Service
// @Description 根据Key获取SysConfig的Service
// @Tags 配置管理
// @Param configKey path string false "configKey"
// @Success 200 {object} response.Response{data=dto.SysConfigByKeyReq} "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-config/{id} [get]
// @Security Bearer
func (e SysConfig) GetSysConfigByKEYForService(c *gin.Context) {
	var s = new(service.SysConfig)
	var req = new(dto.SysConfigByKeyReq)
	var resp = new(dto.GetSysConfigByKEYForServiceResp)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	err = s.GetWithKey(req, resp)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}
	e.OK(resp, s.Msg)
}


================================================
FILE: app/admin/apis/sys_dept.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
	"go-admin/app/admin/models"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysDept struct {
	api.Api
}

// GetPage
// @Summary 分页部门列表数据
// @Description 分页列表
// @Tags 部门
// @Param deptName query string false "deptName"
// @Param deptId query string false "deptId"
// @Param position query string false "position"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dept [get]
// @Security Bearer
func (e SysDept) GetPage(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]models.SysDept, 0)
	list, err = s.SetDeptPage(&req)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(list, "查询成功")
}

// Get
// @Summary 获取部门数据
// @Description 获取JSON
// @Tags 部门
// @Param deptId path string false "deptId"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dept/{deptId} [get]
// @Security Bearer
func (e SysDept) Get(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysDept

	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.OK(object, "查询成功")
}

// Insert 添加部门
// @Summary 添加部门
// @Description 获取JSON
// @Tags 部门
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysDeptInsertReq true "data"
// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
// @Router /api/v1/dept [post]
// @Security Bearer
func (e SysDept) Insert(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	// 设置创建人
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req)
	if err != nil {
		e.Error(500, err, "创建失败")
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update
// @Summary 修改部门
// @Description 获取JSON
// @Tags 部门
// @Accept  application/json
// @Product application/json
// @Param id path int true "id"
// @Param data body dto.SysDeptUpdateReq true "body"
// @Success 200 {string} string	"{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string	"{"code": -1, "message": "添加失败"}"
// @Router /api/v1/dept/{deptId} [put]
// @Security Bearer
func (e SysDept) Update(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Update(&req)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除部门
// @Description 删除数据
// @Tags 部门
// @Param data body dto.SysDeptDeleteReq true "body"
// @Success 200 {string} string	"{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string	"{"code": -1, "message": "删除失败"}"
// @Router /api/v1/dept [delete]
// @Security Bearer
func (e SysDept) Delete(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(req.GetId(), "删除成功")
}

// Get2Tree 用户管理 左侧部门树
func (e SysDept) Get2Tree(c *gin.Context) {
	s := service.SysDept{}
	req := dto.SysDeptGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]dto.DeptLabel, 0)
	list, err = s.SetDeptTree(&req)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(list, "")
}

// GetDeptTreeRoleSelect TODO: 此接口需要调整不应该将list和选中放在一起
func (e SysDept) GetDeptTreeRoleSelect(c *gin.Context) {
	s := service.SysDept{}
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	id, err := pkg.StringToInt(c.Param("roleId"))
	result, err := s.SetDeptLabel()
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}
	menuIds := make([]int, 0)
	if id != 0 {
		menuIds, err = s.GetWithRoleId(id)
		if err != nil {
			e.Error(500, err, err.Error())
			return
		}
	}
	e.OK(gin.H{
		"depts":       result,
		"checkedKeys": menuIds,
	}, "")
}


================================================
FILE: app/admin/apis/sys_dict_data.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
	"go-admin/app/admin/models"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysDictData struct {
	api.Api
}

// GetPage
// @Summary 字典数据列表
// @Description 获取JSON
// @Tags 字典数据
// @Param status query string false "status"
// @Param dictCode query string false "dictCode"
// @Param dictType query string false "dictType"
// @Param pageSize query int false "页条数"
// @Param pageIndex query int false "页码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/data [get]
// @Security Bearer
func (e SysDictData) GetPage(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	list := make([]models.SysDictData, 0)
	var count int64
	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get
// @Summary 通过编码获取字典数据
// @Description 获取JSON
// @Tags 字典数据
// @Param dictCode path int true "字典编码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/data/{dictCode} [get]
// @Security Bearer
func (e SysDictData) Get(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	var object models.SysDictData

	err = s.Get(&req, &object)
	if err != nil {
		e.Logger.Warnf("Get error: %s", err.Error())
		e.Error(500, err, "查询失败")
		return
	}

	e.OK(object, "查询成功")
}

// Insert
// @Summary 添加字典数据
// @Description 获取JSON
// @Tags 字典数据
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysDictDataInsertReq true "data"
// @Success 200 {object} response.Response	"{"code": 200, "message": "添加成功"}"
// @Router /api/v1/dict/data [post]
// @Security Bearer
func (e SysDictData) Insert(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req)
	if err != nil {
		e.Error(500, err, "创建失败")
		return
	}

	e.OK(req.GetId(), "创建成功")
}

// Update
// @Summary 修改字典数据
// @Description 获取JSON
// @Tags 字典数据
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysDictDataUpdateReq true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}"
// @Router /api/v1/dict/data/{dictCode} [put]
// @Security Bearer
func (e SysDictData) Update(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Update(&req)
	if err != nil {
		e.Error(500, err, "更新失败")
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除字典数据
// @Description 删除数据
// @Tags 字典数据
// @Param dictCode body dto.SysDictDataDeleteReq true "body"
// @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}"
// @Router /api/v1/dict/data [delete]
// @Security Bearer
func (e SysDictData) Delete(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(req.GetId(), "删除成功")
}

// GetAll 数据字典根据key获取 业务页面使用
// @Summary 数据字典根据key获取
// @Description 数据字典根据key获取
// @Tags 字典数据
// @Param dictType query int true "dictType"
// @Success 200 {object} response.Response{data=[]dto.SysDictDataGetAllResp}  "{"code": 200, "data": [...]}"
// @Router /api/v1/dict-data/option-select [get]
// @Security Bearer
func (e SysDictData) GetAll(c *gin.Context) {
	s := service.SysDictData{}
	req := dto.SysDictDataGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]models.SysDictData, 0)
	err = s.GetAll(&req, &list)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	l := make([]dto.SysDictDataGetAllResp, 0)
	for _, i := range list {
		d := dto.SysDictDataGetAllResp{}
		e.Translate(i, &d)
		l = append(l, d)
	}

	e.OK(l,"查询成功")
}


================================================
FILE: app/admin/apis/sys_dict_type.go
================================================
package apis

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
	"go-admin/app/admin/models"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysDictType struct {
	api.Api
}

// GetPage 字典类型列表数据
// @Summary 字典类型列表数据
// @Description 获取JSON
// @Tags 字典类型
// @Param dictName query string false "dictName"
// @Param dictId query string false "dictId"
// @Param dictType query string false "dictType"
// @Param pageSize query int false "页条数"
// @Param pageIndex query int false "页码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type [get]
// @Security Bearer
func (e SysDictType) GetPage(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]models.SysDictType, 0)
	var count int64
	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get 字典类型通过字典id获取
// @Summary 字典类型通过字典id获取
// @Description 获取JSON
// @Tags 字典类型
// @Param dictId path int true "字典类型编码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type/{dictId} [get]
// @Security Bearer
func (e SysDictType) Get(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysDictType
	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

//Insert 字典类型创建
// @Summary 添加字典类型
// @Description 获取JSON
// @Tags 字典类型
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysDictTypeInsertReq true "data"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type [post]
// @Security Bearer
func (e SysDictType) Insert(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err,fmt.Sprintf(" 创建字典类型失败,详情:%s", err.Error()))
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update
// @Summary 修改字典类型
// @Description 获取JSON
// @Tags 字典类型
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysDictTypeUpdateReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type/{dictId} [put]
// @Security Bearer
func (e SysDictType) Update(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Error(500, err, err.Error())
		e.Logger.Error(err)
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Update(&req)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除字典类型
// @Description 删除数据
// @Tags 字典类型
// @Param dictCode body dto.SysDictTypeDeleteReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type [delete]
// @Security Bearer
func (e SysDictType) Delete(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}
	e.OK(req.GetId(), "删除成功")
}

// GetAll
// @Summary 字典类型全部数据 代码生成使用接口
// @Description 获取JSON
// @Tags 字典类型
// @Param dictName query string false "dictName"
// @Param dictId query string false "dictId"
// @Param dictType query string false "dictType"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/dict/type-option-select [get]
// @Security Bearer
func (e SysDictType) GetAll(c *gin.Context) {
	s := service.SysDictType{}
	req :=dto.SysDictTypeGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]models.SysDictType, 0)
	err = s.GetAll(&req, &list)
	if err != nil {
		e.Error(500, err, err.Error())
		return
	}
	e.OK(list, "查询成功")
}

================================================
FILE: app/admin/apis/sys_login_log.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"go-admin/app/admin/models"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysLoginLog struct {
	api.Api
}

// GetPage 登录日志列表
// @Summary 登录日志列表
// @Description 获取JSON
// @Tags 登录日志
// @Param username query string false "用户名"
// @Param ipaddr query string false "ip地址"
// @Param loginLocation  query string false "归属地"
// @Param status query string false "状态"
// @Param beginTime query string false "开始时间"
// @Param endTime query string false "结束时间"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-login-log [get]
// @Security Bearer
func (e SysLoginLog) GetPage(c *gin.Context) {
	s := service.SysLoginLog{}
	req :=dto.SysLoginLogGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	list := make([]models.SysLoginLog, 0)
	var count int64
	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get 登录日志通过id获取
// @Summary 登录日志通过id获取
// @Description 获取JSON
// @Tags 登录日志
// @Param id path string false "id"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-login-log/{id} [get]
// @Security Bearer
func (e SysLoginLog) Get(c *gin.Context) {
	s := service.SysLoginLog{}
	req :=dto.SysLoginLogGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysLoginLog
	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

// Delete 登录日志删除
// @Summary 登录日志删除
// @Description 登录日志删除
// @Tags 登录日志
// @Param data body dto.SysLoginLogDeleteReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-login-log [delete]
// @Security Bearer
func (e SysLoginLog) Delete(c *gin.Context) {
	s := service.SysLoginLog{}
	req :=dto.SysLoginLogDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(req.GetId(), "删除成功")
}

================================================
FILE: app/admin/apis/sys_menu.go
================================================
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	"go-admin/app/admin/models"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysMenu struct {
	api.Api
}

// GetPage Menu列表数据
// @Summary Menu列表数据
// @Description 获取JSON
// @Tags 菜单
// @Param menuName query string false "menuName"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menu [get]
// @Security Bearer
func (e SysMenu) GetPage(c *gin.Context) {
	s := service.SysMenu{}
	req := dto.SysMenuGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var list = make([]models.SysMenu, 0)
	err = s.GetPage(&req, &list).Error
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(list, "查询成功")
}

// Get 获取菜单详情
// @Summary Menu详情数据
// @Description 获取JSON
// @Tags 菜单
// @Param id path string false "id"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menu/{id} [get]
// @Security Bearer
func (e SysMenu) Get(c *gin.Context) {
	req := dto.SysMenuGetReq{}
	s := new(service.SysMenu)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object = models.SysMenu{}

	err = s.Get(&req, &object).Error
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

// Insert 创建菜单
// @Summary 创建菜单
// @Description 获取JSON
// @Tags 菜单
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysMenuInsertReq true "data"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menu [post]
// @Security Bearer
func (e SysMenu) Insert(c *gin.Context) {
	req := dto.SysMenuInsertReq{}
	s := new(service.SysMenu)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	// 设置创建人
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req).Error
	if err != nil {
		e.Error(500, err, "创建失败")
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update 修改菜单
// @Summary 修改菜单
// @Description 获取JSON
// @Tags 菜单
// @Accept  application/json
// @Product application/json
// @Param id path int true "id"
// @Param data body dto.SysMenuUpdateReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menu/{id} [put]
// @Security Bearer
func (e SysMenu) Update(c *gin.Context) {
	req := dto.SysMenuUpdateReq{}
	s := new(service.SysMenu)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.SetUpdateBy(user.GetUserId(c))
	err = s.Update(&req).Error
	if err != nil {
		e.Error(500, err, "更新失败")
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete 删除菜单
// @Summary 删除菜单
// @Description 删除数据
// @Tags 菜单
// @Param data body dto.SysMenuDeleteReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menu [delete]
// @Security Bearer
func (e SysMenu) Delete(c *gin.Context) {
	control := new(dto.SysMenuDeleteReq)
	s := new(service.SysMenu)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(control, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	err = s.Remove(control).Error
	if err != nil {
		e.Logger.Errorf("RemoveSysMenu error, %s", err)
		e.Error(500, err, "删除失败")
		return
	}
	e.OK(control.GetId(), "删除成功")
}

// GetMenuRole 根据登录角色名称获取菜单列表数据(左菜单使用)
// @Summary 根据登录角色名称获取菜单列表数据(左菜单使用)
// @Description 获取JSON
// @Tags 菜单
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menurole [get]
// @Security Bearer
func (e SysMenu) GetMenuRole(c *gin.Context) {
	s := new(service.SysMenu)
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	result, err := s.SetMenuRole(user.GetRoleName(c))

	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.OK(result, "")
}

// GetMenuTreeSelect 根据角色ID查询菜单下拉树结构
// @Summary 角色修改使用的菜单列表
// @Description 获取JSON
// @Tags 菜单
// @Accept  application/json
// @Product application/json
// @Param roleId path int true "roleId"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/menuTreeselect/{roleId} [get]
// @Security Bearer
func (e SysMenu) GetMenuTreeSelect(c *gin.Context) {
	m := service.SysMenu{}
	r := service.SysRole{}
	req := dto.SelectRole{}
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&m.Service).
		MakeService(&r.Service).
		Bind(&req, nil).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	result, err := m.SetLabel()
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	menuIds := make([]int, 0)
	if req.RoleId != 0 {
		menuIds, err = r.GetRoleMenuId(req.RoleId)
		if err != nil {
			e.Error(500, err, "")
			return
		}
	}
	e.OK(gin.H{
		"menus":       result,
		"checkedKeys": menuIds,
	}, "获取成功")
}


================================================
FILE: app/admin/apis/sys_opera_log.go
================================================
package apis

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"go-admin/app/admin/models"
	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysOperaLog struct {
	api.Api
}

// GetPage 操作日志列表
// @Summary 操作日志列表
// @Description 获取JSON
// @Tags 操作日志
// @Param title query string false "title"
// @Param method query string false "method"
// @Param requestMethod  query string false "requestMethod"
// @Param operUrl query string false "operUrl"
// @Param operIp query string false "operIp"
// @Param status query string false "status"
// @Param beginTime query string false "beginTime"
// @Param endTime query string false "endTime"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-opera-log [get]
// @Security Bearer
func (e SysOperaLog) GetPage(c *gin.Context) {
	s := service.SysOperaLog{}
	req := new(dto.SysOperaLogGetPageReq)
	err := e.MakeContext(c).
		MakeOrm().
		Bind(req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	list := make([]models.SysOperaLog, 0)
	var count int64

	err = s.GetPage(req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get 操作日志通过id获取
// @Summary 操作日志通过id获取
// @Description 获取JSON
// @Tags 操作日志
// @Param id path string false "id"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-opera-log/{id} [get]
// @Security Bearer
func (e SysOperaLog) Get(c *gin.Context) {
	s := new(service.SysOperaLog)
	req :=dto.SysOperaLogGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysOperaLog
	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

// Delete 操作日志删除
// DeleteSysMenu 操作日志删除
// @Summary 删除操作日志
// @Description 删除数据
// @Tags 操作日志
// @Param data body dto.SysOperaLogDeleteReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-opera-log [delete]
// @Security Bearer
func (e SysOperaLog) Delete(c *gin.Context) {
	s := new(service.SysOperaLog)
	req :=dto.SysOperaLogDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	err = s.Remove(&req)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500,err, fmt.Sprintf("删除失败!错误详情:%s", err.Error()))
		return
	}
	e.OK(req.GetId(), "删除成功")
}


================================================
FILE: app/admin/apis/sys_post.go
================================================
package apis

import (
	"fmt"
	
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"

	"go-admin/app/admin/models"
	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysPost struct {
	api.Api
}

// GetPage
// @Summary 岗位列表数据
// @Description 获取JSON
// @Tags 岗位
// @Param postName query string false "postName"
// @Param postCode query string false "postCode"
// @Param postId query string false "postId"
// @Param status query string false "status"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/post [get]
// @Security Bearer
func (e SysPost) GetPage(c *gin.Context) {
	s := service.SysPost{}
	req :=dto.SysPostPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	list := make([]models.SysPost, 0)
	var count int64

	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get
// @Summary 获取岗位信息
// @Description 获取JSON
// @Tags 岗位
// @Param id path int true "编码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/post/{postId} [get]
// @Security Bearer
func (e SysPost) Get(c *gin.Context) {
	s := service.SysPost{}
	req :=dto.SysPostGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysPost

	err = s.Get(&req, &object)
	if err != nil {
		e.Error(500, err, fmt.Sprintf("岗位信息获取失败!错误详情:%s", err.Error()))
		return
	}

	e.OK(object, "查询成功")
}

// Insert
// @Summary 添加岗位
// @Description 获取JSON
// @Tags 岗位
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysPostInsertReq true "data"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/post [post]
// @Security Bearer
func (e SysPost) Insert(c *gin.Context) {
	s := service.SysPost{}
	req :=dto.SysPostInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req)
	if err != nil {
		e.Error(500, err, fmt.Sprintf("新建岗位失败!错误详情:%s", err.Error()))
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update
// @Summary 修改岗位
// @Description 获取JSON
// @Tags 岗位
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysPostUpdateReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/post/{id} [put]
// @Security Bearer
func (e SysPost) Update(c *gin.Context) {
	s := service.SysPost{}
	req :=dto.SysPostUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.SetUpdateBy(user.GetUserId(c))

	err = s.Update(&req)
	if err != nil {
		e.Error(500, err, fmt.Sprintf("岗位更新失败!错误详情:%s", err.Error()))
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除岗位
// @Description 删除数据
// @Tags 岗位
// @Param id body dto.SysPostDeleteReq true "请求参数"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/post [delete]
// @Security Bearer
func (e SysPost) Delete(c *gin.Context) {
	s := service.SysPost{}
	req :=dto.SysPostDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.Remove(&req)
	if err != nil {
		e.Error(500, err, fmt.Sprintf("岗位删除失败!错误详情:%s", err.Error()))
		return
	}
	e.OK(req.GetId(), "删除成功")
}

================================================
FILE: app/admin/apis/sys_role.go
================================================
package apis

import (
	"fmt"
	"go-admin/common/global"
	"net/http"

	"github.com/gin-gonic/gin/binding"
	"github.com/go-admin-team/go-admin-core/sdk"
	"go-admin/app/admin/models"

	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
)

type SysRole struct {
	api.Api
}

// GetPage
// @Summary 角色列表数据
// @Description Get JSON
// @Tags 角色/Role
// @Param roleName query string false "roleName"
// @Param status query string false "status"
// @Param roleKey query string false "roleKey"
// @Param pageSize query int false "页条数"
// @Param pageIndex query int false "页码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role [get]
// @Security Bearer
func (e SysRole) GetPage(c *gin.Context) {
	s := service.SysRole{}
	req := dto.SysRoleGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.Form).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	list := make([]models.SysRole, 0)
	var count int64

	err = s.GetPage(&req, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get
// @Summary 获取Role数据
// @Description 获取JSON
// @Tags 角色/Role
// @Param roleId path string false "roleId"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role/{id} [get]
// @Security Bearer
func (e SysRole) Get(c *gin.Context) {
	s := service.SysRole{}
	req := dto.SysRoleGetReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, fmt.Sprintf(" %s ", err.Error()))
		return
	}

	var object models.SysRole

	err = s.Get(&req, &object)
	if err != nil {
		e.Error(http.StatusUnprocessableEntity, err, "查询失败")
		return
	}

	e.OK(object, "查询成功")
}

// Insert
// @Summary 创建角色
// @Description 获取JSON
// @Tags 角色/Role
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysRoleInsertReq true "data"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role [post]
// @Security Bearer
func (e SysRole) Insert(c *gin.Context) {
	s := service.SysRole{}
	req := dto.SysRoleInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	// 设置创建人
	req.CreateBy = user.GetUserId(c)
	if req.Status == "" {
		req.Status = "2"
	}
	cb := sdk.Runtime.GetCasbinKey(c.Request.Host)
	err = s.Insert(&req, cb)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, "创建失败,"+err.Error())
		return
	}
	_, err = global.LoadPolicy(c)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, "创建失败,"+err.Error())
		return
	}
	e.OK(req.GetId(), "创建成功")
}

// Update 修改用户角色
// @Summary 修改用户角色
// @Description 获取JSON
// @Tags 角色/Role
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysRoleUpdateReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role/{id} [put]
// @Security Bearer
func (e SysRole) Update(c *gin.Context) {
	s := service.SysRole{}
	req := dto.SysRoleUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	cb := sdk.Runtime.GetCasbinKey(c.Request.Host)

	req.SetUpdateBy(user.GetUserId(c))

	err = s.Update(&req, cb)
	if err != nil {
		e.Logger.Error(err)
		return
	}

	_, err = global.LoadPolicy(c)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, "更新失败,"+err.Error())
		return
	}

	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除用户角色
// @Description 删除数据
// @Tags 角色/Role
// @Param data body dto.SysRoleDeleteReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role [delete]
// @Security Bearer
func (e SysRole) Delete(c *gin.Context) {
	s := new(service.SysRole)
	req := dto.SysRoleDeleteReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, fmt.Sprintf("删除角色 %v 失败,\r\n失败信息 %s", req.Ids, err.Error()))
		return
	}

	cb := sdk.Runtime.GetCasbinKey(c.Request.Host)
	err = s.Remove(&req, cb)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, "")
		return
	}

	e.OK(req.GetId(), fmt.Sprintf("删除角色角色 %v 状态成功!", req.GetId()))
}

// Update2Status 修改用户角色状态
// @Summary 修改用户角色
// @Description 获取JSON
// @Tags 角色/Role
// @Accept  application/json
// @Product application/json
// @Param data body dto.UpdateStatusReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role-status/{id} [put]
// @Security Bearer
func (e SysRole) Update2Status(c *gin.Context) {
	s := service.SysRole{}
	req := dto.UpdateStatusReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
		return
	}
	req.SetUpdateBy(user.GetUserId(c))
	err = s.UpdateStatus(&req)
	if err != nil {
		e.Error(500, err, fmt.Sprintf("更新角色状态失败,失败原因:%s ", err.Error()))
		return
	}
	e.OK(req.GetId(), fmt.Sprintf("更新角色 %v 状态成功!", req.GetId()))
}

// Update2DataScope 更新角色数据权限
// @Summary 更新角色数据权限
// @Description 获取JSON
// @Tags 角色/Role
// @Accept  application/json
// @Product application/json
// @Param data body dto.RoleDataScopeReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/role-status/{id} [put]
// @Security Bearer
func (e SysRole) Update2DataScope(c *gin.Context) {
	s := service.SysRole{}
	req := dto.RoleDataScopeReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	data := &models.SysRole{
		RoleId:    req.RoleId,
		DataScope: req.DataScope,
		DeptIds:   req.DeptIds,
	}
	data.UpdateBy = user.GetUserId(c)
	err = s.UpdateDataScope(&req).Error
	if err != nil {
		e.Error(500, err, fmt.Sprintf("更新角色数据权限失败!错误详情:%s", err.Error()))
		return
	}
	e.OK(nil, "操作成功")
}


================================================
FILE: app/admin/apis/sys_user.go
================================================
package apis

import (
	"github.com/gin-gonic/gin/binding"
	"go-admin/app/admin/models"
	"golang.org/x/crypto/bcrypt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
	_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
	"github.com/google/uuid"

	"go-admin/app/admin/service"
	"go-admin/app/admin/service/dto"
	"go-admin/common/actions"
)

type SysUser struct {
	api.Api
}

// GetPage
// @Summary 列表用户信息数据
// @Description 获取JSON
// @Tags 用户
// @Param username query string false "username"
// @Success 200 {string} {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-user [get]
// @Security Bearer
func (e SysUser) GetPage(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserGetPageReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	//数据权限检查
	p := actions.GetPermissionFromContext(c)

	list := make([]models.SysUser, 0)
	var count int64

	err = s.GetPage(&req, p, &list, &count)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}

	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
}

// Get
// @Summary 获取用户
// @Description 获取JSON
// @Tags 用户
// @Param userId path int true "用户编码"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-user/{userId} [get]
// @Security Bearer
func (e SysUser) Get(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserById{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	var object models.SysUser
	//数据权限检查
	p := actions.GetPermissionFromContext(c)
	err = s.Get(&req, p, &object)
	if err != nil {
		e.Error(http.StatusUnprocessableEntity, err, "查询失败")
		return
	}
	e.OK(object, "查询成功")
}

// Insert
// @Summary 创建用户
// @Description 获取JSON
// @Tags 用户
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysUserInsertReq true "用户数据"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-user [post]
// @Security Bearer
func (e SysUser) Insert(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserInsertReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	// 设置创建人
	req.SetCreateBy(user.GetUserId(c))
	err = s.Insert(&req)
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	e.OK(req.GetId(), "创建成功")
}

// Update
// @Summary 修改用户数据
// @Description 获取JSON
// @Tags 用户
// @Accept  application/json
// @Product application/json
// @Param data body dto.SysUserUpdateReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-user/{userId} [put]
// @Security Bearer
func (e SysUser) Update(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserUpdateReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.SetUpdateBy(user.GetUserId(c))

	//数据权限检查
	p := actions.GetPermissionFromContext(c)

	err = s.Update(&req, p)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// Delete
// @Summary 删除用户数据
// @Description 删除数据
// @Tags 用户
// @Param userId path int true "userId"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/sys-user/{userId} [delete]
// @Security Bearer
func (e SysUser) Delete(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserById{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	// 设置编辑人
	req.SetUpdateBy(user.GetUserId(c))

	// 数据权限检查
	p := actions.GetPermissionFromContext(c)

	err = s.Remove(&req, p)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(req.GetId(), "删除成功")
}

// InsetAvatar
// @Summary 修改头像
// @Description 获取JSON
// @Tags 个人中心
// @Accept multipart/form-data
// @Param file formData file true "file"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/avatar [post]
// @Security Bearer
func (e SysUser) InsetAvatar(c *gin.Context) {
	s := service.SysUser{}
	req := dto.UpdateSysUserAvatarReq{}
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	// 数据权限检查
	p := actions.GetPermissionFromContext(c)
	form, _ := c.MultipartForm()
	files := form.File["upload[]"]
	guid := uuid.New().String()
	filPath := "static/uploadfile/" + guid + ".jpg"
	for _, file := range files {
		e.Logger.Debugf("upload avatar file: %s", file.Filename)
		// 上传文件至指定目录
		err = c.SaveUploadedFile(file, filPath)
		if err != nil {
			e.Logger.Errorf("save file error, %s", err.Error())
			e.Error(500, err, "")
			return
		}
	}
	req.UserId = p.UserId
	req.Avatar = "/" + filPath

	err = s.UpdateAvatar(&req, p)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(filPath, "修改成功")
}

// UpdateStatus 修改用户状态
// @Summary 修改用户状态
// @Description 获取JSON
// @Tags 用户
// @Accept  application/json
// @Product application/json
// @Param data body dto.UpdateSysUserStatusReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/status [put]
// @Security Bearer
func (e SysUser) UpdateStatus(c *gin.Context) {
	s := service.SysUser{}
	req := dto.UpdateSysUserStatusReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON, nil).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.SetUpdateBy(user.GetUserId(c))

	//数据权限检查
	p := actions.GetPermissionFromContext(c)

	err = s.UpdateStatus(&req, p)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// ResetPwd 重置用户密码
// @Summary 重置用户密码
// @Description 获取JSON
// @Tags 用户
// @Accept  application/json
// @Product application/json
// @Param data body dto.ResetSysUserPwdReq true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/pwd/reset [put]
// @Security Bearer
func (e SysUser) ResetPwd(c *gin.Context) {
	s := service.SysUser{}
	req := dto.ResetSysUserPwdReq{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.SetUpdateBy(user.GetUserId(c))

	//数据权限检查
	p := actions.GetPermissionFromContext(c)

	err = s.ResetPwd(&req, p)
	if err != nil {
		e.Logger.Error(err)
		return
	}
	e.OK(req.GetId(), "更新成功")
}

// UpdatePwd
// @Summary 修改密码
// @Description 获取JSON
// @Tags 用户
// @Accept  application/json
// @Product application/json
// @Param data body dto.PassWord true "body"
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/pwd/set [put]
// @Security Bearer
func (e SysUser) UpdatePwd(c *gin.Context) {
	s := service.SysUser{}
	req := dto.PassWord{}
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	// 数据权限检查
	p := actions.GetPermissionFromContext(c)
	var hash []byte
	if hash, err = bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost); err != nil {
		req.NewPassword = string(hash)
	}

	err = s.UpdatePwd(user.GetUserId(c), req.OldPassword, req.NewPassword, p)
	if err != nil {
		e.Logger.Error(err)
		e.Error(http.StatusForbidden, err, "密码修改失败")
		return
	}

	e.OK(nil, "密码修改成功")
}

// GetProfile
// @Summary 获取个人中心用户
// @Description 获取JSON
// @Tags 个人中心
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/profile [get]
// @Security Bearer
func (e SysUser) GetProfile(c *gin.Context) {
	s := service.SysUser{}
	req := dto.SysUserById{}
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}

	req.Id = user.GetUserId(c)

	sysUser := models.SysUser{}
	roles := make([]models.SysRole, 0)
	posts := make([]models.SysPost, 0)
	err = s.GetProfile(&req, &sysUser, &roles, &posts)
	if err != nil {
		e.Logger.Errorf("get user profile error, %s", err.Error())
		e.Error(500, err, "获取用户信息失败")
		return
	}
	e.OK(gin.H{
		"user":  sysUser,
		"roles": roles,
		"posts": posts,
	}, "查询成功")
}

// GetInfo
// @Summary 获取个人信息
// @Description 获取JSON
// @Tags 个人中心
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/getinfo [get]
// @Security Bearer
func (e SysUser) GetInfo(c *gin.Context) {
	req := dto.SysUserById{}
	s := service.SysUser{}
	r := service.SysRole{}
	err := e.MakeContext(c).
		MakeOrm().
		MakeService(&r.Service).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	p := actions.GetPermissionFromContext(c)
	var roles = make([]string, 1)
	roles[0] = user.GetRoleName(c)
	var permissions = make([]string, 1)
	permissions[0] = "*:*:*"
	var buttons = make([]string, 1)
	buttons[0] = "*:*:*"

	var mp = make(map[string]interface{})
	mp["roles"] = roles
	if user.GetRoleName(c) == "admin" || user.GetRoleName(c) == "系统管理员" {
		mp["permissions"] = permissions
		mp["buttons"] = buttons
	} else {
		list, _ := r.GetById(user.GetRoleId(c))
		mp["permissions"] = list
		mp["buttons"] = list
	}
	sysUser := models.SysUser{}
	req.Id = user.GetUserId(c)
	err = s.Get(&req, p, &sysUser)
	if err != nil {
		e.Error(http.StatusUnauthorized, err, "登录失败")
		return
	}
	mp["introduction"] = " am a super administrator"
	mp["avatar"] = "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
	if sysUser.Avatar != "" {
		mp["avatar"] = sysUser.Avatar
	}
	mp["userName"] = sysUser.Username
	mp["userId"] = sysUser.UserId
	mp["deptId"] = sysUser.DeptId
	mp["name"] = sysUser.NickName
	mp["code"] = 200
	e.OK(mp, "")
}


================================================
FILE: app/admin/models/casbin_rule.go
================================================
package models

type CasbinRule struct {
	ID    uint   `gorm:"primaryKey;autoIncrement"`
	Ptype string `gorm:"size:512;uniqueIndex:unique_index"`
	V0    string `gorm:"size:512;uniqueIndex:unique_index"`
	V1    string `gorm:"size:512;uniqueIndex:unique_index"`
	V2    string `gorm:"size:512;uniqueIndex:unique_index"`
	V3    string `gorm:"size:512;uniqueIndex:unique_index"`
	V4    string `gorm:"size:512;uniqueIndex:unique_index"`
	V5    string `gorm:"size:512;uniqueIndex:unique_index"`
}

func (CasbinRule) TableName() string {
	return "sys_casbin_rule"
}


================================================
FILE: app/admin/models/datascope.go
================================================
package models

import (
	"errors"
	"github.com/go-admin-team/go-admin-core/sdk/pkg"
	"gorm.io/gorm"

	log "github.com/go-admin-team/go-admin-core/logger"
	"github.com/go-admin-team/go-admin-core/sdk/config"
)

type DataPermission struct {
	DataScope string
	UserId    int
	DeptId    int
	RoleId    int
}

func (e *DataPermission) GetDataScope(tableName string, db *gorm.DB) (*gorm.DB, error) {

	if !config.ApplicationConfig.EnableDP {
		usageStr := `数据权限已经为您` + pkg.Green(`关闭`) + `,如需开启请参考配置文件字段说明`
		log.Debug("%s\n", usageStr)
		return db, nil
	}
	user := new(SysUser)
	role := new(SysRole)
	err := db.Find(user, e.UserId).Error
	if err != nil {
		return nil, errors.New("获取用户数据出错 msg:" + err.Error())
	}
	err = db.Find(role, user.RoleId).Error
	if err != nil {
		return nil, errors.New("获取用户数据出错 msg:" + err.Error())
	}
	if role.DataScope == "2" {
		db = db.Where(tableName+".create_by in (select sys_user.user_id from sys_role_dept left join sys_user on sys_user.dept_id=sys_role_dept.dept_id where sys_role_dept.role_id = ?)", user.RoleId)
	}
	if role.DataScope == "3" {
		db = db.Where(tableName+".create_by in (SELECT user_id from sys_user where dept_id = ? )", user.DeptId)
	}
	if role.DataScope == "4" {
		db = db.Where(tableName+".create_by in (SELECT user_id from sys_user where sys_user.dept_id in(select dept_id from sys_dept where dept_path like ? ))", "%"+pkg.IntToString(user.DeptId)+"%")
	}
	if role.DataScope == "5" || role.DataScope == "" {
		db = db.Where(tableName+".create_by = ?", e.UserId)
	}

	return db, nil
}

//func DataScopes(tableName string, userId int) func(db *gorm.DB) *gorm.DB {
//	return func(db *gorm.DB) *gorm.DB {
//		user := new(SysUser)
//		role := new(SysRole)
//		user.UserId = userId
//		err := db.Find(user, userId).Error
//		if err != nil {
//			db.Error = errors.New("获取用户数据出错 msg:" + err.Error())
//			return db
//		}
//		err = db.Find(role, user.RoleId).Error
//		if err != nil {
//			db.Error = errors.New("获取用户数据出错 msg:" + err.Error())
//			return db
//		}
//		if role.DataScope == "2" {
//			return db.Where(tableName+".create_by in (select sys_user.user_id from sys_role_dept left join sys_user on sys_user.dept_id=sys_role_dept.dept_id where sys_role_dept.role_id = ?)", user.RoleId)
//		}
//		if role.DataScope == "3" {
//			return db.Where(tableName+".create_by in (SELECT user_id from sys_user where dept_id = ? )", user.DeptId)
//		}
//		if role.DataScope == "4" {
//			return db.Where(tableName+".create_by in (SELECT user_id from sys_user where sys_user.dept_id in(select dept_id from sys_dept where dept_path like ? ))", "%"+pkg.IntToString(user.DeptId)+"%")
//		}
//		if role.DataScope == "5" || role.DataScope == "" {
//			return db.Where(tableName+".create_by = ?", userId)
//		}
//		return db
//	}
//}


================================================
FILE: app/admin/models/initdb.go
================================================
package models

import (
	"fmt"
	"go-admin/common/global"
	"gorm.io/gorm"
	"io/ioutil"
	"log"
	"strings"
)

func InitDb(db *gorm.DB) (err error) {
	filePath := "config/db.sql"
	err = ExecSql(db, filePath)
	if global.Driver == "postgres" {
		filePath = "config/pg.sql"
		err = ExecSql(db, filePath)
	}
	return err
}

func ExecSql(db *gorm.DB, filePath string) error {
	sql, err := Ioutil(filePath)
	if err != nil {
		fmt.Println("数据库基础数据初始化脚本读取失败!原因:", err.Error())
		return err
	}
	sqlList := strings.Split(sql, ";")
	for i := 0; i < len(sqlList)-1; i++ {
		if strings.Contains(sqlList[i], "--") {
			fmt.Println(sqlList[i])
			continue
		}
		sql := strings.Replace(sqlList[i]+";", "\n", "", -1)
		sql = strings.TrimSpace(sql)
		if err = db.Exec(sql).Error; err != nil {
			log.Printf("error sql: %s", sql)
			if !strings.Contains(err.Error(), "Query was empty") {
				return err
			}
		}
	}
	return nil
}

func Ioutil(filePath string) (string, error) {
	if contents, err := ioutil.ReadFile(filePath); err == nil {
		//因为contents是[]byte类型,直接转换成string类型后会多一行空格,需要使用strings.Replace替换换行符
		result := strings.Replace(string(contents), "\n", "", 1)
		fmt.Println("Use ioutil.ReadFile to read a file:", result)
		return result, nil
	} else {
		return "", err
	}
}


================================================
FILE: app/admin/models/sys_api.go
================================================
package models

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"regexp"
	"strings"

	"github.com/bitly/go-simplejson"
	"github.com/go-admin-team/go-admin-core/sdk"
	"github.com/go-admin-team/go-admin-core/sdk/runtime"
	"github.com/go-admin-team/go-admin-core/storage"

	"go-admin/common/models"
)

type SysApi struct {
	Id     int    `json:"id" gorm:"primaryKey;autoIncrement;comment:主键编码"`
	Handle string `json:"handle" gorm:"size:128;comment:handle"`
	Title  string `json:"title" gorm:"size:128;comment:标题"`
	Path   string `json:"path" gorm:"size:128;comment:地址"`
	Action string `json:"action" gorm:"size:16;comment:请求类型"`
	Type   string `json:"type" gorm:"size:16;comment:接口类型"`
	models.ModelTime
	models.ControlBy
}

func (*SysApi) TableName() string {
	return "sys_api"
}

func (e *SysApi) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysApi) GetId() interface{} {
	return e.Id
}

func SaveSysApi(message storage.Messager) (err error) {
	var rb []byte
	rb, err = json.Marshal(message.GetValues())
	if err != nil {
		err = fmt.Errorf("json Marshal error, %v", err.Error())
		return err
	}

	var l runtime.Routers
	err = json.Unmarshal(rb, &l)
	if err != nil {
		err = fmt.Errorf("json Unmarshal error, %s", err.Error())
		return err
	}
	dbList := sdk.Runtime.GetDb()
	for _, d := range dbList {
		for _, v := range l.List {
			if v.HttpMethod != "HEAD" ||
				strings.Contains(v.RelativePath, "/swagger/") ||
				strings.Contains(v.RelativePath, "/static/") ||
				strings.Contains(v.RelativePath, "/form-generator/") ||
				strings.Contains(v.RelativePath, "/sys/tables") {

				// 根据接口方法注释里的@Summary填充接口名称,适用于代码生成器
				// 可在此处增加配置路径前缀的if判断,只对代码生成的自建应用进行定向的接口名称填充
				jsonFile, _ := ioutil.ReadFile("docs/swagger.json")
				jsonData, _ := simplejson.NewFromReader(bytes.NewReader(jsonFile))
				urlPath := v.RelativePath
				idPatten := "(.*)/:(\\w+)" // 正则替换,把:id换成{id}
				reg, _ := regexp.Compile(idPatten)
				if reg.MatchString(urlPath) {
					urlPath = reg.ReplaceAllString(v.RelativePath, "${1}/{${2}}") // 把:id换成{id}
				}
				apiTitle, _ := jsonData.Get("paths").Get(urlPath).Get(strings.ToLower(v.HttpMethod)).Get("summary").String()

				err := d.Debug().Where(SysApi{Path: v.RelativePath, Action: v.HttpMethod}).
					Attrs(SysApi{Handle: v.Handler, Title: apiTitle}).
					FirstOrCreate(&SysApi{}).
					//Update("handle", v.Handler).
					Error
				if err != nil {
					err := fmt.Errorf("Models SaveSysApi error: %s \r\n ", err.Error())
					return err
				}
			}
		}
	}
	return nil
}


================================================
FILE: app/admin/models/sys_config.go
================================================
package models

import (
	"go-admin/common/models"
)

type SysConfig struct {
	models.Model
	ConfigName  string `json:"configName" gorm:"size:128;comment:ConfigName"`   //
	ConfigKey   string `json:"configKey" gorm:"size:128;comment:ConfigKey"`     //
	ConfigValue string `json:"configValue" gorm:"size:255;comment:ConfigValue"` //
	ConfigType  string `json:"configType" gorm:"size:64;comment:ConfigType"`
	IsFrontend  string `json:"isFrontend" gorm:"size:64;comment:是否前台"` //
	Remark      string `json:"remark" gorm:"size:128;comment:Remark"`  //
	models.ControlBy
	models.ModelTime
}

func (*SysConfig) TableName() string {
	return "sys_config"
}

func (e *SysConfig) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysConfig) GetId() interface{} {
	return e.Id
}


================================================
FILE: app/admin/models/sys_dept.go
================================================
package models

import "go-admin/common/models"

type SysDept struct {
	DeptId   int    `json:"deptId" gorm:"primaryKey;autoIncrement;"` //部门编码
	ParentId int    `json:"parentId" gorm:""`                        //上级部门
	DeptPath string `json:"deptPath" gorm:"size:255;"`               //
	DeptName string `json:"deptName"  gorm:"size:128;"`              //部门名称
	Sort     int    `json:"sort" gorm:"size:4;"`                     //排序
	Leader   string `json:"leader" gorm:"size:128;"`                 //负责人
	Phone    string `json:"phone" gorm:"size:11;"`                   //手机
	Email    string `json:"email" gorm:"size:64;"`                   //邮箱
	Status   int    `json:"status" gorm:"size:4;"`                   //状态
	models.ControlBy
	models.ModelTime
	DataScope string    `json:"dataScope" gorm:"-"`
	Params    string    `json:"params" gorm:"-"`
	Children  []SysDept `json:"children" gorm:"-"`
}

func (*SysDept) TableName() string {
	return "sys_dept"
}

func (e *SysDept) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysDept) GetId() interface{} {
	return e.DeptId
}


================================================
FILE: app/admin/models/sys_dict_data.go
================================================
package models

import (
	"go-admin/common/models"
)

type SysDictData struct {
	DictCode  int    `json:"dictCode" gorm:"primaryKey;column:dict_code;autoIncrement;comment:主键编码"`
	DictSort  int    `json:"dictSort" gorm:"size:20;comment:DictSort"`
	DictLabel string `json:"dictLabel" gorm:"size:128;comment:DictLabel"`
	DictValue string `json:"dictValue" gorm:"size:255;comment:DictValue"`
	DictType  string `json:"dictType" gorm:"size:64;comment:DictType"`
	CssClass  string `json:"cssClass" gorm:"size:128;comment:CssClass"`
	ListClass string `json:"listClass" gorm:"size:128;comment:ListClass"`
	IsDefault string `json:"isDefault" gorm:"size:8;comment:IsDefault"`
	Status    int    `json:"status" gorm:"size:4;comment:Status"`
	Default   string `json:"default" gorm:"size:8;comment:Default"`
	Remark    string `json:"remark" gorm:"size:255;comment:Remark"`
	models.ControlBy
	models.ModelTime
}

func (*SysDictData) TableName() string {
	return "sys_dict_data"
}

func (e *SysDictData) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysDictData) GetId() interface{} {
	return e.DictCode
}


================================================
FILE: app/admin/models/sys_dict_type.go
================================================
package models

import (
	"go-admin/common/models"
)

type SysDictType struct {
	ID       int    `json:"id" gorm:"primaryKey;column:dict_id;autoIncrement;comment:主键编码"`
	DictName string `json:"dictName" gorm:"size:128;comment:DictName"`
	DictType string `json:"dictType" gorm:"size:128;comment:DictType"`
	Status   int    `json:"status" gorm:"size:4;comment:Status"`
	Remark   string `json:"remark" gorm:"size:255;comment:Remark"`
	models.ControlBy
	models.ModelTime
}

func (*SysDictType) TableName() string {
	return "sys_dict_type"
}

func (e *SysDictType) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysDictType) GetId() interface{} {
	return e.ID
}


================================================
FILE: app/admin/models/sys_login_log.go
================================================
package models

import (
	"encoding/json"
	"errors"
	"time"

	log "github.com/go-admin-team/go-admin-core/logger"
	"github.com/go-admin-team/go-admin-core/sdk"
	"github.com/go-admin-team/go-admin-core/storage"

	"go-admin/common/models"
)

type SysLoginLog struct {
	models.Model
	Username      string    `json:"username" gorm:"size:128;comment:用户名"`
	Status        string    `json:"status" gorm:"size:4;comment:状态"`
	Ipaddr        string    `json:"ipaddr" gorm:"size:255;comment:ip地址"`
	LoginLocation string    `json:"loginLocation" gorm:"size:255;comment:归属地"`
	Browser       string    `json:"browser" gorm:"size:255;comment:浏览器"`
	Os            string    `json:"os" gorm:"size:255;comment:系统"`
	Platform      string    `json:"platform" gorm:"size:255;comment:固件"`
	LoginTime     time.Time `json:"loginTime" gorm:"comment:登录时间"`
	Remark        string    `json:"remark" gorm:"size:255;comment:备注"`
	Msg           string    `json:"msg" gorm:"size:255;comment:信息"`
	CreatedAt     time.Time `json:"createdAt" gorm:"comment:创建时间"`
	UpdatedAt     time.Time `json:"updatedAt" gorm:"comment:最后更新时间"`
	models.ControlBy
}

func (*SysLoginLog) TableName() string {
	return "sys_login_log"
}

func (e *SysLoginLog) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysLoginLog) GetId() interface{} {
	return e.Id
}

// SaveLoginLog 从队列中获取登录日志
func SaveLoginLog(message storage.Messager) (err error) {
	//准备db
	db := sdk.Runtime.GetDbByKey(message.GetPrefix())
	if db == nil {
		err = errors.New("db not exist")
		log.Errorf("host[%s]'s %s", message.GetPrefix(), err.Error())
		return err
	}
	var rb []byte
	rb, err = json.Marshal(message.GetValues())
	if err != nil {
		log.Errorf("json Marshal error, %s", err.Error())
		return err
	}
	var l SysLoginLog
	err = json.Unmarshal(rb, &l)
	if err != nil {
		log.Errorf("json Unmarshal error, %s", err.Error())
		return err
	}
	err = db.Create(&l).Error
	if err != nil {
		log.Errorf("db create error, %s", err.Error())
		return err
	}
	return nil
}


================================================
FILE: app/admin/models/sys_menu.go
================================================
package models

import "go-admin/common/models"

type SysMenu struct {
	MenuId     int       `json:"menuId" gorm:"primaryKey;autoIncrement"`
	MenuName   string    `json:"menuName" gorm:"size:128;"`
	Title      string    `json:"title" gorm:"size:128;"`
	Icon       string    `json:"icon" gorm:"size:128;"`
	Path       string    `json:"path" gorm:"size:128;"`
	Paths      string    `json:"paths" gorm:"size:128;"`
	MenuType   string    `json:"menuType" gorm:"size:1;"`
	Action     string    `json:"action" gorm:"size:16;"`
	Permission string    `json:"permission" gorm:"size:255;"`
	ParentId   int       `json:"parentId" gorm:"size:11;"`
	NoCache    bool      `json:"noCache" gorm:"size:8;"`
	Breadcrumb string    `json:"breadcrumb" gorm:"size:255;"`
	Component  string    `json:"component" gorm:"size:255;"`
	Sort       int       `json:"sort" gorm:"size:4;"`
	Visible    string    `json:"visible" gorm:"size:1;"`
	IsFrame    string    `json:"isFrame" gorm:"size:1;DEFAULT:0;"`
	SysApi     []SysApi  `json:"sysApi" gorm:"many2many:sys_menu_api_rule"`
	Apis       []int     `json:"apis" gorm:"-"`
	DataScope  string    `json:"dataScope" gorm:"-"`
	Params     string    `json:"params" gorm:"-"`
	RoleId     int       `gorm:"-"`
	Children   []SysMenu `json:"children,omitempty" gorm:"-"`
	IsSelect   bool      `json:"is_select" gorm:"-"`
	models.ControlBy
	models.ModelTime
}

type SysMenuSlice []SysMenu

func (x SysMenuSlice) Len() int           { return len(x) }
func (x SysMenuSlice) Less(i, j int) bool { return x[i].Sort < x[j].Sort }
func (x SysMenuSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }

func (*SysMenu) TableName() string {
	return "sys_menu"
}

func (e *SysMenu) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysMenu) GetId() interface{} {
	return e.MenuId
}


================================================
FILE: app/admin/models/sys_opera_log.go
================================================
package models

import (
	"encoding/json"
	"errors"
	"time"

	log "github.com/go-admin-team/go-admin-core/logger"
	"github.com/go-admin-team/go-admin-core/sdk"
	"github.com/go-admin-team/go-admin-core/storage"

	"go-admin/common/models"
)

type SysOperaLog struct {
	models.Model
	Title         string    `json:"title" gorm:"size:255;comment:操作模块"`
	BusinessType  string    `json:"businessType" gorm:"size:128;comment:操作类型"`
	BusinessTypes string    `json:"businessTypes" gorm:"size:128;comment:BusinessTypes"`
	Method        string    `json:"method" gorm:"size:128;comment:函数"`
	RequestMethod string    `json:"requestMethod" gorm:"size:128;comment:请求方式 GET POST PUT DELETE"`
	OperatorType  string    `json:"operatorType" gorm:"size:128;comment:操作类型"`
	OperName      string    `json:"operName" gorm:"size:128;comment:操作者"`
	DeptName      string    `json:"deptName" gorm:"size:128;comment:部门名称"`
	OperUrl       string    `json:"operUrl" gorm:"size:255;comment:访问地址"`
	OperIp        string    `json:"operIp" gorm:"size:128;comment:客户端ip"`
	OperLocation  string    `json:"operLocation" gorm:"size:128;comment:访问位置"`
	OperParam     string    `json:"operParam" gorm:"text;comment:请求参数"`
	Status        string    `json:"status" gorm:"size:4;comment:操作状态 1:正常 2:关闭"`
	OperTime      time.Time `json:"operTime" gorm:"comment:操作时间"`
	JsonResult    string    `json:"jsonResult" gorm:"size:255;comment:返回数据"`
	Remark        string    `json:"remark" gorm:"size:255;comment:备注"`
	LatencyTime   string    `json:"latencyTime" gorm:"size:128;comment:耗时"`
	UserAgent     string    `json:"userAgent" gorm:"size:255;comment:ua"`
	CreatedAt     time.Time `json:"createdAt" gorm:"comment:创建时间"`
	UpdatedAt     time.Time `json:"updatedAt" gorm:"comment:最后更新时间"`
	models.ControlBy
}

func (*SysOperaLog) TableName() string {
	return "sys_opera_log"
}

func (e *SysOperaLog) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysOperaLog) GetId() interface{} {
	return e.Id
}

// SaveOperaLog 从队列中获取操作日志
func SaveOperaLog(message storage.Messager) (err error) {
	//准备db
	db := sdk.Runtime.GetDbByKey(message.GetPrefix())
	if db == nil {
		err = errors.New("db not exist")
		log.Errorf("host[%s]'s %s", message.GetPrefix(), err.Error())
		// Log writing to the database ignores error
		return nil
	}
	var rb []byte
	rb, err = json.Marshal(message.GetValues())
	if err != nil {
		log.Errorf("json Marshal error, %s", err.Error())
		// Log writing to the database ignores error
		return nil
	}
	var l SysOperaLog
	err = json.Unmarshal(rb, &l)
	if err != nil {
		log.Errorf("json Unmarshal error, %s", err.Error())
		// Log writing to the database ignores error
		return nil
	}
	// 超出100个字符返回值截断
	if len(l.JsonResult) > 100 {
		l.JsonResult = l.JsonResult[:100]
	}
	err = db.Create(&l).Error
	if err != nil {
		log.Errorf("db create error, %s", err.Error())
		// Log writing to the database ignores error
		return nil
	}
	return nil
}


================================================
FILE: app/admin/models/sys_post.go
================================================
package models

import "go-admin/common/models"

type SysPost struct {
	PostId   int    `gorm:"primaryKey;autoIncrement" json:"postId"` //岗位编号
	PostName string `gorm:"size:128;" json:"postName"`              //岗位名称
	PostCode string `gorm:"size:128;" json:"postCode"`              //岗位代码
	Sort     int    `gorm:"size:4;" json:"sort"`                    //岗位排序
	Status   int    `gorm:"size:4;" json:"status"`                  //状态
	Remark   string `gorm:"size:255;" json:"remark"`                //描述
	models.ControlBy
	models.ModelTime

	DataScope string `gorm:"-" json:"dataScope"`
	Params    string `gorm:"-" json:"params"`
}

func (*SysPost) TableName() string {
	return "sys_post"
}

func (e *SysPost) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysPost) GetId() interface{} {
	return e.PostId
}


================================================
FILE: app/admin/models/sys_role.go
================================================
package models

import "go-admin/common/models"

type SysRole struct {
	RoleId    int        `json:"roleId" gorm:"primaryKey;autoIncrement"` // 角色编码
	RoleName  string     `json:"roleName" gorm:"size:128;"`              // 角色名称
	Status    string     `json:"status" gorm:"size:4;"`                  // 状态 1禁用 2正常
	RoleKey   string     `json:"roleKey" gorm:"size:128;"`               //角色代码
	RoleSort  int        `json:"roleSort" gorm:""`                       //角色排序
	Flag      string     `json:"flag" gorm:"size:128;"`                  //
	Remark    string     `json:"remark" gorm:"size:255;"`                //备注
	Admin     bool       `json:"admin" gorm:"size:4;"`
	DataScope string     `json:"dataScope" gorm:"size:128;"`
	Params    string     `json:"params" gorm:"-"`
	MenuIds   []int      `json:"menuIds" gorm:"-"`
	DeptIds   []int      `json:"deptIds" gorm:"-"`
	SysDept   []SysDept  `json:"sysDept" gorm:"many2many:sys_role_dept;foreignKey:RoleId;joinForeignKey:role_id;references:DeptId;joinReferences:dept_id;"`
	SysMenu   *[]SysMenu `json:"sysMenu" gorm:"many2many:sys_role_menu;foreignKey:RoleId;joinForeignKey:role_id;references:MenuId;joinReferences:menu_id;"`
	models.ControlBy
	models.ModelTime
}

func (*SysRole) TableName() string {
	return "sys_role"
}

func (e *SysRole) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysRole) GetId() interface{} {
	return e.RoleId
}


================================================
FILE: app/admin/models/sys_user.go
================================================
package models

import (
	"go-admin/common/models"
	"golang.org/x/crypto/bcrypt"
	"gorm.io/gorm"
)

type SysUser struct {
	UserId   int      `gorm:"primaryKey;autoIncrement;comment:编码"  json:"userId"`
	Username string   `json:"username" gorm:"size:64;comment:用户名"`
	Password string   `json:"-" gorm:"size:128;comment:密码"`
	NickName string   `json:"nickName" gorm:"size:128;comment:昵称"`
	Phone    string   `json:"phone" gorm:"size:11;comment:手机号"`
	RoleId   int      `json:"roleId" gorm:"size:20;comment:角色ID"`
	Salt     string   `json:"-" gorm:"size:255;comment:加盐"`
	Avatar   string   `json:"avatar" gorm:"size:255;comment:头像"`
	Sex      string   `json:"sex" gorm:"size:255;comment:性别"`
	Email    string   `json:"email" gorm:"size:128;comment:邮箱"`
	DeptId   int      `json:"deptId" gorm:"size:20;comment:部门"`
	PostId   int      `json:"postId" gorm:"size:20;comment:岗位"`
	Remark   string   `json:"remark" gorm:"size:255;comment:备注"`
	Status   string   `json:"status" gorm:"size:4;comment:状态"`
	DeptIds  []int    `json:"deptIds" gorm:"-"`
	PostIds  []int    `json:"postIds" gorm:"-"`
	RoleIds  []int    `json:"roleIds" gorm:"-"`
	Dept     *SysDept `json:"dept"`
	models.ControlBy
	models.ModelTime
}

func (*SysUser) TableName() string {
	return "sys_user"
}

func (e *SysUser) Generate() models.ActiveRecord {
	o := *e
	return &o
}

func (e *SysUser) GetId() interface{} {
	return e.UserId
}

// Encrypt 加密
func (e *SysUser) Encrypt() (err error) {
	if e.Password == "" {
		return
	}

	var hash []byte
	if hash, err = bcrypt.GenerateFromPassword([]byte(e.Password), bcrypt.DefaultCost); err != nil {
		return
	} else {
		e.Password = string(hash)
		return
	}
}

func (e *SysUser) BeforeCreate(_ *gorm.DB) error {
	return e.Encrypt()
}

func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
	var err error
	if e.Password != "" {
		err = e.Encrypt()
	}
	return err
}

func (e *SysUser) AfterFind(_ *gorm.DB) error {
	e.DeptIds = []int{e.DeptId}
	e.PostIds = []int{e.PostId}
	e.RoleIds = []int{e.RoleId}
	return nil
}


================================================
FILE: app/admin/router/init_router.go
================================================
package router

import (
	"os"

	"github.com/gin-gonic/gin"
	log "github.com/go-admin-team/go-admin-core/logger"
	"github.com/go-admin-team/go-admin-core/sdk"
	common "go-admin/common/middleware"
)

// InitRouter 路由初始化,不要怀疑,这里用到了
func InitRouter() {
	var r *gin.Engine
	h := sdk.Runtime.GetEngine()
	if h == nil {
		log.Fatal("not found engine...")
		os.Exit(-1)
	}
	switch h.(type) {
	case *gin.Engine:
		r = h.(*gin.Engine)
	default:
		log.Fatal("not support other engine")
		os.Exit(-1)
	}

	// the jwt middleware
	authMiddleware, err := common.AuthInit()
	if err != nil {
		log.Fatalf("JWT Init Error, %s", err.Error())
	}

	// 注册系统路由
	InitSysRouter(r, authMiddleware)

	// 注册业务路由
	// TODO: 这里可存放业务路由,里边并无实际路由只有演示代码
	InitExamplesRouter(r, authMiddleware)
}


================================================
FILE: app/admin/router/router.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	_ "github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
)

var (
	routerNoCheckRole = make([]func(*gin.RouterGroup), 0)
	routerCheckRole   = make([]func(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware), 0)
)

func InitExamplesRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.Engine {

	// 无需认证的路由
	examplesNoCheckRoleRouter(r)
	// 需要认证的路由
	examplesCheckRoleRouter(r, authMiddleware)

	return r
}

// 无需认证的路由示例
func examplesNoCheckRoleRouter(r *gin.Engine) {
	// 可根据业务需求来设置接口版本
	v1 := r.Group("/api/v1")
	for _, f := range routerNoCheckRole {
		f(v1)
	}
}

// 需要认证的路由示例
func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddleware) {
	// 可根据业务需求来设置接口版本
	v1 := r.Group("/api/v1")
	for _, f := range routerCheckRole {
		f(v1, authMiddleware)
	}
}


================================================
FILE: app/admin/router/sys_api.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"

	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysApiRouter)
}

// registerSysApiRouter
func registerSysApiRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysApi{}
	r := v1.Group("/sys-api").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.PUT("/:id", api.Update)
	}
}


================================================
FILE: app/admin/router/sys_config.go
================================================
package router

import (
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"

	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysConfigRouter)
}

// 需认证的路由代码
func registerSysConfigRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysConfig{}
	r := v1.Group("/config").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", api.Update)
		r.DELETE("", api.Delete)
	}

	r1 := v1.Group("/configKey").Use(authMiddleware.MiddlewareFunc())
	{
		r1.GET("/:configKey", api.GetSysConfigByKEYForService)
	}

	r2 := v1.Group("/app-config")
	{
		r2.GET("", api.Get2SysApp)
	}

	r3 := v1.Group("/set-config").Use(authMiddleware.MiddlewareFunc())
	{
		r3.PUT("", api.Update2Set)
		r3.GET("", api.Get2Set)
	}

}


================================================
FILE: app/admin/router/sys_dept.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysDeptRouter)
}

// 需认证的路由代码
func registerSysDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysDept{}

	r := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", api.Update)
		r.DELETE("", api.Delete)
	}

	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
	{
		r1.GET("/deptTree", api.Get2Tree)
	}

}

================================================
FILE: app/admin/router/sys_dict.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerDictRouter)
}

func registerDictRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	dictApi := apis.SysDictType{}
	dataApi := apis.SysDictData{}
	dicts := v1.Group("/dict").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{

		dicts.GET("/data", dataApi.GetPage)
		dicts.GET("/data/:dictCode", dataApi.Get)
		dicts.POST("/data", dataApi.Insert)
		dicts.PUT("/data/:dictCode", dataApi.Update)
		dicts.DELETE("/data", dataApi.Delete)

		dicts.GET("/type-option-select", dictApi.GetAll)
		dicts.GET("/type", dictApi.GetPage)
		dicts.GET("/type/:id", dictApi.Get)
		dicts.POST("/type", dictApi.Insert)
		dicts.PUT("/type/:id", dictApi.Update)
		dicts.DELETE("/type", dictApi.Delete)
	}
	opSelect := v1.Group("/dict-data").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		opSelect.GET("/option-select", dataApi.GetAll)
	}
}


================================================
FILE: app/admin/router/sys_login_log.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysLoginLogRouter)
}

// 需认证的路由代码
func registerSysLoginLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysLoginLog{}

	r := v1.Group("/sys-login-log").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.DELETE("", api.Delete)
	}
}

================================================
FILE: app/admin/router/sys_menu.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysMenuRouter)
}

// 需认证的路由代码
func registerSysMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysMenu{}

	r := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", api.Update)
		r.DELETE("", api.Delete)
	}

	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
	{
		r1.GET("/menurole", api.GetMenuRole)
		//r1.GET("/menuids", api.GetMenuIDS)
	}

}

================================================
FILE: app/admin/router/sys_opera_log.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysOperaLogRouter)
}

// 需认证的路由代码
func registerSysOperaLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysOperaLog{}
	r := v1.Group("/sys-opera-log").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.DELETE("", api.Delete)
	}
}

================================================
FILE: app/admin/router/sys_post.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSyPostRouter)
}

// 需认证的路由代码
func registerSyPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysPost{}
	r := v1.Group("/post").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", api.Update)
		r.DELETE("", api.Delete)
	}
}

================================================
FILE: app/admin/router/sys_role.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"

	"go-admin/app/admin/apis"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysRoleRouter)
}

// 需认证的路由代码
func registerSysRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysRole{}
	r := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", api.Update)
		r.DELETE("", api.Delete)
	}
	r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc())
	{
		r1.PUT("/role-status", api.Update2Status)
		r1.PUT("/roledatascope", api.Update2DataScope)
	}
}


================================================
FILE: app/admin/router/sys_router.go
================================================
package router

import (
	"go-admin/app/admin/apis"
	"mime"

	"github.com/go-admin-team/go-admin-core/sdk/config"

	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"github.com/go-admin-team/go-admin-core/sdk/pkg/ws"
	ginSwagger "github.com/swaggo/gin-swagger"

	swaggerfiles "github.com/swaggo/files"

	"go-admin/common/middleware"
	"go-admin/common/middleware/handler"
	_ "go-admin/docs/admin"
)

func InitSysRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.RouterGroup {
	g := r.Group("")
	sysBaseRouter(g)
	// 静态文件
	sysStaticFileRouter(g)
	// swagger;注意:生产环境可以注释掉
	if config.ApplicationConfig.Mode != "prod" {
		sysSwaggerRouter(g)
	}
	// 需要认证
	sysCheckRoleRouterInit(g, authMiddleware)
	return g
}

func sysBaseRouter(r *gin.RouterGroup) {

	go ws.WebsocketManager.Start()
	go ws.WebsocketManager.SendService()
	go ws.WebsocketManager.SendAllService()

	if config.ApplicationConfig.Mode != "prod" {
		r.GET("/", apis.GoAdmin)
	}
	r.GET("/info", handler.Ping)
}

func sysStaticFileRouter(r *gin.RouterGroup) {
	err := mime.AddExtensionType(".js", "application/javascript")
	if err != nil {
		return
	}
	r.Static("/static", "./static")
	if config.ApplicationConfig.Mode != "prod" {
		r.Static("/form-generator", "./static/form-generator")
	}
}

func sysSwaggerRouter(r *gin.RouterGroup) {
	r.GET("/swagger/admin/*any", ginSwagger.WrapHandler(swaggerfiles.NewHandler(), ginSwagger.InstanceName("admin")))
}

func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	wss := r.Group("").Use(authMiddleware.MiddlewareFunc())
	{
		wss.GET("/ws/:id/:channel", ws.WebsocketManager.WsClient)
		wss.GET("/wslogout/:id/:channel", ws.WebsocketManager.UnWsClient)
	}

	v1 := r.Group("/api/v1")
	{
		v1.POST("/login", authMiddleware.LoginHandler)
		// Refresh time can be longer than token timeout
		v1.GET("/refresh_token", authMiddleware.RefreshHandler)
	}
	registerBaseRouter(v1, authMiddleware)
}

func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysMenu{}
	api2 := apis.SysDept{}
	v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
	{
		v1auth.GET("/roleMenuTreeselect/:roleId", api.GetMenuTreeSelect)
		//v1.GET("/menuTreeselect", api.GetMenuTreeSelect)
		v1auth.GET("/roleDeptTreeselect/:roleId", api2.GetDeptTreeRoleSelect)
		v1auth.POST("/logout", handler.LogOut)
	}
}


================================================
FILE: app/admin/router/sys_user.go
================================================
package router

import (
	"github.com/gin-gonic/gin"
	jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
	"go-admin/app/admin/apis"
	"go-admin/common/actions"
	"go-admin/common/middleware"
)

func init() {
	routerCheckRole = append(routerCheckRole, registerSysUserRouter)
}

// 需认证的路由代码
func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	api := apis.SysUser{}
	r := v1.Group("/sys-user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
	{
		r.GET("", api.GetPage)
		r.GET("/:id", api.Get)
		r.POST("", api.Insert)
		r.PUT("", api.Update)
		r.DELETE("", api.Delete)
	}

	user := v1.Group("/user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
	{
		user.GET("/profile", api.GetProfile)
		user.POST("/avatar", api.InsetAvatar)
		user.PUT("/pwd/set", api.UpdatePwd)
		user.PUT("/pwd/reset", api.ResetPwd)
		user.PUT("/status", api.UpdateStatus)
	}
	v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc())
	{
		v1auth.GET("/getinfo", api.GetInfo)
	}
}

================================================
FILE: app/admin/service/dto/sys_api.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	"go-admin/common/dto"
	common "go-admin/common/models"
)

// SysApiGetPageReq 功能列表请求参数
type SysApiGetPageReq struct {
	dto.Pagination `search:"-"`
	Title          string `form:"title"  search:"type:contains;column:title;table:sys_api" comment:"标题"`
	Path           string `form:"path"  search:"type:contains;column:path;table:sys_api" comment:"地址"`
	Action         string `form:"action"  search:"type:exact;column:action;table:sys_api" comment:"请求方式"`
	ParentId       string `form:"parentId"  search:"type:exact;column:parent_id;table:sys_api" comment:"按钮id"`
	Type           string `form:"type" search:"-" comment:"类型"`
	SysApiOrder
}

type SysApiOrder struct {
	TitleOrder     string `search:"type:order;column:title;table:sys_api" form:"titleOrder"`
	PathOrder      string `search:"type:order;column:path;table:sys_api" form:"pathOrder"`
	CreatedAtOrder string `search:"type:order;column:created_at;table:sys_api" form:"createdAtOrder"`
}

func (m *SysApiGetPageReq) GetNeedSearch() interface{} {
	return *m
}

// SysApiInsertReq 功能创建请求参数
type SysApiInsertReq struct {
	Id     int    `json:"-" comment:"编码"` // 编码
	Handle string `json:"handle" comment:"handle"`
	Title  string `json:"title" comment:"标题"`
	Path   string `json:"path" comment:"地址"`
	Type   string `json:"type" comment:""`
	Action string `json:"action" comment:"类型"`
	common.ControlBy
}

func (s *SysApiInsertReq) Generate(model *models.SysApi) {
	model.Handle = s.Handle
	model.Title = s.Title
	model.Path = s.Path
	model.Type = s.Type
	model.Action = s.Action
}

func (s *SysApiInsertReq) GetId() interface{} {
	return s.Id
}

// SysApiUpdateReq 功能更新请求参数
type SysApiUpdateReq struct {
	Id     int    `uri:"id" comment:"编码"` // 编码
	Handle string `json:"handle" comment:"handle"`
	Title  string `json:"title" comment:"标题"`
	Path   string `json:"path" comment:"地址"`
	Type   string `json:"type" comment:""`
	Action string `json:"action" comment:"类型"`
	common.ControlBy
}

func (s *SysApiUpdateReq) Generate(model *models.SysApi) {
	if s.Id != 0 {
		model.Id = s.Id
	}
	model.Handle = s.Handle
	model.Title = s.Title
	model.Path = s.Path
	model.Type = s.Type
	model.Action = s.Action
}

func (s *SysApiUpdateReq) GetId() interface{} {
	return s.Id
}

// SysApiGetReq 功能获取请求参数
type SysApiGetReq struct {
	Id int `uri:"id"`
}

func (s *SysApiGetReq) GetId() interface{} {
	return s.Id
}

// SysApiDeleteReq 功能删除请求参数
type SysApiDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysApiDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_config.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	"go-admin/common/dto"
	common "go-admin/common/models"
)

// SysConfigGetPageReq 列表或者搜索使用结构体
type SysConfigGetPageReq struct {
	dto.Pagination `search:"-"`
	ConfigName     string `form:"configName" search:"type:contains;column:config_name;table:sys_config"`
	ConfigKey      string `form:"configKey" search:"type:contains;column:config_key;table:sys_config"`
	ConfigType     string `form:"configType" search:"type:exact;column:config_type;table:sys_config"`
	IsFrontend     string `form:"isFrontend" search:"type:exact;column:is_frontend;table:sys_config"`
	SysConfigOrder
}

type SysConfigOrder struct {
	IdOrder         string `search:"type:order;column:id;table:sys_config" form:"idOrder"`
	ConfigNameOrder string `search:"type:order;column:config_name;table:sys_config" form:"configNameOrder"`
	ConfigKeyOrder  string `search:"type:order;column:config_key;table:sys_config" form:"configKeyOrder"`
	ConfigTypeOrder string `search:"type:order;column:config_type;table:sys_config" form:"configTypeOrder"`
	CreatedAtOrder  string `search:"type:order;column:created_at;table:sys_config" form:"createdAtOrder"`
}

func (m *SysConfigGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysConfigGetToSysAppReq struct {
	IsFrontend string `form:"isFrontend" search:"type:exact;column:is_frontend;table:sys_config"`
}

func (m *SysConfigGetToSysAppReq) GetNeedSearch() interface{} {
	return *m
}

// SysConfigControl 增、改使用的结构体
type SysConfigControl struct {
	Id          int    `uri:"Id" comment:"编码"` // 编码
	ConfigName  string `json:"configName" comment:""`
	ConfigKey   string `uri:"configKey" json:"configKey" comment:""`
	ConfigValue string `json:"configValue" comment:""`
	ConfigType  string `json:"configType" comment:""`
	IsFrontend  string `json:"isFrontend"`
	Remark      string `json:"remark" comment:""`
	common.ControlBy
}

// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型
func (s *SysConfigControl) Generate(model *models.SysConfig) {
	if s.Id == 0 {
		model.Model = common.Model{Id: s.Id}
	}
	model.ConfigName = s.ConfigName
	model.ConfigKey = s.ConfigKey
	model.ConfigValue = s.ConfigValue
	model.ConfigType = s.ConfigType
	model.IsFrontend = s.IsFrontend
	model.Remark = s.Remark

}

// GetId 获取数据对应的ID
func (s *SysConfigControl) GetId() interface{} {
	return s.Id
}

// GetSetSysConfigReq 增、改使用的结构体
type GetSetSysConfigReq struct {
	ConfigKey   string `json:"configKey" comment:""`
	ConfigValue string `json:"configValue" comment:""`
}

// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型
func (s *GetSetSysConfigReq) Generate(model *models.SysConfig) {
	model.ConfigValue = s.ConfigValue
}

type UpdateSetSysConfigReq map[string]string

// SysConfigByKeyReq 根据Key获取配置
type SysConfigByKeyReq struct {
	ConfigKey string `uri:"configKey" search:"type:contains;column:config_key;table:sys_config"`
}

func (m *SysConfigByKeyReq) GetNeedSearch() interface{} {
	return *m
}

type GetSysConfigByKEYForServiceResp struct {
	ConfigKey   string `json:"configKey" comment:""`
	ConfigValue string `json:"configValue" comment:""`
}

type SysConfigGetReq struct {
	Id int `uri:"id"`
}

func (s *SysConfigGetReq) GetId() interface{} {
	return s.Id
}

type SysConfigDeleteReq struct {
	Ids []int `json:"ids"`
	common.ControlBy
}

func (s *SysConfigDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_dept.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	common "go-admin/common/models"
)

// SysDeptGetPageReq 列表或者搜索使用结构体
type SysDeptGetPageReq struct {
	DeptId         int    `form:"deptId" search:"type:exact;column:dept_id;table:sys_dept" comment:"id"`       //id
	ParentId       int    `form:"parentId" search:"type:exact;column:parent_id;table:sys_dept" comment:"上级部门"` //上级部门
	DeptPath       string `form:"deptPath" search:"type:exact;column:dept_path;table:sys_dept" comment:""`     //路径
	DeptName       string `form:"deptName" search:"type:exact;column:dept_name;table:sys_dept" comment:"部门名称"` //部门名称
	Sort           int    `form:"sort" search:"type:exact;column:sort;table:sys_dept" comment:"排序"`            //排序
	Leader         string `form:"leader" search:"type:exact;column:leader;table:sys_dept" comment:"负责人"`       //负责人
	Phone          string `form:"phone" search:"type:exact;column:phone;table:sys_dept" comment:"手机"`          //手机
	Email          string `form:"email" search:"type:exact;column:email;table:sys_dept" comment:"邮箱"`          //邮箱
	Status         string `form:"status" search:"type:exact;column:status;table:sys_dept" comment:"状态"`        //状态
}

func (m *SysDeptGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysDeptInsertReq struct {
	DeptId   int    `uri:"id" comment:"编码"`                                         // 编码
	ParentId int    `json:"parentId" comment:"上级部门" vd:"?"`                         //上级部门
	DeptPath string `json:"deptPath" comment:""`                                    //路径
	DeptName string `json:"deptName" comment:"部门名称" vd:"len($)>0"`                  //部门名称
	Sort     int    `json:"sort" comment:"排序" vd:"?"`                               //排序
	Leader   string `json:"leader" comment:"负责人" vd:"@:len($)>0; msg:'leader不能为空'"` //负责人
	Phone    string `json:"phone" comment:"手机" vd:"?"`                              //手机
	Email    string `json:"email" comment:"邮箱" vd:"?"`                              //邮箱
	Status   int    `json:"status" comment:"状态" vd:"$>0"`                           //状态
	common.ControlBy
}

func (s *SysDeptInsertReq) Generate(model *models.SysDept) {
	if s.DeptId != 0 {
		model.DeptId = s.DeptId
	}
	model.DeptName = s.DeptName
	model.ParentId = s.ParentId
	model.DeptPath = s.DeptPath
	model.Sort = s.Sort
	model.Leader = s.Leader
	model.Phone = s.Phone
	model.Email = s.Email
	model.Status = s.Status
}

// GetId 获取数据对应的ID
func (s *SysDeptInsertReq) GetId() interface{} {
	return s.DeptId
}

type SysDeptUpdateReq struct {
	DeptId   int    `uri:"id" comment:"编码"`                                         // 编码
	ParentId int    `json:"parentId" comment:"上级部门" vd:"?"`                         //上级部门
	DeptPath string `json:"deptPath" comment:""`                                    //路径
	DeptName string `json:"deptName" comment:"部门名称" vd:"len($)>0"`                  //部门名称
	Sort     int    `json:"sort" comment:"排序" vd:"?"`                               //排序
	Leader   string `json:"leader" comment:"负责人" vd:"@:len($)>0; msg:'leader不能为空'"` //负责人
	Phone    string `json:"phone" comment:"手机" vd:"?"`                              //手机
	Email    string `json:"email" comment:"邮箱" vd:"?"`                              //邮箱
	Status   int    `json:"status" comment:"状态" vd:"$>0"`                           //状态
	common.ControlBy
}

// Generate 结构体数据转化 从 SysDeptControl 至 SysDept 对应的模型
func (s *SysDeptUpdateReq) Generate(model *models.SysDept) {
	if s.DeptId != 0 {
		model.DeptId = s.DeptId
	}
	model.DeptName = s.DeptName
	model.ParentId = s.ParentId
	model.DeptPath = s.DeptPath
	model.Sort = s.Sort
	model.Leader = s.Leader
	model.Phone = s.Phone
	model.Email = s.Email
	model.Status = s.Status
}

// GetId 获取数据对应的ID
func (s *SysDeptUpdateReq) GetId() interface{} {
	return s.DeptId
}

type SysDeptGetReq struct {
	Id int `uri:"id"`
}

func (s *SysDeptGetReq) GetId() interface{} {
	return s.Id
}

type SysDeptDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysDeptDeleteReq) GetId() interface{} {
	return s.Ids
}

type DeptLabel struct {
	Id       int         `gorm:"-" json:"id"`
	Label    string      `gorm:"-" json:"label"`
	Children []DeptLabel `gorm:"-" json:"children"`
}


================================================
FILE: app/admin/service/dto/sys_dict_data.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	"go-admin/common/dto"
	common "go-admin/common/models"
)

type SysDictDataGetPageReq struct {
	dto.Pagination `search:"-"`
	Id             int    `form:"id" search:"type:exact;column:dict_code;table:sys_dict_data" comment:""`
	DictLabel      string `form:"dictLabel" search:"type:contains;column:dict_label;table:sys_dict_data" comment:""`
	DictValue      string `form:"dictValue" search:"type:contains;column:dict_value;table:sys_dict_data" comment:""`
	DictType       string `form:"dictType" search:"type:contains;column:dict_type;table:sys_dict_data" comment:""`
	Status         string `form:"status" search:"type:exact;column:status;table:sys_dict_data" comment:""`
}

func (m *SysDictDataGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysDictDataGetAllResp struct {
	DictLabel string `json:"label"`
	DictValue string `json:"value"`
}

type SysDictDataInsertReq struct {
	Id        int    `json:"-" comment:""`
	DictSort  int    `json:"dictSort" comment:""`
	DictLabel string `json:"dictLabel" comment:""`
	DictValue string `json:"dictValue" comment:""`
	DictType  string `json:"dictType" comment:""`
	CssClass  string `json:"cssClass" comment:""`
	ListClass string `json:"listClass" comment:""`
	IsDefault string `json:"isDefault" comment:""`
	Status    int    `json:"status" comment:""`
	Default   string `json:"default" comment:""`
	Remark    string `json:"remark" comment:""`
	common.ControlBy
}

func (s *SysDictDataInsertReq) Generate(model *models.SysDictData) {
	model.DictCode = s.Id
	model.DictSort = s.DictSort
	model.DictLabel = s.DictLabel
	model.DictValue = s.DictValue
	model.DictType = s.DictType
	model.CssClass = s.CssClass
	model.ListClass = s.ListClass
	model.IsDefault = s.IsDefault
	model.Status = s.Status
	model.Default = s.Default
	model.Remark = s.Remark
}

func (s *SysDictDataInsertReq) GetId() interface{} {
	return s.Id
}

type SysDictDataUpdateReq struct {
	Id        int    `uri:"dictCode" comment:""`
	DictSort  int    `json:"dictSort" comment:""`
	DictLabel string `json:"dictLabel" comment:""`
	DictValue string `json:"dictValue" comment:""`
	DictType  string `json:"dictType" comment:""`
	CssClass  string `json:"cssClass" comment:""`
	ListClass string `json:"listClass" comment:""`
	IsDefault string `json:"isDefault" comment:""`
	Status    int    `json:"status" comment:""`
	Default   string `json:"default" comment:""`
	Remark    string `json:"remark" comment:""`
	common.ControlBy
}

func (s *SysDictDataUpdateReq) Generate(model *models.SysDictData) {
	model.DictCode = s.Id
	model.DictSort = s.DictSort
	model.DictLabel = s.DictLabel
	model.DictValue = s.DictValue
	model.DictType = s.DictType
	model.CssClass = s.CssClass
	model.ListClass = s.ListClass
	model.IsDefault = s.IsDefault
	model.Status = s.Status
	model.Default = s.Default
	model.Remark = s.Remark
}

func (s *SysDictDataUpdateReq) GetId() interface{} {
	return s.Id
}

type SysDictDataGetReq struct {
	Id int `uri:"dictCode"`
}

func (s *SysDictDataGetReq) GetId() interface{} {
	return s.Id
}

type SysDictDataDeleteReq struct {
	Ids              []int `json:"ids"`
	common.ControlBy `json:"-"`
}

func (s *SysDictDataDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_dict_type.go
================================================
package dto

import (
	"go-admin/app/admin/models"

	"go-admin/common/dto"
	common "go-admin/common/models"
)

type SysDictTypeGetPageReq struct {
	dto.Pagination `search:"-"`
	DictId         []int  `form:"dictId" search:"type:in;column:dict_id;table:sys_dict_type"`
	DictName       string `form:"dictName" search:"type:icontains;column:dict_name;table:sys_dict_type"`
	DictType       string `form:"dictType" search:"type:icontains;column:dict_type;table:sys_dict_type"`
	Status         int    `form:"status" search:"type:exact;column:status;table:sys_dict_type"`
}

type SysDictTypeOrder struct {
	DictIdOrder string `search:"type:order;column:dict_id;table:sys_dict_type" form:"dictIdOrder"`
}

func (m *SysDictTypeGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysDictTypeInsertReq struct {
	Id       int    `uri:"id"`
	DictName string `json:"dictName"`
	DictType string `json:"dictType"`
	Status   int    `json:"status"`
	Remark   string `json:"remark"`
	common.ControlBy
}

func (s *SysDictTypeInsertReq) Generate(model *models.SysDictType) {
	if s.Id != 0 {
		model.ID = s.Id
	}
	model.DictName = s.DictName
	model.DictType = s.DictType
	model.Status = s.Status
	model.Remark = s.Remark

}

func (s *SysDictTypeInsertReq) GetId() interface{} {
	return s.Id
}

type SysDictTypeUpdateReq struct {
	Id       int    `uri:"id"`
	DictName string `json:"dictName"`
	DictType string `json:"dictType"`
	Status   int    `json:"status"`
	Remark   string `json:"remark"`
	common.ControlBy
}

func (s *SysDictTypeUpdateReq) Generate(model *models.SysDictType) {
	if s.Id != 0 {
		model.ID = s.Id
	}
	model.DictName = s.DictName
	model.DictType = s.DictType
	model.Status = s.Status
	model.Remark = s.Remark

}

func (s *SysDictTypeUpdateReq) GetId() interface{} {
	return s.Id
}

type SysDictTypeGetReq struct {
	Id int `uri:"id"`
}

func (s *SysDictTypeGetReq) GetId() interface{} {
	return s.Id
}

type SysDictTypeDeleteReq struct {
	Ids []int `json:"ids"`
	common.ControlBy
}

func (s *SysDictTypeDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_login_log.go
================================================
package dto

import (
	"time"

	"go-admin/common/dto"
)

type SysLoginLogGetPageReq struct {
	dto.Pagination `search:"-"`
	Username       string `form:"username" search:"type:exact;column:username;table:sys_login_log" comment:"用户名"`
	Status         string `form:"status" search:"type:exact;column:status;table:sys_login_log" comment:"状态"`
	Ipaddr         string `form:"ipaddr" search:"type:exact;column:ipaddr;table:sys_login_log" comment:"ip地址"`
	LoginLocation  string `form:"loginLocation" search:"type:exact;column:login_location;table:sys_login_log" comment:"归属地"`
	BeginTime      string `form:"beginTime" search:"type:gte;column:ctime;table:sys_login_log" comment:"创建时间"`
	EndTime        string `form:"endTime" search:"type:lte;column:ctime;table:sys_login_log" comment:"创建时间"`
	SysLoginLogOrder
}

type SysLoginLogOrder struct {
	CreatedAtOrder string `search:"type:order;column:created_at;table:sys_login_log" form:"createdAtOrder"`
}

func (m *SysLoginLogGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysLoginLogControl struct {
	ID            int       `uri:"Id" comment:"主键"` // 主键
	Username      string    `json:"username" comment:"用户名"`
	Status        string    `json:"status" comment:"状态"`
	Ipaddr        string    `json:"ipaddr" comment:"ip地址"`
	LoginLocation string    `json:"loginLocation" comment:"归属地"`
	Browser       string    `json:"browser" comment:"浏览器"`
	Os            string    `json:"os" comment:"系统"`
	Platform      string    `json:"platform" comment:"固件"`
	LoginTime     time.Time `json:"loginTime" comment:"登录时间"`
	Remark        string    `json:"remark" comment:"备注"`
	Msg           string    `json:"msg" comment:"信息"`
}

type SysLoginLogGetReq struct {
	Id int `uri:"id"`
}

func (s *SysLoginLogGetReq) GetId() interface{} {
	return s.Id
}

// SysLoginLogDeleteReq 功能删除请求参数
type SysLoginLogDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysLoginLogDeleteReq) GetId() interface{} {
	return s.Ids
}

================================================
FILE: app/admin/service/dto/sys_menu.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	common "go-admin/common/models"

	"go-admin/common/dto"
)

// SysMenuGetPageReq 列表或者搜索使用结构体
type SysMenuGetPageReq struct {
	dto.Pagination `search:"-"`
	Title          string `form:"title" search:"type:contains;column:title;table:sys_menu" comment:"菜单名称"`  // 菜单名称
	Visible        int    `form:"visible" search:"type:exact;column:visible;table:sys_menu" comment:"显示状态"` // 显示状态
}

func (m *SysMenuGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysMenuInsertReq struct {
	MenuId     int             `uri:"id" comment:"编码"`            // 编码
	MenuName   string          `form:"menuName" comment:"菜单name"` //菜单name
	Title      string          `form:"title" comment:"显示名称"`      //显示名称
	Icon       string          `form:"icon" comment:"图标"`         //图标
	Path       string          `form:"path" comment:"路径"`         //路径
	Paths      string          `form:"paths" comment:"id路径"`      //id路径
	MenuType   string          `form:"menuType" comment:"菜单类型"`   //菜单类型
	SysApi     []models.SysApi `form:"sysApi"`
	Apis       []int           `form:"apis"`
	Action     string          `form:"action" comment:"请求方式"`      //请求方式
	Permission string          `form:"permission" comment:"权限编码"`  //权限编码
	ParentId   int             `form:"parentId" comment:"上级菜单"`    //上级菜单
	NoCache    bool            `form:"noCache" comment:"是否缓存"`     //是否缓存
	Breadcrumb string          `form:"breadcrumb" comment:"是否面包屑"` //是否面包屑
	Component  string          `form:"component" comment:"组件"`     //组件
	Sort       int             `form:"sort" comment:"排序"`          //排序
	Visible    string          `form:"visible" comment:"是否显示"`     //是否显示
	IsFrame    string          `form:"isFrame" comment:"是否frame"`  //是否frame
	common.ControlBy
}

func (s *SysMenuInsertReq) Generate(model *models.SysMenu) {
	if s.MenuId != 0 {
		model.MenuId = s.MenuId
	}
	model.MenuName = s.MenuName
	model.Title = s.Title
	model.Icon = s.Icon
	model.Path = s.Path
	model.Paths = s.Paths
	model.MenuType = s.MenuType
	model.Action = s.Action
	model.SysApi = s.SysApi
	model.Permission = s.Permission
	model.ParentId = s.ParentId
	model.NoCache = s.NoCache
	model.Breadcrumb = s.Breadcrumb
	model.Component = s.Component
	model.Sort = s.Sort
	model.Visible = s.Visible
	model.IsFrame = s.IsFrame
	if s.CreateBy != 0 {
		model.CreateBy = s.CreateBy
	}
	if s.UpdateBy != 0 {
		model.UpdateBy = s.UpdateBy
	}
}

func (s *SysMenuInsertReq) GetId() interface{} {
	return s.MenuId
}

type SysMenuUpdateReq struct {
	MenuId     int             `uri:"id" comment:"编码"`            // 编码
	MenuName   string          `form:"menuName" comment:"菜单name"` //菜单name
	Title      string          `form:"title" comment:"显示名称"`      //显示名称
	Icon       string          `form:"icon" comment:"图标"`         //图标
	Path       string          `form:"path" comment:"路径"`         //路径
	Paths      string          `form:"paths" comment:"id路径"`      //id路径
	MenuType   string          `form:"menuType" comment:"菜单类型"`   //菜单类型
	SysApi     []models.SysApi `form:"sysApi"`
	Apis       []int           `form:"apis"`
	Action     string          `form:"action" comment:"请求方式"`      //请求方式
	Permission string          `form:"permission" comment:"权限编码"`  //权限编码
	ParentId   int             `form:"parentId" comment:"上级菜单"`    //上级菜单
	NoCache    bool            `form:"noCache" comment:"是否缓存"`     //是否缓存
	Breadcrumb string          `form:"breadcrumb" comment:"是否面包屑"` //是否面包屑
	Component  string          `form:"component" comment:"组件"`     //组件
	Sort       int             `form:"sort" comment:"排序"`          //排序
	Visible    string          `form:"visible" comment:"是否显示"`     //是否显示
	IsFrame    string          `form:"isFrame" comment:"是否frame"`  //是否frame
	common.ControlBy
}

func (s *SysMenuUpdateReq) Generate(model *models.SysMenu) {
	if s.MenuId != 0 {
		model.MenuId = s.MenuId
	}
	model.MenuName = s.MenuName
	model.Title = s.Title
	model.Icon = s.Icon
	model.Path = s.Path
	model.Paths = s.Paths
	model.MenuType = s.MenuType
	model.Action = s.Action
	model.SysApi = s.SysApi
	model.Permission = s.Permission
	model.ParentId = s.ParentId
	model.NoCache = s.NoCache
	model.Breadcrumb = s.Breadcrumb
	model.Component = s.Component
	model.Sort = s.Sort
	model.Visible = s.Visible
	model.IsFrame = s.IsFrame
	if s.CreateBy != 0 {
		model.CreateBy = s.CreateBy
	}
	if s.UpdateBy != 0 {
		model.UpdateBy = s.UpdateBy
	}
}

func (s *SysMenuUpdateReq) GetId() interface{} {
	return s.MenuId
}

type SysMenuGetReq struct {
	Id int `uri:"id"`
}

func (s *SysMenuGetReq) GetId() interface{} {
	return s.Id
}

type SysMenuDeleteReq struct {
	Ids []int `json:"ids"`
	common.ControlBy
}

func (s *SysMenuDeleteReq) GetId() interface{} {
	return s.Ids
}

type MenuLabel struct {
	Id       int         `json:"id,omitempty" gorm:"-"`
	Label    string      `json:"label,omitempty" gorm:"-"`
	Children []MenuLabel `json:"children,omitempty" gorm:"-"`
}

type MenuRole struct {
	models.SysMenu
	IsSelect bool `json:"is_select" gorm:"-"`
}

type SelectRole struct {
	RoleId int `uri:"roleId"`
}


================================================
FILE: app/admin/service/dto/sys_opera_log.go
================================================
package dto

import (
	"time"

	"go-admin/app/admin/models"
	"go-admin/common/dto"
	common "go-admin/common/models"
)

const (
	OperaStatusEnabel  = "1" // 状态-正常
	OperaStatusDisable = "2" // 状态-关闭
)

type SysOperaLogGetPageReq struct {
	dto.Pagination `search:"-"`
	Title          string `form:"title" search:"type:contains;column:title;table:sys_opera_log" comment:"操作模块"`
	Method         string `form:"method" search:"type:contains;column:method;table:sys_opera_log" comment:"函数"`
	RequestMethod  string `form:"requestMethod" search:"type:contains;column:request_method;table:sys_opera_log" comment:"请求方式: GET POST PUT DELETE"`
	OperUrl        string `form:"operUrl" search:"type:contains;column:oper_url;table:sys_opera_log" comment:"访问地址"`
	OperIp         string `form:"operIp" search:"type:exact;column:oper_ip;table:sys_opera_log" comment:"客户端ip"`
	Status         int    `form:"status" search:"type:exact;column:status;table:sys_opera_log" comment:"状态 1:正常 2:关闭"`
	BeginTime      string `form:"beginTime" search:"type:gte;column:created_at;table:sys_opera_log" comment:"创建时间"`
	EndTime        string `form:"endTime" search:"type:lte;column:created_at;table:sys_opera_log" comment:"更新时间"`
	SysOperaLogOrder
}

type SysOperaLogOrder struct {
	CreatedAtOrder string `search:"type:order;column:created_at;table:sys_opera_log" form:"createdAtOrder"`
}

func (m *SysOperaLogGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysOperaLogControl struct {
	ID            int       `uri:"Id" comment:"编码"` // 编码
	Title         string    `json:"title" comment:"操作模块"`
	BusinessType  string    `json:"businessType" comment:"操作类型"`
	BusinessTypes string    `json:"businessTypes" comment:""`
	Method        string    `json:"method" comment:"函数"`
	RequestMethod string    `json:"requestMethod" comment:"请求方式"`
	OperatorType  string    `json:"operatorType" comment:"操作类型"`
	OperName      string    `json:"operName" comment:"操作者"`
	DeptName      string    `json:"deptName" comment:"部门名称"`
	OperUrl       string    `json:"operUrl" comment:"访问地址"`
	OperIp        string    `json:"operIp" comment:"客户端ip"`
	OperLocation  string    `json:"operLocation" comment:"访问位置"`
	OperParam     string    `json:"operParam" comment:"请求参数"`
	Status        string    `json:"status" comment:"操作状态"`
	OperTime      time.Time `json:"operTime" comment:"操作时间"`
	JsonResult    string    `json:"jsonResult" comment:"返回数据"`
	Remark        string    `json:"remark" comment:"备注"`
	LatencyTime   string    `json:"latencyTime" comment:"耗时"`
	UserAgent     string    `json:"userAgent" comment:"ua"`
}

func (s *SysOperaLogControl) Generate() (*models.SysOperaLog, error) {
	return &models.SysOperaLog{
		Model:         common.Model{Id: s.ID},
		Title:         s.Title,
		BusinessType:  s.BusinessType,
		BusinessTypes: s.BusinessTypes,
		Method:        s.Method,
		RequestMethod: s.RequestMethod,
		OperatorType:  s.OperatorType,
		OperName:      s.OperName,
		DeptName:      s.DeptName,
		OperUrl:       s.OperUrl,
		OperIp:        s.OperIp,
		OperLocation:  s.OperLocation,
		OperParam:     s.OperParam,
		Status:        s.Status,
		OperTime:      s.OperTime,
		JsonResult:    s.JsonResult,
		Remark:        s.Remark,
		LatencyTime:   s.LatencyTime,
		UserAgent:     s.UserAgent,
	}, nil
}

func (s *SysOperaLogControl) GetId() interface{} {
	return s.ID
}

type SysOperaLogGetReq struct {
	Id int `uri:"id"`
}

func (s *SysOperaLogGetReq) GetId() interface{} {
	return s.Id
}

// SysOperaLogDeleteReq 功能删除请求参数
type SysOperaLogDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysOperaLogDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_post.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	common "go-admin/common/models"

	"go-admin/common/dto"
)

// SysPostPageReq 列表或者搜索使用结构体
type SysPostPageReq struct {
	dto.Pagination `search:"-"`
	PostId         int    `form:"postId" search:"type:exact;column:post_id;table:sys_post" comment:"id"`        // id
	PostName       string `form:"postName" search:"type:contains;column:post_name;table:sys_post" comment:"名称"` // 名称
	PostCode       string `form:"postCode" search:"type:contains;column:post_code;table:sys_post" comment:"编码"` // 编码
	Sort           int    `form:"sort" search:"type:exact;column:sort;table:sys_post" comment:"排序"`             // 排序
	Status         int    `form:"status" search:"type:exact;column:status;table:sys_post" comment:"状态"`         // 状态
	Remark         string `form:"remark" search:"type:exact;column:remark;table:sys_post" comment:"备注"`         // 备注
}

func (m *SysPostPageReq) GetNeedSearch() interface{} {
	return *m
}

// SysPostInsertReq 增使用的结构体
type SysPostInsertReq struct {
	PostId   int    `uri:"id"  comment:"id"`
	PostName string `form:"postName"  comment:"名称"`
	PostCode string `form:"postCode" comment:"编码"`
	Sort     int    `form:"sort" comment:"排序"`
	Status   int    `form:"status"   comment:"状态"`
	Remark   string `form:"remark"   comment:"备注"`
	common.ControlBy
}

func (s *SysPostInsertReq) Generate(model *models.SysPost) {
	model.PostName = s.PostName
	model.PostCode = s.PostCode
	model.Sort = s.Sort
	model.Status = s.Status
	model.Remark = s.Remark
	if s.ControlBy.UpdateBy != 0 {
		model.UpdateBy = s.UpdateBy
	}
	if s.ControlBy.CreateBy != 0 {
		model.CreateBy = s.CreateBy
	}
}

// GetId 获取数据对应的ID
func (s *SysPostInsertReq) GetId() interface{} {
	return s.PostId
}

// SysPostUpdateReq 改使用的结构体
type SysPostUpdateReq struct {
	PostId   int    `uri:"id"  comment:"id"`
	PostName string `form:"postName"  comment:"名称"`
	PostCode string `form:"postCode" comment:"编码"`
	Sort     int    `form:"sort" comment:"排序"`
	Status   int    `form:"status"   comment:"状态"`
	Remark   string `form:"remark"   comment:"备注"`
	common.ControlBy
}

func (s *SysPostUpdateReq) Generate(model *models.SysPost) {
	model.PostId = s.PostId
	model.PostName = s.PostName
	model.PostCode = s.PostCode
	model.Sort = s.Sort
	model.Status = s.Status
	model.Remark = s.Remark
	if s.ControlBy.UpdateBy != 0 {
		model.UpdateBy = s.UpdateBy
	}
	if s.ControlBy.CreateBy != 0 {
		model.CreateBy = s.CreateBy
	}
}

func (s *SysPostUpdateReq) GetId() interface{} {
	return s.PostId
}

// SysPostGetReq 获取单个的结构体
type SysPostGetReq struct {
	Id int `uri:"id"`
}

func (s *SysPostGetReq) GetId() interface{} {
	return s.Id
}

// SysPostDeleteReq 删除的结构体
type SysPostDeleteReq struct {
	Ids []int `json:"ids"`
	common.ControlBy
}

func (s *SysPostDeleteReq) Generate(model *models.SysPost) {
	if s.ControlBy.UpdateBy != 0 {
		model.UpdateBy = s.UpdateBy
	}
	if s.ControlBy.CreateBy != 0 {
		model.CreateBy = s.CreateBy
	}
}

func (s *SysPostDeleteReq) GetId() interface{} {
	return s.Ids
}


================================================
FILE: app/admin/service/dto/sys_role.go
================================================
package dto

import (
	"go-admin/app/admin/models"
	common "go-admin/common/models"

	"go-admin/common/dto"
)

type SysRoleGetPageReq struct {
	dto.Pagination `search:"-"`

	RoleId    int    `form:"roleId" search:"type:exact;column:role_id;table:sys_role" comment:"角色编码"`     // 角色编码
	RoleName  string `form:"roleName" search:"type:exact;column:role_name;table:sys_role" comment:"角色名称"` // 角色名称
	Status    string `form:"status" search:"type:exact;column:status;table:sys_role" comment:"状态"`        // 状态
	RoleKey   string `form:"roleKey" search:"type:exact;column:role_key;table:sys_role" comment:"角色代码"`   // 角色代码
	RoleSort  int    `form:"roleSort" search:"type:exact;column:role_sort;table:sys_role" comment:"角色排序"` // 角色排序
	Flag      string `form:"flag" search:"type:exact;column:flag;table:sys_role" comment:"标记"`            // 标记
	Remark    string `form:"remark" search:"type:exact;column:remark;table:sys_role" comment:"备注"`        // 备注
	Admin     bool   `form:"admin" search:"type:exact;column:admin;table:sys_role" comment:"是否管理员"`
	DataScope string `form:"dataScope" search:"type:exact;column:data_scope;table:sys_role" comment:"是否管理员"`
}

type SysRoleOrder struct {
	RoleIdOrder    string `search:"type:order;column:role_id;table:sys_role" form:"roleIdOrder"`
	RoleNameOrder  string `search:"type:order;column:role_name;table:sys_role" form:"roleNameOrder"`
	RoleSortOrder  string `search:"type:order;column:role_sort;table:sys_role" form:"usernameOrder"`
	StatusOrder    string `search:"type:order;column:status;table:sys_role" form:"statusOrder"`
	CreatedAtOrder string `search:"type:order;column:created_at;table:sys_role" form:"createdAtOrder"`
}

func (m *SysRoleGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysRoleInsertReq struct {
	RoleId    int              `uri:"id" comment:"角色编码"`        // 角色编码
	RoleName  string           `form:"roleName" comment:"角色名称"` // 角色名称
	Status    string           `form:"status" comment:"状态"`     // 状态 1禁用 2正常
	RoleKey   string           `form:"roleKey" comment:"角色代码"`  // 角色代码
	RoleSort  int              `form:"roleSort" comment:"角色排序"` // 角色排序
	Flag      string           `form:"flag" comment:"标记"`       // 标记
	Remark    string           `form:"remark" comment:"备注"`     // 备注
	Admin     bool             `form:"admin" comment:"是否管理员"`
	DataScope string           `form:"dataScope"`
	SysMenu   []models.SysMenu `form:"sysMenu"`
	MenuIds   []int            `form:"menuIds"`
	SysDept   []models.SysDept `form:"sysDept"`
	DeptIds   []int            `form:"deptIds"`
	common.ControlBy
}

func (s *SysRoleInsertReq) Generate(model *models.SysRole) {
	if s.RoleId != 0 {
		model.RoleId = s.RoleId
	}
	model.RoleName = s.RoleName
	model.Status = s.Status
	model.RoleKey = s.RoleKey
	model.RoleSort = s.RoleSort
	model.Flag = s.Flag
	model.Remark = s.Remark
	model.Admin = s.Admin
	model.DataScope = s.DataScope
	model.SysMenu = &s.SysMenu
	model.SysDept = s.SysDept
}

func (s *SysRoleInsertReq) GetId() interface{} {
	return s.RoleId
}

type SysRoleUpdateReq struct {
	RoleId    int              `uri:"id" comment:"角色编码"`        // 角色编码
	RoleName  string           `form:"roleName" comment:"角色名称"` // 角色名称
	Status    string           `form:"status" comment:"状态"`     // 状态
	RoleKey   string           `form:"roleKey" comment:"角色代码"`  // 角色代码
	RoleSort  int              `form:"roleSort" comment:"角色排序"` // 角色排序
	Flag      string           `form:"flag" comment:"标记"`       // 标记
	Remark    string           `form:"remark" comment:"备注"`     // 备注
	Admin     bool             `form:"admin" comment:"是否管理员"`
	DataScope string           `form:"dataScope"`
	SysMenu   []models.SysMenu `form:"sysMenu"`
	MenuIds   []int            `form:"menuIds"`
	SysDept   []models.SysDept `form:"sysDept"`
	DeptIds   []int            `form:"deptIds"`
	common.ControlBy
}

func (s *SysRoleUpdateReq) Generate(model *models.SysRole) {
	if s.RoleId != 0 {
		model.RoleId = s.RoleId
	}
	model.RoleName = s.RoleName
	model.Status = s.Status
	model.RoleKey = s.RoleKey
	model.RoleSort = s.RoleSort
	model.Flag = s.Flag
	model.Remark = s.Remark
	model.Admin = s.Admin
	model.DataScope = s.DataScope
	model.SysMenu = &s.SysMenu
	model.SysDept = s.SysDept
}

func (s *SysRoleUpdateReq) GetId() interface{} {
	return s.RoleId
}

type UpdateStatusReq struct {
	RoleId int    `form:"roleId" comment:"角色编码"` // 角色编码
	Status string `form:"status" comment:"状态"`   // 状态
	common.ControlBy
}

func (s *UpdateStatusReq) Generate(model *models.SysRole) {
	if s.RoleId != 0 {
		model.RoleId = s.RoleId
	}
	model.Status = s.Status
}

func (s *UpdateStatusReq) GetId() interface{} {
	return s.RoleId
}

type SysRoleByName struct {
	RoleName string `form:"role"` // 角色编码
}

type SysRoleGetReq struct {
	Id int `uri:"id"`
}

func (s *SysRoleGetReq) GetId() interface{} {
	return s.Id
}

type SysRoleDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysRoleDeleteReq) GetId() interface{} {
	return s.Ids
}

// RoleDataScopeReq 角色数据权限修改
type RoleDataScopeReq struct {
	RoleId    int    `json:"roleId" binding:"required"`
	DataScope string `json:"dataScope" binding:"required"`
	DeptIds   []int  `json:"deptIds"`
}

func (s *RoleDataScopeReq) Generate(model *models.SysRole) {
	if s.RoleId != 0 {
		model.RoleId = s.RoleId
	}
	model.DataScope = s.DataScope
	model.DeptIds = s.DeptIds
}

type DeptIdList struct {
	DeptId int `json:"DeptId"`
}


================================================
FILE: app/admin/service/dto/sys_user.go
================================================
package dto

import (
	"go-admin/app/admin/models"

	"go-admin/common/dto"
	common "go-admin/common/models"
)

type SysUserGetPageReq struct {
	dto.Pagination `search:"-"`
	UserId         int    `form:"userId" search:"type:exact;column:user_id;table:sys_user" comment:"用户ID"`
	Username       string `form:"username" search:"type:contains;column:username;table:sys_user" comment:"用户名"`
	NickName       string `form:"nickName" search:"type:contains;column:nick_name;table:sys_user" comment:"昵称"`
	Phone          string `form:"phone" search:"type:contains;column:phone;table:sys_user" comment:"手机号"`
	RoleId         string `form:"roleId" search:"type:exact;column:role_id;table:sys_user" comment:"角色ID"`
	Sex            string `form:"sex" search:"type:exact;column:sex;table:sys_user" comment:"性别"`
	Email          string `form:"email" search:"type:contains;column:email;table:sys_user" comment:"邮箱"`
	PostId         string `form:"postId" search:"type:exact;column:post_id;table:sys_user" comment:"岗位"`
	Status         string `form:"status" search:"type:exact;column:status;table:sys_user" comment:"状态"`
	DeptJoin       `search:"type:left;on:dept_id:dept_id;table:sys_user;join:sys_dept"`
	SysUserOrder
}

type SysUserOrder struct {
	UserIdOrder    string `search:"type:order;column:user_id;table:sys_user" form:"userIdOrder"`
	UsernameOrder  string `search:"type:order;column:username;table:sys_user" form:"usernameOrder"`
	StatusOrder    string `search:"type:order;column:status;table:sys_user" form:"statusOrder"`
	CreatedAtOrder string `search:"type:order;column:created_at;table:sys_user" form:"createdAtOrder"`
}

type DeptJoin struct {
	DeptId string `search:"type:contains;column:dept_path;table:sys_dept" form:"deptId"`
}

func (m *SysUserGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type ResetSysUserPwdReq struct {
	UserId   int    `json:"userId" comment:"用户ID" vd:"$>0"` // 用户ID
	Password string `json:"password" comment:"密码" vd:"len($)>0"`
	common.ControlBy
}

func (s *ResetSysUserPwdReq) GetId() interface{} {
	return s.UserId
}

func (s *ResetSysUserPwdReq) Generate(model *models.SysUser) {
	if s.UserId != 0 {
		model.UserId = s.UserId
	}
	model.Password = s.Password
}

type UpdateSysUserAvatarReq struct {
	UserId int    `json:"userId" comment:"用户ID" vd:"len($)>0"` // 用户ID
	Avatar string `json:"avatar" comment:"头像" vd:"len($)>0"`
	common.ControlBy
}

func (s *UpdateSysUserAvatarReq) GetId() interface{} {
	return s.UserId
}

func (s *UpdateSysUserAvatarReq) Generate(model *models.SysUser) {
	if s.UserId != 0 {
		model.UserId = s.UserId
	}
	model.Avatar = s.Avatar
}

type UpdateSysUserStatusReq struct {
	UserId int    `json:"userId" comment:"用户ID" vd:"$>0"` // 用户ID
	Status string `json:"status" comment:"状态" vd:"len($)>0"`
	common.ControlBy
}

func (s *UpdateSysUserStatusReq) GetId() interface{} {
	return s.UserId
}

func (s *UpdateSysUserStatusReq) Generate(model *models.SysUser) {
	if s.UserId != 0 {
		model.UserId = s.UserId
	}
	model.Status = s.Status
}

type SysUserInsertReq struct {
	UserId   int    `json:"userId" comment:"用户ID"` // 用户ID
	Username string `json:"username" comment:"用户名" vd:"len($)>0"`
	Password string `json:"password" comment:"密码"`
	NickName string `json:"nickName" comment:"昵称" vd:"len($)>0"`
	Phone    string `json:"phone" comment:"手机号" vd:"len($)>0"`
	RoleId   int    `json:"roleId" comment:"角色ID"`
	Avatar   string `json:"avatar" comment:"头像"`
	Sex      string `json:"sex" comment:"性别"`
	Email    string `json:"email" comment:"邮箱" vd:"len($)>0,email"`
	DeptId   int    `json:"deptId" comment:"部门" vd:"$>0"`
	PostId   int    `json:"postId" comment:"岗位"`
	Remark   string `json:"remark" comment:"备注"`
	Status   string `json:"status" comment:"状态" vd:"len($)>0" default:"1"`
	common.ControlBy
}

func (s *SysUserInsertReq) Generate(model *models.SysUser) {
	if s.UserId != 0 {
		model.UserId = s.UserId
	}
	model.Username = s.Username
	model.Password = s.Password
	model.NickName = s.NickName
	model.Phone = s.Phone
	model.RoleId = s.RoleId
	model.Avatar = s.Avatar
	model.Sex = s.Sex
	model.Email = s.Email
	model.DeptId = s.DeptId
	model.PostId = s.PostId
	model.Remark = s.Remark
	model.Status = s.Status
	model.CreateBy = s.CreateBy
}

func (s *SysUserInsertReq) GetId() interface{} {
	return s.UserId
}

type SysUserUpdateReq struct {
	UserId   int    `json:"userId" comment:"用户ID"` // 用户ID
	Username string `json:"username" comment:"用户名" vd:"len($)>0"`
	NickName string `json:"nickName" comment:"昵称" vd:"len($)>0"`
	Phone    string `json:"phone" comment:"手机号" vd:"len($)>0"`
	RoleId   int    `json:"roleId" comment:"角色ID"`
	Avatar   string `json:"avatar" comment:"头像"`
	Sex      string `json:"sex" comment:"性别"`
	Email    string `json:"email" comment:"邮箱" vd:"len($)>0,email"`
	DeptId   int    `json:"deptId" comment:"部门" vd:"$>0"`
	PostId   int    `json:"postId" comment:"岗位"`
	Remark   string `json:"remark" comment:"备注"`
	Status   string `json:"status" comment:"状态" default:"1"`
	common.ControlBy
}

func (s *SysUserUpdateReq) Generate(model *models.SysUser) {
	if s.UserId != 0 {
		model.UserId = s.UserId
	}
	model.Username = s.Username
	model.NickName = s.NickName
	model.Phone = s.Phone
	model.RoleId = s.RoleId
	model.Avatar = s.Avatar
	model.Sex = s.Sex
	model.Email = s.Email
	model.DeptId = s.DeptId
	model.PostId = s.PostId
	model.Remark = s.Remark
	model.Status = s.Status
}

func (s *SysUserUpdateReq) GetId() interface{} {
	return s.UserId
}

type SysUserById struct {
	dto.ObjectById
	common.ControlBy
}

func (s *SysUserById) GetId() interface{} {
	if len(s.Ids) > 0 {
		s.Ids = append(s.Ids, s.Id)
		return s.Ids
	}
	return s.Id
}

func (s *SysUserById) GenerateM() (common.ActiveRecord, error) {
	return &models.SysUser{}, nil
}

// PassWord 密码
type PassWord struct {
	NewPassword string `json:"newPassword" vd:"len($)>0"`
	OldPassword string `json:"oldPassword" vd:"len($)>0"`
}


================================================
FILE: app/admin/service/sys_api.go
================================================
package service

import (
	"errors"
	"fmt"

	"github.com/go-admin-team/go-admin-core/sdk/runtime"
	"github.com/go-admin-team/go-admin-core/sdk/service"
	"go-admin/app/admin/models"
	"go-admin/app/admin/service/dto"
	"go-admin/common/actions"
	cDto "go-admin/common/dto"
	"go-admin/common/global"
)

type SysApi struct {
	service.Service
}

// GetPage 获取SysApi列表
func (e *SysApi) GetPage(c *dto.SysApiGetPageReq, p *actions.DataPermission, list *[]models.SysApi, count *int64) error {
	var err error
	var data models.SysApi

	orm := e.Orm.Debug().Model(&data).
		Scopes(
			cDto.MakeCondition(c.GetNeedSearch()),
			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
			actions.Permission(data.TableName(), p),
		)
	if c.Type != "" {
		qType := c.Type
		if qType == "暂无" {
			qType = ""
		}
		if global.Driver == "postgres" {
			orm = orm.Where("type = ?", qType)
		} else {
			orm = orm.Where("`type` = ?", qType)
		}

	}
	err = orm.Find(list).Limit(-1).Offset(-1).
		Count(count).Error
	if err != nil {
		e.Log.Errorf("Service GetSysApiPage error:%s", err)
		return err
	}
	return nil
}

// Get 获取SysApi对象with id
func (e *SysApi) Get(d *dto.SysApiGetReq, p *actions.DataPermission, model *models.SysApi) *SysApi {
	var data models.SysApi
	err := e.Orm.Model(&data).
		Scopes(
			actions.Permission(data.TableName(), p),
		).
		FirstOrInit(model, d.GetId()).Error
	if err != nil {
		e.Log
Download .txt
gitextract_e1hbjlbw/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── config.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pr_cn.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── build.yml
│       ├── codeql-analysis.yml
│       ├── go.yml
│       ├── issue-check-inactive.yml
│       ├── issue-close-require.yml
│       ├── issue-labeled.yml
│       └── mirror.yaml
├── .gitignore
├── Dockerfile
├── Dockerfilebak
├── LICENSE.md
├── Makefile
├── README.Zh-cn.md
├── README.md
├── _config.yml
├── app/
│   ├── admin/
│   │   ├── apis/
│   │   │   ├── captcha.go
│   │   │   ├── go_admin.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict_data.go
│   │   │   ├── sys_dict_type.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   └── sys_user.go
│   │   ├── models/
│   │   │   ├── casbin_rule.go
│   │   │   ├── datascope.go
│   │   │   ├── initdb.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict_data.go
│   │   │   ├── sys_dict_type.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   └── sys_user.go
│   │   ├── router/
│   │   │   ├── init_router.go
│   │   │   ├── router.go
│   │   │   ├── sys_api.go
│   │   │   ├── sys_config.go
│   │   │   ├── sys_dept.go
│   │   │   ├── sys_dict.go
│   │   │   ├── sys_login_log.go
│   │   │   ├── sys_menu.go
│   │   │   ├── sys_opera_log.go
│   │   │   ├── sys_post.go
│   │   │   ├── sys_role.go
│   │   │   ├── sys_router.go
│   │   │   └── sys_user.go
│   │   └── service/
│   │       ├── dto/
│   │       │   ├── sys_api.go
│   │       │   ├── sys_config.go
│   │       │   ├── sys_dept.go
│   │       │   ├── sys_dict_data.go
│   │       │   ├── sys_dict_type.go
│   │       │   ├── sys_login_log.go
│   │       │   ├── sys_menu.go
│   │       │   ├── sys_opera_log.go
│   │       │   ├── sys_post.go
│   │       │   ├── sys_role.go
│   │       │   └── sys_user.go
│   │       ├── sys_api.go
│   │       ├── sys_config.go
│   │       ├── sys_dept.go
│   │       ├── sys_dict_data.go
│   │       ├── sys_dict_type.go
│   │       ├── sys_login_log.go
│   │       ├── sys_menu.go
│   │       ├── sys_opera_log.go
│   │       ├── sys_post.go
│   │       ├── sys_role.go
│   │       ├── sys_role_menu.go
│   │       └── sys_user.go
│   ├── jobs/
│   │   ├── apis/
│   │   │   └── sys_job.go
│   │   ├── examples.go
│   │   ├── jobbase.go
│   │   ├── models/
│   │   │   └── sys_job.go
│   │   ├── router/
│   │   │   ├── int_router.go
│   │   │   ├── router.go
│   │   │   └── sys_job.go
│   │   ├── service/
│   │   │   ├── dto/
│   │   │   │   └── sys_job.go
│   │   │   └── sys_job.go
│   │   └── type.go
│   └── other/
│       ├── apis/
│       │   ├── file.go
│       │   ├── sys_server_monitor.go
│       │   └── tools/
│       │       ├── db_columns.go
│       │       ├── db_tables.go
│       │       ├── gen.go
│       │       └── sys_tables.go
│       ├── models/
│       │   └── tools/
│       │       ├── db_columns.go
│       │       ├── db_tables.go
│       │       ├── sys_columns.go
│       │       └── sys_tables.go
│       ├── router/
│       │   ├── file.go
│       │   ├── gen_router.go
│       │   ├── init_router.go
│       │   ├── monitor.go
│       │   ├── router.go
│       │   └── sys_server_monitor.go
│       └── service/
│           └── dto/
│               └── sys_tables.go
├── cmd/
│   ├── api/
│   │   ├── jobs.go
│   │   ├── other.go
│   │   └── server.go
│   ├── app/
│   │   └── server.go
│   ├── cobra.go
│   ├── config/
│   │   └── server.go
│   ├── migrate/
│   │   ├── migration/
│   │   │   ├── init.go
│   │   │   ├── models/
│   │   │   │   ├── by.go
│   │   │   │   ├── casbin_rule.go
│   │   │   │   ├── initdb.go
│   │   │   │   ├── model.go
│   │   │   │   ├── role_dept.go
│   │   │   │   ├── sys_api.go
│   │   │   │   ├── sys_columns.go
│   │   │   │   ├── sys_config.go
│   │   │   │   ├── sys_dept.go
│   │   │   │   ├── sys_dict_data.go
│   │   │   │   ├── sys_dict_type.go
│   │   │   │   ├── sys_job.go
│   │   │   │   ├── sys_login_log.go
│   │   │   │   ├── sys_menu.go
│   │   │   │   ├── sys_opera_log.go
│   │   │   │   ├── sys_post.go
│   │   │   │   ├── sys_role.go
│   │   │   │   ├── sys_tables.go
│   │   │   │   ├── sys_user.go
│   │   │   │   └── tb_demo.go
│   │   │   ├── version/
│   │   │   │   ├── 1599190683659_tables.go
│   │   │   │   └── 1653638869132_migrate.go
│   │   │   └── version-local/
│   │   │       └── doc.go
│   │   └── server.go
│   └── version/
│       └── server.go
├── common/
│   ├── actions/
│   │   ├── create.go
│   │   ├── delete.go
│   │   ├── index.go
│   │   ├── permission.go
│   │   ├── type.go
│   │   ├── update.go
│   │   └── view.go
│   ├── apis/
│   │   └── api.go
│   ├── database/
│   │   ├── initialize.go
│   │   ├── open.go
│   │   └── open_sqlite3.go
│   ├── dto/
│   │   ├── auto_form.go
│   │   ├── generate.go
│   │   ├── order.go
│   │   ├── pagination.go
│   │   ├── search.go
│   │   └── type.go
│   ├── file_store/
│   │   ├── initialize.go
│   │   ├── interface.go
│   │   ├── kodo.go
│   │   ├── kodo_test.go
│   │   ├── obs.go
│   │   ├── obs_test.go
│   │   ├── oss.go
│   │   └── oss_test.go
│   ├── global/
│   │   ├── adm.go
│   │   ├── casbin.go
│   │   ├── logo.go
│   │   └── topic.go
│   ├── ip.go
│   ├── middleware/
│   │   ├── auth.go
│   │   ├── customerror.go
│   │   ├── db.go
│   │   ├── demo.go
│   │   ├── handler/
│   │   │   ├── auth.go
│   │   │   ├── httpshandler.go
│   │   │   ├── login.go
│   │   │   ├── ping.go
│   │   │   ├── role.go
│   │   │   └── user.go
│   │   ├── header.go
│   │   ├── init.go
│   │   ├── logger.go
│   │   ├── permission.go
│   │   ├── request_id.go
│   │   ├── sentinel.go
│   │   ├── settings.go
│   │   └── trace.go
│   ├── models/
│   │   ├── by.go
│   │   ├── menu.go
│   │   ├── migrate.go
│   │   ├── response.go
│   │   ├── type.go
│   │   └── user.go
│   ├── response/
│   │   └── binding.go
│   ├── service/
│   │   └── service.go
│   └── storage/
│       └── initialize.go
├── config/
│   ├── READMEN.md
│   ├── db-begin-mysql.sql
│   ├── db-end-mysql.sql
│   ├── db-sqlserver.sql
│   ├── db.sql
│   ├── extend.go
│   ├── pg.sql
│   ├── settings.demo.yml
│   ├── settings.full.yml
│   ├── settings.sqlite.yml
│   └── settings.yml
├── docker-compose.yml
├── docs/
│   └── admin/
│       ├── admin_docs.go
│       ├── admin_swagger.json
│       └── admin_swagger.yaml
├── go.mod
├── main.go
├── restart.sh
├── scripts/
│   ├── Dockerfile
│   └── k8s/
│       ├── deploy.yml
│       ├── prerun.sh
│       └── storage.yml
├── ssh/
│   └── swag.sh
├── static/
│   └── form-generator/
│       ├── css/
│       │   ├── index.1a124643.css
│       │   └── parser-example.69e16e51.css
│       ├── index.html
│       ├── js/
│       │   ├── chunk-vendors.971555db.js
│       │   ├── index.8e6d9f8f.js
│       │   ├── parser-example.ce55fa09.js
│       │   ├── preview.8ce4e0db.js
│       │   └── tinymce-example.641995ab.js
│       └── preview.html
├── stop.sh
├── template/
│   ├── api_migrate.template
│   ├── cmd_api.template
│   ├── migrate.template
│   ├── router.template
│   └── v4/
│       ├── actions/
│       │   ├── router_check_role.go.template
│       │   └── router_no_check_role.go.template
│       ├── dto.go.template
│       ├── js.go.template
│       ├── model.go.template
│       ├── no_actions/
│       │   ├── apis.go.template
│       │   ├── router_check_role.go.template
│       │   ├── router_no_check_role.go.template
│       │   └── service.go.template
│       └── vue.go.template
└── test/
    ├── api.go.template
    ├── gen_test.go
    └── model.go.template
Download .txt
SYMBOL INDEX (1814 symbols across 184 files)

FILE: app/admin/apis/captcha.go
  type System (line 9) | type System struct
    method GenerateCaptchaHandler (line 19) | func (e System) GenerateCaptchaHandler(c *gin.Context) {

FILE: app/admin/apis/go_admin.go
  constant INDEX (line 7) | INDEX = `
  function GoAdmin (line 36) | func GoAdmin(c *gin.Context) {

FILE: app/admin/apis/sys_api.go
  type SysApi (line 16) | type SysApi struct
    method GetPage (line 33) | func (e SysApi) GetPage(c *gin.Context) {
    method Get (line 66) | func (e SysApi) Get(c *gin.Context) {
    method Update (line 99) | func (e SysApi) Update(c *gin.Context) {
    method DeleteSysApi (line 129) | func (e SysApi) DeleteSysApi(c *gin.Context) {

FILE: app/admin/apis/sys_config.go
  type SysConfig (line 14) | type SysConfig struct
    method GetPage (line 31) | func (e SysConfig) GetPage(c *gin.Context) {
    method Get (line 62) | func (e SysConfig) Get(c *gin.Context) {
    method Insert (line 96) | func (e SysConfig) Insert(c *gin.Context) {
    method Update (line 129) | func (e SysConfig) Update(c *gin.Context) {
    method Delete (line 159) | func (e SysConfig) Delete(c *gin.Context) {
    method Get2SysApp (line 188) | func (e SysConfig) Get2SysApp(c *gin.Context) {
    method Get2Set (line 227) | func (e SysConfig) Get2Set(c *gin.Context) {
    method Update2Set (line 261) | func (e SysConfig) Update2Set(c *gin.Context) {
    method GetSysConfigByKEYForService (line 292) | func (e SysConfig) GetSysConfigByKEYForService(c *gin.Context) {

FILE: app/admin/apis/sys_dept.go
  type SysDept (line 16) | type SysDept struct
    method GetPage (line 30) | func (e SysDept) GetPage(c *gin.Context) {
    method Get (line 60) | func (e SysDept) Get(c *gin.Context) {
    method Insert (line 95) | func (e SysDept) Insert(c *gin.Context) {
    method Update (line 131) | func (e SysDept) Update(c *gin.Context) {
    method Delete (line 162) | func (e SysDept) Delete(c *gin.Context) {
    method Get2Tree (line 185) | func (e SysDept) Get2Tree(c *gin.Context) {
    method GetDeptTreeRoleSelect (line 208) | func (e SysDept) GetDeptTreeRoleSelect(c *gin.Context) {

FILE: app/admin/apis/sys_dict_data.go
  type SysDictData (line 15) | type SysDictData struct
    method GetPage (line 31) | func (e SysDictData) GetPage(c *gin.Context) {
    method Get (line 64) | func (e SysDictData) Get(c *gin.Context) {
    method Insert (line 100) | func (e SysDictData) Insert(c *gin.Context) {
    method Update (line 133) | func (e SysDictData) Update(c *gin.Context) {
    method Delete (line 163) | func (e SysDictData) Delete(c *gin.Context) {
    method GetAll (line 193) | func (e SysDictData) GetAll(c *gin.Context) {

FILE: app/admin/apis/sys_dict_type.go
  type SysDictType (line 16) | type SysDictType struct
    method GetPage (line 32) | func (e SysDictType) GetPage(c *gin.Context) {
    method Get (line 63) | func (e SysDictType) Get(c *gin.Context) {
    method Insert (line 95) | func (e SysDictType) Insert(c *gin.Context) {
    method Update (line 128) | func (e SysDictType) Update(c *gin.Context) {
    method Delete (line 158) | func (e SysDictType) Delete(c *gin.Context) {
    method GetAll (line 190) | func (e SysDictType) GetAll(c *gin.Context) {

FILE: app/admin/apis/sys_login_log.go
  type SysLoginLog (line 13) | type SysLoginLog struct
    method GetPage (line 30) | func (e SysLoginLog) GetPage(c *gin.Context) {
    method Get (line 61) | func (e SysLoginLog) Get(c *gin.Context) {
    method Delete (line 91) | func (e SysLoginLog) Delete(c *gin.Context) {

FILE: app/admin/apis/sys_menu.go
  type SysMenu (line 14) | type SysMenu struct
    method GetPage (line 26) | func (e SysMenu) GetPage(c *gin.Context) {
    method Get (line 56) | func (e SysMenu) Get(c *gin.Context) {
    method Insert (line 89) | func (e SysMenu) Insert(c *gin.Context) {
    method Update (line 123) | func (e SysMenu) Update(c *gin.Context) {
    method Delete (line 154) | func (e SysMenu) Delete(c *gin.Context) {
    method GetMenuRole (line 183) | func (e SysMenu) GetMenuRole(c *gin.Context) {
    method GetMenuTreeSelect (line 215) | func (e SysMenu) GetMenuTreeSelect(c *gin.Context) {

FILE: app/admin/apis/sys_opera_log.go
  type SysOperaLog (line 13) | type SysOperaLog struct
    method GetPage (line 32) | func (e SysOperaLog) GetPage(c *gin.Context) {
    method Get (line 66) | func (e SysOperaLog) Get(c *gin.Context) {
    method Delete (line 97) | func (e SysOperaLog) Delete(c *gin.Context) {

FILE: app/admin/apis/sys_post.go
  type SysPost (line 17) | type SysPost struct
    method GetPage (line 32) | func (e SysPost) GetPage(c *gin.Context) {
    method Get (line 66) | func (e SysPost) Get(c *gin.Context) {
    method Insert (line 100) | func (e SysPost) Insert(c *gin.Context) {
    method Update (line 132) | func (e SysPost) Update(c *gin.Context) {
    method Delete (line 164) | func (e SysPost) Delete(c *gin.Context) {

FILE: app/admin/apis/sys_role.go
  type SysRole (line 21) | type SysRole struct
    method GetPage (line 37) | func (e SysRole) GetPage(c *gin.Context) {
    method Get (line 71) | func (e SysRole) Get(c *gin.Context) {
    method Insert (line 106) | func (e SysRole) Insert(c *gin.Context) {
    method Update (line 151) | func (e SysRole) Update(c *gin.Context) {
    method Delete (line 192) | func (e SysRole) Delete(c *gin.Context) {
    method Update2Status (line 227) | func (e SysRole) Update2Status(c *gin.Context) {
    method Update2DataScope (line 259) | func (e SysRole) Update2DataScope(c *gin.Context) {

FILE: app/admin/apis/sys_user.go
  type SysUser (line 20) | type SysUser struct
    method GetPage (line 32) | func (e SysUser) GetPage(c *gin.Context) {
    method Get (line 69) | func (e SysUser) Get(c *gin.Context) {
    method Insert (line 103) | func (e SysUser) Insert(c *gin.Context) {
    method Update (line 138) | func (e SysUser) Update(c *gin.Context) {
    method Delete (line 173) | func (e SysUser) Delete(c *gin.Context) {
    method InsetAvatar (line 210) | func (e SysUser) InsetAvatar(c *gin.Context) {
    method UpdateStatus (line 259) | func (e SysUser) UpdateStatus(c *gin.Context) {
    method ResetPwd (line 296) | func (e SysUser) ResetPwd(c *gin.Context) {
    method UpdatePwd (line 333) | func (e SysUser) UpdatePwd(c *gin.Context) {
    method GetProfile (line 371) | func (e SysUser) GetProfile(c *gin.Context) {
    method GetInfo (line 409) | func (e SysUser) GetInfo(c *gin.Context) {

FILE: app/admin/models/casbin_rule.go
  type CasbinRule (line 3) | type CasbinRule struct
    method TableName (line 14) | func (CasbinRule) TableName() string {

FILE: app/admin/models/datascope.go
  type DataPermission (line 12) | type DataPermission struct
    method GetDataScope (line 19) | func (e *DataPermission) GetDataScope(tableName string, db *gorm.DB) (...

FILE: app/admin/models/initdb.go
  function InitDb (line 12) | func InitDb(db *gorm.DB) (err error) {
  function ExecSql (line 22) | func ExecSql(db *gorm.DB, filePath string) error {
  function Ioutil (line 46) | func Ioutil(filePath string) (string, error) {

FILE: app/admin/models/sys_api.go
  type SysApi (line 19) | type SysApi struct
    method TableName (line 30) | func (*SysApi) TableName() string {
    method Generate (line 34) | func (e *SysApi) Generate() models.ActiveRecord {
    method GetId (line 39) | func (e *SysApi) GetId() interface{} {
  function SaveSysApi (line 43) | func SaveSysApi(message storage.Messager) (err error) {

FILE: app/admin/models/sys_config.go
  type SysConfig (line 7) | type SysConfig struct
    method TableName (line 19) | func (*SysConfig) TableName() string {
    method Generate (line 23) | func (e *SysConfig) Generate() models.ActiveRecord {
    method GetId (line 28) | func (e *SysConfig) GetId() interface{} {

FILE: app/admin/models/sys_dept.go
  type SysDept (line 5) | type SysDept struct
    method TableName (line 22) | func (*SysDept) TableName() string {
    method Generate (line 26) | func (e *SysDept) Generate() models.ActiveRecord {
    method GetId (line 31) | func (e *SysDept) GetId() interface{} {

FILE: app/admin/models/sys_dict_data.go
  type SysDictData (line 7) | type SysDictData struct
    method TableName (line 23) | func (*SysDictData) TableName() string {
    method Generate (line 27) | func (e *SysDictData) Generate() models.ActiveRecord {
    method GetId (line 32) | func (e *SysDictData) GetId() interface{} {

FILE: app/admin/models/sys_dict_type.go
  type SysDictType (line 7) | type SysDictType struct
    method TableName (line 17) | func (*SysDictType) TableName() string {
    method Generate (line 21) | func (e *SysDictType) Generate() models.ActiveRecord {
    method GetId (line 26) | func (e *SysDictType) GetId() interface{} {

FILE: app/admin/models/sys_login_log.go
  type SysLoginLog (line 15) | type SysLoginLog struct
    method TableName (line 32) | func (*SysLoginLog) TableName() string {
    method Generate (line 36) | func (e *SysLoginLog) Generate() models.ActiveRecord {
    method GetId (line 41) | func (e *SysLoginLog) GetId() interface{} {
  function SaveLoginLog (line 46) | func SaveLoginLog(message storage.Messager) (err error) {

FILE: app/admin/models/sys_menu.go
  type SysMenu (line 5) | type SysMenu struct
    method TableName (line 39) | func (*SysMenu) TableName() string {
    method Generate (line 43) | func (e *SysMenu) Generate() models.ActiveRecord {
    method GetId (line 48) | func (e *SysMenu) GetId() interface{} {
  type SysMenuSlice (line 33) | type SysMenuSlice
    method Len (line 35) | func (x SysMenuSlice) Len() int           { return len(x) }
    method Less (line 36) | func (x SysMenuSlice) Less(i, j int) bool { return x[i].Sort < x[j].So...
    method Swap (line 37) | func (x SysMenuSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }

FILE: app/admin/models/sys_opera_log.go
  type SysOperaLog (line 15) | type SysOperaLog struct
    method TableName (line 40) | func (*SysOperaLog) TableName() string {
    method Generate (line 44) | func (e *SysOperaLog) Generate() models.ActiveRecord {
    method GetId (line 49) | func (e *SysOperaLog) GetId() interface{} {
  function SaveOperaLog (line 54) | func SaveOperaLog(message storage.Messager) (err error) {

FILE: app/admin/models/sys_post.go
  type SysPost (line 5) | type SysPost struct
    method TableName (line 19) | func (*SysPost) TableName() string {
    method Generate (line 23) | func (e *SysPost) Generate() models.ActiveRecord {
    method GetId (line 28) | func (e *SysPost) GetId() interface{} {

FILE: app/admin/models/sys_role.go
  type SysRole (line 5) | type SysRole struct
    method TableName (line 24) | func (*SysRole) TableName() string {
    method Generate (line 28) | func (e *SysRole) Generate() models.ActiveRecord {
    method GetId (line 33) | func (e *SysRole) GetId() interface{} {

FILE: app/admin/models/sys_user.go
  type SysUser (line 9) | type SysUser struct
    method TableName (line 32) | func (*SysUser) TableName() string {
    method Generate (line 36) | func (e *SysUser) Generate() models.ActiveRecord {
    method GetId (line 41) | func (e *SysUser) GetId() interface{} {
    method Encrypt (line 46) | func (e *SysUser) Encrypt() (err error) {
    method BeforeCreate (line 60) | func (e *SysUser) BeforeCreate(_ *gorm.DB) error {
    method BeforeUpdate (line 64) | func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
    method AfterFind (line 72) | func (e *SysUser) AfterFind(_ *gorm.DB) error {

FILE: app/admin/router/init_router.go
  function InitRouter (line 13) | func InitRouter() {

FILE: app/admin/router/router.go
  function InitExamplesRouter (line 15) | func InitExamplesRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddlew...
  function examplesNoCheckRoleRouter (line 26) | func examplesNoCheckRoleRouter(r *gin.Engine) {
  function examplesCheckRoleRouter (line 35) | func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJ...

FILE: app/admin/router/sys_api.go
  function init (line 11) | func init() {
  function registerSysApiRouter (line 16) | func registerSysApiRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJW...

FILE: app/admin/router/sys_config.go
  function init (line 11) | func init() {
  function registerSysConfigRouter (line 16) | func registerSysConfigRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi...

FILE: app/admin/router/sys_dept.go
  function init (line 10) | func init() {
  function registerSysDeptRouter (line 15) | func registerSysDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJ...

FILE: app/admin/router/sys_dict.go
  function init (line 10) | func init() {
  function registerDictRouter (line 14) | func registerDictRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTM...

FILE: app/admin/router/sys_login_log.go
  function init (line 10) | func init() {
  function registerSysLoginLogRouter (line 15) | func registerSysLoginLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt....

FILE: app/admin/router/sys_menu.go
  function init (line 10) | func init() {
  function registerSysMenuRouter (line 15) | func registerSysMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJ...

FILE: app/admin/router/sys_opera_log.go
  function init (line 10) | func init() {
  function registerSysOperaLogRouter (line 15) | func registerSysOperaLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt....

FILE: app/admin/router/sys_post.go
  function init (line 10) | func init() {
  function registerSyPostRouter (line 15) | func registerSyPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJW...

FILE: app/admin/router/sys_role.go
  function init (line 11) | func init() {
  function registerSysRoleRouter (line 16) | func registerSysRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJ...

FILE: app/admin/router/sys_router.go
  function InitSysRouter (line 21) | func InitSysRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) ...
  function sysBaseRouter (line 35) | func sysBaseRouter(r *gin.RouterGroup) {
  function sysStaticFileRouter (line 47) | func sysStaticFileRouter(r *gin.RouterGroup) {
  function sysSwaggerRouter (line 58) | func sysSwaggerRouter(r *gin.RouterGroup) {
  function sysCheckRoleRouterInit (line 62) | func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJ...
  function registerBaseRouter (line 78) | func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTM...

FILE: app/admin/router/sys_user.go
  function init (line 11) | func init() {
  function registerSysUserRouter (line 16) | func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJ...

FILE: app/admin/service/dto/sys_api.go
  type SysApiGetPageReq (line 10) | type SysApiGetPageReq struct
    method GetNeedSearch (line 26) | func (m *SysApiGetPageReq) GetNeedSearch() interface{} {
  type SysApiOrder (line 20) | type SysApiOrder struct
  type SysApiInsertReq (line 31) | type SysApiInsertReq struct
    method Generate (line 41) | func (s *SysApiInsertReq) Generate(model *models.SysApi) {
    method GetId (line 49) | func (s *SysApiInsertReq) GetId() interface{} {
  type SysApiUpdateReq (line 54) | type SysApiUpdateReq struct
    method Generate (line 64) | func (s *SysApiUpdateReq) Generate(model *models.SysApi) {
    method GetId (line 75) | func (s *SysApiUpdateReq) GetId() interface{} {
  type SysApiGetReq (line 80) | type SysApiGetReq struct
    method GetId (line 84) | func (s *SysApiGetReq) GetId() interface{} {
  type SysApiDeleteReq (line 89) | type SysApiDeleteReq struct
    method GetId (line 93) | func (s *SysApiDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_config.go
  type SysConfigGetPageReq (line 10) | type SysConfigGetPageReq struct
    method GetNeedSearch (line 27) | func (m *SysConfigGetPageReq) GetNeedSearch() interface{} {
  type SysConfigOrder (line 19) | type SysConfigOrder struct
  type SysConfigGetToSysAppReq (line 31) | type SysConfigGetToSysAppReq struct
    method GetNeedSearch (line 35) | func (m *SysConfigGetToSysAppReq) GetNeedSearch() interface{} {
  type SysConfigControl (line 40) | type SysConfigControl struct
    method Generate (line 52) | func (s *SysConfigControl) Generate(model *models.SysConfig) {
    method GetId (line 66) | func (s *SysConfigControl) GetId() interface{} {
  type GetSetSysConfigReq (line 71) | type GetSetSysConfigReq struct
    method Generate (line 77) | func (s *GetSetSysConfigReq) Generate(model *models.SysConfig) {
  type UpdateSetSysConfigReq (line 81) | type UpdateSetSysConfigReq
  type SysConfigByKeyReq (line 84) | type SysConfigByKeyReq struct
    method GetNeedSearch (line 88) | func (m *SysConfigByKeyReq) GetNeedSearch() interface{} {
  type GetSysConfigByKEYForServiceResp (line 92) | type GetSysConfigByKEYForServiceResp struct
  type SysConfigGetReq (line 97) | type SysConfigGetReq struct
    method GetId (line 101) | func (s *SysConfigGetReq) GetId() interface{} {
  type SysConfigDeleteReq (line 105) | type SysConfigDeleteReq struct
    method GetId (line 110) | func (s *SysConfigDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_dept.go
  type SysDeptGetPageReq (line 9) | type SysDeptGetPageReq struct
    method GetNeedSearch (line 21) | func (m *SysDeptGetPageReq) GetNeedSearch() interface{} {
  type SysDeptInsertReq (line 25) | type SysDeptInsertReq struct
    method Generate (line 38) | func (s *SysDeptInsertReq) Generate(model *models.SysDept) {
    method GetId (line 53) | func (s *SysDeptInsertReq) GetId() interface{} {
  type SysDeptUpdateReq (line 57) | type SysDeptUpdateReq struct
    method Generate (line 71) | func (s *SysDeptUpdateReq) Generate(model *models.SysDept) {
    method GetId (line 86) | func (s *SysDeptUpdateReq) GetId() interface{} {
  type SysDeptGetReq (line 90) | type SysDeptGetReq struct
    method GetId (line 94) | func (s *SysDeptGetReq) GetId() interface{} {
  type SysDeptDeleteReq (line 98) | type SysDeptDeleteReq struct
    method GetId (line 102) | func (s *SysDeptDeleteReq) GetId() interface{} {
  type DeptLabel (line 106) | type DeptLabel struct

FILE: app/admin/service/dto/sys_dict_data.go
  type SysDictDataGetPageReq (line 9) | type SysDictDataGetPageReq struct
    method GetNeedSearch (line 18) | func (m *SysDictDataGetPageReq) GetNeedSearch() interface{} {
  type SysDictDataGetAllResp (line 22) | type SysDictDataGetAllResp struct
  type SysDictDataInsertReq (line 27) | type SysDictDataInsertReq struct
    method Generate (line 42) | func (s *SysDictDataInsertReq) Generate(model *models.SysDictData) {
    method GetId (line 56) | func (s *SysDictDataInsertReq) GetId() interface{} {
  type SysDictDataUpdateReq (line 60) | type SysDictDataUpdateReq struct
    method Generate (line 75) | func (s *SysDictDataUpdateReq) Generate(model *models.SysDictData) {
    method GetId (line 89) | func (s *SysDictDataUpdateReq) GetId() interface{} {
  type SysDictDataGetReq (line 93) | type SysDictDataGetReq struct
    method GetId (line 97) | func (s *SysDictDataGetReq) GetId() interface{} {
  type SysDictDataDeleteReq (line 101) | type SysDictDataDeleteReq struct
    method GetId (line 106) | func (s *SysDictDataDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_dict_type.go
  type SysDictTypeGetPageReq (line 10) | type SysDictTypeGetPageReq struct
    method GetNeedSearch (line 22) | func (m *SysDictTypeGetPageReq) GetNeedSearch() interface{} {
  type SysDictTypeOrder (line 18) | type SysDictTypeOrder struct
  type SysDictTypeInsertReq (line 26) | type SysDictTypeInsertReq struct
    method Generate (line 35) | func (s *SysDictTypeInsertReq) Generate(model *models.SysDictType) {
    method GetId (line 46) | func (s *SysDictTypeInsertReq) GetId() interface{} {
  type SysDictTypeUpdateReq (line 50) | type SysDictTypeUpdateReq struct
    method Generate (line 59) | func (s *SysDictTypeUpdateReq) Generate(model *models.SysDictType) {
    method GetId (line 70) | func (s *SysDictTypeUpdateReq) GetId() interface{} {
  type SysDictTypeGetReq (line 74) | type SysDictTypeGetReq struct
    method GetId (line 78) | func (s *SysDictTypeGetReq) GetId() interface{} {
  type SysDictTypeDeleteReq (line 82) | type SysDictTypeDeleteReq struct
    method GetId (line 87) | func (s *SysDictTypeDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_login_log.go
  type SysLoginLogGetPageReq (line 9) | type SysLoginLogGetPageReq struct
    method GetNeedSearch (line 24) | func (m *SysLoginLogGetPageReq) GetNeedSearch() interface{} {
  type SysLoginLogOrder (line 20) | type SysLoginLogOrder struct
  type SysLoginLogControl (line 28) | type SysLoginLogControl struct
  type SysLoginLogGetReq (line 42) | type SysLoginLogGetReq struct
    method GetId (line 46) | func (s *SysLoginLogGetReq) GetId() interface{} {
  type SysLoginLogDeleteReq (line 51) | type SysLoginLogDeleteReq struct
    method GetId (line 55) | func (s *SysLoginLogDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_menu.go
  type SysMenuGetPageReq (line 11) | type SysMenuGetPageReq struct
    method GetNeedSearch (line 17) | func (m *SysMenuGetPageReq) GetNeedSearch() interface{} {
  type SysMenuInsertReq (line 21) | type SysMenuInsertReq struct
    method Generate (line 43) | func (s *SysMenuInsertReq) Generate(model *models.SysMenu) {
    method GetId (line 71) | func (s *SysMenuInsertReq) GetId() interface{} {
  type SysMenuUpdateReq (line 75) | type SysMenuUpdateReq struct
    method Generate (line 97) | func (s *SysMenuUpdateReq) Generate(model *models.SysMenu) {
    method GetId (line 125) | func (s *SysMenuUpdateReq) GetId() interface{} {
  type SysMenuGetReq (line 129) | type SysMenuGetReq struct
    method GetId (line 133) | func (s *SysMenuGetReq) GetId() interface{} {
  type SysMenuDeleteReq (line 137) | type SysMenuDeleteReq struct
    method GetId (line 142) | func (s *SysMenuDeleteReq) GetId() interface{} {
  type MenuLabel (line 146) | type MenuLabel struct
  type MenuRole (line 152) | type MenuRole struct
  type SelectRole (line 157) | type SelectRole struct

FILE: app/admin/service/dto/sys_opera_log.go
  constant OperaStatusEnabel (line 12) | OperaStatusEnabel  = "1"
  constant OperaStatusDisable (line 13) | OperaStatusDisable = "2"
  type SysOperaLogGetPageReq (line 16) | type SysOperaLogGetPageReq struct
    method GetNeedSearch (line 33) | func (m *SysOperaLogGetPageReq) GetNeedSearch() interface{} {
  type SysOperaLogOrder (line 29) | type SysOperaLogOrder struct
  type SysOperaLogControl (line 37) | type SysOperaLogControl struct
    method Generate (line 59) | func (s *SysOperaLogControl) Generate() (*models.SysOperaLog, error) {
    method GetId (line 83) | func (s *SysOperaLogControl) GetId() interface{} {
  type SysOperaLogGetReq (line 87) | type SysOperaLogGetReq struct
    method GetId (line 91) | func (s *SysOperaLogGetReq) GetId() interface{} {
  type SysOperaLogDeleteReq (line 96) | type SysOperaLogDeleteReq struct
    method GetId (line 100) | func (s *SysOperaLogDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_post.go
  type SysPostPageReq (line 11) | type SysPostPageReq struct
    method GetNeedSearch (line 21) | func (m *SysPostPageReq) GetNeedSearch() interface{} {
  type SysPostInsertReq (line 26) | type SysPostInsertReq struct
    method Generate (line 36) | func (s *SysPostInsertReq) Generate(model *models.SysPost) {
    method GetId (line 51) | func (s *SysPostInsertReq) GetId() interface{} {
  type SysPostUpdateReq (line 56) | type SysPostUpdateReq struct
    method Generate (line 66) | func (s *SysPostUpdateReq) Generate(model *models.SysPost) {
    method GetId (line 81) | func (s *SysPostUpdateReq) GetId() interface{} {
  type SysPostGetReq (line 86) | type SysPostGetReq struct
    method GetId (line 90) | func (s *SysPostGetReq) GetId() interface{} {
  type SysPostDeleteReq (line 95) | type SysPostDeleteReq struct
    method Generate (line 100) | func (s *SysPostDeleteReq) Generate(model *models.SysPost) {
    method GetId (line 109) | func (s *SysPostDeleteReq) GetId() interface{} {

FILE: app/admin/service/dto/sys_role.go
  type SysRoleGetPageReq (line 10) | type SysRoleGetPageReq struct
    method GetNeedSearch (line 32) | func (m *SysRoleGetPageReq) GetNeedSearch() interface{} {
  type SysRoleOrder (line 24) | type SysRoleOrder struct
  type SysRoleInsertReq (line 36) | type SysRoleInsertReq struct
    method Generate (line 53) | func (s *SysRoleInsertReq) Generate(model *models.SysRole) {
    method GetId (line 69) | func (s *SysRoleInsertReq) GetId() interface{} {
  type SysRoleUpdateReq (line 73) | type SysRoleUpdateReq struct
    method Generate (line 90) | func (s *SysRoleUpdateReq) Generate(model *models.SysRole) {
    method GetId (line 106) | func (s *SysRoleUpdateReq) GetId() interface{} {
  type UpdateStatusReq (line 110) | type UpdateStatusReq struct
    method Generate (line 116) | func (s *UpdateStatusReq) Generate(model *models.SysRole) {
    method GetId (line 123) | func (s *UpdateStatusReq) GetId() interface{} {
  type SysRoleByName (line 127) | type SysRoleByName struct
  type SysRoleGetReq (line 131) | type SysRoleGetReq struct
    method GetId (line 135) | func (s *SysRoleGetReq) GetId() interface{} {
  type SysRoleDeleteReq (line 139) | type SysRoleDeleteReq struct
    method GetId (line 143) | func (s *SysRoleDeleteReq) GetId() interface{} {
  type RoleDataScopeReq (line 148) | type RoleDataScopeReq struct
    method Generate (line 154) | func (s *RoleDataScopeReq) Generate(model *models.SysRole) {
  type DeptIdList (line 162) | type DeptIdList struct

FILE: app/admin/service/dto/sys_user.go
  type SysUserGetPageReq (line 10) | type SysUserGetPageReq struct
    method GetNeedSearch (line 36) | func (m *SysUserGetPageReq) GetNeedSearch() interface{} {
  type SysUserOrder (line 25) | type SysUserOrder struct
  type DeptJoin (line 32) | type DeptJoin struct
  type ResetSysUserPwdReq (line 40) | type ResetSysUserPwdReq struct
    method GetId (line 46) | func (s *ResetSysUserPwdReq) GetId() interface{} {
    method Generate (line 50) | func (s *ResetSysUserPwdReq) Generate(model *models.SysUser) {
  type UpdateSysUserAvatarReq (line 57) | type UpdateSysUserAvatarReq struct
    method GetId (line 63) | func (s *UpdateSysUserAvatarReq) GetId() interface{} {
    method Generate (line 67) | func (s *UpdateSysUserAvatarReq) Generate(model *models.SysUser) {
  type UpdateSysUserStatusReq (line 74) | type UpdateSysUserStatusReq struct
    method GetId (line 80) | func (s *UpdateSysUserStatusReq) GetId() interface{} {
    method Generate (line 84) | func (s *UpdateSysUserStatusReq) Generate(model *models.SysUser) {
  type SysUserInsertReq (line 91) | type SysUserInsertReq struct
    method Generate (line 108) | func (s *SysUserInsertReq) Generate(model *models.SysUser) {
    method GetId (line 127) | func (s *SysUserInsertReq) GetId() interface{} {
  type SysUserUpdateReq (line 131) | type SysUserUpdateReq struct
    method Generate (line 147) | func (s *SysUserUpdateReq) Generate(model *models.SysUser) {
    method GetId (line 164) | func (s *SysUserUpdateReq) GetId() interface{} {
  type SysUserById (line 168) | type SysUserById struct
    method GetId (line 173) | func (s *SysUserById) GetId() interface{} {
    method GenerateM (line 181) | func (s *SysUserById) GenerateM() (common.ActiveRecord, error) {
  type PassWord (line 186) | type PassWord struct

FILE: app/admin/service/sys_api.go
  type SysApi (line 16) | type SysApi struct
    method GetPage (line 21) | func (e *SysApi) GetPage(c *dto.SysApiGetPageReq, p *actions.DataPermi...
    method Get (line 53) | func (e *SysApi) Get(d *dto.SysApiGetReq, p *actions.DataPermission, m...
    method Update (line 75) | func (e *SysApi) Update(c *dto.SysApiUpdateReq, p *actions.DataPermiss...
    method Remove (line 92) | func (e *SysApi) Remove(d *dto.SysApiDeleteReq, p *actions.DataPermiss...
    method CheckStorageSysApi (line 110) | func (e *SysApi) CheckStorageSysApi(c *[]runtime.Router) error {

FILE: app/admin/service/sys_config.go
  type SysConfig (line 13) | type SysConfig struct
    method GetPage (line 18) | func (e *SysConfig) GetPage(c *dto.SysConfigGetPageReq, list *[]models...
    method Get (line 34) | func (e *SysConfig) Get(d *dto.SysConfigGetReq, model *models.SysConfi...
    method Insert (line 53) | func (e *SysConfig) Insert(c *dto.SysConfigControl) error {
    method Update (line 66) | func (e *SysConfig) Update(c *dto.SysConfigControl) error {
    method SetSysConfig (line 85) | func (e *SysConfig) SetSysConfig(c *[]dto.GetSetSysConfigReq) error {
    method GetForSet (line 106) | func (e *SysConfig) GetForSet(c *[]dto.GetSetSysConfigReq) error {
    method UpdateForSet (line 119) | func (e *SysConfig) UpdateForSet(c *[]dto.GetSetSysConfigReq) error {
    method Remove (line 143) | func (e *SysConfig) Remove(d *dto.SysConfigDeleteReq) error {
    method GetWithKey (line 160) | func (e *SysConfig) GetWithKey(c *dto.SysConfigByKeyReq, resp *dto.Get...
    method GetWithKeyList (line 172) | func (e *SysConfig) GetWithKeyList(c *dto.SysConfigGetToSysAppReq, lis...

FILE: app/admin/service/sys_dept.go
  type SysDept (line 16) | type SysDept struct
    method Get (line 38) | func (e *SysDept) Get(d *dto.SysDeptGetReq, model *models.SysDept) err...
    method Insert (line 60) | func (e *SysDept) Insert(c *dto.SysDeptInsertReq) error {
    method Update (line 95) | func (e *SysDept) Update(c *dto.SysDeptUpdateReq) error {
    method Remove (line 130) | func (e *SysDept) Remove(d *dto.SysDeptDeleteReq) error {
    method getList (line 147) | func (e *SysDept) getList(c *dto.SysDeptGetPageReq, list *[]models.Sys...
    method SetDeptTree (line 164) | func (e *SysDept) SetDeptTree(c *dto.SysDeptGetPageReq) (m []dto.DeptL...
    method SetDeptPage (line 200) | func (e *SysDept) SetDeptPage(c *dto.SysDeptGetPageReq) (m []models.Sy...
    method deptPageCall (line 213) | func (e *SysDept) deptPageCall(deptlist *[]models.SysDept, menu models...
    method GetWithRoleId (line 240) | func (e *SysDept) GetWithRoleId(roleId int) ([]int, error) {
    method SetDeptLabel (line 257) | func (e *SysDept) SetDeptLabel() (m []dto.DeptLabel, err error) {
  function deptTreeCall (line 184) | func deptTreeCall(deptList *[]models.SysDept, dept dto.DeptLabel) dto.De...
  function deptLabelCall (line 280) | func deptLabelCall(deptList *[]models.SysDept, dept dto.DeptLabel) dto.D...

FILE: app/admin/service/sys_dict_data.go
  type SysDictData (line 14) | type SysDictData struct
    method GetPage (line 19) | func (e *SysDictData) GetPage(c *dto.SysDictDataGetPageReq, list *[]mo...
    method Get (line 38) | func (e *SysDictData) Get(d *dto.SysDictDataGetReq, model *models.SysD...
    method Insert (line 58) | func (e *SysDictData) Insert(c *dto.SysDictDataInsertReq) error {
    method Update (line 71) | func (e *SysDictData) Update(c *dto.SysDictDataUpdateReq) error {
    method Remove (line 89) | func (e *SysDictData) Remove(c *dto.SysDictDataDeleteReq) error {
    method GetAll (line 106) | func (e *SysDictData) GetAll(c *dto.SysDictDataGetPageReq, list *[]mod...

FILE: app/admin/service/sys_dict_type.go
  type SysDictType (line 15) | type SysDictType struct
    method GetPage (line 20) | func (e *SysDictType) GetPage(c *dto.SysDictTypeGetPageReq, list *[]mo...
    method Get (line 39) | func (e *SysDictType) Get(d *dto.SysDictTypeGetReq, model *models.SysD...
    method Insert (line 57) | func (e *SysDictType) Insert(c *dto.SysDictTypeInsertReq) error {
    method Update (line 75) | func (e *SysDictType) Update(c *dto.SysDictTypeUpdateReq) error {
    method Remove (line 93) | func (e *SysDictType) Remove(d *dto.SysDictTypeDeleteReq) error {
    method GetAll (line 110) | func (e *SysDictType) GetAll(c *dto.SysDictTypeGetPageReq, list *[]mod...

FILE: app/admin/service/sys_login_log.go
  type SysLoginLog (line 14) | type SysLoginLog struct
    method GetPage (line 19) | func (e *SysLoginLog) GetPage(c *dto.SysLoginLogGetPageReq, list *[]mo...
    method Get (line 38) | func (e *SysLoginLog) Get(d *dto.SysLoginLogGetReq, model *models.SysL...
    method Remove (line 55) | func (e *SysLoginLog) Remove(c *dto.SysLoginLogDeleteReq) error {

FILE: app/admin/service/sys_menu.go
  type SysMenu (line 20) | type SysMenu struct
    method GetPage (line 25) | func (e *SysMenu) GetPage(c *dto.SysMenuGetPageReq, menus *[]models.Sy...
    method getPage (line 43) | func (e *SysMenu) getPage(c *dto.SysMenuGetPageReq, list *[]models.Sys...
    method Get (line 62) | func (e *SysMenu) Get(d *dto.SysMenuGetReq, model *models.SysMenu) *Sy...
    method Insert (line 89) | func (e *SysMenu) Insert(c *dto.SysMenuInsertReq) *SysMenu {
    method initPaths (line 124) | func (e *SysMenu) initPaths(tx *gorm.DB, menu *models.SysMenu) error {
    method Update (line 146) | func (e *SysMenu) Update(c *dto.SysMenuUpdateReq) *SysMenu {
    method Remove (line 189) | func (e *SysMenu) Remove(d *dto.SysMenuDeleteReq) *SysMenu {
    method GetList (line 206) | func (e *SysMenu) GetList(c *dto.SysMenuGetPageReq, list *[]models.Sys...
    method SetLabel (line 223) | func (e *SysMenu) SetLabel() (m []dto.MenuLabel, err error) {
    method GetSysMenuByRoleName (line 243) | func (e *SysMenu) GetSysMenuByRoleName(roleName ...string) ([]models.S...
    method SetMenuRole (line 379) | func (e *SysMenu) SetMenuRole(roleName string) (m []models.SysMenu, er...
    method getByRoleName (line 392) | func (e *SysMenu) getByRoleName(roleName string) ([]models.SysMenu, er...
  function menuLabelCall (line 276) | func menuLabelCall(eList *[]models.SysMenu, dept dto.MenuLabel) dto.Menu...
  function menuCall (line 305) | func menuCall(menuList *[]models.SysMenu, menu models.SysMenu) models.Sy...
  function menuDistinct (line 344) | func menuDistinct(menuList []models.SysMenu) (result []models.SysMenu) {
  function recursiveSetMenu (line 355) | func recursiveSetMenu(orm *gorm.DB, mIds []int, menus *[]models.SysMenu)...

FILE: app/admin/service/sys_opera_log.go
  type SysOperaLog (line 14) | type SysOperaLog struct
    method GetPage (line 19) | func (e *SysOperaLog) GetPage(c *dto.SysOperaLogGetPageReq, list *[]mo...
    method Get (line 38) | func (e *SysOperaLog) Get(d *dto.SysOperaLogGetReq, model *models.SysO...
    method Insert (line 56) | func (e *SysOperaLog) Insert(model *models.SysOperaLog) error {
    method Remove (line 70) | func (e *SysOperaLog) Remove(d *dto.SysOperaLogDeleteReq) error {

FILE: app/admin/service/sys_post.go
  type SysPost (line 14) | type SysPost struct
    method GetPage (line 19) | func (e *SysPost) GetPage(c *dto.SysPostPageReq, list *[]models.SysPos...
    method Get (line 38) | func (e *SysPost) Get(d *dto.SysPostGetReq, model *models.SysPost) err...
    method Insert (line 58) | func (e *SysPost) Insert(c *dto.SysPostInsertReq) error {
    method Update (line 71) | func (e *SysPost) Update(c *dto.SysPostUpdateReq) error {
    method Remove (line 90) | func (e *SysPost) Remove(d *dto.SysPostDeleteReq) error {

FILE: app/admin/service/sys_role.go
  type SysRole (line 19) | type SysRole struct
    method GetPage (line 24) | func (e *SysRole) GetPage(c *dto.SysRoleGetPageReq, list *[]models.Sys...
    method Get (line 43) | func (e *SysRole) Get(d *dto.SysRoleGetReq, model *models.SysRole) err...
    method Insert (line 65) | func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnf...
    method Update (line 131) | func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnf...
    method Remove (line 196) | func (e *SysRole) Remove(c *dto.SysRoleDeleteReq, cb *casbin.SyncedEnf...
    method GetRoleMenuId (line 229) | func (e *SysRole) GetRoleMenuId(roleId int) ([]int, error) {
    method UpdateDataScope (line 243) | func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole {
    method UpdateStatus (line 284) | func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error {
    method GetWithName (line 313) | func (e *SysRole) GetWithName(d *dto.SysRoleByName, model *models.SysR...
    method GetById (line 338) | func (e *SysRole) GetById(roleId int) ([]string, error) {

FILE: app/admin/service/sys_role_menu.go
  type SysRoleMenu (line 8) | type SysRoleMenu struct

FILE: app/admin/service/sys_user.go
  type SysUser (line 17) | type SysUser struct
    method GetPage (line 22) | func (e *SysUser) GetPage(c *dto.SysUserGetPageReq, p *actions.DataPer...
    method Get (line 42) | func (e *SysUser) Get(d *dto.SysUserById, p *actions.DataPermission, m...
    method Insert (line 63) | func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
    method Update (line 87) | func (e *SysUser) Update(c *dto.SysUserUpdateReq, p *actions.DataPermi...
    method UpdateAvatar (line 116) | func (e *SysUser) UpdateAvatar(c *dto.UpdateSysUserAvatarReq, p *actio...
    method UpdateStatus (line 139) | func (e *SysUser) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *actio...
    method ResetPwd (line 162) | func (e *SysUser) ResetPwd(c *dto.ResetSysUserPwdReq, p *actions.DataP...
    method Remove (line 185) | func (e *SysUser) Remove(c *dto.SysUserById, p *actions.DataPermission...
    method UpdatePwd (line 204) | func (e *SysUser) UpdatePwd(id int, oldPassword, newPassword string, p...
    method GetProfile (line 251) | func (e *SysUser) GetProfile(c *dto.SysUserById, user *models.SysUser,...

FILE: app/jobs/apis/sys_job.go
  type SysJob (line 14) | type SysJob struct
    method RemoveJobForService (line 19) | func (e SysJob) RemoveJobForService(c *gin.Context) {
    method StartJobForService (line 43) | func (e SysJob) StartJobForService(c *gin.Context) {

FILE: app/jobs/examples.go
  function InitJob (line 11) | func InitJob() {
  type ExamplesOne (line 20) | type ExamplesOne struct
    method Exec (line 23) | func (t ExamplesOne) Exec(arg interface{}) error {

FILE: app/jobs/jobbase.go
  type JobCore (line 24) | type JobCore struct
  type HttpJob (line 34) | type HttpJob struct
    method Run (line 67) | func (h *HttpJob) Run() {
    method addJob (line 164) | func (h *HttpJob) addJob(c *cron.Cron) (int, error) {
  type ExecJob (line 38) | type ExecJob struct
    method Run (line 42) | func (e *ExecJob) Run() {
    method addJob (line 174) | func (e *ExecJob) addJob(c *cron.Cron) (int, error) {
  function Setup (line 99) | func Setup(dbs map[string]*gorm.DB) {
  function setup (line 109) | func setup(key string, db *gorm.DB) {
  function AddJob (line 156) | func AddJob(c *cron.Cron, job Job) (int, error) {
  function Remove (line 185) | func Remove(c *cron.Cron, entryID int) chan bool {

FILE: app/jobs/models/sys_job.go
  type SysJob (line 8) | type SysJob struct
    method TableName (line 26) | func (*SysJob) TableName() string {
    method Generate (line 30) | func (e *SysJob) Generate() models.ActiveRecord {
    method GetId (line 35) | func (e *SysJob) GetId() interface{} {
    method SetCreateBy (line 39) | func (e *SysJob) SetCreateBy(createBy int) {
    method SetUpdateBy (line 43) | func (e *SysJob) SetUpdateBy(updateBy int) {
    method GetList (line 47) | func (e *SysJob) GetList(tx *gorm.DB, list interface{}) (err error) {
    method Update (line 52) | func (e *SysJob) Update(tx *gorm.DB, id interface{}) (err error) {
    method RemoveAllEntryID (line 56) | func (e *SysJob) RemoveAllEntryID(tx *gorm.DB) (update SysJob, err err...

FILE: app/jobs/router/int_router.go
  function InitRouter (line 14) | func InitRouter() {

FILE: app/jobs/router/router.go
  function initRouter (line 14) | func initRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gi...
  function noCheckRoleRouter (line 25) | func noCheckRoleRouter(r *gin.Engine) {
  function checkRoleRouter (line 35) | func checkRoleRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) {

FILE: app/jobs/router/sys_job.go
  function init (line 13) | func init() {
  function registerSysJobRouter (line 18) | func registerSysJobRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJW...

FILE: app/jobs/service/dto/sys_job.go
  type SysJobSearch (line 12) | type SysJobSearch struct
    method GetNeedSearch (line 22) | func (m *SysJobSearch) GetNeedSearch() interface{} {
    method Bind (line 26) | func (m *SysJobSearch) Bind(ctx *gin.Context) error {
    method Generate (line 35) | func (m *SysJobSearch) Generate() dto.Index {
  type SysJobControl (line 40) | type SysJobControl struct
    method Bind (line 54) | func (s *SysJobControl) Bind(ctx *gin.Context) error {
    method Generate (line 58) | func (s *SysJobControl) Generate() dto.Control {
    method GenerateM (line 63) | func (s *SysJobControl) GenerateM() (common.ActiveRecord, error) {
    method GetId (line 79) | func (s *SysJobControl) GetId() interface{} {
  type SysJobById (line 83) | type SysJobById struct
    method Generate (line 87) | func (s *SysJobById) Generate() dto.Control {
    method GenerateM (line 92) | func (s *SysJobById) GenerateM() (common.ActiveRecord, error) {
  type SysJobItem (line 96) | type SysJobItem struct

FILE: app/jobs/service/sys_job.go
  type SysJob (line 15) | type SysJob struct
    method RemoveJob (line 21) | func (e *SysJob) RemoveJob(c *dto.GeneralDelDto) error {
    method StartJob (line 48) | func (e *SysJob) StartJob(c *dto.GeneralGetDto) error {

FILE: app/jobs/type.go
  type Job (line 5) | type Job interface
  type JobExec (line 10) | type JobExec interface
  function CallExec (line 14) | func CallExec(e JobExec, arg interface{}) error {

FILE: app/other/apis/file.go
  type FileResponse (line 19) | type FileResponse struct
  constant path (line 27) | path = "static/uploadfile/"
  type File (line 29) | type File struct
    method UploadFile (line 44) | func (e File) UploadFile(c *gin.Context) {
    method handleSingleFile (line 61) | func (e File) handleSingleFile(c *gin.Context, urlPrefix string) {
    method handleMultipleFiles (line 69) | func (e File) handleMultipleFiles(c *gin.Context, urlPrefix string) {
    method handleBase64File (line 74) | func (e File) handleBase64File(c *gin.Context, urlPrefix string) {
    method baseImg (line 79) | func (e File) baseImg(c *gin.Context, fileResponse FileResponse, urlPr...
    method multipleFile (line 109) | func (e File) multipleFile(c *gin.Context, urlPrefix string) []FileRes...
    method singleFile (line 143) | func (e File) singleFile(c *gin.Context, fileResponse FileResponse, ur...
    method buildFileResponse (line 169) | func (e File) buildFileResponse(filePath, urlPrefix, fileName, fileTyp...
  function thirdUpload (line 179) | func thirdUpload(source string, name string, path string) error {
  function ossUpload (line 189) | func ossUpload(name string, path string) error {
  function qiniuUpload (line 194) | func qiniuUpload(name string, path string) error {

FILE: app/other/apis/sys_server_monitor.go
  constant B (line 21) | B  = 1
  constant KB (line 22) | KB = 1024 * B
  constant MB (line 23) | MB = 1024 * KB
  constant GB (line 24) | GB = 1024 * MB
  type ServerMonitor (line 31) | type ServerMonitor struct
    method ServerInfo (line 46) | func (e ServerMonitor) ServerInfo(c *gin.Context) {
  function GetHourDiffer (line 36) | func GetHourDiffer(startTime, endTime string) int64 {
  function getOSInfo (line 72) | func getOSInfo() map[string]interface{} {
  function getMemoryInfo (line 88) | func getMemoryInfo() map[string]interface{} {
  function getSwapInfo (line 97) | func getSwapInfo() map[string]interface{} {
  function getCPUInfo (line 105) | func getCPUInfo() map[string]interface{} {
  function getDiskInfo (line 116) | func getDiskInfo() map[string]interface{} {
  function getNetworkInfo (line 146) | func getNetworkInfo() map[string]interface{} {
  function trackNetworkSpeed (line 154) | func trackNetworkSpeed() (uint64, uint64) {
  function isListContainsStr (line 176) | func isListContainsStr(list []string, str string) bool {

FILE: app/other/apis/tools/db_columns.go
  method GetDBColumnList (line 20) | func (e Gen) GetDBColumnList(c *gin.Context) {

FILE: app/other/apis/tools/db_tables.go
  method GetDBTableList (line 22) | func (e Gen) GetDBTableList(c *gin.Context) {

FILE: app/other/apis/tools/gen.go
  type Gen (line 21) | type Gen struct
    method Preview (line 25) | func (e Gen) Preview(c *gin.Context) {
    method GenCode (line 113) | func (e Gen) GenCode(c *gin.Context) {
    method GenApiToFile (line 139) | func (e Gen) GenApiToFile(c *gin.Context) {
    method NOActionsGen (line 164) | func (e Gen) NOActionsGen(c *gin.Context, tab tools.SysTables) {
    method genApiToFile (line 255) | func (e Gen) genApiToFile(c *gin.Context, tab tools.SysTables) {
    method GenMenuAndApi (line 284) | func (e Gen) GenMenuAndApi(c *gin.Context) {

FILE: app/other/apis/tools/sys_tables.go
  type SysTable (line 15) | type SysTable struct
    method GetPage (line 28) | func (e SysTable) GetPage(c *gin.Context) {
    method Get (line 70) | func (e SysTable) Get(c *gin.Context) {
    method GetSysTablesInfo (line 95) | func (e SysTable) GetSysTablesInfo(c *gin.Context) {
    method GetSysTablesTree (line 124) | func (e SysTable) GetSysTablesTree(c *gin.Context) {
    method Insert (line 156) | func (e SysTable) Insert(c *gin.Context) {
    method Update (line 310) | func (e SysTable) Update(c *gin.Context) {
    method Delete (line 342) | func (e SysTable) Delete(c *gin.Context) {
  function genTableInit (line 187) | func genTableInit(tx *gorm.DB, tablesList []string, i int, c *gin.Contex...

FILE: app/other/models/tools/db_columns.go
  type DBColumns (line 11) | type DBColumns struct
    method GetPage (line 26) | func (e *DBColumns) GetPage(tx *gorm.DB, pageSize int, pageIndex int) ...
    method GetList (line 50) | func (e *DBColumns) GetList(tx *gorm.DB) ([]DBColumns, error) {

FILE: app/other/models/tools/db_tables.go
  type DBTables (line 12) | type DBTables struct
    method GetPage (line 22) | func (e *DBTables) GetPage(tx *gorm.DB, pageSize int, pageIndex int) (...
    method Get (line 46) | func (e *DBTables) Get(tx *gorm.DB) (DBTables, error) {

FILE: app/other/models/tools/sys_columns.go
  type SysColumns (line 9) | type SysColumns struct
    method TableName (line 51) | func (*SysColumns) TableName() string {
    method GetList (line 55) | func (e *SysColumns) GetList(tx *gorm.DB, exclude bool) ([]SysColumns,...
    method Create (line 76) | func (e *SysColumns) Create(tx *gorm.DB) (SysColumns, error) {
    method Update (line 88) | func (e *SysColumns) Update(tx *gorm.DB) (update SysColumns, err error) {

FILE: app/other/models/tools/sys_tables.go
  type SysTables (line 10) | type SysTables struct
    method TableName (line 46) | func (*SysTables) TableName() string {
    method GetPage (line 56) | func (e *SysTables) GetPage(tx *gorm.DB, pageSize int, pageIndex int) ...
    method Get (line 77) | func (e *SysTables) Get(tx *gorm.DB, exclude bool) (SysTables, error) {
    method GetTree (line 104) | func (e *SysTables) GetTree(tx *gorm.DB) ([]SysTables, error) {
    method Create (line 135) | func (e *SysTables) Create(tx *gorm.DB) (SysTables, error) {
    method Update (line 153) | func (e *SysTables) Update(tx *gorm.DB) (update SysTables, err error) {
    method Delete (line 207) | func (e *SysTables) Delete(db *gorm.DB) (success bool, err error) {
    method BatchDelete (line 228) | func (e *SysTables) BatchDelete(tx *gorm.DB, id []int) (Result bool, e...
  type Params (line 50) | type Params struct

FILE: app/other/router/file.go
  function init (line 9) | func init() {
  function registerFileRouter (line 14) | func registerFileRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTM...

FILE: app/other/router/gen_router.go
  function init (line 10) | func init() {
  function sysNoCheckRoleRouter (line 14) | func sysNoCheckRoleRouter(v1 *gin.RouterGroup ,authMiddleware *jwt.GinJW...
  function registerDBRouter (line 33) | func registerDBRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid...
  function registerSysTableRouter (line 42) | func registerSysTableRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gin...

FILE: app/other/router/init_router.go
  function InitRouter (line 13) | func InitRouter() {

FILE: app/other/router/monitor.go
  function init (line 11) | func init() {
  function registerMonitorRouter (line 16) | func registerMonitorRouter(v1 *gin.RouterGroup) {

FILE: app/other/router/router.go
  function initRouter (line 14) | func initRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gi...
  function noCheckRoleRouter (line 25) | func noCheckRoleRouter(r *gin.Engine) {
  function checkRoleRouter (line 35) | func checkRoleRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) {

FILE: app/other/router/sys_server_monitor.go
  function init (line 10) | func init() {
  function registerSysServerMonitorRouter (line 15) | func registerSysServerMonitorRouter(v1 *gin.RouterGroup, authMiddleware ...

FILE: app/other/service/dto/sys_tables.go
  type SysTableSearch (line 3) | type SysTableSearch struct

FILE: cmd/api/jobs.go
  function init (line 5) | func init() {

FILE: cmd/api/other.go
  function init (line 5) | func init() {

FILE: cmd/api/server.go
  function init (line 51) | func init() {
  function setup (line 59) | func setup() {
  function run (line 79) | func run() error {
  function tip (line 159) | func tip() {
  function initRouter (line 164) | func initRouter() {

FILE: cmd/app/server.go
  function init (line 26) | func init() {
  function run (line 30) | func run() {
  function genFile (line 40) | func genFile() error {

FILE: cmd/cobra.go
  function tip (line 37) | func tip() {
  function init (line 44) | func init() {
  function Execute (line 53) | func Execute() {

FILE: cmd/config/server.go
  function init (line 25) | func init() {
  function run (line 29) | func run() {

FILE: cmd/migrate/migration/init.go
  type Migration (line 16) | type Migration struct
    method GetDb (line 22) | func (e *Migration) GetDb() *gorm.DB {
    method SetDb (line 26) | func (e *Migration) SetDb(db *gorm.DB) {
    method SetVersion (line 30) | func (e *Migration) SetVersion(k string, f func(db *gorm.DB, version s...
    method Migrate (line 36) | func (e *Migration) Migrate() {
  function GetFilename (line 63) | func GetFilename(s string) string {

FILE: cmd/migrate/migration/models/by.go
  type ControlBy (line 9) | type ControlBy struct
  type Model (line 14) | type Model struct
  type ModelTime (line 18) | type ModelTime struct

FILE: cmd/migrate/migration/models/casbin_rule.go
  type CasbinRule (line 4) | type CasbinRule struct
    method TableName (line 15) | func (CasbinRule) TableName() string {

FILE: cmd/migrate/migration/models/initdb.go
  function InitDb (line 13) | func InitDb(db *gorm.DB) (err error) {
  function ExecSql (line 39) | func ExecSql(db *gorm.DB, filePath string) error {
  function Ioutil (line 63) | func Ioutil(filePath string) (string, error) {

FILE: cmd/migrate/migration/models/model.go
  type BaseModel (line 7) | type BaseModel struct

FILE: cmd/migrate/migration/models/role_dept.go
  type SysRoleDept (line 3) | type SysRoleDept struct
    method TableName (line 8) | func (SysRoleDept) TableName() string {

FILE: cmd/migrate/migration/models/sys_api.go
  type SysApi (line 3) | type SysApi struct
    method TableName (line 14) | func (SysApi) TableName() string {

FILE: cmd/migrate/migration/models/sys_columns.go
  type SysColumns (line 3) | type SysColumns struct
    method TableName (line 42) | func (SysColumns) TableName() string {

FILE: cmd/migrate/migration/models/sys_config.go
  type SysConfig (line 3) | type SysConfig struct
    method TableName (line 15) | func (SysConfig) TableName() string {

FILE: cmd/migrate/migration/models/sys_dept.go
  type SysDept (line 3) | type SysDept struct
    method TableName (line 17) | func (SysDept) TableName() string {

FILE: cmd/migrate/migration/models/sys_dict_data.go
  type DictData (line 3) | type DictData struct
    method TableName (line 19) | func (DictData) TableName() string {

FILE: cmd/migrate/migration/models/sys_dict_type.go
  type DictType (line 3) | type DictType struct
    method TableName (line 13) | func (DictType) TableName() string {

FILE: cmd/migrate/migration/models/sys_job.go
  type SysJob (line 3) | type SysJob struct
    method TableName (line 19) | func (SysJob) TableName() string {

FILE: cmd/migrate/migration/models/sys_login_log.go
  type SysLoginLog (line 7) | type SysLoginLog struct
    method TableName (line 24) | func (SysLoginLog) TableName() string {

FILE: cmd/migrate/migration/models/sys_menu.go
  type SysMenu (line 3) | type SysMenu struct
    method TableName (line 25) | func (SysMenu) TableName() string {

FILE: cmd/migrate/migration/models/sys_opera_log.go
  type SysOperaLog (line 7) | type SysOperaLog struct
    method TableName (line 32) | func (SysOperaLog) TableName() string {

FILE: cmd/migrate/migration/models/sys_post.go
  type SysPost (line 3) | type SysPost struct
    method TableName (line 14) | func (SysPost) TableName() string {

FILE: cmd/migrate/migration/models/sys_role.go
  type SysRole (line 3) | type SysRole struct
    method TableName (line 18) | func (SysRole) TableName() string {

FILE: cmd/migrate/migration/models/sys_tables.go
  type SysTables (line 3) | type SysTables struct
    method TableName (line 35) | func (SysTables) TableName() string {

FILE: cmd/migrate/migration/models/sys_user.go
  type SysUser (line 8) | type SysUser struct
    method TableName (line 27) | func (*SysUser) TableName() string {
    method Encrypt (line 32) | func (e *SysUser) Encrypt() (err error) {
    method BeforeCreate (line 46) | func (e *SysUser) BeforeCreate(_ *gorm.DB) error {

FILE: cmd/migrate/migration/models/tb_demo.go
  type TbDemo (line 3) | type TbDemo struct
    method TableName (line 10) | func (TbDemo) TableName() string {

FILE: cmd/migrate/migration/version-local/doc.go
  function init (line 3) | func init() {

FILE: cmd/migrate/migration/version/1599190683659_tables.go
  function init (line 14) | func init() {
  function _1599190683659Tables (line 19) | func _1599190683659Tables(db *gorm.DB, version string) error {

FILE: cmd/migrate/migration/version/1653638869132_migrate.go
  function init (line 13) | func init() {
  function _1653638869132Test (line 18) | func _1653638869132Test(db *gorm.DB, version string) error {

FILE: cmd/migrate/server.go
  function init (line 39) | func init() {
  function run (line 46) | func run() {
  function migrateModel (line 61) | func migrateModel() error {
  function initDB (line 90) | func initDB() {
  function genFile (line 99) | func genFile() error {

FILE: cmd/version/server.go
  function run (line 23) | func run() error {

FILE: common/actions/create.go
  function CreateAction (line 17) | func CreateAction(control dto.Control) gin.HandlerFunc {

FILE: common/actions/delete.go
  function DeleteAction (line 17) | func DeleteAction(control dto.Control) gin.HandlerFunc {

FILE: common/actions/index.go
  function IndexAction (line 18) | func IndexAction(m models.ActiveRecord, d dto.Index, f func() interface{...

FILE: common/actions/permission.go
  type DataPermission (line 15) | type DataPermission struct
  function PermissionAction (line 22) | func PermissionAction() gin.HandlerFunc {
  function newDataPermission (line 46) | func newDataPermission(tx *gorm.DB, userId interface{}) (*DataPermission...
  function Permission (line 62) | func Permission(tableName string, p *DataPermission) func(db *gorm.DB) *...
  function getPermissionFromContext (line 82) | func getPermissionFromContext(c *gin.Context) *DataPermission {
  function GetPermissionFromContext (line 94) | func GetPermissionFromContext(c *gin.Context) *DataPermission {

FILE: common/actions/type.go
  constant PermissionKey (line 4) | PermissionKey = "dataPermission"

FILE: common/actions/update.go
  function UpdateAction (line 17) | func UpdateAction(control dto.Control) gin.HandlerFunc {

FILE: common/actions/view.go
  function ViewAction (line 18) | func ViewAction(control dto.Control, f func() interface{}) gin.HandlerFu...

FILE: common/apis/api.go
  type Api (line 18) | type Api struct
    method AddError (line 25) | func (e *Api) AddError(err error) {
    method MakeContext (line 35) | func (e *Api) MakeContext(c *gin.Context) *Api {
    method GetLogger (line 42) | func (e *Api) GetLogger() *logger.Helper {
    method Bind (line 46) | func (e *Api) Bind(d interface{}, bindings ...binding.Binding) *Api {
    method GetOrm (line 84) | func (e *Api) GetOrm() (*gorm.DB, error) {
    method MakeOrm (line 94) | func (e *Api) MakeOrm() *Api {
    method MakeService (line 111) | func (e *Api) MakeService(c *service.Service) *Api {
    method Error (line 118) | func (e *Api) Error(code int, err error, msg string) {
    method OK (line 123) | func (e *Api) OK(data interface{}, msg string) {
    method PageOK (line 128) | func (e *Api) PageOK(result interface{}, count int, pageIndex int, pag...
    method Custom (line 133) | func (e *Api) Custom(data gin.H) {

FILE: common/database/initialize.go
  function Setup (line 21) | func Setup() {
  function setupSimpleDatabase (line 27) | func setupSimpleDatabase(host string, c *toolsConfig.Database) {

FILE: common/dto/auto_form.go
  type AutoForm (line 3) | type AutoForm struct
  type Config (line 17) | type Config struct
  type Option (line 38) | type Option struct
  type Slot (line 43) | type Slot struct
  type Field (line 50) | type Field struct
  type Style (line 72) | type Style struct

FILE: common/dto/generate.go
  type ObjectById (line 11) | type ObjectById struct
    method Bind (line 16) | func (s *ObjectById) Bind(ctx *gin.Context) error {
    method GetId (line 47) | func (s *ObjectById) GetId() interface{} {
  type ObjectGetReq (line 55) | type ObjectGetReq struct
    method Bind (line 59) | func (s *ObjectGetReq) Bind(ctx *gin.Context) error {
    method GetId (line 74) | func (s *ObjectGetReq) GetId() interface{} {
  type ObjectDeleteReq (line 78) | type ObjectDeleteReq struct
    method Bind (line 82) | func (s *ObjectDeleteReq) Bind(ctx *gin.Context) error {
    method GetId (line 104) | func (s *ObjectDeleteReq) GetId() interface{} {

FILE: common/dto/order.go
  function OrderDest (line 8) | func OrderDest(sort string, bl bool) func(db *gorm.DB) *gorm.DB {

FILE: common/dto/pagination.go
  type Pagination (line 3) | type Pagination struct
    method GetPageIndex (line 8) | func (m *Pagination) GetPageIndex() int {
    method GetPageSize (line 15) | func (m *Pagination) GetPageSize() int {

FILE: common/dto/search.go
  type GeneralDelDto (line 9) | type GeneralDelDto struct
    method GetIds (line 14) | func (g GeneralDelDto) GetIds() []int {
  type GeneralGetDto (line 37) | type GeneralGetDto struct
  function MakeCondition (line 41) | func MakeCondition(q interface{}) func(db *gorm.DB) *gorm.DB {
  function Paginate (line 76) | func Paginate(pageSize, pageIndex int) func(db *gorm.DB) *gorm.DB {

FILE: common/dto/type.go
  type Index (line 8) | type Index interface
  type Control (line 16) | type Control interface

FILE: common/file_store/initialize.go
  type OXS (line 5) | type OXS struct
    method Setup (line 17) | func (e *OXS) Setup(driver DriverType, options ...ClientOption) FileSt...

FILE: common/file_store/interface.go
  type DriverType (line 4) | type DriverType
  constant HuaweiOBS (line 8) | HuaweiOBS DriverType = "HuaweiOBS"
  constant AliYunOSS (line 10) | AliYunOSS DriverType = "AliYunOSS"
  constant QiNiuKodo (line 12) | QiNiuKodo DriverType = "QiNiuKodo"
  type ClientOption (line 15) | type ClientOption
  type FileStoreType (line 20) | type FileStoreType interface

FILE: common/file_store/kodo.go
  type Zone (line 10) | type Zone
  constant HuaDong (line 14) | HuaDong Zone = "HuaDong"
  constant HuaBei (line 16) | HuaBei Zone = "HuaBei"
  constant HuaNan (line 18) | HuaNan Zone = "HuaNan"
  constant BeiMei (line 20) | BeiMei Zone = "BeiMei"
  constant XinJiaPo (line 22) | XinJiaPo Zone = "XinJiaPo"
  type QiNiuKODO (line 25) | type QiNiuKODO struct
    method getToken (line 32) | func (e *QiNiuKODO) getToken() string {
    method Setup (line 45) | func (e *QiNiuKODO) Setup(endpoint, accessKeyID, accessKeySecret, Buck...
    method setZoneORDefault (line 65) | func (e *QiNiuKODO) setZoneORDefault(cfg storage.Config, options ...Cl...
    method UpLoad (line 88) | func (e *QiNiuKODO) UpLoad(yourObjectName string, localFile interface{...
    method GetTempToken (line 108) | func (e *QiNiuKODO) GetTempToken() (string, error) {

FILE: common/file_store/kodo_test.go
  function TestKODOUpload (line 7) | func TestKODOUpload(t *testing.T) {
  function TestKODOGetTempToken (line 17) | func TestKODOGetTempToken(t *testing.T) {

FILE: common/file_store/obs.go
  type HuaWeiOBS (line 9) | type HuaWeiOBS struct
    method Setup (line 14) | func (e *HuaWeiOBS) Setup(endpoint, accessKeyID, accessKeySecret, Buck...
    method UpLoad (line 28) | func (e *HuaWeiOBS) UpLoad(yourObjectName string, localFile interface{...
    method GetTempToken (line 50) | func (e *HuaWeiOBS) GetTempToken() (string, error) {

FILE: common/file_store/obs_test.go
  function TestOBSUpload (line 7) | func TestOBSUpload(t *testing.T) {

FILE: common/file_store/oss.go
  type ALiYunOSS (line 8) | type ALiYunOSS struct
    method Setup (line 15) | func (e *ALiYunOSS) Setup(endpoint, accessKeyID, accessKeySecret, Buck...
    method UpLoad (line 28) | func (e *ALiYunOSS) UpLoad(yourObjectName string, localFile interface{...
    method GetTempToken (line 46) | func (e *ALiYunOSS) GetTempToken() (string, error) {

FILE: common/file_store/oss_test.go
  function TestOSSUpload (line 7) | func TestOSSUpload(t *testing.T) {

FILE: common/global/adm.go
  constant Version (line 5) | Version = "2.2.0"

FILE: common/global/casbin.go
  function LoadPolicy (line 10) | func LoadPolicy(c *gin.Context) (*casbin.SyncedEnforcer, error) {

FILE: common/global/topic.go
  constant LoginLog (line 4) | LoginLog   = "login_log_queue"
  constant OperateLog (line 5) | OperateLog = "operate_log_queue"
  constant ApiCheck (line 6) | ApiCheck   = "api_check_queue"

FILE: common/ip.go
  function GetClientIP (line 8) | func GetClientIP(c *gin.Context) string {

FILE: common/middleware/auth.go
  function AuthInit (line 12) | func AuthInit() (*jwt.GinJWTMiddleware, error) {

FILE: common/middleware/customerror.go
  function CustomError (line 14) | func CustomError(c *gin.Context) {

FILE: common/middleware/db.go
  function WithContextDb (line 8) | func WithContextDb(c *gin.Context) {

FILE: common/middleware/demo.go
  function DemoEvn (line 9) | func DemoEvn() gin.HandlerFunc {

FILE: common/middleware/handler/auth.go
  function PayloadFunc (line 21) | func PayloadFunc(data interface{}) jwt.MapClaims {
  function IdentityHandler (line 37) | func IdentityHandler(c *gin.Context) interface{} {
  function Authenticator (line 63) | func Authenticator(c *gin.Context) (interface{}, error) {
  function LoginLogToDB (line 110) | func LoginLogToDB(c *gin.Context, status string, msg string, username st...
  function LogOut (line 153) | func LogOut(c *gin.Context) {
  function Authorizator (line 162) | func Authorizator(data interface{}, c *gin.Context) bool {
  function Unauthorized (line 177) | func Unauthorized(c *gin.Context, code int, message string) {

FILE: common/middleware/handler/httpshandler.go
  function TlsHandler (line 10) | func TlsHandler() gin.HandlerFunc {

FILE: common/middleware/handler/login.go
  type Login (line 9) | type Login struct
    method GetUser (line 16) | func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, err ...

FILE: common/middleware/handler/ping.go
  function Ping (line 7) | func Ping(c *gin.Context) {

FILE: common/middleware/handler/role.go
  type SysRole (line 5) | type SysRole struct
    method TableName (line 22) | func (SysRole) TableName() string {

FILE: common/middleware/handler/user.go
  type SysUser (line 8) | type SysUser struct
    method TableName (line 31) | func (*SysUser) TableName() string {
    method AfterFind (line 35) | func (e *SysUser) AfterFind(_ *gorm.DB) error {

FILE: common/middleware/header.go
  function NoCache (line 12) | func NoCache(c *gin.Context) {
  function Options (line 22) | func Options(c *gin.Context) {
  function Secure (line 37) | func Secure(c *gin.Context) {

FILE: common/middleware/init.go
  constant JwtTokenCheck (line 11) | JwtTokenCheck   string = "JwtToken"
  constant RoleCheck (line 12) | RoleCheck       string = "AuthCheckRole"
  constant PermissionCheck (line 13) | PermissionCheck string = "PermissionAction"
  function InitMiddleware (line 16) | func InitMiddleware(r *gin.Engine) {

FILE: common/middleware/logger.go
  function LoggerToFile (line 25) | func LoggerToFile() gin.HandlerFunc {
  function SetDBOperLog (line 104) | func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUr...

FILE: common/middleware/permission.go
  function AuthCheckRole (line 15) | func AuthCheckRole() gin.HandlerFunc {

FILE: common/middleware/request_id.go
  function RequestId (line 14) | func RequestId(trafficKey string) gin.HandlerFunc {

FILE: common/middleware/sentinel.go
  function Sentinel (line 12) | func Sentinel() gin.HandlerFunc {

FILE: common/middleware/settings.go
  type UrlInfo (line 3) | type UrlInfo struct

FILE: common/middleware/trace.go
  function Trace (line 9) | func Trace() gin.HandlerFunc {

FILE: common/models/by.go
  type ControlBy (line 9) | type ControlBy struct
    method SetCreateBy (line 15) | func (e *ControlBy) SetCreateBy(createBy int) {
    method SetUpdateBy (line 20) | func (e *ControlBy) SetUpdateBy(updateBy int) {
  type Model (line 24) | type Model struct
  type ModelTime (line 28) | type ModelTime struct

FILE: common/models/menu.go
  constant Directory (line 6) | Directory string = "M"
  constant Menu (line 8) | Menu      string = "C"
  constant Button (line 10) | Button    string = "F"

FILE: common/models/migrate.go
  type Migration (line 5) | type Migration struct
    method TableName (line 10) | func (Migration) TableName() string {

FILE: common/models/response.go
  type Response (line 3) | type Response struct
    method ReturnOK (line 21) | func (res *Response) ReturnOK() *Response {
    method ReturnError (line 27) | func (res *Response) ReturnError(code int) *Response {
  type Page (line 13) | type Page struct

FILE: common/models/type.go
  type ActiveRecord (line 5) | type ActiveRecord interface

FILE: common/models/user.go
  type BaseUser (line 10) | type BaseUser struct
    method SetPassword (line 18) | func (u *BaseUser) SetPassword(value string) {
    method GetPasswordHash (line 25) | func (u *BaseUser) GetPasswordHash() string {
    method generateSalt (line 34) | func (u *BaseUser) generateSalt() {
    method Verify (line 39) | func (u *BaseUser) Verify(db *gorm.DB, tableName string) bool {

FILE: common/response/binding.go
  constant _ (line 12) | _ uint8 = iota
  constant json (line 13) | json
  constant xml (line 14) | xml
  constant yaml (line 15) | yaml
  constant form (line 16) | form
  constant query (line 17) | query
  type bindConstructor (line 22) | type bindConstructor struct
    method GetBindingForGin (line 27) | func (e *bindConstructor) GetBindingForGin(d interface{}) []binding.Bi...
    method resolve (line 53) | func (e *bindConstructor) resolve(d interface{}) []uint8 {
    method getBinding (line 92) | func (e *bindConstructor) getBinding(name string) []uint8 {
    method setBinding (line 98) | func (e *bindConstructor) setBinding(name string, bs []uint8) {

FILE: common/service/service.go
  type Service (line 10) | type Service struct
    method AddError (line 18) | func (db *Service) AddError(err error) error {

FILE: common/storage/initialize.go
  function Setup (line 19) | func Setup() {
  function setupCache (line 25) | func setupCache() {
  function setupCaptcha (line 33) | func setupCaptcha() {
  function setupQueue (line 37) | func setupQueue() {

FILE: config/extend.go
  type Extend (line 10) | type Extend struct
  type AMap (line 14) | type AMap struct

FILE: docs/admin/admin_docs.go
  constant docTemplateadmin (line 7) | docTemplateadmin = `{
  function init (line 4371) | func init() {

FILE: main.go
  function main (line 19) | func main() {

FILE: static/form-generator/js/chunk-vendors.971555db.js
  class h (line 1) | class h{constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.bef...
    method constructor (line 1) | constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.beforeExp...
  function p (line 1) | function p(t,e={}){e.keyword=t;const s=new h(t,e);return l.set(t,s),s}
  function u (line 1) | function u(t,e){return new h(t,{beforeExpr:i,binop:e})}
  function it (line 1) | function it(t){switch(t){case 10:case 13:case 8232:case 8233:return!0;de...
  function nt (line 1) | function nt(t){switch(t){case 9:case 11:case 12:case 32:case 160:case 57...
  class at (line 1) | class at{constructor(t,e){this.line=t,this.column=e}}
    method constructor (line 1) | constructor(t,e){this.line=t,this.column=e}
  class ot (line 1) | class ot{constructor(t,e){this.start=t,this.end=e}}
    method constructor (line 1) | constructor(t,e){this.start=t,this.end=e}
  function ct (line 1) | function ct(t,e){let s,i=1,r=0;st.lastIndex=0;while((s=st.exec(t))&&s.in...
  class ht (line 1) | class ht{constructor(){this.sawUnambiguousESM=!1,this.ambiguousScriptDif...
    method constructor (line 1) | constructor(){this.sawUnambiguousESM=!1,this.ambiguousScriptDifferentA...
    method hasPlugin (line 1) | hasPlugin(t){return this.plugins.has(t)}
    method getPluginOption (line 1) | getPluginOption(t,e){if(this.hasPlugin(t))return this.plugins.get(t)[e]}
  function lt (line 1) | function lt(t){return t[t.length-1]}
  class pt (line 1) | class pt extends ht{addComment(t){this.filename&&(t.loc.filename=this.fi...
    method addComment (line 1) | addComment(t){this.filename&&(t.loc.filename=this.filename),this.state...
    method adjustCommentsAfterTrailingComma (line 1) | adjustCommentsAfterTrailingComma(t,e,s){if(0===this.state.leadingComme...
    method processComment (line 1) | processComment(t){if("Program"===t.type&&t.body.length>0)return;const ...
  class dt (line 1) | class dt extends pt{getLocationForPosition(t){let e;return e=t===this.st...
    method getLocationForPosition (line 1) | getLocationForPosition(t){let e;return e=t===this.state.start?this.sta...
    method raise (line 1) | raise(t,e,...s){return this.raiseWithData(t,void 0,e,...s)}
    method raiseWithData (line 1) | raiseWithData(t,e,s,...i){const r=this.getLocationForPosition(t),n=s.r...
    method _raise (line 1) | _raise(t,e){const s=new SyntaxError(e);if(Object.assign(s,t),this.opti...
  function ft (line 1) | function ft(t){return null!=t&&"Property"===t.type&&"init"===t.kind&&!1=...
  method estreeParseRegExpLiteral (line 1) | estreeParseRegExpLiteral({pattern:t,flags:e}){let s=null;try{s=new RegEx...
  method estreeParseBigIntLiteral (line 1) | estreeParseBigIntLiteral(t){const e="undefined"!==typeof BigInt?BigInt(t...
  method estreeParseLiteral (line 1) | estreeParseLiteral(t){return this.parseLiteral(t,"Literal")}
  method directiveToStmt (line 1) | directiveToStmt(t){const e=t.value,s=this.startNodeAt(t.start,t.loc.star...
  method initFunction (line 1) | initFunction(t,e){super.initFunction(t,e),t.expression=!1}
  method checkDeclaration (line 1) | checkDeclaration(t){ft(t)?this.checkDeclaration(t.value):super.checkDecl...
  method checkGetterSetterParams (line 1) | checkGetterSetterParams(t){const e=t,s="get"===e.kind?0:1,i=e.start;e.va...
  method checkLVal (line 1) | checkLVal(t,e=V,s,i,r){switch(t.type){case"ObjectPattern":t.properties.f...
  method checkProto (line 1) | checkProto(t,e,s,i){t.method||super.checkProto(t,e,s,i)}
  method isValidDirective (line 1) | isValidDirective(t){var e;return"ExpressionStatement"===t.type&&"Literal...
  method stmtToDirective (line 1) | stmtToDirective(t){const e=super.stmtToDirective(t),s=t.expression.value...
  method parseBlockBody (line 1) | parseBlockBody(t,e,s,i){super.parseBlockBody(t,e,s,i);const r=t.directiv...
  method pushClassMethod (line 1) | pushClassMethod(t,e,s,i,r,n){this.parseMethod(e,s,i,r,n,"ClassMethod",!0...
  method parseExprAtom (line 1) | parseExprAtom(t){switch(this.state.type){case d.num:case d.string:return...
  method parseLiteral (line 1) | parseLiteral(t,e,s,i){const r=super.parseLiteral(t,e,s,i);return r.raw=r...
  method parseFunctionBody (line 1) | parseFunctionBody(t,e,s=!1){super.parseFunctionBody(t,e,s),t.expression=...
  method parseMethod (line 1) | parseMethod(t,e,s,i,r,n,a=!1){let o=this.startNode();return o.kind=t.kin...
  method parseObjectMethod (line 1) | parseObjectMethod(t,e,s,i,r){const n=super.parseObjectMethod(t,e,s,i,r);...
  method parseObjectProperty (line 1) | parseObjectProperty(t,e,s,i,r){const n=super.parseObjectProperty(t,e,s,i...
  method toAssignable (line 1) | toAssignable(t){return ft(t)?(this.toAssignable(t.value),t):super.toAssi...
  method toAssignableObjectExpressionProp (line 1) | toAssignableObjectExpressionProp(t,e){if("get"===t.kind||"set"===t.kind)...
  method finishCallExpression (line 1) | finishCallExpression(t,e){return super.finishCallExpression(t,e),"Import...
  method toReferencedListDeep (line 1) | toReferencedListDeep(t,e){t&&super.toReferencedListDeep(t,e)}
  method parseExport (line 1) | parseExport(t){switch(super.parseExport(t),t.type){case"ExportAllDeclara...
  method parseSubscript (line 1) | parseSubscript(...t){const e=super.parseSubscript(...t);return"MemberExp...
  class yt (line 1) | class yt{constructor(t,e,s,i){this.token=t,this.isExpr=!!e,this.preserve...
    method constructor (line 1) | constructor(t,e,s,i){this.token=t,this.isExpr=!!e,this.preserveSpace=!...
  function Et (line 1) | function Et(t,e){let s=65536;for(let i=0,r=e.length;i<r;i+=2){if(s+=e[i]...
  function At (line 1) | function At(t){return t<65?36===t:t<=90||(t<97?95===t:t<=122||(t<=65535?...
  function St (line 1) | function St(t){return t<48?36===t:t<58||!(t<65)&&(t<=90||(t<97?95===t:t<...
  function Ot (line 1) | function Ot(t,e){return e&&"await"===t||"enum"===t}
  function Dt (line 1) | function Dt(t,e){return Ot(t,e)||Nt.has(t)}
  function Mt (line 1) | function Mt(t){return It.has(t)}
  function Lt (line 1) | function Lt(t,e){return Dt(t,e)||Mt(t)}
  function _t (line 1) | function _t(t){return kt.has(t)}
  function jt (line 1) | function jt(t,e){return 64===t&&64===e}
  function Ut (line 1) | function Ut(t){return"DeclareExportAllDeclaration"===t.type||"DeclareExp...
  function qt (line 1) | function qt(t){return"type"===t.importKind||"typeof"===t.importKind}
  function Vt (line 1) | function Vt(t){return(t.type===d.name||!!t.type.keyword)&&"from"!==t.value}
  function zt (line 1) | function zt(t,e){const s=[],i=[];for(let r=0;r<t.length;r++)(e(t[r],r,t)...
  method constructor (line 1) | constructor(t,e){super(t,e),this.flowPragma=void 0}
  method shouldParseTypes (line 1) | shouldParseTypes(){return this.getPluginOption("flow","all")||"flow"===t...
  method shouldParseEnums (line 1) | shouldParseEnums(){return!!this.getPluginOption("flow","enums")}
  method finishToken (line 1) | finishToken(t,e){return t!==d.string&&t!==d.semi&&t!==d.interpreterDirec...
  method addComment (line 1) | addComment(t){if(void 0===this.flowPragma){const e=Wt.exec(t.value);if(e...
  method flowParseTypeInitialiser (line 1) | flowParseTypeInitialiser(t){const e=this.state.inType;this.state.inType=...
  method flowParsePredicate (line 1) | flowParsePredicate(){const t=this.startNode(),e=this.state.startLoc,s=th...
  method flowParseTypeAndPredicateInitialiser (line 1) | flowParseTypeAndPredicateInitialiser(){const t=this.state.inType;this.st...
  method flowParseDeclareClass (line 1) | flowParseDeclareClass(t){return this.next(),this.flowParseInterfaceish(t...
  method flowParseDeclareFunction (line 1) | flowParseDeclareFunction(t){this.next();const e=t.id=this.parseIdentifie...
  method flowParseDeclare (line 1) | flowParseDeclare(t,e){if(this.match(d._class))return this.flowParseDecla...
  method flowParseDeclareVariable (line 1) | flowParseDeclareVariable(t){return this.next(),t.id=this.flowParseTypeAn...
  method flowParseDeclareModule (line 1) | flowParseDeclareModule(t){this.scope.enter(f),this.match(d.string)?t.id=...
  method flowParseDeclareExportDeclaration (line 1) | flowParseDeclareExportDeclaration(t,e){if(this.expect(d._export),this.ea...
  method flowParseDeclareModuleExports (line 1) | flowParseDeclareModuleExports(t){return this.next(),this.expectContextua...
  method flowParseDeclareTypeAlias (line 1) | flowParseDeclareTypeAlias(t){return this.next(),this.flowParseTypeAlias(...
  method flowParseDeclareOpaqueType (line 1) | flowParseDeclareOpaqueType(t){return this.next(),this.flowParseOpaqueTyp...
  method flowParseDeclareInterface (line 1) | flowParseDeclareInterface(t){return this.next(),this.flowParseInterfacei...
  method flowParseInterfaceish (line 1) | flowParseInterfaceish(t,e=!1){if(t.id=this.flowParseRestrictedIdentifier...
  method flowParseInterfaceExtends (line 1) | flowParseInterfaceExtends(){const t=this.startNode();return t.id=this.fl...
  method flowParseInterface (line 1) | flowParseInterface(t){return this.flowParseInterfaceish(t),this.finishNo...
  method checkNotUnderscore (line 1) | checkNotUnderscore(t){"_"===t&&this.raise(this.state.start,Bt.Unexpected...
  method checkReservedType (line 1) | checkReservedType(t,e,s){Ft.has(t)&&this.raise(e,s?Bt.AssignReservedType...
  method flowParseRestrictedIdentifier (line 1) | flowParseRestrictedIdentifier(t,e){return this.checkReservedType(this.st...
  method flowParseTypeAlias (line 1) | flowParseTypeAlias(t){return t.id=this.flowParseRestrictedIdentifier(!1,...
  method flowParseOpaqueType (line 1) | flowParseOpaqueType(t,e){return this.expectContextual("type"),t.id=this....
  method flowParseTypeParameter (line 1) | flowParseTypeParameter(t=!1){const e=this.state.start,s=this.startNode()...
  method flowParseTypeParameterDeclaration (line 1) | flowParseTypeParameterDeclaration(){const t=this.state.inType,e=this.sta...
  method flowParseTypeParameterInstantiation (line 1) | flowParseTypeParameterInstantiation(){const t=this.startNode(),e=this.st...
  method flowParseTypeParameterInstantiationCallOrNew (line 1) | flowParseTypeParameterInstantiationCallOrNew(){const t=this.startNode(),...
  method flowParseInterfaceType (line 1) | flowParseInterfaceType(){const t=this.startNode();if(this.expectContextu...
  method flowParseObjectPropertyKey (line 1) | flowParseObjectPropertyKey(){return this.match(d.num)||this.match(d.stri...
  method flowParseObjectTypeIndexer (line 1) | flowParseObjectTypeIndexer(t,e,s){return t.static=e,this.lookahead().typ...
  method flowParseObjectTypeInternalSlot (line 1) | flowParseObjectTypeInternalSlot(t,e){return t.static=e,t.id=this.flowPar...
  method flowParseObjectTypeMethodish (line 1) | flowParseObjectTypeMethodish(t){t.params=[],t.rest=null,t.typeParameters...
  method flowParseObjectTypeCallProperty (line 1) | flowParseObjectTypeCallProperty(t,e){const s=this.startNode();return t.s...
  method flowParseObjectType (line 1) | flowParseObjectType({allowStatic:t,allowExact:e,allowSpread:s,allowProto...
  method flowParseObjectTypeProperty (line 1) | flowParseObjectTypeProperty(t,e,s,i,r,n,a){if(this.eat(d.ellipsis)){cons...
  method flowCheckGetterSetterParams (line 1) | flowCheckGetterSetterParams(t){const e="get"===t.kind?0:1,s=t.start,i=t....
  method flowObjectTypeSemicolon (line 1) | flowObjectTypeSemicolon(){this.eat(d.semi)||this.eat(d.comma)||this.matc...
  method flowParseQualifiedTypeIdentifier (line 1) | flowParseQualifiedTypeIdentifier(t,e,s){t=t||this.state.start,e=e||this....
  method flowParseGenericType (line 1) | flowParseGenericType(t,e,s){const i=this.startNodeAt(t,e);return i.typeP...
  method flowParseTypeofType (line 1) | flowParseTypeofType(){const t=this.startNode();return this.expect(d._typ...
  method flowParseTupleType (line 1) | flowParseTupleType(){const t=this.startNode();t.types=[],this.expect(d.b...
  method flowParseFunctionTypeParam (line 1) | flowParseFunctionTypeParam(){let t=null,e=!1,s=null;const i=this.startNo...
  method reinterpretTypeAsFunctionTypeParam (line 1) | reinterpretTypeAsFunctionTypeParam(t){const e=this.startNodeAt(t.start,t...
  method flowParseFunctionTypeParams (line 1) | flowParseFunctionTypeParams(t=[]){let e=null;while(!this.match(d.parenR)...
  method flowIdentToTypeAnnotation (line 1) | flowIdentToTypeAnnotation(t,e,s,i){switch(i.name){case"any":return this....
  method flowParsePrimaryType (line 1) | flowParsePrimaryType(){const t=this.state.start,e=this.state.startLoc,s=...
  method flowParsePostfixType (line 1) | flowParsePostfixType(){const t=this.state.start,e=this.state.startLoc;le...
  method flowParsePrefixType (line 1) | flowParsePrefixType(){const t=this.startNode();return this.eat(d.questio...
  method flowParseAnonFunctionWithoutParens (line 1) | flowParseAnonFunctionWithoutParens(){const t=this.flowParsePrefixType();...
  method flowParseIntersectionType (line 1) | flowParseIntersectionType(){const t=this.startNode();this.eat(d.bitwiseA...
  method flowParseUnionType (line 1) | flowParseUnionType(){const t=this.startNode();this.eat(d.bitwiseOR);cons...
  method flowParseType (line 1) | flowParseType(){const t=this.state.inType;this.state.inType=!0;const e=t...
  method flowParseTypeOrImplicitInstantiation (line 1) | flowParseTypeOrImplicitInstantiation(){if(this.state.type===d.name&&"_"=...
  method flowParseTypeAnnotation (line 1) | flowParseTypeAnnotation(){const t=this.startNode();return t.typeAnnotati...
  method flowParseTypeAnnotatableIdentifier (line 1) | flowParseTypeAnnotatableIdentifier(t){const e=t?this.parseIdentifier():t...
  method typeCastToParameter (line 1) | typeCastToParameter(t){return t.expression.typeAnnotation=t.typeAnnotati...
  method flowParseVariance (line 1) | flowParseVariance(){let t=null;return this.match(d.plusMin)&&(t=this.sta...
  method parseFunctionBody (line 1) | parseFunctionBody(t,e,s=!1){return e?this.forwardNoArrowParamsConversion...
  method parseFunctionBodyAndFinish (line 1) | parseFunctionBodyAndFinish(t,e,s=!1){if(this.match(d.colon)){const e=thi...
  method parseStatement (line 1) | parseStatement(t,e){if(this.state.strict&&this.match(d.name)&&"interface...
  method parseExpressionStatement (line 1) | parseExpressionStatement(t,e){if("Identifier"===e.type)if("declare"===e....
  method shouldParseExportDeclaration (line 1) | shouldParseExportDeclaration(){return this.isContextual("type")||this.is...
  method isExportDefaultSpecifier (line 1) | isExportDefaultSpecifier(){return(!this.match(d.name)||!("type"===this.s...
  method parseExportDefaultExpression (line 1) | parseExportDefaultExpression(){if(this.shouldParseEnums()&&this.isContex...
  method parseConditional (line 1) | parseConditional(t,e,s,i,r){if(!this.match(d.question))return t;if(r){co...
  method tryParseConditionalConsequent (line 1) | tryParseConditionalConsequent(){this.state.noArrowParamsConversionAt.pus...
  method getArrowLikeExpressions (line 1) | getArrowLikeExpressions(t,e){const s=[t],i=[];while(0!==s.length){const ...
  method finishArrowValidation (line 1) | finishArrowValidation(t){var e;this.toAssignableList(t.params,null==(e=t...
  method forwardNoArrowParamsConversionAt (line 1) | forwardNoArrowParamsConversionAt(t,e){let s;return-1!==this.state.noArro...
  method parseParenItem (line 1) | parseParenItem(t,e,s){if(t=super.parseParenItem(t,e,s),this.eat(d.questi...
  method assertModuleNodeAllowed (line 1) | assertModuleNodeAllowed(t){"ImportDeclaration"===t.type&&("type"===t.imp...
  method parseExport (line 1) | parseExport(t){const e=super.parseExport(t);return"ExportNamedDeclaratio...
  method parseExportDeclaration (line 1) | parseExportDeclaration(t){if(this.isContextual("type")){t.exportKind="ty...
  method eatExportStar (line 1) | eatExportStar(t){return!!super.eatExportStar(...arguments)||!(!this.isCo...
  method maybeParseExportNamespaceSpecifier (line 1) | maybeParseExportNamespaceSpecifier(t){const e=this.state.start,s=super.m...
  method parseClassId (line 1) | parseClassId(t,e,s){super.parseClassId(t,e,s),this.isRelational("<")&&(t...
  method parseClassMember (line 1) | parseClassMember(t,e,s,i){const r=this.state.start;if(this.isContextual(...
  method getTokenFromCode (line 1) | getTokenFromCode(t){const e=this.input.charCodeAt(this.state.pos+1);retu...
  method isAssignable (line 1) | isAssignable(t,e){switch(t.type){case"Identifier":case"ObjectPattern":ca...
  method toAssignable (line 1) | toAssignable(t){return"TypeCastExpression"===t.type?super.toAssignable(t...
  method toAssignableList (line 1) | toAssignableList(t,e){for(let s=0;s<t.length;s++){const e=t[s];"TypeCast...
  method toReferencedList (line 1) | toReferencedList(t,e){for(let i=0;i<t.length;i++){var s;const r=t[i];r&&...
  method checkLVal (line 1) | checkLVal(t,e=V,s,i){if("TypeCastExpression"!==t.type)return super.check...
  method parseClassProperty (line 1) | parseClassProperty(t){return this.match(d.colon)&&(t.typeAnnotation=this...
  method parseClassPrivateProperty (line 1) | parseClassPrivateProperty(t){return this.match(d.colon)&&(t.typeAnnotati...
  method isClassMethod (line 1) | isClassMethod(){return this.isRelational("<")||super.isClassMethod()}
  method isClassProperty (line 1) | isClassProperty(){return this.match(d.colon)||super.isClassProperty()}
  method isNonstaticConstructor (line 1) | isNonstaticConstructor(t){return!this.match(d.colon)&&super.isNonstaticC...
  method pushClassMethod (line 1) | pushClassMethod(t,e,s,i,r,n){e.variance&&this.unexpected(e.variance.star...
  method pushClassPrivateMethod (line 1) | pushClassPrivateMethod(t,e,s,i){e.variance&&this.unexpected(e.variance.s...
  method parseClassSuper (line 1) | parseClassSuper(t){if(super.parseClassSuper(t),t.superClass&&this.isRela...
  method parsePropertyName (line 1) | parsePropertyName(t,e){const s=this.flowParseVariance(),i=super.parsePro...
  method parseObjPropValue (line 1) | parseObjPropValue(t,e,s,i,r,n,a,o){let c;t.variance&&this.unexpected(t.v...
  method parseAssignableListItemTypes (line 1) | parseAssignableListItemTypes(t){return this.eat(d.question)&&("Identifie...
  method parseMaybeDefault (line 1) | parseMaybeDefault(t,e,s){const i=super.parseMaybeDefault(t,e,s);return"A...
  method shouldParseDefaultImport (line 1) | shouldParseDefaultImport(t){return qt(t)?Vt(this.state):super.shouldPars...
  method parseImportSpecifierLocal (line 1) | parseImportSpecifierLocal(t,e,s,i){e.local=qt(t)?this.flowParseRestricte...
  method maybeParseDefaultImportSpecifier (line 1) | maybeParseDefaultImportSpecifier(t){t.importKind="value";let e=null;if(t...
  method parseImportSpecifier (line 1) | parseImportSpecifier(t){const e=this.startNode(),s=this.state.start,i=th...
  method parseFunctionParams (line 1) | parseFunctionParams(t,e){const s=t.kind;"get"!==s&&"set"!==s&&this.isRel...
  method parseVarId (line 1) | parseVarId(t,e){super.parseVarId(t,e),this.match(d.colon)&&(t.id.typeAnn...
  method parseAsyncArrowFromCallExpression (line 1) | parseAsyncArrowFromCallExpression(t,e){if(this.match(d.colon)){const e=t...
  method shouldParseAsyncArrow (line 1) | shouldParseAsyncArrow(){return this.match(d.colon)||super.shouldParseAsy...
  method parseMaybeAssign (line 1) | parseMaybeAssign(t,e,s,i){var r;let n,a=null;if(this.hasPlugin("jsx")&&(...
  method parseArrow (line 1) | parseArrow(t){if(this.match(d.colon)){const e=this.tryParse(()=>{const e...
  method shouldParseArrow (line 1) | shouldParseArrow(){return this.match(d.colon)||super.shouldParseArrow()}
  method setArrowFunctionParameters (line 1) | setArrowFunctionParameters(t,e){-1!==this.state.noArrowParamsConversionA...
  method checkParams (line 1) | checkParams(t,e,s){if(!s||-1===this.state.noArrowParamsConversionAt.inde...
  method parseParenAndDistinguishExpression (line 1) | parseParenAndDistinguishExpression(t){return super.parseParenAndDistingu...
  method parseSubscripts (line 1) | parseSubscripts(t,e,s,i){if("Identifier"===t.type&&"async"===t.name&&-1!...
  method parseSubscript (line 1) | parseSubscript(t,e,s,i,r){if(this.match(d.questionDot)&&this.isLookahead...
  method parseNewArguments (line 1) | parseNewArguments(t){let e=null;this.shouldParseTypes()&&this.isRelation...
  method parseAsyncArrowWithTypeParameters (line 1) | parseAsyncArrowWithTypeParameters(t,e){const s=this.startNodeAt(t,e);if(...
  method readToken_mult_modulo (line 1) | readToken_mult_modulo(t){const e=this.input.charCodeAt(this.state.pos+1)...
  method readToken_pipe_amp (line 1) | readToken_pipe_amp(t){const e=this.input.charCodeAt(this.state.pos+1);12...
  method parseTopLevel (line 1) | parseTopLevel(t,e){const s=super.parseTopLevel(t,e);return this.state.ha...
  method skipBlockComment (line 1) | skipBlockComment(){if(this.hasPlugin("flowComments")&&this.skipFlowComme...
  method skipFlowComment (line 1) | skipFlowComment(){const{pos:t}=this.state;let e=2;while([32,9].includes(...
  method hasFlowCommentCompletion (line 1) | hasFlowCommentCompletion(){const t=this.input.indexOf("*/",this.state.po...
  method flowEnumErrorBooleanMemberNotInitialized (line 1) | flowEnumErrorBooleanMemberNotInitialized(t,{enumName:e,memberName:s}){th...
  method flowEnumErrorInvalidMemberName (line 1) | flowEnumErrorInvalidMemberName(t,{enumName:e,memberName:s}){const i=s[0]...
  method flowEnumErrorDuplicateMemberName (line 1) | flowEnumErrorDuplicateMemberName(t,{enumName:e,memberName:s}){this.raise...
  method flowEnumErrorInconsistentMemberValues (line 1) | flowEnumErrorInconsistentMemberValues(t,{enumName:e}){this.raise(t,Bt.En...
  method flowEnumErrorInvalidExplicitType (line 1) | flowEnumErrorInvalidExplicitType(t,{enumName:e,suppliedType:s}){return t...
  method flowEnumErrorInvalidMemberInitializer (line 1) | flowEnumErrorInvalidMemberInitializer(t,{enumName:e,explicitType:s,membe...
  method flowEnumErrorNumberMemberNotInitialized (line 1) | flowEnumErrorNumberMemberNotInitialized(t,{enumName:e,memberName:s}){thi...
  method flowEnumErrorStringMemberInconsistentlyInitailized (line 1) | flowEnumErrorStringMemberInconsistentlyInitailized(t,{enumName:e}){this....
  method flowEnumMemberInit (line 1) | flowEnumMemberInit(){const t=this.state.start,e=()=>this.match(d.comma)|...
  method flowEnumMemberRaw (line 1) | flowEnumMemberRaw(){const t=this.state.start,e=this.parseIdentifier(!0),...
  method flowEnumCheckExplicitTypeMismatch (line 1) | flowEnumCheckExplicitTypeMismatch(t,e,s){const{explicitType:i}=e;null!==...
  method flowEnumMembers (line 1) | flowEnumMembers({enumName:t,explicitType:e}){const s=new Set,i={booleanM...
  method flowEnumStringMembers (line 1) | flowEnumStringMembers(t,e,{enumName:s}){if(0===t.length)return e;if(0===...
  method flowEnumParseExplicitType (line 1) | flowEnumParseExplicitType({enumName:t}){if(this.eatContextual("of")){if(...
  method flowEnumBody (line 1) | flowEnumBody(t,{enumName:e,nameLoc:s}){const i=this.flowEnumParseExplici...
  method flowParseEnumDeclaration (line 1) | flowParseEnumDeclaration(t){const e=this.parseIdentifier();return t.id=e...
  method updateContext (line 1) | updateContext(t){this.match(d.name)&&"of"===this.state.value&&t===d.name...
  function Jt (line 1) | function Jt(t){return!!t&&("JSXOpeningFragment"===t.type||"JSXClosingFra...
  function Qt (line 1) | function Qt(t){if("JSXIdentifier"===t.type)return t.name;if("JSXNamespac...
  method jsxReadToken (line 1) | jsxReadToken(){let t="",e=this.state.pos;for(;;){if(this.state.pos>=this...
  method jsxReadNewLine (line 1) | jsxReadNewLine(t){const e=this.input.charCodeAt(this.state.pos);let s;re...
  method jsxReadString (line 1) | jsxReadString(t){let e="",s=++this.state.pos;for(;;){if(this.state.pos>=...
  method jsxReadEntity (line 1) | jsxReadEntity(){let t,e="",s=0,i=this.input[this.state.pos];const r=++th...
  method jsxReadWord (line 1) | jsxReadWord(){let t;const e=this.state.pos;do{t=this.input.charCodeAt(++...
  method jsxParseIdentifier (line 1) | jsxParseIdentifier(){const t=this.startNode();return this.match(d.jsxNam...
  method jsxParseNamespacedName (line 1) | jsxParseNamespacedName(){const t=this.state.start,e=this.state.startLoc,...
  method jsxParseElementName (line 1) | jsxParseElementName(){const t=this.state.start,e=this.state.startLoc;let...
  method jsxParseAttributeValue (line 1) | jsxParseAttributeValue(){let t;switch(this.state.type){case d.braceL:ret...
  method jsxParseEmptyExpression (line 1) | jsxParseEmptyExpression(){const t=this.startNodeAt(this.state.lastTokEnd...
  method jsxParseSpreadChild (line 1) | jsxParseSpreadChild(t){return this.next(),t.expression=this.parseExpress...
  method jsxParseExpressionContainer (line 1) | jsxParseExpressionContainer(t){return this.match(d.braceR)?t.expression=...
  method jsxParseAttribute (line 1) | jsxParseAttribute(){const t=this.startNode();return this.eat(d.braceL)?(...
  method jsxParseOpeningElementAt (line 1) | jsxParseOpeningElementAt(t,e){const s=this.startNodeAt(t,e);return this....
  method jsxParseOpeningElementAfterName (line 1) | jsxParseOpeningElementAfterName(t){const e=[];while(!this.match(d.slash)...
  method jsxParseClosingElementAt (line 1) | jsxParseClosingElementAt(t,e){const s=this.startNodeAt(t,e);return this....
  method jsxParseElementAt (line 1) | jsxParseElementAt(t,e){const s=this.startNodeAt(t,e),i=[],r=this.jsxPars...
  method jsxParseElement (line 1) | jsxParseElement(){const t=this.state.start,e=this.state.startLoc;return ...
  method parseExprAtom (line 1) | parseExprAtom(t){return this.match(d.jsxText)?this.parseLiteral(this.sta...
  method getTokenFromCode (line 1) | getTokenFromCode(t){if(this.state.inPropertyName)return super.getTokenFr...
  method updateContext (line 1) | updateContext(t){if(this.match(d.braceL)){const e=this.curContext();e===...
  class te (line 1) | class te{constructor(t){this.var=[],this.lexical=[],this.functions=[],th...
    method constructor (line 1) | constructor(t){this.var=[],this.lexical=[],this.functions=[],this.flag...
  class ee (line 1) | class ee{constructor(t,e){this.scopeStack=[],this.undefinedExports=new M...
    method constructor (line 1) | constructor(t,e){this.scopeStack=[],this.undefinedExports=new Map,this...
    method inFunction (line 1) | get inFunction(){return(this.currentVarScope().flags&y)>0}
    method allowSuper (line 1) | get allowSuper(){return(this.currentThisScope().flags&b)>0}
    method allowDirectSuper (line 1) | get allowDirectSuper(){return(this.currentThisScope().flags&v)>0}
    method inClass (line 1) | get inClass(){return(this.currentThisScope().flags&w)>0}
    method inNonArrowFunction (line 1) | get inNonArrowFunction(){return(this.currentThisScope().flags&y)>0}
    method treatFunctionsAsVar (line 1) | get treatFunctionsAsVar(){return this.treatFunctionsAsVarInScope(this....
    method createScope (line 1) | createScope(t){return new te(t)}
    method enter (line 1) | enter(t){this.scopeStack.push(this.createScope(t))}
    method exit (line 1) | exit(){this.scopeStack.pop()}
    method treatFunctionsAsVarInScope (line 1) | treatFunctionsAsVarInScope(t){return!!(t.flags&y||!this.inModule&&t.fl...
    method declareName (line 1) | declareName(t,e,s){let i=this.currentScope();if(e&C||e&k)this.checkRed...
    method maybeExportDefined (line 1) | maybeExportDefined(t,e){this.inModule&&t.flags&m&&this.undefinedExport...
    method checkRedeclarationInScope (line 1) | checkRedeclarationInScope(t,e,s,i){this.isRedeclaredInScope(t,e,s)&&th...
    method isRedeclaredInScope (line 1) | isRedeclaredInScope(t,e,s){return!!(s&E)&&(s&C?t.lexical.indexOf(e)>-1...
    method checkLocalExport (line 1) | checkLocalExport(t){-1===this.scopeStack[0].lexical.indexOf(t.name)&&-...
    method currentScope (line 1) | currentScope(){return this.scopeStack[this.scopeStack.length-1]}
    method currentVarScope (line 1) | currentVarScope(){for(let t=this.scopeStack.length-1;;t--){const e=thi...
    method currentThisScope (line 1) | currentThisScope(){for(let t=this.scopeStack.length-1;;t--){const e=th...
  class se (line 1) | class se extends te{constructor(...t){super(...t),this.types=[],this.enu...
    method constructor (line 1) | constructor(...t){super(...t),this.types=[],this.enums=[],this.constEn...
  class ie (line 1) | class ie extends ee{createScope(t){return new se(t)}declareName(t,e,s){c...
    method createScope (line 1) | createScope(t){return new se(t)}
    method declareName (line 1) | declareName(t,e,s){const i=this.currentScope();if(e&M)return this.mayb...
    method isRedeclaredInScope (line 1) | isRedeclaredInScope(t,e,s){if(t.enums.indexOf(e)>-1){if(s&O){const i=!...
    method checkLocalExport (line 1) | checkLocalExport(t){-1===this.scopeStack[0].types.indexOf(t.name)&&-1=...
  class ce (line 1) | class ce{constructor(){this.stacks=[]}enter(t){this.stacks.push(t)}exit(...
    method constructor (line 1) | constructor(){this.stacks=[]}
    method enter (line 1) | enter(t){this.stacks.push(t)}
    method exit (line 1) | exit(){this.stacks.pop()}
    method currentFlags (line 1) | currentFlags(){return this.stacks[this.stacks.length-1]}
    method hasAwait (line 1) | get hasAwait(){return(this.currentFlags()&ae)>0}
    method hasYield (line 1) | get hasYield(){return(this.currentFlags()&ne)>0}
    method hasReturn (line 1) | get hasReturn(){return(this.currentFlags()&oe)>0}
  function he (line 1) | function he(t,e){return(t?ae:0)|(e?ne:0)}
  function le (line 1) | function le(t){if(null==t)throw new Error(`Unexpected ${t} value.`);retu...
  function pe (line 1) | function pe(t){if(!t)throw new Error("Assert fail")}
  function de (line 1) | function de(t){switch(t){case"any":return"TSAnyKeyword";case"boolean":re...
  method getScopeHandler (line 1) | getScopeHandler(){return ie}
  method tsIsIdentifier (line 1) | tsIsIdentifier(){return this.match(d.name)}
  method tsNextTokenCanFollowModifier (line 1) | tsNextTokenCanFollowModifier(){return this.next(),!this.hasPrecedingLine...
  method tsParseModifier (line 1) | tsParseModifier(t){if(!this.match(d.name))return;const e=this.state.valu...
  method tsParseModifiers (line 1) | tsParseModifiers(t,e){for(;;){const s=this.state.start,i=this.tsParseMod...
  method tsIsListTerminator (line 1) | tsIsListTerminator(t){switch(t){case"EnumMembers":case"TypeMembers":retu...
  method tsParseList (line 1) | tsParseList(t,e){const s=[];while(!this.tsIsListTerminator(t))s.push(e()...
  method tsParseDelimitedList (line 1) | tsParseDelimitedList(t,e){return le(this.tsParseDelimitedListWorker(t,e,...
  method tsParseDelimitedListWorker (line 1) | tsParseDelimitedListWorker(t,e,s){const i=[];for(;;){if(this.tsIsListTer...
  method tsParseBracketedList (line 1) | tsParseBracketedList(t,e,s,i){i||(s?this.expect(d.bracketL):this.expectR...
  method tsParseImportType (line 1) | tsParseImportType(){const t=this.startNode();return this.expect(d._impor...
  method tsParseEntityName (line 1) | tsParseEntityName(t){let e=this.parseIdentifier();while(this.eat(d.dot))...
  method tsParseTypeReference (line 1) | tsParseTypeReference(){const t=this.startNode();return t.typeName=this.t...
  method tsParseThisTypePredicate (line 1) | tsParseThisTypePredicate(t){this.next();const e=this.startNodeAtNode(t);...
  method tsParseThisTypeNode (line 1) | tsParseThisTypeNode(){const t=this.startNode();return this.next(),this.f...
  method tsParseTypeQuery (line 1) | tsParseTypeQuery(){const t=this.startNode();return this.expect(d._typeof...
  method tsParseTypeParameter (line 1) | tsParseTypeParameter(){const t=this.startNode();return t.name=this.parse...
  method tsTryParseTypeParameters (line 1) | tsTryParseTypeParameters(){if(this.isRelational("<"))return this.tsParse...
  method tsParseTypeParameters (line 1) | tsParseTypeParameters(){const t=this.startNode();return this.isRelationa...
  method tsTryNextParseConstantContext (line 1) | tsTryNextParseConstantContext(){return this.lookahead().type===d._const?...
  method tsFillSignature (line 1) | tsFillSignature(t,e){const s=t===d.arrow;e.typeParameters=this.tsTryPars...
  method tsParseBindingListForSignature (line 1) | tsParseBindingListForSignature(){return this.parseBindingList(d.parenR,4...
  method tsParseTypeMemberSemicolon (line 1) | tsParseTypeMemberSemicolon(){this.eat(d.comma)||this.semicolon()}
  method tsParseSignatureMember (line 1) | tsParseSignatureMember(t,e){return this.tsFillSignature(d.colon,e),this....
  method tsIsUnambiguouslyIndexSignature (line 1) | tsIsUnambiguouslyIndexSignature(){return this.next(),this.eat(d.name)&&t...
  method tsTryParseIndexSignature (line 1) | tsTryParseIndexSignature(t){if(!this.match(d.bracketL)||!this.tsLookAhea...
  method tsParsePropertyOrMethodSignature (line 1) | tsParsePropertyOrMethodSignature(t,e){this.eat(d.question)&&(t.optional=...
  method tsParseTypeMember (line 1) | tsParseTypeMember(){const t=this.startNode();if(this.match(d.parenL)||th...
  method tsParseTypeLiteral (line 1) | tsParseTypeLiteral(){const t=this.startNode();return t.members=this.tsPa...
  method tsParseObjectTypeMembers (line 1) | tsParseObjectTypeMembers(){this.expect(d.braceL);const t=this.tsParseLis...
  method tsIsStartOfMappedType (line 1) | tsIsStartOfMappedType(){return this.next(),this.eat(d.plusMin)?this.isCo...
  method tsParseMappedTypeParameter (line 1) | tsParseMappedTypeParameter(){const t=this.startNode();return t.name=this...
  method tsParseMappedType (line 1) | tsParseMappedType(){const t=this.startNode();return this.expect(d.braceL...
  method tsParseTupleType (line 1) | tsParseTupleType(){const t=this.startNode();t.elementTypes=this.tsParseB...
  method tsParseTupleElementType (line 1) | tsParseTupleElementType(){if(this.match(d.ellipsis)){const t=this.startN...
  method tsParseParenthesizedType (line 1) | tsParseParenthesizedType(){const t=this.startNode();return this.expect(d...
  method tsParseFunctionOrConstructorType (line 1) | tsParseFunctionOrConstructorType(t){const e=this.startNode();return"TSCo...
  method tsParseLiteralTypeNode (line 1) | tsParseLiteralTypeNode(){const t=this.startNode();return t.literal=(()=>...
  method tsParseTemplateLiteralType (line 1) | tsParseTemplateLiteralType(){const t=this.startNode(),e=this.parseTempla...
  method tsParseThisTypeOrThisTypePredicate (line 1) | tsParseThisTypeOrThisTypePredicate(){const t=this.tsParseThisTypeNode();...
  method tsParseNonArrayType (line 1) | tsParseNonArrayType(){switch(this.state.type){case d.name:case d._void:c...
  method tsParseArrayTypeOrHigher (line 1) | tsParseArrayTypeOrHigher(){let t=this.tsParseNonArrayType();while(!this....
  method tsParseTypeOperator (line 1) | tsParseTypeOperator(t){const e=this.startNode();return this.expectContex...
  method tsCheckTypeAnnotationForReadOnly (line 1) | tsCheckTypeAnnotationForReadOnly(t){switch(t.typeAnnotation.type){case"T...
  method tsParseInferType (line 1) | tsParseInferType(){const t=this.startNode();this.expectContextual("infer...
  method tsParseTypeOperatorOrHigher (line 1) | tsParseTypeOperatorOrHigher(){const t=["keyof","unique","readonly"].find...
  method tsParseUnionOrIntersectionType (line 1) | tsParseUnionOrIntersectionType(t,e,s){this.eat(s);let i=e();if(this.matc...
  method tsParseIntersectionTypeOrHigher (line 1) | tsParseIntersectionTypeOrHigher(){return this.tsParseUnionOrIntersection...
  method tsParseUnionTypeOrHigher (line 1) | tsParseUnionTypeOrHigher(){return this.tsParseUnionOrIntersectionType("T...
  method tsIsStartOfFunctionType (line 1) | tsIsStartOfFunctionType(){return!!this.isRelational("<")||this.match(d.p...
  method tsSkipParameterStart (line 1) | tsSkipParameterStart(){if(this.match(d.name)||this.match(d._this))return...
  method tsIsUnambiguouslyStartOfFunctionType (line 1) | tsIsUnambiguouslyStartOfFunctionType(){if(this.next(),this.match(d.paren...
  method tsParseTypeOrTypePredicateAnnotation (line 1) | tsParseTypeOrTypePredicateAnnotation(t){return this.tsInType(()=>{const ...
  method tsTryParseTypeOrTypePredicateAnnotation (line 1) | tsTryParseTypeOrTypePredicateAnnotation(){return this.match(d.colon)?thi...
  method tsTryParseTypeAnnotation (line 1) | tsTryParseTypeAnnotation(){return this.match(d.colon)?this.tsParseTypeAn...
  method tsTryParseType (line 1) | tsTryParseType(){return this.tsEatThenParseType(d.colon)}
  method tsParseTypePredicatePrefix (line 1) | tsParseTypePredicatePrefix(){const t=this.parseIdentifier();if(this.isCo...
  method tsParseTypePredicateAsserts (line 1) | tsParseTypePredicateAsserts(){if(!this.match(d.name)||"asserts"!==this.s...
  method tsParseTypeAnnotation (line 1) | tsParseTypeAnnotation(t=!0,e=this.startNode()){return this.tsInType(()=>...
  method tsParseType (line 1) | tsParseType(){pe(this.state.inType);const t=this.tsParseNonConditionalTy...
  method tsParseNonConditionalType (line 1) | tsParseNonConditionalType(){return this.tsIsStartOfFunctionType()?this.t...
  method tsParseTypeAssertion (line 1) | tsParseTypeAssertion(){const t=this.startNode(),e=this.tsTryNextParseCon...
  method tsParseHeritageClause (line 1) | tsParseHeritageClause(t){const e=this.state.start,s=this.tsParseDelimite...
  method tsParseExpressionWithTypeArguments (line 1) | tsParseExpressionWithTypeArguments(){const t=this.startNode();return t.e...
  method tsParseInterfaceDeclaration (line 1) | tsParseInterfaceDeclaration(t){t.id=this.parseIdentifier(),this.checkLVa...
  method tsParseTypeAliasDeclaration (line 1) | tsParseTypeAliasDeclaration(t){return t.id=this.parseIdentifier(),this.c...
  method tsInNoContext (line 1) | tsInNoContext(t){const e=this.state.context;this.state.context=[e[0]];tr...
  method tsInType (line 1) | tsInType(t){const e=this.state.inType;this.state.inType=!0;try{return t(...
  method tsEatThenParseType (line 1) | tsEatThenParseType(t){return this.match(t)?this.tsNextThenParseType():vo...
  method tsExpectThenParseType (line 1) | tsExpectThenParseType(t){return this.tsDoThenParseType(()=>this.expect(t))}
  method tsNextThenParseType (line 1) | tsNextThenParseType(){return this.tsDoThenParseType(()=>this.next())}
  method tsDoThenParseType (line 1) | tsDoThenParseType(t){return this.tsInType(()=>(t(),this.tsParseType()))}
  method tsParseEnumMember (line 1) | tsParseEnumMember(){const t=this.startNode();return t.id=this.match(d.st...
  method tsParseEnumDeclaration (line 1) | tsParseEnumDeclaration(t,e){return e&&(t.const=!0),t.id=this.parseIdenti...
  method tsParseModuleBlock (line 1) | tsParseModuleBlock(){const t=this.startNode();return this.scope.enter(f)...
  method tsParseModuleOrNamespaceDeclaration (line 1) | tsParseModuleOrNamespaceDeclaration(t,e=!1){if(t.id=this.parseIdentifier...
  method tsParseAmbientExternalModuleDeclaration (line 1) | tsParseAmbientExternalModuleDeclaration(t){return this.isContextual("glo...
  method tsParseImportEqualsDeclaration (line 1) | tsParseImportEqualsDeclaration(t,e){return t.isExport=e||!1,t.id=this.pa...
  method tsIsExternalModuleReference (line 1) | tsIsExternalModuleReference(){return this.isContextual("require")&&40===...
  method tsParseModuleReference (line 1) | tsParseModuleReference(){return this.tsIsExternalModuleReference()?this....
  method tsParseExternalModuleReference (line 1) | tsParseExternalModuleReference(){const t=this.startNode();if(this.expect...
  method tsLookAhead (line 1) | tsLookAhead(t){const e=this.state.clone(),s=t();return this.state=e,s}
  method tsTryParseAndCatch (line 1) | tsTryParseAndCatch(t){const e=this.tryParse(e=>t()||e());if(!e.aborted&&...
  method tsTryParse (line 1) | tsTryParse(t){const e=this.state.clone(),s=t();return void 0!==s&&!1!==s...
  method tsTryParseDeclare (line 1) | tsTryParseDeclare(t){if(this.isLineTerminator())return;let e,s=this.stat...
  method tsTryParseExportDeclaration (line 1) | tsTryParseExportDeclaration(){return this.tsParseDeclaration(this.startN...
  method tsParseExpressionStatement (line 1) | tsParseExpressionStatement(t,e){switch(e.name){case"declare":{const e=th...
  method tsParseDeclaration (line 1) | tsParseDeclaration(t,e,s){switch(e){case"abstract":if(this.tsCheckLineTe...
  method tsCheckLineTerminatorAndMatch (line 1) | tsCheckLineTerminatorAndMatch(t,e){return(e||this.match(t))&&!this.isLin...
  method tsTryParseGenericAsyncArrowFunction (line 1) | tsTryParseGenericAsyncArrowFunction(t,e){if(!this.isRelational("<"))retu...
  method tsParseTypeArguments (line 1) | tsParseTypeArguments(){const t=this.startNode();return t.params=this.tsI...
  method tsIsDeclarationStart (line 1) | tsIsDeclarationStart(){if(this.match(d.name))switch(this.state.value){ca...
  method isExportDefaultSpecifier (line 1) | isExportDefaultSpecifier(){return!this.tsIsDeclarationStart()&&super.isE...
  method parseAssignableListItem (line 1) | parseAssignableListItem(t,e){const s=this.state.start,i=this.state.start...
  method parseFunctionBodyAndFinish (line 1) | parseFunctionBodyAndFinish(t,e,s=!1){this.match(d.colon)&&(t.returnType=...
  method registerFunctionStatementId (line 1) | registerFunctionStatementId(t){!t.body&&t.id?this.checkLVal(t.id,q,null,...
  method parseSubscript (line 1) | parseSubscript(t,e,s,i,r){if(!this.hasPrecedingLineBreak()&&this.match(d...
  method parseNewArguments (line 1) | parseNewArguments(t){if(this.isRelational("<")){const e=this.tsTryParseA...
  method parseExprOp (line 1) | parseExprOp(t,e,s,i,r){if(le(d._in.binop)>i&&!this.hasPrecedingLineBreak...
  method checkReservedWord (line 1) | checkReservedWord(t,e,s,i){}
  method checkDuplicateExports (line 1) | checkDuplicateExports(){}
  method parseImport (line 1) | parseImport(t){if(this.match(d.name)||this.match(d.star)||this.match(d.b...
  method parseExport (line 1) | parseExport(t){if(this.match(d._import))return this.expect(d._import),th...
  method isAbstractClass (line 1) | isAbstractClass(){return this.isContextual("abstract")&&this.lookahead()...
  method parseExportDefaultExpression (line 1) | parseExportDefaultExpression(){if(this.isAbstractClass()){const t=this.s...
  method parseStatementContent (line 1) | parseStatementContent(t,e){if(this.state.type===d._const){const t=this.l...
  method parseAccessModifier (line 1) | parseAccessModifier(){return this.tsParseModifier(["public","protected",...
  method parseClassMember (line 1) | parseClassMember(t,e,s,i){this.tsParseModifiers(e,["declare"]);const r=t...
  method parseClassMemberWithIsStatic (line 1) | parseClassMemberWithIsStatic(t,e,s,i,r){this.tsParseModifiers(e,["abstra...
  method parsePostMemberNameModifiers (line 1) | parsePostMemberNameModifiers(t){const e=this.eat(d.question);e&&(t.optio...
  method parseExpressionStatement (line 1) | parseExpressionStatement(t,e){const s="Identifier"===e.type?this.tsParse...
  method shouldParseExportDeclaration (line 1) | shouldParseExportDeclaration(){return!!this.tsIsDeclarationStart()||supe...
  method parseConditional (line 1) | parseConditional(t,e,s,i,r){if(!r||!this.match(d.question))return super....
  method parseParenItem (line 1) | parseParenItem(t,e,s){if(t=super.parseParenItem(t,e,s),this.eat(d.questi...
  method parseExportDeclaration (line 1) | parseExportDeclaration(t){const e=this.state.start,s=this.state.startLoc...
  method parseClassId (line 1) | parseClassId(t,e,s){if((!e||s)&&this.isContextual("implements"))return;s...
  method parseClassPropertyAnnotation (line 1) | parseClassPropertyAnnotation(t){!t.optional&&this.eat(d.bang)&&(t.defini...
  method parseClassProperty (line 1) | parseClassProperty(t){return this.parseClassPropertyAnnotation(t),t.decl...
  method parseClassPrivateProperty (line 1) | parseClassPrivateProperty(t){return t.abstract&&this.raise(t.start,ue.Pr...
  method pushClassMethod (line 1) | pushClassMethod(t,e,s,i,r,n){const a=this.tsTryParseTypeParameters();a&&...
  method pushClassPrivateMethod (line 1) | pushClassPrivateMethod(t,e,s,i){const r=this.tsTryParseTypeParameters();...
  method parseClassSuper (line 1) | parseClassSuper(t){super.parseClassSuper(t),t.superClass&&this.isRelatio...
  method parseObjPropValue (line 1) | parseObjPropValue(t,...e){const s=this.tsTryParseTypeParameters();s&&(t....
  method parseFunctionParams (line 1) | parseFunctionParams(t,e){const s=this.tsTryParseTypeParameters();s&&(t.t...
  method parseVarId (line 1) | parseVarId(t,e){super.parseVarId(t,e),"Identifier"===t.id.type&&this.eat...
  method parseAsyncArrowFromCallExpression (line 1) | parseAsyncArrowFromCallExpression(t,e){return this.match(d.colon)&&(t.re...
  method parseMaybeAssign (line 1) | parseMaybeAssign(...t){var e,s,i,r,n,a,o;let c,h,l,p;if(this.match(d.jsx...
  method parseMaybeUnary (line 1) | parseMaybeUnary(t){return!this.hasPlugin("jsx")&&this.isRelational("<")?...
  method parseArrow (line 1) | parseArrow(t){if(this.match(d.colon)){const e=this.tryParse(t=>{const e=...
  method parseAssignableListItemTypes (line 1) | parseAssignableListItemTypes(t){this.eat(d.question)&&("Identifier"!==t....
  method toAssignable (line 1) | toAssignable(t){switch(t.type){case"TSTypeCastExpression":return super.t...
  method checkLVal (line 1) | checkLVal(t,e=V,s,i){switch(t.type){case"TSTypeCastExpression":return;ca...
  method parseBindingAtom (line 1) | parseBindingAtom(){switch(this.state.type){case d._this:return this.pars...
  method parseMaybeDecoratorArguments (line 1) | parseMaybeDecoratorArguments(t){if(this.isRelational("<")){const e=this....
  method isClassMethod (line 1) | isClassMethod(){return this.isRelational("<")||super.isClassMethod()}
  method isClassProperty (line 1) | isClassProperty(){return this.match(d.bang)||this.match(d.colon)||super....
  method parseMaybeDefault (line 1) | parseMaybeDefault(...t){const e=super.parseMaybeDefault(...t);return"Ass...
  method getTokenFromCode (line 1) | getTokenFromCode(t){return!this.state.inType||62!==t&&60!==t?super.getTo...
  method toAssignableList (line 1) | toAssignableList(t){for(let e=0;e<t.length;e++){const s=t[e];if(s)switch...
  method typeCastToParameter (line 1) | typeCastToParameter(t){return t.expression.typeAnnotation=t.typeAnnotati...
  method toReferencedList (line 1) | toReferencedList(t,e){for(let s=0;s<t.length;s++){const e=t[s];"TSTypeCa...
  method shouldParseArrow (line 1) | shouldParseArrow(){return this.match(d.colon)||super.shouldParseArrow()}
  method shouldParseAsyncArrow (line 1) | shouldParseAsyncArrow(){return this.match(d.colon)||super.shouldParseAsy...
  method canHaveLeadingDecorator (line 1) | canHaveLeadingDecorator(){return super.canHaveLeadingDecorator()||this.i...
  method jsxParseOpeningElementAfterName (line 1) | jsxParseOpeningElementAfterName(t){if(this.isRelational("<")){const e=th...
  method getGetterSetterExpectedParamCount (line 1) | getGetterSetterExpectedParamCount(t){const e=super.getGetterSetterExpect...
  method parsePlaceholder (line 1) | parsePlaceholder(t){if(this.match(d.placeholder)){const e=this.startNode...
  method finishPlaceholder (line 1) | finishPlaceholder(t,e){const s=!(!t.expectedNode||"Placeholder"!==t.type...
  method getTokenFromCode (line 1) | getTokenFromCode(t){return 37===t&&37===this.input.charCodeAt(this.state...
  method parseExprAtom (line 1) | parseExprAtom(){return this.parsePlaceholder("Expression")||super.parseE...
  method parseIdentifier (line 1) | parseIdentifier(){return this.parsePlaceholder("Identifier")||super.pars...
  method checkReservedWord (line 1) | checkReservedWord(t){void 0!==t&&super.checkReservedWord(...arguments)}
  method parseBindingAtom (line 1) | parseBindingAtom(){return this.parsePlaceholder("Pattern")||super.parseB...
  method checkLVal (line 1) | checkLVal(t){"Placeholder"!==t.type&&super.checkLVal(...arguments)}
  method toAssignable (line 1) | toAssignable(t){return t&&"Placeholder"===t.type&&"Expression"===t.expec...
  method verifyBreakContinue (line 1) | verifyBreakContinue(t){t.label&&"Placeholder"===t.label.type||super.veri...
  method parseExpressionStatement (line 1) | parseExpressionStatement(t,e){if("Placeholder"!==e.type||e.extra&&e.extr...
  method parseBlock (line 1) | parseBlock(){return this.parsePlaceholder("BlockStatement")||super.parse...
  method parseFunctionId (line 1) | parseFunctionId(){return this.parsePlaceholder("Identifier")||super.pars...
  method parseClass (line 1) | parseClass(t,e,s){const i=e?"ClassDeclaration":"ClassExpression";this.ne...
  method parseExport (line 1) | parseExport(t){const e=this.parsePlaceholder("Identifier");if(!e)return ...
  method isExportDefaultSpecifier (line 1) | isExportDefaultSpecifier(){if(this.match(d._default)){const t=this.nextT...
  method maybeParseExportDefaultSpecifier (line 1) | maybeParseExportDefaultSpecifier(t){return!!(t.specifiers&&t.specifiers....
  method checkExport (line 1) | checkExport(t){const{specifiers:e}=t;(null==e?void 0:e.length)&&(t.speci...
  method parseImport (line 1) | parseImport(t){const e=this.parsePlaceholder("Identifier");if(!e)return ...
  method parseImportSource (line 1) | parseImportSource(){return this.parsePlaceholder("StringLiteral")||super...
  method parseV8Intrinsic (line 1) | parseV8Intrinsic(){if(this.match(d.modulo)){const t=this.state.start,e=t...
  method parseExprAtom (line 1) | parseExprAtom(){return this.parseV8Intrinsic()||super.parseExprAtom(...a...
  function ge (line 1) | function ge(t,e){return t.some(t=>Array.isArray(t)?t[0]===e:t===e)}
  function xe (line 1) | function xe(t,e,s){const i=t.find(t=>Array.isArray(t)?t[0]===e:t===e);re...
  function we (line 1) | function we(t){if(ge(t,"decorators")){if(ge(t,"decorators-legacy"))throw...
  function Ae (line 1) | function Ae(t){const e={};for(let s=0,i=Object.keys(Ee);s<i.length;s++){...
  class Se (line 1) | class Se{constructor(){this.errors=[],this.potentialArrowAt=-1,this.noAr...
    method constructor (line 1) | constructor(){this.errors=[],this.potentialArrowAt=-1,this.noArrowAt=[...
    method init (line 1) | init(t){this.strict=!1!==t.strictMode&&"module"===t.sourceType,this.cu...
    method curPosition (line 1) | curPosition(){return new at(this.curLine,this.pos-this.lineStart)}
    method clone (line 1) | clone(t){const e=new Se,s=Object.keys(this);for(let i=0,r=s.length;i<r...
  class Oe (line 1) | class Oe{constructor(t){this.type=t.type,this.value=t.value,this.start=t...
    method constructor (line 1) | constructor(t){this.type=t.type,this.value=t.value,this.start=t.start,...
  class De (line 1) | class De extends dt{constructor(t,e){super(),this.tokens=[],this.state=n...
    method constructor (line 1) | constructor(t,e){super(),this.tokens=[],this.state=new Se,this.state.i...
    method pushToken (line 1) | pushToken(t){this.tokens.length=this.state.tokensLength,this.tokens.pu...
    method next (line 1) | next(){this.isLookahead||(this.checkKeywordEscapes(),this.options.toke...
    method eat (line 1) | eat(t){return!!this.match(t)&&(this.next(),!0)}
    method match (line 1) | match(t){return this.state.type===t}
    method lookahead (line 1) | lookahead(){const t=this.state;this.state=t.clone(!0),this.isLookahead...
    method nextTokenStart (line 1) | nextTokenStart(){return this.nextTokenStartSince(this.state.pos)}
    method nextTokenStartSince (line 1) | nextTokenStartSince(t){rt.lastIndex=t;const e=rt.exec(this.input);retu...
    method lookaheadCharCode (line 1) | lookaheadCharCode(){return this.input.charCodeAt(this.nextTokenStart())}
    method setStrict (line 1) | setStrict(t){if(this.state.strict=t,this.match(d.num)||this.match(d.st...
    method curContext (line 1) | curContext(){return this.state.context[this.state.context.length-1]}
    method nextToken (line 1) | nextToken(){const t=this.curContext();if((null==t?void 0:t.preserveSpa...
    method pushComment (line 1) | pushComment(t,e,s,i,r,n){const a={type:t?"CommentBlock":"CommentLine",...
    method skipBlockComment (line 1) | skipBlockComment(){const t=this.state.curPosition(),e=this.state.pos,s...
    method skipLineComment (line 1) | skipLineComment(t){const e=this.state.pos,s=this.state.curPosition();l...
    method skipSpace (line 1) | skipSpace(){t:while(this.state.pos<this.length){const t=this.input.cha...
    method finishToken (line 1) | finishToken(t,e){this.state.end=this.state.pos,this.state.endLoc=this....
    method readToken_numberSign (line 1) | readToken_numberSign(){if(0===this.state.pos&&this.readToken_interpret...
    method readToken_dot (line 1) | readToken_dot(){const t=this.input.charCodeAt(this.state.pos+1);t>=48&...
    method readToken_slash (line 1) | readToken_slash(){if(this.state.exprAllowed&&!this.state.inType)return...
    method readToken_interpreter (line 1) | readToken_interpreter(){if(0!==this.state.pos||this.length<2)return!1;...
    method readToken_mult_modulo (line 1) | readToken_mult_modulo(t){let e=42===t?d.star:d.modulo,s=1,i=this.input...
    method readToken_pipe_amp (line 1) | readToken_pipe_amp(t){const e=this.input.charCodeAt(this.state.pos+1);...
    method readToken_caret (line 1) | readToken_caret(){const t=this.input.charCodeAt(this.state.pos+1);61==...
    method readToken_plus_min (line 1) | readToken_plus_min(t){const e=this.input.charCodeAt(this.state.pos+1);...
    method readToken_lt_gt (line 1) | readToken_lt_gt(t){const e=this.input.charCodeAt(this.state.pos+1);let...
    method readToken_eq_excl (line 1) | readToken_eq_excl(t){const e=this.input.charCodeAt(this.state.pos+1);i...
    method readToken_question (line 1) | readToken_question(){const t=this.input.charCodeAt(this.state.pos+1),e...
    method getTokenFromCode (line 1) | getTokenFromCode(t){switch(t){case 46:return void this.readToken_dot()...
    method finishOp (line 1) | finishOp(t,e){const s=this.input.slice(this.state.pos,this.state.pos+e...
    method readRegexp (line 1) | readRegexp(){const t=this.state.pos;let e,s;for(;;){if(this.state.pos>...
    method readInt (line 1) | readInt(t,e,s,i=!0){const r=this.state.pos,n=16===t?Ne.hex:Ne.decBinOc...
    method readRadixNumber (line 1) | readRadixNumber(t){const e=this.state.pos;let s=!1;this.state.pos+=2;c...
    method readNumber (line 1) | readNumber(t){const e=this.state.pos;let s=!1,i=!1,r=!1;t||null!==this...
    method readCodePoint (line 1) | readCodePoint(t){const e=this.input.charCodeAt(this.state.pos);let s;i...
    method readString (line 1) | readString(t){let e="",s=++this.state.pos;for(;;){if(this.state.pos>=t...
    method readTmplToken (line 1) | readTmplToken(){let t="",e=this.state.pos,s=!1;for(;;){if(this.state.p...
    method readEscapedChar (line 1) | readEscapedChar(t){const e=!t,s=this.input.charCodeAt(++this.state.pos...
    method readHexChar (line 1) | readHexChar(t,e,s){const i=this.state.pos,r=this.readInt(16,t,e,!1);re...
    method readWord1 (line 1) | readWord1(){let t="";this.state.containsEsc=!1;const e=this.state.pos;...
    method isIterator (line 1) | isIterator(t){return"@@iterator"===t||"@@asyncIterator"===t}
    method readWord (line 1) | readWord(){const t=this.readWord1(),e=l.get(t)||d.name;!this.state.isI...
    method checkKeywordEscapes (line 1) | checkKeywordEscapes(){const t=this.state.type.keyword;t&&this.state.co...
    method braceIsBlock (line 1) | braceIsBlock(t){const e=this.curContext();return e===gt.functionExpres...
    method updateContext (line 1) | updateContext(t){const e=this.state.type;let s;!e.keyword||t!==d.dot&&...
  class Me (line 1) | class Me extends De{addExtra(t,e,s){if(!t)return;const i=t.extra=t.extra...
    method addExtra (line 1) | addExtra(t,e,s){if(!t)return;const i=t.extra=t.extra||{};i[e]=s}
    method isRelational (line 1) | isRelational(t){return this.match(d.relational)&&this.state.value===t}
    method isLookaheadRelational (line 1) | isLookaheadRelational(t){const e=this.nextTokenStart();if(this.input.c...
    method expectRelational (line 1) | expectRelational(t){this.isRelational(t)?this.next():this.unexpected(n...
    method isContextual (line 1) | isContextual(t){return this.match(d.name)&&this.state.value===t&&!this...
    method isUnparsedContextual (line 1) | isUnparsedContextual(t,e){const s=t+e.length;return this.input.slice(t...
    method isLookaheadContextual (line 1) | isLookaheadContextual(t){const e=this.nextTokenStart();return this.isU...
    method eatContextual (line 1) | eatContextual(t){return this.isContextual(t)&&this.eat(d.name)}
    method expectContextual (line 1) | expectContextual(t,e){this.eatContextual(t)||this.unexpected(null,e)}
    method canInsertSemicolon (line 1) | canInsertSemicolon(){return this.match(d.eof)||this.match(d.braceR)||t...
    method hasPrecedingLineBreak (line 1) | hasPrecedingLineBreak(){return et.test(this.input.slice(this.state.las...
    method isLineTerminator (line 1) | isLineTerminator(){return this.eat(d.semi)||this.canInsertSemicolon()}
    method semicolon (line 1) | semicolon(){this.isLineTerminator()||this.unexpected(null,d.semi)}
    method expect (line 1) | expect(t,e){this.eat(t)||this.unexpected(e,t)}
    method assertNoSpace (line 1) | assertNoSpace(t="Unexpected space."){this.state.start>this.state.lastT...
    method unexpected (line 1) | unexpected(t,e="Unexpected token"){throw"string"!==typeof e&&(e=`Unexp...
    method expectPlugin (line 1) | expectPlugin(t,e){if(!this.hasPlugin(t))throw this.raiseWithData(null!...
    method expectOnePlugin (line 1) | expectOnePlugin(t,e){if(!t.some(t=>this.hasPlugin(t)))throw this.raise...
    method checkYieldAwaitInDefaultParams (line 1) | checkYieldAwaitInDefaultParams(){-1!==this.state.yieldPos&&(-1===this....
    method tryParse (line 1) | tryParse(t,e=this.state.clone()){const s={node:null};try{const i=t((t=...
    method checkExpressionErrors (line 1) | checkExpressionErrors(t,e){if(!t)return!1;const{shorthandAssign:s,doub...
    method isLiteralPropertyName (line 1) | isLiteralPropertyName(){return this.match(d.name)||!!this.state.type.k...
  class Le (line 1) | class Le{constructor(){this.shorthandAssign=-1,this.doubleProto=-1}}
    method constructor (line 1) | constructor(){this.shorthandAssign=-1,this.doubleProto=-1}
  class _e (line 1) | class _e{constructor(t,e,s){this.type="",this.start=e,this.end=0,this.lo...
    method constructor (line 1) | constructor(t,e,s){this.type="",this.start=e,this.end=0,this.loc=new o...
    method __clone (line 1) | __clone(){const t=new _e,e=Object.keys(this);for(let s=0,i=e.length;s<...
  class Re (line 1) | class Re extends Me{startNode(){return new _e(this,this.state.start,this...
    method startNode (line 1) | startNode(){return new _e(this,this.state.start,this.state.startLoc)}
    method startNodeAt (line 1) | startNodeAt(t,e){return new _e(this,t,e)}
    method startNodeAtNode (line 1) | startNodeAtNode(t){return this.startNodeAt(t.start,t.loc.start)}
    method finishNode (line 1) | finishNode(t,e){return this.finishNodeAt(t,e,this.state.lastTokEnd,thi...
    method finishNodeAt (line 1) | finishNodeAt(t,e,s,i){return t.type=e,t.end=s,t.loc.end=i,this.options...
    method resetStartLocation (line 1) | resetStartLocation(t,e,s){t.start=e,t.loc.start=s,this.options.ranges&...
    method resetEndLocation (line 1) | resetEndLocation(t,e=this.state.lastTokEnd,s=this.state.lastTokEndLoc)...
    method resetStartLocationFromNode (line 1) | resetStartLocationFromNode(t,e){this.resetStartLocation(t,e.start,e.lo...
  class Fe (line 1) | class Fe extends Re{toAssignable(t){var e,s;let i=void 0;switch(("Parent...
    method toAssignable (line 1) | toAssignable(t){var e,s;let i=void 0;switch(("ParenthesizedExpression"...
    method toAssignableObjectExpressionProp (line 1) | toAssignableObjectExpressionProp(t,e){if("ObjectMethod"===t.type){cons...
    method toAssignableList (line 1) | toAssignableList(t,e){let s=t.length;if(s){const i=t[s-1];if("RestElem...
    method toReferencedList (line 1) | toReferencedList(t,e){return t}
    method toReferencedListDeep (line 1) | toReferencedListDeep(t,e){this.toReferencedList(t,e);for(let s=0;s<t.l...
    method parseSpread (line 1) | parseSpread(t,e){const s=this.startNode();return this.next(),s.argumen...
    method parseRestBinding (line 1) | parseRestBinding(){const t=this.startNode();return this.next(),t.argum...
    method parseBindingAtom (line 1) | parseBindingAtom(){switch(this.state.type){case d.bracketL:{const t=th...
    method parseBindingList (line 1) | parseBindingList(t,e,s,i){const r=[];let n=!0;while(!this.eat(t))if(n?...
    method parseAssignableListItem (line 1) | parseAssignableListItem(t,e){const s=this.parseMaybeDefault();this.par...
    method parseAssignableListItemTypes (line 1) | parseAssignableListItemTypes(t){return t}
    method parseMaybeDefault (line 1) | parseMaybeDefault(t,e,s){if(e=e||this.state.startLoc,t=t||this.state.s...
    method checkLVal (line 1) | checkLVal(t,e=V,s,i,r,n=!1){switch(t.type){case"Identifier":if(this.st...
    method checkToRestConversion (line 1) | checkToRestConversion(t){"Identifier"!==t.argument.type&&"MemberExpres...
    method checkCommaAfterRest (line 1) | checkCommaAfterRest(t){this.match(d.comma)&&(this.lookaheadCharCode()=...
    method raiseRestNotLast (line 1) | raiseRestNotLast(t){throw this.raise(t,ut.ElementAfterRest)}
    method raiseTrailingCommaAfterRest (line 1) | raiseTrailingCommaAfterRest(t){this.raise(t,ut.RestTrailingComma)}
  class Be (line 1) | class Be extends Fe{checkProto(t,e,s,i){if("SpreadElement"===t.type||"Ob...
    method checkProto (line 1) | checkProto(t,e,s,i){if("SpreadElement"===t.type||"ObjectMethod"===t.ty...
    method getExpression (line 1) | getExpression(){let t=re;this.hasPlugin("topLevelAwait")&&this.inModul...
    method parseExpression (line 1) | parseExpression(t,e){const s=this.state.start,i=this.state.startLoc,r=...
    method parseMaybeAssign (line 1) | parseMaybeAssign(t,e,s,i){const r=this.state.start,n=this.state.startL...
    method parseMaybeConditional (line 1) | parseMaybeConditional(t,e,s){const i=this.state.start,r=this.state.sta...
    method parseConditional (line 1) | parseConditional(t,e,s,i,r){if(this.eat(d.question)){const r=this.star...
    method parseExprOps (line 1) | parseExprOps(t,e){const s=this.state.start,i=this.state.startLoc,r=thi...
    method parseExprOp (line 1) | parseExprOp(t,e,s,i,r){let n=this.state.type.binop;if(null!=n&&(!r||!t...
    method parseExprOpRightExpr (line 1) | parseExprOpRightExpr(t,e,s){const i=this.state.start,r=this.state.star...
    method parseExprOpBaseRightExpr (line 1) | parseExprOpBaseRightExpr(t,e,s){const i=this.state.start,r=this.state....
    method parseMaybeUnary (line 1) | parseMaybeUnary(t){if(this.isContextual("await")&&this.isAwaitAllowed(...
    method parseExprSubscripts (line 1) | parseExprSubscripts(t){const e=this.state.start,s=this.state.startLoc,...
    method parseSubscripts (line 1) | parseSubscripts(t,e,s,i){const r={optionalChainMember:!1,maybeAsyncArr...
    method parseSubscript (line 1) | parseSubscript(t,e,s,i,r){if(!i&&this.eat(d.doubleColon)){const n=this...
    method parseTaggedTemplateExpression (line 1) | parseTaggedTemplateExpression(t,e,s,i,r){const n=this.startNodeAt(t,e)...
    method atPossibleAsyncArrow (line 1) | atPossibleAsyncArrow(t){return"Identifier"===t.type&&"async"===t.name&...
    method finishCallExpression (line 1) | finishCallExpression(t,e){if("Import"===t.callee.type)if(2===t.argumen...
    method parseCallExpressionArguments (line 1) | parseCallExpressionArguments(t,e,s,i,r){const n=[];let a,o=!0;const c=...
    method shouldParseAsyncArrow (line 1) | shouldParseAsyncArrow(){return this.match(d.arrow)&&!this.canInsertSem...
    method parseAsyncArrowFromCallExpression (line 1) | parseAsyncArrowFromCallExpression(t,e){var s;return this.expect(d.arro...
    method parseNoCallExpr (line 1) | parseNoCallExpr(){const t=this.state.start,e=this.state.startLoc;retur...
    method parseExprAtom (line 1) | parseExprAtom(t){this.state.type===d.slash&&this.readRegexp();const e=...
    method parseBooleanLiteral (line 1) | parseBooleanLiteral(){const t=this.startNode();return t.value=this.mat...
    method parseMaybePrivateName (line 1) | parseMaybePrivateName(t){const e=this.match(d.hash);if(e){this.expectO...
    method parseFunctionExpression (line 1) | parseFunctionExpression(){const t=this.startNode();let e=this.startNod...
    method parseMetaProperty (line 1) | parseMetaProperty(t,e,s){t.meta=e,"function"===e.name&&"sent"===s&&(th...
    method parseImportMetaProperty (line 1) | parseImportMetaProperty(t){const e=this.createIdentifier(this.startNod...
    method parseLiteral (line 1) | parseLiteral(t,e,s,i){s=s||this.state.start,i=i||this.state.startLoc;c...
    method parseParenAndDistinguishExpression (line 1) | parseParenAndDistinguishExpression(t){const e=this.state.start,s=this....
    method shouldParseArrow (line 1) | shouldParseArrow(){return!this.canInsertSemicolon()}
    method parseArrow (line 1) | parseArrow(t){if(this.eat(d.arrow))return t}
    method parseParenItem (line 1) | parseParenItem(t,e,s){return t}
    method parseNew (line 1) | parseNew(){const t=this.startNode();let e=this.startNode();if(this.nex...
    method parseNewArguments (line 1) | parseNewArguments(t){if(this.eat(d.parenL)){const e=this.parseExprList...
    method parseTemplateElement (line 1) | parseTemplateElement(t){const e=this.startNode();return null===this.st...
    method parseTemplate (line 1) | parseTemplate(t){const e=this.startNode();this.next(),e.expressions=[]...
    method parseObj (line 1) | parseObj(t,e,s,i){const r=Object.create(null);let n=!0;const a=this.st...
    method isAsyncProp (line 1) | isAsyncProp(t){return!t.computed&&"Identifier"===t.key.type&&"async"==...
    method parseObjectMember (line 1) | parseObjectMember(t,e){let s=[];if(this.match(d.at)){this.hasPlugin("d...
    method isGetterOrSetterMethod (line 1) | isGetterOrSetterMethod(t,e){return!e&&!t.computed&&"Identifier"===t.ke...
    method getGetterSetterExpectedParamCount (line 1) | getGetterSetterExpectedParamCount(t){return"get"===t.kind?0:1}
    method checkGetterSetterParams (line 1) | checkGetterSetterParams(t){const e=this.getGetterSetterExpectedParamCo...
    method parseObjectMethod (line 1) | parseObjectMethod(t,e,s,i,r){return s||e||this.match(d.parenL)?(i&&thi...
    method parseObjectProperty (line 1) | parseObjectProperty(t,e,s,i,r){return t.shorthand=!1,this.eat(d.colon)...
    method parseObjPropValue (line 1) | parseObjPropValue(t,e,s,i,r,n,a,o){const c=this.parseObjectMethod(t,i,...
    method parsePropertyName (line 1) | parsePropertyName(t,e){if(this.eat(d.bracketL))t.computed=!0,t.key=thi...
    method initFunction (line 1) | initFunction(t,e){t.id=null,t.generator=!1,t.async=!!e}
    method parseMethod (line 1) | parseMethod(t,e,s,i,r,n,a=!1){const o=this.state.yieldPos,c=this.state...
    method parseArrowExpression (line 1) | parseArrowExpression(t,e,s,i){this.scope.enter(y|g),this.prodParam.ent...
    method setArrowFunctionParameters (line 1) | setArrowFunctionParameters(t,e,s){t.params=this.toAssignableList(e,s)}
    method parseFunctionBodyAndFinish (line 1) | parseFunctionBodyAndFinish(t,e,s=!1){this.parseFunctionBody(t,!1,s),th...
    method parseFunctionBody (line 1) | parseFunctionBody(t,e,s=!1){const i=e&&!this.match(d.braceL),r=this.st...
    method isSimpleParamList (line 1) | isSimpleParamList(t){for(let e=0,s=t.length;e<s;e++)if("Identifier"!==...
    method checkParams (line 1) | checkParams(t,e,s,i=!0){const r=Object.create(null);for(let n=0;n<t.pa...
    method parseExprList (line 1) | parseExprList(t,e,s,i){const r=[];let n=!0;while(!this.eat(t)){if(n)n=...
    method parseExprListItem (line 1) | parseExprListItem(t,e,s,i){let r;if(this.match(d.comma))t||this.raise(...
    method parseIdentifier (line 1) | parseIdentifier(t){const e=this.startNode(),s=this.parseIdentifierName...
    method createIdentifier (line 1) | createIdentifier(t,e){return t.name=e,t.loc.identifierName=e,this.fini...
    method parseIdentifierName (line 1) | parseIdentifierName(t,e){let s;if(this.match(d.name))s=this.state.valu...
    method checkReservedWord (line 1) | checkReservedWord(t,e,s,i){if(this.prodParam.hasYield&&"yield"===t)ret...
    method isAwaitAllowed (line 1) | isAwaitAllowed(){return this.scope.inFunction?this.prodParam.hasAwait:...
    method parseAwait (line 1) | parseAwait(){const t=this.startNode();return this.next(),this.state.in...
    method parseYield (line 1) | parseYield(t){const e=this.startNode();return this.state.inParameters?...
    method checkPipelineAtInfixOperator (line 1) | checkPipelineAtInfixOperator(t,e){"smart"===this.getPluginOption("pipe...
    method parseSmartPipelineBody (line 1) | parseSmartPipelineBody(t,e,s){const i=this.checkSmartPipelineBodyStyle...
    method checkSmartPipelineBodyEarlyErrors (line 1) | checkSmartPipelineBodyEarlyErrors(t,e,s){if(this.match(d.arrow))throw ...
    method parseSmartPipelineBodyInStyle (line 1) | parseSmartPipelineBodyInStyle(t,e,s,i){const r=this.startNodeAt(s,i);s...
    method checkSmartPipelineBodyStyle (line 1) | checkSmartPipelineBodyStyle(t){switch(t.type){default:return this.isSi...
    method isSimpleReference (line 1) | isSimpleReference(t){switch(t.type){case"MemberExpression":return!t.co...
    method withTopicPermittingContext (line 1) | withTopicPermittingContext(t){const e=this.state.topicContext;this.sta...
    method withTopicForbiddingContext (line 1) | withTopicForbiddingContext(t){const e=this.state.topicContext;this.sta...
    method withSoloAwaitPermittingContext (line 1) | withSoloAwaitPermittingContext(t){const e=this.state.soloAwait;this.st...
    method registerTopicReference (line 1) | registerTopicReference(){this.state.topicContext.maxTopicIndex=0}
    method primaryTopicReferenceIsAllowedInCurrentTopicContext (line 1) | primaryTopicReferenceIsAllowedInCurrentTopicContext(){return this.stat...
    method topicReferenceWasUsedInCurrentTopicContext (line 1) | topicReferenceWasUsedInCurrentTopicContext(){return null!=this.state.t...
    method parseFSharpPipelineBody (line 1) | parseFSharpPipelineBody(t,e){const s=this.state.start,i=this.state.sta...
  class Ke (line 1) | class Ke extends Be{parseTopLevel(t,e){if(e.sourceType=this.options.sour...
    method parseTopLevel (line 1) | parseTopLevel(t,e){if(e.sourceType=this.options.sourceType,e.interpret...
    method stmtToDirective (line 1) | stmtToDirective(t){const e=t.expression,s=this.startNodeAt(e.start,e.l...
    method parseInterpreterDirective (line 1) | parseInterpreterDirective(){if(!this.match(d.interpreterDirective))ret...
    method isLet (line 1) | isLet(t){if(!this.isContextual("let"))return!1;const e=this.nextTokenS...
    method parseStatement (line 1) | parseStatement(t,e){return this.match(d.at)&&this.parseDecorators(!0),...
    method parseStatementContent (line 1) | parseStatementContent(t,e){let s=this.state.type;const i=this.startNod...
    method assertModuleNodeAllowed (line 1) | assertModuleNodeAllowed(t){this.options.allowImportExportEverywhere||t...
    method takeDecorators (line 1) | takeDecorators(t){const e=this.state.decoratorStack[this.state.decorat...
    method canHaveLeadingDecorator (line 1) | canHaveLeadingDecorator(){return this.match(d._class)}
    method parseDecorators (line 1) | parseDecorators(t){const e=this.state.decoratorStack[this.state.decora...
    method parseDecorator (line 1) | parseDecorator(){this.expectOnePlugin(["decorators-legacy","decorators...
    method parseMaybeDecoratorArguments (line 1) | parseMaybeDecoratorArguments(t){if(this.eat(d.parenL)){const e=this.st...
    method parseBreakContinueStatement (line 1) | parseBreakContinueStatement(t,e){const s="break"===e;return this.next(...
    method verifyBreakContinue (line 1) | verifyBreakContinue(t,e){const s="break"===e;let i;for(i=0;i<this.stat...
    method parseDebuggerStatement (line 1) | parseDebuggerStatement(t){return this.next(),this.semicolon(),this.fin...
    method parseHeaderExpression (line 1) | parseHeaderExpression(){this.expect(d.parenL);const t=this.parseExpres...
    method parseDoStatement (line 1) | parseDoStatement(t){return this.next(),this.state.labels.push(Ue),t.bo...
    method parseForStatement (line 1) | parseForStatement(t){this.next(),this.state.labels.push(Ue);let e=-1;i...
    method parseFunctionStatement (line 1) | parseFunctionStatement(t,e,s){return this.next(),this.parseFunction(t,...
    method parseIfStatement (line 1) | parseIfStatement(t){return this.next(),t.test=this.parseHeaderExpressi...
    method parseReturnStatement (line 1) | parseReturnStatement(t){return this.prodParam.hasReturn||this.options....
    method parseSwitchStatement (line 1) | parseSwitchStatement(t){this.next(),t.discriminant=this.parseHeaderExp...
    method parseThrowStatement (line 1) | parseThrowStatement(t){return this.next(),et.test(this.input.slice(thi...
    method parseTryStatement (line 1) | parseTryStatement(t){if(this.next(),t.block=this.parseBlock(),t.handle...
    method parseVarStatement (line 1) | parseVarStatement(t,e){return this.next(),this.parseVar(t,!1,e),this.s...
    method parseWhileStatement (line 1) | parseWhileStatement(t){return this.next(),t.test=this.parseHeaderExpre...
    method parseWithStatement (line 1) | parseWithStatement(t){return this.state.strict&&this.raise(this.state....
    method parseEmptyStatement (line 1) | parseEmptyStatement(t){return this.next(),this.finishNode(t,"EmptyStat...
    method parseLabeledStatement (line 1) | parseLabeledStatement(t,e,s,i){for(let n=0,a=this.state.labels;n<a.len...
    method parseExpressionStatement (line 1) | parseExpressionStatement(t,e){return t.expression=e,this.semicolon(),t...
    method parseBlock (line 1) | parseBlock(t=!1,e=!0,s){const i=this.startNode();return this.expect(d....
    method isValidDirective (line 1) | isValidDirective(t){return"ExpressionStatement"===t.type&&"StringLiter...
    method parseBlockBody (line 1) | parseBlockBody(t,e,s,i,r){const n=t.body=[],a=t.directives=[];this.par...
    method parseBlockOrModuleBlockBody (line 1) | parseBlockOrModuleBlockBody(t,e,s,i,r){const n=[],a=this.state.strict;...
    method parseFor (line 1) | parseFor(t,e){return t.init=e,this.expect(d.semi),t.test=this.match(d....
    method parseForIn (line 1) | parseForIn(t,e,s){const i=this.match(d._in);return this.next(),i?s>-1&...
    method parseVar (line 1) | parseVar(t,e,s){const i=t.declarations=[],r=this.hasPlugin("typescript...
    method parseVarId (line 1) | parseVarId(t,e){t.id=this.parseBindingAtom(),this.checkLVal(t.id,"var"...
    method parseFunction (line 1) | parseFunction(t,e=Ve,s=!1){const i=e&He,r=e&ze,n=!!i&&!(e&We);this.ini...
    method parseFunctionId (line 1) | parseFunctionId(t){return t||this.match(d.name)?this.parseIdentifier()...
    method parseFunctionParams (line 1) | parseFunctionParams(t,e){const s=this.state.inParameters;this.state.in...
    method registerFunctionStatementId (line 1) | registerFunctionStatementId(t){t.id&&this.scope.declareName(t.id.name,...
    method parseClass (line 1) | parseClass(t,e,s){this.next(),this.takeDecorators(t);const i=this.stat...
    method isClassProperty (line 1) | isClassProperty(){return this.match(d.eq)||this.match(d.semi)||this.ma...
    method isClassMethod (line 1) | isClassMethod(){return this.match(d.parenL)}
    method isNonstaticConstructor (line 1) | isNonstaticConstructor(t){return!t.computed&&!t.static&&("constructor"...
    method parseClassBody (line 1) | parseClassBody(t,e){this.classScope.enter();const s={hadConstructor:!1...
    method parseClassMemberFromModifier (line 1) | parseClassMemberFromModifier(t,e){const s=this.state.containsEsc,i=thi...
    method parseClassMember (line 1) | parseClassMember(t,e,s,i){const r=this.isContextual("static");r&&this....
    method parseClassMemberWithIsStatic (line 1) | parseClassMemberWithIsStatic(t,e,s,i,r){const n=e,a=e,o=e,c=e,h=n,l=n;...
    method parseClassPropertyName (line 1) | parseClassPropertyName(t){const e=this.parsePropertyName(t,!0);return ...
    method pushClassProperty (line 1) | pushClassProperty(t,e){e.computed||"constructor"!==e.key.name&&"constr...
    method pushClassPrivateProperty (line 1) | pushClassPrivateProperty(t,e){this.expectPlugin("classPrivatePropertie...
    method pushClassMethod (line 1) | pushClassMethod(t,e,s,i,r,n){t.body.push(this.parseMethod(e,s,i,r,n,"C...
    method pushClassPrivateMethod (line 1) | pushClassPrivateMethod(t,e,s,i){this.expectPlugin("classPrivateMethods...
    method parsePostMemberNameModifiers (line 1) | parsePostMemberNameModifiers(t){}
    method parseAccessModifier (line 1) | parseAccessModifier(){}
    method parseClassPrivateProperty (line 1) | parseClassPrivateProperty(t){return this.scope.enter(w|b),this.prodPar...
    method parseClassProperty (line 1) | parseClassProperty(t){return t.typeAnnotation||this.expectPlugin("clas...
    method parseClassId (line 1) | parseClassId(t,e,s,i=L){this.match(d.name)?(t.id=this.parseIdentifier(...
    method parseClassSuper (line 1) | parseClassSuper(t){t.superClass=this.eat(d._extends)?this.parseExprSub...
    method parseExport (line 1) | parseExport(t){const e=this.maybeParseExportDefaultSpecifier(t),s=!e||...
    method eatExportStar (line 1) | eatExportStar(t){return this.eat(d.star)}
    method maybeParseExportDefaultSpecifier (line 1) | maybeParseExportDefaultSpecifier(t){if(this.isExportDefaultSpecifier()...
    method maybeParseExportNamespaceSpecifier (line 1) | maybeParseExportNamespaceSpecifier(t){if(this.isContextual("as")){t.sp...
    method maybeParseExportNamedSpecifiers (line 1) | maybeParseExportNamedSpecifiers(t){return!!this.match(d.braceL)&&(t.sp...
    method maybeParseExportDeclaration (line 1) | maybeParseExportDeclaration(t){if(this.shouldParseExportDeclaration())...
    method isAsyncFunction (line 1) | isAsyncFunction(){if(!this.isContextual("async"))return!1;const t=this...
    method parseExportDefaultExpression (line 1) | parseExportDefaultExpression(){const t=this.startNode(),e=this.isAsync...
    method parseExportDeclaration (line 1) | parseExportDeclaration(t){return this.parseStatement(null)}
    method isExportDefaultSpecifier (line 1) | isExportDefaultSpecifier(){if(this.match(d.name)){const t=this.state.v...
    method parseExportFrom (line 1) | parseExportFrom(t,e){this.eatContextual("from")?(t.source=this.parseIm...
    method shouldParseExportDeclaration (line 1) | shouldParseExportDeclaration(){if(this.match(d.at)&&(this.expectOnePlu...
    method checkExport (line 1) | checkExport(t,e,s,i){if(e)if(s){if(this.checkDuplicateExports(t,"defau...
    method checkDeclaration (line 1) | checkDeclaration(t){if("Identifier"===t.type)this.checkDuplicateExport...
    method checkDuplicateExports (line 1) | checkDuplicateExports(t,e){this.state.exportedIdentifiers.indexOf(e)>-...
    method parseExportSpecifiers (line 1) | parseExportSpecifiers(){const t=[];let e=!0;this.expect(d.braceL);whil...
    method parseImport (line 1) | parseImport(t){if(t.specifiers=[],!this.match(d.string)){const e=this....
    method parseImportSource (line 1) | parseImportSource(){return this.match(d.string)||this.unexpected(),thi...
    method shouldParseDefaultImport (line 1) | shouldParseDefaultImport(t){return this.match(d.name)}
    method parseImportSpecifierLocal (line 1) | parseImportSpecifierLocal(t,e,s,i){e.local=this.parseIdentifier(),this...
    method maybeParseModuleAttributes (line 1) | maybeParseModuleAttributes(){if(!this.match(d._with)||this.hasPrecedin...
    method maybeParseDefaultImportSpecifier (line 1) | maybeParseDefaultImportSpecifier(t){return!!this.shouldParseDefaultImp...
    method maybeParseStarImportSpecifier (line 1) | maybeParseStarImportSpecifier(t){if(this.match(d.star)){const e=this.s...
    method parseNamedImportSpecifiers (line 1) | parseNamedImportSpecifiers(t){let e=!0;this.expect(d.braceL);while(!th...
    method parseImportSpecifier (line 1) | parseImportSpecifier(t){const e=this.startNode();e.imported=this.parse...
  class $e (line 1) | class $e{constructor(){this.privateNames=new Set,this.loneAccessors=new ...
    method constructor (line 1) | constructor(){this.privateNames=new Set,this.loneAccessors=new Map,thi...
  class Xe (line 1) | class Xe{constructor(t){this.stack=[],this.undefinedPrivateNames=new Map...
    method constructor (line 1) | constructor(t){this.stack=[],this.undefinedPrivateNames=new Map,this.r...
    method current (line 1) | current(){return this.stack[this.stack.length-1]}
    method enter (line 1) | enter(){this.stack.push(new $e)}
    method exit (line 1) | exit(){const t=this.stack.pop(),e=this.current();for(let s=0,i=Array.f...
    method declarePrivateName (line 1) | declarePrivateName(t,e,s){const i=this.current();let r=i.privateNames....
    method usePrivateName (line 1) | usePrivateName(t,e){let s;for(let i=0,r=this.stack;i<r.length;i++)if(s...
  class Ge (line 1) | class Ge extends Ke{constructor(t,e){t=Ae(t),super(t,e);const s=this.get...
    method constructor (line 1) | constructor(t,e){t=Ae(t),super(t,e);const s=this.getScopeHandler();thi...
    method getScopeHandler (line 1) | getScopeHandler(){return ee}
    method parse (line 1) | parse(){let t=re;this.hasPlugin("topLevelAwait")&&this.inModule&&(t|=a...
  function Ye (line 1) | function Ye(t){const e=new Map;for(let s=0;s<t.length;s++){const i=t[s],...
  function Je (line 1) | function Je(t,e){var s;if("unambiguous"!==(null==(s=e)?void 0:s.sourceTy...
  function Qe (line 1) | function Qe(t,e){const s=Ze(e,t);return s.options.strictMode&&(s.state.s...
  function Ze (line 1) | function Ze(t,e){let s=Ge;return(null==t?void 0:t.plugins)&&(we(t.plugin...
  function es (line 1) | function es(t){const e=Te.filter(e=>ge(t,e)),s=e.join("/");let i=ts[s];i...
  function t (line 1) | function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}
  function t (line 1) | function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!=...
  function e (line 1) | function e(t){return Array.isArray(t)?[]:{}}
  function s (line 1) | function s(s,i){var r=i&&!0===i.clone;return r&&t(s)?n(e(s),s,i):s}
  function i (line 1) | function i(e,i,r){var a=e.slice();return i.forEach((function(i,o){"undef...
  function r (line 1) | function r(e,i,r){var a={};return t(e)&&Object.keys(e).forEach((function...
  function n (line 1) | function n(t,e,n){var a=Array.isArray(e),o=n||{arrayMerge:i},c=o.arrayMe...
  function i (line 1) | function i(t){return t=t||Object.create(null),{on:function(e,s){(t[e]||(...
  function e (line 1) | function e(){t.apply(this,arguments)}
  function C (line 1) | function C(t,e){var s=b(t).reduce((function(t,s){if(!s.attributes)return...
  function O (line 1) | function O(t){return t.replace(I,(function(t){return"%"+t[0].charCodeAt(...
  function D (line 1) | function D(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}
  function M (line 1) | function M(t,e,s){return b(t).forEach((function(t){var i=t.getAttribute(...
  function e (line 1) | function e(e){var r=this;void 0===e&&(e={}),t.call(this,s(x,e));var n=i(...
  function e (line 5) | function e(t,e){return"undefined"==typeof e?e={autoBom:!1}:"object"!=typ...
  function i (line 5) | function i(t,e,s){var i=new XMLHttpRequest;i.open("GET",t),i.responseTyp...
  function r (line 5) | function r(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}...
  function n (line 5) | function n(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(i){var ...
  function i (line 5) | function i(t,e,s,i,r,n,a,o){var c,h="function"===typeof t?t.options:t;if...
  function n (line 5) | function n(){if(!r){if(t.throwDeprecation)throw new Error(i);t.traceDepr...
  function o (line 5) | function o(t,s){var i={seen:[],stylize:h};return arguments.length>=3&&(i...
  function c (line 5) | function c(t,e){var s=o.styles[e];return s?"["+o.colors[s][0]+"m"+t+"[...
  function h (line 5) | function h(t,e){return t}
    method constructor (line 1) | constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.beforeExp...
  function l (line 5) | function l(t){var e={};return t.forEach((function(t,s){e[t]=!0})),e}
  function p (line 5) | function p(t,s,i){if(t.customInspect&&s&&N(s.inspect)&&s.inspect!==e.ins...
  function u (line 5) | function u(t,e){if(E(e))return t.stylize("undefined","undefined");if(P(e...
  function d (line 5) | function d(t){return"["+Error.prototype.toString.call(t)+"]"}
  function f (line 5) | function f(t,e,s,i,r){for(var n=[],a=0,o=e.length;a<o;++a)_(e,String(a))...
  function m (line 5) | function m(t,e,s,i,r,n){var a,o,c;if(c=Object.getOwnPropertyDescriptor(e...
  function y (line 5) | function y(t,e,s){var i=t.reduce((function(t,e){return e.indexOf("\n")>=...
  function g (line 5) | function g(t){return Array.isArray(t)}
  function x (line 5) | function x(t){return"boolean"===typeof t}
  function b (line 5) | function b(t){return null===t}
  function v (line 5) | function v(t){return null==t}
  function w (line 5) | function w(t){return"number"===typeof t}
  function P (line 5) | function P(t){return"string"===typeof t}
  function T (line 5) | function T(t){return"symbol"===typeof t}
  function E (line 5) | function E(t){return void 0===t}
  function A (line 5) | function A(t){return S(t)&&"[object RegExp]"===O(t)}
  function S (line 5) | function S(t){return"object"===typeof t&&null!==t}
  function C (line 5) | function C(t){return S(t)&&"[object Date]"===O(t)}
  function k (line 5) | function k(t){return S(t)&&("[object Error]"===O(t)||t instanceof Error)}
  function N (line 5) | function N(t){return"function"===typeof t}
  function I (line 5) | function I(t){return null===t||"boolean"===typeof t||"number"===typeof t...
  function O (line 5) | function O(t){return Object.prototype.toString.call(t)}
  function D (line 5) | function D(t){return t<10?"0"+t.toString(10):t.toString(10)}
  function L (line 5) | function L(){var t=new Date,e=[D(t.getHours()),D(t.getMinutes()),D(t.get...
  function _ (line 5) | function _(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
  function j (line 5) | function j(t,e){if(!t){var s=new Error("Promise was rejected with a fals...
  function F (line 5) | function F(e){if("function"!==typeof e)throw new TypeError('The "origina...
  function e (line 5) | function e(){for(var e,s,i=new Promise((function(t,i){e=t,s=i})),r=[],n=...
  function s (line 5) | function s(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{...
  function y (line 5) | function y(t,e,i,n,a,o){var c=i+t.length,h=n.length,l=d;return void 0!==...
  function i (line 5) | function i(){return"undefined"!==typeof window?window.console:t.console}
  function n (line 5) | function n(t){var e=Object.create(null);return function(s){var i=e[s];re...
  function c (line 5) | function c(t){null!==t.parentElement&&t.parentElement.removeChild(t)}
  function h (line 5) | function h(t,e,s){var i=0===s?t.children[0]:t.children[s-1].nextSibling;...
    method constructor (line 1) | constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.beforeExp...
  function r (line 5) | function r(t){if(Array.isArray(t))return t}
  function n (line 5) | function n(t,e){if("undefined"!==typeof Symbol&&Symbol.iterator in Objec...
  function a (line 5) | function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var s=0,i=new Ar...
  function o (line 5) | function o(t,e){if(t){if("string"===typeof t)return a(t,e);var s=Object....
  function c (line 5) | function c(){throw new TypeError("Invalid attempt to destructure non-ite...
  function h (line 5) | function h(t,e){return r(t)||n(t,e)||o(t,e)||c()}
    method constructor (line 1) | constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.beforeExp...
  function l (line 5) | function l(t){if(Array.isArray(t))return a(t)}
  function p (line 5) | function p(t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(...
  function u (line 5) | function u(){throw new TypeError("Invalid attempt to spread non-iterable...
  function d (line 5) | function d(t){return l(t)||p(t)||o(t)||u()}
  function g (line 5) | function g(t,e,s){return void 0===s||(t=t||{},t[e]=s),t}
  function x (line 5) | function x(t,e){return t.map((function(t){return t.elm})).indexOf(e)}
  function b (line 5) | function b(t,e,s,i){if(!t)return[];var r=t.map((function(t){return t.elm...
  function v (line 5) | function v(t,e){var s=this;this.$nextTick((function(){return s.$emit(t.t...
  function w (line 5) | function w(t){var e=this;return function(s){null!==e.realList&&e["onDrag...
  function P (line 5) | function P(t){return["transition-group","TransitionGroup"].includes(t)}
  function T (line 5) | function T(t){if(!t||1!==t.length)return!1;var e=h(t,1),s=e[0].component...
  function E (line 5) | function E(t,e,s){return t[s]||(e[s]?e[s]():void 0)}
  function A (line 5) | function A(t,e,s){var i=0,r=0,n=E(e,s,"header");n&&(i=n.length,t=t?[].co...
  function S (line 5) | function S(t,e){var s=null,i=function(t,e){s=g(s,t,e)},r=Object.keys(t)....
  function v (line 5) | function v(t,s,i,r,a,o){var c=i+t.length,h=r.length,l=m;return void 0!==...
  function i (line 5) | function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Sym...
  function r (line 5) | function r(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){va...
  function n (line 5) | function n(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[...
  function r (line 5) | function r(t,e){return RegExp(t,e)}
  function i (line 12) | function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Sym...
  function r (line 12) | function r(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enume...
  function n (line 12) | function n(){return n=Object.assign||function(t){for(var e=1;e<arguments...
  function a (line 12) | function a(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[...
  function o (line 12) | function o(t,e){if(null==t)return{};var s,i,r={},n=Object.keys(t);for(i=...
  function c (line 12) | function c(t,e){if(null==t)return{};var s,i,r=o(t,e);if(Object.getOwnPro...
  function h (line 12) | function h(t){return l(t)||p(t)||u()}
    method constructor (line 1) | constructor(t,e={}){this.label=t,this.keyword=e.keyword,this.beforeExp...
  function l (line 12) | function l(t){if(Array.isArray(t)){for(var e=0,s=new Array(t.length);e<t...
  function p (line 12) | function p(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Ob...
  function u (line 12) | function u(){throw new TypeError("Invalid attempt to spread non-iterable...
  function f (line 12) | function f(t){if("undefined"!==typeof window&&window.navigator)return!!n...
  function P (line 12) | function P(t,e,s){t.addEventListener(e,s,!m&&w)}
  function T (line 12) | function T(t,e,s){t.removeEventListener(e,s,!m&&w)}
  function E (line 12) | function E(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.match...
  function A (line 12) | function A(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.pare...
  function S (line 12) | function S(t,e,s,i){if(t){s=s||document;do{if(null!=e&&(">"===e[0]?t.par...
  function N (line 12) | function N(t,e,s){if(t&&e)if(t.classList)t.classList[s?"add":"remove"](e...
  function I (line 12) | function I(t,e,s){var i=t&&t.style;if(i){if(void 0===s)return document.d...
  function O (line 12) | function O(t,e){var s="";if("string"===typeof t)s=t;else do{var i=I(t,"t...
  function D (line 12) | function D(t,e,s){if(t){var i=t.getElementsByTagName(e),r=0,n=i.length;i...
  function M (line 12) | function M(){var t=document.scrollingElement;return t||document.document...
  function L (line 12) | function L(t,e,s,i,r){if(t.getBoundingClientRect||t===window){var n,a,o,...
  function _ (line 12) | function _(t,e,s){var i=q(t,!0),r=L(t)[e];while(i){var n=L(i)[s],a=void ...
  function R (line 12) | function R(t,e,s){var i=0,r=0,n=t.children;while(r<n.length){if("none"!=...
  function j (line 12) | function j(t,e){var s=t.lastElementChild;while(s&&(s===Qt.ghost||"none"=...
  function F (line 12) | function F(t,e){var s=0;if(!t||!t.parentNode)return-1;while(t=t.previous...
  function B (line 12) | function B(t){var e=0,s=0,i=M();if(t)do{var r=O(t),n=r.a,a=r.d;e+=t.scro...
  function U (line 12) | function U(t,e){for(var s in t)if(t.hasOwnProperty(s))for(var i in e)if(...
  function q (line 12) | function q(t,e){if(!t||!t.getBoundingClientRect)return M();var s=t,i=!1;...
  function V (line 12) | function V(t,e){if(t&&e)for(var s in e)e.hasOwnProperty(s)&&(t[s]=e[s]);...
  function H (line 12) | function H(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round...
  function z (line 12) | function z(t,e){return function(){if(!C){var s=arguments,i=this;1===s.le...
  function W (line 12) | function W(){clearTimeout(C),C=void 0}
  function K (line 12) | function K(t,e,s){t.scrollLeft+=e,t.scrollTop+=s}
  function $ (line 12) | function $(t){var e=window.Polymer,s=window.jQuery||window.Zepto;return ...
  function X (line 12) | function X(t,e){I(t,"position","absolute"),I(t,"top",e.top),I(t,"left",e...
  function G (line 12) | function G(t){I(t,"position",""),I(t,"top",""),I(t,"left",""),I(t,"width...
  function J (line 12) | function J(){var t,e=[];return{captureAnimationState:function(){if(e=[],...
  function Q (line 12) | function Q(t){return t.offsetWidth}
  function Z (line 12) | function Z(t,e,s,i){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e....
  function it (line 12) | function it(t){var e=t.sortable,s=t.rootEl,i=t.name,r=t.targetEl,n=t.clo...
  function nt (line 12) | function nt(t){it(a({putSortable:bt,cloneEl:ut,targetEl:at,rootEl:ht,old...
  function e (line 12) | function e(t,s){return function(i,r,n,a){var o=i.options.group.name&&r.o...
  function Qt (line 12) | function Qt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el`...
  function Zt (line 12) | function Zt(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.canc...
  function te (line 12) | function te(t,e,s,i,r,n,a,o){var c,h,l=t[Y],p=l.options.onMove;return!wi...
    method constructor (line 1) | constructor(t){this.var=[],this.lexical=[],this.functions=[],this.flag...
  function ee (line 12) | function ee(t){t.draggable=!1}
    method constructor (line 1) | constructor(t,e){this.scopeStack=[],this.undefinedExports=new Map,this...
    method inFunction (line 1) | get inFunction(){return(this.currentVarScope().flags&y)>0}
    method allowSuper (line 1) | get allowSuper(){return(this.currentThisScope().flags&b)>0}
    method allowDirectSuper (line 1) | get allowDirectSuper(){return(this.currentThisScope().flags&v)>0}
    method inClass (line 1) | get inClass(){return(this.currentThisScope().flags&w)>0}
    method inNonArrowFunction (line 1) | get inNonArrowFunction(){return(this.currentThisScope().flags&y)>0}
    method treatFunctionsAsVar (line 1) | get treatFunctionsAsVar(){return this.treatFunctionsAsVarInScope(this....
    method createScope (line 1) | createScope(t){return new te(t)}
    method enter (line 1) | enter(t){this.scopeStack.push(this.createScope(t))}
    method exit (line 1) | exit(){this.scopeStack.pop()}
    method treatFunctionsAsVarInScope (line 1) | treatFunctionsAsVarInScope(t){return!!(t.flags&y||!this.inModule&&t.fl...
    method declareName (line 1) | declareName(t,e,s){let i=this.currentScope();if(e&C||e&k)this.checkRed...
    method maybeExportDefined (line 1) | maybeExportDefined(t,e){this.inModule&&t.flags&m&&this.undefinedExport...
    method checkRedeclarationInScope (line 1) | checkRedeclarationInScope(t,e,s,i){this.isRedeclaredInScope(t,e,s)&&th...
    method isRedeclaredInScope (line 1) | isRedeclaredInScope(t,e,s){return!!(s&E)&&(s&C?t.lexical.indexOf(e)>-1...
    method checkLocalExport (line 1) | checkLocalExport(t){-1===this.scopeStack[0].lexical.indexOf(t.name)&&-...
    method currentScope (line 1) | currentScope(){return this.scopeStack[this.scopeStack.length-1]}
    method currentVarScope (line 1) | currentVarScope(){for(let t=this.scopeStack.length-1;;t--){const e=thi...
    method currentThisScope (line 1) | currentThisScope(){for(let t=this.scopeStack.length-1;;t--){const e=th...
  function se (line 12) | function se(){jt=!1}
    method constructor (line 1) | constructor(...t){super(...t),this.types=[],this.enums=[],this.constEn...
  function ie (line 12) | function ie(t,e,s){var i=L(j(s.el,s.options.draggable)),r=10;return e?t....
    method createScope (line 1) | createScope(t){return new se(t)}
    method declareName (line 1) | declareName(t,e,s){const i=this.currentScope();if(e&M)return this.mayb...
    method isRedeclaredInScope (line 1) | isRedeclaredInScope(t,e,s){if(t.enums.indexOf(e)>-1){if(s&O){const i=!...
    method checkLocalExport (line 1) | checkLocalExport(t){-1===this.scopeStack[0].types.indexOf(t.name)&&-1=...
  function re (line 12) | function re(t,e,s,i,r,n,a,o){var c=i?t.clientY:t.clientX,h=i?s.height:s....
  function ne (line 12) | function ne(t){return F(at)<F(t)?1:-1}
  function ae (line 12) | function ae(t){var e=t.tagName+t.className+t.src+t.href+t.textContent,s=...
  function oe (line 12) | function oe(t){Ft.length=0;var e=t.getElementsByTagName("input"),s=e.len...
  function ce (line 12) | function ce(t){return setTimeout(t,0)}
    method constructor (line 1) | constructor(){this.stacks=[]}
    method enter (line 1) | enter(t){this.stacks.push(t)}
    method exit (line 1) | exit(){this.stacks.pop()}
    method currentFlags (line 1) | currentFlags(){return this.stacks[this.stacks.length-1]}
    method hasAwait (line 1) | get hasAwait(){return(this.currentFlags()&ae)>0}
    method hasYield (line 1) | get hasYield(){return(this.currentFlags()&ne)>0}
    method hasReturn (line 1) | get hasReturn(){return(this.currentFlags()&oe)>0}
  function he (line 12) | function he(t){return clearTimeout(t)}
  function D (line 12) | function D(c,h){rt(c,f,a({evt:t,isOwner:p,axis:r?"vertical":"horizontal"...
  function M (line 12) | function M(){D("dragOverAnimationCapture"),f.captureAnimationState(),f!=...
  function R (line 12) | function R(e){return D("dragOverCompleted",{insertion:e}),e&&(p?l._hideC...
  function B (line 12) | function B(){mt=F(at),gt=F(at,c.draggable),nt({sortable:f,name:"change",...
  function xe (line 12) | function xe(){function t(){for(var t in this.defaults={scroll:!0,scrollS...
  function be (line 12) | function be(){ye.forEach((function(t){clearInterval(t.pid)})),ye=[]}
  function ve (line 12) | function ve(){clearInterval(me)}
  function Ee (line 12) | function Ee(){}
  function Ae (line 12) | function Ae(){}
  function Se (line 12) | function Se(){function t(){this.defaults={swapClass:"sortable-swap-highl...
    method constructor (line 1) | constructor(){this.errors=[],this.potentialArrowAt=-1,this.noArrowAt=[...
    method init (line 1) | init(t){this.strict=!1!==t.strictMode&&"module"===t.sourceType,this.cu...
    method curPosition (line 1) | curPosition(){return new at(this.curLine,this.pos-this.lineStart)}
    method clone (line 1) | clone(t){const e=new Se,s=Object.keys(this);for(let i=0,r=s.length;i<r...
  function Ce (line 12) | function Ce(t,e){var s,i,r=t.parentNode,n=e.parentNode;r&&n&&!r.isEqualN...
  function Fe (line 12) | function Fe(){function t(t){for(var e in this)"_"===e.charAt(0)&&"functi...
    method toAssignable (line 1) | toAssignable(t){var e,s;let i=void 0;switch(("ParenthesizedExpression"...
    method toAssignableObjectExpressionProp (line 1) | toAssignableObjectExpressionProp(t,e){if("ObjectMethod"===t.type){cons...
    method toAssignableList (line 1) | toAssignableList(t,e){let s=t.length;if(s){const i=t[s-1];if("RestElem...
    method toReferencedList (line 1) | toReferencedList(t,e){return t}
    method toReferencedListDeep (line 1) | toReferencedListDeep(t,e){this.toReferencedList(t,e);for(let s=0;s<t.l...
    method parseSpread (line 1) | parseSpread(t,e){const s=this.startNode();return this.next(),s.argumen...
    method parseRestBinding (line 1) | parseRestBinding(){const t=this.startNode();return this.next(),t.argum...
    method parseBindingAtom (line 1) | parseBindingAtom(){switch(this.state.type){case d.bracketL:{const t=th...
    method parseBindingList (line 1) | parseBindingList(t,e,s,i){const r=[];let n=!0;while(!this.eat(t))if(n?...
    method parseAssignableListItem (line 1) | parseAssignableListItem(t,e){const s=this.parseMaybeDefault();this.par...
    method parseAssignableListItemTypes (line 1) | parseAssignableListItemTypes(t){return t}
    method parseMaybeDefault (line 1) | parseMaybeDefault(t,e,s){if(e=e||this.state.startLoc,t=t||this.state.s...
    method checkLVal (line 1) | checkLVal(t,e=V,s,i,r,n=!1){switch(t.type){case"Identifier":if(this.st...
    method checkToRestConversion (line 1) | checkToRestConversion(t){"Identifier"!==t.argument.type&&"MemberExpres...
    method checkCommaAfterRest (line 1) | checkCommaAfterRest(t){this.match(d.comma)&&(this.lookaheadCharCode()=...
    method raiseRestNotLast (line 1) | raiseRestNotLast(t){throw this.raise(t,ut.ElementAfterRest)}
    method raiseTrailingCommaAfterRest (line 1) | raiseTrailingCommaAfterRest(t){this.raise(t,ut.RestTrailingComma)}
  function Be (line 12) | function Be(t,e){Me.forEach((function(s,i){var r=e.children[s.sortableIn...
    method checkProto (line 1) | checkProto(t,e,s,i){if("SpreadElement"===t.type||"ObjectMethod"===t.ty...
    method getExpression (line 1) | getExpression(){let t=re;this.hasPlugin("topLevelAwait")&&this.inModul...
    method parseExpression (line 1) | parseExpression(t,e){const s=this.state.start,i=this.state.startLoc,r=...
    method parseMaybeAssign (line 1) | parseMaybeAssign(t,e,s,i){const r=this.state.start,n=this.state.startL...
    method parseMaybeConditional (line 1) | parseMaybeConditional(t,e,s){const i=this.state.start,r=this.state.sta...
    method parseConditional (line 1) | parseConditional(t,e,s,i,r){if(this.eat(d.question)){const r=this.star...
    method parseExprOps (line 1) | parseExprOps(t,e){const s=this.state.start,i=this.state.startLoc,r=thi...
    method parseExprOp (line 1) | parseExprOp(t,e,s,i,r){let n=this.state.type.binop;if(null!=n&&(!r||!t...
    method parseExprOpRightExpr (line 1) | parseExprOpRightExpr(t,e,s){const i=this.state.start,r=this.state.star...
    method parseExprOpBaseRightExpr (line 1) | parseExprOpBaseRightExpr(t,e,s){const i=this.state.start,r=this.state....
    method parseMaybeUnary (line 1) | parseMaybeUnary(t){if(this.isContextual("await")&&this.isAwaitAllowed(...
    method parseExprSubscripts (line 1) | parseExprSubscripts(t){const e=this.state.start,s=this.state.startLoc,...
    method parseSubscripts (line 1) | parseSubscripts(t,e,s,i){const r={optionalChainMember:!1,maybeAsyncArr...
    method parseSubscript (line 1) | parseSubscript(t,e,s,i,r){if(!i&&this.eat(d.doubleColon)){const n=this...
    method parseTaggedTemplateExpression (line 1) | parseTaggedTemplateExpression(t,e,s,i,r){const n=this.startNodeAt(t,e)...
    method atPossibleAsyncArrow (line 1) | atPossibleAsyncArrow(t){return"Identifier"===t.type&&"async"===t.name&...
    method finishCallExpression (line 1) | finishCallExpression(t,e){if("Import"===t.callee.type)if(2===t.argumen...
    method parseCallExpressionArguments (line 1) | parseCallExpressionArguments(t,e,s,i,r){const n=[];let a,o=!0;const c=...
    method shouldParseAsyncArrow (line 1) | shouldParseAsyncArrow(){return this.match(d.arrow)&&!this.canInsertSem...
    method parseAsyncArrowFromCallExpression (line 1) | parseAsyncArrowFromCallExpression(t,e){var s;return this.expect(d.arro...
    method parseNoCallExpr (line 1) | parseNoCallExpr(){const t=this.state.start,e=this.state.startLoc;retur...
    method parseExprAtom (line 1) | parseExprAtom(t){this.state.type===d.slash&&this.readRegexp();const e=...
    method parseBooleanLiteral (line 1) | parseBooleanLiteral(){const t=this.startNode();return t.value=this.mat...
    method parseMaybePrivateName (line 1) | parseMaybePrivateName(t){const e=this.match(d.hash);if(e){this.expectO...
    method parseFunctionExpression (line 1) | parseFunctionExpression(){const t=this.startNode();let e=this.startNod...
    method parseMetaProperty (line 1) | parseMetaProperty(t,e,s){t.meta=e,"function"===e.name&&"sent"===s&&(th...
    method parseImportMetaProperty (line 1) | parseImportMetaProperty(t){const e=this.createIdentifier(this.startNod...
    method parseLiteral (line 1) | parseLiteral(t,e,s,i){s=s||this.state.start,i=i||this.state.startLoc;c...
    method parseParenAndDistinguishExpression (line 1) | parseParenAndDistinguishExpression(t){const e=this.state.start,s=this....
    method shouldParseArrow (line 1) | shouldParseArrow(){return!this.canInsertSemicolon()}
    method parseArrow (line 1) | parseArrow(t){if(this.eat(d.arrow))return t}
    method parseParenItem (line 1) | parseParenItem(t,e,s){return t}
    method parseNew (line 1) | parseNew(){const t=this.startNode();let e=this.startNode();if(this.nex...
    method parseNewArguments (line 1) | parseNewArguments(t){if(this.eat(d.parenL)){const e=this.parseExprList...
    method parseTemplateElement (line 1) | parseTemplateElement(t){const e=this.startNode();return null===this.st...
    method parseTemplate (line 1) | parseTemplate(t){const e=this.startNode();this.next(),e.expressions=[]...
    method parseObj (line 1) | parseObj(t,e,s,i){const r=Object.create(null);let n=!0;const a=this.st...
    method isAsyncProp (line 1) | isAsyncProp(t){return!t.computed&&"Identifier"===t.key.type&&"async"==...
    method parseObjectMember (line 1) | parseObjectMember(t,e){let s=[];if(this.match(d.at)){this.hasPlugin("d...
    method isGetterOrSetterMethod (line 1) | isGetterOrSetterMethod(t,e){return!e&&!t.computed&&"Identifier"===t.ke...
    method getGetterSetterExpectedParamCount (line 1) | getGetterSetterExpectedParamCount(t){return"get"===t.kind?0:1}
    method checkGetterSetterParams (line 1) | checkGetterSetterParams(t){const e=this.getGetterSetterExpectedParamCo...
    method parseObjectMethod (line 1) | parseObjectMethod(t,e,s,i,r){return s||e||this.match(d.parenL)?(i&&thi...
    method parseObjectProperty (line 1) | parseObjectProperty(t,e,s,i,r){return t.shorthand=!1,this.eat(d.colon)...
    method parseObjPropValue (line 1) | parseObjPropValue(t,e,s,i,r,n,a,o){const c=this.parseObjectMethod(t,i,...
    method parsePropertyName (line 1) | parsePropertyName(t,e){if(this.eat(d.bracketL))t.computed=!0,t.key=thi...
    method initFunction (line 1) | initFunction(t,e){t.id=null,t.generator=!1,t.async=!!e}
    method parseMethod (line 1) | parseMethod(t,e,s,i,r,n,a=!1){const o=this.state.yieldPos,c=this.state...
    method parseArrowExpression (line 1) | parseArrowExpression(t,e,s,i){this.scope.enter(y|g),this.prodParam.ent...
    method setArrowFunctionParameters (line 1) | setArrowFunctionParameters(t,e,s){t.params=this.toAssignableList(e,s)}
    method parseFunctionBodyAndFinish (line 1) | parseFunctionBodyAndFinish(t,e,s=!1){this.parseFunctionBody(t,!1,s),th...
    method parseFunctionBody (line 1) | parseFunctionBody(t,e,s=!1){const i=e&&!this.match(d.braceL),r=this.st...
    method isSimpleParamList (line 1) | isSimpleParamList(t){for(let e=0,s=t.length;e<s;e++)if("Identifier"!==...
    method checkParams (line 1) | checkParams(t,e,s,i=!0){const r=Object.create(null);for(let n=0;n<t.pa...
    method parseExprList (line 1) | parseExprList(t,e,s,i){const r=[];let n=!0;while(!this.eat(t)){if(n)n=...
    method parseExprListItem (line 1) | parseExprListItem(t,e,s,i){let r;if(this.match(d.comma))t||this.raise(...
    method parseIdentifier (line 1) | parseIdentifier(t){const e=this.startNode(),s=this.parseIdentifierName...
    method createIdentifier (line 1) | createIdentifier(t,e){return t.name=e,t.loc.identifierName=e,this.fini...
    method parseIdentifierName (line 1) | parseIdentifierName(t,e){let s;if(this.match(d.name))s=this.state.valu...
    method checkReservedWord (line 1) | checkReservedWord(t,e,s,i){if(this.prodParam.hasYield&&"yield"===t)ret...
    method isAwaitAllowed (line 1) | isAwaitAllowed(){return this.scope.inFunction?this.prodParam.hasAwait:...
    method parseAwait (line 1) | parseAwait(){const t=this.startNode();return this.next(),this.state.in...
    method parseYield (line 1) | parseYield(t){const e=this.startNode();return this.state.inParameters?...
    method checkPipelineAtInfixOperator (line 1) | checkPipelineAtInfixOperator(t,e){"smart"===this.getPluginOption("pipe...
    method parseSmartPipelineBody (line 1) | parseSmartPipelineBody(t,e,s){const i=this.checkSmartPipelineBodyStyle...
    method checkSmartPipelineBodyEarlyErrors (line 1) | checkSmartPipelineBodyEarlyErrors(t,e,s){if(this.match(d.arrow))throw ...
    method parseSmartPipelineBodyInStyle (line 1) | parseSmartPipelineBodyInStyle(t,e,s,i){const r=this.startNodeAt(s,i);s...
    method checkSmartPipelineBodyStyle (line 1) | checkSmartPipelineBodyStyle(t){switch(t.type){default:return this.isSi...
    method isSimpleReference (line 1) | isSimpleReference(t){switch(t.type){case"MemberExpression":return!t.co...
    method withTopicPermittingContext (line 1) | withTopicPermittingContext(t){const e=this.state.topicContext;this.sta...
    method withTopicForbiddingContext (line 1) | withTopicForbiddingContext(t){const e=this.state.topicContext;this.sta...
    method withSoloAwaitPermittingContext (line 1) | withSoloAwaitPermittingContext(t){const e=this.state.soloAwait;this.st...
    method registerTopicReference (line 1) | registerTopicReference(){this.state.topicContext.maxTopicIndex=0}
    method primaryTopicReferenceIsAllowedInCurrentTopicContext (line 1) | primaryTopicReferenceIsAllowedInCurrentTopicContext(){return this.stat...
    method topicReferenceWasUsedInCurrentTopicContext (line 1) | topicReferenceWasUsedInCurrentTopicContext(){return null!=this.state.t...
    method parseFSharpPipelineBody (line 1) | parseFSharpPipelineBody(t,e){const s=this.state.start,i=this.state.sta...
  function Ue (line 12) | function Ue(t,e){Le.forEach((function(s,i){var r=e.children[s.sortableIn...
  function qe (line 12) | function qe(){Me.forEach((function(t){t!==Ie&&t.parentNode&&t.parentNode...
  function i (line 12) | function i(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enume...
  function s (line 19) | function s(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{...
  function s (line 19) | function s(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if...
  function s (line 19) | function s(){}
  function r (line 19) | function r(){i.off(t,r),e.apply(s,arguments)}
  function n (line 19) | function n(t,e,s){if(!t&&!e&&!s)throw new Error("Missing required argume...
  function a (line 19) | function a(t,e,s){return t.addEventListener(e,s),{destroy:function(){t.r...
  function o (line 19) | function o(t,e,s){return Array.prototype.forEach.call(t,(function(t){t.a...
  function c (line 19) | function c(t,e,s){return r(document.body,t,e,s)}
  function r (line 19) | function r(t,e,s,i,r){var n=a.apply(this,arguments);return t.addEventLis...
  function n (line 19) | function n(t,e,s,i,n){return"function"===typeof t.addEventListener?r.app...
  function a (line 19) | function a(t,e,s,r){return function(s){s.delegateTarget=i(s.target,e),s....
  function r (line 19) | function r(t,e){while(t&&t.nodeType!==s){if("function"===typeof t.matche...
  function t (line 19) | function t(t,e){for(var s=0;s<e.length;s++){var i=e[s];i.enumerable=i.en...
  function o (line 19) | function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a ...
  function t (line 19) | function t(e){o(this,t),this.resolveOptions(e),this.initSelection()}
  function t (line 19) | function t(t,e){for(var s=0;s<e.length;s++){var i=e[s];i.enumerable=i.en...
  function y (line 19) | function y(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a ...
  function g (line 19) | function g(t,e){if(!t)throw new ReferenceError("this hasn't been initial...
  function x (line 19) | function x(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("...
  function e (line 19) | function e(t,s){y(this,e);var i=g(this,(e.__proto__||Object.getPrototype...
  function v (line 19) | function v(t,e){var s="data-clipboard-"+t;if(e.hasAttribute(s))return e....
  function i (line 19) | function i(t,e,s,i){var r,n=!1,a=0;function o(){r&&clearTimeout(r)}funct...
  function r (line 19) | function r(t,e,s){return void 0===s?i(t,e,!1):i(t,s,!1!==e)}
  function s (line 19) | function s(t,e){for(var s=0,i=t.length-1;i>=0;i--){var r=t[i];"."===r?t....
  function i (line 19) | function i(t){"string"!==typeof t&&(t+="");var e,s=0,i=-1,r=!0;for(e=t.l...
  function r (line 19) | function r(t,e){if(t.filter)return t.filter(e);for(var s=[],i=0;i<t.leng...
  function i (line 19) | function i(t){for(var e=0;e<t.length;e++)if(""!==t[e])break;for(var s=t....
  function i (line 19) | function i(t,e){return e={exports:{}},t(e,e.exports),e.exports}
  function t (line 19) | function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!=...
  function e (line 19) | function e(t){return Array.isArray(t)?[]:{}}
  function s (line 19) | function s(s,i){var r=i&&!0===i.clone;return r&&t(s)?n(e(s),s,i):s}
  function i (line 19) | function i(e,i,r){var a=e.slice();return i.forEach((function(i,o){"undef...
  function r (line 19) | function r(e,i,r){var a={};return t(e)&&Object.keys(e).forEach((function...
  function n (line 19) | function n(t,e,n){var a=Array.isArray(e),o=n||{arrayMerge:i},c=o.arrayMe...
  function e (line 19) | function e(){t.apply(this,arguments)}
  function t (line 19) | function t(){}

FILE: static/form-generator/js/index.8e6d9f8f.js
  function t (line 1) | function t(t){for(var o,n,c=t[0],r=t[1],s=t[2],u=0,d=[];u<c.length;u++)n...
  function a (line 1) | function a(){for(var e,t=0;t<l.length;t++){for(var a=l[t],o=!0,n=1;n<a.l...
  function c (line 1) | function c(e){return r.p+"js/"+({"parser-example":"parser-example","tiny...
  function r (line 1) | function r(t){if(o[t])return o[t].exports;var a=o[t]={i:t,l:!1,exports:{...
  function s (line 1) | function s(e){if(o)e(o);else{var t=r.a.Loading.service({fullscreen:!0,lo...
  function r (line 1) | function r(e,t){var a=this;e.props.value=t,e.on.input=function(e){a.$emi...
  function s (line 1) | function s(e,t,a){var o=i[t.__config__.tag];o&&Object.keys(o).forEach((f...
  function u (line 1) | function u(e){var t=this;["on","nativeOn"].forEach((function(a){var o=Ob...
  function d (line 1) | function d(e,t){var a=this;Object.keys(e).forEach((function(n){var i=e[n...
  function _ (line 1) | function _(e){delete e.attrs.__config__,delete e.attrs.__slot__,delete e...
  function p (line 1) | function p(){return{attrs:{},props:{},nativeOn:{},on:{},style:{}}}
  function n (line 1) | function n(e){var t=i(e);return a(t)}
  function i (line 1) | function i(e){if(!a.o(o,e)){var t=new Error("Cannot find module '"+e+"'"...
  function j (line 1) | function j(e){return'<el-dialog v-bind="$attrs" v-on="$listeners" @open=...
  function T (line 1) | function T(e){return"<template>\n    <div>\n      ".concat(e,"\n    </di...
  function z (line 1) | function z(e){return"<script>\n    ".concat(e,"\n  <\/script>")}
  function P (line 1) | function P(e){return"<style>\n    ".concat(e,"\n  </style>")}
  function $ (line 1) | function $(e,t,a){var o="";"right"!==e.labelPosition&&(o='label-position...
  function B (line 1) | function B(e,t){var a="";return e.formBtns&&"file"===t&&(a='<el-form-ite...
  function R (line 1) | function R(e,t){return n||24!==e.__config__.span?'<el-col :span="'.conca...
  function V (line 1) | function V(e){return{tag:e.__config__.tag,vModel:'v-model="'.concat(o.fo...
  function N (line 1) | function N(e){var t=[],a=e.__slot__||{};return a.default&&t.push(a.defau...
  function F (line 1) | function F(e){var t=[],a=e.__slot__;return a&&a.prepend&&t.push('<templa...
  function q (line 1) | function q(e){var t=[],a=e.__slot__;return a&&a.options&&a.options.lengt...
  function W (line 1) | function W(e){var t=[],a=e.__slot__,o=e.__config__;if(a&&a.options&&a.op...
  function U (line 1) | function U(e){var t=[],a=e.__slot__,o=e.__config__;if(a&&a.options&&a.op...
  function K (line 1) | function K(e){var t=[],a=e.__config__;return"picture-card"===e["list-typ...
  function H (line 1) | function H(e,t){var a=[];o=e,n=e.fields.some((function(e){return 24!==e....
  function Y (line 1) | function Y(e,t){var a=J[t.__config__.tag];a&&-1===e.indexOf(a)&&e.push(a...
  function Z (line 1) | function Z(e){var t=[];return e.fields.forEach((function(e){return Y(t,e...
  function ue (line 1) | function ue(e){if(Q)e(Q);else{var t="https://lib.baomitu.com/monaco-edit...
  function de (line 1) | function de(e){if(X)e(X);else{var t=se.a.Loading.service({fullscreen:!0,...
  function Se (line 1) | function Se(){var e=localStorage.getItem($e);if(e!==Pe)return localStora...
  function Ve (line 1) | function Ve(e){localStorage.setItem(ze,JSON.stringify(e))}
  function Ne (line 1) | function Ne(){var e=localStorage.getItem(Be);return e?parseInt(e,10):100}
  function Fe (line 1) | function Fe(e){localStorage.setItem(Be,"".concat(e))}
  function qe (line 1) | function qe(){var e=localStorage.getItem(Re);return e?parseInt(e,10):100}
  function We (line 1) | function We(e){localStorage.setItem(Re,"".concat(e))}
  function Ue (line 1) | function Ue(){var e=localStorage.getItem(Ae);return e?JSON.parse(e):null}
  function Ke (line 1) | function Ke(e){localStorage.setItem(Ae,JSON.stringify(e))}
  function Mt (line 1) | function Mt(e,t,a,o){var n=this,i=t.__config__;return Array.isArray(i.ch...
  function Et (line 1) | function Et(){throw new Error("没有与".concat(this.element.__config__.layou...
  function Yt (line 1) | function Yt(e){return/^(https?:|mailto:|tel:)/.test(e)}
  function n (line 1) | function n(e){var t=i(e);return a(t)}
  function i (line 1) | function i(e){if(!a.o(o,e)){var t=new Error("Cannot find module '"+e+"'"...
  function n (line 1) | function n(e,t){var a=document.getElementById(e),n=t||function(){};if(!a...
  function i (line 1) | function i(e,t){var a=e.shift();e.length?n(a,(function(){return i(e,t)})...
  function indent (line 1) | function indent(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arg...
  function titleCase (line 1) | function titleCase(e){return e.replace(/( |^)[a-z]/g,(function(e){return...
  function camelCase (line 1) | function camelCase(e){return e.replace(/-[a-z]/g,(function(e){return e.s...
  function isNumberStr (line 1) | function isNumberStr(e){return/^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(e)}
  function stringify (line 1) | function stringify(e){return JSON.stringify(e,(function(e,t){return"func...
  function parse (line 1) | function parse(str){JSON.parse(str,(function(k,v){return v.indexOf&&v.in...
  function jsonClone (line 1) | function jsonClone(e){return parse(stringify(e))}
  function deepClone (line 1) | function deepClone(e){var t=Object.prototype.toString;if(!e||"object"!==...
  function makeUpJs (line 1) | function makeUpJs(e,t){confGlobal=e=Object(_utils_index__WEBPACK_IMPORTE...
  function buildAttributes (line 1) | function buildAttributes(e,t,a,o,n,i,l){var c=e.__config__,r=e.__slot__;...
  function mixinMethod (line 1) | function mixinMethod(e){var t=[],a={file:confGlobal.formBtns?{submitForm...
  function buildData (line 1) | function buildData(e,t){var a=e.__config__;if(void 0!==e.__vModel__){var...
  function buildRules (line 1) | function buildRules(scheme,ruleList){var config=scheme.__config__;if(voi...
  function buildOptions (line 1) | function buildOptions(e,t){if(void 0!==e.__vModel__){var a=e.options;a||...
  function buildProps (line 1) | function buildProps(e,t){var a="".concat(e.__vModel__,"Props: ").concat(...
  function buildBeforeUpload (line 1) | function buildBeforeUpload(e){var t=e.__config__,a=units[t.sizeUnit],o="...
  function buildSubmitUpload (line 1) | function buildSubmitUpload(e){var t="submitUpload() {\n    this.$refs['"...
  function buildOptionMethod (line 1) | function buildOptionMethod(e,t,a){var o="".concat(e,"() {\n    // TODO 发...
  function buildexport (line 1) | function buildexport(e,t,a,o,n,i,l,c){var r="".concat(_utils_index__WEBP...

FILE: static/form-generator/js/parser-example.ce55fa09.js
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var _,r=1;r<argumen...
  function renderFrom (line 1) | function renderFrom(e){var _=this.formConfCopy;return e("el-row",{attrs:...
  function formBtns (line 1) | function formBtns(e){return e("el-col",[e("el-form-item",{attrs:{size:"l...
  function renderFormItem (line 1) | function renderFormItem(e,_){var r=this;return _.map((function(_){var o=...
  function renderChildren (line 1) | function renderChildren(e,_){var r=_.__config__;return Array.isArray(r.c...
  function setValue (line 1) | function setValue(e,_,r){this.$set(_,"defaultValue",e),this.$set(this[th...
  function buildListeners (line 1) | function buildListeners(e){var _=this,r=e.__config__,o=this.formConf.__m...

FILE: static/form-generator/js/preview.8ce4e0db.js
  function t (line 1) | function t(t){for(var n,i,_=t[0],s=t[1],l=t[2],d=0,u=[];d<_.length;d++)i...
  function r (line 1) | function r(){for(var e,t=0;t<a.length;t++){for(var r=a[t],n=!0,_=1;_<r.l...
  function i (line 1) | function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{...
  function buildLinks (line 1) | function buildLinks(e){var t="";return e.forEach((function(e){t+='<link ...
  function init (line 1) | function init(e){if("refreshFrame"===e.data.type){var t=e.data.data,r=ch...
  function newVue (line 1) | function newVue(attrs,main,html){main=eval("(".concat(main,")")),main.te...
  function l (line 1) | function l(e){if(n)e(n);else{var t=s.a.Loading.service({fullscreen:!0,lo...
  function o (line 1) | function o(e,t){var r=document.getElementById(e),o=t||function(){};if(!r...
  function a (line 1) | function a(e,t){var r=e.shift();e.length?o(r,(function(){return a(e,t)})...

FILE: test/gen_test.go
  function TestGoModelTemplate (line 10) | func TestGoModelTemplate(t *testing.T) {
  function TestGoApiTemplate (line 31) | func TestGoApiTemplate(t *testing.T) {
Condensed preview — 248 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,638K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 834,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 343,
    "preview": "blank_issues_enabled: true\ncontact_links:\n  - name: 🆕 Create new issue\n    url: http://new-issue.go-admin.dev\n    about:"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/pr_cn.md",
    "chars": 862,
    "preview": "<!--\n首先,感谢你的贡献!😄\n\n新特性请提交至 feature 分支,其余可提交至 master 分支。\n在维护者审核通过后会合并。\n请确保填写以下 pull request 的信息,谢谢!~\n-->\n\n[[English Templa"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1739,
    "preview": "<!--\nFirst of all, thank you for your contribution! 😄\n\nFor requesting to pull a new feature or bugfix, please send it fr"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 1957,
    "preview": "name: Build\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\nenv:\n  IMAGE_NAME: registry."
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 1559,
    "preview": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    # The branches below must be a subset of the br"
  },
  {
    "path": ".github/workflows/go.yml",
    "chars": 1504,
    "preview": "name: build\n\non:\n  push:\n    branches: [ master, dev ]\n  pull_request:\n    branches: [ master ]\nenv:\n  REGISTRY: ghcr.io"
  },
  {
    "path": ".github/workflows/issue-check-inactive.yml",
    "chars": 521,
    "preview": "name: Issue Check Inactive\n\non:\n  schedule:\n    - cron: \"0 0 */15 * *\"\n\npermissions:\n  contents: read\n\njobs:\n  issue-che"
  },
  {
    "path": ".github/workflows/issue-close-require.yml",
    "chars": 956,
    "preview": "name: Issue Close Require\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\npermissions:\n  contents: read\n\njobs:\n  issue-close-r"
  },
  {
    "path": ".github/workflows/issue-labeled.yml",
    "chars": 5589,
    "preview": "# Origin Source\n# https://github.com/ant-design/ant-design/blob/79f566b7f8abb1012ef55b0d2793bfdf5595b85d/.github/workflo"
  },
  {
    "path": ".github/workflows/mirror.yaml",
    "chars": 783,
    "preview": "name: 'GitHub Actions Mirror'\n\non: [push, delete]\n\njobs:\n  mirror_to_gitee:\n    runs-on: ubuntu-latest\n    steps:\n      "
  },
  {
    "path": ".gitignore",
    "chars": 368,
    "preview": ".idea\n.vscode\n*/.DS_Store\nstatic/uploadfile\nmain.exe\n*.exe\ngo-admin\ngo-admin.exe\ntemp/\n!temp\nvendor\nconfig/settings.dev."
  },
  {
    "path": "Dockerfile",
    "chars": 482,
    "preview": "FROM alpine\n\n# ENV GOPROXY https://goproxy.cn/\n\nRUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/rep"
  },
  {
    "path": "Dockerfilebak",
    "chars": 646,
    "preview": "FROM golang:alpine as builder\n\nMAINTAINER lwnmengjing\n\nENV GOPROXY https://goproxy.cn/\n\nWORKDIR /go/release\n#RUN sed -i "
  },
  {
    "path": "LICENSE.md",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2020 go-admin-team\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "Makefile",
    "chars": 1533,
    "preview": "PROJECT:=go-admin\n\n.PHONY: build\nbuild:\n\tCGO_ENABLED=0 go build -ldflags=\"-w -s\" -a -installsuffix \"\" -o go-admin .\n\n# m"
  },
  {
    "path": "README.Zh-cn.md",
    "chars": 15193,
    "preview": "# go-admin\n\n  <img align=\"right\" width=\"320\" src=\"https://doc-image.zhangwj.com/img/go-admin.svg\">\n\n\n[![Build Status](ht"
  },
  {
    "path": "README.md",
    "chars": 18659,
    "preview": "\n# go-admin\n\n<img align=\"right\" width=\"320\" src=\"https://doc-image.zhangwj.com/img/go-admin.svg\">\n\n\n[![Build Status](htt"
  },
  {
    "path": "_config.yml",
    "chars": 26,
    "preview": "theme: jekyll-theme-cayman"
  },
  {
    "path": "app/admin/apis/captcha.go",
    "chars": 885,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/api\"\n\t\"github.com/go-adm"
  },
  {
    "path": "app/admin/apis/go_admin.go",
    "chars": 722,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n)\n\nconst INDEX = `\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8"
  },
  {
    "path": "app/admin/apis/sys_api.go",
    "chars": 3580,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_config.go",
    "chars": 7430,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_dept.go",
    "chars": 5282,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_dict_data.go",
    "chars": 5192,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_dict_type.go",
    "chars": 5132,
    "preview": "package apis\n\nimport (\n\t\"fmt\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team"
  },
  {
    "path": "app/admin/apis/sys_login_log.go",
    "chars": 2614,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_menu.go",
    "chars": 5514,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team/go-adm"
  },
  {
    "path": "app/admin/apis/sys_opera_log.go",
    "chars": 2825,
    "preview": "package apis\n\nimport (\n\t\"fmt\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-team"
  },
  {
    "path": "app/admin/apis/sys_post.go",
    "chars": 4194,
    "preview": "package apis\n\nimport (\n\t\"fmt\"\n\t\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go-admin-te"
  },
  {
    "path": "app/admin/apis/sys_role.go",
    "chars": 6654,
    "preview": "package apis\n\nimport (\n\t\"fmt\"\n\t\"go-admin/common/global\"\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go"
  },
  {
    "path": "app/admin/apis/sys_user.go",
    "chars": 10449,
    "preview": "package apis\n\nimport (\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"go-admin/app/admin/models\"\n\t\"golang.org/x/crypto/bcrypt\"\n\t\""
  },
  {
    "path": "app/admin/models/casbin_rule.go",
    "chars": 558,
    "preview": "package models\n\ntype CasbinRule struct {\n\tID    uint   `gorm:\"primaryKey;autoIncrement\"`\n\tPtype string `gorm:\"size:512;u"
  },
  {
    "path": "app/admin/models/datascope.go",
    "chars": 2769,
    "preview": "package models\n\nimport (\n\t\"errors\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t\"gorm.io/gorm\"\n\n\tlog \"github.com/g"
  },
  {
    "path": "app/admin/models/initdb.go",
    "chars": 1258,
    "preview": "package models\n\nimport (\n\t\"fmt\"\n\t\"go-admin/common/global\"\n\t\"gorm.io/gorm\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"strings\"\n)\n\nfunc InitDb("
  },
  {
    "path": "app/admin/models/sys_api.go",
    "chars": 2534,
    "preview": "package models\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/bitly/go-simpl"
  },
  {
    "path": "app/admin/models/sys_config.go",
    "chars": 783,
    "preview": "package models\n\nimport (\n\t\"go-admin/common/models\"\n)\n\ntype SysConfig struct {\n\tmodels.Model\n\tConfigName  string `json:\"c"
  },
  {
    "path": "app/admin/models/sys_dept.go",
    "chars": 1089,
    "preview": "package models\n\nimport \"go-admin/common/models\"\n\ntype SysDept struct {\n\tDeptId   int    `json:\"deptId\" gorm:\"primaryKey;"
  },
  {
    "path": "app/admin/models/sys_dict_data.go",
    "chars": 1108,
    "preview": "package models\n\nimport (\n\t\"go-admin/common/models\"\n)\n\ntype SysDictData struct {\n\tDictCode  int    `json:\"dictCode\" gorm:"
  },
  {
    "path": "app/admin/models/sys_dict_type.go",
    "chars": 675,
    "preview": "package models\n\nimport (\n\t\"go-admin/common/models\"\n)\n\ntype SysDictType struct {\n\tID       int    `json:\"id\" gorm:\"primar"
  },
  {
    "path": "app/admin/models/sys_login_log.go",
    "chars": 2000,
    "preview": "package models\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"time\"\n\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"gith"
  },
  {
    "path": "app/admin/models/sys_menu.go",
    "chars": 1799,
    "preview": "package models\n\nimport \"go-admin/common/models\"\n\ntype SysMenu struct {\n\tMenuId     int       `json:\"menuId\" gorm:\"primar"
  },
  {
    "path": "app/admin/models/sys_opera_log.go",
    "chars": 2920,
    "preview": "package models\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"time\"\n\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"gith"
  },
  {
    "path": "app/admin/models/sys_post.go",
    "chars": 820,
    "preview": "package models\n\nimport \"go-admin/common/models\"\n\ntype SysPost struct {\n\tPostId   int    `gorm:\"primaryKey;autoIncrement\""
  },
  {
    "path": "app/admin/models/sys_role.go",
    "chars": 1403,
    "preview": "package models\n\nimport \"go-admin/common/models\"\n\ntype SysRole struct {\n\tRoleId    int        `json:\"roleId\" gorm:\"primar"
  },
  {
    "path": "app/admin/models/sys_user.go",
    "chars": 2012,
    "preview": "package models\n\nimport (\n\t\"go-admin/common/models\"\n\t\"golang.org/x/crypto/bcrypt\"\n\t\"gorm.io/gorm\"\n)\n\ntype SysUser struct "
  },
  {
    "path": "app/admin/router/init_router.go",
    "chars": 761,
    "preview": "package router\n\nimport (\n\t\"os\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"githu"
  },
  {
    "path": "app/admin/router/router.go",
    "chars": 941,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t_ \"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-c"
  },
  {
    "path": "app/admin/router/sys_api.go",
    "chars": 573,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\n\t\"go"
  },
  {
    "path": "app/admin/router/sys_config.go",
    "chars": 950,
    "preview": "package router\n\nimport (\n\t\"go-admin/app/admin/apis\"\n\t\"go-admin/common/middleware\"\n\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"git"
  },
  {
    "path": "app/admin/router/sys_dept.go",
    "chars": 713,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_dict.go",
    "chars": 1122,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_login_log.go",
    "chars": 580,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_menu.go",
    "chars": 755,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_opera_log.go",
    "chars": 579,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_post.go",
    "chars": 609,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/router/sys_role.go",
    "chars": 769,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\n\t\"go"
  },
  {
    "path": "app/admin/router/sys_router.go",
    "chars": 2446,
    "preview": "package router\n\nimport (\n\t\"go-admin/app/admin/apis\"\n\t\"mime\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\n\t\"git"
  },
  {
    "path": "app/admin/router/sys_user.go",
    "chars": 1106,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/admin/service/dto/sys_api.go",
    "chars": 2551,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\n// SysApiG"
  },
  {
    "path": "app/admin/service/dto/sys_config.go",
    "chars": 3380,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\n// SysConf"
  },
  {
    "path": "app/admin/service/dto/sys_dept.go",
    "chars": 4176,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\tcommon \"go-admin/common/models\"\n)\n\n// SysDeptGetPageReq 列表或者搜索使用结构体\n"
  },
  {
    "path": "app/admin/service/dto/sys_dict_data.go",
    "chars": 3245,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\ntype SysDi"
  },
  {
    "path": "app/admin/service/dto/sys_dict_type.go",
    "chars": 2056,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\ntype SysD"
  },
  {
    "path": "app/admin/service/dto/sys_login_log.go",
    "chars": 1948,
    "preview": "package dto\n\nimport (\n\t\"time\"\n\n\t\"go-admin/common/dto\"\n)\n\ntype SysLoginLogGetPageReq struct {\n\tdto.Pagination `search:\"-\""
  },
  {
    "path": "app/admin/service/dto/sys_menu.go",
    "chars": 5054,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\tcommon \"go-admin/common/models\"\n\n\t\"go-admin/common/dto\"\n)\n\n// SysMen"
  },
  {
    "path": "app/admin/service/dto/sys_opera_log.go",
    "chars": 3612,
    "preview": "package dto\n\nimport (\n\t\"time\"\n\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\nc"
  },
  {
    "path": "app/admin/service/dto/sys_post.go",
    "chars": 3007,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\tcommon \"go-admin/common/models\"\n\n\t\"go-admin/common/dto\"\n)\n\n// SysPos"
  },
  {
    "path": "app/admin/service/dto/sys_role.go",
    "chars": 5368,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\tcommon \"go-admin/common/models\"\n\n\t\"go-admin/common/dto\"\n)\n\ntype SysR"
  },
  {
    "path": "app/admin/service/dto/sys_user.go",
    "chars": 5869,
    "preview": "package dto\n\nimport (\n\t\"go-admin/app/admin/models\"\n\n\t\"go-admin/common/dto\"\n\tcommon \"go-admin/common/models\"\n)\n\ntype SysU"
  },
  {
    "path": "app/admin/service/sys_api.go",
    "chars": 2855,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/runtime\"\n\t\"github.com/go-admin-"
  },
  {
    "path": "app/admin/service/sys_config.go",
    "chars": 4064,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/app/admin/service/dto\"\n\tcDto \"go-admin/comm"
  },
  {
    "path": "app/admin/service/sys_dept.go",
    "chars": 6968,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"go-admin/app/admin/models\"\n\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t"
  },
  {
    "path": "app/admin/service/sys_dict_data.go",
    "chars": 2470,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n\t\"gorm.io/gorm\"\n\n\t\"go-admin/a"
  },
  {
    "path": "app/admin/service/sys_dict_type.go",
    "chars": 2590,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n\t\"gorm.io/gorm\"\n\n\t\"go-"
  },
  {
    "path": "app/admin/service/sys_login_log.go",
    "chars": 1477,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n\t\"gorm.io/gorm\"\n\n\t\"go-admin/a"
  },
  {
    "path": "app/admin/service/sys_menu.go",
    "chars": 9725,
    "preview": "package service\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t\"github.com/pkg/"
  },
  {
    "path": "app/admin/service/sys_opera_log.go",
    "chars": 1896,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/app/admin/service/dto\"\n\tcDto \"go-admin/comm"
  },
  {
    "path": "app/admin/service/sys_post.go",
    "chars": 2080,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n\t\"gorm.io/gorm\"\n\n\t\"go-admin/a"
  },
  {
    "path": "app/admin/service/sys_role.go",
    "chars": 8342,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\t\"gorm.io/gorm/clause\"\n\n\t\"gith"
  },
  {
    "path": "app/admin/service/sys_role_menu.go",
    "chars": 3070,
    "preview": "package service\n\nimport (\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n)\n\n// SysRoleMenu 即将弃用结构体\ntype SysRoleMe"
  },
  {
    "path": "app/admin/service/sys_user.go",
    "chars": 6467,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/app/admin/service/dto\"\n\n\tlog \"github.com/go-"
  },
  {
    "path": "app/jobs/apis/sys_job.go",
    "chars": 1356,
    "preview": "package apis\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk\"\n\t\"github.c"
  },
  {
    "path": "app/jobs/examples.go",
    "chars": 718,
    "preview": "package jobs\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n// InitJob\n// 需要将定义的struct 添加到字典中;\n// 字典 key 可以配置到 自动任务 调用目标 中;\nfunc InitJob() "
  },
  {
    "path": "app/jobs/jobbase.go",
    "chars": 4685,
    "preview": "package jobs\n\nimport (\n\t\"fmt\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"github.com/go-admin-team/go-admin-c"
  },
  {
    "path": "app/jobs/models/sys_job.go",
    "chars": 1862,
    "preview": "package models\n\nimport (\n\t\"go-admin/common/models\"\n\t\"gorm.io/gorm\"\n)\n\ntype SysJob struct {\n\tJobId          int    `json:"
  },
  {
    "path": "app/jobs/router/int_router.go",
    "chars": 701,
    "preview": "package router\n\nimport (\n\t//\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t\"os\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"gi"
  },
  {
    "path": "app/jobs/router/router.go",
    "chars": 864,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n)\n\nva"
  },
  {
    "path": "app/jobs/router/sys_job.go",
    "chars": 1271,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/jobs/service/dto/sys_job.go",
    "chars": 3509,
    "preview": "package dto\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/api\"\n\t\"go-admin/app/jobs/"
  },
  {
    "path": "app/jobs/service/sys_job.go",
    "chars": 1965,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/service\"\n\t\"github.com/robfig/c"
  },
  {
    "path": "app/jobs/type.go",
    "chars": 243,
    "preview": "package jobs\n\nimport \"github.com/robfig/cron/v3\"\n\ntype Job interface {\n\tRun()\n\taddJob(*cron.Cron) (int, error)\n}\n\ntype J"
  },
  {
    "path": "app/other/apis/file.go",
    "chars": 5442,
    "preview": "package apis\n\nimport (\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strings\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github"
  },
  {
    "path": "app/other/apis/sys_server_monitor.go",
    "chars": 4597,
    "preview": "package apis\n\nimport (\n\t\"fmt\"\n\t\"github.com/shirou/gopsutil/v3/net\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.co"
  },
  {
    "path": "app/other/apis/tools/db_columns.go",
    "chars": 1479,
    "preview": "package tools\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t_ \"github.com/go-"
  },
  {
    "path": "app/other/apis/tools/db_tables.go",
    "chars": 1689,
    "preview": "package tools\n\nimport (\n\t\"errors\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\t\"git"
  },
  {
    "path": "app/other/apis/tools/gen.go",
    "chars": 10996,
    "preview": "package tools\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go-admin/app/admin/service\"\n\t\"go-admin/app/admin/service/dto\"\n\t\"strconv\"\n\t\"str"
  },
  {
    "path": "app/other/apis/tools/sys_tables.go",
    "chars": 9467,
    "preview": "package tools\n\nimport (\n\t\"strings\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/api\"\n\t\"gith"
  },
  {
    "path": "app/other/models/tools/db_columns.go",
    "chars": 2407,
    "preview": "package tools\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\t\"github.com/go-admin-team/go-ad"
  },
  {
    "path": "app/other/models/tools/db_tables.go",
    "chars": 1987,
    "preview": "package tools\n\nimport (\n\t\"errors\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\n\t\"gorm.io/gorm\"\n\n\tconfig2 \"github.c"
  },
  {
    "path": "app/other/models/tools/sys_columns.go",
    "chars": 4242,
    "preview": "package tools\n\nimport (\n\tcommon \"go-admin/common/models\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype SysColumns struct {\n\tColumnId         "
  },
  {
    "path": "app/other/models/tools/sys_tables.go",
    "chars": 7235,
    "preview": "package tools\n\nimport (\n\tcommon \"go-admin/common/models\"\n\t\"strings\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype SysTables struct {\n\tTableId"
  },
  {
    "path": "app/other/router/file.go",
    "chars": 456,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/other/router/gen_router.go",
    "chars": 1675,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/other/router/init_router.go",
    "chars": 706,
    "preview": "package router\n\nimport (\n\t\"os\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"githu"
  },
  {
    "path": "app/other/router/monitor.go",
    "chars": 474,
    "preview": "package router\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/tools/transfe"
  },
  {
    "path": "app/other/router/router.go",
    "chars": 864,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n)\n\nva"
  },
  {
    "path": "app/other/router/sys_server_monitor.go",
    "chars": 544,
    "preview": "package router\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\tjwt \"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth\"\n\t\"go-"
  },
  {
    "path": "app/other/service/dto/sys_tables.go",
    "chars": 247,
    "preview": "package dto\n\ntype SysTableSearch struct {\n\tTBName       string `form:\"tableName\" search:\"type:exact;column:table_name;ta"
  },
  {
    "path": "cmd/api/jobs.go",
    "chars": 155,
    "preview": "package api\n\nimport \"go-admin/app/jobs/router\"\n\nfunc init() {\n\t//注册路由 fixme 其他应用的路由,在本目录新建文件放在init方法\n\tAppRouters = appen"
  },
  {
    "path": "cmd/api/other.go",
    "chars": 156,
    "preview": "package api\n\nimport \"go-admin/app/other/router\"\n\nfunc init() {\n\t//注册路由 fixme 其他应用的路由,在本目录新建文件放在init方法\n\tAppRouters = appe"
  },
  {
    "path": "cmd/api/server.go",
    "chars": 5001,
    "preview": "package api\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com"
  },
  {
    "path": "cmd/app/server.go",
    "chars": 1875,
    "preview": "package app\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t\"github.com/go-admin-"
  },
  {
    "path": "cmd/cobra.go",
    "chars": 1239,
    "preview": "package cmd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n\t\"go-admin/cmd/app\"\n\t\"go-admin/"
  },
  {
    "path": "cmd/config/server.go",
    "chars": 1580,
    "preview": "package config\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/go-admin-team/go-admin-core/config/source/file\"\n\t\"github."
  },
  {
    "path": "cmd/migrate/migration/init.go",
    "chars": 1176,
    "preview": "package migration\n\nimport (\n\t\"log\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"sync\"\n\n\t\"gorm.io/gorm\"\n)\n\nvar Migrate = &Migration{\n\tversi"
  },
  {
    "path": "cmd/migrate/migration/models/by.go",
    "chars": 503,
    "preview": "package models\n\nimport (\n\t\"time\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype ControlBy struct {\n\tCreateBy int `json:\"createBy\" gorm:\"index;"
  },
  {
    "path": "cmd/migrate/migration/models/casbin_rule.go",
    "chars": 588,
    "preview": "package models\n\n// CasbinRule sys_casbin_rule\ntype CasbinRule struct {\n\tID    uint   `gorm:\"primaryKey;autoIncrement\"`\n\t"
  },
  {
    "path": "cmd/migrate/migration/models/initdb.go",
    "chars": 1672,
    "preview": "package models\n\nimport (\n\t\"fmt\"\n\t\"go-admin/common/global\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"strings\"\n\n\t\"gorm.io/gorm\"\n)\n\nfunc InitDb"
  },
  {
    "path": "cmd/migrate/migration/models/model.go",
    "chars": 185,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype BaseModel struct {\n\tCreatedAt time.Time  `json:\"createdAt\"`\n\tUpdatedAt time.Tim"
  },
  {
    "path": "cmd/migrate/migration/models/role_dept.go",
    "chars": 191,
    "preview": "package models\n\ntype SysRoleDept struct {\n\tRoleId int `gorm:\"size:11;primaryKey\"`\n\tDeptId int `gorm:\"size:11;primaryKey\""
  },
  {
    "path": "cmd/migrate/migration/models/sys_api.go",
    "chars": 479,
    "preview": "package models\n\ntype SysApi struct {\n\tId     int    `json:\"id\" gorm:\"primaryKey;autoIncrement;comment:主键编码\"`\n\tHandle str"
  },
  {
    "path": "cmd/migrate/migration/models/sys_columns.go",
    "chars": 2595,
    "preview": "package models\n\ntype SysColumns struct {\n\tColumnId           int    `gorm:\"primaryKey;autoIncrement\" json:\"columnId\"`\n\tT"
  },
  {
    "path": "cmd/migrate/migration/models/sys_config.go",
    "chars": 621,
    "preview": "package models\n\ntype SysConfig struct {\n\tModel\n\tConfigName  string `json:\"configName\" gorm:\"type:varchar(128);comment:Co"
  },
  {
    "path": "cmd/migrate/migration/models/sys_dept.go",
    "chars": 764,
    "preview": "package models\n\ntype SysDept struct {\n\tDeptId   int    `json:\"deptId\" gorm:\"primaryKey;autoIncrement;\"` //部门编码\n\tParentId"
  },
  {
    "path": "cmd/migrate/migration/models/sys_dict_data.go",
    "chars": 1075,
    "preview": "package models\n\ntype DictData struct {\n\tDictCode  int    `gorm:\"primaryKey;autoIncrement;\" json:\"dictCode\" example:\"1\"` "
  },
  {
    "path": "cmd/migrate/migration/models/sys_dict_type.go",
    "chars": 425,
    "preview": "package models\n\ntype DictType struct {\n\tDictId   int    `gorm:\"primaryKey;autoIncrement;\" json:\"dictId\"`\n\tDictName strin"
  },
  {
    "path": "cmd/migrate/migration/models/sys_job.go",
    "chars": 979,
    "preview": "package models\n\ntype SysJob struct {\n\tJobId          int    `json:\"jobId\" gorm:\"primaryKey;autoIncrement\"` // 编码\n\tJobNam"
  },
  {
    "path": "cmd/migrate/migration/models/sys_login_log.go",
    "chars": 1059,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype SysLoginLog struct {\n\tModel\n\tUsername      string    `json:\"username\" gorm:\"typ"
  },
  {
    "path": "cmd/migrate/migration/models/sys_menu.go",
    "chars": 1097,
    "preview": "package models\n\ntype SysMenu struct {\n\tMenuId     int       `json:\"menuId\" gorm:\"primaryKey;autoIncrement\"`\n\tMenuName   "
  },
  {
    "path": "cmd/migrate/migration/models/sys_opera_log.go",
    "chars": 1773,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype SysOperaLog struct {\n\tModel\n\tTitle         string    `json:\"title\" gorm:\"type:v"
  },
  {
    "path": "cmd/migrate/migration/models/sys_post.go",
    "chars": 547,
    "preview": "package models\n\ntype SysPost struct {\n\tPostId   int    `gorm:\"primaryKey;autoIncrement\" json:\"postId\"` //岗位编号\n\tPostName "
  },
  {
    "path": "cmd/migrate/migration/models/sys_role.go",
    "chars": 903,
    "preview": "package models\n\ntype SysRole struct {\n\tRoleId    int       `json:\"roleId\" gorm:\"primaryKey;autoIncrement\"` // 角色编码\n\tRole"
  },
  {
    "path": "cmd/migrate/migration/models/sys_tables.go",
    "chars": 2152,
    "preview": "package models\n\ntype SysTables struct {\n\tTableId             int    `gorm:\"primaryKey;autoIncrement\" json:\"tableId\"`    "
  },
  {
    "path": "cmd/migrate/migration/models/sys_user.go",
    "chars": 1467,
    "preview": "package models\n\nimport (\n\t\"golang.org/x/crypto/bcrypt\"\n\t\"gorm.io/gorm\"\n)\n\ntype SysUser struct {\n\tUserId   int    `gorm:\""
  },
  {
    "path": "cmd/migrate/migration/models/tb_demo.go",
    "chars": 187,
    "preview": "package models\n\ntype TbDemo struct {\n\tModel\n\tName string `json:\"name\" gorm:\"type:varchar(128);comment:名称\"`\n\tModelTime\n\tC"
  },
  {
    "path": "cmd/migrate/migration/version/1599190683659_tables.go",
    "chars": 1244,
    "preview": "package version\n\nimport (\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\t\"runtime\"\n\n\t\"go-admin/cmd/migrate/migrat"
  },
  {
    "path": "cmd/migrate/migration/version/1653638869132_migrate.go",
    "chars": 1124,
    "preview": "package version\n\nimport (\n\t\"go-admin/cmd/migrate/migration/models\"\n\tcommon \"go-admin/common/models\"\n\t\"gorm.io/gorm\"\n\t\"ru"
  },
  {
    "path": "cmd/migrate/migration/version-local/doc.go",
    "chars": 98,
    "preview": "package version_local\n\nfunc init() {\n}\n\n/**\n开发者项目的迁移脚本放在这个目录里,init写法参考version目录里的migrate或者自动生成\n*/\n"
  },
  {
    "path": "cmd/migrate/server.go",
    "chars": 2804,
    "preview": "package migrate\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"github.com/go-admin-team/go-admin-core/sdk\"\n\t\"github.com/go-admin-team/go-ad"
  },
  {
    "path": "cmd/version/server.go",
    "chars": 409,
    "preview": "package version\n\nimport (\n\t\"fmt\"\n\t\"github.com/spf13/cobra\"\n\t\"go-admin/common/global\"\n)\n\nvar (\n\tStartCmd = &cobra.Command"
  },
  {
    "path": "common/actions/create.go",
    "chars": 1116,
    "preview": "package actions\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/api\"\n\t\"g"
  },
  {
    "path": "common/actions/delete.go",
    "chars": 1425,
    "preview": "package actions\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n"
  },
  {
    "path": "common/actions/index.go",
    "chars": 1360,
    "preview": "package actions\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-cor"
  },
  {
    "path": "common/actions/permission.go",
    "chars": 2666,
    "preview": "package actions\n\nimport (\n\t\"errors\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\""
  },
  {
    "path": "common/actions/type.go",
    "chars": 61,
    "preview": "package actions\n\nconst (\n\tPermissionKey = \"dataPermission\"\n)\n"
  },
  {
    "path": "common/actions/update.go",
    "chars": 1371,
    "preview": "package actions\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n"
  },
  {
    "path": "common/actions/view.go",
    "chars": 1431,
    "preview": "package actions\n\nimport (\n\t\"errors\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg/response\"\n\t\"net/http\"\n\n\t\"github.com"
  },
  {
    "path": "common/apis/api.go",
    "chars": 3105,
    "preview": "package apis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"github.com/go"
  },
  {
    "path": "common/database/initialize.go",
    "chars": 1789,
    "preview": "package database\n\nimport (\n\t\"time\"\n\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"github.com/go-admin-team/go-a"
  },
  {
    "path": "common/database/open.go",
    "chars": 285,
    "preview": "//go:build !sqlite3\n\npackage database\n\nimport (\n\t\"gorm.io/driver/mysql\"\n\t\"gorm.io/driver/postgres\"\n\t\"gorm.io/driver/sqls"
  },
  {
    "path": "common/database/open_sqlite3.go",
    "chars": 354,
    "preview": "//go:build sqlite3\n// +build sqlite3\n\npackage database\n\nimport (\n\t\"gorm.io/driver/mysql\"\n\t\"gorm.io/driver/postgres\"\n\t\"go"
  },
  {
    "path": "common/dto/auto_form.go",
    "chars": 2745,
    "preview": "package dto\n\ntype AutoForm struct {\n\tFields        []Field `json:\"fields\"`\n\tFormRef       string  `json:\"formRef\"`\n\tForm"
  },
  {
    "path": "common/dto/generate.go",
    "chars": 1987,
    "preview": "package dto\n\nimport (\n\tvd \"github.com/bytedance/go-tagexpr/v2/validator\"\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"gith"
  },
  {
    "path": "common/dto/order.go",
    "chars": 257,
    "preview": "package dto\n\nimport (\n\t\"gorm.io/gorm\"\n\t\"gorm.io/gorm/clause\"\n)\n\nfunc OrderDest(sort string, bl bool) func(db *gorm.DB) *"
  },
  {
    "path": "common/dto/pagination.go",
    "chars": 322,
    "preview": "package dto\n\ntype Pagination struct {\n\tPageIndex int `form:\"pageIndex\"`\n\tPageSize  int `form:\"pageSize\"`\n}\n\nfunc (m *Pag"
  },
  {
    "path": "common/dto/search.go",
    "chars": 1664,
    "preview": "package dto\n\nimport (\n\t\"github.com/go-admin-team/go-admin-core/tools/search\"\n\t\"go-admin/common/global\"\n\t\"gorm.io/gorm\"\n)"
  },
  {
    "path": "common/dto/type.go",
    "chars": 361,
    "preview": "package dto\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"go-admin/common/models\"\n)\n\ntype Index interface {\n\tGenerate() Index\n"
  },
  {
    "path": "common/file_store/initialize.go",
    "chars": 989,
    "preview": "package file_store\n\nimport \"fmt\"\n\ntype OXS struct {\n\t// Endpoint 访问域名\n\tEndpoint string\n\t// AccessKeyID AK\n\tAccessKeyID s"
  },
  {
    "path": "common/file_store/interface.go",
    "chars": 626,
    "preview": "package file_store\n\n// DriverType 驱动类型\ntype DriverType string\n\nconst (\n\t// HuaweiOBS 华为云OBS\n\tHuaweiOBS DriverType = \"Hua"
  },
  {
    "path": "common/file_store/kodo.go",
    "chars": 2431,
    "preview": "package file_store\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"github.com/qiniu/go-sdk/v7/auth/qbox\"\n\t\"github.com/qiniu/go-sdk/v7/stor"
  },
  {
    "path": "common/file_store/kodo_test.go",
    "chars": 466,
    "preview": "package file_store\n\nimport (\n\t\"testing\"\n)\n\nfunc TestKODOUpload(t *testing.T) {\n\te := OXS{\"\", \"\", \"\", \"\"}\n\tvar oxs = e.Se"
  },
  {
    "path": "common/file_store/obs.go",
    "chars": 1263,
    "preview": "package file_store\n\nimport (\n\t\"fmt\"\n\t\"github.com/huaweicloud/huaweicloud-sdk-go-obs/obs\"\n\t\"log\"\n)\n\ntype HuaWeiOBS struct"
  },
  {
    "path": "common/file_store/obs_test.go",
    "chars": 229,
    "preview": "package file_store\n\nimport (\n\t\"testing\"\n)\n\nfunc TestOBSUpload(t *testing.T) {\n\te := OXS{\"\", \"\", \"\", \"\"}\n\tvar oxs = e.Set"
  },
  {
    "path": "common/file_store/oss.go",
    "chars": 1151,
    "preview": "package file_store\n\nimport (\n\t\"github.com/aliyun/aliyun-oss-go-sdk/oss\"\n\t\"log\"\n)\n\ntype ALiYunOSS struct {\n\tClient     in"
  },
  {
    "path": "common/file_store/oss_test.go",
    "chars": 235,
    "preview": "package file_store\n\nimport (\n\t\"testing\"\n)\n\nfunc TestOSSUpload(t *testing.T) {\n\t// 打括号内填写自己的测试信息即可\n\te := OXS{}\n\tvar oxs ="
  },
  {
    "path": "common/global/adm.go",
    "chars": 120,
    "preview": "package global\n\nconst (\n\t// Version go-admin version info\n\tVersion = \"2.2.0\"\n)\n\nvar (\n\t// Driver 数据库驱动\n\tDriver string\n)\n"
  },
  {
    "path": "common/global/casbin.go",
    "chars": 521,
    "preview": "package global\n\nimport (\n\t\"github.com/casbin/casbin/v2\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-"
  },
  {
    "path": "common/global/logo.go",
    "chars": 4632,
    "preview": "package global\n\n// LogoContent go-admin ascii显示,减少静态文件依赖\nvar LogoContent = []byte{10, 32, 32, 32, 32, 32, 32, 32, 32, 32"
  },
  {
    "path": "common/global/topic.go",
    "chars": 124,
    "preview": "package global\n\nconst (\n\tLoginLog   = \"login_log_queue\"\n\tOperateLog = \"operate_log_queue\"\n\tApiCheck   = \"api_check_queue"
  },
  {
    "path": "common/ip.go",
    "chars": 532,
    "preview": "package common\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"strings\"\n)\n\nfunc GetClientIP(c *gin.Context) string {\n\t// 优先从 X-F"
  },
  {
    "path": "common/middleware/auth.go",
    "chars": 1022,
    "preview": "package middleware\n\nimport (\n\t\"time\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\tjwt \"github.com/go-admin-tea"
  },
  {
    "path": "common/middleware/customerror.go",
    "chars": 1056,
    "preview": "package middleware\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n"
  },
  {
    "path": "common/middleware/db.go",
    "chars": 223,
    "preview": "package middleware\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk\"\n)\n\nfunc WithConte"
  },
  {
    "path": "common/middleware/demo.go",
    "chars": 620,
    "preview": "package middleware\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk/config\"\n\t\"net/http"
  },
  {
    "path": "common/middleware/handler/auth.go",
    "chars": 5290,
    "preview": "package handler\n\nimport (\n\t\"go-admin/app/admin/models\"\n\t\"go-admin/common\"\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"git"
  },
  {
    "path": "common/middleware/handler/httpshandler.go",
    "chars": 428,
    "preview": "package handler\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/unrolled/secure\"\n\n\t\"github.com/go-admin-team/go-admin"
  },
  {
    "path": "common/middleware/handler/login.go",
    "chars": 1002,
    "preview": "package handler\n\nimport (\n\tlog \"github.com/go-admin-team/go-admin-core/logger\"\n\t\"github.com/go-admin-team/go-admin-core/"
  },
  {
    "path": "common/middleware/handler/ping.go",
    "chars": 130,
    "preview": "package handler\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc Ping(c *gin.Context) {\n\tc.JSON(200, gin.H{\n\t\t\"message\": \"o"
  },
  {
    "path": "common/middleware/handler/role.go",
    "chars": 904,
    "preview": "package handler\n\nimport \"go-admin/common/models\"\n\ntype SysRole struct {\n\tRoleId    int    `json:\"roleId\" gorm:\"primaryKe"
  },
  {
    "path": "common/middleware/handler/user.go",
    "chars": 1347,
    "preview": "package handler\n\nimport (\n\t\"go-admin/common/models\"\n\t\"gorm.io/gorm\"\n)\n\ntype SysUser struct {\n\tUserId   int    `gorm:\"pri"
  },
  {
    "path": "common/middleware/header.go",
    "chars": 1578,
    "preview": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\n// NoCache is a middleware function tha"
  },
  {
    "path": "common/middleware/init.go",
    "chars": 902,
    "preview": "package middleware\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-admin-team/go-admin-core/sdk\"\n\tjwt \"github.com/"
  },
  {
    "path": "common/middleware/logger.go",
    "chars": 3491,
    "preview": "package middleware\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"go-admin/app/admin/service/dto\"\n\t\"go-admin/common\"\n\t\"i"
  },
  {
    "path": "common/middleware/permission.go",
    "chars": 1676,
    "preview": "package middleware\n\nimport (\n\t\"github.com/casbin/casbin/v2/util\"\n\t\"net/http\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/g"
  },
  {
    "path": "common/middleware/request_id.go",
    "chars": 809,
    "preview": "package middleware\n\nimport (\n\t\"github.com/go-admin-team/go-admin-core/logger\"\n\t\"github.com/go-admin-team/go-admin-core/s"
  },
  {
    "path": "common/middleware/sentinel.go",
    "chars": 717,
    "preview": "package middleware\n\nimport (\n\t\"github.com/alibaba/sentinel-golang/core/system\"\n\tsentinel \"github.com/alibaba/sentinel-go"
  },
  {
    "path": "common/middleware/settings.go",
    "chars": 1720,
    "preview": "package middleware\n\ntype UrlInfo struct {\n\tUrl    string\n\tMethod string\n}\n\n// CasbinExclude casbin 排除的路由列表\nvar CasbinExc"
  },
  {
    "path": "common/middleware/trace.go",
    "chars": 729,
    "preview": "package middleware\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/opentracing/opentracing-go\"\n)\n\n// Trace 链路追踪\nfunc "
  },
  {
    "path": "common/models/by.go",
    "chars": 696,
    "preview": "package models\n\nimport (\n\t\"time\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype ControlBy struct {\n\tCreateBy int `json:\"createBy\" gorm:\"index;"
  },
  {
    "path": "common/models/menu.go",
    "chars": 159,
    "preview": "package models\n\n// Menu 菜单中的类型枚举值\nconst (\n\t// Directory 目录\n\tDirectory string = \"M\"\n\t// Menu 菜单\n\tMenu      string = \"C\"\n\t"
  },
  {
    "path": "common/models/migrate.go",
    "chars": 208,
    "preview": "package models\n\nimport \"time\"\n\ntype Migration struct {\n\tVersion   string    `gorm:\"primaryKey\"`\n\tApplyTime time.Time `go"
  },
  {
    "path": "common/models/response.go",
    "chars": 580,
    "preview": "package models\n\ntype Response struct {\n\t// 代码\n\tCode int `json:\"code\" example:\"200\"`\n\t// 数据集\n\tData interface{} `json:\"dat"
  },
  {
    "path": "common/models/type.go",
    "chars": 193,
    "preview": "package models\n\nimport \"gorm.io/gorm/schema\"\n\ntype ActiveRecord interface {\n\tschema.Tabler\n\tSetCreateBy(createBy int)\n\tS"
  },
  {
    "path": "common/models/user.go",
    "chars": 1034,
    "preview": "package models\n\nimport (\n\t\"gorm.io/gorm\"\n\n\t\"github.com/go-admin-team/go-admin-core/sdk/pkg\"\n)\n\n// BaseUser 密码登录基础用户\ntype"
  },
  {
    "path": "common/response/binding.go",
    "chars": 2075,
    "preview": "package response\n\nimport (\n\t\"fmt\"\n\t\"github.com/gin-gonic/gin/binding\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n)\n\nconst (\n\t_ uint8 "
  },
  {
    "path": "common/service/service.go",
    "chars": 387,
    "preview": "package service\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-admin-team/go-admin-core/logger\"\n\t\"gorm.io/gorm\"\n)\n\ntype Service struc"
  },
  {
    "path": "common/storage/initialize.go",
    "chars": 1027,
    "preview": "/*\n * @Author: zhangwenjian\n * @Date: 2025/04/13 22:03\n * @Last Modified by: zhangwenjian\n * @Last Modified time: 2025/0"
  },
  {
    "path": "config/READMEN.md",
    "chars": 597,
    "preview": "# ⚙ 配置详情\n\n1. 配置文件说明\n```yml\nsettings:\n  application:  \n    # 项目启动环境            \n    mode: dev  # dev开发环境 prod线上环境;\n    ho"
  },
  {
    "path": "config/db-begin-mysql.sql",
    "chars": 46,
    "preview": "SET NAMES utf8mb4;\nSET FOREIGN_KEY_CHECKS = 0;"
  }
]

// ... and 48 more files (download for full content)

About this extraction

This page contains the full source code of the go-admin-team/go-admin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 248 files (1.5 MB), approximately 452.0k tokens, and a symbol index with 1814 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!