](http://godban.github.io/browsers-support-badges/)IE | [
](http://godban.github.io/browsers-support-badges/)Edge | [
](http://godban.github.io/browsers-support-badges/)Firefox | [
](http://godban.github.io/browsers-support-badges/)Chrome | [
](http://godban.github.io/browsers-support-badges/)Safari |
+| :-: | :-: | :-: | :-: | :-: |
+| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
+
+## Donate
+
+If you find this project helpful, welcome sponsorship to show your support~
+
+[Paypal Me](https://www.paypal.com/paypalme/ckl94)
+
+
+
+### My QR code
+
+If you have any project cooperation or outsourcing, please scan the code to add me as a friend and leave a note of your purpose.
+
+
+
+## License
+
+[MIT](./LICENSE)
diff --git a/promo-ui2/README.zh-CN.md b/promo-ui2/README.zh-CN.md
new file mode 100644
index 0000000..2b153a6
--- /dev/null
+++ b/promo-ui2/README.zh-CN.md
@@ -0,0 +1,148 @@
+
](http://godban.github.io/browsers-support-badges/)IE | [
](http://godban.github.io/browsers-support-badges/)Edge | [
](http://godban.github.io/browsers-support-badges/)Firefox | [
](http://godban.github.io/browsers-support-badges/)Chrome | [
](http://godban.github.io/browsers-support-badges/)Safari |
+| :-: | :-: | :-: | :-: | :-: |
+| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
+
+## Donate
+
+如果你觉得这个项目有帮助,欢迎赞助以示支持~
+
+[Paypal Me](https://www.paypal.com/paypalme/ckl94)
+
+
+
+### 我的二维码
+
+如有项目合作或项目外包,扫码加我好友,请备注来意。
+
+
+
+## 许可证
+
+[MIT](./LICENSE)
diff --git a/promo-ui2/apidoc/redpack.http b/promo-ui2/apidoc/redpack.http
new file mode 100644
index 0000000..c0e5d64
--- /dev/null
+++ b/promo-ui2/apidoc/redpack.http
@@ -0,0 +1,17 @@
+POST http://localhost:8081/promo/login HTTP/1.1
+Content-Type: application/json; charset=UTF-8
+
+{"username":"15375298377","password":"123456"}
+
+
+### 获取卡密列表
+GET http://localhost:8081/promo/card/list
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImQ4MWI5OTM5LTUwZWItNGFiNC05NGIxLTEwOWFiYzY5NzI5MCJ9.RHXzv6Ao6hUl0fwY-Zhszz1-Jda6ceZybjmFddKFLZQbjufYkZd167ZCmlU9SbcrZ3Ec8TIt4XqSS7zb7fVHtQ
+
+
+### 生成卡密
+
+POST http://localhost:8081/promo/generateCard/6/1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImQ4MWI5OTM5LTUwZWItNGFiNC05NGIxLTEwOWFiYzY5NzI5MCJ9.RHXzv6Ao6hUl0fwY-Zhszz1-Jda6ceZybjmFddKFLZQbjufYkZd167ZCmlU9SbcrZ3Ec8TIt4XqSS7zb7fVHtQ
+Content-Type: application/json; charset=UTF-8
+
diff --git a/promo-ui2/apidoc/user.http b/promo-ui2/apidoc/user.http
new file mode 100644
index 0000000..f6a15b2
--- /dev/null
+++ b/promo-ui2/apidoc/user.http
@@ -0,0 +1,4 @@
+POST http://localhost:8081/promo/register HTTP/1.1
+Content-Type: application/json; charset=UTF-8
+
+{"username":"17688554522","password":"123456", "contactInformation": "hello"}
\ No newline at end of file
diff --git a/promo-ui2/apidoc/分享.http b/promo-ui2/apidoc/分享.http
new file mode 100644
index 0000000..7ddada7
--- /dev/null
+++ b/promo-ui2/apidoc/分享.http
@@ -0,0 +1,11 @@
+POST http://localhost:8081/promo/login HTTP/1.1
+Content-Type: application/json; charset=UTF-8
+
+{"username":"15375298377","password":"123456"}
+
+
+### 分享域名
+
+GET http://localhost:8081/promo/getsharedomain HTTP/1.1
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImEwMmU0Y2MyLWM5MDctNGU4OS1iNTkxLTk1Mjk1MGI2NjRmNCJ9._imhNdbqREBrYv-Kx73VN0S5U7Pr1zMvvMLEMXHf77uKOLO1Y0NnWRuTvSQlYp1T1KMVcNxEChSLj7I-Xex2wA
+
diff --git a/promo-ui2/apidoc/普通用户.http b/promo-ui2/apidoc/普通用户.http
new file mode 100644
index 0000000..0f12f2f
--- /dev/null
+++ b/promo-ui2/apidoc/普通用户.http
@@ -0,0 +1,13 @@
+POST http://localhost:8081/api/login HTTP/1.1
+Content-Type: application/json; charset=UTF-8
+
+
+{"username":"13545419205","password":"123456"}
+
+
+### 兑换红包卡密
+
+GET http://localhost:8081/api/bonus/receiveRedPacket/A628920554234AFDB539398823835378
+Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjY1MjA4OTYwLTA3NDQtNDQxZS05YzA1LWJjNTc2ZTQyN2RiMyJ9.Ogqmm8iTgiPhc8b7iDxz_a2atBtAgbmwqzi1M5ogLEpAVFAv91N0Ygo-1_yUVioPVn0WTWVJvJnIW42-4CgIJg
+
+
diff --git a/promo-ui2/commitlint.config.cjs b/promo-ui2/commitlint.config.cjs
new file mode 100644
index 0000000..78d145d
--- /dev/null
+++ b/promo-ui2/commitlint.config.cjs
@@ -0,0 +1,28 @@
+module.exports = {
+ extends: ['@commitlint/config-conventional'],
+ rules: {
+ 'type-enum': [
+ 2,
+ 'always',
+ [
+ 'feat', // 新功能(feature)
+ 'fix', // 修补bug
+ 'docs', // 文档(documentation)
+ 'style', // 格式、样式(不影响代码运行的变动)
+ 'refactor', // 重构(即不是新增功能,也不是修改BUG的代码)
+ 'perf', // 优化相关,比如提升性能、体验
+ 'test', // 添加测试
+ 'ci', // 持续集成修改
+ 'chore', // 构建过程或辅助工具的变动
+ 'revert', // 回滚到上一个版本
+ 'workflow', // 工作流改进
+ 'mod', // 不确定分类的修改
+ 'wip', // 开发中
+ 'types', // 类型修改
+ 'release' // 版本发布
+ ]
+ ],
+ 'subject-full-stop': [0, 'never'],
+ 'subject-case': [0, 'never']
+ }
+}
diff --git a/promo-ui2/docker-compose.dev.yaml b/promo-ui2/docker-compose.dev.yaml
new file mode 100644
index 0000000..b6fd3e1
--- /dev/null
+++ b/promo-ui2/docker-compose.dev.yaml
@@ -0,0 +1,10 @@
+services:
+ vue-element-plus-admin:
+ build:
+ context: .
+ dockerfile: Dockerfile.dev
+ ports:
+ - "4000:4000"
+ volumes:
+ - /app/node_modules
+ - .:/app
\ No newline at end of file
diff --git a/promo-ui2/eslint.config.mjs b/promo-ui2/eslint.config.mjs
new file mode 100644
index 0000000..67bc096
--- /dev/null
+++ b/promo-ui2/eslint.config.mjs
@@ -0,0 +1,82 @@
+// 引入vue模版的eslint
+import pluginVue from 'eslint-plugin-vue'
+import eslint from '@eslint/js'
+// ts-eslint解析器,使 eslint 可以解析 ts 语法
+import tseslint from 'typescript-eslint'
+// vue文件解析器
+import vueParser from 'vue-eslint-parser'
+import prettier from 'eslint-plugin-prettier'
+
+export default tseslint.config({
+ // ignores: ['node_modules', 'prettier.config.cjs', 'dist*'],
+ files: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'],
+ // tseslint.config添加了extends扁平函数,直接用。否则是eslint9.0版本是没有extends的
+ extends: [
+ eslint.configs.recommended,
+ ...tseslint.configs.recommended,
+ ...pluginVue.configs['flat/essential']
+ ],
+ plugins: {
+ prettier
+ },
+ languageOptions: {
+ parser: vueParser, // 使用vue解析器,这个可以识别vue文件
+ parserOptions: {
+ parser: tseslint.parser, // 在vue文件上使用ts解析器
+ sourceType: 'module',
+ ecmaVersion: 2020,
+ ecmaFeatures: {
+ jsx: true
+ }
+ }
+ },
+ rules: {
+ 'prettier/prettier': 'error',
+ 'no-useless-escape': 0,
+ 'no-undef': 0,
+ '@typescript-eslint/no-unused-expressions': 0,
+ '@typescript-eslint/no-unsafe-function-type': 0,
+ 'vue/no-setup-props-destructure': 0,
+ 'vue/script-setup-uses-vars': 1,
+ 'vue/no-reserved-component-names': 0,
+ '@typescript-eslint/ban-ts-ignore': 0,
+ '@typescript-eslint/explicit-function-return-type': 0,
+ '@typescript-eslint/no-explicit-any': 0,
+ '@typescript-eslint/no-var-requires': 0,
+ '@typescript-eslint/no-empty-function': 0,
+ 'vue/custom-event-name-casing': 0,
+ 'no-use-before-define': 0,
+ '@typescript-eslint/no-use-before-define': 0,
+ '@typescript-eslint/ban-ts-comment': 0,
+ '@typescript-eslint/ban-types': 0,
+ '@typescript-eslint/no-non-null-assertion': 0,
+ '@typescript-eslint/explicit-module-boundary-types': 0,
+ '@typescript-eslint/no-unused-vars': 0,
+ 'no-unused-vars': 0,
+ 'space-before-function-paren': 0,
+ 'vue/attributes-order': 0,
+ 'vue/one-component-per-file': 0,
+ 'vue/html-closing-bracket-newline': 0,
+ 'vue/max-attributes-per-line': 0,
+ 'vue/multiline-html-element-content-newline': 0,
+ 'vue/singleline-html-element-content-newline': 0,
+ 'vue/attribute-hyphenation': 0,
+ 'vue/require-default-prop': 0,
+ 'vue/require-explicit-emits': 0,
+ 'vue/html-self-closing': [
+ 1,
+ {
+ html: {
+ void: 'always',
+ normal: 'never',
+ component: 'always'
+ },
+ svg: 'always',
+ math: 'always'
+ }
+ ],
+ 'vue/multi-word-component-names': 0,
+ 'vue/no-v-html': 0,
+ 'vue/require-toggle-inside-transition': 0
+ }
+})
diff --git a/promo-ui2/index.html b/promo-ui2/index.html
new file mode 100644
index 0000000..aa76548
--- /dev/null
+++ b/promo-ui2/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ I am testing data, I am testing data.
+
+ 推广后台管理员账号,使用「手机号 + 密码」登录,权限与超级管理员一致; + 登录账号不能与用户表中已存在的手机号重复 +
+查看所有主播及其下属用户的汇总数据
+查看所有招商及其下属主播、普通用户的汇总数据
+查看所有卡商及其生成的卡密记录
++ {{ isAnchor ? '查看下属玩家的充值、消费和各游戏佣金汇总数据' : '查看直属下级主播及其下属普通用户的充值、消费和佣金汇总数据(不选日期默认展示本周),点击左侧箭头可展开查看主播下属玩家明细' }} +
+暂无下属用户
+正在请求的接口:{{ setToArray(pending) }}
+注意:邀请码只能修改一次,请谨慎操作!
+查看所有下级用户的充值记录明细
+注意:邀请码只能修改一次,请谨慎操作!
+
+ 当前已复制: {{ text || 'none' }}
+
你的浏览器不支持 Clipboard API
+{{ online ? '已连接' : '已断开' }}
+