diff --git a/.github/workflows/demo_site_deploy.yml b/.github/workflows/demo_site_deploy.yml new file mode 100644 index 0000000..fe404d5 --- /dev/null +++ b/.github/workflows/demo_site_deploy.yml @@ -0,0 +1,62 @@ +name: deploy-demo-site + + +on: + workflow_dispatch: + push: + branches: [ "main" ] + +jobs: + build-deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20.x" + + - name: Set up Golang + uses: actions/setup-go@v5 + with: + go-version: "1.20" + + - name: Install npm dependencies + run: npm ci + working-directory: web/ + + - name: Run npm build + run: export NODE_ENV=prod && npm run build:demo + working-directory: web/ + + - name: Check build static + run: ls dist/ -la + working-directory: web/ + + - name: Install Go modules + run: go mod tidy + + - name: Build Go + run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o Message-Nest + + - name: Copy files to server + uses: appleboy/scp-action@master + with: + host: ${{ secrets.SERVER_HOST }} + port: ${{ secrets.SERVER_PORT }} + username: ${{ secrets.SERVER_USERNAME }} + password: ${{ secrets.SERVER_PASSWD }} + source: "Message-Nest" + target: ${{ secrets.REMOTE_DEMO_TARGET }} + + - name: SSH into server and restart service + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.SERVER_HOST }} + port: ${{ secrets.SERVER_PORT }} + username: ${{ secrets.SERVER_USERNAME }} + password: ${{ secrets.SERVER_PASSWD }} + script: | + ${{ secrets.REMOTE_DEMO_SCRIPT }} diff --git a/web/.env.demo b/web/.env.demo new file mode 100644 index 0000000..95c4264 --- /dev/null +++ b/web/.env.demo @@ -0,0 +1 @@ +VITE_RUN_MODE = 'demo' \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index 2f77e98..fc38a82 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -23,6 +23,7 @@ "@rushstack/eslint-patch": "^1.3.3", "@vitejs/plugin-vue": "^4.4.0", "@vue/eslint-config-prettier": "^8.0.0", + "cross-env": "^7.0.3", "eslint": "^8.49.0", "eslint-plugin-vue": "^9.17.0", "prettier": "^3.0.3", @@ -1623,6 +1624,24 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4843,6 +4862,15 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", diff --git a/web/package.json b/web/package.json index 7b166a6..662692e 100644 --- a/web/package.json +++ b/web/package.json @@ -4,6 +4,8 @@ "private": true, "scripts": { "dev": "vite", + "demo": "vite --mode demo", + "build:demo": "vite build --mode demo", "build": "vite build", "preview": "vite preview", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore", @@ -25,6 +27,7 @@ "@rushstack/eslint-patch": "^1.3.3", "@vitejs/plugin-vue": "^4.4.0", "@vue/eslint-config-prettier": "^8.0.0", + "cross-env": "^7.0.3", "eslint": "^8.49.0", "eslint-plugin-vue": "^9.17.0", "prettier": "^3.0.3", diff --git a/web/src/views/home/login.vue b/web/src/views/home/login.vue index d7404b9..79f9c93 100644 --- a/web/src/views/home/login.vue +++ b/web/src/views/home/login.vue @@ -48,12 +48,21 @@ export default { }); onMounted(() => { + demoSiteSet(); // 加载站点信息 setTimeout(() => { LocalStieConfigUtils.getLatestLocalConfig(); }, 100) }); + // 站点演示模式 + const demoSiteSet = () => { + if (import.meta.env.VITE_RUN_MODE === 'demo') { + state.account = 'admin'; + state.passwd = '123456'; + } + } + // 登录 const clickLogin = async () => { const rspe = await request.post('/auth', { username: state.account, passwd: state.passwd }); diff --git a/web/src/views/tabsTools/settings/view/resetPasswd.vue b/web/src/views/tabsTools/settings/view/resetPasswd.vue index fdc96ec..32bca9c 100644 --- a/web/src/views/tabsTools/settings/view/resetPasswd.vue +++ b/web/src/views/tabsTools/settings/view/resetPasswd.vue @@ -28,11 +28,16 @@ export default defineComponent({ }); const handleChange = async () => { + if (import.meta.env.VITE_RUN_MODE === 'demo') { + ElMessage({ message: '演示模式不会重置密码', type: 'success' }); + return + } + let postData = { old_passwd: state.oldPasswd, new_passwd: state.newPasswd }; const rsp = await request.post('/settings/setpasswd', postData); if (await rsp.data.code == 200) { let msg = await rsp.data.msg; - ElMessage({ message: msg, type: 'success' }) + ElMessage({ message: msg, type: 'success' }); } } return { diff --git a/web/vite.config.js b/web/vite.config.js index d0b97fc..305b84b 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -7,6 +7,7 @@ import { prismjsPlugin } from 'vite-plugin-prismjs' // https://vitejs.dev/config/ export default defineConfig({ plugins: [ + vue(), prismjsPlugin({ languages: 'all', // 语言