update code
2
.gitignore
vendored
@ -15,4 +15,4 @@ bin-release/
|
||||
|
||||
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
|
||||
# should NOT be excluded as they contain compiler settings and other important
|
||||
# information for Eclipse / Flash Builder.
|
||||
# information for Eclipse / Flash Builder.
|
||||
|
||||
123
README.md
@ -11,10 +11,10 @@
|
||||
:small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond:
|
||||
<br>
|
||||
|
||||
### niucloud-admin是什么?
|
||||
### niucloud-admin介绍
|
||||
niucloud-admin是一款快速开发SaaS通用管理系统后台框架,前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建,内置集成Saas多站点、多租户套餐、用户权限、代码生成器、表单设计、云存储、短信发送、素材中心、微信及公众号、支付宝小程序、Api模块一系列开箱即用功能,是一款快速可以开发企业级应用的软件系统。
|
||||
|
||||
### niucloud-admin产品特性说明
|
||||
### 产品特性说明
|
||||
|
||||
1.niucloud-admin 软件开发框架内置各种基础功能,可大量节省SaaS系统开发周期,快速完成交付。
|
||||
|
||||
@ -29,7 +29,7 @@ niucloud-admin是一款快速开发SaaS通用管理系统后台框架,前端
|
||||
6.niucloud-admin是一款真正的二次开发神器!
|
||||
|
||||
|
||||
### niucloud-admin技术说明
|
||||
### 技术说明
|
||||
|
||||
- 后台php采用thinkphp6+php8+mysql,支持composer快速安装扩展,支持redis缓存以及消息队列,支持多语言设计开发,同时开发采用严格的restful的api设计开发。
|
||||
|
||||
@ -55,13 +55,19 @@ niucloud-admin是一款快速开发SaaS通用管理系统后台框架,前端
|
||||
|
||||
- 手机端使用uniapp ,同时使用uview页面展示,可以开发出丰富的手机样式,同时不需要专门学习小程序,app等开发语言,只需要通过uniapp编译就可以。
|
||||
|
||||
### 操作指南
|
||||
[官网地址](https://www.niucloud.com)
|
||||
| [服务市场](https://www.niucloud.com)
|
||||
| [使用手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
|
||||
| [二开手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
|
||||
| [API接口手册](https://www.niucloud.com/apidoc.html)
|
||||
| [论坛地址](https://www.niucloud.com/bbs)
|
||||
|
||||
### 官网地址
|
||||
https://www.niucloud.com
|
||||
### 应用市场
|
||||
https://www.niucloud.com
|
||||
### 使用手册
|
||||
https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336
|
||||
### 二开手册
|
||||
https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336
|
||||
### API接口手册
|
||||
https://www.niucloud.com/apidoc.html
|
||||
### 论坛地址
|
||||
https://www.niucloud.com/bbs
|
||||
|
||||
### 演示地址
|
||||
- 电脑端演示网址:[<a href='https://demo.niucloud.com/web/s2/' target="_blank"> 查看 </a>]
|
||||
@ -71,104 +77,20 @@ niucloud-admin是一款快速开发SaaS通用管理系统后台框架,前端
|
||||
- 平台后台演示网址:[<a href='https://demo.niucloud.com/admin/login' target="_blank"> 查看 </a>]
|
||||
<a href='https://demo.niucloud.com/admin/login' target="_blank">https://demo.niucloud.com/admin/login</a> 账号:admin 密码:123456
|
||||
|
||||
|
||||
- 前端演示二维码
|
||||
|
||||

|
||||
|
||||
### 安装部署
|
||||
#### 宝塔部署
|
||||
- 1.环境要求<br/>
|
||||
|
||||
环境要求<br/>
|
||||
php 8.0 <br/> mysql5.6及以上 <br/> 启用redis <br/> Nignx/Apache
|
||||
- 2.登录网站【<a href='https://gitee.com/niucloud-team/niucloud-admin.git' target="_blank">https://gitee.com/niucloud-team/niucloud-admin/</a>】下载框架源码。
|
||||
- 3.源码放置到宝塔根目录,访问域名/niucloud/public/index.php,进入安装界面,点击下一步,输入数据库安装信息,下一步完成安装。详细教程查看 :arrow_right: <a href='https://www.kancloud.cn/niucloud/niucloud-admin-develop/3148343' target="_blank">【开发手册】 :arrow_left: </a>
|
||||
- 4.redis配置:<br/>
|
||||
①安装redis,如下图:
|
||||

|
||||
②安装php的扩展redis,如下图所示:
|
||||

|
||||
③将redis密码填入到niucloud/.env文件中,如下图:
|
||||

|
||||
|
||||
- 5.配置伪静态<br/>
|
||||
可直接复制下方代码:
|
||||
Nginx配置
|
||||
|
||||
```html
|
||||
location / {
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^(.*)$ /index.php/$1 last;
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
apache配置
|
||||
```
|
||||
<IfModule mod_rewrite.c>
|
||||
Options +FollowSymlinks -Multiviews
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
|
||||
RewriteEngine on RewriteCond % !^$
|
||||
</IfModule>
|
||||
```
|
||||
粘贴位置如下图:
|
||||

|
||||
|
||||
#### docker快速部署
|
||||
- 1.启动docker,打开终端输入命令行,回车执行命令。
|
||||
|
||||
```
|
||||
docker run -d --name niucloudadmin_php -p 20221:80 niucloud/niucloudadmin_php:1.6.0
|
||||
```
|
||||
- 2.访问配置的虚拟域名或者localhost或者127.0.0.1/niucloud/public/index.php即可进入安装界面。
|
||||
|
||||
#### 前端运行
|
||||
- 1.拉取代码
|
||||
|
||||
```
|
||||
git clone https://gitee.com/niucloud-team/niucloud-admin.git
|
||||
```
|
||||
- 2.安装依赖
|
||||
|
||||
```
|
||||
cd niucloud-admin template
|
||||
npm install
|
||||
```
|
||||
|
||||
- 3.本地运行
|
||||
|
||||
```
|
||||
npm run dev
|
||||
```
|
||||
|
||||
- 4.前端代码打包
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
快来添加属于你的专属客服吧~
|
||||
|
||||

|
||||
#### 扫描下方二维码加入niucloud-admin开发者交流群
|
||||

|
||||
扫描下方二维码加入niucloud-admin开发者交流群
|
||||

|
||||
|
||||
### 框架管理端部分页面展示
|
||||
|
||||
- 管理端控制台页面,可直观体现站点会员数量、平台拥有的站点数、所有访客数量统计;同时也加入了统计走势图,便于平台根据需求制定或者调整运营策略;主要快捷入口可方便快速打开需要处理的业务数据
|
||||

|
||||
- 系统性设置,可助力平台更好的运营
|
||||

|
||||

|
||||

|
||||
- 文章模块管理页面展示
|
||||

|
||||
- 可自动生成代码
|
||||

|
||||
- 素材管理
|
||||

|
||||
|
||||
### 开源使用须知
|
||||
|
||||
@ -184,9 +106,6 @@ npm run build
|
||||
|
||||
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
|
||||
|
||||
### 战略合作伙伴
|
||||

|
||||
|
||||
### 版权信息
|
||||
版权所有Copyright 2015-2035 niucloud-admin 版权所有
|
||||
All rights reserved。
|
||||
|
||||
@ -10,7 +10,4 @@ VITE_IMG_DOMAIN=''
|
||||
VITE_REQUEST_HEADER_TOKEN_KEY='token'
|
||||
|
||||
# 请求时header中站点的参数名
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
||||
|
||||
# wap手机端请求地址
|
||||
VITE_WAP_DOMAIN=''
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
||||
@ -10,7 +10,4 @@ VITE_IMG_DOMAIN=''
|
||||
VITE_REQUEST_HEADER_TOKEN_KEY='token'
|
||||
|
||||
# 请求时header中站点的参数名
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
||||
|
||||
# wap手机端请求地址
|
||||
VITE_WAP_DOMAIN=''
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
||||
2
admin/auto-imports.d.ts
vendored
@ -1,5 +1,5 @@
|
||||
// Generated by 'unplugin-auto-import'
|
||||
export {}
|
||||
declare global {
|
||||
|
||||
const ElMessage: typeof import('element-plus/es')['ElMessage']
|
||||
}
|
||||
|
||||
5
admin/components.d.ts
vendored
@ -18,7 +18,6 @@ declare module '@vue/runtime-core' {
|
||||
ElButton: typeof import('element-plus/es')['ElButton']
|
||||
ElCard: typeof import('element-plus/es')['ElCard']
|
||||
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
||||
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
||||
ElCol: typeof import('element-plus/es')['ElCol']
|
||||
ElCollapse: typeof import('element-plus/es')['ElCollapse']
|
||||
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
|
||||
@ -29,13 +28,11 @@ declare module '@vue/runtime-core' {
|
||||
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
|
||||
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
|
||||
ElDialog: typeof import('element-plus/es')['ElDialog']
|
||||
ElDivider: typeof import('element-plus/es')['ElDivider']
|
||||
ElDrawer: typeof import('element-plus/es')['ElDrawer']
|
||||
ElDropdown: typeof import('element-plus/es')['ElDropdown']
|
||||
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
|
||||
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
|
||||
ElEmpty: typeof import('element-plus/es')['ElEmpty']
|
||||
ElFooter: typeof import('element-plus/es')['ElFooter']
|
||||
ElForm: typeof import('element-plus/es')['ElForm']
|
||||
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
||||
ElHeader: typeof import('element-plus/es')['ElHeader']
|
||||
@ -49,7 +46,6 @@ declare module '@vue/runtime-core' {
|
||||
ElMenu: typeof import('element-plus/es')['ElMenu']
|
||||
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
|
||||
ElOption: typeof import('element-plus/es')['ElOption']
|
||||
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
|
||||
ElPagination: typeof import('element-plus/es')['ElPagination']
|
||||
ElPopover: typeof import('element-plus/es')['ElPopover']
|
||||
ElRadio: typeof import('element-plus/es')['ElRadio']
|
||||
@ -72,6 +68,7 @@ declare module '@vue/runtime-core' {
|
||||
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
||||
ElTree: typeof import('element-plus/es')['ElTree']
|
||||
ElUpload: typeof import('element-plus/es')['ElUpload']
|
||||
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']
|
||||
Icon: typeof import('./src/components/icon/index.vue')['default']
|
||||
PopoverInput: typeof import('./src/components/popover-input/index.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
|
||||
@ -12,7 +12,6 @@ import useSystemStore from '@/stores/modules/system'
|
||||
import useAppStore from '@/stores/modules/app'
|
||||
import { useDark, useToggle } from '@vueuse/core'
|
||||
import { setThemeColor } from '@/utils/common'
|
||||
import { language } from '@/lang'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
@ -20,15 +19,14 @@ const route = useRoute()
|
||||
// 初始化设置语言
|
||||
const systemStore = useSystemStore()
|
||||
const locale = computed(() => (systemStore.lang === 'zh-cn' ? zhCn : en))
|
||||
language.loadLocaleMessages(route.path, systemStore.lang)
|
||||
|
||||
const toggleDark = useToggle(useDark())
|
||||
|
||||
watch(route, () => {
|
||||
useAppStore().$patch(state => {
|
||||
state.route = route.path
|
||||
state.route = route.meta.view || route.path
|
||||
})
|
||||
})
|
||||
}, { immediate: true })
|
||||
|
||||
onMounted(() => {
|
||||
// 设置主题色
|
||||
|
||||
@ -2,15 +2,15 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 本地下载的插件列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonLocal(params: Record<string, any>) {
|
||||
return request.get('addon/local', params, { showSuccessMessage: true })
|
||||
return request.get('addon/local', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonDetial(id: number) {
|
||||
return request.get(`addon/${id}`)
|
||||
@ -27,27 +27,27 @@ export function installAddon(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 卸载插件
|
||||
* @param params
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function uninstallAddon(params: Record<string, any>) {
|
||||
return request.post(`addon/uninstall/${params.addon}`, params, { showSuccessMessage: true })
|
||||
return request.post(`addon/uninstall/${params.addon}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件安装前检测
|
||||
* @param addon
|
||||
* @returns
|
||||
* @param addon
|
||||
* @returns
|
||||
*/
|
||||
export function preInstallCheck(addon: string) {
|
||||
return request.get(`addon/install/check/${addon}`, { timeout: 30 * 1000 })
|
||||
return request.get(`addon/install/check/${addon}`, {timeout: 30 * 1000})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件安装任务执行状态
|
||||
* @param addon
|
||||
* @param key
|
||||
* @returns
|
||||
* @param addon
|
||||
* @param key
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonInstallTaskState(addon: string, key: string) {
|
||||
return request.get(`addon/install/${addon}/status/${key}`)
|
||||
@ -55,8 +55,7 @@ export function getAddonInstallTaskState(addon: string, key: string) {
|
||||
|
||||
/**
|
||||
* 执行安装任务
|
||||
* @param params
|
||||
* @returns
|
||||
* @param addon
|
||||
*/
|
||||
export function executeInstall(addon: string) {
|
||||
return request.post(`addon/install/execute/${addon}`, {})
|
||||
|
||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取支付宝小程序配置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAliappConfig() {
|
||||
return request.get('aliapp/config')
|
||||
@ -10,16 +10,16 @@ export function getAliappConfig() {
|
||||
|
||||
/**
|
||||
* 编辑支付宝小程序配置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setAliappConfig(params: Record<string, any>) {
|
||||
return request.put('aliapp/config', params, { showSuccessMessage: true })
|
||||
return request.put('aliapp/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付宝小程序静态资源
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAliappStatic() {
|
||||
return request.get('aliapp/static')
|
||||
|
||||
@ -8,7 +8,7 @@ import request from '@/utils/request'
|
||||
* @returns
|
||||
*/
|
||||
export function getArticleList(params: Record<string, any>) {
|
||||
return request.get(`article/article`, { params })
|
||||
return request.get(`article/article`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -26,17 +26,15 @@ export function getArticleInfo(id: number) {
|
||||
* @returns
|
||||
*/
|
||||
export function addArticle(params: Record<string, any>) {
|
||||
return request.post('article/article', params, { showSuccessMessage: true })
|
||||
return request.post('article/article', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑文章表
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editArticle(params: Record<string, any>) {
|
||||
return request.put(`article/article/${params.id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`article/article/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,24 +43,25 @@ export function editArticle(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function deleteArticle(id: number) {
|
||||
return request.delete(`article/article/${id}`, { showSuccessMessage: true })
|
||||
return request.delete(`article/article/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 文章分类管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取文章分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getArticleCategoryList(params: Record<string, any>) {
|
||||
return request.get(`article/category`, { params })
|
||||
return request.get(`article/category`, {params})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取文章全部分类
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getArticleCategoryAll(params: Record<string, any>) {
|
||||
return request.get(`article/category/all`, params)
|
||||
@ -70,8 +69,7 @@ export function getArticleCategoryAll(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取文章分类详情
|
||||
* @param id 文章分类id
|
||||
* @returns
|
||||
* @param category_id
|
||||
*/
|
||||
export function getArticleCategoryInfo(category_id: number) {
|
||||
return request.get(`article/category/${category_id}`);
|
||||
@ -79,27 +77,26 @@ export function getArticleCategoryInfo(category_id: number) {
|
||||
|
||||
/**
|
||||
* 添加文章分类
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addArticleCategory(params: Record<string, any>) {
|
||||
return request.post('article/category', params, { showSuccessMessage: true })
|
||||
return request.post('article/category', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑文章分类
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editArticleCategory(params: Record<string, any>) {
|
||||
return request.put(`article/category/${params.category_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`article/category/${params.category_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 文章分类删除
|
||||
* @param id 文章分类id
|
||||
* @returns
|
||||
* @param category_id
|
||||
*/
|
||||
export function deleteArticleCategory(category_id: number) {
|
||||
return request.delete(`article/category/${category_id}`, { showSuccessMessage: true });
|
||||
return request.delete(`article/category/${category_id}`, {showSuccessMessage: true});
|
||||
}
|
||||
@ -2,16 +2,16 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 登录
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @param app_type
|
||||
*/
|
||||
export function login(params: Record<string, any>, app_type: string) {
|
||||
return request.get(`login/${app_type}`, { params })
|
||||
return request.get(`login/${app_type}`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录用户权限
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAuthMenus() {
|
||||
return request.get('auth/authmenu')
|
||||
@ -19,7 +19,7 @@ export function getAuthMenus() {
|
||||
|
||||
/**
|
||||
* 获取登录用户权限
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteInfo() {
|
||||
return request.get('auth/site')
|
||||
@ -27,7 +27,7 @@ export function getSiteInfo() {
|
||||
|
||||
/**
|
||||
* 获取登录配置信息
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getLoginConfig() {
|
||||
return request.get('login/config')
|
||||
|
||||
@ -2,13 +2,22 @@ import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 自定义页面 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取自定义页面分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyPageList(params: Record<string, any>) {
|
||||
return request.get(`diy/diy`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyPageList(params: Record<string, any>) {
|
||||
return request.get(`diy/diy`, { params })
|
||||
export function getDiyList(params: Record<string, any>) {
|
||||
return request.get(`diy/list`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -26,7 +35,7 @@ export function getDiyPageInfo(id: number) {
|
||||
* @returns
|
||||
*/
|
||||
export function addDiyPage(params: Record<string, any>) {
|
||||
return request.post('diy/diy', params, { showSuccessMessage: true })
|
||||
return request.post('diy/diy', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -34,7 +43,7 @@ export function addDiyPage(params: Record<string, any>) {
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyPage(params: Record<string, any>) {
|
||||
return request.put(`diy/diy/${params.id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`diy/diy/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,7 +51,7 @@ export function editDiyPage(params: Record<string, any>) {
|
||||
* @param params
|
||||
*/
|
||||
export function setUseDiyPage(params: Record<string, any>) {
|
||||
return request.put(`diy/use`, params, { showSuccessMessage: true })
|
||||
return request.put(`diy/use`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -50,7 +59,7 @@ export function setUseDiyPage(params: Record<string, any>) {
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyPageShare(params: Record<string, any>) {
|
||||
return request.put(`diy/diy/share`, params, { showSuccessMessage: true })
|
||||
return request.put(`diy/diy/share`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,28 +68,28 @@ export function editDiyPageShare(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function deleteDiyPage(id: number) {
|
||||
return request.delete(`diy/diy/${id}`, { showSuccessMessage: true })
|
||||
return request.delete(`diy/diy/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面初始化数据
|
||||
*/
|
||||
export function initPage(params: Record<string, any>) {
|
||||
return request.get(`diy/init`, { params })
|
||||
return request.get(`diy/init`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义链接列表
|
||||
*/
|
||||
export function getLink(params: Record<string, any>) {
|
||||
return request.get(`diy/link`, { params })
|
||||
return request.get(`diy/link`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取底部导航数据
|
||||
*/
|
||||
export function getDiyBottom(params: Record<string, any>) {
|
||||
return request.get(`diy/bottom`, { params })
|
||||
return request.get(`diy/bottom`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -89,14 +98,14 @@ export function getDiyBottom(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function setDiyBottom(params: Record<string, any>) {
|
||||
return request.post('diy/bottom', params, { showSuccessMessage: true })
|
||||
return request.post('diy/bottom', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取页面模板
|
||||
*/
|
||||
export function getDiyTemplate(params: Record<string, any>) {
|
||||
return request.get(`diy/template`, { params })
|
||||
return request.get(`diy/template`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -105,7 +114,7 @@ export function getDiyTemplate(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyRouteList(params: Record<string, any>) {
|
||||
return request.get(`diy/route`, { params })
|
||||
return request.get(`diy/route`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -113,7 +122,7 @@ export function getDiyRouteList(params: Record<string, any>) {
|
||||
* @param params
|
||||
*/
|
||||
export function getDiyRouteInfo(params: Record<string, any>) {
|
||||
return request.get(`diy/route/info`, { params });
|
||||
return request.get(`diy/route/info`, {params});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -121,5 +130,32 @@ export function getDiyRouteInfo(params: Record<string, any>) {
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyRouteShare(params: Record<string, any>) {
|
||||
return request.put(`diy/route/share`, params, { showSuccessMessage: true })
|
||||
return request.put(`diy/route/share`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDecoratePage(params: Record<string, any>) {
|
||||
return request.get(`diy/decorate`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换模板
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function changeTemplate(params: Record<string, any>) {
|
||||
return request.put(`diy/change`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预览数据
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPreviewData(params: Record<string, any>) {
|
||||
return request.put(`diy/preview`, params, {showSuccessMessage: false})
|
||||
}
|
||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取h5配置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getH5Config() {
|
||||
return request.get('channel/h5/config')
|
||||
@ -10,9 +10,9 @@ export function getH5Config() {
|
||||
|
||||
/**
|
||||
* 编辑h5配置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setH5Config(params: Record<string, any>) {
|
||||
return request.put('channel/h5/config', params, { showSuccessMessage: true })
|
||||
return request.put('channel/h5/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
@ -5,17 +5,17 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取会员列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberList(params: Record<string, any>) {
|
||||
return request.get(`member/member`, { params })
|
||||
return request.get(`member/member`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员详情
|
||||
* @param id 会员id
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberInfo(id: number) {
|
||||
return request.get(`member/member/${id}`);
|
||||
@ -23,7 +23,7 @@ export function getMemberInfo(id: number) {
|
||||
|
||||
/**
|
||||
* 获取会员编码
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberNo() {
|
||||
return request.get(`member/memberno`);
|
||||
@ -31,17 +31,17 @@ export function getMemberNo() {
|
||||
|
||||
/**
|
||||
* 添加会员
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addMember(params: Record<string, any>) {
|
||||
return request.post(`member/member`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/member`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员注册方式
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRegisterType(params: Record<string, any>) {
|
||||
return request.get(`member/registertype`, params)
|
||||
@ -49,8 +49,8 @@ export function getRegisterType(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 会员注册渠道
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRegisterChannelType(params: Record<string, any>) {
|
||||
return request.get(`member/register/channel`, params)
|
||||
@ -58,15 +58,13 @@ export function getRegisterChannelType(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 会员删除
|
||||
* @param params
|
||||
* @returns
|
||||
* @param member_id
|
||||
*/
|
||||
export function deleteMember(member_id: number) {
|
||||
return request.delete(`member/member/${member_id}`, { showSuccessMessage: true })
|
||||
return request.delete(`member/member/${member_id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************** 会员标签 ****************************************************/
|
||||
|
||||
/**
|
||||
@ -75,7 +73,7 @@ export function deleteMember(member_id: number) {
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberLabelList(params: Record<string, any>) {
|
||||
return request.get(`member/label`, { params })
|
||||
return request.get(`member/label`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,17 +91,15 @@ export function getMemberLabelInfo(label_id: number) {
|
||||
* @returns
|
||||
*/
|
||||
export function addMemberLabel(params: Record<string, any>) {
|
||||
return request.post('member/label', params, { showSuccessMessage: true })
|
||||
return request.post('member/label', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑会员标签
|
||||
* @param label_id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function updateMemberLabel(params: Record<string, any>) {
|
||||
return request.put(`member/label/${params.label_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`member/label/${params.label_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,13 +108,11 @@ export function updateMemberLabel(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function deleteMemberLabel(label_id: number) {
|
||||
return request.delete(`member/label/${label_id}`, { showSuccessMessage: true })
|
||||
return request.delete(`member/label/${label_id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部会员标签
|
||||
* @param label_id 会员标签label_id
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberLabelAll() {
|
||||
return request.get(`member/label/all`);
|
||||
@ -126,25 +120,20 @@ export function getMemberLabelAll() {
|
||||
|
||||
/**
|
||||
* 编辑会员详情
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editMemberDetail(params: Record<string, any>) {
|
||||
return request.put(`member/member/modify/${params.member_id}/${params.field}`, params, { showSuccessMessage: true })
|
||||
return request.put(`member/member/modify/${params.member_id}/${params.field}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 会员零钱 ****************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************** 会员账户 ****************************************************/
|
||||
|
||||
/**
|
||||
* 账户变动方式
|
||||
* @param params
|
||||
* @returns
|
||||
* @param change_type
|
||||
*/
|
||||
export function getChangeTypeList(change_type: string) {
|
||||
return request.get(`member/account/change_type/${change_type}`)
|
||||
@ -152,77 +141,78 @@ export function getChangeTypeList(change_type: string) {
|
||||
|
||||
/**
|
||||
* 会员积分流水
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPointList(params: Record<string, any>) {
|
||||
return request.get(`member/account/point`, { params })
|
||||
return request.get(`member/account/point`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员余额流水
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBalanceList(params: Record<string, any>) {
|
||||
return request.get(`member/account/balance`, { params })
|
||||
return request.get(`member/account/balance`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员可提现余额列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMoneyList(params: Record<string, any>) {
|
||||
return request.get(`member/account/money`, { params })
|
||||
return request.get(`member/account/money`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员佣金列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCommissionList(params: Record<string, any>) {
|
||||
return request.get(`member/account/commission`, { params })
|
||||
return request.get(`member/account/commission`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员积分调整
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function adjustPoint(params: Record<string, any>) {
|
||||
return request.post(`member/account/point`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/account/point`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员余额调整
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function adjustBalance(params: Record<string, any>) {
|
||||
return request.post(`member/account/balance`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/account/balance`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 会员相关设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取登录设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getLoginConfig() {
|
||||
return request.get(`member/config/login`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册登录设置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setLoginConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/login`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/config/login`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取会员设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberConfig() {
|
||||
return request.get(`member/config/member`)
|
||||
@ -230,18 +220,16 @@ export function getMemberConfig() {
|
||||
|
||||
/**
|
||||
* 会员设置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setMemberConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/member`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/config/member`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取会员转账方式
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getTransfertype() {
|
||||
return request.get(`member/cash_out/transfertype`)
|
||||
@ -250,35 +238,33 @@ export function getTransfertype() {
|
||||
|
||||
/**
|
||||
* 佣金统计
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCommissionSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_commission`, { params })
|
||||
return request.get(`member/account/sum_commission`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分统计
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPointSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_point`, { params })
|
||||
return request.get(`member/account/sum_point`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额统计
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBalanceSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_balance`, { params })
|
||||
return request.get(`member/account/sum_balance`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额类型
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBalanceStatus() {
|
||||
return request.get(`member/account/type`)
|
||||
@ -296,34 +282,32 @@ export function getAccountType(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取提现设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCashOutConfig() {
|
||||
return request.get(`member/config/cash_out`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置提现设置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setCashOutConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/cash_out`, params, { showSuccessMessage: true })
|
||||
return request.post(`member/config/cash_out`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员提现列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCashOutList(params: Record<string, any>) {
|
||||
return request.get(`member/cash_out`, { params })
|
||||
return request.get(`member/cash_out`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现详情
|
||||
* @param params
|
||||
* @returns id
|
||||
* @param id
|
||||
*/
|
||||
export function getCashOutDetail(id: number) {
|
||||
return request.get(`member/cash_out/${id}`, {})
|
||||
@ -331,38 +315,30 @@ export function getCashOutDetail(id: number) {
|
||||
|
||||
/**
|
||||
* 会员提现审核
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function memberAudit(params: Record<string, any>) {
|
||||
return request.put(`member/cash_out/audit/${params.id}/${params.action}`, params, { showSuccessMessage: true })
|
||||
return request.put(`member/cash_out/audit/${params.id}/${params.action}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现转账
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function memberTransfer(params: Record<string, any>) {
|
||||
return request.put(`member/cash_out/transfer/${params.id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`member/cash_out/transfer/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员状态变更
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editMemberStatus(params: Record<string, any>) {
|
||||
return request.put(`member/setstatus/${params.status}`, params, { showSuccessMessage: true })
|
||||
return request.put(`member/setstatus/${params.status}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现状态
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCashOutStatusList() {
|
||||
return request.get(`member/cash_out/status`)
|
||||
|
||||
50
admin/src/api/module.ts
Normal file
@ -0,0 +1,50 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取授权信息
|
||||
*/
|
||||
export function getAuthinfo() {
|
||||
return request.get('niucloud/authinfo')
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置 授权配置
|
||||
*/
|
||||
export function setAuthinfo(params: Record<string, any>) {
|
||||
return request.post('niucloud/authinfo', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 授权配置
|
||||
*/
|
||||
export function getAdminAuthinfo() {
|
||||
return request.get('niucloud/admin/authinfo')
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取授权插件列表
|
||||
* @returns
|
||||
*/
|
||||
export function getModule() {
|
||||
return request.get('niucloud/module')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getModuleVersion() {
|
||||
return request.get(`niucloud/module`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function downloadVersion(addon) {
|
||||
return request.post(`addon/download/${addon}`, {}, {showSuccessMessage: true})
|
||||
}
|
||||
@ -4,7 +4,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 消息列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeList() {
|
||||
return request.get('notice/notice')
|
||||
@ -13,7 +13,7 @@ export function getNoticeList() {
|
||||
/**
|
||||
* 消息详情
|
||||
* @param key
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeInfo(key: string) {
|
||||
return request.get(`notice/notice/${key}`)
|
||||
@ -21,35 +21,35 @@ export function getNoticeInfo(key: string) {
|
||||
|
||||
/**
|
||||
* 消息发送记录
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeLog(params: any) {
|
||||
return request.get(`notice/log`, { params })
|
||||
return request.get(`notice/log`, {params})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 消息启动与关闭
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editNoticeStatus(params: Record<string, any>) {
|
||||
return request.post(`notice/notice/editstatus`, params, { showSuccessMessage: true })
|
||||
return request.post(`notice/notice/editstatus`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息修改
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editNotice(params: Record<string, any>) {
|
||||
return request.post(`notice/notice/edit`, params, { showSuccessMessage: true })
|
||||
return request.post(`notice/notice/edit`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信配置列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getSmsList() {
|
||||
return request.get('notice/notice/sms')
|
||||
@ -57,8 +57,8 @@ export function getSmsList() {
|
||||
|
||||
/**
|
||||
* 短信配置详情
|
||||
* @param sms_type
|
||||
* @returns
|
||||
* @param sms_type
|
||||
* @returns
|
||||
*/
|
||||
export function getSmsInfo(sms_type: string) {
|
||||
return request.get(`notice/notice/sms/${sms_type}`,)
|
||||
@ -66,19 +66,15 @@ export function getSmsInfo(sms_type: string) {
|
||||
|
||||
/**
|
||||
* 短信配置修改
|
||||
* @param sms_type
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editSms(params: Record<string, any>) {
|
||||
return request.put(`notice/notice/sms/${params.sms_type}`, params, { showSuccessMessage: true })
|
||||
return request.put(`notice/notice/sms/${params.sms_type}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信发送记录
|
||||
* @param sms_type
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function getSmsLog(params: Record<string, any>) {
|
||||
return request.get(`notice/sms/log`, params)
|
||||
|
||||
@ -8,7 +8,7 @@ import request from '@/utils/request'
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderList(params: Record<string, any>) {
|
||||
return request.get(`order/recharge`, { params })
|
||||
return request.get(`order/recharge`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -17,7 +17,7 @@ export function getRechargeOrderList(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeStat(params: Record<string, any>) {
|
||||
return request.get(`order/recharge/stat`, { params })
|
||||
return request.get(`order/recharge/stat`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,7 +42,7 @@ export function getRechargeOrderStatusList() {
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefund(params: Record<string, any>) {
|
||||
return request.get(`order/recharge/refund`, { params })
|
||||
return request.get(`order/recharge/refund`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -54,15 +54,15 @@ export function getRechargeRefundStatus() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单发起退款
|
||||
* 充值订单发起退款
|
||||
* @returns
|
||||
*/
|
||||
export function rechargeRefund(id: number) {
|
||||
return request.put(`order/recharge/refund/${id}`, {}, { showSuccessMessage: true });
|
||||
return request.put(`order/recharge/refund/${id}`, {}, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款统计
|
||||
* 获取退款统计
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefundStat() {
|
||||
|
||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getUserInfo(type: string) {
|
||||
return request.get(`auth/get`)
|
||||
@ -10,9 +10,9 @@ export function getUserInfo(type: string) {
|
||||
|
||||
/**
|
||||
* 配置支付
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function setUserInfo(params: Record<string, any>) {
|
||||
return request.put(`auth/edit`, params, { showSuccessMessage: true });
|
||||
return request.put(`auth/edit`, params, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
|
||||
@ -6,17 +6,16 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取站点列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteList(params: Record<string, any>) {
|
||||
return request.get(`site/site`, { params })
|
||||
return request.get(`site/site`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点详情
|
||||
* @param id 站点id
|
||||
* @returns
|
||||
* @param site_id
|
||||
*/
|
||||
export function getSiteInfo(site_id: number) {
|
||||
return request.get(`site/site/${site_id}`);
|
||||
@ -24,47 +23,39 @@ export function getSiteInfo(site_id: number) {
|
||||
|
||||
/**
|
||||
* 添加站点
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addSite(params: Record<string, any>) {
|
||||
return request.post('site/site', params, { showSuccessMessage: true })
|
||||
return request.post('site/site', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新站点
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editSite(params: Record<string, any>) {
|
||||
return request.put(`site/site/${params.site_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`site/site/${params.site_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭站点
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function closeSite(params: Record<string, any>) {
|
||||
return request.put(`site/closesite/${params.site_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`site/closesite/${params.site_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭站点
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* 打开站点
|
||||
* @param params
|
||||
*/
|
||||
export function openSite(params: Record<string, any>) {
|
||||
return request.put(`site/opensite/${params.site_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`site/opensite/${params.site_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部站点状态
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getStatusList() {
|
||||
return request.get(`site/statuslist`)
|
||||
@ -75,17 +66,16 @@ export function getStatusList() {
|
||||
|
||||
/**
|
||||
* 获取站点分组列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteGroupList(params: Record<string, any>) {
|
||||
return request.get(`site/group`, { params })
|
||||
return request.get(`site/group`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点分组详情
|
||||
* @param id 站点id
|
||||
* @returns
|
||||
* @param site_id
|
||||
*/
|
||||
export function getSiteGroupInfo(site_id: number) {
|
||||
return request.get(`site/group/${site_id}`);
|
||||
@ -93,37 +83,33 @@ export function getSiteGroupInfo(site_id: number) {
|
||||
|
||||
/**
|
||||
* 添加站点分组
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addSiteGroup(params: Record<string, any>) {
|
||||
return request.post('site/group', params, { showSuccessMessage: true })
|
||||
return request.post('site/group', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新站点分组
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editSiteGroup(params: Record<string, any>) {
|
||||
return request.put(`site/group/${params.group_id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`site/group/${params.group_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除站点分组
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param group_id
|
||||
*/
|
||||
export function deleteSiteGroup(group_id: number) {
|
||||
return request.delete(`site/group/${group_id}`, { showSuccessMessage: true });
|
||||
return request.delete(`site/group/${group_id}`, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部站点分组
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteGroupAll(params: Record<string, any>) {
|
||||
return request.get(`site/group/all`, params)
|
||||
@ -133,17 +119,16 @@ export function getSiteGroupAll(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取站点用户列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getUserList(params: Record<string, any>) {
|
||||
return request.get(`site/user`, { params })
|
||||
return request.get(`site/user`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点用户详情
|
||||
* @param id 站点id
|
||||
* @returns
|
||||
* @param uid
|
||||
*/
|
||||
export function getUserInfo(uid: number) {
|
||||
return request.get(`site/user/${uid}`);
|
||||
@ -151,37 +136,35 @@ export function getUserInfo(uid: number) {
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addUser(params: Record<string, any>) {
|
||||
return request.post('site/user', params, { showSuccessMessage: true })
|
||||
return request.post('site/user', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑用户
|
||||
* @param uid
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editUser(params: Record<string, any>) {
|
||||
return request.put(`site/user/${params.uid}`, params, { showSuccessMessage: true })
|
||||
return request.put(`site/user/${params.uid}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
* @param uid
|
||||
* @returns
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function deleteUser(uid: number) {
|
||||
return request.delete(`site/user/${uid}`, { showSuccessMessage: true })
|
||||
return request.delete(`site/user/${uid}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 锁定用户
|
||||
* @param uid
|
||||
* @returns
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function lockUser(uid: number) {
|
||||
return request.put(`site/user/lock/${uid}`)
|
||||
@ -190,8 +173,8 @@ export function lockUser(uid: number) {
|
||||
|
||||
/**
|
||||
* 解锁用户
|
||||
* @param uid
|
||||
* @returns
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function unlockUser(uid: number) {
|
||||
return request.put(`site/user/unlock/${uid}`)
|
||||
@ -202,18 +185,52 @@ export function unlockUser(uid: number) {
|
||||
|
||||
/**
|
||||
* 获取操作日志列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getLogList(params: Record<string, any>) {
|
||||
return request.get(`site/log`, { params })
|
||||
return request.get(`site/log`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取操作日志详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param id
|
||||
*/
|
||||
export function getLogInfo(id: number) {
|
||||
return request.get(`site/log/${id}`)
|
||||
}
|
||||
|
||||
/***************************************************** 账单列表 **************************************************/
|
||||
|
||||
/**
|
||||
* 获取账单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountList(params: Record<string, any>) {
|
||||
return request.get(`site/account`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单详情
|
||||
* @param id
|
||||
*/
|
||||
export function getAccountInfo(id: number) {
|
||||
return request.get(`site/account/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单统计
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountStat() {
|
||||
return request.get(`site/account/stat`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单类型
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountType() {
|
||||
return request.get(`site/account/type`)
|
||||
}
|
||||
@ -3,16 +3,13 @@ import request from '@/utils/request'
|
||||
/***************************************************** 统计信息 **************************************************/
|
||||
/**
|
||||
* 获取统计信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getStatInfo() {
|
||||
return request.get(`stat/index`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点统计信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteStatInfo() {
|
||||
return request.get(`stat/siteindex`)
|
||||
|
||||
@ -4,7 +4,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 系统信息
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getInfo() {
|
||||
return request.get('sys/role')
|
||||
@ -12,16 +12,17 @@ export function getInfo() {
|
||||
|
||||
/**
|
||||
* 系统信息
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getUrl() {
|
||||
return request.get('sys/url')
|
||||
}
|
||||
|
||||
/***************************************************** 用户组 ****************************************************/
|
||||
|
||||
/**
|
||||
* 用户组列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getRoleList(params: Record<string, any>) {
|
||||
return request.get('sys/role', { params })
|
||||
@ -29,8 +30,7 @@ export function getRoleList(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 用户组详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param roleId
|
||||
*/
|
||||
export function getRoleInfo(roleId: number) {
|
||||
return request.get(`sys/role/${roleId}`)
|
||||
@ -38,8 +38,8 @@ export function getRoleInfo(roleId: number) {
|
||||
|
||||
/**
|
||||
* 添加用户组
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addRole(params: Record<string, any>) {
|
||||
return request.post(`sys/role`, params, { showSuccessMessage: true })
|
||||
@ -47,9 +47,7 @@ export function addRole(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 编辑用户组
|
||||
* @param role_id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editRole(params: Record<string, any>) {
|
||||
return request.put(`sys/role/${params.role_id}`, params, { showSuccessMessage: true })
|
||||
@ -57,8 +55,7 @@ export function editRole(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 删除用户组
|
||||
* @param role_id
|
||||
* @returns
|
||||
* @param roleId
|
||||
*/
|
||||
export function deleteRole(roleId: number) {
|
||||
return request.delete(`sys/role/${roleId}`, { showSuccessMessage: true })
|
||||
@ -66,7 +63,7 @@ export function deleteRole(roleId: number) {
|
||||
|
||||
/**
|
||||
* 全部分组
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function allRole() {
|
||||
return request.get('sys/role/all')
|
||||
@ -76,7 +73,7 @@ export function allRole() {
|
||||
|
||||
/**
|
||||
* 获取全部菜单
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getMenus(type: string) {
|
||||
return request.get(`sys/menu/${type}`)
|
||||
@ -84,8 +81,7 @@ export function getMenus(type: string) {
|
||||
|
||||
/**
|
||||
* 获取菜单信息
|
||||
* @param id
|
||||
* @returns
|
||||
* @param menu_key
|
||||
*/
|
||||
export function getMenuInfo(menu_key: string) {
|
||||
return request.get(`sys/menu/info/${menu_key}`);
|
||||
@ -93,8 +89,8 @@ export function getMenuInfo(menu_key: string) {
|
||||
|
||||
/**
|
||||
* 添加菜单
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addMenu(params: Record<string, any>) {
|
||||
return request.post('sys/menu', params, { showSuccessMessage: true })
|
||||
@ -102,9 +98,7 @@ export function addMenu(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editMenu(params: Record<string, any>) {
|
||||
return request.put(`sys/menu/${params.menu_key}`, params, { showSuccessMessage: true })
|
||||
@ -112,8 +106,7 @@ export function editMenu(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
* @param id
|
||||
* @returns
|
||||
* @param menu_key
|
||||
*/
|
||||
export function deleteMenu(menu_key: string) {
|
||||
return request.delete(`sys/menu/${menu_key}`, { showSuccessMessage: true })
|
||||
@ -123,7 +116,7 @@ export function deleteMenu(menu_key: string) {
|
||||
|
||||
/**
|
||||
* 获取站点菜单
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteMenus() {
|
||||
return request.get(`site/site/menu`)
|
||||
@ -134,7 +127,7 @@ export function getSiteMenus() {
|
||||
|
||||
/**
|
||||
* 获取网站设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getWebsite() {
|
||||
return request.get('sys/config/website')
|
||||
@ -142,7 +135,7 @@ export function getWebsite() {
|
||||
|
||||
/**
|
||||
* 获取网站设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getWebConfig() {
|
||||
return request.get('sys/web/website')
|
||||
@ -150,8 +143,8 @@ export function getWebConfig() {
|
||||
|
||||
/**
|
||||
* 更新网站设置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setWebsite(params: Record<string, any>) {
|
||||
return request.put(`sys/config/website`, params, { showSuccessMessage: true })
|
||||
@ -159,7 +152,7 @@ export function setWebsite(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取版权设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getCopyright() {
|
||||
return request.get('sys/config/copyright')
|
||||
@ -167,7 +160,7 @@ export function getCopyright() {
|
||||
|
||||
/**
|
||||
* 获服务信息
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getService() {
|
||||
return request.get('sys/config/service')
|
||||
@ -175,8 +168,8 @@ export function getService() {
|
||||
|
||||
/**
|
||||
* 更新版权设置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setCopyright(params: Record<string, any>) {
|
||||
return request.put(`sys/config/copyright`, params, { showSuccessMessage: true })
|
||||
@ -184,8 +177,8 @@ export function setCopyright(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取附件组列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentCategoryList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/category`, { params })
|
||||
@ -193,7 +186,7 @@ export function getAttachmentCategoryList(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 添加分类
|
||||
* @param params
|
||||
* @param params
|
||||
*/
|
||||
export function addAttachmentCategory(params: Record<string, any>) {
|
||||
return request.post(`sys/attachment/category`, params, { showSuccessMessage: true })
|
||||
@ -201,8 +194,8 @@ export function addAttachmentCategory(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 编辑分类
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editAttachmentCategory(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/category/${params.id}`, params, { showSuccessMessage: true })
|
||||
@ -210,8 +203,8 @@ export function editAttachmentCategory(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 删除分类
|
||||
* @param id
|
||||
* @returns
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachmentCategory(id: number) {
|
||||
return request.delete(`sys/attachment/category/${id}`, { showSuccessMessage: true })
|
||||
@ -219,8 +212,8 @@ export function deleteAttachmentCategory(id: number) {
|
||||
|
||||
/**
|
||||
* 获取附件列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment`, { params })
|
||||
@ -228,8 +221,8 @@ export function getAttachmentList(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 删除附件
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachment(params: Record<string, any>) {
|
||||
return request.delete(`sys/attachment/del`, { data: params, showSuccessMessage: true })
|
||||
@ -237,20 +230,57 @@ export function deleteAttachment(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 移动附件
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function moveAttachment(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/batchmove`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取menu菜单
|
||||
*/
|
||||
export function getAuthMenu() {
|
||||
return request.get(`auth/site/showmenu`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取快捷菜单
|
||||
*/
|
||||
export function getShortcutMenu() {
|
||||
return request.get(`sys/config/shortcut_menu`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加快捷菜单
|
||||
*/
|
||||
export function setShortcutMenu(params: Record<string, any>) {
|
||||
return request.put(`sys/config/shortcut_menu`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取图标库分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getIconCategoryList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/icon_category`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取图标库列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getIconList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/icon`, { params })
|
||||
}
|
||||
|
||||
/***************************************************** 地址管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取下级地址列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param pid
|
||||
*/
|
||||
export function getAreaListByPid(pid: number = 0) {
|
||||
return request.get(`sys/area/list_by_pid/${pid}`)
|
||||
@ -258,19 +288,31 @@ export function getAreaListByPid(pid: number = 0) {
|
||||
|
||||
/**
|
||||
* 获取地址树列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param level
|
||||
*/
|
||||
export function getAreatree(level: number = 1) {
|
||||
return request.get(`sys/area/tree/${level}`)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getAddressInfo(params: any) {
|
||||
return request.get(`sys/area/get_info`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getContraryAddress(params: any) {
|
||||
return request.get(`sys/area/contrary`, { params })
|
||||
}
|
||||
|
||||
/***************************************************** 存储设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取存储配置列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getStorageList() {
|
||||
return request.get(`sys/storage`)
|
||||
@ -278,8 +320,7 @@ export function getStorageList() {
|
||||
|
||||
/**
|
||||
* 获取存储详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param type
|
||||
*/
|
||||
export function getStorageInfo(type: string) {
|
||||
return request.get(`sys/storage/${type}`)
|
||||
@ -287,8 +328,8 @@ export function getStorageInfo(type: string) {
|
||||
|
||||
/**
|
||||
* 修改存储
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editStorage(params: Record<string, any>) {
|
||||
return request.put(`sys/storage/${params.storage_type}`, params, { showSuccessMessage: true })
|
||||
@ -298,7 +339,7 @@ export function editStorage(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getPayConfig(type: string) {
|
||||
return request.get(`pay/config/${type}`)
|
||||
@ -306,7 +347,7 @@ export function getPayConfig(type: string) {
|
||||
|
||||
/**
|
||||
* 配置支付
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function setPayConfig(params: Record<string, any>) {
|
||||
return request.put(`pay/config/${params.type}`, params, { showSuccessMessage: true });
|
||||
@ -314,7 +355,7 @@ export function setPayConfig(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 获取支付列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getPayList() {
|
||||
return request.get(`pay/lists`)
|
||||
@ -323,8 +364,7 @@ export function getPayList() {
|
||||
/***************************************************** 打款设置 ****************************************************/
|
||||
/**
|
||||
* 获取打款设置配置
|
||||
* @returns channel 渠道
|
||||
* @returns
|
||||
* @param channel
|
||||
*/
|
||||
export function getTransferInfo(channel) {
|
||||
return request.get(`pay/channel/lists/${channel}`)
|
||||
@ -332,43 +372,84 @@ export function getTransferInfo(channel) {
|
||||
|
||||
/**
|
||||
* 设置打款配置
|
||||
* @param params
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setTransferInfo(params: Record<string, any>) {
|
||||
return request.post(`pay/channel/set/transfer`, params)
|
||||
}
|
||||
|
||||
/***************************************************** 定时任务 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取任务列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getCronList(params: any) {
|
||||
return request.get(`sys/cron`, { params })
|
||||
return request.get(`sys/schedule/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getCronInfo(id: string) {
|
||||
return request.get(`sys/cron/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务类型
|
||||
* @returns
|
||||
* 任务模版
|
||||
* @returns
|
||||
*/
|
||||
export function getCronType() {
|
||||
return request.get(`sys/cron/type`)
|
||||
export function getCronTemplate() {
|
||||
return request.get(`sys/schedule/template`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务间隔
|
||||
* @returns
|
||||
*/
|
||||
export function getCronDateType() {
|
||||
return request.get(`sys/schedule/datetype`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取星期
|
||||
* @returns
|
||||
*/
|
||||
export function getWeek() {
|
||||
return request.get(`sys/date/week`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加计划任务
|
||||
* @returns
|
||||
*/
|
||||
export function addCron(params: Record<string, any>) {
|
||||
return request.post(`sys/schedule`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑任务
|
||||
* @returns
|
||||
*/
|
||||
export function editCron(params: Record<string, any>) {
|
||||
return request.put(`sys/schedule/${params.id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除任务
|
||||
* @returns
|
||||
*/
|
||||
export function deleteCron(id: string) {
|
||||
return request.delete(`sys/schedule/${id}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/***************************************************** 协议管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取协议列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAgreementList() {
|
||||
return request.get(`sys/agreement`)
|
||||
@ -376,7 +457,7 @@ export function getAgreementList() {
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAgreementInfo(key: string) {
|
||||
return request.get(`sys/agreement/${key}`);
|
||||
@ -384,7 +465,7 @@ export function getAgreementInfo(key: string) {
|
||||
|
||||
/**
|
||||
* 更新协议
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function editAgreement(params: Record<string, any>) {
|
||||
return request.put(`sys/agreement/${params.key}`, params, { showSuccessMessage: true })
|
||||
@ -392,7 +473,7 @@ export function editAgreement(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getChannelType() {
|
||||
return request.get(`sys/channel`);
|
||||
@ -401,7 +482,7 @@ export function getChannelType() {
|
||||
|
||||
/**
|
||||
* 获取渠道域名
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getSceneDomain() {
|
||||
return request.get(`sys/scene_domain`);
|
||||
@ -411,8 +492,6 @@ export function getSceneDomain() {
|
||||
|
||||
/**
|
||||
* 管理端登录注册配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getConfigLogin() {
|
||||
return request.get(`sys/config/login`)
|
||||
@ -420,8 +499,8 @@ export function getConfigLogin() {
|
||||
|
||||
/**
|
||||
* 设置管理端登录注册配置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setConfigLogin(params: Record<string, any>) {
|
||||
return request.put(`sys/config/login`, params, { showSuccessMessage: true })
|
||||
@ -474,6 +553,7 @@ export function getAppMange() {
|
||||
export function setMap(params: Record<string, any>) {
|
||||
return request.put(`sys/config/map`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图配置
|
||||
*/
|
||||
@ -481,5 +561,63 @@ export function getMap() {
|
||||
return request.get(`sys/config/map`)
|
||||
}
|
||||
|
||||
/***************************************************** 首页 ****************************************************/
|
||||
/**
|
||||
* 获取首页列表
|
||||
*/
|
||||
export function getIndexList() {
|
||||
return request.get(`sys/config/site_index`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置首页模版
|
||||
*/
|
||||
export function setIndexList(params: Record<string, any>) {
|
||||
return request.put(`sys/config/site_index`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取布局
|
||||
* @returns
|
||||
*/
|
||||
export function getLayouts() {
|
||||
return request.get('sys/layout')
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置布局
|
||||
* @returns
|
||||
*/
|
||||
export function setLayout(key: string) {
|
||||
return request.put('sys/layout', { key }, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付待审核记录
|
||||
*/
|
||||
export function getPayAuditList(params: Record<string, any>) {
|
||||
return request.get('pay/audit', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付审核通过
|
||||
* @returns
|
||||
*/
|
||||
export function payAuditPass(outTradeNo: string) {
|
||||
return request.put(`pay/pass/${outTradeNo}`, {}, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付审核拒绝
|
||||
* @returns
|
||||
*/
|
||||
export function payAuditRefuse(params: Record<string, any>) {
|
||||
return request.put(`pay/refuse/${params.out_trade_no}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付单据详情
|
||||
*/
|
||||
export function getPayDetail(id: number) {
|
||||
return request.get(`pay/detail/${id}`)
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import request from '@/utils/request'
|
||||
* @returns
|
||||
*/
|
||||
export function getGenerateTableList(params: Record<string, any>) {
|
||||
return request.get(`generator/generator`, { params })
|
||||
return request.get(`generator/generator`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -26,17 +26,15 @@ export function getGenerateTableInfo(id: number) {
|
||||
* @returns
|
||||
*/
|
||||
export function addGenerateTable(params: Record<string, any>) {
|
||||
return request.post('generator/generator', params, { showSuccessMessage: true })
|
||||
return request.post('generator/generator', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑代码生成
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editGenerateTable(params: Record<string, any>) {
|
||||
return request.put(`generator/generator/${params.id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`generator/generator/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,7 +43,7 @@ export function editGenerateTable(params: Record<string, any>) {
|
||||
* @returns
|
||||
*/
|
||||
export function deleteGenerateTable(id: number) {
|
||||
return request.delete(`generator/generator/${id}`, { showSuccessMessage: true })
|
||||
return request.delete(`generator/generator/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,8 +57,6 @@ export function generateCreate(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 数据表
|
||||
* @param file
|
||||
* @returns
|
||||
*/
|
||||
export function generateTable() {
|
||||
return request.get(`generator/table`)
|
||||
@ -68,8 +64,6 @@ export function generateTable() {
|
||||
|
||||
/**
|
||||
* 获取服务器环境配置
|
||||
* @param file
|
||||
* @returns
|
||||
*/
|
||||
export function getSystem() {
|
||||
return request.get(`sys/system`)
|
||||
|
||||
@ -33,9 +33,7 @@ export function addUser(params: Record<string, any>) {
|
||||
|
||||
/**
|
||||
* 更新用户
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
*/
|
||||
export function editUser(params: Record<string, any>) {
|
||||
return request.put(`user/user/${params.uid}`, params, { showSuccessMessage: true })
|
||||
|
||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取微信小程序配置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getWeappConfig() {
|
||||
return request.get('weapp/config')
|
||||
@ -10,16 +10,16 @@ export function getWeappConfig() {
|
||||
|
||||
/**
|
||||
* 编辑微信小程序配置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setWeappConfig(params: Record<string, any>) {
|
||||
return request.put('weapp/config', params, { showSuccessMessage: true })
|
||||
return request.put('weapp/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订阅消息列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getTemplateList() {
|
||||
return request.get('weapp/template')
|
||||
@ -27,9 +27,74 @@ export function getTemplateList() {
|
||||
|
||||
/**
|
||||
* 获取同步
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBatchAcquisition(params: Record<string, any>) {
|
||||
return request.put('weapp/template/sync', params, { showSuccessMessage: true })
|
||||
return request.put('weapp/template/sync', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 管理端 ****************************************************/
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function uploadVersion(params: Record<string, any>) {
|
||||
return request.put('applet/upload', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addVersion(params: Record<string, any>) {
|
||||
return request.post('applet/version', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getVersionList(params: Record<string, any>) {
|
||||
return request.get('applet/version', {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本详情
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getVersionInfo(id: string) {
|
||||
return request.get(`applet/version/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editVersion(params: Record<string, any>) {
|
||||
return request.put(`applet/version/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本删除
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteVersion(id: string) {
|
||||
return request.delete(`applet/version/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本下载
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function versionDown(id: string) {
|
||||
return request.get(`applet/version/download/${id}`, { "responseType": "blob" })
|
||||
}
|
||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取微信配置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getWechatConfig() {
|
||||
return request.get('wechat/config')
|
||||
@ -10,8 +10,6 @@ export function getWechatConfig() {
|
||||
|
||||
/**
|
||||
* 微信配置所需的静态信息
|
||||
* @param uid 用户uid
|
||||
* @returns
|
||||
*/
|
||||
export function getWechatStatic() {
|
||||
return request.get('wechat/static');
|
||||
@ -19,16 +17,16 @@ export function getWechatStatic() {
|
||||
|
||||
/**
|
||||
* 编辑微信配置
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editWechatConfig(params: Record<string, any>) {
|
||||
return request.put('wechat/config', params, { showSuccessMessage: true })
|
||||
return request.put('wechat/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信菜单
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getWechatMenu() {
|
||||
return request.get('wechat/menu')
|
||||
@ -36,16 +34,16 @@ export function getWechatMenu() {
|
||||
|
||||
/**
|
||||
* 编辑微信菜单
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editWechatMenu(params: Record<string, any>) {
|
||||
return request.put('wechat/menu', params, { showSuccessMessage: true })
|
||||
return request.put('wechat/menu', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取消息模板列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getTemplateList() {
|
||||
return request.get('wechat/template')
|
||||
@ -54,11 +52,11 @@ export function getTemplateList() {
|
||||
|
||||
/**
|
||||
* 获取同步
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBatchAcquisition(params: Record<string, any>) {
|
||||
return request.put('wechat/template/sync', params, { showSuccessMessage: true })
|
||||
return request.put('wechat/template/sync', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
|
||||
BIN
admin/src/assets/images/index/add_menu.png
Normal file
|
After Width: | Height: | Size: 897 B |
BIN
admin/src/assets/images/index/del_model.png
Normal file
|
After Width: | Height: | Size: 773 B |
BIN
admin/src/assets/images/index/edit.png
Normal file
|
After Width: | Height: | Size: 550 B |
BIN
admin/src/assets/images/index/model_tag.png
Normal file
|
After Width: | Height: | Size: 157 B |
BIN
admin/src/assets/images/index/site_img.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/assets/images/iphone_bg.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
admin/src/assets/images/login/admin_login_img.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
admin/src/assets/images/login/site_bg.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
admin/src/assets/images/login/site_bg_1.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
admin/src/assets/images/login/site_code.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/assets/images/site_login_bg.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
admin/src/assets/images/site_login_logo.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
@ -73,7 +73,6 @@
|
||||
import {cloneDeep} from 'lodash-es'
|
||||
import {getLink} from '@/api/diy';
|
||||
import {ElMessage} from 'element-plus'
|
||||
import { CollectionTag } from '@element-plus/icons-vue';
|
||||
|
||||
const prop = defineProps({
|
||||
modelValue: {
|
||||
|
||||
684
admin/src/components/heat-map/index.vue
Normal file
@ -0,0 +1,684 @@
|
||||
<template>
|
||||
<div>
|
||||
<div @click="show">
|
||||
<slot>
|
||||
<div v-if="value.heatMapData.length">{{ t('selected') }}<span class="text-primary p-[4px]">{{ value.heatMapData.length}}</span>{{ t('selectedAfterHotArea') }}</div>
|
||||
<div v-else>{{ t('addHotArea') }}</div>
|
||||
</slot>
|
||||
</div>
|
||||
<el-dialog v-model="showDialog" :title="t('hotAreaSet')" width="45%" :close-on-press-escape="false" :destroy-on-close="true" :close-on-click-modal="false">
|
||||
|
||||
<div class="flex">
|
||||
|
||||
<div class="content-box relative bg-cover bg-gray-100 border border-dashed border-gray-500" :style="{ backgroundImage : 'url(' + img(value.imageUrl) + ')',width : contentBoxWidth + 'px', height : contentBoxHeight + 'px' }">
|
||||
<div v-for="(item,index) in dragBoxArr" :id="'box_' + index" class="area-box cursor-move border border-solid border-[#ccc] w-[100px] h-[100px] absolute top-0 left-0 select-none p-[5px]" :style="{ left : item.left + item.unit, top : item.top + item.unit }" @mousedown="mouseDown($event,index)">
|
||||
<span>{{ index + 1 }}</span>
|
||||
<template v-if="item.link.title">
|
||||
<span class="p-[4px]">|</span>
|
||||
<span>{{ item.link.title }}</span>
|
||||
</template>
|
||||
<span class="box1" @mousedown.stop="resizeMouseDown($event,index)"></span>
|
||||
<span class="box2" @mousedown.stop="resizeMouseDown($event,index)"></span>
|
||||
<span class="box3" @mousedown.stop="resizeMouseDown($event,index)"></span>
|
||||
<span class="box4" @mousedown.stop="resizeMouseDown($event,index)"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-form label-width="80px" class="pl-[20px]">
|
||||
<h3 class="mb-[10px] text-lg text-black">{{ t('hotAreaManage') }}</h3>
|
||||
<el-button type="primary" plain size="small" class="mb-[10px]" @click="addArea">{{ t('addHotArea') }}</el-button>
|
||||
<div class="overflow-y-auto h-[300px]">
|
||||
<template v-for="(item,index) in dragBoxArr">
|
||||
<div class="mb-[16px]" v-if="item">
|
||||
<el-form-item :label="t('hotArea') + (index + 1)">
|
||||
<div class="flex items-center">
|
||||
<diy-link v-model="item.link"/>
|
||||
<icon class="del cursor-pointer mx-[10px]" name="element-CircleCloseFilled" color="#bbb" size="20px" @click="dragBoxArr.splice(index,1)"/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="showDialog = false">{{ t('cancel')}}</el-button>
|
||||
<el-button type="primary" @click="save">{{ t('confirm') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {t} from '@/lang'
|
||||
import {ref, reactive, computed} from 'vue'
|
||||
import {ElMessage} from 'element-plus'
|
||||
import {img} from '@/utils/common'
|
||||
|
||||
const prop = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
||||
const value: any = computed({
|
||||
get() {
|
||||
return prop.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
});
|
||||
|
||||
const showDialog = ref(false);
|
||||
const contentBoxWidth = ref(400);
|
||||
const contentBoxHeight = ref(400);
|
||||
const num = ref(4);// 每行显示的数量
|
||||
const dragBoxArr: any = reactive([]);
|
||||
|
||||
// 添加热区
|
||||
const addArea = () => {
|
||||
let left = dragBoxArr.length % num.value * 100;
|
||||
let top = Math.floor(dragBoxArr.length / num.value) * 100;
|
||||
if (top >= contentBoxWidth.value) {
|
||||
top = 0;
|
||||
left = 0;
|
||||
}
|
||||
|
||||
dragBoxArr.push({
|
||||
left: left,
|
||||
top: top,
|
||||
width: 100,
|
||||
height: 100,
|
||||
unit: 'px',
|
||||
link: {
|
||||
name: ''
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 移动事件
|
||||
const mouseDown = (e: any, index: number) => {
|
||||
let box: any = document.getElementById('box_' + index);
|
||||
let disX = e.clientX - box.offsetLeft;
|
||||
let disY = e.clientY - box.offsetTop;
|
||||
|
||||
//鼠标移动时
|
||||
document.onmousemove = function (e) {
|
||||
box.style.left = e.clientX - disX + 'px';
|
||||
box.style.top = e.clientY - disY + 'px';
|
||||
|
||||
//边界判断
|
||||
if (e.clientX - disX < 0) {
|
||||
box.style.left = 0;
|
||||
}
|
||||
|
||||
if (e.clientX - disX > contentBoxWidth.value - box.offsetWidth) {
|
||||
box.style.left = contentBoxWidth.value - box.offsetWidth + 'px';
|
||||
}
|
||||
|
||||
if (e.clientY - disY < 0) {
|
||||
box.style.top = 0;
|
||||
}
|
||||
|
||||
if (e.clientY - disY > contentBoxHeight.value - box.offsetHeight) {
|
||||
box.style.top = contentBoxHeight.value - box.offsetHeight + 'px';
|
||||
}
|
||||
};
|
||||
|
||||
// 鼠标抬起时
|
||||
document.onmouseup = function (e) {
|
||||
document.onmousemove = null;
|
||||
}
|
||||
};
|
||||
|
||||
// 拖拽大小事件
|
||||
const resizeMouseDown = (e: any, index: number) => {
|
||||
var oEv = e;
|
||||
oEv.stopPropagation();
|
||||
let box: any = document.getElementById('box_' + index);
|
||||
let className = e.target.className;
|
||||
|
||||
// 获取移动前盒子的宽高,
|
||||
var oldWidth = box.offsetWidth;
|
||||
var oldHeight = box.offsetHeight;
|
||||
|
||||
// 获取鼠标距离屏幕的left和top值
|
||||
var oldX = oEv.clientX;
|
||||
var oldY = oEv.clientY;
|
||||
|
||||
// 元素相对于最近的父级定位
|
||||
var oldLeft = box.offsetLeft;
|
||||
var oldTop = box.offsetTop;
|
||||
|
||||
// 设置最小的宽度
|
||||
var minWidth = 50;
|
||||
var minHeight = 50;
|
||||
|
||||
document.onmousemove = function (e) {
|
||||
var oEv = e;
|
||||
// console.log('move', "width:" + oldWidth,
|
||||
// ',oldLeft: ' + oldLeft, ',oldTop: ' + oldTop,
|
||||
// ',oldX:clientX-- ' + oldX + ':' + oEv.clientX,
|
||||
// ',oldY:clientY-- ' + oldY + ':' + oEv.clientY,
|
||||
// )
|
||||
|
||||
// 左上角
|
||||
if (className == "box1") {
|
||||
|
||||
let width = oldWidth - (oEv.clientX - oldX);
|
||||
let maxWidth = contentBoxWidth.value;
|
||||
|
||||
let height = oldHeight - (oEv.clientY - oldY);
|
||||
let maxHeight = contentBoxHeight.value - oldTop;
|
||||
|
||||
let left = oldLeft + (oEv.clientX - oldX);
|
||||
let top = oldTop + (oEv.clientY - oldY);
|
||||
|
||||
if (width < minWidth) {
|
||||
width = minWidth
|
||||
}
|
||||
if (width > maxWidth) {
|
||||
width = maxWidth
|
||||
}
|
||||
|
||||
if (height < minHeight) {
|
||||
height = minHeight
|
||||
}
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight
|
||||
}
|
||||
|
||||
if (oldLeft == 0 && oldTop == 0) {
|
||||
// 坐标:left = 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 最小宽度,top = 最小高度
|
||||
left = minWidth;
|
||||
top = minHeight
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 最小宽度,top = 不予处理
|
||||
left = minWidth;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,left = 不予处理,top = 最小高度
|
||||
top = minHeight
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,left = 不予处理,top = 不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft == 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left = 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 最小宽度,top = 元素上偏移位置
|
||||
left = minWidth;
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 最小宽度,top = 元素上偏移位置
|
||||
left = minWidth;
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,left = 不予处理,top = 元素上偏移位置
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,left = 不予处理,top = 不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop == 0) {
|
||||
|
||||
// 坐标:left > 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 元素左偏移位置,top = 元素上偏移位置
|
||||
left = box.offsetLeft;
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 元素左偏移位置,top = 0
|
||||
left = box.offsetLeft;
|
||||
top = 0;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,left = 不予处理,top = 元素上偏移位置
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,left = 不予处理,top = 不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left > 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 元素左偏移位置,top = 元素上偏移位置
|
||||
left = box.offsetLeft;
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 元素左偏移位置,top = 元素上偏移位置
|
||||
left = box.offsetLeft;
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,left = 不予处理,top = 元素上偏移位置
|
||||
top = box.offsetTop;
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,left = 不予处理,top = 不予处理
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//左上 宽
|
||||
if (left < 0) {
|
||||
left = 0;
|
||||
width = oldWidth - (oEv.clientX - oldX) + (oldLeft + (oEv.clientX - oldX));
|
||||
}
|
||||
|
||||
//左上 高
|
||||
if (top < 0) {
|
||||
top = 0;
|
||||
height = oldTop + (oEv.clientY - oldY) + (oldHeight - (oEv.clientY - oldY));
|
||||
}
|
||||
|
||||
box.style.width = width + 'px';
|
||||
box.style.height = height + 'px';
|
||||
box.style.left = left + 'px';
|
||||
box.style.top = top + 'px';
|
||||
|
||||
} else if (className == "box2") {
|
||||
// 右上角
|
||||
|
||||
let width = oldWidth + (oEv.clientX - oldX);
|
||||
let maxWidth = contentBoxWidth.value - oldLeft;
|
||||
|
||||
let height = oldHeight - (oEv.clientY - oldY);
|
||||
let maxHeight = contentBoxHeight.value - oldTop;
|
||||
|
||||
let top = oldTop + (oEv.clientY - oldY);
|
||||
|
||||
if (width < minWidth) {
|
||||
width = minWidth
|
||||
}
|
||||
if (width > maxWidth) {
|
||||
width = maxWidth
|
||||
}
|
||||
|
||||
if (height < minHeight) {
|
||||
height = minHeight
|
||||
}
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight
|
||||
}
|
||||
|
||||
if (oldLeft == 0 && oldTop == 0) {
|
||||
|
||||
// 坐标:left = 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,top = 最小高度
|
||||
top = minHeight
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
// 宽 = 最小值,高 > 最小值,不予处理
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,top = 最小高度
|
||||
top = minHeight
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft == 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left = 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop == 0) {
|
||||
|
||||
// 坐标:left = 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,top = 0
|
||||
top = 0
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left > 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
|
||||
// 宽 > 最小值,高 = 最小值,top = 元素上偏移位置
|
||||
top = box.offsetTop
|
||||
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//右上 高
|
||||
if (top < 0) {
|
||||
top = 0;
|
||||
height = oldTop + (oEv.clientY - oldY) + (oldHeight - (oEv.clientY - oldY))
|
||||
}
|
||||
|
||||
box.style.width = width + 'px';
|
||||
box.style.height = height + 'px';
|
||||
box.style.top = top + 'px';
|
||||
|
||||
} else if (className == "box3") {
|
||||
// 左下角
|
||||
|
||||
let width = oldWidth - (oEv.clientX - oldX);
|
||||
let maxWidth = contentBoxWidth.value;
|
||||
|
||||
let height = oldHeight + (oEv.clientY - oldY);
|
||||
let maxHeight = contentBoxHeight.value - oldTop;
|
||||
|
||||
let left = oldLeft + (oEv.clientX - oldX);
|
||||
|
||||
if (width < minWidth) {
|
||||
width = minWidth
|
||||
}
|
||||
if (width > maxWidth) {
|
||||
width = maxWidth
|
||||
}
|
||||
|
||||
if (height < minHeight) {
|
||||
height = minHeight
|
||||
}
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight
|
||||
}
|
||||
|
||||
if (oldLeft == 0 && oldTop == 0) {
|
||||
// 坐标:left = 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 最小宽度
|
||||
left = minWidth;
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 最小宽度
|
||||
left = minWidth;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
// 宽 > 最小值,高 = 最小值,不予处理
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft == 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left = 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 最小宽度
|
||||
left = minWidth;
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 最小宽度
|
||||
left = minWidth;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
// 宽 > 最小值,高 = 最小值,不予处理
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop == 0) {
|
||||
|
||||
// 坐标:left > 0,top = 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 元素左偏移位置
|
||||
left = box.offsetLeft;
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 元素左偏移位置
|
||||
left = box.offsetLeft;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
// 宽 > 最小值,高 = 最小值,不予处理
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
} else if (oldLeft > 0 && oldTop > 0) {
|
||||
|
||||
// 坐标:left > 0,top > 0
|
||||
|
||||
if (width == minWidth && height == minHeight) {
|
||||
|
||||
// 宽高 = 最小值,left = 元素左偏移位置
|
||||
left = box.offsetLeft;
|
||||
|
||||
} else if (width == minWidth && height > minHeight) {
|
||||
|
||||
// 宽 = 最小值,高 > 最小值,left = 元素左偏移位置
|
||||
left = box.offsetLeft;
|
||||
|
||||
} else if (width > minWidth && height == minHeight) {
|
||||
// 宽 > 最小值,高 = 最小值,不予处理
|
||||
} else if (width > minWidth && height > minHeight) {
|
||||
// 宽 > 最小值,高 > 最小值,不予处理
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (left < 0) {
|
||||
left = 0;
|
||||
width = oldWidth - (oEv.clientX - oldX) + (oldLeft + (oEv.clientX - oldX));
|
||||
}
|
||||
|
||||
box.style.width = width + 'px';
|
||||
box.style.height = height + 'px';
|
||||
box.style.left = left + 'px';
|
||||
|
||||
} else if (className == "box4") {
|
||||
// 右下角
|
||||
|
||||
let width = oldWidth + (oEv.clientX - oldX);
|
||||
let maxWidth = contentBoxWidth.value - oldLeft;
|
||||
|
||||
let height = oldHeight + (oEv.clientY - oldY);
|
||||
let maxHeight = contentBoxHeight.value - oldTop;
|
||||
|
||||
if (width < minWidth) {
|
||||
width = minWidth
|
||||
}
|
||||
if (width > maxWidth) {
|
||||
width = maxWidth
|
||||
}
|
||||
|
||||
if (height < minHeight) {
|
||||
height = minHeight
|
||||
}
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight
|
||||
}
|
||||
|
||||
box.style.width = width + 'px';
|
||||
box.style.height = height + 'px';
|
||||
}
|
||||
dragBoxArr[index].unit = 'px'
|
||||
|
||||
};
|
||||
|
||||
// 鼠标抬起时
|
||||
document.onmouseup = function () {
|
||||
document.onmousemove = null;
|
||||
document.onmouseup = null;
|
||||
}
|
||||
};
|
||||
|
||||
const show = () => {
|
||||
// 每次打开时赋值
|
||||
if (!value.value.imageUrl) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: `${t('imageUrlTip')}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (Object.keys(value.value.heatMapData).length) {
|
||||
dragBoxArr.splice(0, dragBoxArr.length, ...value.value.heatMapData);
|
||||
} else {
|
||||
dragBoxArr.splice(0, dragBoxArr.length);
|
||||
addArea();
|
||||
}
|
||||
showDialog.value = true
|
||||
};
|
||||
|
||||
const save = () => {
|
||||
var isOk = true;
|
||||
for (let i = 0; i < dragBoxArr.length; i++) {
|
||||
if (!dragBoxArr[i].link.title) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: t('selectedHotArea') + (i + 1) + t('hotAreaLink'),
|
||||
});
|
||||
isOk = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isOk) return;
|
||||
|
||||
dragBoxArr.forEach((item: any, index: number) => {
|
||||
var box: any = document.getElementById('box_' + index);
|
||||
item.width = parseFloat(box.offsetWidth / contentBoxWidth.value * 100).toFixed(2);
|
||||
item.height = parseFloat(box.offsetHeight / contentBoxHeight.value * 100).toFixed(2);
|
||||
item.left = parseFloat(box.offsetLeft / contentBoxWidth.value * 100).toFixed(2);
|
||||
item.top = parseFloat(box.offsetTop / contentBoxHeight.value * 100).toFixed(2);
|
||||
item.unit = '%';
|
||||
});
|
||||
|
||||
value.value.heatMapData = dragBoxArr;
|
||||
showDialog.value = false
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
showDialog
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.area-box {
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
|
||||
.box1, .box2, .box3, .box4 {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
border: 1px solid #333;
|
||||
}
|
||||
|
||||
.box1 {
|
||||
top: -5px;
|
||||
left: -5px;
|
||||
cursor: nw-resize;
|
||||
}
|
||||
|
||||
.box2 {
|
||||
top: -5px;
|
||||
right: -5px;
|
||||
cursor: ne-resize;
|
||||
}
|
||||
|
||||
.box3 {
|
||||
left: -5px;
|
||||
bottom: -5px;
|
||||
cursor: sw-resize;
|
||||
}
|
||||
|
||||
.box4 {
|
||||
bottom: -5px;
|
||||
right: -5px;
|
||||
cursor: se-resize;
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -1,9 +1,13 @@
|
||||
<script lang="ts">
|
||||
import { createVNode, resolveComponent, defineComponent } from 'vue'
|
||||
<template>
|
||||
<el-icon v-if="type=='element'" :style="style" :class="['icon el-icon',props.class]">
|
||||
<component :is="name"/>
|
||||
</el-icon>
|
||||
<i v-else :class="[type,name,props.class]" :style="style"></i>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import {watch, ref, reactive} from 'vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Icon',
|
||||
props: {
|
||||
const props = defineProps({
|
||||
name: {
|
||||
type: String,
|
||||
required: true
|
||||
@ -20,23 +24,25 @@ export default defineComponent({
|
||||
type: String,
|
||||
default: '16px'
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
let [type, name] = props.name.split(/-(.*)/)
|
||||
})
|
||||
|
||||
let style = {
|
||||
color: props.color,
|
||||
fontSize: props.size
|
||||
}
|
||||
const type = ref('');
|
||||
const name = ref('');
|
||||
|
||||
switch (type) {
|
||||
case 'element':
|
||||
return () => createVNode('el-icon', { class: ['icon el-icon', props.class], style: style }, [createVNode(resolveComponent(name))])
|
||||
break;
|
||||
case 'iconfont':
|
||||
return () => createVNode('i', { class: [name, 'iconfont', props.class], style: style })
|
||||
break;
|
||||
}
|
||||
}
|
||||
})
|
||||
const style = reactive({
|
||||
color: props.color,
|
||||
fontSize: props.size
|
||||
});
|
||||
|
||||
const load = () => {
|
||||
let arr = props.name.split(/-(.*)/);
|
||||
type.value = arr[0];
|
||||
name.value = arr[1];
|
||||
};
|
||||
|
||||
load();
|
||||
|
||||
watch(() => props.name, () => {
|
||||
load();
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -1,71 +1,145 @@
|
||||
<template>
|
||||
<el-popover trigger="click" v-model:visible="visible">
|
||||
<template #reference>
|
||||
<slot name="reference"></slot>
|
||||
</template>
|
||||
<div class="flex w-full flex-col">
|
||||
<div class="head flex w-full mb-[10px]">
|
||||
<span>请选择图标</span>
|
||||
<div class="flex justify-end flex-auto">
|
||||
<span class="ml-[10px] cursor-pointer" :class="{ active: type == 'element' }" @click="type = 'element'">element</span>
|
||||
<span class="ml-[10px] cursor-pointer" :class="{ active: type == 'iconfont' }" @click="type = 'iconfont'">iconfont</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="icon-wrap h-[240px]">
|
||||
<el-scrollbar>
|
||||
<div class="flex flex-wrap" v-show="type == 'element'">
|
||||
<el-button v-for="icon in element" class="w-[35px] h-[35px] icon-item" @click="selectIcon('element-' + icon)">
|
||||
<icon :name="'element-' + icon" />
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="flex flex-wrap" v-show="type == 'iconfont'">
|
||||
<el-button v-for="icon in iconfont" class="w-[35px] h-[35px] icon-item" @click="selectIcon('iconfont-' + icon)">
|
||||
<icon :name="'iconfont-' + icon" />
|
||||
</el-button>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
<div class="flex flex-wrap">
|
||||
<template v-if="limit == 1">
|
||||
<div class="rounded cursor-pointer overflow-hidden relative border border-dashed border-color icon-wrap mr-[10px]" :style="style">
|
||||
<div class="w-full h-full relative" v-if="icons.data.length">
|
||||
<div class="w-full h-full flex items-center justify-center">
|
||||
<icon :name="icons.data[0]" size="40px"></icon>
|
||||
</div>
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="element-Delete" color="#fff" size="18px" @click="removeIcon"/>
|
||||
</div>
|
||||
</div>
|
||||
<upload-attachment :limit="limit" type="icon" @confirm="confirmSelect" v-else>
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="element-Plus" size="20px" color="var(--el-text-color-secondary)"/>
|
||||
<div class="leading-none text-xs mt-[10px] text-secondary">{{ iconText || t('upload.selecticon') }}</div>
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="rounded cursor-pointer overflow-hidden relative border border-dashed border-color icon-wrap mr-[10px]" :style="style" v-for="(item, index) in icons.data" :key="index">
|
||||
<div class="w-full h-full relative">
|
||||
<div class="w-full h-full flex items-center justify-center">
|
||||
<icon :name="item" size="40px"></icon>
|
||||
</div>
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="element-Delete" color="#fff" size="18px" @click="removeIcon(index)"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rounded cursor-pointer overflow-hidden relative border border-dashed border-color" :style="style" v-if="icons.data.length < limit">
|
||||
<upload-attachment :limit="limit" @confirm="confirmSelect">
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="element-Plus" size="20px" color="var(--el-text-color-secondary)"/>
|
||||
<div class="leading-none text-xs mt-[10px] text-secondary">{{ iconText || t('upload.selecticon') }}</div>
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, ref } from 'vue'
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
import {computed, reactive, watch, toRaw} from 'vue'
|
||||
import {t} from '@/lang'
|
||||
|
||||
const type = ref('element')
|
||||
const visible = ref('false')
|
||||
|
||||
// element 图标
|
||||
const element = computed(() => {
|
||||
return Object.keys(ElementPlusIconsVue)
|
||||
})
|
||||
|
||||
// iconfont 图标
|
||||
const iconfont = computed(() => {
|
||||
const iconfile = import.meta.globEager('@/styles/iconfont.css')['/src/styles/iconfont.css'].default
|
||||
const icons = Array.from(iconfile.matchAll(/(icon.*)\:before/g))
|
||||
|
||||
return icons.map(item => {
|
||||
return item[1]
|
||||
const prop = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100px'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100px'
|
||||
},
|
||||
iconText: {
|
||||
type: String
|
||||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const emit = defineEmits(['select'])
|
||||
const emit = defineEmits(['update:modelValue', 'change'])
|
||||
|
||||
const value = computed({
|
||||
get() {
|
||||
return prop.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
})
|
||||
|
||||
const icons: Record<string, any> = reactive({
|
||||
data: []
|
||||
})
|
||||
|
||||
const setValue = () => {
|
||||
value.value = toRaw(icons.data).toString()
|
||||
}
|
||||
|
||||
watch(() => value.value, () => {
|
||||
icons.data = [
|
||||
...value.value.split(',').filter((item: string) => {
|
||||
return item
|
||||
})
|
||||
]
|
||||
setValue()
|
||||
}, {immediate: true})
|
||||
|
||||
const style = computed(() => {
|
||||
return {
|
||||
width: prop.width,
|
||||
height: prop.height
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* 选择图标
|
||||
*/
|
||||
const confirmSelect = (data: Record<string, any>) => {
|
||||
if (prop.limit == 1) {
|
||||
icons.data.splice(0, 1)
|
||||
data && icons.data.push(data.url)
|
||||
} else {
|
||||
data.forEach((item: any) => {
|
||||
if (icons.data.length < prop.limit) icons.data.push(item.url)
|
||||
})
|
||||
}
|
||||
setValue()
|
||||
emit('change', value.value)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除图标
|
||||
* @param index
|
||||
*/
|
||||
const removeIcon = (index: number = 0) => {
|
||||
icons.data.splice(index, 1)
|
||||
setValue()
|
||||
}
|
||||
|
||||
// 选择图标
|
||||
const selectIcon = (name) => {
|
||||
emit('select', name)
|
||||
visible.value = false
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.icon-item {
|
||||
margin: 6px 6px 6px 0;
|
||||
}
|
||||
.icon-wrap {
|
||||
.operation {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.active {
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
&:hover {
|
||||
.operation {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,157 +1,158 @@
|
||||
<template>
|
||||
<div class="flex flex-wrap">
|
||||
<template v-if="limit == 1">
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style">
|
||||
<template v-if="videos.data.length">
|
||||
<div class="w-full h-full relative flex items-center overflow-hidden rounded">
|
||||
<video :src="img(videos.data[0])" class="w-full" />
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="iconfont-icon24gf-playCircle" color="#fff" size="25px" @click="previewVideo()" />
|
||||
</div>
|
||||
</div>
|
||||
<icon name="element-CircleCloseFilled" color="#bbb" size="18px" @click="removeVideo" class="absolute z-[2] top-[-9px] right-[-9px]" />
|
||||
</template>
|
||||
<upload-attachment :limit="limit" type="video" @confirm="confirmSelect" v-else>
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="iconfont-icon24gf-playCircle" size="25px" color="var(--el-text-color-secondary)" />
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style"
|
||||
v-for="(item, index) in videos.data" :key="index">
|
||||
<div class="w-full h-full relative flex items-center overflow-hidden rounded">
|
||||
<video :src="img(item)" class="w-full" />
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="iconfont-icon24gf-playCircle" color="#fff" size="25px" @click="previewVideo(index)" />
|
||||
</div>
|
||||
</div>
|
||||
<icon name="element-CircleCloseFilled" color="#bbb" size="18px" @click="removeVideo(index)" class="absolute z-[2] top-[-9px] right-[-9px]" />
|
||||
</div>
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style" v-if="videos.data.length < limit">
|
||||
<upload-attachment :limit="limit" type="video" @confirm="confirmSelect">
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="iconfont-icon24gf-playCircle" size="25px" color="var(--el-text-color-secondary)" />
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
<div class="flex flex-wrap">
|
||||
<template v-if="limit == 1">
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style">
|
||||
<template v-if="videos.data.length">
|
||||
<div class="w-full h-full relative flex items-center overflow-hidden rounded">
|
||||
<video :src="img(videos.data[0])" class="w-full"/>
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="iconfont-icon24gf-playCircle" color="#fff" size="25px" @click="previewVideo()"/>
|
||||
</div>
|
||||
</div>
|
||||
<icon name="element-CircleCloseFilled" color="#bbb" size="18px" @click="removeVideo" class="absolute z-[2] top-[-9px] right-[-9px]"/>
|
||||
</template>
|
||||
<upload-attachment :limit="limit" type="video" @confirm="confirmSelect" v-else>
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="iconfont-icon24gf-playCircle" size="25px" color="var(--el-text-color-secondary)"/>
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style" v-for="(item, index) in videos.data" :key="index">
|
||||
<div class="w-full h-full relative flex items-center overflow-hidden rounded">
|
||||
<video :src="img(item)" class="w-full"/>
|
||||
<div class="absolute z-[1] flex items-center justify-center w-full h-full inset-0 bg-black bg-opacity-60 operation">
|
||||
<icon name="iconfont-icon24gf-playCircle" color="#fff" size="25px" @click="previewVideo(index)"/>
|
||||
</div>
|
||||
</div>
|
||||
<icon name="element-CircleCloseFilled" color="#bbb" size="18px" @click="removeVideo(index)" class="absolute z-[2] top-[-9px] right-[-9px]"/>
|
||||
</div>
|
||||
<div class="rounded cursor-pointer relative bg-page video-wrap mr-[10px]" :style="style" v-if="videos.data.length < limit">
|
||||
<upload-attachment :limit="limit" type="video" @confirm="confirmSelect">
|
||||
<div class="w-full h-full flex items-center justify-center flex-col">
|
||||
<icon name="iconfont-icon24gf-playCircle" size="25px" color="var(--el-text-color-secondary)"/>
|
||||
</div>
|
||||
</upload-attachment>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 视频预览 -->
|
||||
<el-dialog v-model="videoViewer.visible" width="50%" align-center :destroy-on-close="true" custom-class="video-preview">
|
||||
<video-player :src="videoViewer.src" width="100%" />
|
||||
</el-dialog>
|
||||
<!-- 视频预览 -->
|
||||
<el-dialog v-model="videoViewer.visible" width="50%" align-center :destroy-on-close="true" custom-class="video-preview">
|
||||
<video-player :src="videoViewer.src" width="100%"/>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, reactive, watch, toRaw } from 'vue'
|
||||
import { img } from '@/utils/common'
|
||||
import {computed, reactive, watch, toRaw} from 'vue'
|
||||
import {img} from '@/utils/common'
|
||||
|
||||
const prop = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100px'
|
||||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 1
|
||||
const prop = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100px'
|
||||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
|
||||
const value = computed({
|
||||
get() {
|
||||
return prop.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
})
|
||||
|
||||
const videos: Record<string, any> = reactive({
|
||||
data: []
|
||||
})
|
||||
|
||||
watch(() => value.value, () => {
|
||||
videos.data = [
|
||||
...value.value.split(',').filter((item: string) => {
|
||||
return item
|
||||
})
|
||||
]
|
||||
setValue()
|
||||
})
|
||||
|
||||
const style = computed(() => {
|
||||
return {
|
||||
width: prop.width,
|
||||
height: prop.height
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* 选择视频
|
||||
*/
|
||||
const confirmSelect = (data: Record<string, any>) => {
|
||||
if (prop.limit == 1) {
|
||||
videos.data.splice(0, 1)
|
||||
data && videos.data.push(data.url)
|
||||
} else {
|
||||
data.forEach((item: any) => {
|
||||
if (videos.data.length < prop.limit) videos.data.push(item.url)
|
||||
})
|
||||
}
|
||||
setValue()
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
|
||||
const value = computed({
|
||||
get() {
|
||||
return prop.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
/**
|
||||
* 删除视频
|
||||
* @param index
|
||||
*/
|
||||
const removeVideo = (index: number = 0) => {
|
||||
videos.data.splice(index, 1)
|
||||
setValue()
|
||||
}
|
||||
})
|
||||
|
||||
const videos: Record<string, any> = reactive({
|
||||
data: []
|
||||
})
|
||||
|
||||
watch(() => value.value, () => {
|
||||
videos.data = [
|
||||
...value.value.split(',').filter((item: string) => { return item })
|
||||
]
|
||||
setValue()
|
||||
})
|
||||
|
||||
const style = computed(() => {
|
||||
return {
|
||||
width: prop.width,
|
||||
height: prop.height
|
||||
const setValue = () => {
|
||||
value.value = toRaw(videos.data).toString()
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* 选择视频
|
||||
*/
|
||||
const confirmSelect = (data: Record<string, any>) => {
|
||||
if (prop.limit == 1) {
|
||||
videos.data.splice(0, 1)
|
||||
data && videos.data.push(data.url)
|
||||
} else {
|
||||
data.forEach((item: any) => {
|
||||
if (videos.data.length < prop.limit) videos.data.push(item.url)
|
||||
})
|
||||
/**
|
||||
* 查看视频
|
||||
*/
|
||||
const videoViewer = reactive({
|
||||
visible: false,
|
||||
src: ''
|
||||
})
|
||||
const previewVideo = (index: number = 0) => {
|
||||
videoViewer.visible = true
|
||||
videoViewer.src = img(videos.data[index])
|
||||
}
|
||||
setValue()
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除视频
|
||||
* @param index
|
||||
*/
|
||||
const removeVideo = (index: number = 0) => {
|
||||
videos.data.splice(index, 1)
|
||||
setValue()
|
||||
}
|
||||
|
||||
const setValue = () => {
|
||||
value.value = toRaw(videos.data).toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看视频
|
||||
*/
|
||||
const videoViewer = reactive({
|
||||
visible: false,
|
||||
src: ''
|
||||
})
|
||||
const previewVideo = (index: number = 0) => {
|
||||
videoViewer.visible = true
|
||||
videoViewer.src = img(videos.data[index])
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.video-preview {
|
||||
background: none !important;
|
||||
box-shadow: none !important;
|
||||
.video-preview {
|
||||
background: none !important;
|
||||
box-shadow: none !important;
|
||||
|
||||
.el-dialog__headerbtn .el-dialog__close {
|
||||
border-radius: 50%;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
font-size: 24px;
|
||||
color: #fff;
|
||||
background-color: var(--el-text-color-regular);
|
||||
border-color: #fff;
|
||||
}
|
||||
}
|
||||
.el-dialog__headerbtn .el-dialog__close {
|
||||
border-radius: 50%;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
font-size: 24px;
|
||||
color: #fff;
|
||||
background-color: var(--el-text-color-regular);
|
||||
border-color: #fff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -44,7 +44,6 @@ class Language {
|
||||
this.setI18nLanguage(locale)
|
||||
return nextTick()
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
this.setI18nLanguage(locale)
|
||||
return nextTick()
|
||||
}
|
||||
|
||||
14
admin/src/lang/zh-cn/app.authorize.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"companyName": "授权主体",
|
||||
"siteAddress": "授权域名",
|
||||
"contactName": "授权联系人",
|
||||
"authCode": "授权码",
|
||||
"authSecret": "授权秘钥",
|
||||
"createTime": "授权时间",
|
||||
"expireTime": "到期时间",
|
||||
"authApp": "授权应用",
|
||||
"authAppKey": "应用标识",
|
||||
"siteAddressTips": "授权域名不匹配",
|
||||
"authCodePlaceholder": "请输入核销码",
|
||||
"authSecretPlaceholder": "请输入授权秘钥"
|
||||
}
|
||||
@ -28,5 +28,10 @@
|
||||
"jobError": "任务队列未启动 请在服务端源码部署目录打开终端执行 php think queue:listen",
|
||||
"conflictFiles": "冲突文件",
|
||||
"process": "启动进程",
|
||||
"open": "开启"
|
||||
"open": "开启",
|
||||
"down": "下载",
|
||||
"addonVersion": "插件版本",
|
||||
"versionCode": "版本号",
|
||||
"createTime": "发布时间",
|
||||
"buyLabel": "已购买"
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
{
|
||||
"menuName": "菜单名称",
|
||||
"menuType": "类型",
|
||||
"authId": "权限标识",
|
||||
"menuTypeDir": "目录",
|
||||
"menuTypeMenu": "菜单",
|
||||
"menuTypeButton": "按钮",
|
||||
"menuDeleteTips": "确定要删除该菜单吗?",
|
||||
"addMenu": "添加菜单",
|
||||
"updateMenu": "编辑菜单",
|
||||
"routePath": "路由路径",
|
||||
"viewPath": "组件路径",
|
||||
"parentMenu": "父级菜单",
|
||||
"menuIcon": "菜单图标",
|
||||
"sort":"权重",
|
||||
"menuKey":"菜单标识",
|
||||
"menuNamePlaceholder": "请输入菜单名称",
|
||||
"menuKeyPlaceholder": "请输入菜单标识",
|
||||
"menuKeyValidata":"菜单标识只能使用字母数字下划线并且开头不能为数字",
|
||||
"routePathPlaceholder": "请输入路由路径",
|
||||
"viewPathPlaceholder": "请输入组件路径",
|
||||
"authIdPlaceholder": "请输入权限标识",
|
||||
"selectIconPlaceholder": "请选择菜单图标",
|
||||
"topLevel": "顶级"
|
||||
}
|
||||
22
admin/src/lang/zh-cn/channel.weapp.code.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"operatePrompt": "操作提示",
|
||||
"operatePromptTipsOne": "下载之后需使用微信开发者工具上传代码,微信开发者工具下载地址",
|
||||
"operatePromptTipsTwo": "上传之后登录微信公众平台,在版本管理中选择刚上传的版本提交审核,审核通过之后即可发布小程序。",
|
||||
"weappName": "小程序名称",
|
||||
"weappId": "小程序ID",
|
||||
"weappOriginalId": "小程序原始ID",
|
||||
"weappInfo": "小程序信息",
|
||||
"versionCode": "小程序代码",
|
||||
"version": "版本",
|
||||
"down": "下载",
|
||||
"codeDown": "代码下载",
|
||||
"downWeappCode": "下载代码",
|
||||
"weappTips": "请先完善小程序配置",
|
||||
"codeDownOneTips": "下载小程序代码包",
|
||||
"codeDownTwoDesc": "上传代码",
|
||||
"codeDownTwoTips": "下载完成之后,使用微信开发工具进行上传",
|
||||
"codeDownThreeDesc": "发布小程序",
|
||||
"codeDownThreeTips": "上传之后提交审核,审核通过发布小程序",
|
||||
"weappVersion": "小程序版本",
|
||||
"close": "关闭"
|
||||
}
|
||||
@ -46,11 +46,13 @@
|
||||
"root": "上传",
|
||||
"selectimage": "选择图片",
|
||||
"selectvideo": "选择视频",
|
||||
"selecticon": "选择图标",
|
||||
"uploadimage": "上传图片",
|
||||
"uploadvideo": "上传视频",
|
||||
"addAttachmentCategory": "添加分组",
|
||||
"attachmentCategoryPlaceholder": "请输入分组名称",
|
||||
"attachmentEmpty": "暂无附件,请点击上传按钮上传",
|
||||
"iconEmpty": "暂无图标",
|
||||
"deleteCategoryTips": "确定要删除该分组吗?",
|
||||
"deleteAttachmentTips": "确定要删除所选附件吗?如所选附件已被使用删除将会受到影响,请谨慎操作!",
|
||||
"move": "移动",
|
||||
@ -58,6 +60,7 @@
|
||||
"moveTo": "移动至",
|
||||
"placeholderimageName": "请输入图片名称",
|
||||
"placeholdervideoName": "请输入视频名称",
|
||||
"placeholdericonName": "请输入图标名称",
|
||||
"success": "上传成功",
|
||||
"triggerUpperLimit": "可选数量已达上限"
|
||||
},
|
||||
@ -73,7 +76,8 @@
|
||||
"themeColor": "主题颜色",
|
||||
"detectionLoginOperation": "确定",
|
||||
"detectionLoginContent": "已检测到有其他账号登录,需要刷新后才能继续操作。",
|
||||
"detectionLoginTip": "提示"
|
||||
"detectionLoginTip": "提示",
|
||||
"layoutStyle": "布局风格"
|
||||
},
|
||||
"axios": {
|
||||
"unknownError": "未知错误",
|
||||
@ -90,7 +94,9 @@
|
||||
"503": "服务不可用",
|
||||
"504": "网络超时",
|
||||
"505": "http版本不支持该请求",
|
||||
"timeout": "网络请求超时!"
|
||||
"timeout": "网络请求超时!",
|
||||
"requestError": "请求错误",
|
||||
"errNetwork": "网络请求错误"
|
||||
},
|
||||
"linkPlaceholder": "请选择跳转链接",
|
||||
"selectLinkTips": "链接选择",
|
||||
@ -105,5 +111,8 @@
|
||||
"emptyApp": "暂未安装任何应用",
|
||||
"newInfo": "最新消息",
|
||||
"mapSetting": "地图设置",
|
||||
"mapKey": "腾讯地图KEY"
|
||||
"mapKey": "腾讯地图KEY",
|
||||
"indexTemplate": "首页模版",
|
||||
"indexSwitch": "切换首页",
|
||||
"indexWarning": "你确定要切换首页吗?"
|
||||
}
|
||||
@ -109,5 +109,15 @@
|
||||
"more": "文字",
|
||||
"morePlaceholder": "请输入文字",
|
||||
"moreIsShow": "是否显示",
|
||||
"memberStyle": "会员样式"
|
||||
"memberStyle": "会员样式",
|
||||
"template": "模板",
|
||||
"imageGap": "图片间隙",
|
||||
"rubikCubeStyle": "魔方样式",
|
||||
"hotArea": "热区",
|
||||
"hotAreaSet": "热区设置",
|
||||
"addHotArea": "添加热区",
|
||||
"selectedAfterHotArea": "个热区",
|
||||
"hotAreaManage": "热区管理",
|
||||
"selectedHotArea": "请选择热区",
|
||||
"hotAreaLink": "的链接地址"
|
||||
}
|
||||
12
admin/src/lang/zh-cn/decorate.preview.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"preview": "预览",
|
||||
"weapp": "微信小程序",
|
||||
"wechat": "微信公众号",
|
||||
"link": "链接",
|
||||
"copy": "复制",
|
||||
"copySuccess": "复制成功",
|
||||
"weappNotSet": "小程序未配置",
|
||||
"developTitle": "开发环境配置",
|
||||
"wapDomain": "wap域名(WAP_DOMAIN)",
|
||||
"wapDomainPlaceholder": "请输入wap域名"
|
||||
}
|
||||
@ -1,9 +1,26 @@
|
||||
{
|
||||
"developTitle": "开发环境配置",
|
||||
"wapDomain": "wap域名(WAP_DOMAIN)",
|
||||
"wapDomainPlaceholder": "请输入wap域名",
|
||||
"pageSet": "页面设置",
|
||||
"tabEditContent": "内容",
|
||||
"tabEditStyle": "样式",
|
||||
"pageStyle": "页面样式",
|
||||
"pageContent": "页面内容",
|
||||
"pageName": "页面名称",
|
||||
"pageNamePlaceholder": "请输入页面名称",
|
||||
"pageBgColor": "页面颜色",
|
||||
"bgUrl": "背景图片",
|
||||
"marginSet": "边距设置",
|
||||
"componentStyleTitle": "组件样式",
|
||||
"bottomBgColor": "底部背景",
|
||||
"bottomBgTips": "底部背景包含边距和圆角",
|
||||
"componentBgColor": "组件背景",
|
||||
"marginTop": "上边距",
|
||||
"marginBottom": "下边距",
|
||||
"marginBoth": "左右边距",
|
||||
"topRounded": "上圆角",
|
||||
"bottomRounded": "下圆角",
|
||||
"warmPrompt": "温馨提示",
|
||||
"leavePageTitleTips": "确定离开此页面?",
|
||||
"leavePageContentTips": "系统可能不会保存您所做的更改。",
|
||||
@ -27,7 +44,12 @@
|
||||
"imageAdsTips": "建议上传尺寸相同的图片,推荐尺寸750*350",
|
||||
"addImageAd": "添加图片",
|
||||
"imageUrlTip": "请上传图片",
|
||||
"imageHeight": "图片高度",
|
||||
"imageHeightPlaceholder": "请输入图片高度",
|
||||
"imageHeightRegNum": "图片高度格式错误,请输入数字",
|
||||
"articleData": "文章数据",
|
||||
"articleStyle": "文章样式",
|
||||
"articleBgColor": "文章背景",
|
||||
"dataSources": "数据来源",
|
||||
"defaultSources": "默认",
|
||||
"manualSelectionSources": "手动选择",
|
||||
@ -65,6 +87,7 @@
|
||||
"addGraphicNav": "添加导航",
|
||||
"blankHeightSet": "高度设置",
|
||||
"blankHeight": "空白高度",
|
||||
"styleSet": "风格设置",
|
||||
"titleStyle": "标题样式",
|
||||
"selectStyle": "风格选择",
|
||||
"titleContent": "标题内容",
|
||||
@ -73,6 +96,7 @@
|
||||
"textAlign": "对齐方式",
|
||||
"textAlignLeft": "居左",
|
||||
"textAlignCenter": "居中",
|
||||
"textSet": "文字设置",
|
||||
"textFontSize": "文字大小",
|
||||
"textFontWeight": "文字粗细",
|
||||
"fontWeightBold": "加粗",
|
||||
@ -84,5 +108,16 @@
|
||||
"moreContent": "“更多”按钮内容",
|
||||
"more": "文字",
|
||||
"morePlaceholder": "请输入文字",
|
||||
"moreIsShow": "是否显示"
|
||||
"moreIsShow": "是否显示",
|
||||
"memberStyle": "会员样式",
|
||||
"template": "模板",
|
||||
"imageGap": "图片间隙",
|
||||
"rubikCubeStyle": "魔方样式",
|
||||
"hotArea": "热区",
|
||||
"hotAreaSet": "热区设置",
|
||||
"addHotArea": "添加热区",
|
||||
"selectedAfterHotArea": "个热区",
|
||||
"hotAreaManage": "热区管理",
|
||||
"selectedHotArea": "请选择热区",
|
||||
"hotAreaLink": "的链接地址"
|
||||
}
|
||||
@ -1,12 +1,19 @@
|
||||
{
|
||||
"decorate": "装修",
|
||||
"pageDecorate": "页面装修",
|
||||
"changeTemplate": "切换模板",
|
||||
"templateName": "模板名称",
|
||||
"preview": "预览",
|
||||
"weapp": "微信小程序",
|
||||
"wechat": "微信公众号",
|
||||
"link": "链接",
|
||||
"copy": "复制",
|
||||
"copySuccess": "复制成功",
|
||||
"weappNotSet": "小程序未配置",
|
||||
"hopeBeforeTip": "我希望把",
|
||||
"hopeAfterTip": "切换成其他样式",
|
||||
"changeTemplateTip": "选择",
|
||||
"template": "模板",
|
||||
"changeMyPageTip": "选择微页面作为",
|
||||
"createPage": "创建微页面",
|
||||
"myPage": "我的微页面",
|
||||
"refreshPage": "刷新",
|
||||
"placeholderTemplate": "请选择一个模板",
|
||||
"placeholderMyPage": "请选择一个微页面",
|
||||
"developTitle": "开发环境配置",
|
||||
"wapDomain": "wap域名(WAP_DOMAIN)",
|
||||
"wapDomainPlaceholder": "请输入wap域名"
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
{
|
||||
"title": "页面名称",
|
||||
"typeName": "页面模板",
|
||||
"addType": "页面类型",
|
||||
"addPageTips": "创建新页面",
|
||||
"pageTemplatePlaceholder": "请选择页面模板",
|
||||
"pageTypePlaceholder": "请选择页面模板",
|
||||
"nameMax": "名称不能超过12个字符",
|
||||
"templateName": "模板名称",
|
||||
"empty": "空白",
|
||||
"templateName": "已有模板",
|
||||
"emptyTemplate": "空模板",
|
||||
"status": "状态",
|
||||
"updateTime": "更新时间",
|
||||
"use": "使用",
|
||||
|
||||
13
admin/src/lang/zh-cn/diy.preview.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"preview": "预览",
|
||||
"h5": "H5",
|
||||
"weapp": "微信小程序",
|
||||
"wechat": "微信公众号",
|
||||
"link": "链接",
|
||||
"copy": "复制",
|
||||
"copySuccess": "复制成功",
|
||||
"weappNotSet": "小程序未配置",
|
||||
"developTitle": "开发环境配置",
|
||||
"wapDomain": "wap域名(WAP_DOMAIN)",
|
||||
"wapDomainPlaceholder": "请输入wap域名"
|
||||
}
|
||||
36
admin/src/lang/zh-cn/diy.route.json
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"title": "页面名称",
|
||||
"typeName": "页面模板",
|
||||
"addPageTips": "创建新页面",
|
||||
"pageTemplatePlaceholder": "请选择页面模板",
|
||||
"nameMax": "名称不能超过12个字符",
|
||||
"templateName": "模板名称",
|
||||
"empty": "空白",
|
||||
"status": "状态",
|
||||
"updateTime": "更新时间",
|
||||
"use": "使用",
|
||||
"isUse": "使用中",
|
||||
"unused": "未使用",
|
||||
"all": "全部",
|
||||
"basicRoute": "基础页面",
|
||||
"diyPage": "自定义页面",
|
||||
"wapUrl": "wap链接",
|
||||
"weappUrl": "小程序链接",
|
||||
"shareLink": "分享链接",
|
||||
"copy": "复制",
|
||||
"copySuccess": "复制成功",
|
||||
"titlePlaceholder": "请输入页面名称",
|
||||
"addDiyPage": "添加页面",
|
||||
"diyPageDeleteTips": "确定要删除该自定义页面吗?",
|
||||
"promote": "推广",
|
||||
"share": "分享",
|
||||
"shareSet": "分享设置",
|
||||
"sharePage": "分享页面",
|
||||
"wechat": "微信公众号",
|
||||
"weapp": "微信小程序",
|
||||
"shareTitle": "分享标题",
|
||||
"shareTitlePlaceholder": "请输入分享标题",
|
||||
"shareDesc": "分享描述",
|
||||
"shareDescPlaceholder": "请输入分享描述",
|
||||
"shareImageUrl": "分享图片"
|
||||
}
|
||||
26
admin/src/lang/zh-cn/finance.account.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"id":"主键",
|
||||
"accountDetail":"账单详情",
|
||||
"detail":"详情",
|
||||
"type":"账单类型",
|
||||
"money":"账单金额",
|
||||
"moneyPlaceholder":"请输入账单金额",
|
||||
"tradeNo":"账单编号",
|
||||
"tradeNoPlaceholder":"请输入账单编号",
|
||||
"createTime":"账单日期",
|
||||
"totalPay":"累计收款(元)",
|
||||
"totalRefund":"累计退款(元)",
|
||||
"totalTransfer":"累计转账(元)",
|
||||
"accountType": "请选择退款类型",
|
||||
"startDate": "开始时间",
|
||||
"endDate": "结束时间",
|
||||
"transferNo" : "转账单号",
|
||||
"transferTime": "转账时间",
|
||||
"transferType": "转账类型",
|
||||
"transferMoney": "转账金额",
|
||||
"transferRemark": "转账说明",
|
||||
"outTradeNo": "单号",
|
||||
"refundMoney": "退款金额",
|
||||
"failReason": "退款说明",
|
||||
"body": "说明"
|
||||
}
|
||||
18
admin/src/lang/zh-cn/finance.offlinepay.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"money":"支付金额",
|
||||
"outTradeNo": "交易流水号",
|
||||
"voucher": "支付凭证",
|
||||
"body": "支付内容",
|
||||
"pass": "通过",
|
||||
"refuse": "拒绝",
|
||||
"refuseReason": "拒绝原因",
|
||||
"passTips": "确认要通过该支付单据吗?",
|
||||
"startDate": "开始时间",
|
||||
"endDate": "结束时间",
|
||||
"outTradeNoPlaceholder":"请输入交易流水号",
|
||||
"detail": "详情",
|
||||
"waitAudit": "待审核",
|
||||
"passed": "已通过",
|
||||
"notPass": "未通过",
|
||||
"all": "全部"
|
||||
}
|
||||
18
admin/src/lang/zh-cn/finance.pay_detail.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"pass": "通过",
|
||||
"refuse": "拒绝",
|
||||
"refuseReason": "拒绝原因",
|
||||
"passTips": "确认要通过该支付单据吗?",
|
||||
"outTradeNo": "交易单号",
|
||||
"createTime": "交易时间",
|
||||
"money": "交易金额",
|
||||
"body": "交易内容",
|
||||
"channel": "支付场景",
|
||||
"payStatus": "支付状态",
|
||||
"payType": "支付方式",
|
||||
"payTime": "支付时间",
|
||||
"failTime": "失败时间",
|
||||
"failReason": "失败原因",
|
||||
"voucher": "支付凭证",
|
||||
"auditVoucher": "审核支付凭证"
|
||||
}
|
||||
@ -40,5 +40,28 @@
|
||||
"accumulative":"累计",
|
||||
"officialAccount": "Niucloud官方公众号",
|
||||
"officialAccountDesc": "微信扫码关注",
|
||||
"WeCom": "添加企业微信群"
|
||||
"WeCom": "添加企业微信群",
|
||||
"path": "地址",
|
||||
"menuName": "名称",
|
||||
"menuNamePlaceholder": "模版名称",
|
||||
"menuBgColor": "背景颜色",
|
||||
"menuImg": "选择图标",
|
||||
"menuDesc": "描述",
|
||||
"addShortcutMenu": "添加快捷模版",
|
||||
"appTemplate": "应用模块",
|
||||
"siteType": "站点类型",
|
||||
"periodTime": "有效期",
|
||||
"renew": "续费",
|
||||
"selectModel": "选择模块",
|
||||
"addMenu": "添加模块",
|
||||
"shortcutLink": "模版",
|
||||
"emptyMenu": "暂无快捷模块",
|
||||
"select": "选择",
|
||||
"custom": "自定义",
|
||||
"accessSite": "访问站点",
|
||||
"pathSelect": "选择模块",
|
||||
"bgColorPlaceholder": "请选择背景色",
|
||||
"iconPlaceholder": "请选择图标",
|
||||
"pathPlaceholder": "请选择链接",
|
||||
"descPlaceholder": "输入描述语…"
|
||||
}
|
||||
@ -17,6 +17,5 @@
|
||||
"weappTempKey" : "模板编号",
|
||||
"smsId":"短信模版ID",
|
||||
"smsIdPlaceholder":"短信模版ID",
|
||||
"noticeType":"消息类型"
|
||||
|
||||
"noticeType":"消息类型"
|
||||
}
|
||||
@ -9,6 +9,7 @@
|
||||
"config": "设置",
|
||||
"updateWechat": "微信支付",
|
||||
"updateAlipay": "支付宝支付",
|
||||
"updateOfflinepay": "线下支付",
|
||||
"mchId": "商户号",
|
||||
"mchIdPlaceholder": "请输入商户号",
|
||||
"mchIdTips": "微信支付商户号(MCHID)",
|
||||
@ -48,6 +49,13 @@
|
||||
"setConfig": "设置支付配置",
|
||||
"open": "已开启",
|
||||
"notOpen": "未开启",
|
||||
"cancel": "取消"
|
||||
|
||||
"cancel": "取消",
|
||||
"collectionName": "收款账户名称",
|
||||
"collectionBank": "收款银行",
|
||||
"collectionAccount": "收款账号",
|
||||
"collectionDesc": "转账说明",
|
||||
"collectionNamePlaceholder": "请输入收款账户名称",
|
||||
"collectionBankPlaceholder": "请输入收款银行",
|
||||
"collectionAccountPlaceholder": "请输入收款账号",
|
||||
"collectionDescPlaceholder": "请输入转账说明"
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
"contactAddress":"联系地址",
|
||||
"siteName": "站点名称",
|
||||
"keywords": "网站关键字",
|
||||
"logo": "网站Logo",
|
||||
"logo": "长方形Logo",
|
||||
"desc": "网站简介",
|
||||
"province": "省",
|
||||
"city": "市",
|
||||
@ -15,7 +15,6 @@
|
||||
"contactAddressPlaceholder":"联系地址",
|
||||
"siteNamePlaceholder": "站点名称",
|
||||
"keywordsPlaceholder": "网站关键字",
|
||||
"logoPlaceholder": "网站Logo",
|
||||
"descPlaceholder": "网站简介",
|
||||
"addressPlaceholder": "详细地址",
|
||||
"phonePlaceholder": "客服电话",
|
||||
@ -25,10 +24,12 @@
|
||||
"frontEndName": "前台名称",
|
||||
"frontEndNamePlaceholder": "请输入前台名称",
|
||||
"frontEndLogo": "前台Logo",
|
||||
"icon": "网站图标",
|
||||
"icon": "正方形Logo",
|
||||
"serviceInformation": "服务信息",
|
||||
"wechatCode": "公众号二维码",
|
||||
"customerServiceCode": "客服二维码",
|
||||
"contactsTel": "联系电话",
|
||||
"contactsTelPlaceholder": "请输入联系电话"
|
||||
}
|
||||
"contactsTelPlaceholder": "请输入联系电话",
|
||||
"logoPlaceholder": "建议图片尺寸:210*30像素;图片格式:jpg、png、jpeg。",
|
||||
"iconPlaceholder": "建议图片尺寸:100*100像素;图片格式:jpg、png、jpeg。"
|
||||
}
|
||||
|
||||
12
admin/src/lang/zh-cn/setting.weapp.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"addVersion": "上传版本",
|
||||
"version": "版本号",
|
||||
"versionPlaceholder": "请添加版本号",
|
||||
"createTime": "创建时间",
|
||||
"status": "状态",
|
||||
"editVersion": "添加/编辑版本",
|
||||
"file": "文件",
|
||||
"filePlaceholder":"请上传版本文件",
|
||||
"desc": "版本说明",
|
||||
"weappVersionDeleteTips": "确定要删除小程序版本吗"
|
||||
}
|
||||
@ -34,6 +34,8 @@
|
||||
"columnComment": "字段描述",
|
||||
"columnType": "类型",
|
||||
"fieldAttribute": "字段属性",
|
||||
"addAndEdit":"添加编辑",
|
||||
"listSearch":"列表查询",
|
||||
"isPk":"是否主键",
|
||||
"isRequired":"是否必填",
|
||||
"isInsert":"是否添加",
|
||||
@ -41,7 +43,7 @@
|
||||
"isLists":"列表展示",
|
||||
"isSearch":"是否搜索",
|
||||
"isQuery":"是否查询",
|
||||
"queryType":"查询方式",
|
||||
"queryType":"搜索方式",
|
||||
"viewType":"显示方式",
|
||||
"pkRepeatTip": "只能添加一个主键",
|
||||
"formInput":"文本框",
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
{
|
||||
"title": "名称",
|
||||
"cronInfo": "任务详情",
|
||||
"type": "任务类型",
|
||||
"lastTime": "最后执行时间",
|
||||
"startDate":"开始时间",
|
||||
"cron":"定时执行",
|
||||
"endDate":"结束时间",
|
||||
"titlePlaceholder": "请输入任务名称",
|
||||
"typeName":"任务类型",
|
||||
"crondType":"任务周期",
|
||||
"count":"已执行次数",
|
||||
"nextTime":"下次执行时间",
|
||||
"task":"任务命令",
|
||||
"data":"附加参数",
|
||||
"statusDesc":"最后执行结果"
|
||||
}
|
||||
33
admin/src/lang/zh-cn/tools.schedule.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"title": "名称",
|
||||
"cronInfo": "任务详情",
|
||||
"type": "任务类型",
|
||||
"lastTime": "最后执行时间",
|
||||
"startDate":"开始时间",
|
||||
"cron":"定时执行",
|
||||
"endDate":"结束时间",
|
||||
"titlePlaceholder": "请选择任务模版",
|
||||
"typeName":"任务类型",
|
||||
"crondType":"任务周期",
|
||||
"count":"已执行次数",
|
||||
"nextTime":"下次执行时间",
|
||||
"task":"任务命令",
|
||||
"data":"附加参数",
|
||||
"statusDesc":"最后执行结果",
|
||||
"key": "key",
|
||||
"timeClass": "时间类型",
|
||||
"executeTime": "执行时间",
|
||||
"editCron": "编辑任务",
|
||||
"cronTemplate": "任务模版",
|
||||
"cronTime": "任务周期",
|
||||
"openStatus": "任务状态",
|
||||
"isopen": "是否启用",
|
||||
"day": "日",
|
||||
"hour": "时",
|
||||
"min": "分",
|
||||
"cronDeleteTips": "你确定要删除任务吗",
|
||||
"addCron": "添加任务",
|
||||
"cronTimeTips": "任务周期时间不能为空",
|
||||
"cronTipsOne": "启动计划任务方式:",
|
||||
"cronTipsTwo": "1、使用命令启动:php think cron:schedule 如果更改了任务周期、状态、删除任务等操作后,需要重新启动下 php think cron:schedule 确保生效"
|
||||
}
|
||||
@ -3,8 +3,7 @@
|
||||
<side class="hidden-xs-only" />
|
||||
</el-aside>
|
||||
|
||||
<el-drawer v-model="systemStore.menuDrawer" direction="ltr" :with-header="false" custom-class="aside-drawer"
|
||||
size="210px">
|
||||
<el-drawer v-model="systemStore.menuDrawer" direction="ltr" :with-header="false" custom-class="aside-drawer" size="210px">
|
||||
<template #default>
|
||||
<side />
|
||||
</template>
|
||||
|
||||
@ -14,7 +14,12 @@
|
||||
<icon :name="meta.icon" class="absolute top-[50%] -translate-y-[50%]" />
|
||||
</div>
|
||||
<template #title>
|
||||
<span :class="['ml-[10px]', {'text-[15px]': routes.meta.class == 1}, {'text-[14px]': routes.meta.class != 1}]">{{ meta.title }}</span>
|
||||
<div class="relative">
|
||||
<span :class="['ml-[10px]', {'text-[15px]': routes.meta.class == 1}, {'text-[14px]': routes.meta.class != 1}]">{{ meta.title }}</span>
|
||||
<div v-if="routes.path == '/site/siteindex'" class="absolute top-[50%] -translate-y-[50%] right-[-180%]" @click="checkIndexList">
|
||||
<img class="w-[12px] h-[12px]" src="@/assets/images/index/model_tag.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-menu-item>
|
||||
<el-menu-item v-else :index="String(routes.name)" :route="routePath">
|
||||
@ -23,13 +28,34 @@
|
||||
</template>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
<el-dialog v-model="showDialog" :title="t('indexTemplate')" width="550px" :destroy-on-close="true" >
|
||||
<div class="flex flex-wrap">
|
||||
<div v-for="(items, index) in indexList" :key="index" v-if="index_path == ''">
|
||||
<div @click="index_path = items.view_path" class="index-item py-[5px] px-[10px] mr-[10px] rounded-[3px] cursor-pointer" :class="items.is_use == 1 ? 'bg-primary text-[#fff]' : '' ">
|
||||
<span >{{ items.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-for="(itemTo, indexTo) in indexList" :key="indexTo" v-else>
|
||||
<div @click="index_path = itemTo.view_path" class="index-item py-[5px] px-[10px] mr-[10px] rounded-[3px] cursor-pointer" :class="index_path == itemTo.view_path ? 'bg-primary text-[#fff]' : '' ">
|
||||
<span >{{ itemTo.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submitIndex">{{ t('confirm') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { CollectionTag } from '@element-plus/icons-vue'
|
||||
import { computed } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getIndexList, setIndexList } from '@/api/sys'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { ref, computed } from 'vue'
|
||||
import menuItem from './menu-item.vue'
|
||||
|
||||
const router = useRouter()
|
||||
const props = defineProps({
|
||||
routes: {
|
||||
type: Object,
|
||||
@ -45,6 +71,31 @@ const meta = computed(() => props.routes.meta)
|
||||
const resolvePath = (path: string) => {
|
||||
return `${props.routePath}/${path}`
|
||||
}
|
||||
|
||||
const indexList = ref();
|
||||
const showDialog = ref(false)
|
||||
const checkIndexList = () => {
|
||||
getIndexList().then(res => {
|
||||
showDialog.value = true
|
||||
indexList.value = res.data
|
||||
for(let i = 0 ; i < indexList.value.length; i ++){
|
||||
if(indexList.value[i].is_use == 1){
|
||||
index_path.value = indexList.value[i].view_path
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const index_path = ref('');
|
||||
const submitIndex = () => {
|
||||
setIndexList({
|
||||
view_path: index_path.value
|
||||
}).then(() => {
|
||||
showDialog.value = false
|
||||
router.go(0)
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@ -59,4 +110,13 @@ const resolvePath = (path: string) => {
|
||||
.el-alert .el-alert__description{
|
||||
margin-top: 0;
|
||||
}
|
||||
.index-item {
|
||||
border: 1px solid;
|
||||
border-color: var(--el-color-primary);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background-color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<template>
|
||||
<el-container class="w-100 h-screen"
|
||||
:class="[{ 'sidebar-dark-mode': systemStore.sidebar == 'twoType' }, { 'sidebar-brightness-mode': systemStore.sidebar == 'oneType' }]">
|
||||
<el-container class="w-100 h-screen" :class="[{ 'sidebar-dark-mode': systemStore.sidebar == 'twoType' }, { 'sidebar-brightness-mode': systemStore.sidebar == 'oneType' }]">
|
||||
<el-header class="logo-wrap w-100">
|
||||
<div class="logo flex items-center m-auto max-w-[210px] h-[30px]" v-if="!systemStore.menuIsCollapse">
|
||||
<img class="max-h-full max-w-full" v-if="storage.get('siteInfo').logo" :src="img(siteInfo.logo)" alt="">
|
||||
@ -13,10 +12,8 @@
|
||||
|
||||
<el-main class="menu-wrap">
|
||||
<el-scrollbar>
|
||||
<el-menu :default-active="menuActive" :router="true" class="aside-menu h-full" unique-opened="true"
|
||||
:collapse="systemStore.menuIsCollapse">
|
||||
<menu-item v-for="(route, index) in userStore.routers" :routes="route" :route-path="route.path"
|
||||
:key="index" />
|
||||
<el-menu :default-active="menuActive" :router="true" class="aside-menu h-full" unique-opened="true" :collapse="systemStore.menuIsCollapse">
|
||||
<menu-item v-for="(route, index) in userStore.routers" :routes="route" :route-path="route.path" :key="index" />
|
||||
</el-menu>
|
||||
<div class="h-[48px]"></div>
|
||||
</el-scrollbar>
|
||||
|
||||
@ -23,7 +23,12 @@
|
||||
<el-col :span="12">
|
||||
<div class="right-panel h-full flex items-center justify-end">
|
||||
<!-- 预览 只有站点时展示-->
|
||||
|
||||
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
||||
<!-- 切换首页 -->
|
||||
<div class="navbar-item flex items-center h-full cursor-pointer" v-if="appType == 'site'" @click="checkIndexList">
|
||||
<icon name="iconfont-iconqiehuan" :title="t('indexSwitch')"/>
|
||||
</div>
|
||||
<!-- 切换语言 -->
|
||||
<div class="navbar-item flex items-center h-full cursor-pointer">
|
||||
<switch-lang />
|
||||
@ -55,6 +60,26 @@
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="showDialog" :title="t('indexTemplate')" width="550px" :destroy-on-close="true" >
|
||||
<div class="flex flex-wrap">
|
||||
<div v-for="(items, index) in indexList" :key="index" v-if="index_path == ''">
|
||||
<div @click="index_path = items.view_path" class="index-item py-[5px] px-[10px] mr-[10px] rounded-[3px] cursor-pointer" :class="items.is_use == 1 ? 'bg-primary text-[#fff]' : '' ">
|
||||
<span >{{ items.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-for="(itemTo, indexTo) in indexList" :key="indexTo" v-else>
|
||||
<div @click="index_path = itemTo.view_path" class="index-item py-[5px] px-[10px] mr-[10px] rounded-[3px] cursor-pointer" :class="index_path == itemTo.view_path ? 'bg-primary text-[#fff]' : '' ">
|
||||
<span >{{ itemTo.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submitIndex">{{ t('confirm') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
@ -69,7 +94,8 @@ import useAppStore from '@/stores/modules/app'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { t } from '@/lang'
|
||||
import storage from '@/utils/storage'
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
import { getIndexList, setIndexList } from '@/api/sys'
|
||||
|
||||
const router = useRouter()
|
||||
const appType = storage.get('app_type')
|
||||
const { toggle: toggleFullscreen, isFullscreen } = useFullscreen()
|
||||
@ -138,7 +164,7 @@ const toggleMenuCollapse = () => {
|
||||
|
||||
// 刷新路由
|
||||
const refreshRouter = () => {
|
||||
if (!appStore.routeRefrehTag) return
|
||||
if (!appStore.routeRefreshTag) return
|
||||
appStore.refreshRouterView()
|
||||
}
|
||||
|
||||
@ -153,6 +179,30 @@ const breadcrumb = computed(() => {
|
||||
const backFn = () => {
|
||||
router.go(-1)
|
||||
}
|
||||
|
||||
const indexList = ref();
|
||||
const showDialog = ref(false)
|
||||
const checkIndexList = () => {
|
||||
getIndexList().then(res => {
|
||||
showDialog.value = true
|
||||
indexList.value = res.data
|
||||
for(let i = 0 ; i < indexList.value.length; i ++){
|
||||
if(indexList.value[i].is_use == 1){
|
||||
index_path.value = indexList.value[i].view_path
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const index_path = ref('');
|
||||
const submitIndex = () => {
|
||||
setIndexList({
|
||||
view_path: index_path.value
|
||||
}).then(() => {
|
||||
showDialog.value = false
|
||||
router.go(0)
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -163,8 +213,17 @@ const backFn = () => {
|
||||
}
|
||||
.navbar-item {
|
||||
padding: 0 8px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--el-bg-color-page);
|
||||
}
|
||||
}</style>
|
||||
}
|
||||
.index-item {
|
||||
border: 1px solid;
|
||||
border-color: var(--el-color-primary);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background-color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -32,6 +32,21 @@
|
||||
<el-color-picker v-model="theme" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- 布局风格 -->
|
||||
<div class="setting-item mb-[10px]">
|
||||
<div class="title text-base text-tx-secondary">{{ t('layout.layoutStyle') }}</div>
|
||||
<div class="flex mt-[10px] layout-style flex-wrap">
|
||||
<div class="relative w-[125px] h-[100px] border mr-[10px] mb-[10px] hover:border-primary"
|
||||
:class="{ 'border-primary': currLayout == item.key }" v-for="(item, index) in layouts"
|
||||
@click="handleSetLayout(item.key)">
|
||||
<div
|
||||
class="absolute z-1 w-[50px] h-[50px] border border-primary-light-5 rounded-[50%] top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%] flex items-center justify-center text-base text-primary-light-5">
|
||||
{{ item.name }}
|
||||
</div>
|
||||
<img :src="img(item.image)" alt="" class="w-full h-full">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</el-drawer>
|
||||
</div>
|
||||
@ -41,10 +56,19 @@
|
||||
import { ref, computed } from 'vue'
|
||||
import useSystemStore from '@/stores/modules/system'
|
||||
import { useDark, useToggle } from '@vueuse/core'
|
||||
import { setThemeColor } from '@/utils/common'
|
||||
import { setThemeColor, img } from '@/utils/common'
|
||||
import { t } from '@/lang'
|
||||
import { getLayouts, setLayout } from '@/api/sys'
|
||||
import Storage from '@/utils/storage'
|
||||
|
||||
const drawer = ref(false)
|
||||
const systemStore = useSystemStore()
|
||||
const layouts = ref([])
|
||||
const currLayout = ref(Storage.get('layout') || 'default')
|
||||
|
||||
getLayouts().then(res => {
|
||||
layouts.value = res.data
|
||||
}).catch(() => { })
|
||||
|
||||
const isDark = useDark()
|
||||
const toggleDark = useToggle(isDark)
|
||||
@ -70,7 +94,6 @@ const sidebar = computed({
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const theme = computed({
|
||||
get() {
|
||||
return systemStore.theme
|
||||
@ -80,10 +103,23 @@ const theme = computed({
|
||||
setThemeColor(systemStore.theme, systemStore.dark ? 'dark' : 'light')
|
||||
}
|
||||
})
|
||||
|
||||
const handleSetLayout = (key: string) => {
|
||||
setLayout(key).then(() => {
|
||||
Storage.set({ key: 'layout', data: key })
|
||||
location.reload()
|
||||
}).catch(() => { })
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
:deep(.el-drawer__header) {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.layout-style {
|
||||
&>div:nth-child(2n+2) {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<el-main :class="['main-wrap h-full p-0',{'bg-page': dark}]">
|
||||
<el-scrollbar>
|
||||
<div class="p-[10px]">
|
||||
<router-view v-slot="{ Component, route }" v-if="appStore.routeRefrehTag">
|
||||
<router-view v-slot="{ Component, route }" v-if="appStore.routeRefreshTag">
|
||||
<keep-alive :include="tabbarStore.tabNames">
|
||||
<component :is="Component" :key="route.fullPath" />
|
||||
</keep-alive>
|
||||
|
||||
21
admin/src/layout/hellow/index.vue
Normal file
@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<el-container class="w-screen h-screen">
|
||||
<el-header>
|
||||
<layout-header />
|
||||
</el-header>
|
||||
<el-main>
|
||||
<router-view></router-view>
|
||||
</el-main>
|
||||
<el-footer>
|
||||
<div class="w-full h-full bg-[#f7f7f7] flex items-center justify-center">
|
||||
Footer
|
||||
</div>
|
||||
</el-footer>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import layoutHeader from '@/layout/default/components/header/index.vue'
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
18
admin/src/layout/index.vue
Normal file
@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<component :is="layout" />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, markRaw, defineAsyncComponent } from 'vue'
|
||||
import Storage from '@/utils/storage'
|
||||
|
||||
const modules = import.meta.glob('./*/index.vue')
|
||||
const siteLayout = Storage.get('layout') || 'default'
|
||||
const layout = ref<any>(null)
|
||||
|
||||
Object.keys(modules).forEach(key => {
|
||||
key.indexOf(siteLayout) !== -1 && (layout.value = markRaw(defineAsyncComponent(modules[key])))
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
@ -1,4 +1,4 @@
|
||||
import { createRouter, createWebHistory, RouteLocationRaw } from 'vue-router'
|
||||
import { createRouter, createWebHistory, RouteLocationRaw, RouteLocationNormalizedLoaded } from 'vue-router'
|
||||
import NProgress from 'nprogress'
|
||||
import 'nprogress/nprogress.css'
|
||||
import { STATIC_ROUTES, NO_LOGIN_ROUTES, ROOT_ROUTER, ADMIN_ROUTE, SITE_ROUTE, DECORATE_ROUTER, findFirstValidRoute } from './routers'
|
||||
@ -24,6 +24,17 @@ router.push = (to: RouteLocationRaw) => {
|
||||
return originPush(route)
|
||||
}
|
||||
|
||||
/**
|
||||
* 重写resolve方法
|
||||
*/
|
||||
const originResolve = router.resolve
|
||||
router.resolve = (to: RouteLocationRaw, currentLocation?: RouteLocationNormalizedLoaded) => {
|
||||
const route = typeof to == 'string' ? urlToRouteRaw(to) : to
|
||||
const paths = route.path.split('/').filter((item: string) => { return item })
|
||||
route.path = ['admin', 'site', 'decorate'].indexOf(paths[0]) == -1 ? `/${getAppType()}${route.path}` : route.path
|
||||
return originResolve(route, currentLocation)
|
||||
}
|
||||
|
||||
// 全局前置守卫
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
NProgress.configure({ showSpinner: false })
|
||||
@ -39,7 +50,7 @@ router.beforeEach(async (to, from, next) => {
|
||||
setWindowTitle(title)
|
||||
|
||||
// 加载语言包
|
||||
await language.loadLocaleMessages(to.path, useSystemStore().lang);
|
||||
await language.loadLocaleMessages((to.meta.view || to.path), useSystemStore().lang);
|
||||
|
||||
let matched: any = to.matched;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { RouteRecordRaw, RouterView } from 'vue-router'
|
||||
import Default from '@/layout/default/index.vue'
|
||||
import Default from '@/layout/index.vue'
|
||||
import Decorate from '@/layout/decorate/index.vue'
|
||||
|
||||
// 静态路由
|
||||
@ -122,7 +122,8 @@ const createRoute = function (route: Route, parentRoute: RouteRecordRaw | null =
|
||||
icon: route.icon,
|
||||
type: route.menu_type,
|
||||
show: route.is_show,
|
||||
app: route.app_type
|
||||
app: route.app_type,
|
||||
view: route.view_path
|
||||
}
|
||||
}
|
||||
if (route.menu_type == 0) {
|
||||
|
||||
@ -4,7 +4,7 @@ import NProgress from 'nprogress'
|
||||
|
||||
interface App {
|
||||
route: string,
|
||||
routeRefrehTag: boolean,
|
||||
routeRefreshTag: boolean,
|
||||
pageReturn: boolean
|
||||
}
|
||||
|
||||
@ -12,17 +12,17 @@ const useAppStore = defineStore('app', {
|
||||
state: (): App => {
|
||||
return {
|
||||
route: '',
|
||||
routeRefrehTag: true,
|
||||
routeRefreshTag: true,
|
||||
pageReturn: false
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
refreshRouterView() {
|
||||
this.routeRefrehTag = false
|
||||
this.routeRefreshTag = false
|
||||
NProgress.start()
|
||||
|
||||
nextTick(() => {
|
||||
this.routeRefrehTag = true
|
||||
this.routeRefreshTag = true
|
||||
NProgress.done()
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import {defineStore} from 'pinia'
|
||||
import {t} from '@/lang'
|
||||
import {toRaw, watch} from 'vue'
|
||||
import {toRaw} from 'vue'
|
||||
import {ElMessage, ElMessageBox} from 'element-plus'
|
||||
import {cloneDeep, range, isEmpty} from 'lodash-es'
|
||||
import {cloneDeep} from 'lodash-es'
|
||||
|
||||
const useDiyStore = defineStore('diy', {
|
||||
state: () => {
|
||||
@ -11,10 +11,12 @@ const useDiyStore = defineStore('diy', {
|
||||
load: false, // 加载状态
|
||||
currentIndex: -99, // 当前正在编辑的组件下标
|
||||
currentComponent: 'edit-page', // 当前正在编辑的组件名称
|
||||
pageMode: 'diy',
|
||||
editTab: 'content',// 编辑页面
|
||||
name: '', // 页面标识
|
||||
type: '', // 页面模板
|
||||
typeName: '', // 页面模板名称
|
||||
templateName: '', // 页面模板标识
|
||||
isDefault: 0, // 是否默认页面
|
||||
predefineColors: [
|
||||
'#F4391c',
|
||||
@ -203,6 +205,7 @@ const useDiyStore = defineStore('diy', {
|
||||
// 将数据发送到uniapp
|
||||
postMessage() {
|
||||
var diyData = JSON.stringify({
|
||||
pageMode: this.pageMode,
|
||||
currentIndex: this.currentIndex,
|
||||
global: toRaw(this.global),
|
||||
value: toRaw(this.value)
|
||||
|
||||
@ -33,10 +33,11 @@ const useSystemStore = defineStore('user', {
|
||||
this.userInfo = res.data.userinfo
|
||||
setToken(res.data.token)
|
||||
storage.set({ key: 'userinfo', data: res.data.userinfo })
|
||||
storage.set({ key: 'siteId', data: res.data.site_id })
|
||||
storage.set({ key: 'siteId', data: res.data.site_info.site_id })
|
||||
storage.set({ key: 'siteInfo', data: res.data.site_info })
|
||||
storage.set({ key: 'comparisonSiteIdStorage', data: res.data.site_id })
|
||||
storage.set({ key: 'comparisonSiteIdStorage', data: res.data.site_info.site_id })
|
||||
storage.set({ key: 'comparisonTokenStorage', data: res.data.token })
|
||||
storage.set({ key: 'layout', data: (res.data.layout || 'default') })
|
||||
resolve(res)
|
||||
})
|
||||
.catch((error) => {
|
||||
|
||||
1
admin/src/styles/icon/addon-iconfont.css
Normal file
@ -0,0 +1 @@
|
||||
@import "addon/tourism/iconfont.css";
|
||||
58
admin/src/styles/icon/addon/tourism/iconfont.css
Normal file
@ -0,0 +1,58 @@
|
||||
@font-face {
|
||||
font-family: "tourism"; /* Project id 4137250 */
|
||||
src: url('//at.alicdn.com/t/c/font_4137250_st1ha9l0k1e.woff2?t=1687685028672') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_4137250_st1ha9l0k1e.woff?t=1687685028672') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_4137250_st1ha9l0k1e.ttf?t=1687685028672') format('truetype');
|
||||
}
|
||||
|
||||
.tourism {
|
||||
font-family: "tourism" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.tourism-icon-feiji:before {
|
||||
content: "\e600";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou:before {
|
||||
content: "\e6a9";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyouchanpin:before {
|
||||
content: "\e63b";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou1:before {
|
||||
content: "\e623";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou2:before {
|
||||
content: "\e601";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou3:before {
|
||||
content: "\e60c";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyoubaochedingdan:before {
|
||||
content: "\e612";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou4:before {
|
||||
content: "\e653";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou5:before {
|
||||
content: "\e610";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyouguanguang:before {
|
||||
content: "\e87e";
|
||||
}
|
||||
|
||||
.tourism-icon-lvyou6:before {
|
||||
content: "\e642";
|
||||
}
|
||||
86
admin/src/styles/icon/addon/tourism/iconfont.json
Normal file
@ -0,0 +1,86 @@
|
||||
{
|
||||
"id": "4137250",
|
||||
"name": "旅游业",
|
||||
"font_family": "tourism",
|
||||
"css_prefix_text": "tourism-icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "1443",
|
||||
"name": "飞机",
|
||||
"font_class": "feiji",
|
||||
"unicode": "e600",
|
||||
"unicode_decimal": 58880
|
||||
},
|
||||
{
|
||||
"icon_id": "446824",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou",
|
||||
"unicode": "e6a9",
|
||||
"unicode_decimal": 59049
|
||||
},
|
||||
{
|
||||
"icon_id": "1167173",
|
||||
"name": "旅游产品",
|
||||
"font_class": "lvyouchanpin",
|
||||
"unicode": "e63b",
|
||||
"unicode_decimal": 58939
|
||||
},
|
||||
{
|
||||
"icon_id": "1354920",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou1",
|
||||
"unicode": "e623",
|
||||
"unicode_decimal": 58915
|
||||
},
|
||||
{
|
||||
"icon_id": "1505555",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou2",
|
||||
"unicode": "e601",
|
||||
"unicode_decimal": 58881
|
||||
},
|
||||
{
|
||||
"icon_id": "2121726",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou3",
|
||||
"unicode": "e60c",
|
||||
"unicode_decimal": 58892
|
||||
},
|
||||
{
|
||||
"icon_id": "2357494",
|
||||
"name": "旅游包车订单",
|
||||
"font_class": "lvyoubaochedingdan",
|
||||
"unicode": "e612",
|
||||
"unicode_decimal": 58898
|
||||
},
|
||||
{
|
||||
"icon_id": "3944019",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou4",
|
||||
"unicode": "e653",
|
||||
"unicode_decimal": 58963
|
||||
},
|
||||
{
|
||||
"icon_id": "4838220",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou5",
|
||||
"unicode": "e610",
|
||||
"unicode_decimal": 58896
|
||||
},
|
||||
{
|
||||
"icon_id": "7444178",
|
||||
"name": "旅游观光",
|
||||
"font_class": "lvyouguanguang",
|
||||
"unicode": "e87e",
|
||||
"unicode_decimal": 59518
|
||||
},
|
||||
{
|
||||
"icon_id": "9748082",
|
||||
"name": "旅游",
|
||||
"font_class": "lvyou6",
|
||||
"unicode": "e642",
|
||||
"unicode_decimal": 58946
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,8 +1,8 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 3883393 */
|
||||
src: url('//at.alicdn.com/t/c/font_3883393_pwtqr51nps.woff2?t=1686032889350') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_pwtqr51nps.woff?t=1686032889350') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_pwtqr51nps.ttf?t=1686032889350') format('truetype');
|
||||
src: url('//at.alicdn.com/t/c/font_3883393_zqz8ttmm6uk.woff2?t=1689649791403') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_zqz8ttmm6uk.woff?t=1689649791403') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_zqz8ttmm6uk.ttf?t=1689649791403') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@ -13,6 +13,78 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.iconmofang-liangzuoliangyou:before {
|
||||
content: "\e6c5";
|
||||
}
|
||||
|
||||
.iconmofang-yishangliangxia:before {
|
||||
content: "\e6c6";
|
||||
}
|
||||
|
||||
.iconmofang-yizuoliangyou:before {
|
||||
content: "\e6c7";
|
||||
}
|
||||
|
||||
.iconxuanzemoban-yizuosanyou:before {
|
||||
content: "\e6e9";
|
||||
}
|
||||
|
||||
.iconrequ:before {
|
||||
content: "\e68d";
|
||||
}
|
||||
|
||||
.iconmofang1:before {
|
||||
content: "\e64d";
|
||||
}
|
||||
|
||||
.iconxinyongqia:before {
|
||||
content: "\e785";
|
||||
}
|
||||
|
||||
.iconmendian:before {
|
||||
content: "\e60a";
|
||||
}
|
||||
|
||||
.iconico_yuyueguanli_yuyuebiangeng:before {
|
||||
content: "\e94a";
|
||||
}
|
||||
|
||||
.iconsousuo:before {
|
||||
content: "\e8b9";
|
||||
}
|
||||
|
||||
.icongengduo:before {
|
||||
content: "\e63b";
|
||||
}
|
||||
|
||||
.icona-02_luxian:before {
|
||||
content: "\e687";
|
||||
}
|
||||
|
||||
.iconhuiyuanxinxi:before {
|
||||
content: "\e688";
|
||||
}
|
||||
|
||||
.iconjingdian:before {
|
||||
content: "\e689";
|
||||
}
|
||||
|
||||
.iconhuiyuandingdan:before {
|
||||
content: "\e68a";
|
||||
}
|
||||
|
||||
.iconjiudian:before {
|
||||
content: "\e68b";
|
||||
}
|
||||
|
||||
.iconhellowenbenanli:before {
|
||||
content: "\e68c";
|
||||
}
|
||||
|
||||
.iconqiehuan:before {
|
||||
content: "\e61e";
|
||||
}
|
||||
|
||||
.iconxiangyoujiantou:before {
|
||||
content: "\e660";
|
||||
}
|
||||
786
admin/src/styles/icon/iconfont.json
Normal file
@ -0,0 +1,786 @@
|
||||
{
|
||||
"id": "3883393",
|
||||
"name": "系统",
|
||||
"font_family": "iconfont",
|
||||
"css_prefix_text": "icon",
|
||||
"description": "系统图标",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "9924690",
|
||||
"name": "魔方-两左两右",
|
||||
"font_class": "mofang-liangzuoliangyou",
|
||||
"unicode": "e6c5",
|
||||
"unicode_decimal": 59077
|
||||
},
|
||||
{
|
||||
"icon_id": "9924691",
|
||||
"name": "魔方-一上两下",
|
||||
"font_class": "mofang-yishangliangxia",
|
||||
"unicode": "e6c6",
|
||||
"unicode_decimal": 59078
|
||||
},
|
||||
{
|
||||
"icon_id": "9924700",
|
||||
"name": "魔方-一左两右",
|
||||
"font_class": "mofang-yizuoliangyou",
|
||||
"unicode": "e6c7",
|
||||
"unicode_decimal": 59079
|
||||
},
|
||||
{
|
||||
"icon_id": "18287302",
|
||||
"name": "选择模板-一左三右",
|
||||
"font_class": "xuanzemoban-yizuosanyou",
|
||||
"unicode": "e6e9",
|
||||
"unicode_decimal": 59113
|
||||
},
|
||||
{
|
||||
"icon_id": "33490811",
|
||||
"name": "热区",
|
||||
"font_class": "requ",
|
||||
"unicode": "e68d",
|
||||
"unicode_decimal": 59021
|
||||
},
|
||||
{
|
||||
"icon_id": "30454135",
|
||||
"name": "魔方",
|
||||
"font_class": "mofang1",
|
||||
"unicode": "e64d",
|
||||
"unicode_decimal": 58957
|
||||
},
|
||||
{
|
||||
"icon_id": "579624",
|
||||
"name": "信用卡",
|
||||
"font_class": "xinyongqia",
|
||||
"unicode": "e785",
|
||||
"unicode_decimal": 59269
|
||||
},
|
||||
{
|
||||
"icon_id": "2681698",
|
||||
"name": "门店",
|
||||
"font_class": "mendian",
|
||||
"unicode": "e60a",
|
||||
"unicode_decimal": 58890
|
||||
},
|
||||
{
|
||||
"icon_id": "6607852",
|
||||
"name": "ico_预约管理_预约变更",
|
||||
"font_class": "ico_yuyueguanli_yuyuebiangeng",
|
||||
"unicode": "e94a",
|
||||
"unicode_decimal": 59722
|
||||
},
|
||||
{
|
||||
"icon_id": "11372706",
|
||||
"name": "搜索",
|
||||
"font_class": "sousuo",
|
||||
"unicode": "e8b9",
|
||||
"unicode_decimal": 59577
|
||||
},
|
||||
{
|
||||
"icon_id": "1703513",
|
||||
"name": "更多",
|
||||
"font_class": "gengduo",
|
||||
"unicode": "e63b",
|
||||
"unicode_decimal": 58939
|
||||
},
|
||||
{
|
||||
"icon_id": "36212724",
|
||||
"name": "02_路线",
|
||||
"font_class": "a-02_luxian",
|
||||
"unicode": "e687",
|
||||
"unicode_decimal": 59015
|
||||
},
|
||||
{
|
||||
"icon_id": "36212725",
|
||||
"name": "会员信息",
|
||||
"font_class": "huiyuanxinxi",
|
||||
"unicode": "e688",
|
||||
"unicode_decimal": 59016
|
||||
},
|
||||
{
|
||||
"icon_id": "36212726",
|
||||
"name": "景点",
|
||||
"font_class": "jingdian",
|
||||
"unicode": "e689",
|
||||
"unicode_decimal": 59017
|
||||
},
|
||||
{
|
||||
"icon_id": "36212727",
|
||||
"name": "会员订单",
|
||||
"font_class": "huiyuandingdan",
|
||||
"unicode": "e68a",
|
||||
"unicode_decimal": 59018
|
||||
},
|
||||
{
|
||||
"icon_id": "36212728",
|
||||
"name": "酒店",
|
||||
"font_class": "jiudian",
|
||||
"unicode": "e68b",
|
||||
"unicode_decimal": 59019
|
||||
},
|
||||
{
|
||||
"icon_id": "36212729",
|
||||
"name": "hello文本案例",
|
||||
"font_class": "hellowenbenanli",
|
||||
"unicode": "e68c",
|
||||
"unicode_decimal": 59020
|
||||
},
|
||||
{
|
||||
"icon_id": "18993709",
|
||||
"name": "切换",
|
||||
"font_class": "qiehuan",
|
||||
"unicode": "e61e",
|
||||
"unicode_decimal": 58910
|
||||
},
|
||||
{
|
||||
"icon_id": "630094",
|
||||
"name": "向右箭头",
|
||||
"font_class": "xiangyoujiantou",
|
||||
"unicode": "e660",
|
||||
"unicode_decimal": 58976
|
||||
},
|
||||
{
|
||||
"icon_id": "630095",
|
||||
"name": "向左箭头",
|
||||
"font_class": "xiangzuojiantou",
|
||||
"unicode": "e663",
|
||||
"unicode_decimal": 58979
|
||||
},
|
||||
{
|
||||
"icon_id": "2127167",
|
||||
"name": "订单",
|
||||
"font_class": "dingdan",
|
||||
"unicode": "e61d",
|
||||
"unicode_decimal": 58909
|
||||
},
|
||||
{
|
||||
"icon_id": "10066818",
|
||||
"name": "应用市场",
|
||||
"font_class": "yingyongshichang1",
|
||||
"unicode": "e61c",
|
||||
"unicode_decimal": 58908
|
||||
},
|
||||
{
|
||||
"icon_id": "28871251",
|
||||
"name": "应用市场",
|
||||
"font_class": "yingyongshichang2",
|
||||
"unicode": "e60b",
|
||||
"unicode_decimal": 58891
|
||||
},
|
||||
{
|
||||
"icon_id": "1727436",
|
||||
"name": "211铃铛-线性",
|
||||
"font_class": "lingdang-xianxing",
|
||||
"unicode": "e8c0",
|
||||
"unicode_decimal": 59584
|
||||
},
|
||||
{
|
||||
"icon_id": "11372759",
|
||||
"name": "电话",
|
||||
"font_class": "dianhua",
|
||||
"unicode": "e8c3",
|
||||
"unicode_decimal": 59587
|
||||
},
|
||||
{
|
||||
"icon_id": "4734150",
|
||||
"name": "管理房屋",
|
||||
"font_class": "ic_manage_assignprop",
|
||||
"unicode": "e60c",
|
||||
"unicode_decimal": 58892
|
||||
},
|
||||
{
|
||||
"icon_id": "5975445",
|
||||
"name": "城市",
|
||||
"font_class": "chengshi",
|
||||
"unicode": "ec70",
|
||||
"unicode_decimal": 60528
|
||||
},
|
||||
{
|
||||
"icon_id": "25069700",
|
||||
"name": "套餐列表",
|
||||
"font_class": "taocanliebiao",
|
||||
"unicode": "e6b2",
|
||||
"unicode_decimal": 59058
|
||||
},
|
||||
{
|
||||
"icon_id": "11239058",
|
||||
"name": "微信",
|
||||
"font_class": "weixin",
|
||||
"unicode": "e647",
|
||||
"unicode_decimal": 58951
|
||||
},
|
||||
{
|
||||
"icon_id": "417391",
|
||||
"name": "会员管理",
|
||||
"font_class": "huiyuanguanli",
|
||||
"unicode": "e64c",
|
||||
"unicode_decimal": 58956
|
||||
},
|
||||
{
|
||||
"icon_id": "651208",
|
||||
"name": "我的会员",
|
||||
"font_class": "huangjinhuiyuan0101-copy",
|
||||
"unicode": "e621",
|
||||
"unicode_decimal": 58913
|
||||
},
|
||||
{
|
||||
"icon_id": "897811",
|
||||
"name": "会员(1)",
|
||||
"font_class": "huiyuan1",
|
||||
"unicode": "e644",
|
||||
"unicode_decimal": 58948
|
||||
},
|
||||
{
|
||||
"icon_id": "8361821",
|
||||
"name": "钱包1",
|
||||
"font_class": "qianbao",
|
||||
"unicode": "e6ca",
|
||||
"unicode_decimal": 59082
|
||||
},
|
||||
{
|
||||
"icon_id": "15053947",
|
||||
"name": "文章",
|
||||
"font_class": "ic_description_file24px",
|
||||
"unicode": "e61a",
|
||||
"unicode_decimal": 58906
|
||||
},
|
||||
{
|
||||
"icon_id": "26677253",
|
||||
"name": "FormatPainterOutlined",
|
||||
"font_class": "zhuangxiu1",
|
||||
"unicode": "e66b",
|
||||
"unicode_decimal": 58987
|
||||
},
|
||||
{
|
||||
"icon_id": "5856622",
|
||||
"name": "退款记录",
|
||||
"font_class": "tuikuanjilu",
|
||||
"unicode": "e8cf",
|
||||
"unicode_decimal": 59599
|
||||
},
|
||||
{
|
||||
"icon_id": "11296483",
|
||||
"name": "更新缓存",
|
||||
"font_class": "gengxinhuancun",
|
||||
"unicode": "e686",
|
||||
"unicode_decimal": 59014
|
||||
},
|
||||
{
|
||||
"icon_id": "11661874",
|
||||
"name": "四性检测",
|
||||
"font_class": "sixingjiance",
|
||||
"unicode": "e645",
|
||||
"unicode_decimal": 58949
|
||||
},
|
||||
{
|
||||
"icon_id": "30527484",
|
||||
"name": "注册设置",
|
||||
"font_class": "zhuceshezhi",
|
||||
"unicode": "e6ad",
|
||||
"unicode_decimal": 59053
|
||||
},
|
||||
{
|
||||
"icon_id": "9117790",
|
||||
"name": "应用管理",
|
||||
"font_class": "manage-apply",
|
||||
"unicode": "e619",
|
||||
"unicode_decimal": 58905
|
||||
},
|
||||
{
|
||||
"icon_id": "508272",
|
||||
"name": "应用管理",
|
||||
"font_class": "yingyongguanli",
|
||||
"unicode": "e61f",
|
||||
"unicode_decimal": 58911
|
||||
},
|
||||
{
|
||||
"icon_id": "3090731",
|
||||
"name": "开发者管理",
|
||||
"font_class": "kaifazheguanli",
|
||||
"unicode": "e624",
|
||||
"unicode_decimal": 58916
|
||||
},
|
||||
{
|
||||
"icon_id": "6263297",
|
||||
"name": "联盟管理",
|
||||
"font_class": "lianmengguanli",
|
||||
"unicode": "e65f",
|
||||
"unicode_decimal": 58975
|
||||
},
|
||||
{
|
||||
"icon_id": "6337455",
|
||||
"name": "点赞",
|
||||
"font_class": "dianzan",
|
||||
"unicode": "ec7f",
|
||||
"unicode_decimal": 60543
|
||||
},
|
||||
{
|
||||
"icon_id": "1160150",
|
||||
"name": "h5e",
|
||||
"font_class": "h5e",
|
||||
"unicode": "e654",
|
||||
"unicode_decimal": 58964
|
||||
},
|
||||
{
|
||||
"icon_id": "10067274",
|
||||
"name": "应用市场",
|
||||
"font_class": "yingyongshichang",
|
||||
"unicode": "e618",
|
||||
"unicode_decimal": 58904
|
||||
},
|
||||
{
|
||||
"icon_id": "1735584",
|
||||
"name": "电脑端",
|
||||
"font_class": "desktop",
|
||||
"unicode": "e6e8",
|
||||
"unicode_decimal": 59112
|
||||
},
|
||||
{
|
||||
"icon_id": "2465639",
|
||||
"name": "支付宝",
|
||||
"font_class": "zhifubao",
|
||||
"unicode": "e8e4",
|
||||
"unicode_decimal": 59620
|
||||
},
|
||||
{
|
||||
"icon_id": "16372351",
|
||||
"name": "云空间",
|
||||
"font_class": "yunkongjian",
|
||||
"unicode": "e666",
|
||||
"unicode_decimal": 58982
|
||||
},
|
||||
{
|
||||
"icon_id": "1110699",
|
||||
"name": "板块",
|
||||
"font_class": "bankuai",
|
||||
"unicode": "e668",
|
||||
"unicode_decimal": 58984
|
||||
},
|
||||
{
|
||||
"icon_id": "2076244",
|
||||
"name": " 内容2",
|
||||
"font_class": "neirong2",
|
||||
"unicode": "e889",
|
||||
"unicode_decimal": 59529
|
||||
},
|
||||
{
|
||||
"icon_id": "7596821",
|
||||
"name": "24gl-userGroup",
|
||||
"font_class": "24gl-userGroup",
|
||||
"unicode": "eb26",
|
||||
"unicode_decimal": 60198
|
||||
},
|
||||
{
|
||||
"icon_id": "11124966",
|
||||
"name": "论坛",
|
||||
"font_class": "14",
|
||||
"unicode": "e615",
|
||||
"unicode_decimal": 58901
|
||||
},
|
||||
{
|
||||
"icon_id": "13763389",
|
||||
"name": "举报",
|
||||
"font_class": "jubao",
|
||||
"unicode": "e611",
|
||||
"unicode_decimal": 58897
|
||||
},
|
||||
{
|
||||
"icon_id": "30454127",
|
||||
"name": "标题",
|
||||
"font_class": "biaoti",
|
||||
"unicode": "e643",
|
||||
"unicode_decimal": 58947
|
||||
},
|
||||
{
|
||||
"icon_id": "33622251",
|
||||
"name": "会员中心",
|
||||
"font_class": "huiyuanzhongxin",
|
||||
"unicode": "e692",
|
||||
"unicode_decimal": 59026
|
||||
},
|
||||
{
|
||||
"icon_id": "30454128",
|
||||
"name": "icon-kfckfc",
|
||||
"font_class": "fuzhukongbai1",
|
||||
"unicode": "e642",
|
||||
"unicode_decimal": 58946
|
||||
},
|
||||
{
|
||||
"icon_id": "34679438",
|
||||
"name": "system-jiantoushang",
|
||||
"font_class": "jiantoushang",
|
||||
"unicode": "e600",
|
||||
"unicode_decimal": 58880
|
||||
},
|
||||
{
|
||||
"icon_id": "34679439",
|
||||
"name": "system-loader-4-line",
|
||||
"font_class": "loader-line",
|
||||
"unicode": "e601",
|
||||
"unicode_decimal": 58881
|
||||
},
|
||||
{
|
||||
"icon_id": "34679440",
|
||||
"name": "system-delete-bin-6-line",
|
||||
"font_class": "delete-line",
|
||||
"unicode": "e602",
|
||||
"unicode_decimal": 58882
|
||||
},
|
||||
{
|
||||
"icon_id": "34679441",
|
||||
"name": "system-jiantouxia",
|
||||
"font_class": "jiantouxia",
|
||||
"unicode": "e603",
|
||||
"unicode_decimal": 58883
|
||||
},
|
||||
{
|
||||
"icon_id": "34679442",
|
||||
"name": "system-file-copy-line",
|
||||
"font_class": "copy-line",
|
||||
"unicode": "e605",
|
||||
"unicode_decimal": 58885
|
||||
},
|
||||
{
|
||||
"icon_id": "1604633",
|
||||
"name": "拖动",
|
||||
"font_class": "tuodong",
|
||||
"unicode": "e884",
|
||||
"unicode_decimal": 59524
|
||||
},
|
||||
{
|
||||
"icon_id": "4315844",
|
||||
"name": "line",
|
||||
"font_class": "fuzhushuxian",
|
||||
"unicode": "e6f7",
|
||||
"unicode_decimal": 59127
|
||||
},
|
||||
{
|
||||
"icon_id": "9213697",
|
||||
"name": "魔方",
|
||||
"font_class": "mofang",
|
||||
"unicode": "e6c4",
|
||||
"unicode_decimal": 59076
|
||||
},
|
||||
{
|
||||
"icon_id": "13126664",
|
||||
"name": "手动选择",
|
||||
"font_class": "shoudongxuanze",
|
||||
"unicode": "e6e1",
|
||||
"unicode_decimal": 59105
|
||||
},
|
||||
{
|
||||
"icon_id": "15035365",
|
||||
"name": "一行三个",
|
||||
"font_class": "yihangsange",
|
||||
"unicode": "e6d5",
|
||||
"unicode_decimal": 59093
|
||||
},
|
||||
{
|
||||
"icon_id": "15035367",
|
||||
"name": "一行四个",
|
||||
"font_class": "yihangsige",
|
||||
"unicode": "e6d6",
|
||||
"unicode_decimal": 59094
|
||||
},
|
||||
{
|
||||
"icon_id": "16552058",
|
||||
"name": "一行两个",
|
||||
"font_class": "yihangliangge",
|
||||
"unicode": "e6e2",
|
||||
"unicode_decimal": 59106
|
||||
},
|
||||
{
|
||||
"icon_id": "19363687",
|
||||
"name": "一行5个",
|
||||
"font_class": "yihang5ge",
|
||||
"unicode": "e6f3",
|
||||
"unicode_decimal": 59123
|
||||
},
|
||||
{
|
||||
"icon_id": "30454132",
|
||||
"name": "图片广告",
|
||||
"font_class": "tupianguanggao1",
|
||||
"unicode": "e649",
|
||||
"unicode_decimal": 58953
|
||||
},
|
||||
{
|
||||
"icon_id": "30454144",
|
||||
"name": "图文导航",
|
||||
"font_class": "tuwendaohang2",
|
||||
"unicode": "e65d",
|
||||
"unicode_decimal": 58973
|
||||
},
|
||||
{
|
||||
"icon_id": "30461206",
|
||||
"name": "文章",
|
||||
"font_class": "wenzhang",
|
||||
"unicode": "e662",
|
||||
"unicode_decimal": 58978
|
||||
},
|
||||
{
|
||||
"icon_id": "30621137",
|
||||
"name": "固定展示",
|
||||
"font_class": "gudingzhanshi",
|
||||
"unicode": "e66e",
|
||||
"unicode_decimal": 58990
|
||||
},
|
||||
{
|
||||
"icon_id": "30621139",
|
||||
"name": "单行滑动",
|
||||
"font_class": "danhanghuadong",
|
||||
"unicode": "e66f",
|
||||
"unicode_decimal": 58991
|
||||
},
|
||||
{
|
||||
"icon_id": "30621140",
|
||||
"name": "图文导航",
|
||||
"font_class": "tuwendaohang3",
|
||||
"unicode": "e670",
|
||||
"unicode_decimal": 58992
|
||||
},
|
||||
{
|
||||
"icon_id": "30621141",
|
||||
"name": "图导航",
|
||||
"font_class": "tudaohang",
|
||||
"unicode": "e671",
|
||||
"unicode_decimal": 58993
|
||||
},
|
||||
{
|
||||
"icon_id": "30621143",
|
||||
"name": "分页滑动",
|
||||
"font_class": "fenyehuadong",
|
||||
"unicode": "e673",
|
||||
"unicode_decimal": 58995
|
||||
},
|
||||
{
|
||||
"icon_id": "30621144",
|
||||
"name": "文导航",
|
||||
"font_class": "wendaohang",
|
||||
"unicode": "e674",
|
||||
"unicode_decimal": 58996
|
||||
},
|
||||
{
|
||||
"icon_id": "386395",
|
||||
"name": "装修",
|
||||
"font_class": "zhuangxiu",
|
||||
"unicode": "e627",
|
||||
"unicode_decimal": 58919
|
||||
},
|
||||
{
|
||||
"icon_id": "1376045",
|
||||
"name": "店铺装修",
|
||||
"font_class": "dianpuzhuangxiu",
|
||||
"unicode": "e616",
|
||||
"unicode_decimal": 58902
|
||||
},
|
||||
{
|
||||
"icon_id": "4315691",
|
||||
"name": "底部导航",
|
||||
"font_class": "dibudaohang",
|
||||
"unicode": "e617",
|
||||
"unicode_decimal": 58903
|
||||
},
|
||||
{
|
||||
"icon_id": "34453370",
|
||||
"name": "旺铺装修",
|
||||
"font_class": "wangpuzhuangxiu",
|
||||
"unicode": "e881",
|
||||
"unicode_decimal": 59521
|
||||
},
|
||||
{
|
||||
"icon_id": "8710560",
|
||||
"name": "微信公众号",
|
||||
"font_class": "weixingongzhonghao1",
|
||||
"unicode": "e705",
|
||||
"unicode_decimal": 59141
|
||||
},
|
||||
{
|
||||
"icon_id": "4846336",
|
||||
"name": "微信公众号管理",
|
||||
"font_class": "weixingongzhonghaoguanli",
|
||||
"unicode": "e609",
|
||||
"unicode_decimal": 58889
|
||||
},
|
||||
{
|
||||
"icon_id": "9810504",
|
||||
"name": "小程序",
|
||||
"font_class": "xiaochengxu",
|
||||
"unicode": "e635",
|
||||
"unicode_decimal": 58933
|
||||
},
|
||||
{
|
||||
"icon_id": "10392614",
|
||||
"name": "登录",
|
||||
"font_class": "denglu",
|
||||
"unicode": "e604",
|
||||
"unicode_decimal": 58884
|
||||
},
|
||||
{
|
||||
"icon_id": "15643755",
|
||||
"name": "小程序设置",
|
||||
"font_class": "xiaochengxushezhi",
|
||||
"unicode": "e6b4",
|
||||
"unicode_decimal": 59060
|
||||
},
|
||||
{
|
||||
"icon_id": "321993",
|
||||
"name": "integral",
|
||||
"font_class": "jifen",
|
||||
"unicode": "e70c",
|
||||
"unicode_decimal": 59148
|
||||
},
|
||||
{
|
||||
"icon_id": "731270",
|
||||
"name": "登录注册密码",
|
||||
"font_class": "guanbi",
|
||||
"unicode": "e612",
|
||||
"unicode_decimal": 58898
|
||||
},
|
||||
{
|
||||
"icon_id": "845851",
|
||||
"name": "登录注册密码",
|
||||
"font_class": "dengluzhucemima",
|
||||
"unicode": "e67f",
|
||||
"unicode_decimal": 59007
|
||||
},
|
||||
{
|
||||
"icon_id": "1440387",
|
||||
"name": "切换角色",
|
||||
"font_class": "qiehuanjiaose",
|
||||
"unicode": "e60f",
|
||||
"unicode_decimal": 58895
|
||||
},
|
||||
{
|
||||
"icon_id": "1440877",
|
||||
"name": "版权",
|
||||
"font_class": "banquan",
|
||||
"unicode": "e632",
|
||||
"unicode_decimal": 58930
|
||||
},
|
||||
{
|
||||
"icon_id": "1727353",
|
||||
"name": "20积分-线性",
|
||||
"font_class": "jifen-xianxing",
|
||||
"unicode": "e897",
|
||||
"unicode_decimal": 59543
|
||||
},
|
||||
{
|
||||
"icon_id": "3590938",
|
||||
"name": "会员列表",
|
||||
"font_class": "huiyuanliebiao",
|
||||
"unicode": "e62c",
|
||||
"unicode_decimal": 58924
|
||||
},
|
||||
{
|
||||
"icon_id": "5082143",
|
||||
"name": "角色用户",
|
||||
"font_class": "jiaoseyonghu",
|
||||
"unicode": "e648",
|
||||
"unicode_decimal": 58952
|
||||
},
|
||||
{
|
||||
"icon_id": "5582337",
|
||||
"name": "用户",
|
||||
"font_class": "yonghu",
|
||||
"unicode": "e65e",
|
||||
"unicode_decimal": 58974
|
||||
},
|
||||
{
|
||||
"icon_id": "6415223",
|
||||
"name": "版权",
|
||||
"font_class": "banquan1",
|
||||
"unicode": "e66d",
|
||||
"unicode_decimal": 58989
|
||||
},
|
||||
{
|
||||
"icon_id": "7006681",
|
||||
"name": "微信公众号",
|
||||
"font_class": "weixingongzhonghao",
|
||||
"unicode": "e613",
|
||||
"unicode_decimal": 58899
|
||||
},
|
||||
{
|
||||
"icon_id": "7006683",
|
||||
"name": "微信小程序",
|
||||
"font_class": "weixinxiaochengxu",
|
||||
"unicode": "e614",
|
||||
"unicode_decimal": 58900
|
||||
},
|
||||
{
|
||||
"icon_id": "7577294",
|
||||
"name": "24gl-code",
|
||||
"font_class": "24gl-code",
|
||||
"unicode": "e9ba",
|
||||
"unicode_decimal": 59834
|
||||
},
|
||||
{
|
||||
"icon_id": "7596833",
|
||||
"name": "24gl-portraitMalePlus2",
|
||||
"font_class": "24gl-portraitMalePlus2",
|
||||
"unicode": "eb25",
|
||||
"unicode_decimal": 60197
|
||||
},
|
||||
{
|
||||
"icon_id": "7874533",
|
||||
"name": "源代码",
|
||||
"font_class": "yuandaima",
|
||||
"unicode": "e610",
|
||||
"unicode_decimal": 58896
|
||||
},
|
||||
{
|
||||
"icon_id": "11121397",
|
||||
"name": "角色管理",
|
||||
"font_class": "jiaoseguanli",
|
||||
"unicode": "e62d",
|
||||
"unicode_decimal": 58925
|
||||
},
|
||||
{
|
||||
"icon_id": "12797047",
|
||||
"name": "积分",
|
||||
"font_class": "jifen1",
|
||||
"unicode": "e641",
|
||||
"unicode_decimal": 58945
|
||||
},
|
||||
{
|
||||
"icon_id": "26257279",
|
||||
"name": "版权",
|
||||
"font_class": "banquan2",
|
||||
"unicode": "e61b",
|
||||
"unicode_decimal": 58907
|
||||
},
|
||||
{
|
||||
"icon_id": "26847628",
|
||||
"name": "键盘",
|
||||
"font_class": "jianpan",
|
||||
"unicode": "e661",
|
||||
"unicode_decimal": 58977
|
||||
},
|
||||
{
|
||||
"icon_id": "7594157",
|
||||
"name": "24gf-playCircle",
|
||||
"font_class": "24gf-playCircle",
|
||||
"unicode": "ea82",
|
||||
"unicode_decimal": 60034
|
||||
},
|
||||
{
|
||||
"icon_id": "1025135",
|
||||
"name": "退出全屏",
|
||||
"font_class": "tuichuquanping",
|
||||
"unicode": "e755",
|
||||
"unicode_decimal": 59221
|
||||
},
|
||||
{
|
||||
"icon_id": "23359065",
|
||||
"name": "翻译",
|
||||
"font_class": "fanyi",
|
||||
"unicode": "e6fb",
|
||||
"unicode_decimal": 59131
|
||||
},
|
||||
{
|
||||
"icon_id": "5387606",
|
||||
"name": "全屏",
|
||||
"font_class": "quanping",
|
||||
"unicode": "eb11",
|
||||
"unicode_decimal": 60177
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -3,5 +3,6 @@
|
||||
@import 'element-plus/theme-chalk/display.css';
|
||||
@import 'tailwind.css';
|
||||
@import 'element-plus.scss';
|
||||
@import 'iconfont.css';
|
||||
@import 'icon/iconfont.css';
|
||||
@import 'icon/addon-iconfont.css'; // 安装卸载插件时,动态引用插件的图标库文件
|
||||
@import 'common.scss';
|
||||