500
7 |10 | 呕吼,服务出错了! 11 |
12 |15 | OPS, Server Error! 16 |
17 |18 | {{ error }} 19 |
20 |├── .dockerignore ├── .env ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ ├── feature_request.yml │ ├── other.yml │ └── question.yml └── workflows │ ├── release-docker.yaml │ ├── release-mysql-docker.yaml │ ├── release-pgsql-docker.yaml │ ├── release-sqlite-docker.yaml │ ├── release-sqlserver-docker.yaml │ └── test-docker.yaml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── app.config.ts ├── app.vue ├── assets └── css │ ├── calendar.css │ └── main.css ├── components ├── GlobalAlert.vue ├── GlobalConfirm.vue ├── charts │ ├── AttributionPie.vue │ ├── DailyLineChart.vue │ ├── IndustryTypePie.vue │ ├── MonthBar.vue │ └── PayTypePie.vue ├── datas │ ├── CsvFlowTable.vue │ ├── FlowTable.vue │ └── MonthAnalysis.vue └── dialog │ ├── BookDialog.vue │ ├── ChangePasswordDialog.vue │ ├── FlowAutoDeduplicationDialog.vue │ ├── FlowAutoMergeDialog.vue │ ├── FlowCustomImport.vue │ ├── FlowEditDialog.vue │ ├── FlowEditInvoiceDialog.vue │ ├── FlowJsonImportDialog.vue │ └── SetConvertDialog.vue ├── doc ├── DISPLAY.md ├── NOTICE.md └── readme.txt ├── docker ├── docker-compose.yaml └── entrypoint.sh ├── i18n.config.ts ├── layouts ├── admin.vue ├── default.vue └── public.vue ├── lib └── prisma.ts ├── locales ├── en │ ├── en.json │ └── index.ts └── zh │ ├── index.ts │ └── zh.json ├── middleware ├── admin.ts └── auth.ts ├── modules └── initdb.ts ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages ├── 500.vue ├── admin │ ├── books │ │ ├── EditInfoDialog.vue │ │ ├── api.ts │ │ ├── flag.ts │ │ └── index.client.vue │ ├── getpassword.vue │ ├── index.client.vue │ ├── login.client.vue │ ├── settings │ │ └── index.client.vue │ ├── typeRelations │ │ ├── EditInfoDialog.vue │ │ ├── api.ts │ │ ├── flag.ts │ │ └── index.client.vue │ └── users │ │ ├── EditInfoDialog.vue │ │ ├── api.ts │ │ ├── flag.ts │ │ └── index.client.vue ├── analysis │ └── index.client.vue ├── books │ ├── EditInfoDialog.vue │ ├── GetShareDialog.vue │ ├── api.ts │ ├── flag.ts │ └── index.client.vue ├── budget │ └── index.client.vue ├── calendar │ └── index.client.vue ├── flows │ └── index.client.vue ├── index.vue ├── login.vue └── types │ └── index.client.vue ├── plugins └── system.ts ├── prisma ├── migrations │ ├── 20250116134313_init │ │ └── migration.sql │ ├── 20250206090137_update_user_email │ │ └── migration.sql │ ├── 20250209061645_add_flow_and_book │ │ └── migration.sql │ ├── 20250315083738_add_budget │ │ └── migration.sql │ ├── 20250316033948_fix_budget_month │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── public ├── cashbook-mini.jpg ├── csvtemplate.csv ├── logo.png ├── manifest.json ├── pwa │ ├── manifest-icon-192.maskable.png │ └── manifest-icon-512.maskable.png └── robots.txt ├── server ├── api │ ├── admin │ │ ├── entry │ │ │ ├── books │ │ │ │ ├── all.ts │ │ │ │ ├── del.ts │ │ │ │ ├── list.ts │ │ │ │ ├── page.ts │ │ │ │ └── update.ts │ │ │ ├── settings │ │ │ │ ├── export.ts │ │ │ │ ├── exportImg.ts │ │ │ │ ├── get.ts │ │ │ │ ├── import.ts │ │ │ │ ├── importImg.ts │ │ │ │ └── update.ts │ │ │ ├── typeRelations │ │ │ │ ├── add.ts │ │ │ │ ├── all.ts │ │ │ │ ├── del.ts │ │ │ │ ├── list.ts │ │ │ │ ├── page.ts │ │ │ │ └── update.ts │ │ │ └── users │ │ │ │ ├── add.ts │ │ │ │ ├── all.ts │ │ │ │ ├── del.ts │ │ │ │ ├── list.ts │ │ │ │ ├── page.ts │ │ │ │ └── update.ts │ │ ├── getPassword.ts │ │ ├── login.ts │ │ └── logout.ts │ ├── check.ts │ ├── checkuser.ts │ ├── config.ts │ ├── entry │ │ ├── analytics │ │ │ ├── attribution.ts │ │ │ ├── daily.ts │ │ │ ├── industryType.ts │ │ │ ├── month.ts │ │ │ ├── monthAnalysis.ts │ │ │ └── payType.ts │ │ ├── book │ │ │ ├── add.ts │ │ │ ├── all.ts │ │ │ ├── del.ts │ │ │ ├── inshare.ts │ │ │ ├── list.ts │ │ │ ├── page.ts │ │ │ ├── share.ts │ │ │ └── update.ts │ │ ├── budget │ │ │ ├── add.ts │ │ │ ├── all.ts │ │ │ ├── del.ts │ │ │ ├── list.ts │ │ │ ├── reloadUsedAmount.ts │ │ │ └── update.ts │ │ ├── fixedFlow │ │ │ ├── add.ts │ │ │ ├── all.ts │ │ │ ├── del.ts │ │ │ ├── list.ts │ │ │ └── update.ts │ │ ├── flow │ │ │ ├── add.ts │ │ │ ├── all.ts │ │ │ ├── condidate │ │ │ │ ├── autos.ts │ │ │ │ ├── confirm.ts │ │ │ │ ├── ignore.ts │ │ │ │ └── ignoreAll.ts │ │ │ ├── deduplication │ │ │ │ └── autos.ts │ │ │ ├── del.ts │ │ │ ├── dels.ts │ │ │ ├── getAttributions.ts │ │ │ ├── getNames.ts │ │ │ ├── imports.ts │ │ │ ├── invoice │ │ │ │ ├── clean.ts │ │ │ │ ├── del.ts │ │ │ │ ├── show.get.ts │ │ │ │ └── upload.ts │ │ │ ├── list.ts │ │ │ ├── page.ts │ │ │ ├── type │ │ │ │ ├── getAll.ts │ │ │ │ ├── getIndustryType.ts │ │ │ │ ├── getPayType.ts │ │ │ │ └── update.ts │ │ │ ├── update.ts │ │ │ └── updates.ts │ │ ├── test.ts │ │ ├── typeRelation │ │ │ ├── list.ts │ │ │ └── update.ts │ │ └── user │ │ │ ├── changePassword.ts │ │ │ └── info.ts │ ├── login.ts │ ├── logout.ts │ └── register.ts ├── middleware │ └── auth.ts ├── plugins │ └── initdata.ts ├── routes │ └── test.ts └── utils │ ├── common.ts │ ├── data.ts │ └── test.js ├── tsconfig.json └── utils ├── alert.ts ├── api.ts ├── apis.ts ├── common.ts ├── confirm.ts ├── constant.ts ├── fileUtils.ts ├── flag.ts ├── flowConvert.ts ├── model.ts ├── store.ts └── table.ts /.dockerignore: -------------------------------------------------------------------------------- 1 | .nuxt/ 2 | .output/ 3 | .github/ 4 | .git/ 5 | 6 | node_modules/ 7 | data/ 8 | doc/ -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | NODE_ENV="development" # development, production 2 | DATEBASE_PROVIDER="postgresql" 3 | DATABASE_URL="postgresql://postgres:123456@127.0.0.1:5432/cashbook?schema=sample" 4 | 5 | NUXT_APP_VERSION="4.1.2" 6 | NUXT_DATA_PATH="E:/Code/cashbook/data" 7 | 8 | NUXT_AUTH_SECRET="auth123" 9 | 10 | NUXT_ADMIN_USERNAME="admin" 11 | NUXT_ADMIN_PASSWORD="fb35e9343a1c095ce1c1d1eb6973dc570953159441c3ee315ecfefb6ed05f4cc" -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: "Bug👻反馈" 2 | description: 提交 Bug 反馈 3 | title: "[BUG]: " 4 | labels: [bug] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: 问题概述 9 | description: 请简要描述您遇到的问题。 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | attributes: 15 | label: 环境信息 16 | description: 请提供以下环境信息: 17 | value: | 18 | - 服务器操作系统: 19 | - Cashbook部署方式: 20 | - Cashbook版本: 21 | - 浏览器版本: 22 | - 其他相关信息: 23 | validations: 24 | required: true 25 | 26 | - type: textarea 27 | attributes: 28 | label: 截图/录屏/日志 29 | description: 请附上截图、录屏或错误日志信息,以便我们更直观地了解问题。 30 | value: | 31 | **截图/录屏**: 32 | 33 | **日志**: 34 | 35 | - type: textarea 36 | attributes: 37 | label: 复现步骤/预期结果/实际结果 38 | description: 请详细描述如何复现问题,包括操作步骤、截图或录屏等。 39 | value: | 40 | **复现步骤**: 41 | 42 | **预期结果**: 43 | 44 | **实际结果**: 45 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 官方 QQ 群 4 | link: https://qm.qq.com/q/nmaDsy62jI 5 | about: '点击链接加入群聊【Cashbook交流群】: 564081656' 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: 功能❤️建议 2 | description: 提交我的有趣想法 3 | title: "[功能建议]: " 4 | labels: [enhancement] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: 详细描述 9 | description: 请详细描述您希望添加的功能,包括具体用法、界面设计等。 10 | 11 | - type: textarea 12 | attributes: 13 | label: 理由 14 | description: 请说明您提出此建议的理由,以及该功能可能带来的好处。 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.yml: -------------------------------------------------------------------------------- 1 | name: 其他👽 2 | description: 提交其他类型Issue 3 | title: "[其他]: " 4 | labels: [other] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: 问题描述 9 | description: 请在此处填写您的 Issue 内容。 10 | validations: 11 | required: true 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: 萌新🤗提问 2 | description: 有不懂的问题,向大家提问 3 | title: "[提问]: " 4 | labels: [question] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: 问题描述 9 | description: 请详细描述您遇到的问题,包括具体错误信息、操作步骤等。 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | attributes: 15 | label: 其他说明 16 | description: 如果您有其他需要补充说明的内容,请在此处填写。 17 | -------------------------------------------------------------------------------- /.github/workflows/release-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Release-Docker 2 | 3 | on: 4 | push: 5 | tags: 6 | - v*.*.* 7 | 8 | jobs: 9 | docker_build: 10 | environment: docker_hub 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v4 16 | 17 | - name: Get version 18 | id: get_version 19 | run: | 20 | VERSION=$(git describe --tags --always --match 'v*' | sed -n 's|^v\([0-9]*\.[0-9]*\.[0-9]*\)\(-.*\)\{0,1\}|\1|p') 21 | echo "VERSION=$VERSION" >> $GITHUB_ENV # Store version as an environment variable 22 | 23 | - name: Log in to Docker Hub 24 | uses: docker/login-action@v3 25 | with: 26 | username: ${{ secrets.DOCKER_USERNAME }} 27 | password: ${{ secrets.DOCKER_PASSWORD }} 28 | 29 | - name: Build Docker image 30 | run: docker build -t dingdangdog/cashbook:${VERSION} -t dingdangdog/cashbook:latest . 31 | 32 | - name: Push Docker image 33 | run: | 34 | docker push dingdangdog/cashbook:${VERSION} 35 | docker push dingdangdog/cashbook:latest 36 | 37 | # 设置 Docker Buildx 38 | - name: Set up Docker Buildx 39 | uses: docker/setup-buildx-action@v3 40 | 41 | # 构建 arm64 镜像并推送 42 | - name: Build and push arm64 image 43 | run: | 44 | docker buildx build \ 45 | --platform linux/arm64 \ 46 | --tag dingdangdog/cashbook:${VERSION}-arm64 \ 47 | --tag dingdangdog/cashbook:latest-arm64 \ 48 | --push . 49 | 50 | - name: Clean up Docker images 51 | run: docker system prune -af -------------------------------------------------------------------------------- /.github/workflows/release-mysql-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Release-MySQL-Docker 2 | 3 | on: 4 | push: 5 | tags: 6 | - v*.*.* 7 | 8 | jobs: 9 | docker_build: 10 | environment: docker_hub 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v4 16 | with: 17 | ref: main-mysql 18 | 19 | - name: Get version 20 | id: get_version 21 | run: | 22 | # Get the tag name from the GitHub context (without the 'v' prefix) 23 | VERSION="${GITHUB_REF#refs/tags/v}" 24 | echo "VERSION=$VERSION" >> $GITHUB_ENV # Store version as an environment variable 25 | 26 | - name: Log in to Docker Hub 27 | uses: docker/login-action@v3 28 | with: 29 | username: ${{ secrets.DOCKER_USERNAME }} 30 | password: ${{ secrets.DOCKER_PASSWORD }} 31 | 32 | - name: Build Docker image 33 | run: docker build -t dingdangdog/cashbook:${VERSION}-mysql -t dingdangdog/cashbook:latest-mysql . 34 | 35 | - name: Push Docker image 36 | run: | 37 | docker push dingdangdog/cashbook:${VERSION}-mysql 38 | docker push dingdangdog/cashbook:latest-mysql 39 | 40 | # 设置 Docker Buildx 41 | - name: Set up Docker Buildx 42 | uses: docker/setup-buildx-action@v3 43 | 44 | # 构建 arm64 镜像并推送 45 | - name: Build and push arm64 image 46 | run: | 47 | docker buildx build \ 48 | --platform linux/arm64 \ 49 | --tag dingdangdog/cashbook:${VERSION}-arm64-mysql \ 50 | --tag dingdangdog/cashbook:latest-arm64-mysql \ 51 | --push . 52 | 53 | - name: Clean up Docker images 54 | run: docker system prune -af 55 | -------------------------------------------------------------------------------- /.github/workflows/release-pgsql-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Release-PgSQL-Docker 2 | 3 | on: 4 | push: 5 | tags: 6 | - v*.*.* 7 | 8 | jobs: 9 | docker_build: 10 | environment: docker_hub 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v4 16 | with: 17 | ref: main-pgsql 18 | 19 | - name: Get version 20 | id: get_version 21 | run: | 22 | # Get the tag name from the GitHub context (without the 'v' prefix) 23 | VERSION="${GITHUB_REF#refs/tags/v}" 24 | echo "VERSION=$VERSION" >> $GITHUB_ENV # Store version as an environment variable 25 | 26 | - name: Log in to Docker Hub 27 | uses: docker/login-action@v3 28 | with: 29 | username: ${{ secrets.DOCKER_USERNAME }} 30 | password: ${{ secrets.DOCKER_PASSWORD }} 31 | 32 | - name: Build Docker image 33 | run: docker build -t dingdangdog/cashbook:${VERSION}-pgsql -t dingdangdog/cashbook:latest-pgsql . 34 | 35 | - name: Push Docker image 36 | run: | 37 | docker push dingdangdog/cashbook:${VERSION}-pgsql 38 | docker push dingdangdog/cashbook:latest-pgsql 39 | 40 | # 设置 Docker Buildx 41 | - name: Set up Docker Buildx 42 | uses: docker/setup-buildx-action@v3 43 | 44 | # 构建 arm64 镜像并推送 45 | - name: Build and push arm64 image 46 | run: | 47 | docker buildx build \ 48 | --platform linux/arm64 \ 49 | --tag dingdangdog/cashbook:${VERSION}-arm64-pgsql \ 50 | --tag dingdangdog/cashbook:latest-arm64-pgsql \ 51 | --push . 52 | 53 | - name: Clean up Docker images 54 | run: docker system prune -af 55 | -------------------------------------------------------------------------------- /.github/workflows/release-sqlite-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Release-SQLite-Docker 2 | 3 | on: 4 | push: 5 | tags: 6 | - v*.*.* 7 | 8 | jobs: 9 | docker_build: 10 | environment: docker_hub 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v4 16 | with: 17 | ref: main-sqlite 18 | 19 | - name: Get version 20 | id: get_version 21 | run: | 22 | # Get the tag name from the GitHub context (without the 'v' prefix) 23 | VERSION="${GITHUB_REF#refs/tags/v}" 24 | echo "VERSION=$VERSION" >> $GITHUB_ENV # Store version as an environment variable 25 | 26 | - name: Log in to Docker Hub 27 | uses: docker/login-action@v3 28 | with: 29 | username: ${{ secrets.DOCKER_USERNAME }} 30 | password: ${{ secrets.DOCKER_PASSWORD }} 31 | 32 | - name: Build Docker image 33 | run: docker build -t dingdangdog/cashbook:${VERSION}-sqlite -t dingdangdog/cashbook:latest-sqlite . 34 | 35 | - name: Push Docker image 36 | run: | 37 | docker push dingdangdog/cashbook:${VERSION}-sqlite 38 | docker push dingdangdog/cashbook:latest-sqlite 39 | 40 | # 设置 Docker Buildx 41 | - name: Set up Docker Buildx 42 | uses: docker/setup-buildx-action@v3 43 | 44 | # 构建 arm64 镜像并推送 45 | - name: Build and push arm64 image 46 | run: | 47 | docker buildx build \ 48 | --platform linux/arm64 \ 49 | --tag dingdangdog/cashbook:${VERSION}-arm64-sqlite \ 50 | --tag dingdangdog/cashbook:latest-arm64-sqlite \ 51 | --push . 52 | 53 | - name: Clean up Docker images 54 | run: docker system prune -af 55 | -------------------------------------------------------------------------------- /.github/workflows/release-sqlserver-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Release-SqlServer-Docker 2 | 3 | on: 4 | push: 5 | tags: 6 | - v*.*.* 7 | 8 | jobs: 9 | docker_build: 10 | environment: docker_hub 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v4 16 | with: 17 | ref: main-sqlserver 18 | 19 | - name: Get version 20 | id: get_version 21 | run: | 22 | # Get the tag name from the GitHub context (without the 'v' prefix) 23 | VERSION="${GITHUB_REF#refs/tags/v}" 24 | echo "VERSION=$VERSION" >> $GITHUB_ENV # Store version as an environment variable 25 | 26 | - name: Log in to Docker Hub 27 | uses: docker/login-action@v3 28 | with: 29 | username: ${{ secrets.DOCKER_USERNAME }} 30 | password: ${{ secrets.DOCKER_PASSWORD }} 31 | 32 | - name: Build Docker image 33 | run: docker build -t dingdangdog/cashbook:${VERSION}-sqlserver -t dingdangdog/cashbook:latest-sqlserver . 34 | 35 | - name: Push Docker image 36 | run: | 37 | docker push dingdangdog/cashbook:${VERSION}-sqlserver 38 | docker push dingdangdog/cashbook:latest-sqlserver 39 | 40 | # 设置 Docker Buildx 41 | - name: Set up Docker Buildx 42 | uses: docker/setup-buildx-action@v3 43 | 44 | # 构建 arm64 镜像并推送 45 | - name: Build and push arm64 image 46 | run: | 47 | docker buildx build \ 48 | --platform linux/arm64 \ 49 | --tag dingdangdog/cashbook:${VERSION}-arm64-sqlserver \ 50 | --tag dingdangdog/cashbook:latest-arm64-sqlserver \ 51 | --push . 52 | 53 | - name: Clean up Docker images 54 | run: docker system prune -af 55 | -------------------------------------------------------------------------------- /.github/workflows/test-docker.yaml: -------------------------------------------------------------------------------- 1 | name: Test Docker 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | target: 7 | description: 输入打包版本号 8 | required: true 9 | 10 | jobs: 11 | docker_build: 12 | environment: docker_hub 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout code 17 | uses: actions/checkout@v4 18 | 19 | - name: Build Docker image 20 | run: docker build -t dingdangdog/cashbook:${{ github.event.inputs.target }} . 21 | 22 | - name: Log in to Docker Hub 23 | uses: docker/login-action@v3 24 | with: 25 | username: ${{ secrets.DOCKER_USERNAME }} 26 | password: ${{ secrets.DOCKER_PASSWORD }} 27 | 28 | - name: Push Docker image 29 | run: | 30 | docker push dingdangdog/cashbook:${{ github.event.inputs.target }} 31 | 32 | - name: Clean up Docker images 33 | run: docker system prune -af 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | data 5 | .nuxt 6 | .nitro 7 | .cache 8 | dist 9 | 10 | # Node dependencies 11 | node_modules 12 | 13 | # Logs 14 | logs 15 | *.log 16 | 17 | # Misc 18 | .DS_Store 19 | .fleet 20 | .idea 21 | 22 | # Local env files 23 | .env 24 | .env.* 25 | !.env.example 26 | 27 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20-alpine3.21 AS builder 2 | 3 | WORKDIR /app 4 | 5 | COPY package*.json ./ 6 | 7 | # 安装依赖并生成 Prisma Client 8 | RUN npm install 9 | 10 | COPY . . 11 | 12 | RUN npx prisma generate 13 | RUN npm run build 14 | # RUN npm run prisma:build 15 | 16 | FROM node:20-alpine3.21 AS runner 17 | 18 | LABEL author.name="DingDangDog" 19 | LABEL author.email="dingdangdogx@outlook.com" 20 | LABEL project.name="cashbook" 21 | LABEL project.version="3" 22 | 23 | WORKDIR /app 24 | 25 | # 复制生产环境需要的文件 26 | COPY --from=builder /app/.output/ ./ 27 | COPY --from=builder /app/.output/server/node_modules/ ./node_modules/ 28 | COPY --from=builder /app/.output/server/node_modules/.prisma/ ./.prisma/ 29 | COPY ./prisma/ ./prisma/ 30 | COPY ./docker/entrypoint.sh ./entrypoint.sh 31 | RUN chmod +x entrypoint.sh 32 | 33 | # RUN ls 34 | 35 | # 预装prisma,可以提升容器启动速度,但镜像体积会大很多 36 | RUN npm install -g prisma@6.2.1 37 | 38 | ENV DATABASE_URL="postgresql://postgres:123456@localhost:5432/cashbook?schema=public" 39 | 40 | ENV NUXT_APP_VERSION="4.1.6" 41 | ENV NUXT_DATA_PATH="/app/data" 42 | 43 | ENV NUXT_AUTH_SECRET="auth123" 44 | 45 | ENV NUXT_ADMIN_USERNAME="admin" 46 | # 密码是加密后的,加密方法见 server/utils 中的 test.js 或 common.ts 47 | ENV NUXT_ADMIN_PASSWORD="fb35e9343a1c095ce1c1d1eb6973dc570953159441c3ee315ecfefb6ed05f4cc" 48 | 49 | ENV PORT="9090" 50 | 51 | VOLUME /app/data/ 52 | 53 | EXPOSE 9090 54 | # ENTRYPOINT [ "sh","entrypoint.sh" ] 55 | ENTRYPOINT ["/app/entrypoint.sh"] 56 | # CMD ["/app/entrypoint.sh"] 57 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-2025 dingdangdog 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
7 |
8 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
11 | 总收入:
18 | 最高收入类型:
19 |
日期:{{ monthData?.maxIn.day }}
29 |收入类型:{{ monthData?.maxIn.industryType }}
30 |收款方式:{{ monthData?.maxIn.payType }}
31 |名称:{{ monthData?.maxIn.name }}
32 |
33 | 金额:
49 | 总支出:
56 | 最高支出类型:
57 |
67 | 日期:{{ monthData?.maxOut.day }} 68 |
69 |70 | 支出类型:{{ monthData?.maxOut.industryType }} 71 |
72 |73 | 支付方式:{{ monthData?.maxOut.payType }} 74 |
75 |76 | 名称:{{ monthData?.maxOut.name || "" }},{{ 77 | monthData?.maxOut.description || "" 78 | }} 79 |
80 |
81 | 金额:
92 | 不计收支:
26 | 共解析到{{ jsonFlows.length }}条流水数据,可以点击确认导入 27 |
28 |29 | 请选择要导入的Json文件 30 |
31 |500
7 |18 | {{ error }} 19 |
20 |账号:{{ newAccount }}
56 |加密密码:{{ newPassword }}
57 |45 | 使用他人分享的共享Key添加共享账本。 46 |
47 |