From fa49aade7ac0a009b37cf11a83a52a67fb5eb953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E6=A0=88=E5=B0=8F=E5=AD=A6=E7=94=9F?= <1518079521@qq.com> Date: Wed, 11 Jun 2025 09:17:09 +0800 Subject: [PATCH] up admin --- admin/src/app/api/addon.ts | 4 + admin/src/app/api/notice.ts | 217 + admin/src/app/api/sys.ts | 18 - admin/src/app/api/user.ts | 17 + admin/src/app/assets/images/error_icon.png | Bin 0 -> 1249 bytes admin/src/app/assets/images/success_icon.png | Bin 0 -> 1355 bytes .../src/app/assets/images/tools/authorize.png | Bin 0 -> 9091 bytes admin/src/app/assets/images/tools/upgrade.png | Bin 0 -> 12433 bytes .../src/app/components/cloud-build/index.vue | 288 +- .../src/app/components/upgrade-log/index.vue | 8 +- admin/src/app/components/upgrade/index.vue | 322 +- .../app/components/user-info-edit/index.vue | 2 +- admin/src/app/lang/zh-cn/index.store.json | 6 +- .../app/lang/zh-cn/marketing.verifier.json | 1 + .../src/app/lang/zh-cn/tools.addon.edit.json | 2 +- admin/src/app/lang/zh-cn/tools.schedule.json | 2 +- admin/src/app/views/app/authorize.vue | 60 +- admin/src/app/views/app/upgrade.vue | 125 +- admin/src/app/views/auth/log.vue | 23 +- admin/src/app/views/auth/menu.vue | 2 +- admin/src/app/views/auth/user.vue | 18 +- admin/src/app/views/diy/edit.vue | 1 + admin/src/app/views/diy/tabbar_edit.vue | 2 +- admin/src/app/views/diy_form/edit.vue | 1 + admin/src/app/views/diy_form/records.vue | 2 +- admin/src/app/views/index/edit_personal.vue | 9 +- admin/src/app/views/index/store.vue | 689 +- admin/src/app/views/marketing/verifier.vue | 2 +- admin/src/app/views/poster/edit.vue | 1 + admin/src/app/views/printer/edit.vue | 1 + admin/src/app/views/printer/template_edit.vue | 1 + .../app/views/setting/components/sms-niu.vue | 118 + .../setting/components/sms_niu_login.vue | 522 ++ .../views/setting/components/sms_recharge.vue | 142 + .../components/sms_recharge_record.vue | 131 + .../app/views/setting/components/sms_send.vue | 106 + .../setting/components/sms_signature.vue | 421 ++ .../views/setting/components/sms_template.vue | 363 + admin/src/app/views/setting/copyright.vue | 22 +- admin/src/app/views/setting/login.vue | 2 +- .../src/app/views/setting/notice_records.vue | 7 +- admin/src/app/views/setting/sms.vue | 18 +- admin/src/app/views/setting/sms_niu.vue | 346 + .../app/views/setting/sms_niu_pay_result.vue | 78 + admin/src/app/views/tools/attachment.vue | 4 +- admin/src/app/views/tools/backup_records.vue | 185 +- admin/src/app/views/tools/cloud_compile.vue | 184 +- admin/src/app/views/tools/schedule.vue | 40 +- admin/src/app/views/tools/schedule_log.vue | 1 + admin/src/app/views/tools/upgrade_records.vue | 10 +- admin/src/components/diy-link/index.vue | 19 +- admin/src/components/editor/index.vue | 3 +- .../upload-attachment/attachment.vue | 73 +- admin/src/lang/zh-cn/common.json | 7 +- .../default/components/header/user-info.vue | 66 +- .../layout/major/components/aside/side.vue | 2 +- admin/src/styles/icon/iconfont.css | 5815 +++++++++-------- 57 files changed, 7217 insertions(+), 3292 deletions(-) create mode 100644 admin/src/app/assets/images/error_icon.png create mode 100644 admin/src/app/assets/images/success_icon.png create mode 100644 admin/src/app/assets/images/tools/authorize.png create mode 100644 admin/src/app/assets/images/tools/upgrade.png create mode 100644 admin/src/app/views/setting/components/sms-niu.vue create mode 100644 admin/src/app/views/setting/components/sms_niu_login.vue create mode 100644 admin/src/app/views/setting/components/sms_recharge.vue create mode 100644 admin/src/app/views/setting/components/sms_recharge_record.vue create mode 100644 admin/src/app/views/setting/components/sms_send.vue create mode 100644 admin/src/app/views/setting/components/sms_signature.vue create mode 100644 admin/src/app/views/setting/components/sms_template.vue create mode 100644 admin/src/app/views/setting/sms_niu.vue create mode 100644 admin/src/app/views/setting/sms_niu_pay_result.vue diff --git a/admin/src/app/api/addon.ts b/admin/src/app/api/addon.ts index 5e09bdfe3..a73896391 100644 --- a/admin/src/app/api/addon.ts +++ b/admin/src/app/api/addon.ts @@ -98,3 +98,7 @@ export function getInstalledAddonList() { export function getShowApp() { return request.get('addon/list/showapp') } + +export function getAddonInit() { + return request.get('addon/init') +} diff --git a/admin/src/app/api/notice.ts b/admin/src/app/api/notice.ts index 6104b721c..c30f2dcba 100644 --- a/admin/src/app/api/notice.ts +++ b/admin/src/app/api/notice.ts @@ -78,3 +78,220 @@ export function editSms(params: Record) { export function getSmsLog(params: Record) { return request.get(`notice/sms/log`, { params }) } + +/** + * 获取当前登录子账号 + * @param params + */ +export function getAccountIsLogin() { + return request.get(`notice/niusms/config`) +} + +/** + * 登录子账号 + * @param params + */ +export function loginAccount(params: Record) { + return request.post(`notice/niusms/account/login`,params,{ showSuccessMessage: true }) +} + +/** + * 注册子账号 + * @param params + */ +export function registerAccount(params: Record) { + return request.post(`notice/niusms/account/register`,params,{ showSuccessMessage: true }) +} + +/** + * 获取当前登录子账号信息 + * @param params + */ +export function getAccountInfo(username: string) { + return request.get(`notice/niusms/account/info/${username}`) +} + +/** + * 获取模版列表 + * @param params + */ +export function getTemplateList(params: Record) { + return request.get(`notice/niusms/template/list/${params.sms_type}/${params.username}`,{}) +} + +/** + * 获取签名列表 + * @param params + */ +export function getSignList(username: string, params: Record) { + return request.get(`notice/niusms/sign/list/${username}`,{params}) +} + +/** + * 添加签名 + * @param params + */ +export function addSign(username: string, params: Record) { + return request.post(`notice/niusms/sign/report/${username}`, params, { showSuccessMessage: true }); +} + +/** + * 删除签名 + * @param params + */ +export function deleteSign(username: string, params: Record) { + return request.post(`notice/niusms/sign/delete/${username}`, params, { showSuccessMessage: true }); +} + +/** + * 更新子账号信息 + * @param params + */ +export function editAccount(username: string,params: Record) { + return request.post(`notice/niusms/account/edit/${username}`, params, { showSuccessMessage: true }); +} + +/** + * 获取短信发送记录 + * @param params + */ +export function getSmsSendList(username: string, params: Record) { + return request.get(`notice/niusms/account/send_list/${username}`,{params}) +} + +/** + * 获取充值列表 + * @param params + */ +export function getSmsOrdersList(username: string, params: Record) { + return request.get(`notice/niusms/order/list/${username}`,{params}) +} + +/** + * 获取套餐列表 + * @param params + */ +export function getSmsPackagesList() { + return request.get(`notice/niusms/packages`) +} + +/** + * 获取图像验证码 + * @param params + */ +export function getSmsCaptcha() { + return request.get(`notice/niusms/captcha`) +} + +/** + * 发送验证码 + * @param params + */ +export function getSmsSend(params: Record) { + return request.post(`notice/niusms/send`,params,{ showSuccessMessage: true }) +} + +/** + * 添加签名配置项 + * @param params + */ +export function getSmsSignConfig() { + return request.get(`notice/niusms/sign/report/config`) +} + +/** + * 模版报备配置项 + * @param params + */ +export function getTemplateReportConfig() { + return request.get(`notice/niusms/template/report/config`) +} + +/** + * 模版报备 + * @param params + */ +export function reportTemplate(sms_type: string, username: string, params: Record) { + return request.post(`notice/niusms/template/report/${sms_type}/${username}`,params,{ showSuccessMessage: true }) +} + +/** + * 模版详情 + * @param params + */ +export function getreportTemplateInfo(sms_type: string, username: string,params: Record) { + return request.get(`notice/niusms/template/info/${sms_type}/${username}`,{params}) +} + + +/** + * 充值下单 + * @param params + */ +export function smsOrderCreate(username: string, params: Record) { + return request.post(`notice/niusms/order/create/${username}`, params) +} + +/** + * 获取支付信息 + * @param params + */ +export function getOrderPayInfo(username: string, params: Record) { + return request.get(`notice/niusms/order/pay/${username}`, {params}) +} + +/** + * 获取订单详情 + * @param params + */ +export function getOrderInfo(username: string, params: Record) { + return request.get(`notice/niusms/order/info/${username}`, {params}) +} + +/** + * 获取支付状态 + * @param params + */ +export function getOrderPayStatus(username: string, params: Record) { + return request.get(`notice/niusms/order/status/${username}`, {params}) +} + +/** + * 计算金额 + * @param params + */ +export function calculateOrderPay(username: string, params: Record) { + return request.post(`notice/niusms/order/calculate/${username}`, params) +} + +/** + * 启用牛云短信 + * @param params + */ +export function enableNiusms(params: Record) { + return request.put(`notice/niusms/enable`,params,{ showSuccessMessage: true }) +} + +/** + * 同步模版状态 + * @param params + */ +export function templateSync(sms_type: string, username: string) { + return request.get(`notice/niusms/template/sync/${sms_type}/${username}`) +} + +/** + * 重置密码 + * @param params + */ +export function resetPassword(username: string,params: Record) { + return request.post(`notice/niusms/account/reset/password/${username}`,params,{ showSuccessMessage: true}) +} + +/** + * 清除模版报备 + * @param params + */ +export function clearTemplate(username: string,template_id: string) { + return request.delete(`notice/niusms/template/${username}/${template_id}`) +} diff --git a/admin/src/app/api/sys.ts b/admin/src/app/api/sys.ts index 671496520..1a4007847 100644 --- a/admin/src/app/api/sys.ts +++ b/admin/src/app/api/sys.ts @@ -258,24 +258,6 @@ export function moveAttachment(params: Record) { return request.put(`sys/attachment/batchmove`, params) } -/** - * 获取图标库分类列表 - * @param params - * @returns - */ -export function getIconCategoryList(params: Record) { - return request.get(`sys/attachment/icon_category`, { params }) -} - -/** - * 获取图标库列表 - * @param params - * @returns - */ -export function getIconList(params: Record) { - return request.get(`sys/attachment/icon`, { params }) -} - /** * 获取evn * @returns diff --git a/admin/src/app/api/user.ts b/admin/src/app/api/user.ts index 1fc36a534..9119b3476 100644 --- a/admin/src/app/api/user.ts +++ b/admin/src/app/api/user.ts @@ -62,6 +62,15 @@ export function unlockUser(uid: number) { return request.put(`user/unlock/${ uid }`, {}, { showSuccessMessage: true }) } +/** + * 删除用户 + * + * @param uid + */ +export function deleteUser(uid: number) { + return request.delete(`user/${ uid }`) +} + /***************************************************** 操作日志 **************************************************/ /** @@ -80,3 +89,11 @@ export function getLogList(params: Record) { export function getLogInfo(id: number) { return request.get(`user/userlog/${ id }`) } + +/** + * 清空操作日志列表 + * @returns + */ +export function logDestroy() { + return request.delete(`user/userlog/destroy`) +} diff --git a/admin/src/app/assets/images/error_icon.png b/admin/src/app/assets/images/error_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7db470c6fc9d60e26a51f9867e7acb2a0d4d682c GIT binary patch literal 1249 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 B+F1Yq literal 0 HcmV?d00001 diff --git a/admin/src/app/assets/images/tools/upgrade.png b/admin/src/app/assets/images/tools/upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..6547604ecbcafe22260b5e039cd2ad2b0360fa77 GIT binary patch literal 12433 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 -
-
- +
+
+
-

{{ t('cloudbuild.dirPermission') }}

+
+

{{ t('cloudbuild.dirPermission') }}

+
+
+ + 编译权限错误,查看解决方案
+
立即查看
+
+
+
- + {{ t('cloudbuild.path') }} - + {{ t('cloudbuild.demand') }} - + {{ t('status') }} - - - {{ item.dir }} - - - {{ t('cloudbuild.readable') }} - - - + + + + + + + + + + {{ item.dir }} + + + {{ t('cloudbuild.write') }} + + + - - - - - - - + + +
- +
-
+
+
+ 取消 + 已用时 {{ formattedDuration }} +
- -
-
-