Compare commits

...

2 Commits

Author SHA1 Message Date
niuzhiyun
82ca593c10 Update index.vue 2026-08-21 18:29:13 +08:00
niuzhiyun
0e2bc510d1 v2.0.2 2026-08-21 17:30:02 +08:00
4339 changed files with 171358 additions and 207449 deletions

36
README.en.md Normal file
View File

@ -0,0 +1,36 @@
# niucloud-admin
#### Description
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
#### Software Architecture
Software architecture description
#### Installation
1. xxxx
2. xxxx
3. xxxx
#### Instructions
1. xxxx
2. xxxx
3. xxxx
#### Contribution
1. Fork the repository
2. Create Feat_xxx branch
3. Commit your code
4. Create Pull Request
#### Gitee Feature
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
4. The most valuable open source project [GVP](https://gitee.com/gvp)
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

125
README.md
View File

@ -1,106 +1,47 @@
![输入图片说明](https://www.niucloud.com/img/readme/%E9%A1%B6%E9%83%A8%E5%B9%BF%E5%91%8A1.jpg)
### NIUCLOUD-ADMIN 是什么?
niucloud-admin-saas是一款快速开发通用管理后台框架整体功能架构全部精心设计代码干净整洁低耦合高质量前后端API接口完全分离 :raised_hands: !!!前端采用最新技术 **Vite+TypeScript+Vue3+ElementPlus** 后台采用PHP8、MYSQL8、THINKPHP8 全部最新技术栈内置Workman高性能消息队列计划任务处理完全兼容容器路由运行技术。 采用多租户多站点多应用多插件任意组合使用的SAAS架构设计内置代码生成器插件生成器一键云编译、一键云部署集成用户权限、表单设计、云存储、短信发送、素材中心、微信及公众号、Api模块一系列开箱即用功能是一款快速搭建开发企业级应用的软件系统。源码100%开源无加密框架采用MIT协议终身免费商用免费
### niucloud-admin是什么?
niucloud-admin是一款快速开发通用管理后台框架前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构后台结合PHP8、Java SDK、Python等主流后端语言搭建内置集成用户权限、代码生成器、表单设计、云存储、短信发送、素材中心、微信及公众号、Api模块一系列开箱即用功能是一款快速可以开发企业级应用的软件系统。
目前NIUCLOUD生态开发者入驻近千人各行业应用插件正在陆续上线中... :clap: :clap: :clap:
### niucloud-admin采用的技术亮点
请到官方网站了解更多 https://www.niucloud.com
- 后台php采用thinkphp8+php8+mysql,支持composer快速安装扩展支持redis缓存以及消息队列支持多语言设计开发同时开发采用严格的restful的api设计开发。
### NIUCLOUD-ADMIN 技术特点
:fa-quote-left: 前端(**Vite+TypeScript+Vue3+ElementPlus**+ **API**接口完全分离 + 后端(**PHP8+THINKPHP8**) + 数据库(**MYSQL8.0+** :fa-quote-right:
```
- 支持composer快速安装扩展支持redis缓存以及消息队列支持多语言设计开发采用严格的restful的api设计开发。
- 后台前后端分离采用element-plus、vue3.0、typescript、vite、pina等前端技术,同时使用i18n支持国际化多语言开发。
- 手机端采用uniapp前后端分离使用uview、vue3.0、typescript、vite、pina前端技术支持h5,微信小程序,支付宝小程序,抖音小程序等使用场景。
- niucloud-admin采用多租户的saas系统设计支持多站点多商户多门店多应用多插件组合使用。
- 手机端采用uniapp前后端分离同时使用uview、vue3.0、typescript、vite、pina等前端技术同时使用i18n支持国际化多语言开发可以灵活编译成h5,微信小程序,支付宝小程序,抖音小程序等使用场景。
- niucloud-admin采用多租户的saas系统设计能够提供企业级软件服务运营 ,同时满足用户多站点,多商户,多门店等系统开发需求。
- niucloud-admin结合当前市面上很多框架结构不规范导致基础结构不稳定等情况严格定义了分层设计的开发规范同时api接口严格采用restful的开发规范能够满足大型业务系统或者微服务的开发需求。
- niucloud-admin前端以及后端采用严格的多语言开发规范包括前端展示api接口返回数据验证错误返回等全部使用多语言设计规范使开发者能够真生意义上实现多语言的开发需求。
- niucloud-admin已经搭建好常规系统的开发底层具体的底层功能包括管理员管理权限管理网站设置计划任务管理素材管理会员管理会员账户管理微信公众号以及小程序管理支付管理第三方登录管理消息管理短信管理文章管理前端装修等全面的基础功能这样开发者不需要开发基础的结构而专心开发业务。
- niucloud-admin系统内置支持微信/支付宝支付,微信公众号/小程序/短信消息管理,阿里云/腾讯云短信,七牛云/阿里云存储等基础的功能扩展,后续会根据实际业务不断扩展基础组件。
- niucloud-admin结合系统结构特点专门开发了代码生成器这样开发者根据数据表就可以一键生成基础的业务代码包括后台php业务代码以及对应的前端vue代码。
- niucloud-admin手机端设计开发了自定义装修同时提供了基础的开发组件方便开发者设计开发手机自定义页面装修的开发需求
- niucloud-admin框架支持APP在线一键云打包升级功能2025/9/10已上线
```
### NIUCLOUD 框架截图
![](https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas/saas_kj1.png)
![](https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas/saas_kj2.png)
![](https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas/31f58ff2ca4c1b8421b4ad622921dfed.png)
![](https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas/saas_kj4.png)
### 商城插件 :point_right: SHOP
![](https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas/saas_shop1.png)
<table>
<tbody>
<tr>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop3.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop7.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop9.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop11.jpg"></td>
</tr>
<tr>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop6.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop10.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop12.jpg"></td>
<td><img src="https://niucloud-bucket.oss-cn-beijing.aliyuncs.com/gitee_saas/saas_shop13.jpg"></td>
</tr>
</tbody></table>
- 前端采用标准的element-plus开发者不需要详细了解前端只需要用标准的element组件就可以。
- 手机端设计开发了自定义装修,同时提供了基础的开发组件,方便开发者设计开发手机自定义页面装修的开发需求。
- 手机端使用uniapp 同时使用uview页面展示可以开发出丰富的手机样式同时不需要专门学习小程序app等开发语言只需要通过uniapp编译就可以。
### 操作指南
[官网地址](https://www.niucloud.com)
| [服务市场](https://www.niucloud.com)
| [使用手册](https://www.niucloud.com/doc)
| [二开手册](https://www.niucloud.com/doc)
| [开发视频](https://www.niucloud.com/doc)
| [API接口手册](https://api.niucloud.com/apidoc.html?target_id=001)
| [论坛地址](https://niucloud.com/bbs)
### 二次开发视频教程
- [开发准备工作与创建插件](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/1-1.mp4)
- [插件目录整体说明](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/2-1.mp4)
- [插件安装与打包原理](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/8-1.mp4)
- [消息队列](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/9-1.mp4)
- [计划任务](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/10-1.mp4)
- [DIY自定义小组件和页面装修开发](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/11-1.mp4)
- [支付接口开发](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/12-1.mp4)
- [插件升级包打包流程以及云编译](https://niucloud-document-video.oss-cn-beijing.aliyuncs.com/video/13-1.mp4)
[官网地址](https://www.niucloud.com)
| [服务市场](https://www.niucloud.com)
| [使用手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
| [二开手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
| [API接口手册](https://www.niucloud.com/apidoc.html)
| [论坛地址](https://www.niucloud.com/bbs)
### 演示地址
- 平台后台演示网址:[<a href='http://demo-saas.site.niucloud.com/admin/' target="_blank"> 查看 </a>]
<a href='http://demo-saas.site.niucloud.com/admin/' target="_blank">http://demo-saas.site.niucloud.com/admin/ 账号admin 密码123456
- 商城后台演示网址:[<a href='https://demo-saas.site.niucloud.com/site/shop/index' target="_blank"> 查看 </a>]
<a href='https://demo-saas.site.niucloud.com/site/shop/index' target="_blank">http://demo-saas.site.niucloud.com/site/ 商城系统账号admin 密码123456<br/>
- 旅游后台演示网址:[<a href='https://demo-saas.site.niucloud.com/site/tourism/index' target="_blank"> 查看 </a>]
<a href='https://demo-saas.site.niucloud.com/site/tourism/index' target="_blank">https://demo-saas.site.niucloud.com/site/tourism/index 旅游系统账号admin 密码123456<br/>
- 会员卡后台演示网址:[<a href='https://demo-saas.site.niucloud.com/site/vipcard/index' target="_blank"> 查看 </a>]
<a href='https://demo-saas.site.niucloud.com/site/vipcard/index' target="_blank">https://demo-saas.site.niucloud.com/site/vipcard/index 会员卡系统账号admin 密码123456<br/>
### 加入NIUCLOUD开发者生态一起助力成就程序员创业梦想
加入企业微信群技术交流,请扫描下面二维码 :point_down:
![输入图片说明](https://media.niucloud.com/170312377249fc5bc70c5f914fda3d7c5cf3413ddc_aliyun.jpg)
### 产品LOGO
![输入图片说明](https://foruda.gitee.com/avatar/1682227978769691031/1342405_niushop_1682227978.png)
![输入图片说明](https://www.niucloud.com/_nuxt/login_logo.650a27e2.png)
- 站点后台演示网址:[<a href='http://demo-saas.site.niucloud.com/site' target="_blank"> 查看 </a>]
<a href='http://demo-saas.site.niucloud.com/site' target="_blank">http://demo-saas.site.niucloud.com/site 账号test 密码123456
- 平台后台演示网址:[<a href='http://demo-saas.site.niucloud.com/admin' target="_blank"> 查看 </a>]
<a href='http://demo-saas.site.niucloud.com/admin' target="_blank">http://demo-saas.site.niucloud.com/admin 账号admin 密码123456
### 开源使用须知
@ -114,16 +55,16 @@ niucloud-admin-saas是一款快速开发通用管理后台框架整体功能
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
### 版权信息
版权所有Copyright © 2015-2025 niucloud-admin 版权所有
版权所有Copyright © 2015-2030 niucloud-admin 版权所有
All rights reserved。
杭州数字云动科技有限公司
杭州数字云动科技有限公司
杭州牛之云科技有限公司
提供技术支持
提供技术支持

View File

@ -1,5 +1,6 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
const ElNotification: typeof import('element-plus/es')['ElNotification']
}

47
admin/components.d.ts vendored
View File

@ -11,36 +11,83 @@ declare module '@vue/runtime-core' {
DiyLink: typeof import('./src/components/diy-link/index.vue')['default']
DiyPage: typeof import('./src/components/diy-page/index.vue')['default']
Editor: typeof import('./src/components/editor/index.vue')['default']
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCheckTag: typeof import('element-plus/es')['ElCheckTag']
ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElStatistic: typeof import('element-plus/es')['ElStatistic']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTimeSelect: typeof import('element-plus/es')['ElTimeSelect']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload']
ExportSure: typeof import('./src/components/export-sure/index.vue')['default']
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']
Icon: typeof import('./src/components/icon/index.vue')['default']

255
admin/package-lock.json generated
View File

@ -23,7 +23,8 @@
"date-fns": "^4.1.0",
"day": "^0.0.2",
"echarts": "5.4.1",
"element-plus": "^2.7.4",
"element-plus": "2.7.4",
"esbuild": "^0.16.17",
"highlight.js": "11.0.1",
"lodash-es": "4.17.21",
"nprogress": "0.2.0",
@ -32,7 +33,7 @@
"sass": "1.58.0",
"sortablejs": "1.15.0",
"vditor": "^3.10.9",
"vue": "3.2.45",
"vue": "3.3.7",
"vue-i18n": "9.2.2",
"vue-jsonp": "2.0.0",
"vue-router": "4.1.6",
@ -583,7 +584,6 @@
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
@ -599,7 +599,6 @@
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
@ -615,7 +614,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
@ -631,7 +629,6 @@
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
@ -647,7 +644,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
@ -663,7 +659,6 @@
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
@ -679,7 +674,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
@ -695,7 +689,6 @@
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -711,7 +704,6 @@
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -727,7 +719,6 @@
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -743,7 +734,6 @@
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -759,7 +749,6 @@
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -775,7 +764,6 @@
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -791,7 +779,6 @@
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -807,7 +794,6 @@
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -823,7 +809,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
@ -839,7 +824,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
@ -855,7 +839,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
@ -871,7 +854,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
@ -887,7 +869,6 @@
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
@ -903,7 +884,6 @@
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
@ -919,7 +899,6 @@
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
@ -1139,9 +1118,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
"version": "1.5.5",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.20",
@ -1871,57 +1850,84 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.7.tgz",
"integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"@babel/parser": "^7.23.0",
"@vue/shared": "3.3.7",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz",
"integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==",
"dependencies": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
"@vue/compiler-core": "3.3.7",
"@vue/shared": "3.3.7"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz",
"integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-ssr": "3.2.45",
"@vue/reactivity-transform": "3.2.45",
"@vue/shared": "3.2.45",
"@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.7",
"@vue/compiler-dom": "3.3.7",
"@vue/compiler-ssr": "3.3.7",
"@vue/reactivity-transform": "3.3.7",
"@vue/shared": "3.3.7",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
"magic-string": "^0.30.5",
"postcss": "^8.4.31",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-sfc/node_modules/magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"version": "0.30.21",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dependencies": {
"sourcemap-codec": "^1.4.8"
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/@vue/compiler-sfc/node_modules/postcss": {
"version": "8.5.19",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.19.tgz",
"integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==",
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"nanoid": "^3.3.12",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz",
"integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==",
"dependencies": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
"@vue/compiler-dom": "3.3.7",
"@vue/shared": "3.3.7"
}
},
"node_modules/@vue/devtools-api": {
@ -1930,68 +1936,68 @@
"integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
},
"node_modules/@vue/reactivity": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz",
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.7.tgz",
"integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==",
"dependencies": {
"@vue/shared": "3.2.45"
"@vue/shared": "3.3.7"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz",
"integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45",
"@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.7",
"@vue/shared": "3.3.7",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
"magic-string": "^0.30.5"
}
},
"node_modules/@vue/reactivity-transform/node_modules/magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"version": "0.30.21",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dependencies": {
"sourcemap-codec": "^1.4.8"
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.7.tgz",
"integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==",
"dependencies": {
"@vue/reactivity": "3.2.45",
"@vue/shared": "3.2.45"
"@vue/reactivity": "3.3.7",
"@vue/shared": "3.3.7"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz",
"integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==",
"dependencies": {
"@vue/runtime-core": "3.2.45",
"@vue/shared": "3.2.45",
"csstype": "^2.6.8"
"@vue/runtime-core": "3.3.7",
"@vue/shared": "3.3.7",
"csstype": "^3.1.2"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.7.tgz",
"integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==",
"dependencies": {
"@vue/compiler-ssr": "3.2.45",
"@vue/shared": "3.2.45"
"@vue/compiler-ssr": "3.3.7",
"@vue/shared": "3.3.7"
},
"peerDependencies": {
"vue": "3.2.45"
"vue": "3.3.7"
}
},
"node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.7.tgz",
"integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg=="
},
"node_modules/@vueuse/core": {
"version": "9.12.0",
@ -2686,9 +2692,9 @@
}
},
"node_modules/csstype": {
"version": "2.6.21",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
"version": "3.2.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
},
"node_modules/date-fns": {
"version": "4.1.0",
@ -3029,7 +3035,6 @@
"version": "0.16.17",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz",
"integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@ -4637,9 +4642,15 @@
"dev": true
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"version": "3.3.16",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.16.tgz",
"integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@ -4978,6 +4989,7 @@
"version": "8.4.21",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"dev": true,
"dependencies": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
@ -5449,19 +5461,13 @@
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"deprecated": "Please use @jridgewell/sourcemap-codec instead"
},
"node_modules/std-env": {
"version": "3.6.0",
"resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.6.0.tgz",
@ -6106,15 +6112,23 @@
}
},
"node_modules/vue": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.7.tgz",
"integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==",
"dependencies": {
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-sfc": "3.2.45",
"@vue/runtime-dom": "3.2.45",
"@vue/server-renderer": "3.2.45",
"@vue/shared": "3.2.45"
"@vue/compiler-dom": "3.3.7",
"@vue/compiler-sfc": "3.3.7",
"@vue/runtime-dom": "3.3.7",
"@vue/server-renderer": "3.3.7",
"@vue/shared": "3.3.7"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/vue-eslint-parser": {
@ -6352,11 +6366,6 @@
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.13.tgz",
"integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA=="
},
"node_modules/vue-web-terminal/node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/vue-web-terminal/node_modules/magic-string": {
"version": "0.30.5",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz",

View File

@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "node scripts/build-all.cjs",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 node scripts/build-all.cjs",
"build:core": "node scripts/build-shared.cjs && node scripts/clean-core.cjs && node node_modules/vite/bin/vite.js build --config vite.config.core.ts --force && node scripts/verify-core-lang.cjs && node scripts/assemble-admin.cjs",
"build:shared": "node scripts/build-shared.cjs",
"build:addon": "node scripts/build-addon.cjs",

View File

View File

@ -377,6 +377,13 @@ export function setPayConfig(params: Record<string, any>) {
return request.put(`pay/config/${ params.type }`, params, { showSuccessMessage: true });
}
/**
*
* @returns
*/
export function getPayList() {
return request.get(`pay/lists`)
}
/***************************************************** 打款设置 ****************************************************/
/**

View File

@ -139,7 +139,7 @@ export function editVersion(params: Record<string, any>) {
* @returns
*/
export function deleteVersion(id: string) {
return request.delete(`applet/version/${ id }`)
return request.delete(`weapp/version/${ id }`)
}
/**

View File

@ -403,7 +403,7 @@ const startServerDownloadFn = async (taskId: string, downloadUrl: string, author
await startServerDownload(taskId, downloadUrl, authorize_code, ts)
downloadPollingTimer = setTimeout(async () => {
downloadPollingTimer = setInterval(async () => {
if (!downloadPollingTimer) return
try {
@ -447,7 +447,7 @@ const startServerDownloadFn = async (taskId: string, downloadUrl: string, author
} catch (e) {
console.error('Polling error:', e)
}
}, 2000)
}, 5000)
} catch (error) {
console.error('启动后台下载失败:', error)
terminalRef.value.pushMessage({ content: '启动后台下载失败', class: 'error' })

View File

@ -46,7 +46,9 @@
"uploadWeapp": "上传小程序",
"undoAudit" : "撤回审核",
"undoAuditTips" : "撤回代码审核,单个账号每天审核撤回次数最多不超过 5 次每天的额度从0点开始生效一个月不超过 10 次。是否要继续撤回?",
"versionDeleteTips" : "删除后该版本将不可恢复,是否确定删除?",
"helpInfo": "查看帮助",
"weappUploadDot": ".",
"weappUpload": {
"title": "小程序上传",
"noTask": "暂无上传任务",

View File

@ -10,7 +10,7 @@
<el-button type="primary" class="w-[100px]" @click="addEvent">
{{ t('addMenu') }}
</el-button>
<el-button class="w-[100px]" @click="refreshMenu">
<el-button class="w-[100px]" :loading="refreshLoading" @click="refreshMenu">
{{ t('initializeMenu') }}
</el-button>
</div>
@ -130,6 +130,7 @@ const getMenuList = () => {
}
getMenuList()
//
const refreshLoading = ref(false)
const refreshMenu = () => {
ElMessageBox.confirm(h('div', null, [
h('p', null, t('initializeMenuTipsOne')),
@ -141,9 +142,11 @@ const refreshMenu = () => {
// type: 'warning'
}
).then(() => {
refreshLoading.value = true
menuRefresh({}).then(res => {
location.reload()
refreshLoading.value = false
}).catch(() => {
refreshLoading.value = false
})
}).catch(() => {
})

View File

@ -62,6 +62,7 @@
<el-button type="primary" link v-if="row.status == -1 || row.status == -2" @click="handleFailReason(row)">{{ t('failReason') }}</el-button>
<el-button type="primary" link v-if="row.status == -2" @click="againUpload(row)" :loading="uploading">{{ t('againUpload') }}</el-button>
<el-button type="primary" link v-if="row.status == 2" @click="undoAuditFn(row)">{{ t('undoAudit') }}</el-button>
<el-button type="danger" link @click="delVersion(row)">{{ t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@ -110,11 +111,11 @@
<el-form-item prop="code1">
<el-input v-model.number="form.code1" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
</el-form-item>
<span class="mx-[10px]">{{ t('weappUpload.dot') }}</span>
<span class="mx-[10px]">{{ t('weappUploadDot') }}</span>
<el-form-item prop="code2">
<el-input v-model.number="form.code2" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
</el-form-item>
<span class="mx-[10px]">{{ t('weappUpload.dot') }}</span>
<span class="mx-[10px]">{{ t('weappUploadDot') }}</span>
<el-form-item prop="code3">
<el-input v-model.number="form.code3" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
</el-form-item>
@ -161,7 +162,7 @@
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import { setWeappVersion, getWeappPreview, getWeappVersionList, getWeappUploadLog, getWeappConfig } from '@/app/api/weapp'
import { setWeappVersion, getWeappPreview, getWeappVersionList, getWeappUploadLog, getWeappConfig, deleteVersion } from '@/app/api/weapp'
import { t } from '@/lang'
import { useRoute, useRouter } from 'vue-router'
import { getAuthInfo } from '@/app/api/module'
@ -538,6 +539,25 @@ const undoAuditFn = (data: any) => {
})
}
/**
* 删除版本
* @param data
*/
const delVersion = (data: any) => {
ElMessageBox.confirm(
t('versionDeleteTips'),
t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel')
}
).then(() => {
deleteVersion(data.id).then(() => {
getWeappVersionListFn()
})
}).catch(() => {})
}
const failReason = ref('')
const failReasonDialogVisible = ref(false)
const handleFailReason = (data: any) => {

View File

@ -685,7 +685,7 @@ const preview = () => {
}
const settingTips = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393')
window.open('https://doc.press.niucloud.com/php/saas-framework/dev/pluginDev/configLocalDevEnv.html')
}
</script>

View File

@ -65,7 +65,7 @@
</template>
<script lang="ts" setup>
import { reactive, ref, watch } from 'vue'
import { reactive, ref, watch, nextTick, onUnmounted } from 'vue'
import { t } from '@/lang'
import { img } from '@/utils/common'
import { useRouter } from 'vue-router'
@ -114,6 +114,7 @@ const refreshData = () => {
page.loadingDev = false //
page.isDisabledPop = false //
page.difference = 0 // 1000wap
uniAppLoadStatus.value = false
wapDomain.value = page.domain_url.wap_domain
page.wapUrl = page.domain_url.wap_url
@ -144,17 +145,32 @@ const refreshData = () => {
refreshData()
const uniAppLoadStatus = ref(false) // uni-app truefalse
let timeInterVal: ReturnType<typeof setInterval> | null = null
let loadTimeout: ReturnType<typeof setTimeout> | null = null
const clearLoadTimers = () => {
if (timeInterVal) {
clearInterval(timeInterVal)
timeInterVal = null
}
if (loadTimeout) {
clearTimeout(loadTimeout)
loadTimeout = null
}
}
// uni-app
window.addEventListener('message', (event) => {
const onPreviewMessage = (event: MessageEvent) => {
try {
let data = {
type :''
};
if(typeof event.data == 'string') {
let data: { type?: string } = {
type: ''
}
if (typeof event.data == 'string') {
data = JSON.parse(event.data)
}else if(typeof event.data == 'object') {
} else if (event.data && typeof event.data == 'object') {
data = event.data
} else {
return
}
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
page.loadingDev = false //
@ -163,12 +179,18 @@ window.addEventListener('message', (event) => {
page.difference = loadTime - page.timeIframe
page.isDisabledPop = false //
uniAppLoadStatus.value = true //
clearLoadTimers()
}
} catch (e) {
initLoad()
console.log('diy index 后台接受数据错误', e)
}
}, false)
}
window.addEventListener('message', onPreviewMessage, false)
onUnmounted(() => {
window.removeEventListener('message', onPreviewMessage, false)
clearLoadTimers()
})
// uniapp
const postMessage = () => {
@ -211,7 +233,7 @@ const saveDomain = () => {
}
const settingTips = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393')
window.open('https://doc.press.niucloud.com/php/saas-framework/dev/pluginDev/configLocalDevEnv.html')
}
const setDomain = () => {
@ -226,26 +248,33 @@ const setDomain = () => {
postMessage()
}
//
send()
// uni-app
let sendCount = 0;
let timeInterVal = setInterval(()=>{
// uni-app 50
if(uniAppLoadStatus.value || sendCount >= 50){
clearInterval(timeInterVal)
return
}
clearLoadTimers()
nextTick(() => {
// iframe DOM
send()
sendCount++;
},200)
// 10
setTimeout(() => {
if (page.difference == 0) initLoad()
}, 1000 * 10)
// uni-app
let sendCount = 0;
timeInterVal = setInterval(()=>{
// uni-app 50
if(uniAppLoadStatus.value || sendCount >= 50){
if (timeInterVal) {
clearInterval(timeInterVal)
timeInterVal = null
}
return
}
send()
sendCount++;
},200)
// 10
loadTimeout = setTimeout(() => {
if (page.difference == 0 && !uniAppLoadStatus.value) initLoad()
}, 1000 * 10)
})
}
//

View File

@ -84,7 +84,7 @@
</template>
<script lang="ts" setup>
import { reactive, ref, watch, computed } from 'vue'
import { reactive, ref, watch, computed, nextTick, onUnmounted } from 'vue'
import { t } from '@/lang'
import { img } from '@/utils/common'
import { useRouter } from 'vue-router'
@ -147,6 +147,7 @@ const refreshData = () => {
page.loadingDev = false //
page.isDisabledPop = false //
page.difference = 0 // 1000wap
uniAppLoadStatus.value = false
wapDomain.value = page.domain_url.wap_domain
page.wapUrl = page.domain_url.wap_url
@ -176,18 +177,33 @@ const refreshData = () => {
refreshData()
const uniAppLoadStatus = ref(false) // uni-app truefalse
const uniAppLoadStatus = ref(false) // uni-app truefalse
let timeInterVal: ReturnType<typeof setInterval> | null = null
let loadTimeout: ReturnType<typeof setTimeout> | null = null
const clearLoadTimers = () => {
if (timeInterVal) {
clearInterval(timeInterVal)
timeInterVal = null
}
if (loadTimeout) {
clearTimeout(loadTimeout)
loadTimeout = null
}
}
// uni-app
window.addEventListener('message', (event) => {
const onPreviewMessage = (event: MessageEvent) => {
try {
let data = {
let data: { type?: string } = {
type: ''
};
if(typeof event.data == 'string') {
}
if (typeof event.data == 'string') {
data = JSON.parse(event.data)
}else if(typeof event.data == 'object') {
} else if (event.data && typeof event.data == 'object') {
data = event.data
} else {
return
}
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
@ -197,12 +213,18 @@ window.addEventListener('message', (event) => {
page.difference = loadTime - page.timeIframe
page.isDisabledPop = false //
uniAppLoadStatus.value = true //
clearLoadTimers()
}
} catch (e) {
initLoad()
console.log('diy member 后台接受数据错误', e)
}
}, false)
}
window.addEventListener('message', onPreviewMessage, false)
onUnmounted(() => {
window.removeEventListener('message', onPreviewMessage, false)
clearLoadTimers()
})
// uniapp
const postMessage = () => {
@ -245,7 +267,7 @@ const saveDomain = () => {
}
const settingTips = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393')
window.open('https://doc.press.niucloud.com/php/saas-framework/dev/pluginDev/configLocalDevEnv.html')
}
const setDomain = () => {
@ -260,26 +282,33 @@ const setDomain = () => {
postMessage()
}
//
send()
// uni-app
let sendCount = 0;
let timeInterVal = setInterval(()=>{
// uni-app 50
if(uniAppLoadStatus.value || sendCount >= 50){
clearInterval(timeInterVal)
return
}
clearLoadTimers()
nextTick(() => {
// iframe DOM
send()
sendCount++;
},200)
// 10
setTimeout(() => {
if (page.difference == 0) initLoad()
}, 1000 * 10)
// uni-app
let sendCount = 0;
timeInterVal = setInterval(()=>{
// uni-app 50
if(uniAppLoadStatus.value || sendCount >= 50){
if (timeInterVal) {
clearInterval(timeInterVal)
timeInterVal = null
}
return
}
send()
sendCount++;
},200)
// 10
loadTimeout = setTimeout(() => {
if (page.difference == 0 && !uniAppLoadStatus.value) initLoad()
}, 1000 * 10)
})
}
//

View File

@ -368,7 +368,7 @@
</template>
<script lang="ts" setup>
import { ref, reactive, toRaw, watch, inject, computed } from 'vue'
import { ref, reactive, toRaw, watch, inject, computed, defineAsyncComponent } from 'vue'
import { t } from '@/lang'
import { ArrowLeft } from "@element-plus/icons-vue"
import { img } from '@/utils/common'
@ -604,6 +604,32 @@ initPage({
}
}
// DIY
if (!import.meta.env.DEV && component.value) {
const { loadAddonComponent, getInstalledAddonKeys } = await import('@/utils/addon-loader')
const addonKeys = getInstalledAddonKeys()
for (const type of Object.values(component.value) as any[]) {
if (!type.list) continue
for (const rawKey of Object.keys(type.list)) {
const compDef = type.list[rawKey]
const componentPath = compDef.value?.path || compDef.path || rawKey
if (modules[componentPath]) continue
modules[componentPath] = defineAsyncComponent(() =>
(async () => {
for (const addon of addonKeys) {
const loader = loadAddonComponent(addon, 'diy/components', componentPath)
try {
const result = await loader()
if (result?.default) return result.default
} catch {}
}
throw new Error(`DIY component "${componentPath}" not found in any addon`)
})()
)
}
}
}
loadDiyTemplatePages(data.type);
//
@ -834,7 +860,7 @@ const completeLayoutChange = (e)=>{
}
const settingTips = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393')
window.open('https://doc.press.niucloud.com/php/saas-framework/dev/pluginDev/configLocalDevEnv.html')
}
</script>

View File

@ -179,12 +179,13 @@
</template>
<script lang="ts" setup>
import { reactive, ref, defineAsyncComponent } from 'vue'
import { reactive, ref } from 'vue'
import { t } from '@/lang'
import { getDiyFormFieldsList, getDiyFormFieldStat, getFormRecords, getFormRecordsInfo, deleteFormRecords, getFormRecordsMember } from '@/app/api/diy_form'
import { useRouter } from 'vue-router'
import { img } from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const router = useRouter()
const showDialog = ref(false)
@ -234,7 +235,6 @@ const getDiyFormFieldStatFn = (form_id: any) => {
})
}
const modules: any = import.meta.glob('@/**/*.vue')
const formDetail = ref([])
const formDetailEvent = (row: any) => {
@ -285,8 +285,9 @@ const loadFormRecordsListFn = (page: number = 1) => {
formData.data = res.data.data
formData.data.forEach((item: any) => {
for (const key: any in item.recordsFieldList) {
if (modules[item.recordsFieldList[key].detailComponent]) {
item.recordsFieldList[key].detailComponent && (item.recordsFieldList[key].detailComponent = defineAsyncComponent(modules[item.recordsFieldList[key].detailComponent]))
const compPath = item.recordsFieldList[key].detailComponent
if (compPath) {
item.recordsFieldList[key].detailComponent = resolveAsyncComponent(compPath)
}
}
})

View File

@ -25,11 +25,12 @@
<script lang="ts" setup>
import { t } from '@/lang'
import { ref, reactive, defineAsyncComponent, computed, watch } from 'vue'
import { ref, reactive, computed, watch } from 'vue'
import { FormRules } from 'element-plus'
import { getGiftDict } from '@/app/api/member'
import { guid, filterNumber } from '@/utils/common'
import Test from '@/utils/test'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const gifts = ref({})
const props = defineProps({
@ -72,10 +73,9 @@ watch(() => formData.value, () => {
value.value = formData.value
}, { deep: true })
const modules: any = import.meta.glob('@/**/*.vue')
getGiftDict().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
gifts.value = data
})

View File

@ -5,8 +5,9 @@
</template>
<script lang="ts" setup>
import { ref, defineAsyncComponent, computed, watch } from 'vue'
import { ref, computed, watch } from 'vue'
import { getGiftDict } from '@/app/api/member'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const gifts = ref({})
const props = defineProps({
@ -39,10 +40,9 @@ watch(() => formData.value, () => {
value.value = formData.value
}, { deep: true })
const modules: any = import.meta.glob('@/**/*.vue')
getGiftDict().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
gifts.value = data
})

View File

@ -5,9 +5,10 @@
</template>
<script lang="ts" setup>
import { ref, defineAsyncComponent, computed, watch } from 'vue'
import { ref, computed, watch } from 'vue'
import { t } from '@/lang'
import { getBenefitsDict } from '@/app/api/member'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const benefits = ref({})
const props = defineProps({
@ -40,10 +41,9 @@ watch(() => formData.value, () => {
value.value = formData.value
}, { deep: true })
const modules: any = import.meta.glob('@/**/*.vue')
getBenefitsDict().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
benefits.value = data
})

View File

@ -5,8 +5,9 @@
</template>
<script lang="ts" setup>
import { ref, defineAsyncComponent, computed, watch } from 'vue'
import { ref, computed, watch } from 'vue'
import { getGiftDict } from '@/app/api/member'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const gifts = ref({})
const props = defineProps({
@ -39,10 +40,9 @@ watch(() => formData.value, () => {
value.value = formData.value
}, { deep: true })
const modules: any = import.meta.glob('@/**/*.vue')
getGiftDict().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
gifts.value = data
})

View File

@ -483,6 +483,32 @@ initPoster({
}
}
//
if (!import.meta.env.DEV && component.value) {
const { loadAddonComponent, getInstalledAddonKeys } = await import('@/utils/addon-loader')
const addonKeys = getInstalledAddonKeys()
for (const type of Object.values(component.value) as any[]) {
if (!type.list) continue
for (const rawKey of Object.keys(type.list)) {
const compDef = type.list[rawKey]
const componentPath = compDef.value?.path || compDef.path || rawKey
if (modules[componentPath]) continue
modules[componentPath] = defineAsyncComponent(() =>
(async () => {
for (const addon of addonKeys) {
const loader = loadAddonComponent(addon, 'poster/components', componentPath)
try {
const result = await loader()
if (result?.default) return result.default
} catch {}
}
throw new Error(`Poster component "${componentPath}" not found in any addon`)
})()
)
}
}
}
loadPosterTemplate()
})

View File

@ -116,7 +116,7 @@
</template>
<script lang="ts" setup>
import { ref, reactive, computed } from 'vue'
import { ref, reactive, computed, defineAsyncComponent } from 'vue'
import { t } from '@/lang'
import { ArrowLeft } from "@element-plus/icons-vue"
import { FormInstance, ElMessage } from 'element-plus'
@ -175,6 +175,30 @@ const init = async() => {
await getPrinterType({}).then((res: any) => {
if (res.data && res.data.length) {
printerType.value = res.data;
//
if (!import.meta.env.DEV && printerType.value.length) {
import('@/utils/addon-loader').then(({ loadAddonComponent, getInstalledAddonKeys }) => {
const addonKeys = getInstalledAddonKeys()
for (const item of printerType.value) {
const componentPath = item.path
if (!componentPath || modules[componentPath]) continue
modules[componentPath] = defineAsyncComponent(() =>
(async () => {
for (const addon of addonKeys) {
const loader = loadAddonComponent(addon, 'printer/components', componentPath)
try {
const result = await loader()
if (result?.default) return result.default
} catch {}
}
throw new Error(`Printer component "${componentPath}" not found in any addon`)
})()
)
}
})
}
handlePrintType(printerType.value[0].key, Boolean(parseInt(formData.template_id)));
}
if (!formData.template_id) {

View File

@ -45,12 +45,13 @@
</template>
<script lang="ts" setup>
import { ref, defineAsyncComponent } from 'vue'
import { ref } from 'vue'
import { useRoute } from 'vue-router'
import { t } from '@/lang'
import { getGrowthRuleConfig, setGrowthRuleConfig, getGrowthRuleDict } from '@/app/api/member'
import Test from '@/utils/test'
import { cloneDeep } from 'lodash-es'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const route = useRoute()
const pageName = route.meta.title
@ -60,10 +61,9 @@ const formData = ref<any>({})
const ruleRefs = ref(null)
const loading = ref(true)
const modules: any = import.meta.glob('@/**/*.vue')
getGrowthRuleDict().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
rules.value = data
})

View File

@ -141,7 +141,7 @@ const save = async (formEl: FormInstance | undefined) => {
* 点击访问教程
*/
const tutorialFn = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3214217')
window.open('https://doc.press.niucloud.com/php/saas-framework/use/configFAQ/tencentMapKey.html')
}
/**

View File

@ -60,7 +60,7 @@
</template>
<script lang="ts" setup>
import { ref, watch, nextTick, defineAsyncComponent } from 'vue'
import { ref, watch, nextTick } from 'vue'
import { t } from '@/lang'
import { getPayConfigList, setPatConfig } from '@/app/api/sys'
import { getAllPayType } from '@/app/api/pay'
@ -69,23 +69,24 @@ import { ElMessage } from 'element-plus'
import Sortable, { SortableEvent } from 'sortablejs'
import { useRoute } from 'vue-router'
import { cloneDeep } from 'lodash-es'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const route = useRoute()
const pageName = route.meta.title
const payTypeList = ref([])
const payTypeRefs = ref({})
const modules: any = import.meta.glob('@/**/*.vue')
getAllPayType().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].setting_component && (data[key].setting_component = defineAsyncComponent(modules[data[key].setting_component]))
data[key].setting_component && (data[key].setting_component = resolveAsyncComponent(data[key].setting_component))
})
payTypeList.value = data
})
const setPayTypeRefs = (el: any, index: string) => {
payTypeRefs.value[index] = (el)
// el undefined
if (el) payTypeRefs.value[index] = el
}
const payLoading = ref(true)
@ -137,8 +138,13 @@ const setConfigInfo = (data:any) => {
//
const configPayFn = (data:any) => {
payTypeRefs.value[data.key].setFormData(data)
payTypeRefs.value[data.key].showDialog = true
const comp = payTypeRefs.value[data.key]
if (!comp) {
ElMessage.warning('支付配置组件加载中,请稍后再试')
return
}
comp.setFormData(data)
comp.showDialog = true
}
//

View File

@ -54,11 +54,12 @@
</template>
<script lang="ts" setup>
import { ref, defineAsyncComponent } from 'vue'
import { ref } from 'vue'
import { useRoute } from 'vue-router'
import { t } from '@/lang'
import { getPointRuleConfig, setPointRuleConfig, getPointRuleDict } from '@/app/api/member'
import Test from '@/utils/test'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const route = useRoute()
const pageName = route.meta.title
@ -71,13 +72,12 @@ const formData = ref({
const ruleRefs = ref(null)
const loading = ref(true)
const modules: any = import.meta.glob('@/**/*.vue')
getPointRuleDict().then(({ data }) => {
Object.keys(data.grant).forEach((key : string) => {
data.grant[key].component && (data.grant[key].component = defineAsyncComponent(modules[data.grant[key].component]))
data.grant[key].component && (data.grant[key].component = resolveAsyncComponent(data.grant[key].component))
})
Object.keys(data.consume).forEach((key : string) => {
data.consume[key].component && (data.consume[key].component = defineAsyncComponent(modules[data.consume[key].component]))
data.consume[key].component && (data.consume[key].component = resolveAsyncComponent(data.consume[key].component))
})
rules.value = data
})

View File

@ -37,10 +37,11 @@
</template>
<script lang="ts" setup>
import { defineAsyncComponent, reactive, ref } from 'vue'
import { reactive, ref } from 'vue'
import { t } from '@/lang'
import { getSmsList, getAccountIsLogin } from '@/app/api/notice'
import { useRoute, useRouter } from 'vue-router'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const router = useRouter()
const route = useRoute()
@ -52,7 +53,6 @@ const smsTableData = reactive({
data: []
})
const modules: any = import.meta.glob('@/**/*.vue')
/**
* 获取配置信息
*/
@ -60,7 +60,7 @@ const loadSmsList = () => {
smsTableData.loading = true
getSmsList().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
smsTableData.data = data
smsTableData.loading = false

View File

@ -38,10 +38,11 @@
</template>
<script lang="ts" setup>
import { defineAsyncComponent, reactive, ref } from 'vue'
import { reactive, ref } from 'vue'
import { t } from '@/lang'
import { getStorageList } from '@/app/api/sys'
import { useRoute } from 'vue-router'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const route = useRoute()
const pageName = route.meta.title
@ -52,7 +53,6 @@ const storageTableData = reactive({
})
const loading = ref(true)
const modules: any = import.meta.glob('@/**/*.vue')
/**
* 获取配置信息
*/
@ -60,7 +60,7 @@ const loadStorageList = () => {
loading.value = true
getStorageList().then(({ data }) => {
Object.keys(data).forEach((key: string) => {
data[key].component && (data[key].component = defineAsyncComponent(modules[data[key].component]))
data[key].component && (data[key].component = resolveAsyncComponent(data[key].component))
})
storageTableData.data = data
loading.value = false

View File

@ -175,7 +175,7 @@
<template #description>
<span class="text-[#999]">{{ t("describe3") }}</span>
<div class="mt-[20px] mb-[40px] h-[32px]">
<el-button type="primary" plain @click="linkEvent('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3225439')">{{t("btn3") }}</el-button>
<el-button type="primary" plain @click="linkEvent('https://doc.press.niucloud.com/php/saas-framework/dev/pluginDev/introduction.html')">{{t("btn3") }}</el-button>
</div>
</template>
</el-step>

View File

@ -113,10 +113,11 @@
<script lang="ts" setup>
import { t } from '@/lang'
import { ref, computed, defineAsyncComponent } from 'vue'
import { ref, computed } from 'vue'
import { cloneDeep } from 'lodash-es'
import { getLink } from '@/app/api/diy'
import { ElMessage } from 'element-plus'
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
const prop = defineProps({
modelValue: {
@ -159,8 +160,6 @@ const dynamicComponentRefs: any = ref(null) // 动态组件ref
const selectLink: any = ref([])
const modules: any = import.meta.glob('@/**/*.vue')
const show = () => {
getLinkFn(() => {
//
@ -259,8 +258,7 @@ const changeParentLink = (item: any) => {
parentLinkName.value = item.name
childList.value = item.child_list
if (item.component) {
dynamicComponentName.value = item.component
dynamicComponentName.value = defineAsyncComponent(modules[dynamicComponentName.value])
dynamicComponentName.value = resolveAsyncComponent(item.component)
} else {
dynamicComponentName.value = ''
}

View File

@ -111,8 +111,6 @@ const initTencentMap = () => {
const lat = props.latitude ? Number(props.latitude) : 39.909187
const center = new TMap.LatLng(lat, lng)
map = new TMap.Map(props.containerId, { center, zoom: props.zoom })
map.on('tilesloaded', () => loading.value = false)
marker = createMarker(map)
if(!props.disabledClickMarker) {
map.on('click', (evt: any) => {
@ -135,6 +133,12 @@ const initTencentMap = () => {
if (props.latitude && props.longitude) {
handleLocationChange(lat, lng)
}
// ========== ==========
map.on('tilesloaded', () => {
loading.value = false
emit('mapReady') //
})
} else {
loading.value = false
ElMessage.error(t('腾讯地图加载失败'))
@ -350,24 +354,29 @@ const searchAddress = (address: string): Promise<{ lat: number, lng: number }> =
})
}
//
// index.vue addCircle
const addCircle = (center?: { lat: number; lng: number }, radius = 1000, options?: any) => {
if (!map) return null
const key = options?.key || `circle_${Date.now()}`
let circle = null
// geometriesData
const geometriesData = { key, center, radius, ...options }
if (mapType.value === 'tencent') {
// onChange
createCircle(map, geometriesData, (selectedKey) => {
// selectChange
emit('selectChange', selectedKey)
}, (fullAreaData) => {
// areaChange
emit('areaChange', {
key: fullAreaData.key,
type: 'circle',
path: fullAreaData
})
})
// createCirclekeyoverlays
circle = { key, geometriesData }
} else {
//
circle = tdCreateCircle(map, geometriesData, (data) => {
// areaChangepath
emit('areaChange', {
key: data.key,
type: 'circle',
@ -378,38 +387,39 @@ const addCircle = (center?: { lat: number; lng: number }, radius = 1000, options
}
})
}, (selectedKey) => {
// selectChange
emit('selectChange', selectedKey)
})
// geometriesData
if (circle) {
circle.geometriesData = geometriesData
}
if (circle) circle.geometriesData = geometriesData
}
if (circle) overlays.value.push(circle)
return circle
}
//
//
const addPolygon = (paths: any[], options?: any) => {
if (!map) return null
const key = options?.key || `poly_${Date.now()}`
let poly = null
// geometriesData
const geometriesData = { key, paths, ...options }
if (mapType.value === 'tencent') {
// onSelectonChange
createPolygon(map, geometriesData, (selectedKey) => {
// selectChange
emit('selectChange', selectedKey)
}, (fullAreaData) => {
// areaChange
emit('areaChange', {
key: fullAreaData.key,
type: 'polygon',
path: fullAreaData
})
})
// createPolygonkeyoverlays
poly = { key, geometriesData }
} else {
//
poly = tdCreatePolygon(map, geometriesData, (data) => {
// areaChangepath
emit('areaChange', {
key: data.key,
type: 'polygon',
@ -422,13 +432,9 @@ const addPolygon = (paths: any[], options?: any) => {
}
})
}, (selectedKey) => {
// selectChange
emit('selectChange', selectedKey)
})
// geometriesData
if (poly) {
poly.geometriesData = geometriesData
}
if (poly) poly.geometriesData = geometriesData
}
if (poly) overlays.value.push(poly)

View File

@ -370,7 +370,7 @@ const getAttachmentList = debounce((page: number = 1) => {
}
}).catch((err) => {
if (prop.type == 'image' && err.response.status == 500) {
showElMessage({ message: 'php脚本内存不足请加大php配置中memory_limit的数值, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3249216" target="blank">点击查看相关手册</a>', type: 'error', dangerouslyUseHTMLString: true })
showElMessage({ message: 'php脚本内存不足请加大php配置中memory_limit的数值, <a style="text-decoration: underline;" href="https://doc.press.niucloud.com/php/saas-framework/use/installFAQ/memorySizeExhausted.html" target="blank">点击查看相关手册</a>', type: 'error', dangerouslyUseHTMLString: true })
}
attachment.loading = false
})

View File

@ -4,15 +4,16 @@ import Language from "./language"
import zhCn from "./zh-cn/common.json";
import en from "./en/common.json"
if (import.meta.env.DEV) {
const addonZhCnCommon = import.meta.globEager('@/addon/**/lang/zh-cn/common.json')
const addonEnCommon = import.meta.globEager('@/addon/**/lang/en/common.json')
for (const key in addonZhCnCommon) {
Object.assign(zhCn, addonZhCnCommon[key].default)
}
for (const key in addonEnCommon) {
Object.assign(en, addonEnCommon[key].default)
}
// 内置插件admin/src/addon 下,随 core 一起打包,部署模式下没有独立的 dist/assets/addons/{key}/index.js
// 的 common 语言包需直接合并进基础字典。globEager 在编译期已静态收集dev/prod 均打进 bundle
// 此处运行时合并不能仅在 DEV 执行,否则部署模式下内置插件语言包丢失。
const addonZhCnCommon = import.meta.globEager('@/addon/**/lang/zh-cn/common.json')
const addonEnCommon = import.meta.globEager('@/addon/**/lang/en/common.json')
for (const key in addonZhCnCommon) {
Object.assign(zhCn, addonZhCnCommon[key].default)
}
for (const key in addonEnCommon) {
Object.assign(en, addonEnCommon[key].default)
}
//创建实例

View File

@ -37,12 +37,10 @@ class Language {
let pageMessages: Record<string, string> = {}
if (app) {
if (import.meta.env.DEV) {
const messages = await import(/* @vite-ignore */ `@/addon/${app}/lang/${locale}/${file}.json`)
pageMessages = messages.default || {}
} else {
pageMessages = await loadAddonLang(app, locale, file)
}
// dev/prod 统一走 loadAddonLang
// - 部署插件:从 dist/assets/addons/{key}/index.js 的 langs 解析
// - 内置插件(随 core 打包,无独立 index.js回退到编译期 glob 源码 json
pageMessages = await loadAddonLang(app, locale, file)
} else {
const messages = await import(`@/app/lang/${locale}/${file}.json`)
pageMessages = messages.default || {}
@ -56,13 +54,7 @@ class Language {
// 查询插件的公共语言包(合并到根 key与 dev 启动时 globEager 行为一致)
if (app) {
try {
let commonMessages: Record<string, string> = {}
if (import.meta.env.DEV) {
const messagesCommon = await import(/* @vite-ignore */ `@/addon/${app}/lang/${locale}/common.json`)
commonMessages = messagesCommon.default || {}
} else {
commonMessages = await loadAddonLang(app, locale, 'common')
}
const commonMessages = await loadAddonLang(app, locale, 'common')
Object.keys(commonMessages).forEach(key => {
data[key] = commonMessages[key]
})

View File

@ -112,7 +112,7 @@
"timeout": "网络请求超时!",
"requestError": "请求错误",
"errNetwork": "网络请求错误",
"baseUrlError": " 接口请求错误,请检查VITE_APP_BASE_URL参数配置或者伪静态配置, <a style='text-decoration: underline;' href='https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213750' target='blank'>点击查看相关手册</a>"
"baseUrlError": " 接口请求错误,请检查VITE_APP_BASE_URL参数配置或者伪静态配置, <a style='text-decoration: underline;' href='https://doc.press.niucloud.com/php/saas-framework/use/configFAQ/interfaceRequestError.html' target='blank'>点击查看相关手册</a>"
},
"linkPlaceholder": "请选择跳转链接",
"selectLinkTips": "链接选择",

View File

@ -7,6 +7,7 @@ import useSystemStore from '@/stores/modules/system'
import useUserStore from '@/stores/modules/user'
import { setWindowTitle, getAppType, urlToRouteRaw } from '@/utils/common'
import { resolveRouteAddon, resolveRouteView } from '@/utils/addon-loader'
import { preloadRouteAddon } from '@/utils/addon-lang'
// 加载插件中定义的router仅开发环境从源码加载
const ADDON_ROUTE: any[] = []
@ -75,6 +76,9 @@ router.beforeEach(async (to: any, from, next) => {
systemStore.lang
);
// 预热当前路由对应的插件模块(仅加载相关插件,其余惰性)
await preloadRouteAddon(to)
let matched: any = to.matched;
if (matched && matched.length && matched[0].path != '/:pathMatch(.*)*') {
matched = matched[0].path;

View File

@ -17,9 +17,21 @@ let installedAddonKeys: string[] = []
let prodReady = false
let prodInitPromise: Promise<void> | null = null
const addonModuleCache: Record<string, Promise<Record<string, unknown> | null>> = {}
// 跨 chunk 共享vite 会把 addon-lang.ts 同时打进主 chunk 与 admin-lang shared chunk
// 两个 chunk 各自有一份模块级变量,会重复执行 initAddonManifests IIFE 并重复 fetch index.json。
// 提升到 window 上做去重IIFE 全局只跑一次。getter/setter 保证两路读写都看到同一份。
const __getInit = (): Promise<void> | null =>
((globalThis as any).__addonInitPromise__ as Promise<void> | null | undefined) ?? null
const __setInit = (p: Promise<void> | null) => {
prodInitPromise = p
;(globalThis as any).__addonInitPromise__ = p
}
const ADMIN_PREFIX = '/admin'
// 系统支持的语言(与 i18n.ts 中 zhCn / en 对应)
const supportedLocales = ['zh-cn', 'en']
export function adminUrl(relative: string) {
if (!relative) return relative
if (relative.startsWith('http') || relative.startsWith('/admin/')) return relative
@ -33,6 +45,13 @@ function addonAssetUrl(addon: string, ...segments: string[]) {
return `${ADMIN_PREFIX}/${rel}`
}
// 语言包资产路径:尊重 manifest.langBase默认 ./lang/),兼容其他项目编译时自定义语言目录
function addonLangAssetUrl(addon: string, locale: string, file: string) {
const base = (getProdManifests()[addon]?.langBase || './lang/').replace(/^\.\//, '').replace(/\/+$/, '')
const rel = ['assets', 'addons', addon, base, locale, `${file}.json`].join('/').replace(/\/+/g, '/')
return `${ADMIN_PREFIX}/${rel}`
}
export function resolveLangFile(app: string, path: string): string {
if (path === '/') return 'index'
let view = path.replace(/^(\/admin\/|\/site\/|\/)/, '').replace(/\.vue$/, '')
@ -144,9 +163,10 @@ export async function initAddonManifests(keys?: string[]) {
prodReady = true
return
}
if (prodInitPromise) return prodInitPromise
const shared = __getInit()
if (shared) return shared
prodInitPromise = (async () => {
__setInit((async () => {
prodManifests = {}
installedAddonKeys = []
let addonKeys = keys
@ -171,16 +191,12 @@ export async function initAddonManifests(keys?: string[]) {
}
const verifiedKeys: string[] = []
for (const key of addonKeys || []) {
// 如果 manifest 已从 index.json 获取,直接验证
// index.json 已打包 manifests 的插件,直接视为可用(无需 N 次 HEAD 探测)
if (prodManifests[key]) {
if (await isAddonEntryAvailable(key)) {
verifiedKeys.push(key)
} else {
delete prodManifests[key]
}
verifiedKeys.push(key)
continue
}
// 兼容旧版:单独请求 manifest.json
// 兼容旧版:单独请求 manifest.json仍做一次探测
if (!(await isAddonEntryAvailable(key))) continue
verifiedKeys.push(key)
try {
@ -195,11 +211,22 @@ export async function initAddonManifests(keys?: string[]) {
}
installedAddonKeys = verifiedKeys
prodReady = true
})()
})())
return prodInitPromise
}
/**
* /
* 访 loadAddonModule
* index.js
*/
export async function preloadRouteAddon(route: { meta: Record<string, unknown>; matched: Array<{ meta: Record<string, unknown> }>; path: string }) {
const addon = resolveRouteAddon(route)
if (!addon || !isAddonInstalled(addon)) return
loadAddonModule(addon)
}
export function getInstalledAddonKeys(): string[] {
if (installedAddonKeys.length) return installedAddonKeys
return Object.keys(prodManifests)
@ -209,6 +236,23 @@ export function getProdManifests(): Record<string, AddonManifest> {
return prodManifests
}
// 内置插件admin/src/addon 下,随 core 一起打包,部署模式下没有独立 dist/assets/addons/{key}/index.js
// 的语言包不会被打进任何部署插件的 index.js也不存在 /admin/assets/addons/{key}/lang/ 资源,
// 必须通过编译期 glob 直接解析源码 json。这里用懒 glob按需加载不膨胀 bundle
const builtinAddonLangFiles = import.meta.glob('@/addon/**/lang/**/*.json', { eager: false })
export async function loadBuiltinAddonLangFile(addon: string, locale: string, file: string): Promise<Record<string, string>> {
const key = `@/addon/${addon}/lang/${locale}/${file}.json`
const loader = (builtinAddonLangFiles as Record<string, () => Promise<{ default: Record<string, string> }>>)[key]
if (!loader) return {}
try {
const mod = await loader()
return (mod.default || {}) as Record<string, string>
} catch {
return {}
}
}
export async function preloadAllAddonLangs(
merge: (locale: string, messages: Record<string, string>) => void
) {
@ -218,15 +262,22 @@ export async function preloadAllAddonLangs(
for (const addon of getInstalledAddonKeys()) {
try {
const mod = await loadAddonModule(addon)
if (!mod) continue
const langs = mod.langs as Record<string, Record<string, unknown>> | undefined
if (!langs) continue
for (const [locale, files] of Object.entries(langs)) {
const merged: Record<string, string> = {}
for (const [file, pack] of Object.entries(files || {})) {
Object.assign(merged, flattenLangPack(file, unwrapLangPack(pack)))
const langs = mod?.langs as Record<string, Record<string, unknown>> | undefined
if (langs) {
for (const [locale, files] of Object.entries(langs)) {
const merged: Record<string, string> = {}
for (const [file, pack] of Object.entries(files || {})) {
Object.assign(merged, flattenLangPack(file, unwrapLangPack(pack)))
}
if (Object.keys(merged).length) merge(locale, merged)
}
} else {
// index.js 未内联 langs如其他项目编译的插件包未打包语言
// 从资产目录拉取 common 语言包作为兜底
for (const locale of supportedLocales) {
const common = await loadAddonLang(addon, locale, 'common')
if (Object.keys(common).length) merge(locale, common)
}
if (Object.keys(merged).length) merge(locale, merged)
}
} catch {
// skip broken addon module
@ -259,10 +310,14 @@ export async function loadAddonLang(addon: string, locale: string, file: string)
if (Object.keys(messages).length) return messages
}
} catch {
// fallback to static lang files
// fallback to builtin glob / static lang files
}
const url = addonAssetUrl(addon, 'lang', locale, `${file}.json`)
// 内置插件(随 core 打包,无独立部署 index.js回退到源码 glob 解析
const builtin = await loadBuiltinAddonLangFile(addon, locale, file)
if (Object.keys(builtin).length) return builtin
const url = addonLangAssetUrl(addon, locale, file)
try {
const res = await fetch(url)
if (res.ok) return await res.json()

View File

@ -3,6 +3,7 @@
*/
import type { Component } from 'vue'
import { defineAsyncComponent } from 'vue'
import { loadAddonModule } from '@/utils/addon-loader'
export const coreVueModules = {
...import.meta.glob('../app/**/*.vue'),
@ -43,13 +44,19 @@ const allAddonVueModules = import.meta.glob('../addon/**/views/**/*.vue')
export async function loadCoreVueModule(componentPath: string) {
const loader = findCoreModuleLoader(componentPath)
if (loader) return loader()
if (import.meta.env.DEV) {
if (componentPath.includes('/addon/')) {
const m = componentPath.match(/\/addon\/([^/]+)\/views\/(.+)\.vue$/)
if (m) {
const [, addon, rest] = m
// 插件组件:/src/addon/{addon}/views/{rest}.vue
if (componentPath.includes('/addon/')) {
const m = componentPath.match(/\/addon\/([^/]+)\/views\/(.+)\.vue$/)
if (m) {
const [, addon, rest] = m
if (import.meta.env.DEV) {
const viewLoader = (allAddonVueModules as Record<string, ViewLoader>)[`../addon/${addon}/views/${rest}.vue`]
if (viewLoader) return viewLoader()
} else {
// 部署模式插件独立打包views 中存的是组件 loader 函数generate-addon-entry 生成)
const mod = await loadAddonModule(addon)
const loader = (mod?.views as Record<string, ViewLoader> | undefined)?.[rest]
if (loader) return await loader()
}
}
}

View File

@ -42,6 +42,8 @@ Route::group('weapp', function() {
Route::post('version', 'weapp.Version/add');
//版本列表
Route::get('version', 'weapp.Version/lists');
//删除版本
Route::delete('version/:id', 'weapp.Version/del');
//获取预览码
Route::get('preview', 'weapp.Version/preview');
//获取小程序上传日志(会更新状态)

View File

@ -167,12 +167,13 @@ function del_target_dir($path, $delDir)
//打开目录句柄
$handle = opendir($path);
if ($handle) {
while (false !== ($item = readdir($handle))) {
if ($item != "." && $item != "..") {
if (is_dir("$path/$item")) {
del_target_dir("$path/$item", $delDir);
while (false !== ( $item = readdir($handle) )) {
if ($item != '.' && $item != '..') {
$itemPath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $item;
if (is_dir($itemPath)) {
del_target_dir($itemPath, $delDir);
} else {
unlink("$path/$item");
unlink($itemPath);
}
}
}
@ -444,7 +445,7 @@ function rmdirs($dir)
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != "." && $file != "..") {
$fullpath = $dir . "/" . $file;
$fullpath = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
if (is_dir($fullpath)) {
rmdirs($fullpath);
} else {
@ -556,15 +557,17 @@ function dir_copy(string $src = '', string $dst = '', &$files = [], $exclude_dir
dir_mkdir($dst);
while (false !== ($file = readdir($dir))) {
if (($file != '.') && ($file != '..')) {
if (is_dir($src . '/' . $file)) {
$srcPath = rtrim($src, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
$dstPath = rtrim($dst, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
if (is_dir($srcPath)) {
// 排除目录
if (count($exclude_dirs) && in_array($file, $exclude_dirs)) continue;
dir_copy($src . '/' . $file, $dst . '/' . $file, $files, $exclude_dirs, $exclude_files);
dir_copy($srcPath, $dstPath, $files, $exclude_dirs, $exclude_files);
} else {
// 排除文件
if (count($exclude_files) && in_array($file, $exclude_files)) continue;
$copyResult = copy($src . '/' . $file, $dst . '/' . $file);
$files[] = $dst . '/' . $file;
$copyResult = copy($srcPath, $dstPath);
$files[] = $dstPath;
if (!$copyResult) {
closedir($dir);
throw new \core\exception\CommonException("文件{$file}拷贝失败请检查是否有足够的权限");
@ -697,7 +700,7 @@ function parse_sql($content = '', $string = false, $replace = [])
function search_dir($path, &$data, $search = '')
{
if (is_dir($path)) {
$path .= DIRECTORY_SEPARATOR;
$path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
$fp = dir($path);
while ($file = $fp->read()) {
if ($file != '.' && $file != '..') {
@ -729,12 +732,12 @@ function getFileMap($path, $arr = [])
$dir = scandir($path);
foreach ($dir as $file_path) {
if ($file_path != '.' && $file_path != '..') {
$temp_path = $path . '/' . $file_path;
$temp_path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file_path;
if (is_dir($temp_path)) {
$arr[$temp_path] = $file_path;
$arr[ $temp_path ] = $file_path;
$arr = getFileMap($temp_path, $arr);
} else {
$arr[$temp_path] = $file_path;
$arr[ $temp_path ] = $file_path;
}
}
}
@ -1096,7 +1099,7 @@ function checkDirPermissions($dir, $data = [], $exclude_dir = [])
if ($file === '.' || $file === '..') {
continue;
}
$fullPath = $dir . DIRECTORY_SEPARATOR . $file;
$fullPath = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
// 忽略指定目录
$is_exclude = false;

View File

@ -51,10 +51,10 @@ return [
'DOWNLOAD_SUCCESS' => '下载成功',
'APP_NOT_ALLOW_UNINSTALL' => '该插件有站点正在使用中,卸载前请先删除相关站点',
'ADDON_INSTALL_FAIL' => '插件安装失败',
'ADMIN_DIR_NOT_EXIST' => '未找到admin源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'WEB_DIR_NOT_EXIST' => '未找到web源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'UNIAPP_DIR_NOT_EXIST' => '未找到uni-app源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'OPEN_BASEDIR_ERROR' => '请关闭防跨站攻击, 具体操作方法<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213542" target="blank">点击查看相关手册</a>',
'ADMIN_DIR_NOT_EXIST' => '未找到admin源码所在目录, <a style="text-decoration: underline;" href="https://doc.press.niucloud.com/php/saas-framework/use/installFAQ/adminSourceCodeNotFound.html" target="blank">点击查看相关手册</a>',
'WEB_DIR_NOT_EXIST' => '未找到web源码所在目录, <a style="text-decoration: underline;" href="https://doc.press.niucloud.com/php/saas-framework/use/installFAQ/adminSourceCodeNotFound.html" target="blank">点击查看相关手册</a>',
'UNIAPP_DIR_NOT_EXIST' => '未找到uni-app源码所在目录, <a style="text-decoration: underline;" href="https://doc.press.niucloud.com/php/saas-framework/use/installFAQ/adminSourceCodeNotFound.html" target="blank">点击查看相关手册</a>',
'OPEN_BASEDIR_ERROR' => '请关闭防跨站攻击, 具体操作方法<a style="text-decoration: underline;" href="https://doc.press.niucloud.com/php/saas-framework/use/installFAQ/isDirError.html" target="blank">点击查看相关手册</a>',
'ADDON_DOWNLOAD_VERSION_EMPTY' => '该插件还没有发布过版本',
'ADDON_IS_NOT_EXIST' => '插件不存在',
'ADDON_KEY_IS_EXIST' => '已存在相同插件标识的应用',

View File

@ -688,8 +688,8 @@ class CoreAddonInstallService extends CoreAddonBaseService
$to_web_layouts = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
$to_wap_dist_dir = public_path() . 'wap' . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'addons' . $this->addon . DIRECTORY_SEPARATOR;
$to_admin_dist_dir = public_path() . 'admin' . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'addons' . $this->addon . DIRECTORY_SEPARATOR;
$to_wap_dist_dir = public_path() . 'wap' . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
$to_admin_dist_dir = public_path() . 'admin' . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
// 卸载admin管理端
if (is_dir($to_admin_dir)) del_target_dir($to_admin_dir, true);

View File

@ -1,6 +1,6 @@
<?php
return [
'version' => '2.0.1',
'code' => '202606060001'
'version' => '2.0.2',
'code' => '202608200001'
];

View File

@ -1 +0,0 @@
import{ElButton as d}from"element-plus/es";import{defineComponent as i,ref as a,onUnmounted as p,openBlock as m,createElementBlock as u,createElementVNode as t,renderSlot as x,createVNode as f,unref as v,withCtx as h,createTextVNode as I,toDisplayString as b,pushScopeId as g,popScopeId as S}from"vue";import{_ as k}from"./error-54aee623.js";import{useRouter as w}from"vue-router";import{_ as y}from"./_plugin-vue_export-helper-c27b6911.js";const s=e=>(g("data-v-4f4088b5"),e=e(),S(),e),B={class:"error"},C={class:"flex items-center"},E=s(()=>t("div",null,[t("img",{class:"w-[240px]",src:k})],-1)),N={class:"text-left ml-[100px]"},V=s(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误",-1)),R=s(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),U=s(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误然后点击浏览器刷新按钮。",-1)),$={class:"mt-[40px]"},D=i({__name:"404",setup(e){let o=null;const n=a(5),c=w();return o=setInterval(()=>{n.value===0?(clearInterval(o),c.go(-1)):n.value--},1e3),p(()=>{o&&clearInterval(o)}),(_,r)=>{const l=d;return m(),u("div",B,[t("div",C,[x(_.$slots,"content",{},()=>[E],!0),t("div",N,[V,R,U,t("div",$,[f(l,{class:"bottom",onClick:r[0]||(r[0]=L=>v(c).go(-1))},{default:h(()=>[I(b(n.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const F=y(D,[["__scopeId","data-v-4f4088b5"]]);export{F as default};

View File

@ -0,0 +1 @@
import{ElButton as a}from"element-plus/es";import{defineComponent as d,ref as i,onUnmounted as p,openBlock as m,createElementBlock as u,createElementVNode as t,renderSlot as x,createVNode as f,unref as v,withCtx as h,createTextVNode as b,toDisplayString as I,pushScopeId as g,popScopeId as S}from"vue";import{useRouter as w}from"vue-router";import{_ as k}from"./_plugin-vue_export-helper-c27b6911.js";const y=""+new URL("error-ab7e4004.png",import.meta.url).href,s=e=>(g("data-v-4f4088b5"),e=e(),S(),e),B={class:"error"},C={class:"flex items-center"},E=s(()=>t("div",null,[t("img",{class:"w-[240px]",src:y})],-1)),N={class:"text-left ml-[100px]"},R=s(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误",-1)),U=s(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),V=s(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误然后点击浏览器刷新按钮。",-1)),L={class:"mt-[40px]"},$=d({__name:"404",setup(e){let o=null;const n=i(5),r=w();return o=setInterval(()=>{n.value===0?(clearInterval(o),r.go(-1)):n.value--},1e3),p(()=>{o&&clearInterval(o)}),(_,c)=>{const l=a;return m(),u("div",B,[t("div",C,[x(_.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[f(l,{class:"bottom",onClick:c[0]||(c[0]=D=>v(r).go(-1))},{default:h(()=>[b(I(n.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const A=k($,[["__scopeId","data-v-4f4088b5"]]);export{A as default};

View File

@ -1 +0,0 @@
import{bE as o}from"./index-e730ce9b.js";import"vue";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

View File

@ -1 +0,0 @@
.upload-demo[data-v-d439b536]{width:100%;border:1px dashed #dcdcdc;border-radius:6px;padding:20px;text-align:center}.copy-icon[data-v-d439b536]{cursor:pointer;margin-left:8px;color:#606266;font-size:18px}.copy-icon[data-v-d439b536]:hover{color:#409eff}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import z from"./VerifySlide-fa2ab6ab.js";import g from"./VerifyPoints-3c19cd52.js";import{toRefs as k,ref as c,computed as w,watchEffect as T,withDirectives as V,openBlock as m,createElementBlock as u,normalizeClass as y,createElementVNode as r,normalizeStyle as d,createTextVNode as B,createCommentVNode as v,createBlock as N,resolveDynamicComponent as C,vShow as j}from"vue";import{_ as E}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-d6d21d3e.js";import"./index-597ddd74.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";import"vue-router";import"/admin/assets/shared/admin-lang.js";const O={name:"Vue2Verify",components:{VerifySlide:z,VerifyPoints:g},props:{captchaType:{type:String,required:!0},figure:{type:Number},arith:{type:Number},mode:{type:String,default:"pop"},vSpace:{type:Number},explain:{type:String},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},blockSize:{type:Object},barSize:{type:Object}},setup(s){const{captchaType:i,figure:e,arith:t,mode:a,vSpace:S,explain:f,imgSize:R,blockSize:W,barSize:A}=k(s),o=c(!1),n=c(void 0),l=c(void 0),p=c({}),h=w(()=>a.value=="pop"?o.value:!0),b=()=>{p.value.refresh&&p.value.refresh()},x=()=>{o.value=!1,b()},_=()=>{a.value=="pop"&&(o.value=!0)};return T(()=>{switch(i.value){case"blockPuzzle":n.value="2",l.value="VerifySlide";break;case"clickWord":n.value="",l.value="VerifyPoints";break}}),{clickShow:o,verifyType:n,componentType:l,instance:p,showBox:h,closeBox:x,show:_}}},P={key:0,class:"verifybox-top"},D=r("i",{class:"iconfont icon-close"},null,-1),q=[D];function I(s,i,e,t,a,S){return V((m(),u("div",{class:y(e.mode=="pop"?"mask":"")},[r("div",{class:y(e.mode=="pop"?"verifybox":""),style:d({"max-width":parseInt(e.imgSize.width)+30+"px"})},[e.mode=="pop"?(m(),u("div",P,[B(" 请完成安全验证 "),r("span",{class:"verifybox-close",onClick:i[0]||(i[0]=(...f)=>t.closeBox&&t.closeBox(...f))},q)])):v("",!0),r("div",{class:"verifybox-bottom",style:d({padding:e.mode=="pop"?"15px":"0"})},[t.componentType?(m(),N(C(t.componentType),{key:0,captchaType:e.captchaType,type:t.verifyType,figure:e.figure,arith:e.arith,mode:e.mode,vSpace:e.vSpace,explain:e.explain,imgSize:e.imgSize,blockSize:e.blockSize,barSize:e.barSize,ref:"instance"},null,8,["captchaType","type","figure","arith","mode","vSpace","explain","imgSize","blockSize","barSize"])):v("",!0)],4)],6)],2)),[[j,t.showBox]])}const te=E(O,[["render",I]]);export{te as default};

View File

@ -1 +0,0 @@
import z from"./VerifySlide-559282c6.js";import g from"./VerifyPoints-99919902.js";import{toRefs as k,ref as c,computed as w,watchEffect as T,withDirectives as V,openBlock as m,createElementBlock as u,normalizeClass as y,createElementVNode as r,normalizeStyle as d,createTextVNode as B,createCommentVNode as v,createBlock as N,resolveDynamicComponent as C,vShow as j}from"vue";import{_ as E}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-b679d659.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";import"vue-router";import"/admin/assets/shared/admin-lang.js";const O={name:"Vue2Verify",components:{VerifySlide:z,VerifyPoints:g},props:{captchaType:{type:String,required:!0},figure:{type:Number},arith:{type:Number},mode:{type:String,default:"pop"},vSpace:{type:Number},explain:{type:String},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},blockSize:{type:Object},barSize:{type:Object}},setup(s){const{captchaType:i,figure:e,arith:t,mode:a,vSpace:S,explain:f,imgSize:R,blockSize:W,barSize:A}=k(s),o=c(!1),n=c(void 0),l=c(void 0),p=c({}),h=w(()=>a.value=="pop"?o.value:!0),b=()=>{p.value.refresh&&p.value.refresh()},x=()=>{o.value=!1,b()},_=()=>{a.value=="pop"&&(o.value=!0)};return T(()=>{switch(i.value){case"blockPuzzle":n.value="2",l.value="VerifySlide";break;case"clickWord":n.value="",l.value="VerifyPoints";break}}),{clickShow:o,verifyType:n,componentType:l,instance:p,showBox:h,closeBox:x,show:_}}},P={key:0,class:"verifybox-top"},D=r("i",{class:"iconfont icon-close"},null,-1),q=[D];function I(s,i,e,t,a,S){return V((m(),u("div",{class:y(e.mode=="pop"?"mask":"")},[r("div",{class:y(e.mode=="pop"?"verifybox":""),style:d({"max-width":parseInt(e.imgSize.width)+30+"px"})},[e.mode=="pop"?(m(),u("div",P,[B(" 请完成安全验证 "),r("span",{class:"verifybox-close",onClick:i[0]||(i[0]=(...f)=>t.closeBox&&t.closeBox(...f))},q)])):v("",!0),r("div",{class:"verifybox-bottom",style:d({padding:e.mode=="pop"?"15px":"0"})},[t.componentType?(m(),N(C(t.componentType),{key:0,captchaType:e.captchaType,type:t.verifyType,figure:e.figure,arith:e.arith,mode:e.mode,vSpace:e.vSpace,explain:e.explain,imgSize:e.imgSize,blockSize:e.blockSize,barSize:e.barSize,ref:"instance"},null,8,["captchaType","type","figure","arith","mode","vSpace","explain","imgSize","blockSize","barSize"])):v("",!0)],4)],6)],2)),[[j,t.showBox]])}const te=E(O,[["render",I]]);export{te as default};

View File

@ -0,0 +1 @@
import{r as K,a as V,b as F,c as G}from"./index-d6d21d3e.js";import{toRefs as X,getCurrentInstance as Y,ref as o,reactive as v,onMounted as Q,openBlock as H,createElementBlock as I,createElementVNode as l,normalizeStyle as A,withDirectives as U,vShow as Z,Fragment as $,renderList as ee,toDisplayString as E,nextTick as te}from"vue";import{_ as ie}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-597ddd74.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";import"vue-router";import"/admin/assets/shared/admin-lang.js";const ae={name:"VerifyPoints",props:{mode:{type:String,default:"fixed"},captchaType:{type:String},vSpace:{type:Number,default:5},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},barSize:{type:Object,default(){return{width:"310px",height:"40px"}}}},setup(N,g){const{mode:_,captchaType:e,vSpace:L,imgSize:R,barSize:c}=X(N),{proxy:n}=Y(),h=o(""),z=o(3),f=v([]),i=v([]),r=o(1),O=o(""),w=v([]),m=o(""),u=v({imgHeight:0,imgWidth:0,barHeight:0,barWidth:0}),y=v([]),d=o(""),b=o(void 0),x=o(void 0),j=o(!0),C=o(!0),J=()=>{f.splice(0,f.length),i.splice(0,i.length),r.value=1,W(),te(()=>{const{imgHeight:a,imgWidth:t,barHeight:p,barWidth:s}=K(n);u.imgHeight=a,u.imgWidth=t,u.barHeight=p,u.barWidth=s,n.$parent.$emit("ready",n)})};Q(()=>{J(),n.$el.onselectstart=function(){return!1}});const S=o(null),q=a=>{if(i.push(k(S,a)),r.value==z.value){r.value=T(k(S,a));const t=M(i,u);i.length=0,i.push(...t),setTimeout(()=>{const p=h.value?V(m.value+"---"+JSON.stringify(i),h.value):m.value+"---"+JSON.stringify(i),s={captchaType:e.value,captcha_code:h.value?V(JSON.stringify(i),h.value):JSON.stringify(i),captcha_key:m.value};F(s).then(B=>{B.code==1?(b.value="#4cae4c",x.value="#5cb85c",d.value="验证成功",C.value=!1,_.value=="pop"&&setTimeout(()=>{n.$parent.clickShow=!1,P()},1500),n.$parent.$emit("success",{captchaVerification:p})):(n.$parent.$emit("error",n),b.value="#d9534f",x.value="#d9534f",d.value="验证失败",setTimeout(()=>{P()},700))})},400)}r.value<z.value&&(r.value=T(k(S,a)))},k=function(a,t){const p=t.offsetX,s=t.offsetY;return{x:p,y:s}},T=function(a){return y.push(Object.assign({},a)),r.value+1},P=function(){y.splice(0,y.length),b.value="#000",x.value="#ddd",C.value=!0,f.splice(0,f.length),i.splice(0,i.length),r.value=1,W(),d.value="验证失败",j.value=!0};function W(){const a={captchaType:e.value};G(a).then(t=>{t.code==1?(O.value=t.data.originalImageBase64,m.value=t.data.token,h.value=t.data.secretKey,w.value=t.data.wordList,d.value="请依次点击【"+w.value.join(",")+"】"):d.value=t.msg})}const M=function(a,t){return a.map(s=>{const B=Math.round(310*s.x/parseInt(t.imgWidth)),D=Math.round(155*s.y/parseInt(t.imgHeight));return{x:B,y:D}})};return{secretKey:h,checkNum:z,fontPos:f,checkPosArr:i,num:r,pointBackImgBase:O,pointTextList:w,backToken:m,setSize:u,tempPoints:y,text:d,barAreaColor:b,barAreaBorderColor:x,showRefresh:j,bindingClick:C,init:J,canvas:S,canvasClick:q,getMousePos:k,createPoint:T,refresh:P,getPictrue:W,pointTransfrom:M}}},ne={style:{position:"relative"}},oe={class:"verify-img-out"},re=l("i",{class:"iconfont icon-refresh"},null,-1),se=[re],ce=["src"],le={class:"verify-msg"};function he(N,g,_,e,L,R){return H(),I("div",ne,[l("div",oe,[l("div",{class:"verify-img-panel",style:A({width:e.setSize.imgWidth,height:e.setSize.imgHeight,"background-size":e.setSize.imgWidth+" "+e.setSize.imgHeight,"margin-bottom":_.vSpace+"px"})},[U(l("div",{class:"verify-refresh",style:{"z-index":"3"},onClick:g[0]||(g[0]=(...c)=>e.refresh&&e.refresh(...c))},se,512),[[Z,e.showRefresh]]),l("img",{src:"data:image/png;base64,"+e.pointBackImgBase,ref:"canvas",alt:"",style:{width:"100%",height:"100%",display:"block"},onClick:g[1]||(g[1]=c=>e.bindingClick?e.canvasClick(c):void 0)},null,8,ce),(H(!0),I($,null,ee(e.tempPoints,(c,n)=>(H(),I("div",{key:n,class:"point-area",style:A({"background-color":"#1abd6c",color:"#fff","z-index":9999,width:"20px",height:"20px","text-align":"center","line-height":"20px","border-radius":"50%",position:"absolute",top:parseInt(c.y-10)+"px",left:parseInt(c.x-10)+"px"})},E(n+1),5))),128))],4)]),l("div",{class:"verify-bar-area",style:A({width:e.setSize.imgWidth,color:this.barAreaColor,"border-color":this.barAreaBorderColor,"line-height":this.barSize.height})},[l("span",le,E(e.text),1)],4)])}const _e=ie(ae,[["render",he]]);export{_e as default};

View File

@ -1 +0,0 @@
import{r as K,a as V,b as F,c as G}from"./index-b679d659.js";import{toRefs as X,getCurrentInstance as Y,ref as o,reactive as v,onMounted as Q,openBlock as H,createElementBlock as I,createElementVNode as l,normalizeStyle as A,withDirectives as U,vShow as Z,Fragment as $,renderList as ee,toDisplayString as E,nextTick as te}from"vue";import{_ as ie}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";import"vue-router";import"/admin/assets/shared/admin-lang.js";const ae={name:"VerifyPoints",props:{mode:{type:String,default:"fixed"},captchaType:{type:String},vSpace:{type:Number,default:5},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},barSize:{type:Object,default(){return{width:"310px",height:"40px"}}}},setup(N,g){const{mode:_,captchaType:e,vSpace:L,imgSize:R,barSize:c}=X(N),{proxy:n}=Y(),h=o(""),z=o(3),f=v([]),i=v([]),r=o(1),O=o(""),w=v([]),m=o(""),u=v({imgHeight:0,imgWidth:0,barHeight:0,barWidth:0}),y=v([]),d=o(""),b=o(void 0),x=o(void 0),j=o(!0),C=o(!0),J=()=>{f.splice(0,f.length),i.splice(0,i.length),r.value=1,W(),te(()=>{const{imgHeight:a,imgWidth:t,barHeight:p,barWidth:s}=K(n);u.imgHeight=a,u.imgWidth=t,u.barHeight=p,u.barWidth=s,n.$parent.$emit("ready",n)})};Q(()=>{J(),n.$el.onselectstart=function(){return!1}});const S=o(null),q=a=>{if(i.push(k(S,a)),r.value==z.value){r.value=T(k(S,a));const t=M(i,u);i.length=0,i.push(...t),setTimeout(()=>{const p=h.value?V(m.value+"---"+JSON.stringify(i),h.value):m.value+"---"+JSON.stringify(i),s={captchaType:e.value,captcha_code:h.value?V(JSON.stringify(i),h.value):JSON.stringify(i),captcha_key:m.value};F(s).then(B=>{B.code==1?(b.value="#4cae4c",x.value="#5cb85c",d.value="验证成功",C.value=!1,_.value=="pop"&&setTimeout(()=>{n.$parent.clickShow=!1,P()},1500),n.$parent.$emit("success",{captchaVerification:p})):(n.$parent.$emit("error",n),b.value="#d9534f",x.value="#d9534f",d.value="验证失败",setTimeout(()=>{P()},700))})},400)}r.value<z.value&&(r.value=T(k(S,a)))},k=function(a,t){const p=t.offsetX,s=t.offsetY;return{x:p,y:s}},T=function(a){return y.push(Object.assign({},a)),r.value+1},P=function(){y.splice(0,y.length),b.value="#000",x.value="#ddd",C.value=!0,f.splice(0,f.length),i.splice(0,i.length),r.value=1,W(),d.value="验证失败",j.value=!0};function W(){const a={captchaType:e.value};G(a).then(t=>{t.code==1?(O.value=t.data.originalImageBase64,m.value=t.data.token,h.value=t.data.secretKey,w.value=t.data.wordList,d.value="请依次点击【"+w.value.join(",")+"】"):d.value=t.msg})}const M=function(a,t){return a.map(s=>{const B=Math.round(310*s.x/parseInt(t.imgWidth)),D=Math.round(155*s.y/parseInt(t.imgHeight));return{x:B,y:D}})};return{secretKey:h,checkNum:z,fontPos:f,checkPosArr:i,num:r,pointBackImgBase:O,pointTextList:w,backToken:m,setSize:u,tempPoints:y,text:d,barAreaColor:b,barAreaBorderColor:x,showRefresh:j,bindingClick:C,init:J,canvas:S,canvasClick:q,getMousePos:k,createPoint:T,refresh:P,getPictrue:W,pointTransfrom:M}}},ne={style:{position:"relative"}},oe={class:"verify-img-out"},re=l("i",{class:"iconfont icon-refresh"},null,-1),se=[re],ce=["src"],le={class:"verify-msg"};function he(N,g,_,e,L,R){return H(),I("div",ne,[l("div",oe,[l("div",{class:"verify-img-panel",style:A({width:e.setSize.imgWidth,height:e.setSize.imgHeight,"background-size":e.setSize.imgWidth+" "+e.setSize.imgHeight,"margin-bottom":_.vSpace+"px"})},[U(l("div",{class:"verify-refresh",style:{"z-index":"3"},onClick:g[0]||(g[0]=(...c)=>e.refresh&&e.refresh(...c))},se,512),[[Z,e.showRefresh]]),l("img",{src:"data:image/png;base64,"+e.pointBackImgBase,ref:"canvas",alt:"",style:{width:"100%",height:"100%",display:"block"},onClick:g[1]||(g[1]=c=>e.bindingClick?e.canvasClick(c):void 0)},null,8,ce),(H(!0),I($,null,ee(e.tempPoints,(c,n)=>(H(),I("div",{key:n,class:"point-area",style:A({"background-color":"#1abd6c",color:"#fff","z-index":9999,width:"20px",height:"20px","text-align":"center","line-height":"20px","border-radius":"50%",position:"absolute",top:parseInt(c.y-10)+"px",left:parseInt(c.x-10)+"px"})},E(n+1),5))),128))],4)]),l("div",{class:"verify-bar-area",style:A({width:e.setSize.imgWidth,color:this.barAreaColor,"border-color":this.barAreaBorderColor,"line-height":this.barSize.height})},[l("span",le,E(e.text),1)],4)])}const _e=ie(ae,[["render",he]]);export{_e as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{ElTabPane as V,ElTabs as N,ElButton as S,ElStep as B,ElSteps as T,ElCol as j,ElImage as R,ElRow as q,ElCard as I}from"element-plus/es";import{defineComponent as $,ref as x,onMounted as D,openBlock as F,createElementBlock as M,createVNode as n,withCtx as s,createElementVNode as t,toDisplayString as l,unref as e,createTextVNode as f}from"vue";import{t as o}from"/admin/assets/shared/admin-lang.js";import{i as P}from"./index-e730ce9b.js";import{g as Q}from"./aliapp-ef19051f.js";import{useRoute as U,useRouter as z}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const G={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},K={class:"p-[20px]"},L={class:"panel-title !text-sm"},O={class:"text-[14px] font-[700]"},W={class:"text-[#999]"},X={class:"mt-[20px] mb-[40px] h-[32px]"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},tt={class:"mt-[20px] mb-[40px] h-[32px]"},et={class:"text-[14px] font-[700]"},st={class:"text-[#999]"},ot=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),nt={class:"text-[14px] font-[700]"},lt={class:"text-[#999]"},at={class:"flex justify-center"},ct={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pt={class:"mt-[22px] text-center"},it={class:"text-[12px]"},Ct=$({__name:"access",setup(_t){const h=U(),d=z(),v=h.meta.title,_=x("/channel/aliapp"),p=x("");D(async()=>{const c=await Q();p.value=c.data.qr_code});const w=c=>{window.open(c,"_blank")},b=c=>{d.push({path:_.value})};return(c,a)=>{const g=V,C=N,m=S,i=B,E=T,u=j,y=R,k=q,A=I;return F(),M("div",G,[n(A,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",H,[t("span",J,l(e(v)),1)]),n(C,{modelValue:_.value,"onUpdate:modelValue":a[0]||(a[0]=r=>_.value=r),class:"my-[20px]",onTabChange:b},{default:s(()=>[n(g,{label:e(o)("weappAccessFlow"),name:"/channel/aliapp"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",K,[t("h3",L,l(e(o)("weappInlet")),1),n(k,null,{default:s(()=>[n(u,{span:20},{default:s(()=>[n(E,{active:4,direction:"vertical"},{default:s(()=>[n(i,null,{title:s(()=>[t("p",O,l(e(o)("weappAttestation")),1)]),description:s(()=>[t("span",W,l(e(o)("weappAttest")),1),t("div",X,[n(m,{type:"primary",onClick:a[1]||(a[1]=r=>w("https://open.alipay.com/develop/manage"))},{default:s(()=>[f(l(e(o)("clickAccess")),1)]),_:1})])]),_:1}),n(i,null,{title:s(()=>[t("p",Y,l(e(o)("weappSetting")),1)]),description:s(()=>[t("span",Z,l(e(o)("emplace")),1),t("div",tt,[n(m,{type:"primary",plain:"",onClick:a[2]||(a[2]=r=>e(d).push("/channel/aliapp/config"))},{default:s(()=>[f(l(e(o)("weappSettingBtn")),1)]),_:1})])]),_:1}),n(i,null,{title:s(()=>[t("p",et,l(e(o)("uploadVersion")),1)]),description:s(()=>[t("span",st,l(e(o)("releaseCourse")),1),ot]),_:1}),n(i,null,{title:s(()=>[t("p",nt,l(e(o)("completeAccess")),1)]),description:s(()=>[t("span",lt,l(e(o)("releaseCourse")),1)]),_:1})]),_:1})]),_:1}),n(u,{span:4},{default:s(()=>[t("div",at,[n(y,{class:"w-[180px] h-[180px]",src:p.value?e(P)(p.value):""},{error:s(()=>[t("div",ct,[t("span",null,l(p.value?e(o)("fileErr"):e(o)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pt,[t("p",it,l(e(o)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ct as default};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{ElTabPane as V,ElTabs as N,ElButton as S,ElStep as B,ElSteps as T,ElCol as j,ElImage as R,ElRow as q,ElCard as I}from"element-plus/es";import{defineComponent as $,ref as x,onMounted as D,openBlock as F,createElementBlock as M,createVNode as n,withCtx as s,createElementVNode as t,toDisplayString as l,unref as e,createTextVNode as f}from"vue";import{t as o}from"/admin/assets/shared/admin-lang.js";import{i as P}from"./index-597ddd74.js";import{g as Q}from"./aliapp-186dd377.js";import{useRoute as U,useRouter as z}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const G={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},K={class:"p-[20px]"},L={class:"panel-title !text-sm"},O={class:"text-[14px] font-[700]"},W={class:"text-[#999]"},X={class:"mt-[20px] mb-[40px] h-[32px]"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},tt={class:"mt-[20px] mb-[40px] h-[32px]"},et={class:"text-[14px] font-[700]"},st={class:"text-[#999]"},ot=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),nt={class:"text-[14px] font-[700]"},lt={class:"text-[#999]"},at={class:"flex justify-center"},ct={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pt={class:"mt-[22px] text-center"},it={class:"text-[12px]"},Ct=$({__name:"access",setup(_t){const h=U(),d=z(),v=h.meta.title,_=x("/channel/aliapp"),p=x("");D(async()=>{const c=await Q();p.value=c.data.qr_code});const w=c=>{window.open(c,"_blank")},b=c=>{d.push({path:_.value})};return(c,a)=>{const g=V,C=N,m=S,i=B,E=T,u=j,y=R,k=q,A=I;return F(),M("div",G,[n(A,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",H,[t("span",J,l(e(v)),1)]),n(C,{modelValue:_.value,"onUpdate:modelValue":a[0]||(a[0]=r=>_.value=r),class:"my-[20px]",onTabChange:b},{default:s(()=>[n(g,{label:e(o)("weappAccessFlow"),name:"/channel/aliapp"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",K,[t("h3",L,l(e(o)("weappInlet")),1),n(k,null,{default:s(()=>[n(u,{span:20},{default:s(()=>[n(E,{active:4,direction:"vertical"},{default:s(()=>[n(i,null,{title:s(()=>[t("p",O,l(e(o)("weappAttestation")),1)]),description:s(()=>[t("span",W,l(e(o)("weappAttest")),1),t("div",X,[n(m,{type:"primary",onClick:a[1]||(a[1]=r=>w("https://open.alipay.com/develop/manage"))},{default:s(()=>[f(l(e(o)("clickAccess")),1)]),_:1})])]),_:1}),n(i,null,{title:s(()=>[t("p",Y,l(e(o)("weappSetting")),1)]),description:s(()=>[t("span",Z,l(e(o)("emplace")),1),t("div",tt,[n(m,{type:"primary",plain:"",onClick:a[2]||(a[2]=r=>e(d).push("/channel/aliapp/config"))},{default:s(()=>[f(l(e(o)("weappSettingBtn")),1)]),_:1})])]),_:1}),n(i,null,{title:s(()=>[t("p",et,l(e(o)("uploadVersion")),1)]),description:s(()=>[t("span",st,l(e(o)("releaseCourse")),1),ot]),_:1}),n(i,null,{title:s(()=>[t("p",nt,l(e(o)("completeAccess")),1)]),description:s(()=>[t("span",lt,l(e(o)("releaseCourse")),1)]),_:1})]),_:1})]),_:1}),n(u,{span:4},{default:s(()=>[t("div",at,[n(y,{class:"w-[180px] h-[180px]",src:p.value?e(P)(p.value):""},{error:s(()=>[t("div",ct,[t("span",null,l(p.value?e(o)("fileErr"):e(o)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pt,[t("p",it,l(e(o)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ct as default};

View File

@ -0,0 +1 @@
import{ElTabPane as T,ElTabs as B,ElButton as M,ElStep as R,ElSteps as W,ElCol as $,ElRow as q,ElCard as A}from"element-plus/es";import{defineComponent as I,ref as c,onMounted as L,onUnmounted as P,openBlock as U,createElementBlock as j,createVNode as e,withCtx as t,createElementVNode as o,toDisplayString as a,unref as n,createTextVNode as u}from"vue";import{t as s}from"/admin/assets/shared/admin-lang.js";import{g as D}from"./wechat-b6132bce.js";import{P as F}from"./index-597ddd74.js";import{useRoute as G,useRouter as z}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const H={class:"main-container"},J={class:"flex justify-between items-center"},K={class:"text-page-title"},O={class:"p-[20px]"},Q={class:"panel-title !text-sm"},X={class:"text-[14px] font-[700]"},Y={class:"text-[#999]"},Z={class:"mt-[20px] mb-[40px] h-[32px]"},tt={class:"text-[14px] font-[700]"},et={class:"mt-[20px] mb-[40px] h-[32px]"},nt={class:"text-[14px] font-[700]"},ot={class:"mt-[20px] mb-[40px] h-[32px]"},vt=I({__name:"access",setup(st){const h=G(),r=z(),x=h.meta.title,_=c("/channel/app"),b=c(""),g=c({}),y=c({}),f=async()=>{await D().then(({data:l})=>{g.value=l,b.value=l.qr_code})};L(async()=>{await f(),await F().then(({data:l})=>{y.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&f()})}),P(()=>{document.removeEventListener("visibilitychange",()=>{})});const C=l=>{window.open(l,"_blank")},w=l=>{r.push({path:_.value})};return(l,i)=>{const v=T,E=B,m=M,d=R,k=W,V=$,S=q,N=A;return U(),j("div",H,[e(N,{class:"card !border-none",shadow:"never"},{default:t(()=>[o("div",J,[o("span",K,a(n(x)),1)]),e(E,{modelValue:_.value,"onUpdate:modelValue":i[0]||(i[0]=p=>_.value=p),class:"my-[20px]",onTabChange:w},{default:t(()=>[e(v,{label:n(s)("accessFlow"),name:"/channel/app"},null,8,["label"]),e(v,{label:n(s)("versionManage"),name:"/channel/app/version"},null,8,["label"])]),_:1},8,["modelValue"]),o("div",O,[o("h3",Q,a(n(s)("appInlet")),1),e(S,null,{default:t(()=>[e(V,{span:20},{default:t(()=>[e(k,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:t(()=>[e(d,null,{title:t(()=>[o("p",X,a(n(s)("uniappApp")),1)]),description:t(()=>[o("span",Y,a(n(s)("appAttestation1")),1),o("div",Z,[e(m,{type:"primary",onClick:i[1]||(i[1]=p=>C("https://dcloud.io/"))},{default:t(()=>[u(a(n(s)("toCreate")),1)]),_:1})])]),_:1}),e(d,null,{title:t(()=>[o("p",tt,a(n(s)("appSetting")),1)]),description:t(()=>[o("div",et,[e(m,{type:"primary",onClick:i[2]||(i[2]=p=>n(r).push("/channel/app/config"))},{default:t(()=>[u(a(n(s)("settingInfo")),1)]),_:1})])]),_:1}),e(d,null,{title:t(()=>[o("p",nt,a(n(s)("versionManage")),1)]),description:t(()=>[o("div",ot,[e(m,{type:"primary",plain:"",onClick:i[3]||(i[3]=p=>n(r).push("/channel/app/version"))},{default:t(()=>[u(a(n(s)("releaseVersion")),1)]),_:1})])]),_:1})]),_:1})]),_:1})]),_:1})])]),_:1})])}}});export{vt as default};

View File

@ -0,0 +1 @@
import{ElTabPane as q,ElTabs as $,ElButton as j,ElStep as R,ElSteps as U,ElCol as z,ElImage as F,ElRow as I,ElCard as L}from"element-plus/es";import{defineComponent as M,ref as u,onMounted as P,onUnmounted as D,openBlock as w,createElementBlock as y,createVNode as n,withCtx as o,createElementVNode as s,toDisplayString as a,unref as e,createTextVNode as r,Fragment as G,createBlock as Q}from"vue";import{t}from"/admin/assets/shared/admin-lang.js";import{P as H,i as J}from"./index-597ddd74.js";import{g as K}from"./wechat-b6132bce.js";import{a as O}from"./wxoplatform-43216706.js";import{useRoute as X,useRouter as Y}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const Z={class:"main-container"},ee={class:"flex justify-between items-center"},te={class:"text-page-title"},ne={class:"p-[20px]"},oe={class:"panel-title !text-sm"},se={class:"text-[14px] font-[700]"},ae={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},ce={class:"text-[14px] font-[700]"},ie={class:"text-[#999]"},pe={class:"mt-[20px] mb-[40px] h-[32px]"},re={class:"text-[14px] font-[700]"},_e={class:"text-[#999]"},me={class:"mt-[20px] mb-[40px] h-[32px]"},de={class:"flex justify-center"},ue={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},he={class:"mt-[22px] text-center"},fe={class:"text-[12px]"},Ne=M({__name:"access",setup(ve){const C=X(),_=Y(),k=C.meta.title,h=u("/channel/wechat"),m=u(""),f=u({}),v=u({}),g=async()=>{await K().then(({data:l})=>{f.value=l,m.value=l.qr_code})};P(async()=>{await g(),await H().then(({data:l})=>{v.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&g()})}),D(()=>{document.removeEventListener("visibilitychange",()=>{})});const E=l=>{window.open(l,"_blank")},A=l=>{_.push({path:h.value})},S=()=>{O().then(({data:l})=>{window.open(l)})};return(l,c)=>{const d=q,V=$,i=j,x=R,B=U,b=z,N=F,T=I,W=L;return w(),y("div",Z,[n(W,{class:"card !border-none",shadow:"never"},{default:o(()=>[s("div",ee,[s("span",te,a(e(k)),1)]),n(V,{modelValue:h.value,"onUpdate:modelValue":c[0]||(c[0]=p=>h.value=p),class:"my-[20px]",onTabChange:A},{default:o(()=>[n(d,{label:e(t)("wechatAccessFlow"),name:"/channel/wechat"},null,8,["label"]),n(d,{label:e(t)("customMenu"),name:"/channel/wechat/menu"},null,8,["label"]),n(d,{label:e(t)("wechatTemplate"),name:"/channel/wechat/message"},null,8,["label"]),n(d,{label:e(t)("reply"),name:"/channel/wechat/reply"},null,8,["label"])]),_:1},8,["modelValue"]),s("div",ne,[s("h3",oe,a(e(t)("wechatInlet")),1),n(T,null,{default:o(()=>[n(b,{span:20},{default:o(()=>[n(B,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:o(()=>[n(x,null,{title:o(()=>[s("p",se,a(e(t)("wechatAttestation")),1)]),description:o(()=>[s("span",ae,a(e(t)("wechatAttestation1")),1),s("div",le,[n(i,{type:"primary",onClick:c[1]||(c[1]=p=>E("https://mp.weixin.qq.com/"))},{default:o(()=>[r(a(e(t)("clickAccess")),1)]),_:1})])]),_:1}),n(x,null,{title:o(()=>[s("p",ce,a(e(t)("wechatSetting")),1)]),description:o(()=>[s("span",ie,a(e(t)("wechatSetting1")),1),s("div",pe,[v.value.app_id&&v.value.app_secret?(w(),y(G,{key:0},[n(i,{type:"primary",onClick:c[2]||(c[2]=p=>e(_).push("/channel/wechat/config"))},{default:o(()=>[r(a(f.value.app_id?e(t)("seeConfig"):e(t)("clickSetting")),1)]),_:1}),n(i,{type:"primary",plain:"",onClick:S},{default:o(()=>[r(a(f.value.is_authorization?e(t)("refreshAuth"):e(t)("authWechat")),1)]),_:1})],64)):(w(),Q(i,{key:1,type:"primary",onClick:c[3]||(c[3]=p=>e(_).push("/channel/wechat/config"))},{default:o(()=>[r(a(e(t)("clickSetting")),1)]),_:1}))])]),_:1}),n(x,null,{title:o(()=>[s("p",re,a(e(t)("wechatAccess")),1)]),description:o(()=>[s("span",_e,a(e(t)("wechatAccess")),1),s("div",me,[n(i,{type:"primary",plain:"",onClick:c[4]||(c[4]=p=>e(_).push("/channel/wechat/course"))},{default:o(()=>[r(a(e(t)("releaseCourse")),1)]),_:1})])]),_:1})]),_:1})]),_:1}),n(b,{span:4},{default:o(()=>[s("div",de,[n(N,{class:"w-[180px] h-[180px]",src:m.value?e(J)(m.value):""},{error:o(()=>[s("div",ue,[s("span",null,a(m.value?e(t)("fileErr"):e(t)("emptyQrCode")),1)])]),_:1},8,["src"])]),s("div",he,[s("p",fe,a(e(t)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ne as default};

View File

@ -1 +0,0 @@
import{ElTabPane as T,ElTabs as B,ElButton as M,ElStep as R,ElSteps as W,ElCol as $,ElRow as q,ElCard as A}from"element-plus/es";import{defineComponent as I,ref as c,onMounted as L,onUnmounted as P,openBlock as U,createElementBlock as j,createVNode as e,withCtx as t,createElementVNode as o,toDisplayString as a,unref as n,createTextVNode as u}from"vue";import{t as s}from"/admin/assets/shared/admin-lang.js";import{g as D}from"./wechat-50e0676b.js";import{P as F}from"./index-e730ce9b.js";import{useRoute as G,useRouter as z}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const H={class:"main-container"},J={class:"flex justify-between items-center"},K={class:"text-page-title"},O={class:"p-[20px]"},Q={class:"panel-title !text-sm"},X={class:"text-[14px] font-[700]"},Y={class:"text-[#999]"},Z={class:"mt-[20px] mb-[40px] h-[32px]"},tt={class:"text-[14px] font-[700]"},et={class:"mt-[20px] mb-[40px] h-[32px]"},nt={class:"text-[14px] font-[700]"},ot={class:"mt-[20px] mb-[40px] h-[32px]"},vt=I({__name:"access",setup(st){const h=G(),r=z(),x=h.meta.title,_=c("/channel/app"),b=c(""),g=c({}),y=c({}),f=async()=>{await D().then(({data:l})=>{g.value=l,b.value=l.qr_code})};L(async()=>{await f(),await F().then(({data:l})=>{y.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&f()})}),P(()=>{document.removeEventListener("visibilitychange",()=>{})});const C=l=>{window.open(l,"_blank")},w=l=>{r.push({path:_.value})};return(l,i)=>{const v=T,E=B,m=M,d=R,k=W,V=$,S=q,N=A;return U(),j("div",H,[e(N,{class:"card !border-none",shadow:"never"},{default:t(()=>[o("div",J,[o("span",K,a(n(x)),1)]),e(E,{modelValue:_.value,"onUpdate:modelValue":i[0]||(i[0]=p=>_.value=p),class:"my-[20px]",onTabChange:w},{default:t(()=>[e(v,{label:n(s)("accessFlow"),name:"/channel/app"},null,8,["label"]),e(v,{label:n(s)("versionManage"),name:"/channel/app/version"},null,8,["label"])]),_:1},8,["modelValue"]),o("div",O,[o("h3",Q,a(n(s)("appInlet")),1),e(S,null,{default:t(()=>[e(V,{span:20},{default:t(()=>[e(k,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:t(()=>[e(d,null,{title:t(()=>[o("p",X,a(n(s)("uniappApp")),1)]),description:t(()=>[o("span",Y,a(n(s)("appAttestation1")),1),o("div",Z,[e(m,{type:"primary",onClick:i[1]||(i[1]=p=>C("https://dcloud.io/"))},{default:t(()=>[u(a(n(s)("toCreate")),1)]),_:1})])]),_:1}),e(d,null,{title:t(()=>[o("p",tt,a(n(s)("appSetting")),1)]),description:t(()=>[o("div",et,[e(m,{type:"primary",onClick:i[2]||(i[2]=p=>n(r).push("/channel/app/config"))},{default:t(()=>[u(a(n(s)("settingInfo")),1)]),_:1})])]),_:1}),e(d,null,{title:t(()=>[o("p",nt,a(n(s)("versionManage")),1)]),description:t(()=>[o("div",ot,[e(m,{type:"primary",plain:"",onClick:i[3]||(i[3]=p=>n(r).push("/channel/app/version"))},{default:t(()=>[u(a(n(s)("releaseVersion")),1)]),_:1})])]),_:1})]),_:1})]),_:1})]),_:1})])]),_:1})])}}});export{vt as default};

View File

@ -1 +0,0 @@
import{ElTabPane as q,ElTabs as $,ElButton as j,ElStep as R,ElSteps as U,ElCol as z,ElImage as F,ElRow as I,ElCard as L}from"element-plus/es";import{defineComponent as M,ref as u,onMounted as P,onUnmounted as D,openBlock as w,createElementBlock as y,createVNode as n,withCtx as o,createElementVNode as s,toDisplayString as a,unref as e,createTextVNode as r,Fragment as G,createBlock as Q}from"vue";import{t}from"/admin/assets/shared/admin-lang.js";import{P as H,i as J}from"./index-e730ce9b.js";import{g as K}from"./wechat-50e0676b.js";import{a as O}from"./wxoplatform-a0232557.js";import{useRoute as X,useRouter as Y}from"vue-router";import"pinia";import"@element-plus/icons-vue";import"axios";import"/admin/assets/shared/admin-lang.js";const Z={class:"main-container"},ee={class:"flex justify-between items-center"},te={class:"text-page-title"},ne={class:"p-[20px]"},oe={class:"panel-title !text-sm"},se={class:"text-[14px] font-[700]"},ae={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},ce={class:"text-[14px] font-[700]"},ie={class:"text-[#999]"},pe={class:"mt-[20px] mb-[40px] h-[32px]"},re={class:"text-[14px] font-[700]"},_e={class:"text-[#999]"},me={class:"mt-[20px] mb-[40px] h-[32px]"},de={class:"flex justify-center"},ue={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},he={class:"mt-[22px] text-center"},fe={class:"text-[12px]"},Ne=M({__name:"access",setup(ve){const C=X(),_=Y(),k=C.meta.title,h=u("/channel/wechat"),m=u(""),f=u({}),v=u({}),g=async()=>{await K().then(({data:l})=>{f.value=l,m.value=l.qr_code})};P(async()=>{await g(),await H().then(({data:l})=>{v.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&g()})}),D(()=>{document.removeEventListener("visibilitychange",()=>{})});const E=l=>{window.open(l,"_blank")},A=l=>{_.push({path:h.value})},S=()=>{O().then(({data:l})=>{window.open(l)})};return(l,c)=>{const d=q,V=$,i=j,x=R,B=U,b=z,N=F,T=I,W=L;return w(),y("div",Z,[n(W,{class:"card !border-none",shadow:"never"},{default:o(()=>[s("div",ee,[s("span",te,a(e(k)),1)]),n(V,{modelValue:h.value,"onUpdate:modelValue":c[0]||(c[0]=p=>h.value=p),class:"my-[20px]",onTabChange:A},{default:o(()=>[n(d,{label:e(t)("wechatAccessFlow"),name:"/channel/wechat"},null,8,["label"]),n(d,{label:e(t)("customMenu"),name:"/channel/wechat/menu"},null,8,["label"]),n(d,{label:e(t)("wechatTemplate"),name:"/channel/wechat/message"},null,8,["label"]),n(d,{label:e(t)("reply"),name:"/channel/wechat/reply"},null,8,["label"])]),_:1},8,["modelValue"]),s("div",ne,[s("h3",oe,a(e(t)("wechatInlet")),1),n(T,null,{default:o(()=>[n(b,{span:20},{default:o(()=>[n(B,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:o(()=>[n(x,null,{title:o(()=>[s("p",se,a(e(t)("wechatAttestation")),1)]),description:o(()=>[s("span",ae,a(e(t)("wechatAttestation1")),1),s("div",le,[n(i,{type:"primary",onClick:c[1]||(c[1]=p=>E("https://mp.weixin.qq.com/"))},{default:o(()=>[r(a(e(t)("clickAccess")),1)]),_:1})])]),_:1}),n(x,null,{title:o(()=>[s("p",ce,a(e(t)("wechatSetting")),1)]),description:o(()=>[s("span",ie,a(e(t)("wechatSetting1")),1),s("div",pe,[v.value.app_id&&v.value.app_secret?(w(),y(G,{key:0},[n(i,{type:"primary",onClick:c[2]||(c[2]=p=>e(_).push("/channel/wechat/config"))},{default:o(()=>[r(a(f.value.app_id?e(t)("seeConfig"):e(t)("clickSetting")),1)]),_:1}),n(i,{type:"primary",plain:"",onClick:S},{default:o(()=>[r(a(f.value.is_authorization?e(t)("refreshAuth"):e(t)("authWechat")),1)]),_:1})],64)):(w(),Q(i,{key:1,type:"primary",onClick:c[3]||(c[3]=p=>e(_).push("/channel/wechat/config"))},{default:o(()=>[r(a(e(t)("clickSetting")),1)]),_:1}))])]),_:1}),n(x,null,{title:o(()=>[s("p",re,a(e(t)("wechatAccess")),1)]),description:o(()=>[s("span",_e,a(e(t)("wechatAccess")),1),s("div",me,[n(i,{type:"primary",plain:"",onClick:c[4]||(c[4]=p=>e(_).push("/channel/wechat/course"))},{default:o(()=>[r(a(e(t)("releaseCourse")),1)]),_:1})])]),_:1})]),_:1})]),_:1}),n(b,{span:4},{default:o(()=>[s("div",de,[n(N,{class:"w-[180px] h-[180px]",src:m.value?e(J)(m.value):""},{error:o(()=>[s("div",ue,[s("span",null,a(m.value?e(t)("fileErr"):e(t)("emptyQrCode")),1)])]),_:1},8,["src"])]),s("div",he,[s("p",fe,a(e(t)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ne as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{O as n}from"./index-e730ce9b.js";function a(t){return n.get("pintuan/pages",{params:t})}function s(){return n.get("pintuan/init")}function i(t){return n.get("diy/list",{params:t})}function o(t){return n.post("pintuan/batch_set",t,{showSuccessMessage:!0})}function r(t){return n.post("pintuan/add",t,{showSuccessMessage:!0})}function c(t){return n.put(`pintuan/edit/${t.id}`,t,{showSuccessMessage:!0})}function g(t){return n.get(`pintuan/detail/${t}`)}function p(){return n.get("pintuan/share")}function d(t){return n.put(`pintuan/close/${t}`,{showSuccessMessage:!0})}function f(t){return n.delete(`pintuan/delete/${t}`,{showSuccessMessage:!0})}function l(){return n.get("pintuan/goods_of_select_source")}function h(t,e){return n.get(`pintuan/goods_of_select/${t}`,{params:e})}function P(t){return n.get("pintuan/stat/total",{params:t})}function S(t){return n.get("pintuan/stat/day",{params:t})}function w(t){return n.get("pintuan/stat/hour",{params:t})}function M(t){return n.get("pintuan/stat/channel",{params:t})}function _(t){return n.get("pintuan/diy/goods",{params:t})}function m(t){return n.get("pintuan/receive_list",{params:t})}function y(t){return n.post("pintuan/code/import",t,{showSuccessMessage:!0})}function C(t){return n.post("pintuan/code/delete",t,{showSuccessMessage:!0})}function $(t){return n.post("pintuan/code/clear",t,{showSuccessMessage:!0})}export{g as a,i as b,m as c,$ as d,y as e,o as f,_ as g,l as h,h as i,p as j,s as k,c as l,r as m,a as n,f as o,C as p,d as q,S as r,M as s,P as t,w as u};

View File

@ -1 +0,0 @@
import{O as t}from"./index-e730ce9b.js";function r(e){return t.get("relay/pages",{params:e})}function o(){return t.get("relay/init")}function n(e){return t.get("diy/list",{params:e})}function u(e){return t.post("relay/batch_set",e,{showSuccessMessage:!0})}function l(e){return t.post("relay/add",e,{showSuccessMessage:!0})}function c(e){return t.put(`relay/edit/${e.id}`,e,{showSuccessMessage:!0})}function y(e){return t.get(`relay/detail/${e}`)}function i(){return t.get("relay/share")}function g(e){return t.put(`relay/close/${e}`,{showSuccessMessage:!0})}function d(e){return t.delete(`relay/delete/${e}`,{showSuccessMessage:!0})}function f(){return t.get("relay/goods_of_select_source")}function R(e,a){return t.get(`relay/goods_of_select/${e}`,{params:a})}function h(e){return t.get("relay/stat/total",{params:e})}function S(e){return t.get("relay/stat/day",{params:e})}function p(e){return t.get("relay/stat/hour",{params:e})}function w(e){return t.get("relay/stat/channel",{params:e})}function M(e){return t.get("relay/diy/goods",{params:e})}function _(e){return t.get("relay/receive_list",{params:e})}function m(e){return t.post("relay/code/import",e,{showSuccessMessage:!0})}function C(e){return t.post("relay/code/delete",e,{showSuccessMessage:!0})}function $(e){return t.post("relay/code/clear",e,{showSuccessMessage:!0})}export{y as a,_ as b,$ as c,m as d,u as e,n as f,M as g,f as h,R as i,i as j,o as k,c as l,l as m,r as n,d as o,g as p,S as q,C as r,w as s,h as t,p as u};

View File

@ -1 +0,0 @@
import{O as t}from"./index-e730ce9b.js";function s(e){return t.get("friend_help/pages",{params:e})}function i(){return t.get("friend_help/init")}function o(e){return t.get("diy/list",{params:e})}function d(e){return t.post("friend_help/batch_set",e,{showSuccessMessage:!0})}function u(e){return t.post("friend_help/add",e,{showSuccessMessage:!0})}function l(e){return t.put(`friend_help/edit/${e.id}`,e,{showSuccessMessage:!0})}function a(e){return t.get(`friend_help/detail/${e}`)}function c(){return t.get("friend_help/share")}function p(e){return t.put(`friend_help/close/${e}`,{showSuccessMessage:!0})}function f(e){return t.delete(`friend_help/delete/${e}`,{showSuccessMessage:!0})}function g(){return t.get("friend_help/goods_of_select_source")}function h(e,n){return t.get(`friend_help/goods_of_select/${e}`,{params:n})}function _(e){return t.get("friend_help/stat/total",{params:e})}function H(e){return t.get("friend_help/stat/day",{params:e})}function F(e){return t.get("friend_help/stat/hour",{params:e})}function S(e){return t.get("friend_help/stat/channel",{params:e})}function w(e){return t.get("friend_help/diy/goods",{params:e})}function M(e){return t.get("friend_help/receive_list",{params:e})}function m(e){return t.post("friend_help/code/import",e,{showSuccessMessage:!0})}function y(e){return t.post("friend_help/code/delete",e,{showSuccessMessage:!0})}function C(e){return t.post("friend_help/code/clear",e,{showSuccessMessage:!0})}export{a,o as b,M as c,C as d,m as e,y as f,w as g,d as h,g as i,h as j,c as k,i as l,l as m,u as n,s as o,f as p,p as q,H as r,S as s,_ as t,F as u};

View File

@ -1 +0,0 @@
import{O as t}from"./index-e730ce9b.js";function l(e){return t.get("seckill/lists",{params:e})}function c(e){return t.get(`seckill/info/${e}`)}function i(e){return t.post("seckill/add",e,{showSuccessMessage:!0})}function o(e){return t.post("seckill/close",e,{showSuccessMessage:!0})}function n(e){return t.put(`seckill/edit/${e.id}`,e,{showSuccessMessage:!0})}function u(e){return t.post("seckill/delete",e,{showSuccessMessage:!0})}function r(){return t.get("seckill/init")}function a(){return t.get("seckill/select")}function k(e){return t.get("seckill/stat/total",{params:e})}function g(e){return t.get("seckill/stat/day",{params:e})}function S(e){return t.get("seckill/stat/hour",{params:e})}function d(e){return t.get("seckill/stat/channel",{params:e})}function f(e){return t.get("seckill/time/select",{params:e})}function h(e){return t.get("seckill/activeGoods/select",{params:e})}function p(e){return t.get("seckill/goods/receive_list",{params:e})}function w(e){return t.post("seckill/goods/code/import",e,{showSuccessMessage:!0})}function M(e){return t.post("seckill/goods/code/delete",e,{showSuccessMessage:!0})}function m(e){return t.post("seckill/goods/code/clear",e,{showSuccessMessage:!0})}export{p as a,m as b,w as c,c as d,r as e,n as f,a as g,i as h,l as i,u as j,o as k,g as l,d as m,f as n,h as o,k as p,S as q,M as s};

View File

@ -1 +0,0 @@
import{_ as o}from"./active-detail-popup.vue_vue_type_script_setup_true_lang-1a41e7e7.js";import"vue";import"./goods_default-87959339.js";import"/admin/assets/shared/admin-lang.js";import"./active-8d5c9b70.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

View File

@ -1 +0,0 @@
import{_ as o}from"./active-detail-popup.vue_vue_type_script_setup_true_lang-1b95fd6e.js";import"vue";import"./goods_default-665e448a.js";import"/admin/assets/shared/admin-lang.js";import"./active-7944dfa8.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

View File

@ -1 +0,0 @@
import{_ as o}from"./active-detail-popup.vue_vue_type_script_setup_true_lang-b7b6d2f8.js";import"vue";import"./goods_default-247a7f2b.js";import"/admin/assets/shared/admin-lang.js";import"./active-b0665c33.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
input[data-v-88eb0e7f]::-webkit-outer-spin-button,input[data-v-88eb0e7f]::-webkit-inner-spin-button{-webkit-appearance:none!important;-moz-appearance:none!important;-o-appearance:none!important;appearance:none!important;margin:0}input[type=number][data-v-88eb0e7f]{-webkit-appearance:textfield;-moz-appearance:textfield;-o-appearance:textfield;appearance:textfield}.sku-form-item-wrap[data-v-88eb0e7f] .el-form-item__content{margin-left:0!important}.sku_list[data-v-88eb0e7f] .cell{overflow:initial!important}

View File

@ -1 +0,0 @@
input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none!important;-moz-appearance:none!important;-o-appearance:none!important;appearance:none!important;margin:0}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;-o-appearance:textfield;appearance:textfield}

View File

@ -1 +0,0 @@
.member-table[data-v-1869c7fb] .cell{padding:0 12px!important}#TxMap[data-v-1869c7fb]{border:1px solid #e4e4e4;border-radius:4px}.dialog-footer[data-v-1869c7fb]{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.input-width[data-v-1869c7fb]{width:500px}.fixed-footer-wrap .fixed-footer[data-v-1869c7fb]{z-index:1999!important}

View File

@ -1 +0,0 @@
#AddressMap[data-v-4566f2d4]{border:1px solid #e4e4e4;border-radius:4px}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{_ as o}from"./add-address.vue_vue_type_script_setup_true_lang-0243a87f.js";import"vue";import"/admin/assets/shared/admin-lang.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";import"./member-123f98d0.js";import"./cloneDeep-ba8f92cd.js";import"./isArrayLike-2d9dc100.js";export{o as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.spec-wrap[data-v-f9075805]{flex:1}.spec-wrap .spec-edit-list .spec-item[data-v-f9075805]{background:#f7f7f7;padding:20px;margin-bottom:20px;position:relative;border-radius:6px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap[data-v-f9075805]{padding:25px 30px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul[data-v-f9075805]{display:flex;flex-wrap:wrap;flex:1;align-items:baseline}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li[data-v-f9075805]{margin:0 10px 10px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .input-width[data-v-f9075805]{width:200px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .icon[data-v-f9075805]{width:32px;padding:0;display:none;position:absolute;top:-12px;right:-20px;cursor:pointer}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li:hover .icon[data-v-f9075805]{display:block}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .add-spec-value[data-v-f9075805]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .box[data-v-f9075805]{position:absolute;top:0;left:10px;width:20px;height:40px;border:1px solid #b8b9bd;border-top:none;border-right:none}.spec-wrap .spec-edit-list .spec-item .del-spec[data-v-f9075805]{border:none;position:absolute;top:10px;right:10px;display:none;cursor:pointer}.spec-wrap .spec-edit-list .spec-item:hover .del-spec[data-v-f9075805]{display:block}.el-input__suffix[data-v-f9075805]{cursor:pointer}.el-table__row[data-v-f9075805]:focus{outline:none!important}.add-spec[data-v-f9075805]{margin-bottom:16px}.batch-operation-sku[data-v-f9075805]{display:flex;margin-bottom:16px;background-color:#fff;flex-wrap:nowrap;align-items:center}.batch-operation-sku label[data-v-f9075805]{font-size:14px;margin-right:10px}.batch-operation-sku .set-spec-select[data-v-f9075805]{margin-right:10px;max-width:130px}.batch-operation-sku .set-input[data-v-f9075805]{max-width:130px;min-width:60px;margin-right:10px}.editor-width[data-v-f9075805]{width:990px}.sku-table[data-v-f9075805] :focus{outline:none}.sku-form-item-wrap[data-v-f9075805] .el-form-item__content{margin-left:0!important}.sku-table[data-v-f9075805] .el-table__cell .cell{overflow:initial!important}.fixed-footer[data-v-f9075805]{z-index:4}.edui-default .edui-editor{z-index:1!important}.el-cascader__tags.is-validate{right:30px!important}

View File

@ -1 +0,0 @@
.spec-wrap[data-v-80bd9974]{flex:1}.spec-wrap .spec-edit-list .spec-item[data-v-80bd9974]{background:#f7f7f7;padding:20px;margin-bottom:20px;position:relative;border-radius:6px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap[data-v-80bd9974]{padding:25px 30px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul[data-v-80bd9974]{display:flex;flex-wrap:wrap;flex:1;align-items:baseline}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li[data-v-80bd9974]{margin:0 10px 10px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .input-width[data-v-80bd9974]{width:200px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .icon[data-v-80bd9974]{width:32px;padding:0;display:none;position:absolute;top:-12px;right:-20px;cursor:pointer}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li:hover .icon[data-v-80bd9974]{display:block}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .add-spec-value[data-v-80bd9974]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .box[data-v-80bd9974]{position:absolute;top:0;left:10px;width:20px;height:40px;border:1px solid #b8b9bd;border-top:none;border-right:none}.spec-wrap .spec-edit-list .spec-item .del-spec[data-v-80bd9974]{border:none;position:absolute;top:10px;right:10px;display:none;cursor:pointer}.spec-wrap .spec-edit-list .spec-item:hover .del-spec[data-v-80bd9974]{display:block}.el-input__suffix[data-v-80bd9974]{cursor:pointer}.el-table__row[data-v-80bd9974]:focus{outline:none!important}.add-spec[data-v-80bd9974]{margin-bottom:16px}.batch-operation-sku[data-v-80bd9974]{display:flex;margin-bottom:16px;background-color:#fff;flex-wrap:nowrap;align-items:center}.batch-operation-sku label[data-v-80bd9974]{font-size:14px;margin-right:10px}.batch-operation-sku .set-spec-select[data-v-80bd9974]{margin-right:10px;max-width:130px}.batch-operation-sku .set-input[data-v-80bd9974]{max-width:130px;min-width:60px;margin-right:10px}.editor-width[data-v-80bd9974]{width:990px}.sku-table[data-v-80bd9974] :focus{outline:none}.sku-form-item-wrap[data-v-80bd9974] .el-form-item__content{margin-left:0!important}.sku-table[data-v-80bd9974] .el-table__cell .cell{overflow:initial!important}.fixed-footer[data-v-80bd9974]{z-index:4}.edui-default .edui-editor{z-index:1!important}.el-cascader__tags.is-validate{right:30px!important}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.spec-wrap[data-v-b423242d]{flex:1}.spec-wrap .spec-edit-list .spec-item[data-v-b423242d]{background:#f7f7f7;padding:20px;margin-bottom:20px;position:relative;border-radius:6px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap[data-v-b423242d]{padding:25px 30px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul[data-v-b423242d]{display:flex;flex-wrap:wrap;flex:1;align-items:baseline}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li[data-v-b423242d]{margin:0 10px 10px 0;position:relative}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .input-width[data-v-b423242d]{width:200px}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li .icon[data-v-b423242d]{width:32px;padding:0;display:none;position:absolute;top:-12px;right:-20px;cursor:pointer}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap ul li:hover .icon[data-v-b423242d]{display:block}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .add-spec-value[data-v-b423242d]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.spec-wrap .spec-edit-list .spec-item .spec-value-wrap .box[data-v-b423242d]{position:absolute;top:0;left:10px;width:20px;height:40px;border:1px solid #b8b9bd;border-top:none;border-right:none}.spec-wrap .spec-edit-list .spec-item .del-spec[data-v-b423242d]{border:none;position:absolute;top:10px;right:10px;display:none;cursor:pointer}.spec-wrap .spec-edit-list .spec-item:hover .del-spec[data-v-b423242d]{display:block}.el-input__suffix[data-v-b423242d]{cursor:pointer}.el-table__row[data-v-b423242d]:focus{outline:none!important}.add-spec[data-v-b423242d]{margin-bottom:16px}.batch-operation-sku[data-v-b423242d]{display:flex;margin-bottom:16px;background-color:#fff;flex-wrap:nowrap;align-items:center}.batch-operation-sku label[data-v-b423242d]{font-size:14px;margin-right:10px}.batch-operation-sku .set-spec-select[data-v-b423242d]{margin-right:10px;max-width:130px}.batch-operation-sku .set-input[data-v-b423242d]{max-width:130px;min-width:60px;margin-right:10px}.editor-width[data-v-b423242d]{width:990px}.sku-table[data-v-b423242d] :focus{outline:none}.sku-form-item-wrap[data-v-b423242d] .el-form-item__content{margin-left:0!important}.sku-table[data-v-b423242d] .el-table__cell .cell{overflow:initial!important}.fixed-footer[data-v-b423242d]{z-index:4}.edui-default .edui-editor{z-index:1!important}.el-cascader__tags.is-validate{right:30px!important}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-900c3de5.js";import"vue";import"/admin/assets/shared/admin-lang.js";import"./member-991ebe60.js";import"./index-597ddd74.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

View File

@ -1 +0,0 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-84573a46.js";import"vue";import"/admin/assets/shared/admin-lang.js";import"./member-123f98d0.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

View File

@ -1 +0,0 @@
import{ElInput as R,ElFormItem as j,ElForm as z,ElButton as A,ElDialog as L,ElLoadingDirective as O}from"element-plus/es";import{defineComponent as T,ref as m,reactive as K,computed as S,openBlock as N,createBlock as k,unref as a,withCtx as d,createElementVNode as Z,createVNode as s,createTextVNode as x,toDisplayString as C,withDirectives as G}from"vue";import{t as o}from"/admin/assets/shared/admin-lang.js";import{p as J,z as Q,A as W}from"./member-123f98d0.js";import{a9 as X}from"./index-e730ce9b.js";const Y={class:"dialog-footer"},ne=T({__name:"add-member",emits:["complete"],setup(ee,{expose:M,emit:$}){const p=m(!1),i=m(!1),f=m(!1);let b="",c="";const v=m(!0),w=m(!0),g=m(!0),_={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},t=K({..._}),y=m(),D=S(()=>({member_no:[{required:!0,message:o("memberNoPlaceholder"),trigger:"blur"},{validator:B,trigger:"blur"}],mobile:[{required:!0,message:o("mobilePlaceholder"),trigger:"blur"},{validator:E,trigger:"blur"}],password:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"},{validator:P,trigger:"blur"}]})),E=(n,e,r)=>{e&&!/^1[3-9]\d{9}$/.test(e)?r(new Error(o("mobileHint"))):r()},P=(n,e,r)=>{e!=t.password?r(o("doubleCipherHint")):r()},B=(n,e,r)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?r(new Error(o("memberNoHint"))):r()},U=async()=>{await Q().then(n=>{c=n.data}).catch(()=>{})},F=$,q=async n=>{if(i.value||!n)return;const e=W;await n.validate(async r=>{if(r){if(i.value=!0,f.value)return;f.value=!0,e(t).then(V=>{i.value=!1,f.value=!1,p.value=!1,F("complete")}).catch(()=>{i.value=!1,f.value=!1})}})};return M({showDialog:p,setFormData:async(n=null)=>{if(i.value=!0,Object.assign(t,_),b=o("addMember"),n){b=o("updateMember");const e=await(await J(n.member_id)).data;e&&Object.keys(t).forEach(r=>{e[r]!=null&&(t[r]=e[r])})}else await U(),t.member_no=c,t.init_member_no=c;i.value=!1}}),(n,e)=>{const r=R,u=j,V=z,h=A,H=L,I=O;return N(),k(H,{modelValue:p.value,"onUpdate:modelValue":e[14]||(e[14]=l=>p.value=l),title:a(b),width:"500px","destroy-on-close":!0},{footer:d(()=>[Z("span",Y,[s(h,{onClick:e[12]||(e[12]=l=>p.value=!1)},{default:d(()=>[x(C(a(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:i.value,onClick:e[13]||(e[13]=l=>q(y.value))},{default:d(()=>[x(C(a(o)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[G((N(),k(V,{model:t,"label-width":"90px",ref_key:"formRef",ref:y,rules:D.value,class:"page-form"},{default:d(()=>[s(u,{label:a(o)("memberNo"),prop:"member_no"},{default:d(()=>[s(r,{modelValue:t.member_no,"onUpdate:modelValue":e[0]||(e[0]=l=>t.member_no=l),modelModifiers:{trim:!0},clearable:"",maxlength:"20",placeholder:a(o)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:a(o)("mobile"),prop:"mobile"},{default:d(()=>[s(r,{modelValue:t.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>t.mobile=l),modelModifiers:{trim:!0},clearable:"",placeholder:a(o)("mobilePlaceholder"),maxlength:"11",onKeyup:e[2]||(e[2]=l=>a(X)(l)),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:a(o)("nickname")},{default:d(()=>[s(r,{modelValue:t.nickname,"onUpdate:modelValue":e[3]||(e[3]=l=>t.nickname=l),modelModifiers:{trim:!0},clearable:"",placeholder:a(o)("nickNamePlaceholder"),class:"input-width",maxlength:"10","show-word-limit":"",readonly:v.value,onClick:e[4]||(e[4]=l=>v.value=!1),onBlur:e[5]||(e[5]=l=>v.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:a(o)("password"),prop:"password"},{default:d(()=>[s(r,{modelValue:t.password,"onUpdate:modelValue":e[6]||(e[6]=l=>t.password=l),modelModifiers:{trim:!0},type:"password",placeholder:a(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:w.value,onClick:e[7]||(e[7]=l=>w.value=!1),onBlur:e[8]||(e[8]=l=>w.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:a(o)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(r,{modelValue:t.password_copy,"onUpdate:modelValue":e[9]||(e[9]=l=>t.password_copy=l),modelModifiers:{trim:!0},type:"password",placeholder:a(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:g.value,onClick:e[10]||(e[10]=l=>g.value=!1),onBlur:e[11]||(e[11]=l=>g.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[I,i.value]])]),_:1},8,["modelValue","title"])}}});export{ne as _};

View File

@ -0,0 +1 @@
import{ElInput as R,ElFormItem as j,ElForm as z,ElButton as A,ElDialog as L,ElLoadingDirective as O}from"element-plus/es";import{defineComponent as T,ref as m,reactive as K,computed as S,openBlock as N,createBlock as k,unref as a,withCtx as d,createElementVNode as Z,createVNode as s,createTextVNode as x,toDisplayString as C,withDirectives as G}from"vue";import{t as o}from"/admin/assets/shared/admin-lang.js";import{p as J,z as Q,A as W}from"./member-991ebe60.js";import{aa as X}from"./index-597ddd74.js";const Y={class:"dialog-footer"},ne=T({__name:"add-member",emits:["complete"],setup(ee,{expose:M,emit:$}){const p=m(!1),i=m(!1),f=m(!1);let b="",c="";const v=m(!0),w=m(!0),g=m(!0),_={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},t=K({..._}),y=m(),D=S(()=>({member_no:[{required:!0,message:o("memberNoPlaceholder"),trigger:"blur"},{validator:B,trigger:"blur"}],mobile:[{required:!0,message:o("mobilePlaceholder"),trigger:"blur"},{validator:E,trigger:"blur"}],password:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"},{validator:P,trigger:"blur"}]})),E=(n,e,r)=>{e&&!/^1[3-9]\d{9}$/.test(e)?r(new Error(o("mobileHint"))):r()},P=(n,e,r)=>{e!=t.password?r(o("doubleCipherHint")):r()},B=(n,e,r)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?r(new Error(o("memberNoHint"))):r()},U=async()=>{await Q().then(n=>{c=n.data}).catch(()=>{})},F=$,q=async n=>{if(i.value||!n)return;const e=W;await n.validate(async r=>{if(r){if(i.value=!0,f.value)return;f.value=!0,e(t).then(V=>{i.value=!1,f.value=!1,p.value=!1,F("complete")}).catch(()=>{i.value=!1,f.value=!1})}})};return M({showDialog:p,setFormData:async(n=null)=>{if(i.value=!0,Object.assign(t,_),b=o("addMember"),n){b=o("updateMember");const e=await(await J(n.member_id)).data;e&&Object.keys(t).forEach(r=>{e[r]!=null&&(t[r]=e[r])})}else await U(),t.member_no=c,t.init_member_no=c;i.value=!1}}),(n,e)=>{const r=R,u=j,V=z,h=A,H=L,I=O;return N(),k(H,{modelValue:p.value,"onUpdate:modelValue":e[14]||(e[14]=l=>p.value=l),title:a(b),width:"500px","destroy-on-close":!0},{footer:d(()=>[Z("span",Y,[s(h,{onClick:e[12]||(e[12]=l=>p.value=!1)},{default:d(()=>[x(C(a(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:i.value,onClick:e[13]||(e[13]=l=>q(y.value))},{default:d(()=>[x(C(a(o)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[G((N(),k(V,{model:t,"label-width":"90px",ref_key:"formRef",ref:y,rules:D.value,class:"page-form"},{default:d(()=>[s(u,{label:a(o)("memberNo"),prop:"member_no"},{default:d(()=>[s(r,{modelValue:t.member_no,"onUpdate:modelValue":e[0]||(e[0]=l=>t.member_no=l),modelModifiers:{trim:!0},clearable:"",maxlength:"20",placeholder:a(o)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:a(o)("mobile"),prop:"mobile"},{default:d(()=>[s(r,{modelValue:t.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>t.mobile=l),modelModifiers:{trim:!0},clearable:"",placeholder:a(o)("mobilePlaceholder"),maxlength:"11",onKeyup:e[2]||(e[2]=l=>a(X)(l)),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:a(o)("nickname")},{default:d(()=>[s(r,{modelValue:t.nickname,"onUpdate:modelValue":e[3]||(e[3]=l=>t.nickname=l),modelModifiers:{trim:!0},clearable:"",placeholder:a(o)("nickNamePlaceholder"),class:"input-width",maxlength:"10","show-word-limit":"",readonly:v.value,onClick:e[4]||(e[4]=l=>v.value=!1),onBlur:e[5]||(e[5]=l=>v.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:a(o)("password"),prop:"password"},{default:d(()=>[s(r,{modelValue:t.password,"onUpdate:modelValue":e[6]||(e[6]=l=>t.password=l),modelModifiers:{trim:!0},type:"password",placeholder:a(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:w.value,onClick:e[7]||(e[7]=l=>w.value=!1),onBlur:e[8]||(e[8]=l=>w.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:a(o)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(r,{modelValue:t.password_copy,"onUpdate:modelValue":e[9]||(e[9]=l=>t.password_copy=l),modelModifiers:{trim:!0},type:"password",placeholder:a(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:g.value,onClick:e[10]||(e[10]=l=>g.value=!1),onBlur:e[11]||(e[11]=l=>g.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[I,i.value]])]),_:1},8,["modelValue","title"])}}});export{ne as _};

View File

@ -1 +0,0 @@
import{_ as o}from"./add-reserve.vue_vue_type_script_setup_true_lang-a3a242e1.js";import"vue";import"/admin/assets/shared/admin-lang.js";import"./vipcard-76baa103.js";import"./index-e730ce9b.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-b7a45967.js";import"vue";import"/admin/assets/shared/admin-lang.js";import"./tools-1409a5d1.js";import"./index-597ddd74.js";import"pinia";import"@element-plus/icons-vue";import"axios";import"vue-router";import"/admin/assets/shared/admin-lang.js";export{o as default};

Some files were not shown because too many files have changed in this diff Show More