mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-09-16 17:06:59 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82ca593c10 | ||
|
|
0e2bc510d1 |
36
README.en.md
Normal file
36
README.en.md
Normal 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
125
README.md
@ -1,106 +1,47 @@
|
|||||||
|

|
||||||
|
|
||||||
### NIUCLOUD-ADMIN 是什么?
|
### niucloud-admin是什么?
|
||||||
niucloud-admin-saas是一款快速开发通用管理后台框架,整体功能架构全部精心设计!代码干净整洁!低耦合,高质量!!!前后端API接口完全分离 :raised_hands: !!!前端采用最新技术 **Vite+TypeScript+Vue3+ElementPlus** ,后台采用PHP8、MYSQL8、THINKPHP8 全部最新技术栈,内置Workman高性能消息队列,计划任务处理,完全兼容容器路由运行技术。 采用多租户多站点多应用多插件任意组合使用的SAAS架构设计,内置代码生成器,插件生成器,一键云编译、一键云部署,集成用户权限、表单设计、云存储、短信发送、素材中心、微信及公众号、Api模块一系列开箱即用功能,是一款快速搭建开发企业级应用的软件系统。源码100%开源无加密!框架采用MIT协议,终身免费,商用免费!
|
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支持国际化多语言开发。
|
- 后台前后端分离采用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前端以及后端采用严格的多语言开发规范,包括前端展示,api接口返回,数据验证,错误返回等全部使用多语言设计规范,使开发者能够真生意义上实现多语言的开发需求。
|
||||||
|
|
||||||
- niucloud-admin已经搭建好常规系统的开发底层,具体的底层功能包括:管理员管理,权限管理,网站设置,计划任务管理,素材管理,会员管理,会员账户管理,微信公众号以及小程序管理,支付管理,第三方登录管理,消息管理,短信管理,文章管理,前端装修等全面的基础功能,这样开发者不需要开发基础的结构而专心开发业务。
|
- niucloud-admin已经搭建好常规系统的开发底层,具体的底层功能包括:管理员管理,权限管理,网站设置,计划任务管理,素材管理,会员管理,会员账户管理,微信公众号以及小程序管理,支付管理,第三方登录管理,消息管理,短信管理,文章管理,前端装修等全面的基础功能,这样开发者不需要开发基础的结构而专心开发业务。
|
||||||
|
|
||||||
- niucloud-admin系统内置支持微信/支付宝支付,微信公众号/小程序/短信消息管理,阿里云/腾讯云短信,七牛云/阿里云存储等基础的功能扩展,后续会根据实际业务不断扩展基础组件。
|
- niucloud-admin系统内置支持微信/支付宝支付,微信公众号/小程序/短信消息管理,阿里云/腾讯云短信,七牛云/阿里云存储等基础的功能扩展,后续会根据实际业务不断扩展基础组件。
|
||||||
|
|
||||||
- niucloud-admin结合系统结构特点专门开发了代码生成器,这样开发者根据数据表就可以一键生成基础的业务代码,包括:后台php业务代码以及对应的前端vue代码。
|
- niucloud-admin结合系统结构特点专门开发了代码生成器,这样开发者根据数据表就可以一键生成基础的业务代码,包括:后台php业务代码以及对应的前端vue代码。
|
||||||
- niucloud-admin手机端设计开发了自定义装修,同时提供了基础的开发组件,方便开发者设计开发手机自定义页面装修的开发需求
|
|
||||||
- niucloud-admin框架支持APP在线一键云打包,升级功能(2025/9/10已上线)
|
|
||||||
```
|
|
||||||
### NIUCLOUD 框架截图
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
### 商城插件 :point_right: SHOP
|
|
||||||

|
|
||||||
<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)
|
| [服务市场](https://www.niucloud.com)
|
||||||
| [使用手册](https://www.niucloud.com/doc)
|
| [使用手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
|
||||||
| [二开手册](https://www.niucloud.com/doc)
|
| [二开手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
|
||||||
| [开发视频](https://www.niucloud.com/doc)
|
| [API接口手册](https://www.niucloud.com/apidoc.html)
|
||||||
| [API接口手册](https://api.niucloud.com/apidoc.html?target_id=001)
|
| [论坛地址](https://www.niucloud.com/bbs)
|
||||||
| [论坛地址](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)
|
|
||||||
|
|
||||||
|
|
||||||
### 演示地址
|
### 演示地址
|
||||||
- 平台后台演示网址:[<a href='http://demo-saas.site.niucloud.com/admin/' target="_blank"> 查看 </a>]
|
- 站点后台演示网址:[<a href='http://demo-saas.site.niucloud.com/site' 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='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='https://demo-saas.site.niucloud.com/site/shop/index' 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">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:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
### 产品LOGO
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
### 开源使用须知
|
### 开源使用须知
|
||||||
|
|
||||||
@ -114,16 +55,16 @@ niucloud-admin-saas是一款快速开发通用管理后台框架,整体功能
|
|||||||
|
|
||||||
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
|
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
|
||||||
|
|
||||||
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
|
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 版权信息
|
### 版权信息
|
||||||
版权所有Copyright © 2015-2025 niucloud-admin 版权所有
|
版权所有Copyright © 2015-2030 niucloud-admin 版权所有
|
||||||
|
|
||||||
All rights reserved。
|
All rights reserved。
|
||||||
|
|
||||||
杭州数字云动科技有限公司
|
杭州数字云动科技有限公司
|
||||||
杭州牛之云科技有限公司
|
杭州牛之云科技有限公司
|
||||||
提供技术支持
|
|
||||||
|
提供技术支持
|
||||||
3
admin/auto-imports.d.ts
vendored
3
admin/auto-imports.d.ts
vendored
@ -1,5 +1,6 @@
|
|||||||
// Generated by 'unplugin-auto-import'
|
// Generated by 'unplugin-auto-import'
|
||||||
export {}
|
export {}
|
||||||
declare global {
|
declare global {
|
||||||
|
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
|
||||||
|
const ElNotification: typeof import('element-plus/es')['ElNotification']
|
||||||
}
|
}
|
||||||
|
|||||||
47
admin/components.d.ts
vendored
47
admin/components.d.ts
vendored
@ -11,36 +11,83 @@ declare module '@vue/runtime-core' {
|
|||||||
DiyLink: typeof import('./src/components/diy-link/index.vue')['default']
|
DiyLink: typeof import('./src/components/diy-link/index.vue')['default']
|
||||||
DiyPage: typeof import('./src/components/diy-page/index.vue')['default']
|
DiyPage: typeof import('./src/components/diy-page/index.vue')['default']
|
||||||
Editor: typeof import('./src/components/editor/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']
|
ElButton: typeof import('element-plus/es')['ElButton']
|
||||||
|
ElCalendar: typeof import('element-plus/es')['ElCalendar']
|
||||||
ElCard: typeof import('element-plus/es')['ElCard']
|
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']
|
ElCascader: typeof import('element-plus/es')['ElCascader']
|
||||||
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
||||||
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
||||||
|
ElCheckTag: typeof import('element-plus/es')['ElCheckTag']
|
||||||
ElCol: typeof import('element-plus/es')['ElCol']
|
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']
|
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']
|
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']
|
ElDropdown: typeof import('element-plus/es')['ElDropdown']
|
||||||
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
|
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
|
||||||
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
|
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
|
||||||
|
ElEmpty: typeof import('element-plus/es')['ElEmpty']
|
||||||
ElForm: typeof import('element-plus/es')['ElForm']
|
ElForm: typeof import('element-plus/es')['ElForm']
|
||||||
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
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']
|
ElImage: typeof import('element-plus/es')['ElImage']
|
||||||
|
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
|
||||||
ElInput: typeof import('element-plus/es')['ElInput']
|
ElInput: typeof import('element-plus/es')['ElInput']
|
||||||
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
|
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']
|
ElOption: typeof import('element-plus/es')['ElOption']
|
||||||
|
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
|
||||||
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
|
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
|
||||||
ElPagination: typeof import('element-plus/es')['ElPagination']
|
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']
|
ElRadio: typeof import('element-plus/es')['ElRadio']
|
||||||
|
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
|
||||||
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
|
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']
|
ElRow: typeof import('element-plus/es')['ElRow']
|
||||||
|
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
||||||
ElSelect: typeof import('element-plus/es')['ElSelect']
|
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']
|
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']
|
ElTable: typeof import('element-plus/es')['ElTable']
|
||||||
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
|
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
|
||||||
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
||||||
ElTabs: typeof import('element-plus/es')['ElTabs']
|
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']
|
ElTimeSelect: typeof import('element-plus/es')['ElTimeSelect']
|
||||||
|
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
||||||
ElTree: typeof import('element-plus/es')['ElTree']
|
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']
|
ExportSure: typeof import('./src/components/export-sure/index.vue')['default']
|
||||||
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']
|
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']
|
||||||
Icon: typeof import('./src/components/icon/index.vue')['default']
|
Icon: typeof import('./src/components/icon/index.vue')['default']
|
||||||
|
|||||||
255
admin/package-lock.json
generated
255
admin/package-lock.json
generated
@ -23,7 +23,8 @@
|
|||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"day": "^0.0.2",
|
"day": "^0.0.2",
|
||||||
"echarts": "5.4.1",
|
"echarts": "5.4.1",
|
||||||
"element-plus": "^2.7.4",
|
"element-plus": "2.7.4",
|
||||||
|
"esbuild": "^0.16.17",
|
||||||
"highlight.js": "11.0.1",
|
"highlight.js": "11.0.1",
|
||||||
"lodash-es": "4.17.21",
|
"lodash-es": "4.17.21",
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
@ -32,7 +33,7 @@
|
|||||||
"sass": "1.58.0",
|
"sass": "1.58.0",
|
||||||
"sortablejs": "1.15.0",
|
"sortablejs": "1.15.0",
|
||||||
"vditor": "^3.10.9",
|
"vditor": "^3.10.9",
|
||||||
"vue": "3.2.45",
|
"vue": "3.3.7",
|
||||||
"vue-i18n": "9.2.2",
|
"vue-i18n": "9.2.2",
|
||||||
"vue-jsonp": "2.0.0",
|
"vue-jsonp": "2.0.0",
|
||||||
"vue-router": "4.1.6",
|
"vue-router": "4.1.6",
|
||||||
@ -583,7 +584,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"android"
|
"android"
|
||||||
@ -599,7 +599,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"android"
|
"android"
|
||||||
@ -615,7 +614,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"android"
|
"android"
|
||||||
@ -631,7 +629,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"darwin"
|
"darwin"
|
||||||
@ -647,7 +644,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"darwin"
|
"darwin"
|
||||||
@ -663,7 +659,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"freebsd"
|
"freebsd"
|
||||||
@ -679,7 +674,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"freebsd"
|
"freebsd"
|
||||||
@ -695,7 +689,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -711,7 +704,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -727,7 +719,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -743,7 +734,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -759,7 +749,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"mips64el"
|
"mips64el"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -775,7 +764,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -791,7 +779,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -807,7 +794,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -823,7 +809,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"linux"
|
"linux"
|
||||||
@ -839,7 +824,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"netbsd"
|
"netbsd"
|
||||||
@ -855,7 +839,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"openbsd"
|
"openbsd"
|
||||||
@ -871,7 +854,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"sunos"
|
"sunos"
|
||||||
@ -887,7 +869,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
@ -903,7 +884,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
@ -919,7 +899,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
@ -1139,9 +1118,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/sourcemap-codec": {
|
"node_modules/@jridgewell/sourcemap-codec": {
|
||||||
"version": "1.4.15",
|
"version": "1.5.5",
|
||||||
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||||
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
|
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/trace-mapping": {
|
"node_modules/@jridgewell/trace-mapping": {
|
||||||
"version": "0.3.20",
|
"version": "0.3.20",
|
||||||
@ -1871,57 +1850,84 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-core": {
|
"node_modules/@vue/compiler-core": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.7.tgz",
|
||||||
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
|
"integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.16.4",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/shared": "3.2.45",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"source-map": "^0.6.1"
|
"source-map-js": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-dom": {
|
"node_modules/@vue/compiler-dom": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz",
|
||||||
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
|
"integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-core": "3.2.45",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-sfc": {
|
"node_modules/@vue/compiler-sfc": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz",
|
||||||
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
|
"integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.16.4",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/compiler-core": "3.2.45",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/compiler-dom": "3.2.45",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/compiler-ssr": "3.2.45",
|
"@vue/compiler-ssr": "3.3.7",
|
||||||
"@vue/reactivity-transform": "3.2.45",
|
"@vue/reactivity-transform": "3.3.7",
|
||||||
"@vue/shared": "3.2.45",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7",
|
"magic-string": "^0.30.5",
|
||||||
"postcss": "^8.1.10",
|
"postcss": "^8.4.31",
|
||||||
"source-map": "^0.6.1"
|
"source-map-js": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-sfc/node_modules/magic-string": {
|
"node_modules/@vue/compiler-sfc/node_modules/magic-string": {
|
||||||
"version": "0.25.9",
|
"version": "0.30.21",
|
||||||
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
|
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
|
||||||
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
|
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
|
||||||
"dependencies": {
|
"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": {
|
"node_modules/@vue/compiler-ssr": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz",
|
||||||
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
|
"integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.2.45",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/devtools-api": {
|
"node_modules/@vue/devtools-api": {
|
||||||
@ -1930,68 +1936,68 @@
|
|||||||
"integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
|
"integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity": {
|
"node_modules/@vue/reactivity": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.7.tgz",
|
||||||
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
|
"integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity-transform": {
|
"node_modules/@vue/reactivity-transform": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz",
|
||||||
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
|
"integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.16.4",
|
"@babel/parser": "^7.23.0",
|
||||||
"@vue/compiler-core": "3.2.45",
|
"@vue/compiler-core": "3.3.7",
|
||||||
"@vue/shared": "3.2.45",
|
"@vue/shared": "3.3.7",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7"
|
"magic-string": "^0.30.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity-transform/node_modules/magic-string": {
|
"node_modules/@vue/reactivity-transform/node_modules/magic-string": {
|
||||||
"version": "0.25.9",
|
"version": "0.30.21",
|
||||||
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
|
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
|
||||||
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
|
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"sourcemap-codec": "^1.4.8"
|
"@jridgewell/sourcemap-codec": "^1.5.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-core": {
|
"node_modules/@vue/runtime-core": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.7.tgz",
|
||||||
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
|
"integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/reactivity": "3.2.45",
|
"@vue/reactivity": "3.3.7",
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/runtime-dom": {
|
"node_modules/@vue/runtime-dom": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz",
|
||||||
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
|
"integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/runtime-core": "3.2.45",
|
"@vue/runtime-core": "3.3.7",
|
||||||
"@vue/shared": "3.2.45",
|
"@vue/shared": "3.3.7",
|
||||||
"csstype": "^2.6.8"
|
"csstype": "^3.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/server-renderer": {
|
"node_modules/@vue/server-renderer": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.7.tgz",
|
||||||
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
|
"integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-ssr": "3.2.45",
|
"@vue/compiler-ssr": "3.3.7",
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "3.2.45"
|
"vue": "3.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/shared": {
|
"node_modules/@vue/shared": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.7.tgz",
|
||||||
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
|
"integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg=="
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/core": {
|
"node_modules/@vueuse/core": {
|
||||||
"version": "9.12.0",
|
"version": "9.12.0",
|
||||||
@ -2686,9 +2692,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/csstype": {
|
"node_modules/csstype": {
|
||||||
"version": "2.6.21",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
|
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
|
||||||
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
|
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
|
||||||
},
|
},
|
||||||
"node_modules/date-fns": {
|
"node_modules/date-fns": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
@ -3029,7 +3035,6 @@
|
|||||||
"version": "0.16.17",
|
"version": "0.16.17",
|
||||||
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz",
|
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz",
|
||||||
"integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
|
"integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
|
||||||
"dev": true,
|
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"esbuild": "bin/esbuild"
|
"esbuild": "bin/esbuild"
|
||||||
@ -4637,9 +4642,15 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/nanoid": {
|
"node_modules/nanoid": {
|
||||||
"version": "3.3.7",
|
"version": "3.3.16",
|
||||||
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
|
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.16.tgz",
|
||||||
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
"integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ai"
|
||||||
|
}
|
||||||
|
],
|
||||||
"bin": {
|
"bin": {
|
||||||
"nanoid": "bin/nanoid.cjs"
|
"nanoid": "bin/nanoid.cjs"
|
||||||
},
|
},
|
||||||
@ -4978,6 +4989,7 @@
|
|||||||
"version": "8.4.21",
|
"version": "8.4.21",
|
||||||
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
|
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
|
||||||
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
|
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
|
||||||
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.4",
|
"nanoid": "^3.3.4",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
@ -5449,19 +5461,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/source-map-js": {
|
"node_modules/source-map-js": {
|
||||||
"version": "1.0.2",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
|
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"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": {
|
"node_modules/std-env": {
|
||||||
"version": "3.6.0",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.6.0.tgz",
|
"resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.6.0.tgz",
|
||||||
@ -6106,15 +6112,23 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue": {
|
"node_modules/vue": {
|
||||||
"version": "3.2.45",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",
|
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.7.tgz",
|
||||||
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
|
"integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.2.45",
|
"@vue/compiler-dom": "3.3.7",
|
||||||
"@vue/compiler-sfc": "3.2.45",
|
"@vue/compiler-sfc": "3.3.7",
|
||||||
"@vue/runtime-dom": "3.2.45",
|
"@vue/runtime-dom": "3.3.7",
|
||||||
"@vue/server-renderer": "3.2.45",
|
"@vue/server-renderer": "3.3.7",
|
||||||
"@vue/shared": "3.2.45"
|
"@vue/shared": "3.3.7"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "*"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"typescript": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-eslint-parser": {
|
"node_modules/vue-eslint-parser": {
|
||||||
@ -6352,11 +6366,6 @@
|
|||||||
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.13.tgz",
|
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.13.tgz",
|
||||||
"integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA=="
|
"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": {
|
"node_modules/vue-web-terminal/node_modules/magic-string": {
|
||||||
"version": "0.30.5",
|
"version": "0.30.5",
|
||||||
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz",
|
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"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: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:shared": "node scripts/build-shared.cjs",
|
||||||
"build:addon": "node scripts/build-addon.cjs",
|
"build:addon": "node scripts/build-addon.cjs",
|
||||||
|
|||||||
0
admin/src/addon/readme.md
Normal file
0
admin/src/addon/readme.md
Normal file
@ -377,6 +377,13 @@ export function setPayConfig(params: Record<string, any>) {
|
|||||||
return request.put(`pay/config/${ params.type }`, params, { showSuccessMessage: true });
|
return request.put(`pay/config/${ params.type }`, params, { showSuccessMessage: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取支付列表
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function getPayList() {
|
||||||
|
return request.get(`pay/lists`)
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************** 打款设置 ****************************************************/
|
/***************************************************** 打款设置 ****************************************************/
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -139,7 +139,7 @@ export function editVersion(params: Record<string, any>) {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function deleteVersion(id: string) {
|
export function deleteVersion(id: string) {
|
||||||
return request.delete(`applet/version/${ id }`)
|
return request.delete(`weapp/version/${ id }`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -403,7 +403,7 @@ const startServerDownloadFn = async (taskId: string, downloadUrl: string, author
|
|||||||
|
|
||||||
await startServerDownload(taskId, downloadUrl, authorize_code, ts)
|
await startServerDownload(taskId, downloadUrl, authorize_code, ts)
|
||||||
|
|
||||||
downloadPollingTimer = setTimeout(async () => {
|
downloadPollingTimer = setInterval(async () => {
|
||||||
if (!downloadPollingTimer) return
|
if (!downloadPollingTimer) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -447,7 +447,7 @@ const startServerDownloadFn = async (taskId: string, downloadUrl: string, author
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Polling error:', e)
|
console.error('Polling error:', e)
|
||||||
}
|
}
|
||||||
}, 2000)
|
}, 5000)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('启动后台下载失败:', error)
|
console.error('启动后台下载失败:', error)
|
||||||
terminalRef.value.pushMessage({ content: '启动后台下载失败', class: 'error' })
|
terminalRef.value.pushMessage({ content: '启动后台下载失败', class: 'error' })
|
||||||
|
|||||||
@ -46,7 +46,9 @@
|
|||||||
"uploadWeapp": "上传小程序",
|
"uploadWeapp": "上传小程序",
|
||||||
"undoAudit" : "撤回审核",
|
"undoAudit" : "撤回审核",
|
||||||
"undoAuditTips" : "撤回代码审核,单个账号每天审核撤回次数最多不超过 5 次(每天的额度从0点开始生效),一个月不超过 10 次。是否要继续撤回?",
|
"undoAuditTips" : "撤回代码审核,单个账号每天审核撤回次数最多不超过 5 次(每天的额度从0点开始生效),一个月不超过 10 次。是否要继续撤回?",
|
||||||
|
"versionDeleteTips" : "删除后该版本将不可恢复,是否确定删除?",
|
||||||
"helpInfo": "查看帮助",
|
"helpInfo": "查看帮助",
|
||||||
|
"weappUploadDot": ".",
|
||||||
"weappUpload": {
|
"weappUpload": {
|
||||||
"title": "小程序上传",
|
"title": "小程序上传",
|
||||||
"noTask": "暂无上传任务",
|
"noTask": "暂无上传任务",
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<el-button type="primary" class="w-[100px]" @click="addEvent">
|
<el-button type="primary" class="w-[100px]" @click="addEvent">
|
||||||
{{ t('addMenu') }}
|
{{ t('addMenu') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button class="w-[100px]" @click="refreshMenu">
|
<el-button class="w-[100px]" :loading="refreshLoading" @click="refreshMenu">
|
||||||
{{ t('initializeMenu') }}
|
{{ t('initializeMenu') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -130,6 +130,7 @@ const getMenuList = () => {
|
|||||||
}
|
}
|
||||||
getMenuList()
|
getMenuList()
|
||||||
// 重置菜单
|
// 重置菜单
|
||||||
|
const refreshLoading = ref(false)
|
||||||
const refreshMenu = () => {
|
const refreshMenu = () => {
|
||||||
ElMessageBox.confirm(h('div', null, [
|
ElMessageBox.confirm(h('div', null, [
|
||||||
h('p', null, t('initializeMenuTipsOne')),
|
h('p', null, t('initializeMenuTipsOne')),
|
||||||
@ -141,9 +142,11 @@ const refreshMenu = () => {
|
|||||||
// type: 'warning'
|
// type: 'warning'
|
||||||
}
|
}
|
||||||
).then(() => {
|
).then(() => {
|
||||||
|
refreshLoading.value = true
|
||||||
menuRefresh({}).then(res => {
|
menuRefresh({}).then(res => {
|
||||||
location.reload()
|
refreshLoading.value = false
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
refreshLoading.value = false
|
||||||
})
|
})
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
})
|
})
|
||||||
|
|||||||
@ -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 == -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="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="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>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -110,11 +111,11 @@
|
|||||||
<el-form-item prop="code1">
|
<el-form-item prop="code1">
|
||||||
<el-input v-model.number="form.code1" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
<el-input v-model.number="form.code1" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<span class="mx-[10px]">{{ t('weappUpload.dot') }}</span>
|
<span class="mx-[10px]">{{ t('weappUploadDot') }}</span>
|
||||||
<el-form-item prop="code2">
|
<el-form-item prop="code2">
|
||||||
<el-input v-model.number="form.code2" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
<el-input v-model.number="form.code2" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<span class="mx-[10px]">{{ t('weappUpload.dot') }}</span>
|
<span class="mx-[10px]">{{ t('weappUploadDot') }}</span>
|
||||||
<el-form-item prop="code3">
|
<el-form-item prop="code3">
|
||||||
<el-input v-model.number="form.code3" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
<el-input v-model.number="form.code3" class="!w-[70px]" :placeholder="t('codePlaceholder')" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -161,7 +162,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref } from 'vue'
|
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 { t } from '@/lang'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { getAuthInfo } from '@/app/api/module'
|
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 failReason = ref('')
|
||||||
const failReasonDialogVisible = ref(false)
|
const failReasonDialogVisible = ref(false)
|
||||||
const handleFailReason = (data: any) => {
|
const handleFailReason = (data: any) => {
|
||||||
|
|||||||
@ -685,7 +685,7 @@ const preview = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const settingTips = () => {
|
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>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref, watch } from 'vue'
|
import { reactive, ref, watch, nextTick, onUnmounted } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { img } from '@/utils/common'
|
import { img } from '@/utils/common'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
@ -114,6 +114,7 @@ const refreshData = () => {
|
|||||||
page.loadingDev = false // 加载开发环境配置
|
page.loadingDev = false // 加载开发环境配置
|
||||||
page.isDisabledPop = false // 是否禁止打开遮罩层
|
page.isDisabledPop = false // 是否禁止打开遮罩层
|
||||||
page.difference = 0 // 检测页面加载差异,小于1000毫秒,则配置wap端域名
|
page.difference = 0 // 检测页面加载差异,小于1000毫秒,则配置wap端域名
|
||||||
|
uniAppLoadStatus.value = false
|
||||||
|
|
||||||
wapDomain.value = page.domain_url.wap_domain
|
wapDomain.value = page.domain_url.wap_domain
|
||||||
page.wapUrl = page.domain_url.wap_url
|
page.wapUrl = page.domain_url.wap_url
|
||||||
@ -144,17 +145,32 @@ const refreshData = () => {
|
|||||||
refreshData()
|
refreshData()
|
||||||
|
|
||||||
const uniAppLoadStatus = ref(false) // uni-app 加载状态,true:加载完成,false:未完成
|
const uniAppLoadStatus = ref(false) // uni-app 加载状态,true:加载完成,false:未完成
|
||||||
|
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 端 是否加载完成
|
// 监听 uni-app 端 是否加载完成
|
||||||
window.addEventListener('message', (event) => {
|
const onPreviewMessage = (event: MessageEvent) => {
|
||||||
try {
|
try {
|
||||||
let data = {
|
let data: { type?: string } = {
|
||||||
type :''
|
type: ''
|
||||||
};
|
}
|
||||||
if(typeof event.data == 'string') {
|
if (typeof event.data == 'string') {
|
||||||
data = JSON.parse(event.data)
|
data = JSON.parse(event.data)
|
||||||
}else if(typeof event.data == 'object') {
|
} else if (event.data && typeof event.data == 'object') {
|
||||||
data = event.data
|
data = event.data
|
||||||
|
} else {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
|
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
|
||||||
page.loadingDev = false // 禁用开发环境配置
|
page.loadingDev = false // 禁用开发环境配置
|
||||||
@ -163,12 +179,18 @@ window.addEventListener('message', (event) => {
|
|||||||
page.difference = loadTime - page.timeIframe
|
page.difference = loadTime - page.timeIframe
|
||||||
page.isDisabledPop = false // 是否禁止打开遮罩层
|
page.isDisabledPop = false // 是否禁止打开遮罩层
|
||||||
uniAppLoadStatus.value = true // 加载完成
|
uniAppLoadStatus.value = true // 加载完成
|
||||||
|
clearLoadTimers()
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
initLoad()
|
|
||||||
console.log('diy index 后台接受数据错误', e)
|
console.log('diy index 后台接受数据错误', e)
|
||||||
}
|
}
|
||||||
}, false)
|
}
|
||||||
|
window.addEventListener('message', onPreviewMessage, false)
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('message', onPreviewMessage, false)
|
||||||
|
clearLoadTimers()
|
||||||
|
})
|
||||||
|
|
||||||
// 将数据发送到uniapp
|
// 将数据发送到uniapp
|
||||||
const postMessage = () => {
|
const postMessage = () => {
|
||||||
@ -211,7 +233,7 @@ const saveDomain = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const settingTips = () => {
|
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 = () => {
|
const setDomain = () => {
|
||||||
@ -226,26 +248,33 @@ const setDomain = () => {
|
|||||||
postMessage()
|
postMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 同步发送一次消息
|
clearLoadTimers()
|
||||||
send()
|
|
||||||
|
|
||||||
// 如果同步发送消息的 uni-app没有接收到回应,则定时发送消息
|
|
||||||
let sendCount = 0;
|
|
||||||
let timeInterVal = setInterval(()=>{
|
|
||||||
// 接收 uni-app 发送的消息 或者 发送50次后未响应,则停止发送
|
|
||||||
if(uniAppLoadStatus.value || sendCount >= 50){
|
|
||||||
clearInterval(timeInterVal)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
// iframe 挂上 DOM 后再同步发送一次消息
|
||||||
send()
|
send()
|
||||||
sendCount++;
|
|
||||||
},200)
|
|
||||||
|
|
||||||
// 如果10秒内加载不出来,则需要配置域名
|
// 如果同步发送消息的 uni-app没有接收到回应,则定时发送消息
|
||||||
setTimeout(() => {
|
let sendCount = 0;
|
||||||
if (page.difference == 0) initLoad()
|
timeInterVal = setInterval(()=>{
|
||||||
}, 1000 * 10)
|
// 接收 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)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 跳转去装修
|
// 跳转去装修
|
||||||
|
|||||||
@ -84,7 +84,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<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 { t } from '@/lang'
|
||||||
import { img } from '@/utils/common'
|
import { img } from '@/utils/common'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
@ -147,6 +147,7 @@ const refreshData = () => {
|
|||||||
page.loadingDev = false // 加载开发环境配置
|
page.loadingDev = false // 加载开发环境配置
|
||||||
page.isDisabledPop = false // 是否禁止打开遮罩层
|
page.isDisabledPop = false // 是否禁止打开遮罩层
|
||||||
page.difference = 0 // 检测页面加载差异,小于1000毫秒,则配置wap端域名
|
page.difference = 0 // 检测页面加载差异,小于1000毫秒,则配置wap端域名
|
||||||
|
uniAppLoadStatus.value = false
|
||||||
|
|
||||||
wapDomain.value = page.domain_url.wap_domain
|
wapDomain.value = page.domain_url.wap_domain
|
||||||
page.wapUrl = page.domain_url.wap_url
|
page.wapUrl = page.domain_url.wap_url
|
||||||
@ -176,18 +177,33 @@ const refreshData = () => {
|
|||||||
|
|
||||||
refreshData()
|
refreshData()
|
||||||
|
|
||||||
const uniAppLoadStatus = ref(false) // uni-app 加载状态,true:加粗完成,false:未完成
|
const uniAppLoadStatus = ref(false) // uni-app 加载状态,true:加载完成,false:未完成
|
||||||
|
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 端 是否加载完成
|
// 监听 uni-app 端 是否加载完成
|
||||||
window.addEventListener('message', (event) => {
|
const onPreviewMessage = (event: MessageEvent) => {
|
||||||
try {
|
try {
|
||||||
let data = {
|
let data: { type?: string } = {
|
||||||
type: ''
|
type: ''
|
||||||
};
|
}
|
||||||
if(typeof event.data == 'string') {
|
if (typeof event.data == 'string') {
|
||||||
data = JSON.parse(event.data)
|
data = JSON.parse(event.data)
|
||||||
}else if(typeof event.data == 'object') {
|
} else if (event.data && typeof event.data == 'object') {
|
||||||
data = event.data
|
data = event.data
|
||||||
|
} else {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
|
if (data.type && ['appOnLaunch', 'appOnReady'].indexOf(data.type) != -1) {
|
||||||
@ -197,12 +213,18 @@ window.addEventListener('message', (event) => {
|
|||||||
page.difference = loadTime - page.timeIframe
|
page.difference = loadTime - page.timeIframe
|
||||||
page.isDisabledPop = false // 是否禁止打开遮罩层
|
page.isDisabledPop = false // 是否禁止打开遮罩层
|
||||||
uniAppLoadStatus.value = true // 加载完成
|
uniAppLoadStatus.value = true // 加载完成
|
||||||
|
clearLoadTimers()
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
initLoad()
|
|
||||||
console.log('diy member 后台接受数据错误', e)
|
console.log('diy member 后台接受数据错误', e)
|
||||||
}
|
}
|
||||||
}, false)
|
}
|
||||||
|
window.addEventListener('message', onPreviewMessage, false)
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('message', onPreviewMessage, false)
|
||||||
|
clearLoadTimers()
|
||||||
|
})
|
||||||
|
|
||||||
// 将数据发送到uniapp
|
// 将数据发送到uniapp
|
||||||
const postMessage = () => {
|
const postMessage = () => {
|
||||||
@ -245,7 +267,7 @@ const saveDomain = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const settingTips = () => {
|
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 = () => {
|
const setDomain = () => {
|
||||||
@ -260,26 +282,33 @@ const setDomain = () => {
|
|||||||
postMessage()
|
postMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 同步发送一次消息
|
clearLoadTimers()
|
||||||
send()
|
|
||||||
|
|
||||||
// 如果同步发送消息的 uni-app没有接收到回应,则定时发送消息
|
|
||||||
let sendCount = 0;
|
|
||||||
let timeInterVal = setInterval(()=>{
|
|
||||||
// 接收 uni-app 发送的消息 或者 发送50次后未响应,则停止发送
|
|
||||||
if(uniAppLoadStatus.value || sendCount >= 50){
|
|
||||||
clearInterval(timeInterVal)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
// iframe 挂上 DOM 后再同步发送一次消息
|
||||||
send()
|
send()
|
||||||
sendCount++;
|
|
||||||
},200)
|
|
||||||
|
|
||||||
// 如果10秒内加载不出来,则需要配置域名
|
// 如果同步发送消息的 uni-app没有接收到回应,则定时发送消息
|
||||||
setTimeout(() => {
|
let sendCount = 0;
|
||||||
if (page.difference == 0) initLoad()
|
timeInterVal = setInterval(()=>{
|
||||||
}, 1000 * 10)
|
// 接收 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)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 跳转去装修
|
// 跳转去装修
|
||||||
|
|||||||
@ -368,7 +368,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<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 { t } from '@/lang'
|
||||||
import { ArrowLeft } from "@element-plus/icons-vue"
|
import { ArrowLeft } from "@element-plus/icons-vue"
|
||||||
import { img } from '@/utils/common'
|
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);
|
loadDiyTemplatePages(data.type);
|
||||||
|
|
||||||
// 加载预览
|
// 加载预览
|
||||||
@ -834,7 +860,7 @@ const completeLayoutChange = (e)=>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
const settingTips = () => {
|
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>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -179,12 +179,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref, defineAsyncComponent } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getDiyFormFieldsList, getDiyFormFieldStat, getFormRecords, getFormRecordsInfo, deleteFormRecords, getFormRecordsMember } from '@/app/api/diy_form'
|
import { getDiyFormFieldsList, getDiyFormFieldStat, getFormRecords, getFormRecordsInfo, deleteFormRecords, getFormRecordsMember } from '@/app/api/diy_form'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { img } from '@/utils/common'
|
import { img } from '@/utils/common'
|
||||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
@ -234,7 +235,6 @@ const getDiyFormFieldStatFn = (form_id: any) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
const formDetail = ref([])
|
const formDetail = ref([])
|
||||||
|
|
||||||
const formDetailEvent = (row: any) => {
|
const formDetailEvent = (row: any) => {
|
||||||
@ -285,8 +285,9 @@ const loadFormRecordsListFn = (page: number = 1) => {
|
|||||||
formData.data = res.data.data
|
formData.data = res.data.data
|
||||||
formData.data.forEach((item: any) => {
|
formData.data.forEach((item: any) => {
|
||||||
for (const key: any in item.recordsFieldList) {
|
for (const key: any in item.recordsFieldList) {
|
||||||
if (modules[item.recordsFieldList[key].detailComponent]) {
|
const compPath = item.recordsFieldList[key].detailComponent
|
||||||
item.recordsFieldList[key].detailComponent && (item.recordsFieldList[key].detailComponent = defineAsyncComponent(modules[item.recordsFieldList[key].detailComponent]))
|
if (compPath) {
|
||||||
|
item.recordsFieldList[key].detailComponent = resolveAsyncComponent(compPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -25,11 +25,12 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { t } from '@/lang'
|
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 { FormRules } from 'element-plus'
|
||||||
import { getGiftDict } from '@/app/api/member'
|
import { getGiftDict } from '@/app/api/member'
|
||||||
import { guid, filterNumber } from '@/utils/common'
|
import { guid, filterNumber } from '@/utils/common'
|
||||||
import Test from '@/utils/test'
|
import Test from '@/utils/test'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const gifts = ref({})
|
const gifts = ref({})
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -72,10 +73,9 @@ watch(() => formData.value, () => {
|
|||||||
value.value = formData.value
|
value.value = formData.value
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getGiftDict().then(({ data }) => {
|
getGiftDict().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
gifts.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -5,8 +5,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, defineAsyncComponent, computed, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
import { getGiftDict } from '@/app/api/member'
|
import { getGiftDict } from '@/app/api/member'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const gifts = ref({})
|
const gifts = ref({})
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -39,10 +40,9 @@ watch(() => formData.value, () => {
|
|||||||
value.value = formData.value
|
value.value = formData.value
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getGiftDict().then(({ data }) => {
|
getGiftDict().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
gifts.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -5,9 +5,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, defineAsyncComponent, computed, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getBenefitsDict } from '@/app/api/member'
|
import { getBenefitsDict } from '@/app/api/member'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const benefits = ref({})
|
const benefits = ref({})
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -40,10 +41,9 @@ watch(() => formData.value, () => {
|
|||||||
value.value = formData.value
|
value.value = formData.value
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getBenefitsDict().then(({ data }) => {
|
getBenefitsDict().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
benefits.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -5,8 +5,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, defineAsyncComponent, computed, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
import { getGiftDict } from '@/app/api/member'
|
import { getGiftDict } from '@/app/api/member'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const gifts = ref({})
|
const gifts = ref({})
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -39,10 +40,9 @@ watch(() => formData.value, () => {
|
|||||||
value.value = formData.value
|
value.value = formData.value
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getGiftDict().then(({ data }) => {
|
getGiftDict().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
gifts.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -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()
|
loadPosterTemplate()
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
@ -116,7 +116,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, computed } from 'vue'
|
import { ref, reactive, computed, defineAsyncComponent } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { ArrowLeft } from "@element-plus/icons-vue"
|
import { ArrowLeft } from "@element-plus/icons-vue"
|
||||||
import { FormInstance, ElMessage } from 'element-plus'
|
import { FormInstance, ElMessage } from 'element-plus'
|
||||||
@ -175,6 +175,30 @@ const init = async() => {
|
|||||||
await getPrinterType({}).then((res: any) => {
|
await getPrinterType({}).then((res: any) => {
|
||||||
if (res.data && res.data.length) {
|
if (res.data && res.data.length) {
|
||||||
printerType.value = res.data;
|
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)));
|
handlePrintType(printerType.value[0].key, Boolean(parseInt(formData.template_id)));
|
||||||
}
|
}
|
||||||
if (!formData.template_id) {
|
if (!formData.template_id) {
|
||||||
|
|||||||
@ -45,12 +45,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, defineAsyncComponent } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getGrowthRuleConfig, setGrowthRuleConfig, getGrowthRuleDict } from '@/app/api/member'
|
import { getGrowthRuleConfig, setGrowthRuleConfig, getGrowthRuleDict } from '@/app/api/member'
|
||||||
import Test from '@/utils/test'
|
import Test from '@/utils/test'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
@ -60,10 +61,9 @@ const formData = ref<any>({})
|
|||||||
const ruleRefs = ref(null)
|
const ruleRefs = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getGrowthRuleDict().then(({ data }) => {
|
getGrowthRuleDict().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
rules.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -141,7 +141,7 @@ const save = async (formEl: FormInstance | undefined) => {
|
|||||||
* 点击访问教程
|
* 点击访问教程
|
||||||
*/
|
*/
|
||||||
const tutorialFn = () => {
|
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')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, watch, nextTick, defineAsyncComponent } from 'vue'
|
import { ref, watch, nextTick } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getPayConfigList, setPatConfig } from '@/app/api/sys'
|
import { getPayConfigList, setPatConfig } from '@/app/api/sys'
|
||||||
import { getAllPayType } from '@/app/api/pay'
|
import { getAllPayType } from '@/app/api/pay'
|
||||||
@ -69,23 +69,24 @@ import { ElMessage } from 'element-plus'
|
|||||||
import Sortable, { SortableEvent } from 'sortablejs'
|
import Sortable, { SortableEvent } from 'sortablejs'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
|
||||||
const payTypeList = ref([])
|
const payTypeList = ref([])
|
||||||
const payTypeRefs = ref({})
|
const payTypeRefs = ref({})
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
|
|
||||||
getAllPayType().then(({ data }) => {
|
getAllPayType().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
payTypeList.value = data
|
||||||
})
|
})
|
||||||
|
|
||||||
const setPayTypeRefs = (el: any, index: string) => {
|
const setPayTypeRefs = (el: any, index: string) => {
|
||||||
payTypeRefs.value[index] = (el)
|
// 异步组件加载完成前 el 可能为 undefined,仅在其存在时记录,避免覆盖已就绪实例
|
||||||
|
if (el) payTypeRefs.value[index] = el
|
||||||
}
|
}
|
||||||
|
|
||||||
const payLoading = ref(true)
|
const payLoading = ref(true)
|
||||||
@ -137,8 +138,13 @@ const setConfigInfo = (data:any) => {
|
|||||||
|
|
||||||
// 初始化配置信息
|
// 初始化配置信息
|
||||||
const configPayFn = (data:any) => {
|
const configPayFn = (data:any) => {
|
||||||
payTypeRefs.value[data.key].setFormData(data)
|
const comp = payTypeRefs.value[data.key]
|
||||||
payTypeRefs.value[data.key].showDialog = true
|
if (!comp) {
|
||||||
|
ElMessage.warning('支付配置组件加载中,请稍后再试')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
comp.setFormData(data)
|
||||||
|
comp.showDialog = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开启支付方式
|
// 开启支付方式
|
||||||
|
|||||||
@ -54,11 +54,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, defineAsyncComponent } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getPointRuleConfig, setPointRuleConfig, getPointRuleDict } from '@/app/api/member'
|
import { getPointRuleConfig, setPointRuleConfig, getPointRuleDict } from '@/app/api/member'
|
||||||
import Test from '@/utils/test'
|
import Test from '@/utils/test'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
@ -71,13 +72,12 @@ const formData = ref({
|
|||||||
const ruleRefs = ref(null)
|
const ruleRefs = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
getPointRuleDict().then(({ data }) => {
|
getPointRuleDict().then(({ data }) => {
|
||||||
Object.keys(data.grant).forEach((key : string) => {
|
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) => {
|
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
|
rules.value = data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -37,10 +37,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { defineAsyncComponent, reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getSmsList, getAccountIsLogin } from '@/app/api/notice'
|
import { getSmsList, getAccountIsLogin } from '@/app/api/notice'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@ -52,7 +53,6 @@ const smsTableData = reactive({
|
|||||||
data: []
|
data: []
|
||||||
})
|
})
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
/**
|
/**
|
||||||
* 获取配置信息
|
* 获取配置信息
|
||||||
*/
|
*/
|
||||||
@ -60,7 +60,7 @@ const loadSmsList = () => {
|
|||||||
smsTableData.loading = true
|
smsTableData.loading = true
|
||||||
getSmsList().then(({ data }) => {
|
getSmsList().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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.data = data
|
||||||
smsTableData.loading = false
|
smsTableData.loading = false
|
||||||
|
|||||||
@ -38,10 +38,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { defineAsyncComponent, reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { getStorageList } from '@/app/api/sys'
|
import { getStorageList } from '@/app/api/sys'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
@ -52,7 +53,6 @@ const storageTableData = reactive({
|
|||||||
})
|
})
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
/**
|
/**
|
||||||
* 获取配置信息
|
* 获取配置信息
|
||||||
*/
|
*/
|
||||||
@ -60,7 +60,7 @@ const loadStorageList = () => {
|
|||||||
loading.value = true
|
loading.value = true
|
||||||
getStorageList().then(({ data }) => {
|
getStorageList().then(({ data }) => {
|
||||||
Object.keys(data).forEach((key: string) => {
|
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
|
storageTableData.data = data
|
||||||
loading.value = false
|
loading.value = false
|
||||||
|
|||||||
@ -175,7 +175,7 @@
|
|||||||
<template #description>
|
<template #description>
|
||||||
<span class="text-[#999]">{{ t("describe3") }}</span>
|
<span class="text-[#999]">{{ t("describe3") }}</span>
|
||||||
<div class="mt-[20px] mb-[40px] h-[32px]">
|
<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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-step>
|
</el-step>
|
||||||
|
|||||||
@ -113,10 +113,11 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import { ref, computed, defineAsyncComponent } from 'vue'
|
import { ref, computed } from 'vue'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import { getLink } from '@/app/api/diy'
|
import { getLink } from '@/app/api/diy'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { resolveAsyncComponent } from '@/utils/core-component-resolver'
|
||||||
|
|
||||||
const prop = defineProps({
|
const prop = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
@ -159,8 +160,6 @@ const dynamicComponentRefs: any = ref(null) // 动态组件ref
|
|||||||
|
|
||||||
const selectLink: any = ref([])
|
const selectLink: any = ref([])
|
||||||
|
|
||||||
const modules: any = import.meta.glob('@/**/*.vue')
|
|
||||||
|
|
||||||
const show = () => {
|
const show = () => {
|
||||||
getLinkFn(() => {
|
getLinkFn(() => {
|
||||||
// 每次打开时赋值
|
// 每次打开时赋值
|
||||||
@ -259,8 +258,7 @@ const changeParentLink = (item: any) => {
|
|||||||
parentLinkName.value = item.name
|
parentLinkName.value = item.name
|
||||||
childList.value = item.child_list
|
childList.value = item.child_list
|
||||||
if (item.component) {
|
if (item.component) {
|
||||||
dynamicComponentName.value = item.component
|
dynamicComponentName.value = resolveAsyncComponent(item.component)
|
||||||
dynamicComponentName.value = defineAsyncComponent(modules[dynamicComponentName.value])
|
|
||||||
} else {
|
} else {
|
||||||
dynamicComponentName.value = ''
|
dynamicComponentName.value = ''
|
||||||
}
|
}
|
||||||
|
|||||||
@ -111,8 +111,6 @@ const initTencentMap = () => {
|
|||||||
const lat = props.latitude ? Number(props.latitude) : 39.909187
|
const lat = props.latitude ? Number(props.latitude) : 39.909187
|
||||||
const center = new TMap.LatLng(lat, lng)
|
const center = new TMap.LatLng(lat, lng)
|
||||||
map = new TMap.Map(props.containerId, { center, zoom: props.zoom })
|
map = new TMap.Map(props.containerId, { center, zoom: props.zoom })
|
||||||
map.on('tilesloaded', () => loading.value = false)
|
|
||||||
|
|
||||||
marker = createMarker(map)
|
marker = createMarker(map)
|
||||||
if(!props.disabledClickMarker) {
|
if(!props.disabledClickMarker) {
|
||||||
map.on('click', (evt: any) => {
|
map.on('click', (evt: any) => {
|
||||||
@ -135,6 +133,12 @@ const initTencentMap = () => {
|
|||||||
if (props.latitude && props.longitude) {
|
if (props.latitude && props.longitude) {
|
||||||
handleLocationChange(lat, lng)
|
handleLocationChange(lat, lng)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ========== 关键:瓦片加载完成再标记加载成功、触发渲染 ==========
|
||||||
|
map.on('tilesloaded', () => {
|
||||||
|
loading.value = false
|
||||||
|
emit('mapReady') // 瓦片完全加载后通知父组件绘制区域
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
ElMessage.error(t('腾讯地图加载失败'))
|
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) => {
|
const addCircle = (center?: { lat: number; lng: number }, radius = 1000, options?: any) => {
|
||||||
if (!map) return null
|
if (!map) return null
|
||||||
const key = options?.key || `circle_${Date.now()}`
|
const key = options?.key || `circle_${Date.now()}`
|
||||||
let circle = null
|
let circle = null
|
||||||
|
|
||||||
// 创建geometriesData对象
|
|
||||||
const geometriesData = { key, center, radius, ...options }
|
const geometriesData = { key, center, radius, ...options }
|
||||||
|
|
||||||
if (mapType.value === 'tencent') {
|
if (mapType.value === 'tencent') {
|
||||||
|
// 新增第二个参数onChange,把完整图形数据抛给父组件
|
||||||
createCircle(map, geometriesData, (selectedKey) => {
|
createCircle(map, geometriesData, (selectedKey) => {
|
||||||
// 触发selectChange事件
|
|
||||||
emit('selectChange', selectedKey)
|
emit('selectChange', selectedKey)
|
||||||
|
}, (fullAreaData) => {
|
||||||
|
// 完整抛给父组件 areaChange
|
||||||
|
emit('areaChange', {
|
||||||
|
key: fullAreaData.key,
|
||||||
|
type: 'circle',
|
||||||
|
path: fullAreaData
|
||||||
|
})
|
||||||
})
|
})
|
||||||
// 腾讯地图的createCircle不返回值,创建一个包含key的对象添加到overlays
|
|
||||||
circle = { key, geometriesData }
|
circle = { key, geometriesData }
|
||||||
} else {
|
} else {
|
||||||
|
// 天地图原有逻辑不变
|
||||||
circle = tdCreateCircle(map, geometriesData, (data) => {
|
circle = tdCreateCircle(map, geometriesData, (data) => {
|
||||||
// 触发areaChange事件,确保path数据干净,不包含循环引用
|
|
||||||
emit('areaChange', {
|
emit('areaChange', {
|
||||||
key: data.key,
|
key: data.key,
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
@ -378,38 +387,39 @@ const addCircle = (center?: { lat: number; lng: number }, radius = 1000, options
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, (selectedKey) => {
|
}, (selectedKey) => {
|
||||||
// 触发selectChange事件
|
|
||||||
emit('selectChange', selectedKey)
|
emit('selectChange', selectedKey)
|
||||||
})
|
})
|
||||||
// 为天地图添加geometriesData引用
|
if (circle) circle.geometriesData = geometriesData
|
||||||
if (circle) {
|
|
||||||
circle.geometriesData = geometriesData
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (circle) overlays.value.push(circle)
|
if (circle) overlays.value.push(circle)
|
||||||
return circle
|
return circle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加多边形
|
||||||
// 添加多边形
|
// 添加多边形
|
||||||
const addPolygon = (paths: any[], options?: any) => {
|
const addPolygon = (paths: any[], options?: any) => {
|
||||||
if (!map) return null
|
if (!map) return null
|
||||||
const key = options?.key || `poly_${Date.now()}`
|
const key = options?.key || `poly_${Date.now()}`
|
||||||
let poly = null
|
let poly = null
|
||||||
|
|
||||||
// 创建geometriesData对象
|
|
||||||
const geometriesData = { key, paths, ...options }
|
const geometriesData = { key, paths, ...options }
|
||||||
|
|
||||||
if (mapType.value === 'tencent') {
|
if (mapType.value === 'tencent') {
|
||||||
|
// 传入第二个onSelect、第三个onChange回调
|
||||||
createPolygon(map, geometriesData, (selectedKey) => {
|
createPolygon(map, geometriesData, (selectedKey) => {
|
||||||
// 触发selectChange事件
|
|
||||||
emit('selectChange', selectedKey)
|
emit('selectChange', selectedKey)
|
||||||
|
}, (fullAreaData) => {
|
||||||
|
// 完整抛给父组件 areaChange
|
||||||
|
emit('areaChange', {
|
||||||
|
key: fullAreaData.key,
|
||||||
|
type: 'polygon',
|
||||||
|
path: fullAreaData
|
||||||
|
})
|
||||||
})
|
})
|
||||||
// 腾讯地图的createPolygon不返回值,创建一个包含key的对象添加到overlays
|
|
||||||
poly = { key, geometriesData }
|
poly = { key, geometriesData }
|
||||||
} else {
|
} else {
|
||||||
|
// 天地图原有逻辑保持不变
|
||||||
poly = tdCreatePolygon(map, geometriesData, (data) => {
|
poly = tdCreatePolygon(map, geometriesData, (data) => {
|
||||||
// 触发areaChange事件,确保path数据干净,不包含循环引用
|
|
||||||
emit('areaChange', {
|
emit('areaChange', {
|
||||||
key: data.key,
|
key: data.key,
|
||||||
type: 'polygon',
|
type: 'polygon',
|
||||||
@ -422,13 +432,9 @@ const addPolygon = (paths: any[], options?: any) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, (selectedKey) => {
|
}, (selectedKey) => {
|
||||||
// 触发selectChange事件
|
|
||||||
emit('selectChange', selectedKey)
|
emit('selectChange', selectedKey)
|
||||||
})
|
})
|
||||||
// 为天地图添加geometriesData引用
|
if (poly) poly.geometriesData = geometriesData
|
||||||
if (poly) {
|
|
||||||
poly.geometriesData = geometriesData
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (poly) overlays.value.push(poly)
|
if (poly) overlays.value.push(poly)
|
||||||
|
|||||||
@ -370,7 +370,7 @@ const getAttachmentList = debounce((page: number = 1) => {
|
|||||||
}
|
}
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
if (prop.type == 'image' && err.response.status == 500) {
|
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
|
attachment.loading = false
|
||||||
})
|
})
|
||||||
|
|||||||
@ -4,15 +4,16 @@ import Language from "./language"
|
|||||||
import zhCn from "./zh-cn/common.json";
|
import zhCn from "./zh-cn/common.json";
|
||||||
import en from "./en/common.json"
|
import en from "./en/common.json"
|
||||||
|
|
||||||
if (import.meta.env.DEV) {
|
// 内置插件(admin/src/addon 下,随 core 一起打包,部署模式下没有独立的 dist/assets/addons/{key}/index.js)
|
||||||
const addonZhCnCommon = import.meta.globEager('@/addon/**/lang/zh-cn/common.json')
|
// 的 common 语言包需直接合并进基础字典。globEager 在编译期已静态收集(dev/prod 均打进 bundle),
|
||||||
const addonEnCommon = import.meta.globEager('@/addon/**/lang/en/common.json')
|
// 此处运行时合并不能仅在 DEV 执行,否则部署模式下内置插件语言包丢失。
|
||||||
for (const key in addonZhCnCommon) {
|
const addonZhCnCommon = import.meta.globEager('@/addon/**/lang/zh-cn/common.json')
|
||||||
Object.assign(zhCn, addonZhCnCommon[key].default)
|
const addonEnCommon = import.meta.globEager('@/addon/**/lang/en/common.json')
|
||||||
}
|
for (const key in addonZhCnCommon) {
|
||||||
for (const key in addonEnCommon) {
|
Object.assign(zhCn, addonZhCnCommon[key].default)
|
||||||
Object.assign(en, addonEnCommon[key].default)
|
}
|
||||||
}
|
for (const key in addonEnCommon) {
|
||||||
|
Object.assign(en, addonEnCommon[key].default)
|
||||||
}
|
}
|
||||||
|
|
||||||
//创建实例
|
//创建实例
|
||||||
|
|||||||
@ -37,12 +37,10 @@ class Language {
|
|||||||
|
|
||||||
let pageMessages: Record<string, string> = {}
|
let pageMessages: Record<string, string> = {}
|
||||||
if (app) {
|
if (app) {
|
||||||
if (import.meta.env.DEV) {
|
// dev/prod 统一走 loadAddonLang:
|
||||||
const messages = await import(/* @vite-ignore */ `@/addon/${app}/lang/${locale}/${file}.json`)
|
// - 部署插件:从 dist/assets/addons/{key}/index.js 的 langs 解析
|
||||||
pageMessages = messages.default || {}
|
// - 内置插件(随 core 打包,无独立 index.js):回退到编译期 glob 源码 json
|
||||||
} else {
|
pageMessages = await loadAddonLang(app, locale, file)
|
||||||
pageMessages = await loadAddonLang(app, locale, file)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
const messages = await import(`@/app/lang/${locale}/${file}.json`)
|
const messages = await import(`@/app/lang/${locale}/${file}.json`)
|
||||||
pageMessages = messages.default || {}
|
pageMessages = messages.default || {}
|
||||||
@ -56,13 +54,7 @@ class Language {
|
|||||||
// 查询插件的公共语言包(合并到根 key,与 dev 启动时 globEager 行为一致)
|
// 查询插件的公共语言包(合并到根 key,与 dev 启动时 globEager 行为一致)
|
||||||
if (app) {
|
if (app) {
|
||||||
try {
|
try {
|
||||||
let commonMessages: Record<string, string> = {}
|
const commonMessages = await loadAddonLang(app, locale, 'common')
|
||||||
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')
|
|
||||||
}
|
|
||||||
Object.keys(commonMessages).forEach(key => {
|
Object.keys(commonMessages).forEach(key => {
|
||||||
data[key] = commonMessages[key]
|
data[key] = commonMessages[key]
|
||||||
})
|
})
|
||||||
|
|||||||
@ -112,7 +112,7 @@
|
|||||||
"timeout": "网络请求超时!",
|
"timeout": "网络请求超时!",
|
||||||
"requestError": "请求错误",
|
"requestError": "请求错误",
|
||||||
"errNetwork": "网络请求错误",
|
"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": "请选择跳转链接",
|
"linkPlaceholder": "请选择跳转链接",
|
||||||
"selectLinkTips": "链接选择",
|
"selectLinkTips": "链接选择",
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import useSystemStore from '@/stores/modules/system'
|
|||||||
import useUserStore from '@/stores/modules/user'
|
import useUserStore from '@/stores/modules/user'
|
||||||
import { setWindowTitle, getAppType, urlToRouteRaw } from '@/utils/common'
|
import { setWindowTitle, getAppType, urlToRouteRaw } from '@/utils/common'
|
||||||
import { resolveRouteAddon, resolveRouteView } from '@/utils/addon-loader'
|
import { resolveRouteAddon, resolveRouteView } from '@/utils/addon-loader'
|
||||||
|
import { preloadRouteAddon } from '@/utils/addon-lang'
|
||||||
|
|
||||||
// 加载插件中定义的router(仅开发环境从源码加载)
|
// 加载插件中定义的router(仅开发环境从源码加载)
|
||||||
const ADDON_ROUTE: any[] = []
|
const ADDON_ROUTE: any[] = []
|
||||||
@ -75,6 +76,9 @@ router.beforeEach(async (to: any, from, next) => {
|
|||||||
systemStore.lang
|
systemStore.lang
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 预热当前路由对应的插件模块(仅加载相关插件,其余惰性)
|
||||||
|
await preloadRouteAddon(to)
|
||||||
|
|
||||||
let matched: any = to.matched;
|
let matched: any = to.matched;
|
||||||
if (matched && matched.length && matched[0].path != '/:pathMatch(.*)*') {
|
if (matched && matched.length && matched[0].path != '/:pathMatch(.*)*') {
|
||||||
matched = matched[0].path;
|
matched = matched[0].path;
|
||||||
|
|||||||
@ -17,9 +17,21 @@ let installedAddonKeys: string[] = []
|
|||||||
let prodReady = false
|
let prodReady = false
|
||||||
let prodInitPromise: Promise<void> | null = null
|
let prodInitPromise: Promise<void> | null = null
|
||||||
const addonModuleCache: Record<string, Promise<Record<string, unknown> | 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'
|
const ADMIN_PREFIX = '/admin'
|
||||||
|
|
||||||
|
// 系统支持的语言(与 i18n.ts 中 zhCn / en 对应)
|
||||||
|
const supportedLocales = ['zh-cn', 'en']
|
||||||
|
|
||||||
export function adminUrl(relative: string) {
|
export function adminUrl(relative: string) {
|
||||||
if (!relative) return relative
|
if (!relative) return relative
|
||||||
if (relative.startsWith('http') || relative.startsWith('/admin/')) 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}`
|
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 {
|
export function resolveLangFile(app: string, path: string): string {
|
||||||
if (path === '/') return 'index'
|
if (path === '/') return 'index'
|
||||||
let view = path.replace(/^(\/admin\/|\/site\/|\/)/, '').replace(/\.vue$/, '')
|
let view = path.replace(/^(\/admin\/|\/site\/|\/)/, '').replace(/\.vue$/, '')
|
||||||
@ -144,9 +163,10 @@ export async function initAddonManifests(keys?: string[]) {
|
|||||||
prodReady = true
|
prodReady = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (prodInitPromise) return prodInitPromise
|
const shared = __getInit()
|
||||||
|
if (shared) return shared
|
||||||
|
|
||||||
prodInitPromise = (async () => {
|
__setInit((async () => {
|
||||||
prodManifests = {}
|
prodManifests = {}
|
||||||
installedAddonKeys = []
|
installedAddonKeys = []
|
||||||
let addonKeys = keys
|
let addonKeys = keys
|
||||||
@ -171,16 +191,12 @@ export async function initAddonManifests(keys?: string[]) {
|
|||||||
}
|
}
|
||||||
const verifiedKeys: string[] = []
|
const verifiedKeys: string[] = []
|
||||||
for (const key of addonKeys || []) {
|
for (const key of addonKeys || []) {
|
||||||
// 如果 manifest 已从 index.json 获取,直接验证
|
// index.json 已打包 manifests 的插件,直接视为可用(无需 N 次 HEAD 探测)
|
||||||
if (prodManifests[key]) {
|
if (prodManifests[key]) {
|
||||||
if (await isAddonEntryAvailable(key)) {
|
verifiedKeys.push(key)
|
||||||
verifiedKeys.push(key)
|
|
||||||
} else {
|
|
||||||
delete prodManifests[key]
|
|
||||||
}
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 兼容旧版:单独请求 manifest.json
|
// 兼容旧版:单独请求 manifest.json(仍做一次探测)
|
||||||
if (!(await isAddonEntryAvailable(key))) continue
|
if (!(await isAddonEntryAvailable(key))) continue
|
||||||
verifiedKeys.push(key)
|
verifiedKeys.push(key)
|
||||||
try {
|
try {
|
||||||
@ -195,11 +211,22 @@ export async function initAddonManifests(keys?: string[]) {
|
|||||||
}
|
}
|
||||||
installedAddonKeys = verifiedKeys
|
installedAddonKeys = verifiedKeys
|
||||||
prodReady = true
|
prodReady = true
|
||||||
})()
|
})())
|
||||||
|
|
||||||
return prodInitPromise
|
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[] {
|
export function getInstalledAddonKeys(): string[] {
|
||||||
if (installedAddonKeys.length) return installedAddonKeys
|
if (installedAddonKeys.length) return installedAddonKeys
|
||||||
return Object.keys(prodManifests)
|
return Object.keys(prodManifests)
|
||||||
@ -209,6 +236,23 @@ export function getProdManifests(): Record<string, AddonManifest> {
|
|||||||
return prodManifests
|
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(
|
export async function preloadAllAddonLangs(
|
||||||
merge: (locale: string, messages: Record<string, string>) => void
|
merge: (locale: string, messages: Record<string, string>) => void
|
||||||
) {
|
) {
|
||||||
@ -218,15 +262,22 @@ export async function preloadAllAddonLangs(
|
|||||||
for (const addon of getInstalledAddonKeys()) {
|
for (const addon of getInstalledAddonKeys()) {
|
||||||
try {
|
try {
|
||||||
const mod = await loadAddonModule(addon)
|
const mod = await loadAddonModule(addon)
|
||||||
if (!mod) continue
|
const langs = mod?.langs as Record<string, Record<string, unknown>> | undefined
|
||||||
const langs = mod.langs as Record<string, Record<string, unknown>> | undefined
|
if (langs) {
|
||||||
if (!langs) continue
|
for (const [locale, files] of Object.entries(langs)) {
|
||||||
for (const [locale, files] of Object.entries(langs)) {
|
const merged: Record<string, string> = {}
|
||||||
const merged: Record<string, string> = {}
|
for (const [file, pack] of Object.entries(files || {})) {
|
||||||
for (const [file, pack] of Object.entries(files || {})) {
|
Object.assign(merged, flattenLangPack(file, unwrapLangPack(pack)))
|
||||||
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 {
|
} catch {
|
||||||
// skip broken addon module
|
// 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
|
if (Object.keys(messages).length) return messages
|
||||||
}
|
}
|
||||||
} catch {
|
} 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 {
|
try {
|
||||||
const res = await fetch(url)
|
const res = await fetch(url)
|
||||||
if (res.ok) return await res.json()
|
if (res.ok) return await res.json()
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
import type { Component } from 'vue'
|
import type { Component } from 'vue'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
|
import { loadAddonModule } from '@/utils/addon-loader'
|
||||||
|
|
||||||
export const coreVueModules = {
|
export const coreVueModules = {
|
||||||
...import.meta.glob('../app/**/*.vue'),
|
...import.meta.glob('../app/**/*.vue'),
|
||||||
@ -43,13 +44,19 @@ const allAddonVueModules = import.meta.glob('../addon/**/views/**/*.vue')
|
|||||||
export async function loadCoreVueModule(componentPath: string) {
|
export async function loadCoreVueModule(componentPath: string) {
|
||||||
const loader = findCoreModuleLoader(componentPath)
|
const loader = findCoreModuleLoader(componentPath)
|
||||||
if (loader) return loader()
|
if (loader) return loader()
|
||||||
if (import.meta.env.DEV) {
|
// 插件组件:/src/addon/{addon}/views/{rest}.vue
|
||||||
if (componentPath.includes('/addon/')) {
|
if (componentPath.includes('/addon/')) {
|
||||||
const m = componentPath.match(/\/addon\/([^/]+)\/views\/(.+)\.vue$/)
|
const m = componentPath.match(/\/addon\/([^/]+)\/views\/(.+)\.vue$/)
|
||||||
if (m) {
|
if (m) {
|
||||||
const [, addon, rest] = m
|
const [, addon, rest] = m
|
||||||
|
if (import.meta.env.DEV) {
|
||||||
const viewLoader = (allAddonVueModules as Record<string, ViewLoader>)[`../addon/${addon}/views/${rest}.vue`]
|
const viewLoader = (allAddonVueModules as Record<string, ViewLoader>)[`../addon/${addon}/views/${rest}.vue`]
|
||||||
if (viewLoader) return viewLoader()
|
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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,6 +42,8 @@ Route::group('weapp', function() {
|
|||||||
Route::post('version', 'weapp.Version/add');
|
Route::post('version', 'weapp.Version/add');
|
||||||
//版本列表
|
//版本列表
|
||||||
Route::get('version', 'weapp.Version/lists');
|
Route::get('version', 'weapp.Version/lists');
|
||||||
|
//删除版本
|
||||||
|
Route::delete('version/:id', 'weapp.Version/del');
|
||||||
//获取预览码
|
//获取预览码
|
||||||
Route::get('preview', 'weapp.Version/preview');
|
Route::get('preview', 'weapp.Version/preview');
|
||||||
//获取小程序上传日志(会更新状态)
|
//获取小程序上传日志(会更新状态)
|
||||||
|
|||||||
@ -167,12 +167,13 @@ function del_target_dir($path, $delDir)
|
|||||||
//打开目录句柄
|
//打开目录句柄
|
||||||
$handle = opendir($path);
|
$handle = opendir($path);
|
||||||
if ($handle) {
|
if ($handle) {
|
||||||
while (false !== ($item = readdir($handle))) {
|
while (false !== ( $item = readdir($handle) )) {
|
||||||
if ($item != "." && $item != "..") {
|
if ($item != '.' && $item != '..') {
|
||||||
if (is_dir("$path/$item")) {
|
$itemPath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $item;
|
||||||
del_target_dir("$path/$item", $delDir);
|
if (is_dir($itemPath)) {
|
||||||
|
del_target_dir($itemPath, $delDir);
|
||||||
} else {
|
} else {
|
||||||
unlink("$path/$item");
|
unlink($itemPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,7 +445,7 @@ function rmdirs($dir)
|
|||||||
$dh = opendir($dir);
|
$dh = opendir($dir);
|
||||||
while ($file = readdir($dh)) {
|
while ($file = readdir($dh)) {
|
||||||
if ($file != "." && $file != "..") {
|
if ($file != "." && $file != "..") {
|
||||||
$fullpath = $dir . "/" . $file;
|
$fullpath = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
|
||||||
if (is_dir($fullpath)) {
|
if (is_dir($fullpath)) {
|
||||||
rmdirs($fullpath);
|
rmdirs($fullpath);
|
||||||
} else {
|
} else {
|
||||||
@ -556,15 +557,17 @@ function dir_copy(string $src = '', string $dst = '', &$files = [], $exclude_dir
|
|||||||
dir_mkdir($dst);
|
dir_mkdir($dst);
|
||||||
while (false !== ($file = readdir($dir))) {
|
while (false !== ($file = readdir($dir))) {
|
||||||
if (($file != '.') && ($file != '..')) {
|
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;
|
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 {
|
} else {
|
||||||
// 排除文件
|
// 排除文件
|
||||||
if (count($exclude_files) && in_array($file, $exclude_files)) continue;
|
if (count($exclude_files) && in_array($file, $exclude_files)) continue;
|
||||||
$copyResult = copy($src . '/' . $file, $dst . '/' . $file);
|
$copyResult = copy($srcPath, $dstPath);
|
||||||
$files[] = $dst . '/' . $file;
|
$files[] = $dstPath;
|
||||||
if (!$copyResult) {
|
if (!$copyResult) {
|
||||||
closedir($dir);
|
closedir($dir);
|
||||||
throw new \core\exception\CommonException("文件{$file}拷贝失败请检查是否有足够的权限");
|
throw new \core\exception\CommonException("文件{$file}拷贝失败请检查是否有足够的权限");
|
||||||
@ -697,7 +700,7 @@ function parse_sql($content = '', $string = false, $replace = [])
|
|||||||
function search_dir($path, &$data, $search = '')
|
function search_dir($path, &$data, $search = '')
|
||||||
{
|
{
|
||||||
if (is_dir($path)) {
|
if (is_dir($path)) {
|
||||||
$path .= DIRECTORY_SEPARATOR;
|
$path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
|
||||||
$fp = dir($path);
|
$fp = dir($path);
|
||||||
while ($file = $fp->read()) {
|
while ($file = $fp->read()) {
|
||||||
if ($file != '.' && $file != '..') {
|
if ($file != '.' && $file != '..') {
|
||||||
@ -729,12 +732,12 @@ function getFileMap($path, $arr = [])
|
|||||||
$dir = scandir($path);
|
$dir = scandir($path);
|
||||||
foreach ($dir as $file_path) {
|
foreach ($dir as $file_path) {
|
||||||
if ($file_path != '.' && $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)) {
|
if (is_dir($temp_path)) {
|
||||||
$arr[$temp_path] = $file_path;
|
$arr[ $temp_path ] = $file_path;
|
||||||
$arr = getFileMap($temp_path, $arr);
|
$arr = getFileMap($temp_path, $arr);
|
||||||
} else {
|
} else {
|
||||||
$arr[$temp_path] = $file_path;
|
$arr[ $temp_path ] = $file_path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1096,7 +1099,7 @@ function checkDirPermissions($dir, $data = [], $exclude_dir = [])
|
|||||||
if ($file === '.' || $file === '..') {
|
if ($file === '.' || $file === '..') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$fullPath = $dir . DIRECTORY_SEPARATOR . $file;
|
$fullPath = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
|
||||||
|
|
||||||
// 忽略指定目录
|
// 忽略指定目录
|
||||||
$is_exclude = false;
|
$is_exclude = false;
|
||||||
|
|||||||
@ -51,10 +51,10 @@ return [
|
|||||||
'DOWNLOAD_SUCCESS' => '下载成功',
|
'DOWNLOAD_SUCCESS' => '下载成功',
|
||||||
'APP_NOT_ALLOW_UNINSTALL' => '该插件有站点正在使用中,卸载前请先删除相关站点',
|
'APP_NOT_ALLOW_UNINSTALL' => '该插件有站点正在使用中,卸载前请先删除相关站点',
|
||||||
'ADDON_INSTALL_FAIL' => '插件安装失败',
|
'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>',
|
'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://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" 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://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" 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://www.kancloud.cn/niucloud/niucloud-admin-develop/3213542" 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_DOWNLOAD_VERSION_EMPTY' => '该插件还没有发布过版本',
|
||||||
'ADDON_IS_NOT_EXIST' => '插件不存在',
|
'ADDON_IS_NOT_EXIST' => '插件不存在',
|
||||||
'ADDON_KEY_IS_EXIST' => '已存在相同插件标识的应用',
|
'ADDON_KEY_IS_EXIST' => '已存在相同插件标识的应用',
|
||||||
|
|||||||
@ -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_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_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_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_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' . $this->addon . DIRECTORY_SEPARATOR;
|
$to_admin_dist_dir = public_path() . 'admin' . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||||
|
|
||||||
// 卸载admin管理端
|
// 卸载admin管理端
|
||||||
if (is_dir($to_admin_dir)) del_target_dir($to_admin_dir, true);
|
if (is_dir($to_admin_dir)) del_target_dir($to_admin_dir, true);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'version' => '2.0.1',
|
'version' => '2.0.2',
|
||||||
'code' => '202606060001'
|
'code' => '202608200001'
|
||||||
];
|
];
|
||||||
|
|||||||
@ -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};
|
|
||||||
1
niucloud/public/admin/assets/404-ac06a54f.js
Normal file
1
niucloud/public/admin/assets/404-ac06a54f.js
Normal 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};
|
||||||
@ -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};
|
|
||||||
@ -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
1
niucloud/public/admin/assets/Verify-a77251de.js
Normal file
1
niucloud/public/admin/assets/Verify-a77251de.js
Normal 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};
|
||||||
@ -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};
|
|
||||||
1
niucloud/public/admin/assets/VerifyPoints-3c19cd52.js
Normal file
1
niucloud/public/admin/assets/VerifyPoints-3c19cd52.js
Normal 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};
|
||||||
@ -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
1
niucloud/public/admin/assets/VerifySlide-fa2ab6ab.js
Normal file
1
niucloud/public/admin/assets/VerifySlide-fa2ab6ab.js
Normal file
File diff suppressed because one or more lines are too long
@ -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
1
niucloud/public/admin/assets/access-67753e6f.js
Normal file
1
niucloud/public/admin/assets/access-67753e6f.js
Normal 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};
|
||||||
1
niucloud/public/admin/assets/access-84c668fa.js
Normal file
1
niucloud/public/admin/assets/access-84c668fa.js
Normal 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};
|
||||||
1
niucloud/public/admin/assets/access-976a716c.js
Normal file
1
niucloud/public/admin/assets/access-976a716c.js
Normal 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};
|
||||||
@ -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};
|
|
||||||
@ -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};
|
|
||||||
1
niucloud/public/admin/assets/access-eb6ed600.js
Normal file
1
niucloud/public/admin/assets/access-eb6ed600.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/account-327300a5.js
Normal file
1
niucloud/public/admin/assets/account-327300a5.js
Normal file
File diff suppressed because one or more lines are too long
@ -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};
|
|
||||||
@ -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};
|
|
||||||
@ -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};
|
|
||||||
@ -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};
|
|
||||||
@ -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};
|
|
||||||
@ -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};
|
|
||||||
@ -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
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
@ -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}
|
|
||||||
@ -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}
|
|
||||||
@ -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}
|
|
||||||
@ -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
@ -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
@ -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}
|
|
||||||
@ -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
@ -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
1
niucloud/public/admin/assets/add-member-b0f7ab7c.js
Normal file
1
niucloud/public/admin/assets/add-member-b0f7ab7c.js
Normal 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};
|
||||||
@ -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};
|
|
||||||
@ -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 _};
|
|
||||||
@ -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 _};
|
||||||
@ -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
1
niucloud/public/admin/assets/add-table-94765dd3.js
Normal file
1
niucloud/public/admin/assets/add-table-94765dd3.js
Normal 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
Loading…
x
Reference in New Issue
Block a user