更新admin
@ -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,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`)
|
||||
|
||||
@ -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,36 +185,35 @@ 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
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountList(params: Record<string, any>) {
|
||||
return request.get(`site/account`, { params })
|
||||
return request.get(`site/account`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param id
|
||||
*/
|
||||
export function getAccountInfo(id: number) {
|
||||
return request.get(`site/account/${id}`)
|
||||
@ -239,7 +221,7 @@ export function getAccountInfo(id: number) {
|
||||
|
||||
/**
|
||||
* 获取账单统计
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountStat() {
|
||||
return request.get(`site/account/stat`)
|
||||
@ -247,7 +229,7 @@ export function getAccountStat() {
|
||||
|
||||
/**
|
||||
* 获取账单类型
|
||||
* @returns
|
||||
* @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,25 +12,25 @@ 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 })
|
||||
return request.get('sys/role', {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户组详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param roleId
|
||||
*/
|
||||
export function getRoleInfo(roleId: number) {
|
||||
return request.get(`sys/role/${roleId}`)
|
||||
@ -38,35 +38,32 @@ 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 })
|
||||
return request.post(`sys/role`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑用户组
|
||||
* @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 })
|
||||
return request.put(`sys/role/${params.role_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户组
|
||||
* @param role_id
|
||||
* @returns
|
||||
* @param roleId
|
||||
*/
|
||||
export function deleteRole(roleId: number) {
|
||||
return request.delete(`sys/role/${roleId}`, { showSuccessMessage: true })
|
||||
return request.delete(`sys/role/${roleId}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 全部分组
|
||||
* @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,37 +89,34 @@ 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 })
|
||||
return request.post('sys/menu', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
* @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 })
|
||||
return request.put(`sys/menu/${params.menu_key}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
* @param id
|
||||
* @returns
|
||||
* @param menu_key
|
||||
*/
|
||||
export function deleteMenu(menu_key: string) {
|
||||
return request.delete(`sys/menu/${menu_key}`, { showSuccessMessage: true })
|
||||
return request.delete(`sys/menu/${menu_key}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 站点菜单 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取站点菜单
|
||||
* @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,16 +143,16 @@ 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 })
|
||||
return request.put(`sys/config/website`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取版权设置
|
||||
* @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,70 +168,70 @@ 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 })
|
||||
return request.put(`sys/config/copyright`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取附件组列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentCategoryList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/category`, { params })
|
||||
return request.get(`sys/attachment/category`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加分类
|
||||
* @param params
|
||||
* @param params
|
||||
*/
|
||||
export function addAttachmentCategory(params: Record<string, any>) {
|
||||
return request.post(`sys/attachment/category`, params, { showSuccessMessage: true })
|
||||
return request.post(`sys/attachment/category`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑分类
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editAttachmentCategory(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/category/${params.id}`, params, { showSuccessMessage: true })
|
||||
return request.put(`sys/attachment/category/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除分类
|
||||
* @param id
|
||||
* @returns
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachmentCategory(id: number) {
|
||||
return request.delete(`sys/attachment/category/${id}`, { showSuccessMessage: true })
|
||||
return request.delete(`sys/attachment/category/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取附件列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment`, { params })
|
||||
return request.get(`sys/attachment`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除附件
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachment(params: Record<string, any>) {
|
||||
return request.delete(`sys/attachment/del`, { data: params, showSuccessMessage: true })
|
||||
return request.delete(`sys/attachment/del`, {data: params, showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 移动附件
|
||||
* @param params
|
||||
* @returns
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function moveAttachment(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/batchmove`, params)
|
||||
@ -262,15 +255,32 @@ export function getShortcutMenu() {
|
||||
* 添加快捷菜单
|
||||
*/
|
||||
export function setShortcutMenu(params: Record<string, any>) {
|
||||
return request.put(`sys/config/shortcut_menu`, params, { showSuccessMessage: true })
|
||||
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}`)
|
||||
@ -278,8 +288,7 @@ export function getAreaListByPid(pid: number = 0) {
|
||||
|
||||
/**
|
||||
* 获取地址树列表
|
||||
* @param params
|
||||
* @returns
|
||||
* @param level
|
||||
*/
|
||||
export function getAreatree(level: number = 1) {
|
||||
return request.get(`sys/area/tree/${level}`)
|
||||
@ -290,22 +299,20 @@ export function getAreatree(level: number = 1) {
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getAddressInfo(params: any) {
|
||||
return request.get(`sys/area/get_info`, { params })
|
||||
return request.get(`sys/area/get_info`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getContraryAddress(params: any) {
|
||||
return request.get(`sys/area/contrary`, { params })
|
||||
return request.get(`sys/area/contrary`, {params})
|
||||
}
|
||||
|
||||
/***************************************************** 存储设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取存储配置列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getStorageList() {
|
||||
return request.get(`sys/storage`)
|
||||
@ -313,8 +320,7 @@ export function getStorageList() {
|
||||
|
||||
/**
|
||||
* 获取存储详情
|
||||
* @param params
|
||||
* @returns
|
||||
* @param type
|
||||
*/
|
||||
export function getStorageInfo(type: string) {
|
||||
return request.get(`sys/storage/${type}`)
|
||||
@ -322,18 +328,18 @@ 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 })
|
||||
return request.put(`sys/storage/${params.storage_type}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 支付设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getPayConfig(type: string) {
|
||||
return request.get(`pay/config/${type}`)
|
||||
@ -341,15 +347,15 @@ export function getPayConfig(type: string) {
|
||||
|
||||
/**
|
||||
* 配置支付
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function setPayConfig(params: Record<string, any>) {
|
||||
return request.put(`pay/config/${params.type}`, params, { showSuccessMessage: true });
|
||||
return request.put(`pay/config/${params.type}`, params, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付列表
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getPayList() {
|
||||
return request.get(`pay/lists`)
|
||||
@ -358,8 +364,7 @@ export function getPayList() {
|
||||
/***************************************************** 打款设置 ****************************************************/
|
||||
/**
|
||||
* 获取打款设置配置
|
||||
* @returns channel 渠道
|
||||
* @returns
|
||||
* @param channel
|
||||
*/
|
||||
export function getTransferInfo(channel) {
|
||||
return request.get(`pay/channel/lists/${channel}`)
|
||||
@ -367,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/schedule/list`, { 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`)
|
||||
@ -411,7 +457,7 @@ export function getAgreementList() {
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getAgreementInfo(key: string) {
|
||||
return request.get(`sys/agreement/${key}`);
|
||||
@ -419,15 +465,15 @@ export function getAgreementInfo(key: string) {
|
||||
|
||||
/**
|
||||
* 更新协议
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function editAgreement(params: Record<string, any>) {
|
||||
return request.put(`sys/agreement/${params.key}`, params, { showSuccessMessage: true })
|
||||
return request.put(`sys/agreement/${params.key}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getChannelType() {
|
||||
return request.get(`sys/channel`);
|
||||
@ -436,7 +482,7 @@ export function getChannelType() {
|
||||
|
||||
/**
|
||||
* 获取渠道域名
|
||||
* @returns
|
||||
* @returns
|
||||
*/
|
||||
export function getSceneDomain() {
|
||||
return request.get(`sys/scene_domain`);
|
||||
@ -446,8 +492,6 @@ export function getSceneDomain() {
|
||||
|
||||
/**
|
||||
* 管理端登录注册配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getConfigLogin() {
|
||||
return request.get(`sys/config/login`)
|
||||
@ -455,11 +499,11 @@ 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 })
|
||||
return request.put(`sys/config/login`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
@ -473,7 +517,7 @@ export function getPayConfigList() {
|
||||
* 设置支付配置
|
||||
*/
|
||||
export function setPatConfig(params: Record<string, any>) {
|
||||
return request.post(`pay/channel/set/all`, params, { showSuccessMessage: true })
|
||||
return request.post(`pay/channel/set/all`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
@ -482,14 +526,14 @@ export function setPatConfig(params: Record<string, any>) {
|
||||
* 刷新菜单
|
||||
*/
|
||||
export function menuRefresh(params: Record<string, any>) {
|
||||
return request.post(`sys/menu/refresh`, {}, { showSuccessMessage: true })
|
||||
return request.post(`sys/menu/refresh`, {}, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理数据字段缓存
|
||||
*/
|
||||
export function clearSchemaCache(params: Record<string, any>) {
|
||||
return request.post(`sys/schema/clear`, {}, { showSuccessMessage: true })
|
||||
return request.post(`sys/schema/clear`, {}, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
@ -507,8 +551,9 @@ export function getAppMange() {
|
||||
* 设置地图key
|
||||
*/
|
||||
export function setMap(params: Record<string, any>) {
|
||||
return request.put(`sys/config/map`, params, { showSuccessMessage: true })
|
||||
return request.put(`sys/config/map`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图配置
|
||||
*/
|
||||
@ -528,5 +573,5 @@ export function getIndexList() {
|
||||
* 设置首页模版
|
||||
*/
|
||||
export function setIndexList(params: Record<string, any>) {
|
||||
return request.put(`sys/config/site_index`, params, { showSuccessMessage: true })
|
||||
return request.put(`sys/config/site_index`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
@ -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,65 @@ 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.put('applet/version/add', 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.get(`applet/version/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本删除
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteVersion(id: string) {
|
||||
return request.delete(`applet/version/${id}`)
|
||||
}
|
||||
@ -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})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 59 KiB 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: {
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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": "可选数量已达上限"
|
||||
},
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"preview": "预览",
|
||||
"h5": "H5",
|
||||
"weapp": "微信小程序",
|
||||
"wechat": "微信公众号",
|
||||
"link": "链接",
|
||||
|
||||
@ -2,19 +2,12 @@
|
||||
"id":"主键",
|
||||
"accountDetail":"账单详情",
|
||||
"detail":"详情",
|
||||
"idPlaceholder":"请输入主键",
|
||||
"siteId":"站点id",
|
||||
"siteIdPlaceholder":"请输入站点id",
|
||||
"type":"账单类型",
|
||||
"money":"账单金额",
|
||||
"moneyPlaceholder":"请输入账单金额",
|
||||
"tradeNo":"账单编号",
|
||||
"tradeNoPlaceholder":"请输入账单编号",
|
||||
"createTime":"添加时间",
|
||||
"createTimePlaceholder":"请输入添加时间",
|
||||
"addSiteAccountLog":"添加站点账单记录",
|
||||
"updateSiteAccountLog":"编辑站点账单记录",
|
||||
"siteAccountLogDeleteTips":"确定要删除该站点账单记录吗?",
|
||||
"createTime":"账单日期",
|
||||
"totalPay":"累计收款(元)",
|
||||
"totalRefund":"累计退款(元)",
|
||||
"totalTransfer":"累计转账(元)",
|
||||
|
||||
@ -52,14 +52,14 @@
|
||||
"siteType": "站点类型",
|
||||
"periodTime": "有效期",
|
||||
"renew": "续费",
|
||||
"selectModel": "选择模版",
|
||||
"selectModel": "选择模块",
|
||||
"addMenu": "添加模块",
|
||||
"shortcutLink": "模版",
|
||||
"emptyMenu": "暂无快捷模块",
|
||||
"select": "选择",
|
||||
"custom": "自定义",
|
||||
"accessSite": "访问站点",
|
||||
"pathSelect": "选择模版",
|
||||
"pathSelect": "选择模块",
|
||||
"bgColorPlaceholder": "请选择背景色",
|
||||
"iconPlaceholder": "请选择图标",
|
||||
"pathPlaceholder": "请选择链接",
|
||||
|
||||
@ -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。"
|
||||
}
|
||||
|
||||
11
admin/src/lang/zh-cn/setting.weapp.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"addVersion": "上传版本",
|
||||
"version": "版本号",
|
||||
"versionPlaceholder": "请添加版本号",
|
||||
"createTime": "创建时间",
|
||||
"status": "状态",
|
||||
"editVersion": "添加/编辑版本",
|
||||
"file": "文件",
|
||||
"filePlaceholder":"请上传版本文件",
|
||||
"desc": "版本说明"
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
"startDate":"开始时间",
|
||||
"cron":"定时执行",
|
||||
"endDate":"结束时间",
|
||||
"titlePlaceholder": "请输入任务名称",
|
||||
"titlePlaceholder": "请选择任务模版",
|
||||
"typeName":"任务类型",
|
||||
"crondType":"任务周期",
|
||||
"count":"已执行次数",
|
||||
@ -16,5 +16,15 @@
|
||||
"statusDesc":"最后执行结果",
|
||||
"key": "key",
|
||||
"timeClass": "时间类型",
|
||||
"executeTime": "执行时间"
|
||||
"executeTime": "执行时间",
|
||||
"editCron": "编辑任务",
|
||||
"cronTemplate": "任务模版",
|
||||
"cronTime": "任务周期",
|
||||
"openStatus": "任务状态",
|
||||
"day": "日",
|
||||
"hour": "时",
|
||||
"min": "分",
|
||||
"cronDeleteTips": "你确定要删除任务吗",
|
||||
"addCron": "添加任务",
|
||||
"cronTimeTips": "任务周期时间不能为空"
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -16,8 +16,8 @@
|
||||
<template #title>
|
||||
<div class="relative">
|
||||
<span :class="['ml-[10px]', {'text-[15px]': routes.meta.class == 1}, {'text-[14px]': routes.meta.class != 1}]">{{ meta.title }}</span>
|
||||
<div class="absolute top-[50%] -translate-y-[50%] right-[-288%]" @click="checkIndexList">
|
||||
<img v-if="routes.path == '/site/siteindex'" class="w-[12px] h-[12px]" src="@/assets/images/index/model_tag.png"/>
|
||||
<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>
|
||||
@ -31,12 +31,12 @@
|
||||
<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 ? 'selected' : '' ">
|
||||
<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 ? 'selected' : '' ">
|
||||
<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>
|
||||
@ -53,7 +53,6 @@
|
||||
import { t } from '@/lang'
|
||||
import { getIndexList, setIndexList } from '@/api/sys'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { CollectionTag } from '@element-plus/icons-vue'
|
||||
import { ref, computed } from 'vue'
|
||||
import menuItem from './menu-item.vue'
|
||||
const router = useRouter()
|
||||
@ -79,6 +78,11 @@ 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
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -106,8 +110,13 @@ const submitIndex = () => {
|
||||
.el-alert .el-alert__description{
|
||||
margin-top: 0;
|
||||
}
|
||||
.selected {
|
||||
color: #fff;
|
||||
background-color: #2C3EEF;
|
||||
.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>
|
||||
|
||||
@ -64,12 +64,12 @@
|
||||
<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 ? 'selected' : '' ">
|
||||
<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 ? 'selected' : '' ">
|
||||
<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>
|
||||
@ -94,9 +94,7 @@ 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'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
|
||||
const router = useRouter()
|
||||
const appType = storage.get('app_type')
|
||||
@ -188,6 +186,11 @@ 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
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -210,20 +213,17 @@ const submitIndex = () => {
|
||||
}
|
||||
.navbar-item {
|
||||
padding: 0 8px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--el-bg-color-page);
|
||||
}
|
||||
}
|
||||
.index-item {
|
||||
background-color: var(--el-bg-color-page);
|
||||
&:hover {
|
||||
border: 1px solid;
|
||||
border-color: var(--el-color-primary);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background-color: #2C3EEF;
|
||||
}
|
||||
}
|
||||
.selected {
|
||||
color: #fff;
|
||||
background-color: #2C3EEF;
|
||||
background-color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -43,6 +43,7 @@ import useSystemStore from '@/stores/modules/system'
|
||||
import { useDark, useToggle } from '@vueuse/core'
|
||||
import { setThemeColor } from '@/utils/common'
|
||||
import { t } from '@/lang'
|
||||
|
||||
const drawer = ref(false)
|
||||
const systemStore = useSystemStore()
|
||||
|
||||
|
||||
@ -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: () => {
|
||||
|
||||
@ -33,9 +33,9 @@ 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_info.site_code })
|
||||
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_info.site_code })
|
||||
storage.set({ key: 'comparisonSiteIdStorage', data: res.data.site_info.site_id })
|
||||
storage.set({ key: 'comparisonTokenStorage', data: res.data.token })
|
||||
resolve(res)
|
||||
})
|
||||
|
||||
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_pgas1v4bw2a.woff2?t=1686965237342') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_pgas1v4bw2a.woff?t=1686965237342') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_pgas1v4bw2a.ttf?t=1686965237342') format('truetype');
|
||||
src: url('//at.alicdn.com/t/c/font_3883393_0wpbzuop0spi.woff2?t=1688032173237') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_0wpbzuop0spi.woff?t=1688032173237') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_3883393_0wpbzuop0spi.ttf?t=1688032173237') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@ -13,6 +13,30 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.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";
|
||||
}
|
||||
709
admin/src/styles/icon/iconfont.json
Normal file
@ -0,0 +1,709 @@
|
||||
{
|
||||
"id": "3883393",
|
||||
"name": "系统",
|
||||
"font_family": "iconfont",
|
||||
"css_prefix_text": "icon",
|
||||
"description": "系统图标",
|
||||
"glyphs": [
|
||||
{
|
||||
"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';
|
||||
@ -3,7 +3,6 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
import { useCssVar, useTitle } from '@vueuse/core'
|
||||
import colorFunction from 'css-color-function'
|
||||
import storage from './storage'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
/**
|
||||
* 全局注册element-icon
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{ pageName }}</span>
|
||||
<span class="text-[20px]">{{ pageName }}</span>
|
||||
<el-button type="primary" @click="addEvent">{{ t('addArticleCategory') }}</el-button>
|
||||
</div>
|
||||
|
||||
@ -59,6 +59,7 @@ import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import EditCategory from '@/views/article/components/edit-category.vue'
|
||||
import { debounce } from '@/utils/common'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -9,42 +9,35 @@
|
||||
<span class="right">{{ pageName }}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
<el-form-item :label="t('title')" prop="title">
|
||||
<el-input v-model="formData.title" clearable :placeholder="t('titlePlaceholder')" class="input-width"
|
||||
maxlength="20" />
|
||||
<el-input v-model="formData.title" clearable :placeholder="t('titlePlaceholder')" class="input-width" maxlength="20" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('categoryName')" prop="category_id">
|
||||
<el-select v-model="formData.category_id" clearable :placeholder="t('categoryIdPlaceholder')"
|
||||
class="input-width">
|
||||
<el-select v-model="formData.category_id" clearable :placeholder="t('categoryIdPlaceholder')" class="input-width">
|
||||
<el-option :label="item['name']" :value="item['category_id']" v-for="item in categoryList" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('intro')" prop="intro">
|
||||
<el-input v-model="formData.intro" type="textarea" rows="4" clearable
|
||||
:placeholder="t('introPlaceholder')" class="input-width" maxlength="50" />
|
||||
<el-input v-model="formData.intro" type="textarea" rows="4" clearable :placeholder="t('introPlaceholder')" class="input-width" maxlength="50" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('summary')" prop="summary">
|
||||
<el-input v-model="formData.summary" type="textarea" rows="4" clearable
|
||||
:placeholder="t('summaryPlaceholder')" class="input-width" maxlength="50" />
|
||||
<el-input v-model="formData.summary" type="textarea" rows="4" clearable :placeholder="t('summaryPlaceholder')" class="input-width" maxlength="50" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('image')">
|
||||
<upload-image v-model="formData.image" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('author')" prop="author">
|
||||
<el-input v-model="formData.author" clearable :placeholder="t('authorPlaceholder')" class="input-width"
|
||||
maxlength="20" />
|
||||
<el-input v-model="formData.author" clearable :placeholder="t('authorPlaceholder')" class="input-width" maxlength="20" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('content')" prop="content">
|
||||
<editor v-model="formData.content" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('visitVirtual')">
|
||||
<el-input v-model="formData.visit_virtual" clearable :placeholder="t('visitVirtualPlaceholder')"
|
||||
class="input-width" />
|
||||
<el-input v-model="formData.visit_virtual" clearable :placeholder="t('visitVirtualPlaceholder')" class="input-width" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('isShow')">
|
||||
<el-radio-group v-model="formData.is_show" :placeholder="t('isShowPlaceholder')">
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{ pageName }}</span>
|
||||
<span class="text-[20px]">{{ pageName }}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="addEvent">{{ t('addArticle') }}</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
@ -46,19 +46,7 @@
|
||||
|
||||
<el-form-item :label="t('menuIcon')" prop="icon" v-show="formData.menu_type != 2">
|
||||
<div class="input-width">
|
||||
<select-icon placement="bottom" width="300px" @select="selectMenuIcon">
|
||||
<template #reference>
|
||||
<el-input>
|
||||
<template #prepend>
|
||||
<icon :name="formData.icon" v-if="formData.icon" />
|
||||
<div v-else class="w-[16px]"></div>
|
||||
</template>
|
||||
<template #append>
|
||||
<icon name="element-RefreshRight" type="element" @click="formData.icon = ''" />
|
||||
</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</select-icon>
|
||||
<select-icon v-model="formData.icon" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
@ -171,12 +159,6 @@ const formRules = computed(() => {
|
||||
}
|
||||
})
|
||||
|
||||
// 选择图标
|
||||
const selectMenuIcon = (icon: any) => {
|
||||
formData.icon = ''
|
||||
setTimeout(() => { formData.icon = icon }, 200)
|
||||
}
|
||||
|
||||
const emit = defineEmits(['complete'])
|
||||
|
||||
/**
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<el-dialog v-model="showDialog" :title="popTitle" width="500px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
<el-form-item :label="t('roleName')" prop="role_name">
|
||||
<el-input v-model="formData.role_name" :placeholder="t('roleNamePlaceholder')" clearable :disabled="formData.uid" class="input-width" maxlength="10" :show-word-limit="true" />
|
||||
</el-form-item>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
|
||||
<el-form :inline="true" :model="sysUserLogTableData.searchParam" ref="searchFormRef">
|
||||
@ -61,6 +61,7 @@ import { getLogList } from '@/api/site'
|
||||
import UserLogDetail from '@/views/auth/components/user-log-detail.vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { FormInstance } from 'element-plus'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{ pageName }}</span>
|
||||
<span class="text-[20px]">{{ pageName }}</span>
|
||||
<!-- <el-button type="primary" class="w-[100px]" @click="addEvent">
|
||||
{{ t('addMenu') }}
|
||||
</el-button> -->
|
||||
@ -55,6 +55,7 @@ import { getMenus, deleteMenu } from '@/api/sys'
|
||||
import { t } from '@/lang'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import EditMenu from '@/views/auth/components/edit-menu.vue'
|
||||
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="addEvent">{{ t('addRole') }}</el-button>
|
||||
</div>
|
||||
|
||||
@ -55,6 +55,7 @@ import { t } from '@/lang'
|
||||
import { getRoleList, deleteRole } from '@/api/sys'
|
||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import EditRole from '@/views/auth/components/edit-role.vue'
|
||||
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{ pageName }}</span>
|
||||
<span class="text-[20px]">{{ pageName }}</span>
|
||||
<!-- <el-button type="primary" class="w-[100px]" @click="addEvent">
|
||||
{{ t('addMenu') }}
|
||||
</el-button> -->
|
||||
@ -56,6 +56,7 @@ import { getMenus, deleteMenu } from '@/api/sys'
|
||||
import { t } from '@/lang'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import EditMenu from '@/views/auth/components/edit-menu.vue'
|
||||
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="addEvent">{{ t('addUser') }}</el-button>
|
||||
</div>
|
||||
|
||||
@ -88,6 +88,7 @@ import { img } from '@/utils/common'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px] mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-form :model="formData" label-width="150px" ref="formRef" class="page-form" v-loading="loading">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
@ -95,6 +95,7 @@ import { setAliappConfig, getAliappConfig, getAliappStatic } from '@/api/aliapp'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { ElMessage, FormInstance } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-form :model="formData" label-width="150px" ref="formRef" class="page-form" v-loading="loading">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
@ -36,6 +36,7 @@ import { getUrl } from '@/api/sys'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { ElMessage, FormInstance } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container" v-loading="loading">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-form :model="formData" label-width="150px" ref="formRef" class="page-form">
|
||||
|
||||
@ -29,8 +29,9 @@ import { reactive, ref, watch } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getUrl } from '@/api/sys'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { ElMessage, FormInstance, FormRules } from 'element-plus'
|
||||
import { ElMessage, FormInstance } from 'element-plus'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-form :model="formData" label-width="170px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
@ -43,8 +43,7 @@
|
||||
<el-form-item label="URL">
|
||||
<el-input :model-value="formData.serve_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.serve_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.serve_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -79,32 +78,28 @@
|
||||
<el-form-item :label="t('requestUrl')">
|
||||
<el-input :model-value="formData.request_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.request_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.request_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('socketUrl')">
|
||||
<el-input :model-value="formData.socket_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.socket_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.socket_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('uploadUrl')">
|
||||
<el-input :model-value="formData.upload_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.upload_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.upload_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('downloadUrl')">
|
||||
<el-input :model-value="formData.download_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.download_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(formData.download_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -127,6 +122,7 @@ import { getWeappConfig, setWeappConfig } from '@/api/weapp'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { ElMessage, FormInstance, FormRules } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="batchAcquisitionFn">{{ t('batchAcquisition') }}</el-button>
|
||||
</div>
|
||||
<el-alert class="warm-prompt !my-[20px]" type="info">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
|
||||
<el-form :model="formData" label-width="150px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
@ -44,8 +44,7 @@
|
||||
<el-form-item label="URL">
|
||||
<el-input :model-value="wechatStatic.serve_url" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.serve_url)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.serve_url)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -84,8 +83,7 @@
|
||||
<el-form-item :label="t('businessDomain')">
|
||||
<el-input :model-value="wechatStatic.business_domain" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -93,8 +91,7 @@
|
||||
<el-form-item :label="t('jsSecureDomain')">
|
||||
<el-input :model-value="wechatStatic.js_secure_domain" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -102,8 +99,7 @@
|
||||
<el-form-item :label="t('webAuthDomain')">
|
||||
<el-input :model-value="wechatStatic.web_auth_domain" placeholder="Please input" class="input-width" :readonly="true">
|
||||
<template #append>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}
|
||||
</div>
|
||||
<div class="cursor-pointer" @click="copyEvent(wechatStatic.business_domain)">{{ t('copy') }}</div>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@ -126,6 +122,7 @@ import { getWechatConfig, getWechatStatic, editWechatConfig } from '@/api/wechat
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { ElMessage, FormInstance, FormRules } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
|
||||
@ -11,8 +11,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-1 flex w-0">
|
||||
<div class="menu-item py-[15px] flex items-center justify-center cursor-pointer"
|
||||
:class="{ 'size-1': button.length == 1, 'size-2-3': button.length > 1, 'active': index == buttonIndex, 'curr': index == buttonIndex && subButtonIndex == -1 }"
|
||||
<div class="menu-item py-[15px] flex items-center justify-center cursor-pointer" :class="{ 'size-1': button.length == 1, 'size-2-3': button.length > 1, 'active': index == buttonIndex, 'curr': index == buttonIndex && subButtonIndex == -1 }"
|
||||
v-for="(item, index) in button" :key="index" @click="selectButton(index)">
|
||||
<div class="menu-name px-[10px] border-r border-color w-full leading-[40px] text-base truncate text-center">{{ item.name }}</div>
|
||||
<div class="active-shade"></div>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="batchAcquisitionFn">{{ t('batchAcquisition') }}</el-button>
|
||||
</div>
|
||||
<el-alert class="warm-prompt !my-[20px]" type="info">
|
||||
|
||||
@ -94,7 +94,6 @@
|
||||
import {ref, reactive} from 'vue'
|
||||
import {img} from '@/utils/common'
|
||||
import {getArticleList} from '@/api/article'
|
||||
import {ElTable} from 'element-plus'
|
||||
|
||||
const diyStore = useDiyStore()
|
||||
diyStore.editComponent.ignore = []; // 忽略公共属性
|
||||
|
||||
@ -49,7 +49,6 @@
|
||||
import Sortable from 'sortablejs'
|
||||
import {img} from '@/utils/common'
|
||||
import {range} from 'lodash-es'
|
||||
|
||||
import useDiyStore from '@/stores/modules/diy'
|
||||
|
||||
const diyStore = useDiyStore()
|
||||
|
||||
@ -89,7 +89,7 @@
|
||||
<template #header>
|
||||
<div class="card-header flex justify-between items-center">
|
||||
<span class="title flex-1">{{ diyStore.currentIndex == -99 ? t('pageSet') : diyStore.editComponent.componentTitle }}</span>
|
||||
<div class="tab-wrap flex rounded-[50px] bg-gray-100 text-[14px]">
|
||||
<div class="tab-wrap flex rounded-[50px] bg-gray-100 text-[14px]" v-if="diyStore.currentComponent">
|
||||
<span class="cursor-pointer rounded-[50px] py-[5px] px-[15px]" :class="{ 'bg-primary text-white': diyStore.editTab == 'content'}" @click="diyStore.editTab = 'content'">{{ t('tabEditContent') }}</span>
|
||||
<span class="cursor-pointer rounded-[50px] py-[5px] px-[15px]" :class="{ 'bg-primary text-white': diyStore.editTab == 'style'}" @click="diyStore.editTab = 'style'">{{ t('tabEditStyle') }}</span>
|
||||
</div>
|
||||
@ -98,7 +98,7 @@
|
||||
|
||||
<div class="edit-component-wrap">
|
||||
|
||||
<component :is="modules[diyStore.currentComponent]" :value="diyStore.value[diyStore.currentIndex]">
|
||||
<component v-if="diyStore.currentComponent" :is="modules[diyStore.currentComponent]" :value="diyStore.value[diyStore.currentIndex]">
|
||||
<template #style>
|
||||
<div class="edit-attr-item-wrap">
|
||||
<h3 class="mb-[10px]">{{ t('componentStyleTitle') }}</h3>
|
||||
@ -129,6 +129,33 @@
|
||||
</div>
|
||||
</template>
|
||||
</component>
|
||||
<div class="edit-attr-item-wrap" v-else>
|
||||
<h3 class="mb-[10px]">{{ t('componentStyleTitle') }}</h3>
|
||||
<el-form label-width="80px" class="px-[10px]">
|
||||
<el-form-item :label="t('bottomBgColor')" class="display-block" v-if="diyStore.editComponent.ignore.indexOf('pageBgColor') == -1">
|
||||
<el-color-picker v-model="diyStore.editComponent.pageBgColor" show-alpha :predefine="diyStore.predefineColors"/>
|
||||
<div class="text-sm text-gray-400">{{ t('bottomBgTips') }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('componentBgColor')" v-if="diyStore.editComponent.ignore.indexOf('componentBgColor') == -1">
|
||||
<el-color-picker v-model="diyStore.editComponent.componentBgColor" show-alpha :predefine="diyStore.predefineColors"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('marginTop')" v-if="diyStore.editComponent.ignore.indexOf('marginTop') == -1">
|
||||
<el-slider v-model="diyStore.editComponent.margin.top" show-input size="small" :min="0" class="ml-[10px] horz-blank-slider"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('marginBottom')" v-if="diyStore.editComponent.ignore.indexOf('marginBottom') == -1">
|
||||
<el-slider v-model="diyStore.editComponent.margin.bottom" show-input size="small" class="ml-[10px] horz-blank-slider"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('marginBoth')" v-if="diyStore.editComponent.ignore.indexOf('marginBoth') == -1">
|
||||
<el-slider v-model="diyStore.editComponent.margin.both" show-input size="small" class="ml-[10px] horz-blank-slider"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('topRounded')" v-if="diyStore.editComponent.ignore.indexOf('topRounded') == -1">
|
||||
<el-slider v-model="diyStore.editComponent.topRounded" show-input size="small" class="ml-[10px] horz-blank-slider" :max="50"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('bottomRounded')" v-if="diyStore.editComponent.ignore.indexOf('bottomRounded') == -1">
|
||||
<el-slider v-model="diyStore.editComponent.bottomRounded" show-input size="small" class="ml-[10px] horz-blank-slider" :max="50"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@ -146,7 +173,7 @@ import { ref, reactive, toRaw, watch } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { addDiyPage, editDiyPage, initPage } from '@/api/diy';
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { cloneDeep, range, isEmpty } from 'lodash-es'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import useDiyStore from '@/stores/modules/diy'
|
||||
import storage from '@/utils/storage'
|
||||
@ -174,7 +201,6 @@ const backPath = route.query.back
|
||||
const component = ref([])
|
||||
const componentType: string[] = reactive([])
|
||||
const page = ref('')
|
||||
const siteId = ref(0)
|
||||
|
||||
const activeNames = ref(componentType)
|
||||
const handleChange = (val: string[]) => { }
|
||||
@ -299,7 +325,6 @@ initPage({
|
||||
wapDomain.value = data.domain_url.wap_domain;
|
||||
wapUrl.value = data.domain_url.wap_url;
|
||||
page.value = data.page;
|
||||
siteId.value = data.site_id;
|
||||
setDomain();
|
||||
|
||||
// 生产模式禁止
|
||||
@ -348,15 +373,27 @@ window.addEventListener('message', (event) => {
|
||||
}, false);
|
||||
|
||||
const saveWapDomain = ()=> {
|
||||
if (wapDomain.value.trim().length == 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: `${t('wapDomainPlaceholder')}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
wapUrl.value = wapDomain.value + '/wap'
|
||||
setDomain();
|
||||
storage.set({ key : 'wap_domain', data :wapUrl.value });
|
||||
storage.set({key: 'wap_domain', data: wapUrl.value});
|
||||
loadingIframe.value = true;
|
||||
loadingDev.value = false;
|
||||
}
|
||||
|
||||
const setDomain = ()=>{
|
||||
wapPreview.value = `${wapUrl.value}/${page.value}?mode=decorate&site_id=${siteId.value}`; // 模式:decorate 装修 访问预览页面
|
||||
wapPreview.value = `${wapUrl.value}/${page.value}?mode=decorate`; // 模式:decorate 装修 访问预览页面
|
||||
// 开发模式增加站点id
|
||||
if (import.meta.env.MODE == 'development') {
|
||||
let siteId = storage.get('siteId') || 0;
|
||||
wapPreview.value += `&site_id=${siteId}`;
|
||||
}
|
||||
}
|
||||
|
||||
// 监听iframe加载事件
|
||||
|
||||
@ -1,18 +1,11 @@
|
||||
<template>
|
||||
<div class="flex flex-wrap">
|
||||
<div class="page-item relative bg-no-repeat mr-[40px] mt-[20px] bg-[#f7f7f7] w-[300px] pt-[80px] pb-[20px]"
|
||||
:class="{ 'cursor-pointer' : !item.isDisabledPop }"
|
||||
v-for="(item,key) in page"
|
||||
:key="key">
|
||||
<p class="absolute top-[46px] left-[50%] translate-x-[-50%] text-[14px] truncate w-[130px] text-center">
|
||||
{{item.use_template.title}}</p>
|
||||
<div class="page-item relative bg-no-repeat ml-[20px] mr-[40px] mt-[20px] bg-[#f7f7f7] w-[300px] pt-[80px] pb-[20px]" :class="{ 'cursor-pointer' : !item.isDisabledPop }" v-for="(item,key) in page" :key="key">
|
||||
<p class="absolute top-[46px] left-[50%] translate-x-[-50%] text-[14px] truncate w-[130px] text-center">{{item.use_template.title}}</p>
|
||||
|
||||
<div v-show="item.use_template.url" class="w-[282px] h-[500px] mx-auto">
|
||||
<iframe v-show="item.loadingIframe" class="w-[282px] h-[500px] mx-auto"
|
||||
:src="item.use_template.wapPreview"
|
||||
frameborder="0" @load="loadIframe(key)"></iframe>
|
||||
<div v-show="item.loadingDev"
|
||||
class="w-[282px] h-[500px] mx-auto bg-body pt-[20px] px-[20px]">
|
||||
<div v-show="item.use_template.url" class="w-[282px] h-[493px] mx-auto">
|
||||
<iframe v-show="item.loadingIframe" class="w-[282px] h-[493px] mx-auto" :src="item.use_template.wapPreview" frameborder="0" @load="loadIframe(key)"></iframe>
|
||||
<div v-show="item.loadingDev" class="w-[282px] h-[493px] mx-auto bg-body pt-[20px] px-[20px]">
|
||||
<div class="font-bold text-xl mb-[40px]">{{t('developTitle')}}</div>
|
||||
<div class="mb-[20px] flex flex-col">
|
||||
<text class="mb-[10px]">{{ t('wapDomain') }}</text>
|
||||
@ -22,20 +15,17 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-show="!item.use_template.wapPreview" class="overflow-hidden w-[282px] h-[500px] mx-auto">
|
||||
<img class="max-w-full" v-if="item.use_template.cover"
|
||||
:src="img(item.use_template.cover)"/>
|
||||
<div v-show="!item.use_template.wapPreview" class="overflow-hidden w-[282px] h-[493px] mx-auto">
|
||||
<img class="max-w-full" v-if="item.use_template.cover" :src="img(item.use_template.cover)"/>
|
||||
</div>
|
||||
|
||||
<p class="text-[12px] text-[#999] mt-[10px] mx-auto truncate text-center w-[250px]">
|
||||
{{item.use_template.desc}}</p>
|
||||
<p class="text-[12px] text-[#999] mt-[10px] mx-auto truncate text-center w-[250px]">{{item.use_template.desc}}</p>
|
||||
|
||||
<div class="item-hide absolute inset-x-0 inset-y-0 bg-black bg-opacity-50 text-center rounded-[40px]"
|
||||
:class="{ 'disabled' : item.isDisabledPop }">
|
||||
<div class="item-hide absolute inset-x-0 inset-y-0 bg-black bg-opacity-50 text-center" :class="{ 'disabled' : item.isDisabledPop }">
|
||||
<div class="item-btn-box absolute top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%] flex flex-col flex-wrap">
|
||||
<el-button @click="show(key,item)">切换</el-button>
|
||||
<el-button v-show="item.use_template.mode == 'diy'" @click="toDecorate(item.use_template)">装修
|
||||
</el-button>
|
||||
<!-- v-show="item.use_template.mode == 'diy'"-->
|
||||
<el-button @click="toDecorate(item.use_template)">装修</el-button>
|
||||
<el-button @click="toPreview(item.use_template)">预览</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -43,19 +33,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="showDialog" :title="t('changeTemplate')" width="400px" :close-on-press-escape="false"
|
||||
:destroy-on-close="true" :close-on-click-modal="false">
|
||||
<el-dialog v-model="showDialog" :title="t('changeTemplate')" width="400px" :close-on-press-escape="false" :destroy-on-close="true" :close-on-click-modal="false">
|
||||
|
||||
<el-form :model="form" label-width="0px" v-if="formData.type">
|
||||
<el-form-item label="">
|
||||
<div>{{t('hopeBeforeTip')}}<span class="text-primary px-[5px]">{{ page[formData.type].title }}</span>{{t('hopeAfterTip')}}
|
||||
</div>
|
||||
<div>{{t('hopeBeforeTip')}}<span class="text-primary px-[5px]">{{ page[formData.type].title }}</span>{{t('hopeAfterTip')}}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="">
|
||||
<el-select v-model="hope" class="w-full">
|
||||
<el-option :label="t('changeTemplateTip') + ' ' + page[formData.type].title + ' ' + t('template')"
|
||||
value="template"/>
|
||||
<el-option :label="t('changeTemplateTip') + ' ' + page[formData.type].title + ' ' + t('template')" value="template"/>
|
||||
<el-option :label="t('changeMyPageTip') + ' ' + page[formData.type].title" value="diy"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -68,8 +55,7 @@
|
||||
|
||||
<el-form-item label="" v-show="hope == 'diy'">
|
||||
<el-select v-model="formData.id" class="w-full">
|
||||
<el-option v-for="(item, index) in page[formData.type].my_page" :label="item.title"
|
||||
:value="item.id"/>
|
||||
<el-option v-for="(item, index) in page[formData.type].my_page" :label="item.title" :value="item.id"/>
|
||||
</el-select>
|
||||
<div class="mt-[10px]">
|
||||
<span class="cursor-pointer text-primary mr-[10px]" @click="toDiyList">{{ t('createPage') }}</span>
|
||||
@ -90,11 +76,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {reactive, ref, watch, computed} from 'vue'
|
||||
import {reactive, ref, watch} from 'vue'
|
||||
import {t} from '@/lang'
|
||||
import {img} from '@/utils/common'
|
||||
import {useRoute, useRouter} from 'vue-router'
|
||||
import {TabsPaneContext, ElMessage, ElMessageBox} from 'element-plus'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {getDecoratePage, getDiyList, changeTemplate} from '@/api/diy'
|
||||
import storage from '@/utils/storage'
|
||||
|
||||
@ -124,23 +110,31 @@
|
||||
|
||||
for (let key in page) {
|
||||
if (page[key].use_template.url) {
|
||||
|
||||
page[key].loadingIframe = false; // 加载iframe
|
||||
page[key].loadingDev = false; // 加载开发环境配置
|
||||
page[key].isDisabledPop = false; // 是否禁止打开遮罩层
|
||||
page[key].timeFrame = 0;
|
||||
|
||||
wapDomain.value = page[key].domain_url.wap_domain;
|
||||
page[key].wapUrl = page[key].domain_url.wap_url;
|
||||
|
||||
// 开发模式情况下,并且未配置wap域名,则获取缓存域名
|
||||
if (import.meta.env.MODE == 'development' && !wapDomain.value && storage.get('wap_domain')) {
|
||||
page[key].wapUrl = storage.get('wap_domain')
|
||||
page[key].loadingIframe = true; // 加载iframe
|
||||
page[key].loadingDev = false; // 加载开发环境配置
|
||||
page[key].isDisabledPop = false; // 是否禁止打开遮罩层
|
||||
// 开发模式增加站点id
|
||||
if (import.meta.env.MODE == 'development') {
|
||||
let siteId = storage.get('siteId') || 0;
|
||||
page[key].use_template.url += `&site_id=${siteId}`;
|
||||
|
||||
// 开发模式情况下,并且未配置wap域名,则获取缓存域名
|
||||
if (!wapDomain.value && storage.get('wap_domain')) {
|
||||
page[key].wapUrl = storage.get('wap_domain')
|
||||
page[key].loadingIframe = true; // 加载iframe
|
||||
page[key].loadingDev = false; // 加载开发环境配置
|
||||
page[key].isDisabledPop = false; // 是否禁止打开遮罩层
|
||||
}
|
||||
page[key].timeFrame = new Date().getTime();
|
||||
}
|
||||
|
||||
setDomain(key);
|
||||
page[key].timeFrame = new Date().getTime();
|
||||
}
|
||||
}
|
||||
|
||||
@ -151,7 +145,6 @@
|
||||
|
||||
// 监听iframe加载事件
|
||||
const loadIframe = (key: string) => {
|
||||
if (storage.get('wap_domain')) return;
|
||||
if (!page[key].use_template.wapPreview) return;
|
||||
|
||||
var loadTime = new Date().getTime();
|
||||
@ -169,6 +162,13 @@
|
||||
}
|
||||
|
||||
const saveDomain = () => {
|
||||
if (wapDomain.value.trim().length == 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: `${t('wapDomainPlaceholder')}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
let wapUrl = wapDomain.value + '/wap';
|
||||
storage.set({key: 'wap_domain', data: wapUrl});
|
||||
|
||||
@ -250,7 +250,7 @@
|
||||
|
||||
// 刷新我的微页面
|
||||
const refreshMyPage = () => {
|
||||
getDiyList({type: formData.type, mode: 'diy'}).then((res) => {
|
||||
getDiyList({type: formData.type}).then((res) => {
|
||||
let isExist = true; // 检测选择的微页面是否存在,不存在则清空
|
||||
for (let i = 0; i < res.data.length; i++) {
|
||||
if (formData.id == res.data[i].id) {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" class="w-[100px]" @click="dialogVisible = true">
|
||||
{{ t('addDiyPage') }}
|
||||
</el-button>
|
||||
@ -123,12 +123,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch, computed } from 'vue'
|
||||
import { reactive, ref, computed } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getDiyPageList, deleteDiyPage, getDiyTemplate, editDiyPageShare } from '@/api/diy'
|
||||
import { ElMessage, ElMessageBox, FormInstance } from 'element-plus'
|
||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import QRCode from "qrcode";
|
||||
import { getUrl } from '@/api/sys'
|
||||
|
||||
const router = useRouter()
|
||||
@ -186,7 +185,7 @@
|
||||
getDomain();
|
||||
|
||||
// 获取自定义页面模板
|
||||
getDiyTemplate({ mode : 'diy' }).then(res => {
|
||||
getDiyTemplate({ mode : '' }).then(res => {
|
||||
for (let key in res.data) {
|
||||
pageType[key] = res.data[key]
|
||||
}
|
||||
@ -200,7 +199,8 @@
|
||||
data: [],
|
||||
searchParam: {
|
||||
"title": "",
|
||||
"template": '',
|
||||
"type": '',
|
||||
'mode':''
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@ -15,33 +15,32 @@
|
||||
<div class="w-[400px] absolute bg-body top-[10%] -right-[450px]" v-if="loadingIframe">
|
||||
|
||||
<div class="info-wrap mt-[20px]">
|
||||
|
||||
<div class="px-[20px] pb-[10px] font-bold">{{t('h5')}}</div>
|
||||
<el-form label-width="40px" class="px-[20px]">
|
||||
<el-form-item :label="t('preview')">
|
||||
<el-radio-group v-model="previewMode">
|
||||
<el-radio :label="'weapp'">{{t('weapp')}}</el-radio>
|
||||
<el-radio :label="'wechat'">{{t('wechat')}}</el-radio>
|
||||
</el-radio-group>
|
||||
|
||||
<el-form-item :label="t('link')" v-show="wapPreview">
|
||||
<el-input readonly :value="wapPreview">
|
||||
<template #append>
|
||||
<el-button @click="copyEvent(wapPreview)" class="bg-primary copy">{{ t('copy') }}</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label=" " v-show="wapImage">
|
||||
<el-image :src="wapImage"/>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div class="px-[20px] pb-[10px] font-bold mt-[40px]">{{t('weapp')}}</div>
|
||||
<el-form label-width="40px" class="px-[20px]">
|
||||
<el-form-item label=" " v-if="weappConfig.qr_code">
|
||||
<el-image class="w-[100px] h-[100px]" :src="img(weappConfig.qr_code)"/>
|
||||
</el-form-item>
|
||||
<el-form-item label=" " v-else>
|
||||
<span class="text-gray-400">{{t('weappNotSet')}}</span>
|
||||
</el-form-item>
|
||||
<template v-if="previewMode == 'wechat'">
|
||||
<el-form-item :label="t('link')" v-show="wapPreview">
|
||||
<el-input readonly :value="wapPreview">
|
||||
<template #append>
|
||||
<el-button @click="copyEvent(wapPreview)" class="bg-primary copy">{{ t('copy') }}</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label=" " v-show="wapImage">
|
||||
<el-image :src="wapImage"/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="previewMode == 'weapp'">
|
||||
<el-form-item label=" " v-if="weappConfig.qr_code">
|
||||
<el-image class="w-[100px] h-[100px]" :src="img(weappConfig.qr_code)"/>
|
||||
</el-form-item>
|
||||
<el-form-item label=" " v-else>
|
||||
<span class="text-gray-400">{{t('weappNotSet')}}</span>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
@ -56,7 +55,7 @@
|
||||
<script lang="ts" setup>
|
||||
import {ref, reactive, watch} from 'vue'
|
||||
import {t} from '@/lang'
|
||||
import {useRoute, useRouter} from 'vue-router'
|
||||
import {useRoute} from 'vue-router'
|
||||
import {getWeappConfig} from '@/api/weapp'
|
||||
import {getUrl} from '@/api/sys'
|
||||
import {useClipboard} from '@vueuse/core'
|
||||
@ -103,6 +102,13 @@
|
||||
});
|
||||
|
||||
const save = () => {
|
||||
if (wapDomain.value.trim().length == 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: `${t('wapDomainPlaceholder')}`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
wapUrl.value = wapDomain.value + '/wap';
|
||||
setDomain();
|
||||
storage.set({key: 'wap_domain', data: wapUrl.value});
|
||||
@ -111,16 +117,18 @@
|
||||
}
|
||||
|
||||
const setDomain = () => {
|
||||
let siteInfo = storage.get('siteInfo');
|
||||
let siteCode = '';
|
||||
if (siteInfo) siteCode = siteInfo.site_code;
|
||||
|
||||
getPreviewData({
|
||||
id: route.query.id,
|
||||
name: route.query.name,
|
||||
}).then((res: any) => {
|
||||
let data = res.data;
|
||||
wapPreview.value = `${wapUrl.value}/${data.page}&mode=preview&site_id=${siteCode}`;
|
||||
wapPreview.value = `${wapUrl.value}/${data.page}`;
|
||||
|
||||
// 开发模式增加站点id
|
||||
if (import.meta.env.MODE == 'development') {
|
||||
let siteId = storage.get('siteId') || 0;
|
||||
wapPreview.value += `&site_id=${siteId}`;
|
||||
}
|
||||
QRCode.toDataURL(wapPreview.value, {errorCorrectionLevel: 'L', margin: 0, width: 100}).then(url => {
|
||||
wapImage.value = url
|
||||
})
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
|
||||
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
|
||||
@ -80,10 +80,9 @@
|
||||
import { reactive, ref, watch, computed } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getDiyTemplate, getDiyRouteList, getDiyRouteInfo, editDiyRouteShare } from '@/api/diy'
|
||||
import { ElMessage, ElMessageBox, FormInstance } from 'element-plus'
|
||||
import { ElMessage, FormInstance } from 'element-plus'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import QRCode from "qrcode";
|
||||
import { getUrl } from '@/api/sys'
|
||||
|
||||
const pageTemplate: any = reactive({})
|
||||
@ -108,6 +107,7 @@ const wapDomain = ref('')
|
||||
const getDomain = async () => {
|
||||
wapDomain.value = (await getUrl()).data.wap_url;
|
||||
};
|
||||
|
||||
getDomain();
|
||||
|
||||
/**
|
||||
@ -134,7 +134,6 @@ getDiyTemplate({}).then(res => {
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const searchFormDiyRouteRef = ref<FormInstance>()
|
||||
|
||||
/**
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
@ -203,12 +203,13 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getAccountList, getAccountStat, getAccountType } from '@/api/site'
|
||||
import { img } from '@/utils/common'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -262,7 +263,6 @@ const accountType = ref([])
|
||||
const checkAccountType = () => {
|
||||
getAccountType().then(res=>{
|
||||
accountType.value = res.data
|
||||
console.log(accountType.value)
|
||||
})
|
||||
}
|
||||
checkAccountType()
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
@ -203,12 +203,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getCashOutList, getTransfertype, memberTransfer, memberAudit, getCashOutDetail, getCashOutStatusList,getCashOutStat } from '@/api/member'
|
||||
import { img } from '@/utils/common'
|
||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import { data } from 'dom7'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
|
||||
const cashOutStatusList = ref([])
|
||||
|
||||
@ -160,14 +160,14 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref,onMounted } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import useSystemStore from '@/stores/modules/system'
|
||||
import { t } from '@/lang'
|
||||
import { getStatInfo } from '@/api/stat'
|
||||
import { ElMessage, FormRules } from 'element-plus'
|
||||
import * as echarts from 'echarts'
|
||||
import { img } from '@/utils/common'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const loading = ref(true)
|
||||
const visitStat = ref<any>(null)
|
||||
const memberStat = ref<any>(null)
|
||||
|
||||
@ -32,10 +32,9 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, computed } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import type { FormInstance, FormRules, ElNotification } from 'element-plus'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { img } from '@/utils/common'
|
||||
import { getUserInfo,setUserInfo } from '@/api/personal'
|
||||
|
||||
|
||||
@ -4,22 +4,26 @@
|
||||
<el-card class="box-card !border-none" shadow="never" >
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex">
|
||||
<div><img class="w-[44px] h-[44px]" src="@/assets/images/index/site_img.png"/></div>
|
||||
<div>
|
||||
<img v-if="statInfo.site_info.icon" class="w-[50px] h-[50px]" :src="img(statInfo.site_info.icon)"/>
|
||||
<img v-else class="w-[50px] h-[50px]" src="@/assets/images/index/site_img.png"/>
|
||||
</div>
|
||||
<div class="ml-[12px]">
|
||||
<div>
|
||||
<span class="font-bold text-[18px]">{{ statInfo.site_info.site_name }}</span>
|
||||
<span class="text-[12px] ml-[12px]">ID:{{ statInfo.site_info.site_code }}</span>
|
||||
<span class="text-[12px] ml-[12px]">ID:{{ statInfo.site_info.site_id }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="text-[14px] text-[#666] mr-[12px]">{{ t('siteType') }}:{{ statInfo.site_info.group_name }}</span>
|
||||
<span class="text-[10px] py-[3px] px-[10px] bg-[#E6EFFF] text-[#2D5FFF] rounded-[3px]">{{ statInfo.site_info.status_name }}</span>
|
||||
<span v-if="statInfo.site_info.status == 1" class="text-[10px] py-[3px] px-[10px] bg-[#E6EFFF] text-[#2D5FFF] rounded-[3px]">{{ statInfo.site_info.status_name }}</span>
|
||||
<span v-else class="text-[10px] py-[3px] px-[10px] bg-[#FFE6E9] text-[#FF2D2D] rounded-[3px]">{{ statInfo.site_info.status_name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div>
|
||||
<div><span class="text-[14px] text-[#666]">{{ t('periodTime') }}:{{ statInfo.site_info.create_time ? statInfo.site_info.create_time.split(' ')[0] : '' }} / {{ statInfo.site_info.expire_time ? statInfo.site_info.expire_time.split(' ')[0] : '' }}</span></div>
|
||||
<div class="w-[300px] h-[12px] bg-[#E6EFFF] rounded-[999px] mt-1">
|
||||
<div class="w-[225px] h-[12px] bg-[#E6EFFF] rounded-[999px] mt-1">
|
||||
<div class="bg-primary site-date rounded-[999px] h-[12px]" :style="{width: statInfo.site_info.mix}"></div>
|
||||
</div>
|
||||
</div>
|
||||
@ -29,7 +33,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-[60px]">
|
||||
<div class="mt-[60px]" v-if="!loading">
|
||||
<div class="card-header flex justify-between border-b-[1px] border-[#EBEBEC] pb-[15px]">
|
||||
<span class="text-[18px]">{{t('appTemplate')}}</span>
|
||||
<div @click="optionModel" v-if="!edit_menu" class="cursor-pointer">
|
||||
@ -39,25 +43,31 @@
|
||||
<el-button type="primary" @click="primary">{{ t('complete') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-wrap" >
|
||||
<div class="flex flex-wrap">
|
||||
<div class="flex flex-wrap" ref="shortcutModel" v-if="edit_menu">
|
||||
<div v-for="(items, index) in shortcut_menu" :style="{backgroundColor : items.bg_color}" :id="items.id" class="design-field w-[180px] h-[120px] relative mt-[30px] rounded-[5px] mr-[30px] cursor-pointer">
|
||||
<div v-for="(items, index) in shortcut_menu" :style="{backgroundColor : items.bg_color}" :key="items.id" class="design-field w-[180px] h-[120px] relative mt-[30px] rounded-[5px] mr-[30px] cursor-pointer">
|
||||
<div class="flex items-center h-[88px]" @click="editModel(items)">
|
||||
<img class="ml-[24px] w-[40px]" :src="img(items.img)"/>
|
||||
<!-- <img class="ml-[24px] w-[40px]" :src="img(items.img)"/> -->
|
||||
<div class="ml-[24px] w-[40px]">
|
||||
<icon :name="items.img" size="40px" color="#fff"></icon>
|
||||
</div>
|
||||
<span class="text-item text-[16px] text-[#fff] ml-[12px] max-w-[120px]">{{ items.name }}</span>
|
||||
</div>
|
||||
<div class="item-bottom h-[32px] leading-[32px] text-center" @click="editModel(items)">
|
||||
<span class="text-item text-[12px] text-[#fff] max-w-[150px]">{{ items.desc }}</span>
|
||||
</div>
|
||||
<div class="delete-item absolute w-[20px] h-[20px] rounded-[999px] overflow-hidden" v-if="edit_menu" @click="remowMenu(items)">
|
||||
<div class="delete-item absolute w-[20px] h-[20px] rounded-[999px] overflow-hidden" v-if="edit_menu" @click="removeMenu(items)">
|
||||
<img class="w-[20px] h-[20px]" src="@/assets/images/index/del_model.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="flex flex-wrap">
|
||||
<div v-for="(items, index) in shortcut_menu" :style="{backgroundColor : items.bg_color}" class="design-field w-[180px] h-[120px] relative mt-[30px] rounded-[5px] overflow-hidden mr-[30px] cursor-pointer">
|
||||
<div v-for="(items, index) in shortcut_menu" :style="{backgroundColor : items.bg_color}" class="w-[180px] h-[120px] relative mt-[30px] rounded-[5px] overflow-hidden mr-[30px] cursor-pointer">
|
||||
<div class="flex items-center h-[88px]" @click="toLink(items.router_path)">
|
||||
<img class="ml-[24px] w-[40px]" :src="img(items.img)"/>
|
||||
<!-- <img class="" :src="img(items.img)"/> -->
|
||||
<div class="ml-[24px] w-[40px]">
|
||||
<icon :name="items.img" size="40px" color="#fff"></icon>
|
||||
</div>
|
||||
<span class="text-item text-[16px] text-[#fff] ml-[12px] max-w-[120px]">{{ items.name }}</span>
|
||||
</div>
|
||||
<div class="item-bottom h-[32px] leading-[32px] text-center" @click="toLink(items.router_path)">
|
||||
@ -65,12 +75,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="edit_menu" class="w-[180px] h-[120px] mt-[30px] rounded-[5px] overflow-hidden border-dashed border-[1px] border-[#D0D7D9] cursor-pointer" @click="showFromMunu">
|
||||
<div v-if="edit_menu" class="w-[180px] h-[120px] mt-[30px] rounded-[5px] overflow-hidden border-dashed border-[1px] border-[#D0D7D9] cursor-pointer" @click="showFromMenu">
|
||||
<div class="w-[40px] mx-auto mt-[20px]"><img class="w-[40px]" src="@/assets/images/index/add_menu.png" /></div>
|
||||
<p class="text-center mt-[5px] text-[20px]">{{ t('addMenu') }}</p>
|
||||
</div>
|
||||
<div v-if="shortcut_menu.length <= 0 && !edit_menu" class="flex w-full justify-center items-center min-w-[1000px] min-h-[400px]">
|
||||
<div>
|
||||
<div v-if="!loading">
|
||||
<img src="@/assets/images/empty.png"/>
|
||||
<p class="text-center text-gray-400">{{ t('emptyMenu') }}</p>
|
||||
</div>
|
||||
@ -80,17 +90,26 @@
|
||||
</el-card>
|
||||
</div>
|
||||
<el-dialog v-model="shortcutMenu" :title="t('addShortcutMenu')" width="500px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
|
||||
<el-form-item :label="t('path')" prop="router_path">
|
||||
<el-input v-model="formData.router_path" clearable class="w-[245px]" placeholder="https://"/>
|
||||
<el-button class="model-btn ml-[10px] text-[14px]" type="primary" plain @click="showMenu = true">{{ t('selectModel') }}</el-button>
|
||||
<el-form-item :label="t('menuName')" prop="name">
|
||||
<el-input v-model="formData.name" clearable class="w-[245px]" :placeholder="t('menuNamePlaceholder')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('menuName')" prop="name">
|
||||
<el-input v-model="formData.name" clearable class="w-[245px]" :placeholder="t('menuNamePlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('path')" prop="router_path">
|
||||
<div class="w-[245px]">
|
||||
<el-input v-if="!model_show" v-model="formData.router_path" clearable class="w-[245px]" placeholder="https://"/>
|
||||
<div v-else>
|
||||
<span class="bg-primary py-[5px] px-[10px] text-[#fff] relative rounded-[3px]">
|
||||
{{ formData.link_name }}
|
||||
<span class="absolute top-[-5px] right-[-5px] cursor-pointer" @click="deleteMenu">
|
||||
<img class="w-[15px] h-[15px]" src="@/assets/images/index/del_model.png"/>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<el-button class="model-btn ml-[10px] text-[14px]" type="primary" @click="showMenu = true">{{ t('selectModel') }}</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('menuBgColor')" prop="bg_color">
|
||||
<div class="flex items-center">
|
||||
@ -118,21 +137,13 @@
|
||||
<el-color-picker v-model="formData.bg_color" show-alpha />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item :label="t('shortcutLink')" prop="path">
|
||||
<div>
|
||||
<span v-if='formData.router_path' class="py-[8px] px-[15px] bg-[#E6EFFF] text-[12px] max-w-[200px] overflow-hidden">{{ formData.link_name ? formData.link_name : formData.router_path }}</span>
|
||||
<el-button text type="primary" @click="showMenu = true" >{{ t('select') }}</el-button>
|
||||
<el-button text type="primary" @click="customPath = true">{{ t('custom') }}</el-button>
|
||||
</div>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item :label="t('menuImg')" prop="icon">
|
||||
<upload-image v-model="formData.img" :limit="1" />
|
||||
<select-icon v-model="formData.img" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('menuDesc')">
|
||||
<el-input v-model="formData.desc" :placeholder="t('descPlaceholder')" clearable class="w-[245px] bg-[#F2F4F6]" />
|
||||
<el-input v-model="formData.desc" :placeholder="t('descPlaceholder')" clearable class="w-[245px]" />
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
@ -179,10 +190,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, computed, onMounted } from 'vue'
|
||||
import { reactive, ref, computed, nextTick } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getSiteStatInfo } from '@/api/stat'
|
||||
import { getService, getShortcutMenu, setShortcutMenu, getAuthMenu } from '@/api/sys'
|
||||
import { range } from 'lodash-es'
|
||||
import { img } from '@/utils/common'
|
||||
import Sortable, { SortableEvent } from 'sortablejs'
|
||||
import { useRouter } from 'vue-router'
|
||||
@ -198,7 +210,6 @@ const loading = ref(true)
|
||||
let statInfo = ref({'today_data':{},system:{},version:{},about:[],visit_stat:{},member_stat:{},site_info:{},total_data:{}})
|
||||
const getStatInfoFn = async (id: number = 0) => {
|
||||
statInfo.value = await (await getSiteStatInfo()).data
|
||||
loading.value = false;
|
||||
}
|
||||
getStatInfoFn()
|
||||
|
||||
@ -236,7 +247,7 @@ const formRules = computed(() => {
|
||||
icon: [
|
||||
{ required: true, validator: iconPass, trigger: 'blur' }
|
||||
],
|
||||
path: [
|
||||
router_path: [
|
||||
{ required: true, validator: pathPass, trigger: 'blur' },
|
||||
]
|
||||
}
|
||||
@ -262,11 +273,11 @@ const showMenu = ref(false)
|
||||
const shortcut_menu = ref([]);
|
||||
const menu_list = ref()
|
||||
const is_remove = ref(false)
|
||||
const model_show = ref(false)
|
||||
const checkMenu = () => {
|
||||
getShortcutMenu().then(res=>{
|
||||
if(res.data){
|
||||
shortcut_menu.value = res.data
|
||||
}
|
||||
shortcut_menu.value = res.data
|
||||
loading.value = false;
|
||||
})
|
||||
}
|
||||
checkMenu()
|
||||
@ -282,25 +293,32 @@ const addShortcut = async (formEl: FormInstance | undefined) => {
|
||||
let time = parseInt(new Date().getTime() / 1000) + '';
|
||||
let num = Math.floor(Math.random() * (999 - 1) ) + 1;
|
||||
|
||||
//如果是编辑,找到原数据,删除原数据
|
||||
//如果是编辑,匹配原数据修改
|
||||
if(formData.id > 0){
|
||||
for(let i in data){
|
||||
if(data[i].id == formData.id){
|
||||
data.splice(i, 1)
|
||||
data[i].name = formData.name,
|
||||
data[i].bg_color = formData.bg_color,
|
||||
data[i].img = formData.img,
|
||||
data[i].desc = formData.desc,
|
||||
data[i].link_name = formData.link_name,
|
||||
data[i].router_path = formData.router_path,
|
||||
data[i].menu_key = formData.menu_key
|
||||
}
|
||||
}
|
||||
}else{
|
||||
data.push({
|
||||
id: formData.id > 0 ? formData.id : time+num,
|
||||
name: formData.name,
|
||||
bg_color: formData.bg_color,
|
||||
img: formData.img,
|
||||
desc: formData.desc,
|
||||
link_name: formData.link_name,
|
||||
router_path: formData.router_path,
|
||||
menu_key: formData.menu_key
|
||||
})
|
||||
}
|
||||
|
||||
data.push({
|
||||
id: formData.id > 0 ? formData.id : time+num,
|
||||
name: formData.name,
|
||||
bg_color: formData.bg_color,
|
||||
img: formData.img,
|
||||
desc: formData.desc,
|
||||
link_name: formData.link_name,
|
||||
router_path: formData.path,
|
||||
menu_key: formData.menu_key
|
||||
})
|
||||
setShortcutMenu({
|
||||
menu: data
|
||||
}).then(() =>{
|
||||
@ -321,9 +339,12 @@ const editModel = (item) => {
|
||||
formData.link_name = item.link_name,
|
||||
formData.router_path = item.router_path,
|
||||
formData.menu_key = item.menu_key
|
||||
if(item.menu_key){
|
||||
model_show.value = true
|
||||
}
|
||||
}
|
||||
|
||||
const remowMenu = (item) => {
|
||||
const removeMenu = (item) => {
|
||||
is_remove.value = true
|
||||
let menu_arr = shortcut_menu.value;
|
||||
for(let i in menu_arr){
|
||||
@ -337,13 +358,13 @@ const remowMenu = (item) => {
|
||||
const primary = () => {
|
||||
edit_menu.value = false;
|
||||
if(!is_remove.value) return
|
||||
if(new_model_arr.value.length > 0) shortcut_menu.value = new_model_arr.value;
|
||||
setShortcutMenu({
|
||||
menu: shortcut_menu.value
|
||||
}).then(() =>{})
|
||||
}
|
||||
const showFromMunu = () =>{
|
||||
const showFromMenu = () =>{
|
||||
shortcutMenu.value = true
|
||||
model_show.value = false
|
||||
formData.name = ''
|
||||
formData.bg_color = ''
|
||||
formData.img = ''
|
||||
@ -363,73 +384,35 @@ const selectMenu = (item) => {
|
||||
formData.router_path = item.router_path
|
||||
formData.menu_key = item.menu_key
|
||||
showMenu.value = false
|
||||
model_show.value = true
|
||||
}
|
||||
const shortcutModel = ref()
|
||||
const new_model_arr = ref([])
|
||||
interface SortableEvt extends SortableEvent {
|
||||
originalEvent?: DragEvent
|
||||
}
|
||||
|
||||
const deleteMenu = () => {
|
||||
model_show.value = false
|
||||
formData.link_name = ''
|
||||
formData.router_path = ''
|
||||
formData.menu_key = ''
|
||||
}
|
||||
|
||||
const optionModel = () =>{
|
||||
edit_menu.value = true
|
||||
setTimeout(() => {
|
||||
const sortable = Sortable.create(shortcutModel.value, {
|
||||
group: {
|
||||
name: 'design-field',
|
||||
pull: 'clone',
|
||||
put: false
|
||||
},
|
||||
ghostClass: '.design-field',
|
||||
animation: 200,
|
||||
onAdd: (evt) => {
|
||||
console.log("1111")
|
||||
console.log(evt)
|
||||
},
|
||||
onEnd: (evt) => {
|
||||
let new_data = [];
|
||||
// evt.oldIndex 原位置下标
|
||||
// evt.newIndex 当前位置下标
|
||||
// console.log(evt.oldIndex+"原位置下标")
|
||||
// console.log(evt.newIndex+"当前位置下标")
|
||||
if(new_model_arr.value.length > 0){
|
||||
let k = 0;
|
||||
let newIndex = evt.newIndex;
|
||||
if(evt.oldIndex < evt.newIndex) newIndex = evt.newIndex + 1; //向后
|
||||
for(k; k < newIndex; k ++){
|
||||
if(k != evt.oldIndex){
|
||||
new_data.push(new_model_arr.value[k])
|
||||
}
|
||||
}
|
||||
|
||||
new_data.push(new_model_arr.value[evt.oldIndex])
|
||||
|
||||
let i = 0;
|
||||
if(evt.newIndex > 0 && evt.oldIndex > evt.newIndex) i = i+1
|
||||
if(evt.oldIndex < evt.newIndex) i = evt.newIndex + 1; //向后
|
||||
|
||||
for(i; i < new_model_arr.value.length; i ++){
|
||||
if(i != evt.oldIndex){
|
||||
new_data.push(new_model_arr.value[i])
|
||||
}
|
||||
}
|
||||
}else{
|
||||
let k2 = 0;
|
||||
let newIndex = evt.newIndex;
|
||||
if(evt.oldIndex < evt.newIndex) newIndex = evt.newIndex + 1; //向后
|
||||
for(k2; k2 < newIndex; k2 ++){
|
||||
if(k2 != evt.oldIndex){
|
||||
new_data.push(shortcut_menu.value[k2])
|
||||
}
|
||||
}
|
||||
new_data.push(shortcut_menu.value[evt.oldIndex])
|
||||
let i2 = 0;
|
||||
if(evt.newIndex > 0 && evt.oldIndex > evt.newIndex) i2 = i2+1
|
||||
if(evt.oldIndex < evt.newIndex) i2 = evt.newIndex + 1; //向后
|
||||
|
||||
for( i2; i2 < shortcut_menu.value.length; i2 ++){
|
||||
if(i2 != evt.oldIndex){
|
||||
new_data.push(shortcut_menu.value[i2])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new_model_arr.value = new_data;
|
||||
is_remove.value = true;
|
||||
let arr = shortcut_menu.value[evt.oldIndex!];
|
||||
shortcut_menu.value.splice(evt.oldIndex!, 1)
|
||||
shortcut_menu.value.splice(evt.newIndex!, 0, arr)
|
||||
|
||||
nextTick(() => {
|
||||
sortable.sort(range(shortcut_menu.value.length).map((value) => value.toString()))
|
||||
is_remove.value = true;
|
||||
})
|
||||
}
|
||||
})
|
||||
}, 500)
|
||||
@ -450,7 +433,10 @@ const optionModel = () =>{
|
||||
background-color: rgba(0, 0, 0, 0.10);
|
||||
}
|
||||
.bottom-back {
|
||||
background-color:rgba(255, 255, 255, 0)
|
||||
background-color:rgba(255, 255, 255, 0);
|
||||
&:hover {
|
||||
background-color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
.delete-item {
|
||||
top: -8px;
|
||||
|
||||
@ -62,9 +62,7 @@
|
||||
<div class="statistic-footer">
|
||||
<div class="footer-item text-[14px] text-[#333333]">
|
||||
<span>{{t('accumulative')}}</span>
|
||||
<span class="green ml-1">
|
||||
{{ statInfo.total_data.total_order_count }}
|
||||
</span>
|
||||
<span class="green ml-1">{{ statInfo.total_data.total_order_count }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
@ -226,11 +224,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref,onMounted } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getSiteStatInfo } from '@/api/stat'
|
||||
import { getService } from '@/api/sys'
|
||||
import { ElMessage, FormRules, ElMessageBox } from 'element-plus'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import * as echarts from 'echarts'
|
||||
import { img } from '@/utils/common'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<el-container :class="['w-full h-screen bg-page', { 'login-wrap': loginType == 'admin' }, { 'site-login-wrap': loginType == 'site' }]">
|
||||
<el-container :class="['w-full h-screen bg-page', { 'login-wrap': loginType == 'admin' } ,{ 'site-login-wrap': loginType == 'site' }]">
|
||||
<!-- 平台端登录 -->
|
||||
<el-main class="login-main items-center justify-center" v-if="!imgLoading && loginType == 'admin'">
|
||||
<div class="flex rounded-2xl overflow-hidden">
|
||||
<div class="flex rounded-2xl overflow-hidden">
|
||||
<div class="login-main-left w-[450px] flex flex-wrap justify-center">
|
||||
<el-image v-if="loginConfig.bg" class="w-[450px] h-[400px]" :src="img(loginConfig.bg)" fit="cover" />
|
||||
<img v-else src="@/assets/images/login/login_index_left.png" alt="">
|
||||
@ -38,49 +38,45 @@
|
||||
</el-main>
|
||||
|
||||
<!-- 站点端登录 -->
|
||||
<el-main class="login-main items-center justify-evenly" v-else-if="!imgLoading && loginType == 'site'">
|
||||
<div>
|
||||
<el-row class="items-end mb-[20px] h-[40px] w-[360px]">
|
||||
<el-col :span="8">
|
||||
<img class="max-h-[40px]" :src="img(webSite.logo)" alt="" v-if="webSite.logo">
|
||||
<img src="@/assets/images/site_login.png" alt="" v-else>
|
||||
</el-col>
|
||||
<el-col :span="12" class="ml-[20px] text-[18px]">
|
||||
<div class="admin_name" v-if="webSite.site_name">{{ webSite.site_name }}</div>
|
||||
<div class="admin_name" v-else>{{ t('manageAdminFramework') }}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="login flex flex-col w-[360px] p-[40px] rounded-md rounded-[10px]">
|
||||
<h3 class="text-center text-3xl mb-[30px]">{{ t('siteLogin') }}</h3>
|
||||
<el-form :model="form" ref="formRef" :rules="formRules">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="form.username" @keyup.enter="handleLogin(formRef)" class="w-50 m-1 h-[40px]" :placeholder="t('userPlaceholder')">
|
||||
<template #prefix>
|
||||
<icon name="element-User" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="password">
|
||||
<el-input type="password" v-model="form.password" @keyup.enter="handleLogin(formRef)" :show-password="true" class="w-50 m-1 h-[40px]" :placeholder="t('passwordPlaceholder')">
|
||||
<template #prefix>
|
||||
<icon name="element-Lock" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" class="mt-[30px] h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{loading ? t('logging') : t('login') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
<el-main class="login-main w-full login-site-main items-center h-screen justify-evenly bg-[#F8FAFF]" v-else-if="!imgLoading && loginType == 'site'">
|
||||
<div class="flex rounded-2xl overflow-hidden h-screen w-full relative">
|
||||
<img v-if="loginConfig.site_bg" class="hidden h-[100%] lg:block" :src="img(loginConfig.site_bg)"/>
|
||||
<img v-else class="hidden h-[100%] lg:block" src="@/assets/images/site_login_bg.png"/>
|
||||
<div class="w-[100%] bg-[#F8FAFF] flex justify-center items-center absolute right-0 top-0 h-screen lg:w-[60%]">
|
||||
<div class="site-login-item w-[45%] py-[30px] relative rounded-[13px] max-w-[350px] bg-[#fff]">
|
||||
<div class="w-[80%] mx-auto">
|
||||
<h3 class="text-3xl mb-[30px]">{{ t('siteLogin') }}</h3>
|
||||
<el-form :model="form" ref="formRef" :rules="formRules" >
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="form.username" @keyup.enter="handleLogin(formRef)" class="w-50 m-1 h-[40px]" :placeholder="t('userPlaceholder')">
|
||||
<template #prefix>
|
||||
<icon name="element-User" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="password">
|
||||
<el-input type="password" v-model="form.password" @keyup.enter="handleLogin(formRef)" :show-password="true" class="w-50 m-1 h-[40px]" :placeholder="t('passwordPlaceholder')">
|
||||
<template #prefix>
|
||||
<icon name="element-Lock" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" class="mt-[30px] h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{loading ? t('logging') : t('login') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<!-- <img class="w-[15%] max-w-[50px] absolute top-0 right-0" src="@/assets/images/login/site_code.png"/> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-main>
|
||||
|
||||
<!-- 验证组件 -->
|
||||
<verify @success="success" :mode="pop" captchaType="blockPuzzle" :imgSize="{ width: '330px', height: '155px' }" ref="verifyRef"></verify>
|
||||
|
||||
<el-footer></el-footer>
|
||||
<!-- <el-footer></el-footer> -->
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
@ -181,11 +177,20 @@ const loginFn = (data = {}) => {
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
.login-site-main {
|
||||
padding: 0 !important;
|
||||
}
|
||||
.site-warp {
|
||||
background-image: url("@/assets/images/login/site_bg.png");
|
||||
background-color: #fff;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.site-login-wrap {
|
||||
background-image: url('@/assets/images/back_login.jpg');
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
// background-image: url('@/assets/images/back_login.jpg');
|
||||
// background-repeat: no-repeat;
|
||||
// background-size: cover;
|
||||
}
|
||||
|
||||
.input-with-select .el-input-group__prepend {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
@ -131,7 +131,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import {
|
||||
getBalanceList,
|
||||
@ -145,6 +145,7 @@ import { FormInstance } from 'element-plus'
|
||||
import { img } from '@/utils/common'
|
||||
import balanceInfo from '@/views/member/components/member-balance-info.vue'
|
||||
import { useRoute,useRouter } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const member_id: number = parseInt(route.query.id || 0)
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
@ -52,8 +52,7 @@
|
||||
<el-card class="box-card !border-none mb-[10px] table-search-wrap" shadow="never">
|
||||
<el-form :inline="true" :model="memberAccountLogTableData.searchParam" ref="searchFormRef">
|
||||
<el-form-item :label="t('memberInfo')" prop="keywords">
|
||||
<el-input v-model="memberAccountLogTableData.searchParam.keywords" class="w-[240px]"
|
||||
:placeholder="t('memberInfoPlaceholder')" />
|
||||
<el-input v-model="memberAccountLogTableData.searchParam.keywords" class="w-[240px]" :placeholder="t('memberInfoPlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('fromType')" prop="from_type">
|
||||
<el-select v-model="memberAccountLogTableData.searchParam.from_type" clearable :placeholder="t('fromTypePlaceholder')" class="input-width">
|
||||
@ -137,13 +136,14 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { FormInstance } from 'element-plus'
|
||||
import { getChangeTypeList,getCommissionList,getCommissionSum } from '@/api/member'
|
||||
import { img } from '@/utils/common'
|
||||
import moneyInfo from '@/views/member/components/member-commission-info.vue'
|
||||
import { useRouter,useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const member_id: number = parseInt(route.query.id || 0)
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<el-dialog v-model="showDialog" :title="popTitle" width="500px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
|
||||
<el-form-item :label="t('memberNo')" prop="member_no">
|
||||
<el-input v-model="formData.member_no" clearable maxlength="20" :placeholder="t('memberNoPlaceholder')" class="input-width" />
|
||||
@ -34,7 +33,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, computed, watch } from 'vue'
|
||||
import { ref, reactive, computed } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { addMember, getMemberList, getMemberNo } from '@/api/member'
|
||||
@ -81,6 +80,7 @@ const formRules = computed(() => {
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
// 验证手机号格式
|
||||
const mobileVerify = (rule: any, value: any, callback: any) => {
|
||||
if (value && !/^1[3-9]\d{9}$/.test(value)) {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<template>
|
||||
<el-dialog v-model="showDialog" :title="popTitle" width="500px"
|
||||
:destroy-on-close="true">
|
||||
<el-dialog v-model="showDialog" :title="popTitle" width="500px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
<el-form-item :label="t('labelName')" prop="label_name">
|
||||
<el-input v-model="formData.label_name" clearable :placeholder="t('labelNamePlaceholder')" class="input-width" />
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('sex')" v-if="type == 'sex'">
|
||||
<el-select v-model="saveData.sex" clearable :placeholder="t('sexPlaceholder')" class="input-width">
|
||||
<el-option :label="item['name']" :value="item['id']" v-for="item in sexSeleteData" />
|
||||
<el-option :label="item['name']" :value="item['id']" v-for="item in sexSelectData" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('memberLabel')" v-if="type == 'member_label'">
|
||||
@ -33,7 +33,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, computed } from 'vue'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { editMemberDetail, getMemberLabelAll } from '@/api/member'
|
||||
@ -45,7 +45,7 @@ let title = ref('')
|
||||
let memberId = ref('')
|
||||
let showDialog = ref(false)
|
||||
const loading = ref(false)
|
||||
let sexSeleteData = ref([
|
||||
const sexSelectData = ref([
|
||||
{
|
||||
id: 0,
|
||||
name: t('secrecySex')
|
||||
@ -67,7 +67,6 @@ const getMemberLabelAllFn = async () => {
|
||||
getMemberLabelAllFn();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 表单数据
|
||||
*/
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<el-dialog v-model="showDialog" :title="t('balanceInfo')" width="550px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="110px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="110px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
|
||||
<el-form-item :label="t('headimg')" >
|
||||
<div class="flex items-center">
|
||||
@ -18,7 +17,6 @@
|
||||
<div class="input-width"> {{ formData.member.nickname }} </div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item :label="t('mobile')" >
|
||||
<div class="input-width"> {{ formData.member.mobile }} </div>
|
||||
</el-form-item>
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<el-dialog v-model="showDialog" :title="t('moneyInfo')" width="550px" :destroy-on-close="true">
|
||||
<el-form :model="formData" label-width="110px" ref="formRef" :rules="formRules" class="page-form"
|
||||
v-loading="loading">
|
||||
<el-form :model="formData" label-width="110px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
|
||||
<el-form-item :label="t('headimg')" >
|
||||
<div class="flex items-center">
|
||||
|
||||
@ -4,10 +4,8 @@
|
||||
|
||||
<el-form-item :label="t('headimg')" >
|
||||
<div class="flex items-center">
|
||||
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="formData.headimg" :src="img(formData.headimg)" alt="" >
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-else src="@/assets/images/default_headimg.png" alt="" >
|
||||
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
@ -15,7 +13,6 @@
|
||||
<div class="input-width"> {{ formData.nickname }} </div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item :label="t('mobile')" >
|
||||
<div class="input-width"> {{ formData.mobile }} </div>
|
||||
</el-form-item>
|
||||
|
||||
@ -109,7 +109,6 @@ const formRules = computed(() => {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const emit = defineEmits(['complete'])
|
||||
|
||||
const setFormData = async (row: any = null) => {
|
||||
|
||||
@ -4,10 +4,8 @@
|
||||
|
||||
<el-form-item :label="t('headimg')" >
|
||||
<div class="flex items-center">
|
||||
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="formData.member.headimg" :src="img(formData.member.headimg)" alt="" >
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-else src="@/assets/images/default_headimg.png" alt="" >
|
||||
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" @click="addEvent">{{ t('addMemberLabel') }}</el-button>
|
||||
</div>
|
||||
|
||||
@ -57,6 +57,7 @@ import { getMemberLabelList, deleteMemberLabel } from '@/api/member'
|
||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import EditMemberLabel from '@/views/member/components/edit-label.vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -73,8 +74,6 @@ let memberLabelTableData = reactive({
|
||||
|
||||
const searchFormRef = ref<FormInstance>()
|
||||
|
||||
|
||||
|
||||
const resetForm = (formEl: FormInstance | undefined)=>{
|
||||
if (!formEl) return
|
||||
formEl.resetFields();
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
<el-button type="primary" @click="addEvent">{{ t('addMember') }}</el-button>
|
||||
</div>
|
||||
|
||||
@ -14,24 +14,20 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('registerChannel')" prop="register_channel">
|
||||
<el-select v-model="memberTableData.searchParam.register_channel" clearable
|
||||
:placeholder="t('channelPlaceholder')" class="input-width">
|
||||
<el-select v-model="memberTableData.searchParam.register_channel" clearable :placeholder="t('channelPlaceholder')" class="input-width">
|
||||
<el-option :label="t('selectPlaceholder')" value="" />
|
||||
<el-option :label="item" :value="key" v-for="(item, key) in channelList" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('memberLabel')" prop="member_label">
|
||||
<el-select v-model="memberTableData.searchParam.member_label" collapse-tags clearable
|
||||
:placeholder="t('memberLabelPlaceholder')" class="input-width">
|
||||
<el-select v-model="memberTableData.searchParam.member_label" collapse-tags clearable :placeholder="t('memberLabelPlaceholder')" class="input-width">
|
||||
<el-option :label="t('selectPlaceholder')" value=""/>
|
||||
<el-option :label="item['label_name']" :value="item['label_id']" v-for="item in labelSelectData" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('createTime')" prop="create_time">
|
||||
<el-date-picker v-model="memberTableData.searchParam.create_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
<el-date-picker v-model="memberTableData.searchParam.create_time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="loadMemberList()">{{ t('search') }}</el-button>
|
||||
@ -118,7 +114,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, computed } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { img } from '@/utils/common'
|
||||
import { addMember, getRegisterChannelType, getMemberList, getMemberLabelAll, editMemberStatus,deleteMember } from '@/api/member'
|
||||
@ -127,6 +123,7 @@ import { useRouter } from 'vue-router'
|
||||
import AddMember from '@/views/member/components/add-member.vue'
|
||||
import EditMember from '@/views/member/components/edit-member.vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
const memberTableData = reactive({
|
||||
|
||||
@ -171,8 +171,7 @@
|
||||
<div class="flex items-center mt-[15px]">
|
||||
<span class="text-[14px] w-[130px] text-right mr-[20px]">{{ t('memberLabel') }}</span>
|
||||
<span class="text-[14px] text-[#666666]">
|
||||
{{ formData.member_label_name.toString() || t('notAvailable') }}<el-icon
|
||||
@click="editMemberInfo('member_label')" class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
{{ formData.member_label_name.toString() || t('notAvailable') }}<el-icon @click="editMemberInfo('member_label')" class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
<EditPen color="#273CE2" />
|
||||
</el-icon>
|
||||
</span>
|
||||
@ -180,8 +179,7 @@
|
||||
<div class="flex items-center mt-[15px]">
|
||||
<span class="text-[14px] w-[130px] text-right mr-[20px]">{{ t('birthday') }}</span>
|
||||
<span class="text-[14px] text-[#666666]">
|
||||
{{ formData.birthday || t('notAvailable') }}<el-icon @click="editMemberInfo('birthday')"
|
||||
class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
{{ formData.birthday || t('notAvailable') }}<el-icon @click="editMemberInfo('birthday')" class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
<EditPen color="#273CE2" />
|
||||
</el-icon>
|
||||
</span>
|
||||
@ -189,8 +187,7 @@
|
||||
<div class="flex items-center mt-[15px]">
|
||||
<span class="text-[14px] w-[130px] text-right mr-[20px]">{{ t('sex') }}</span>
|
||||
<span class="text-[14px] text-[#666666]">
|
||||
{{ formData.sex == 1 && t('manSex') || formData.sex == 2 && t('girlSex') || t('secrecySex') }}<el-icon
|
||||
@click="editMemberInfo('sex')" class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
{{ formData.sex == 1 && t('manSex') || formData.sex == 2 && t('girlSex') || t('secrecySex') }}<el-icon @click="editMemberInfo('sex')" class="-bottom-[2px] -right-[4px] cursor-pointer">
|
||||
<EditPen color="#273CE2" />
|
||||
</el-icon>
|
||||
</span>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20x]">{{pageName}}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
@ -116,13 +116,14 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getChangeTypeList,getPointList,getPointSum } from '@/api/member'
|
||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||
import { img } from '@/utils/common'
|
||||
import pointInfo from '@/views/member/components/member-point-info.vue'
|
||||
import { useRouter,useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const member_id: number = parseInt(route.query.id || 0)
|
||||
const pageName = route.meta.title;
|
||||
|
||||
@ -64,7 +64,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from 'vue'
|
||||
import { ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { getRechargeOrderInfo } from '@/api/order'
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
|
||||
<el-card class="box-card !border-none table-search-wra base-bg !px-[35px]" shadow="never">
|
||||
@ -46,9 +46,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('createTime')" prop="create_time">
|
||||
<el-date-picker v-model="orderTableData.searchParam.create_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
<el-date-picker v-model="orderTableData.searchParam.create_time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('rechargeMoney')">
|
||||
@ -64,9 +62,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('payTime')">
|
||||
<el-date-picker v-model="orderTableData.searchParam.pay_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
<el-date-picker v-model="orderTableData.searchParam.pay_time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
@ -85,7 +81,7 @@
|
||||
<el-table-column :show-overflow-tooltip="true" :label="t('member')" align="left" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center cursor-pointer " @click="toMember(row.member.member_id)">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.headimg" :src="img(row.member.headimg)" alt="">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.member.headimg" :src="img(row.member.headimg)" alt="">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-else src="@/assets/images/default_headimg.png" alt="">
|
||||
<div class="flex flex flex-col">
|
||||
<span class="">{{ row.member.nickname || '' }}</span>
|
||||
@ -161,6 +157,7 @@ import { getRechargeOrderStatusList, getRechargeOrderList, rechargeRefund, getRe
|
||||
import { getChannelType } from '@/api/sys'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { AnyObject } from '@/types/global'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-[24px]">{{ pageName }}</span>
|
||||
<span class="text-[20px]">{{ pageName }}</span>
|
||||
</div>
|
||||
|
||||
<el-card class="box-card !border-none table-search-wra base-bg !px-[35px]" shadow="never">
|
||||
@ -33,16 +33,13 @@
|
||||
<el-card class="box-card !border-none mb-[10px] table-search-wrap" shadow="never">
|
||||
<el-form :inline="true" :model="refundTableData.searchParam" ref="searchFormRef">
|
||||
<el-form-item :label="t('memberInfo')" prop="keywords">
|
||||
<el-input v-model="refundTableData.searchParam.keywords" class="w-[240px]"
|
||||
:placeholder="t('memberInfoPlaceholder')" />
|
||||
<el-input v-model="refundTableData.searchParam.keywords" class="w-[240px]" :placeholder="t('memberInfoPlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundNumber')" prop="refund_no">
|
||||
<el-input v-model="refundTableData.searchParam.refund_no" class="w-[240px]"
|
||||
:placeholder="t('refundNumberPlaceholder')" />
|
||||
<el-input v-model="refundTableData.searchParam.refund_no" class="w-[240px]" :placeholder="t('refundNumberPlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('orderNumber')" prop="order_no">
|
||||
<el-input v-model="refundTableData.searchParam.order_no" class="w-[240px]"
|
||||
:placeholder="t('orderNumberPlaceholder')" />
|
||||
<el-input v-model="refundTableData.searchParam.order_no" class="w-[240px]" :placeholder="t('orderNumberPlaceholder')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('refundStatus')" prop="status">
|
||||
@ -52,9 +49,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundTime')" prop="create_time">
|
||||
<el-date-picker v-model="refundTableData.searchParam.create_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
<el-date-picker v-model="refundTableData.searchParam.create_time" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="loadRefundList()">{{ t('search') }}</el-button>
|
||||
@ -72,10 +67,8 @@
|
||||
<el-table-column :show-overflow-tooltip="true" :label="t('memberInfo')" align="left" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center cursor-pointer " @click="toMember(row.member.member_id)">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.headimg" :src="img(row.member.headimg)"
|
||||
alt="">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-else src="@/assets/images/default_headimg.png"
|
||||
alt="">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.headimg" :src="img(row.member.headimg)" alt="">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-else src="@/assets/images/default_headimg.png" alt="">
|
||||
<div class="flex flex flex-col">
|
||||
<span class="">{{ row.member.nickname || '' }}</span>
|
||||
<span class="">{{ row.member.mobile || '' }}</span>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<div class="flex ml-[18px] justify-between items-center mt-[20px]">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
|
||||
<el-form :model="formData" label-width="150px" ref="ruleFormRef" :rules="formRules" class="page-form" v-loading="loading">
|
||||
@ -46,20 +46,20 @@
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getConfigLogin, setConfigLogin } from '@/api/sys'
|
||||
import { ElMessage, FormRules, FormInstance } from 'element-plus'
|
||||
import { FormRules, FormInstance } from 'element-plus'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
|
||||
const loading = ref(true),
|
||||
ruleFormRef = ref<FormInstance>(),
|
||||
formData = reactive<Record<string, number | string>>({
|
||||
is_captcha: 0,
|
||||
is_site_captcha: 0,
|
||||
bg: '',
|
||||
site_bg: ''
|
||||
});
|
||||
|
||||
ruleFormRef = ref<FormInstance>(),
|
||||
formData = reactive<Record<string, number | string>>({
|
||||
is_captcha: 0,
|
||||
is_site_captcha: 0,
|
||||
bg: '',
|
||||
site_bg: ''
|
||||
});
|
||||
|
||||
const getFormData = async (id: number = 0) => {
|
||||
const data = await (await getConfigLogin()).data
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[24px]">{{pageName}}</span>
|
||||
<span class="text-[20px]">{{pageName}}</span>
|
||||
</div>
|
||||
<div class="mt-[20px]">
|
||||
<el-table :data="agreementTableData.data" size="large" v-loading="agreementTableData.loading">
|
||||
@ -35,10 +35,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { reactive } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { getAgreementList } from '@/api/sys'
|
||||
import { useRouter,useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title;
|
||||
|
||||
|
||||