mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2025-12-12 01:47:08 +00:00
同步niucloud
This commit is contained in:
parent
ef43d9e616
commit
b4563d004b
@ -55,14 +55,23 @@ class Request extends \think\Request
|
||||
*/
|
||||
public function paramFilter($param, bool $filter = true)
|
||||
{
|
||||
if (!$param || !$filter || !is_string($param)) return $param;
|
||||
// 把数据过滤
|
||||
if (!$param || !$filter || !is_string($param)) {
|
||||
return $param;
|
||||
}
|
||||
|
||||
// 过滤危险标签
|
||||
$filter_rule = [
|
||||
"/<(\\/?)(script|i?frame|style|html|body|title|link|metaf|alert|font|object|\\?|\\%)([^>]*?)>/isU",
|
||||
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
|
||||
"/<(\\/?)(script|iframe|frame|style|html|body|title|link|meta|alert|font|object|\\?|\\%)([^>]*?)>/isU",
|
||||
"/(<[^>]*?)on[a-zA-Z]+\s*=[\s\"'][^\"']*?([\s\"'][^>]*?>)/isU",
|
||||
"/\\b(select|join|where|drop|like|modify|rename|insert|update|table|database|alter|truncate|\'|\/\*|\.\.\/|\.\/|union|into|load_file|outfile)\\b/is"
|
||||
];
|
||||
return preg_replace($filter_rule, '', $param);
|
||||
|
||||
$replace = [
|
||||
'', // 移除整个危险标签
|
||||
'$1$2', // 仅移除 onxxx 属性,保留标签
|
||||
''
|
||||
];
|
||||
return preg_replace($filter_rule, $replace, $param);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -42,7 +42,8 @@ class Config extends BaseAdminController
|
||||
['token', ''],
|
||||
['encoding_aes_key', ''],
|
||||
['qr_code', ''],
|
||||
['encryption_type', '']
|
||||
['encryption_type', ''],
|
||||
['base_uri', '']
|
||||
]);
|
||||
$this->validate($data, 'app\validate\channel\Wechat.set');
|
||||
(new WechatConfigService())->setWechatConfig($data);
|
||||
|
||||
@ -27,13 +27,13 @@ Route::group(function () {
|
||||
Route::get('addon/:id', 'addon.Addon/info');
|
||||
|
||||
//安装插件
|
||||
Route::post('addon/install/:addon', 'addon.Addon/install');
|
||||
Route::post('addon/install/:addon', 'addon.Addon/install')->pattern(['addon' => '[\w|\,]+']);
|
||||
//云安装插件
|
||||
Route::post('addon/cloudinstall/:addon', 'addon.Addon/cloudInstall');
|
||||
Route::post('addon/cloudinstall/:addon', 'addon.Addon/cloudInstall')->pattern(['addon' => '[\w|\,]+']);
|
||||
// 云编译进度
|
||||
Route::get('addon/cloudinstall/:addon', 'addon.Addon/cloudInstallLog');
|
||||
Route::get('addon/cloudinstall/:addon', 'addon.Addon/cloudInstallLog')->pattern(['addon' => '[\w|\,]+']);
|
||||
//插件安装检测安装环境
|
||||
Route::get('addon/install/check/:addon', 'addon.Addon/installCheck');
|
||||
Route::get('addon/install/check/:addon', 'addon.Addon/installCheck')->pattern(['addon' => '[\w|\,]+']);
|
||||
// 获取安装任务
|
||||
Route::get('addon/installtask', 'addon.Addon/getInstallTask');
|
||||
//下载插件
|
||||
|
||||
@ -149,9 +149,9 @@ Route::group('member', function() {
|
||||
//全部会员等级
|
||||
Route::get('level/all', 'member.MemberLevel/getAll');
|
||||
// 获取会员权益内容
|
||||
Route::get('benefits/content', 'member.Member/getMemberBenefitsContent');
|
||||
Route::post('benefits/content', 'member.Member/getMemberBenefitsContent');
|
||||
// 获取会员礼包内容
|
||||
Route::get('gifts/content', 'member.Member/getMemberGiftsContent');
|
||||
Route::post('gifts/content', 'member.Member/getMemberGiftsContent');
|
||||
/***************************************************** 会员签到 ****************************************************/
|
||||
//签到设置
|
||||
Route::put('sign/config', 'member.MemberSign/setSign');
|
||||
|
||||
@ -26,6 +26,7 @@ class CommonActiveDict
|
||||
const EXCHANGE = 'exchange';// 积分商城 积
|
||||
const MANJIANSONG = 'manjiansong'; // 满减送 满减
|
||||
const NEWCOMER_DISCOUNT = 'newcomer_discount'; // 新人专享 新
|
||||
const FRIEND_HELP = 'friend_help'; // 好友助力 友
|
||||
const PINTUAN = 'pintuan'; // 新人专享 新
|
||||
const SECKILL = 'seckill'; // 秒杀 秒
|
||||
const RELAY = 'relay'; // 接龙 接
|
||||
@ -78,6 +79,11 @@ class CommonActiveDict
|
||||
'active_name' => get_lang('common_active_short.relay_name'),
|
||||
'bg_color' => '#0EB108'
|
||||
],
|
||||
self::FRIEND_HELP => [
|
||||
'name' => get_lang('common_active_short.friend_help_short'),
|
||||
'active_name' => get_lang('common_active_short.friend_help_name'),
|
||||
'bg_color' => '#F20C8A'
|
||||
],
|
||||
];
|
||||
return !empty($active) ? $data[$active] ?? [] : $data;
|
||||
}
|
||||
|
||||
@ -160,7 +160,8 @@ class PagesDict
|
||||
],
|
||||
"copyright" => [
|
||||
'control' => true,
|
||||
'isShow' => false
|
||||
'isShow' => false,
|
||||
'textColor' =>'#ccc'
|
||||
],
|
||||
"template" => [
|
||||
'textColor' => "#303133",
|
||||
@ -243,7 +244,8 @@ class PagesDict
|
||||
],
|
||||
"copyright" => [
|
||||
'control' => true,
|
||||
'isShow' => false
|
||||
'isShow' => false,
|
||||
'textColor' =>'#ccc'
|
||||
],
|
||||
"template" => [
|
||||
'textColor' => "#303133",
|
||||
@ -720,7 +722,8 @@ class PagesDict
|
||||
],
|
||||
"copyright" => [
|
||||
'control' => true,
|
||||
'isShow' => false
|
||||
'isShow' => false,
|
||||
'textColor' =>'#ccc'
|
||||
],
|
||||
"template" => [
|
||||
'textColor' => "#303133",
|
||||
|
||||
@ -87,7 +87,8 @@ class TemplateDict
|
||||
],
|
||||
"copyright" => [
|
||||
'control' => true,
|
||||
'isShow' => false
|
||||
'isShow' => false,
|
||||
'textColor' =>'#ccc'
|
||||
],
|
||||
"popWindow" => [
|
||||
"imgUrl" => "",
|
||||
@ -740,7 +741,8 @@ class TemplateDict
|
||||
],
|
||||
"copyright" => [
|
||||
'control' => true,
|
||||
'isShow' => false
|
||||
'isShow' => false,
|
||||
'textColor' =>'#ccc'
|
||||
],
|
||||
"popWindow" => [
|
||||
"imgUrl" => "",
|
||||
|
||||
@ -1688,21 +1688,7 @@ return [
|
||||
'is_show' => '1',
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'menu_name' => '系统更新',
|
||||
'menu_key' => 'system_upgrade',
|
||||
'menu_short_name' => '系统更新',
|
||||
'menu_type' => '1',
|
||||
'icon' => 'iconfont iconxitonggengxin1',
|
||||
'api_url' => '',
|
||||
'router_path' => 'tools/upgrade',
|
||||
'view_path' => 'app/upgrade',
|
||||
'methods' => '',
|
||||
'sort' => '97',
|
||||
'status' => '1',
|
||||
'is_show' => '1',
|
||||
],
|
||||
]
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ class ConfigKeyDict
|
||||
|
||||
public const SMS = 'SMS';//短信配置
|
||||
public const PINTUAN_ORDER_CONFIG = 'PINTUAN_ORDER_CONFIG';//拼团订单配置
|
||||
public const FRIEND_HELP_CONFIG = 'FRIEND_HELP_CONFIG';//拼团订单配置
|
||||
public const RELAY_ORDER_CONFIG = 'RELAY_ORDER_CONFIG';//接龙订单配置
|
||||
|
||||
public const APP = 'app';
|
||||
|
||||
@ -78,6 +78,7 @@ class FileDict
|
||||
self::IMAGE,//图片上传
|
||||
self::VIDEO,//视频上传
|
||||
self::AUDIO,//视频上传
|
||||
self::DOCUMENT,//文件上传
|
||||
self::APPLET,//小程序包上传
|
||||
self::EXCEL,//excel导入
|
||||
self::APP_PACKAGE,//应用包
|
||||
|
||||
@ -469,6 +469,8 @@ return [
|
||||
'seckill_name' => '秒杀',
|
||||
'relay_short' => '接',
|
||||
'relay_name' => '接龙',
|
||||
'friend_help_short' => '友',
|
||||
'friend_help_name' => '好友助力',
|
||||
],
|
||||
//应用菜单下 特殊菜单定义
|
||||
'dict_site_addon_menu' => [
|
||||
|
||||
@ -69,8 +69,9 @@ class AuthService extends BaseAdminService
|
||||
$method = strtolower(trim($request->method()));
|
||||
$site_info = (new AuthSiteService())->getSiteInfo();
|
||||
if ($method != 'get') {
|
||||
if ($site_info['status'] == SiteDict::EXPIRE) throw new AuthException('SITE_EXPIRE_NOT_ALLOW');
|
||||
if ($site_info['status'] == SiteDict::CLOSE) throw new AuthException('SITE_CLOSE_NOT_ALLOW');
|
||||
// throw new AuthException('演示站禁止操作');
|
||||
if ($site_info[ 'status' ] == SiteDict::EXPIRE) throw new AuthException('SITE_EXPIRE_NOT_ALLOW');
|
||||
if ($site_info[ 'status' ] == SiteDict::CLOSE) throw new AuthException('SITE_CLOSE_NOT_ALLOW');
|
||||
}
|
||||
|
||||
$menu_service = new MenuService();
|
||||
|
||||
@ -213,6 +213,9 @@ class AuthSiteService extends BaseAdminService
|
||||
* @return true
|
||||
*/
|
||||
public function createSite(array $data) {
|
||||
|
||||
// throw new CommonException('演示站禁止操作');
|
||||
|
||||
if (!AuthService::isSuperAdmin()) {
|
||||
$limit = (new UserCreateSiteLimit())->where([ ['uid', '=', $this->uid], ['group_id', '=', $data['group_id'] ] ])->findOrEmpty();
|
||||
if ($limit->isEmpty()) throw new CommonException('NO_PERMISSION_TO_CREATE_SITE_GROUP');
|
||||
|
||||
@ -175,6 +175,7 @@ class WeappAuthService extends BaseApiService
|
||||
// }
|
||||
}
|
||||
}
|
||||
if (empty($member_info->wx_unionid) && !empty($unionid)) $member_info->wx_unionid = $unionid;
|
||||
return $login_service->login($member_info, MemberLoginTypeDict::WEAPP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,6 +143,7 @@ class WechatAppService extends BaseApiService
|
||||
if (!empty($avatar)) $member_info->headimg = $avatar;
|
||||
if (!empty($nickname)) $member_info->nickname = $nickname;
|
||||
}
|
||||
if (empty($member_info->wx_unionid) && !empty($unionid)) $member_info->wx_unionid = $unionid;
|
||||
return $login_service->login($member_info, MemberLoginTypeDict::WECHAT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,6 +163,7 @@ class WechatAuthService extends BaseApiService
|
||||
if (!empty($avatar)) $member_info->headimg = $avatar;
|
||||
if (!empty($nickname)) $member_info->nickname = $nickname;
|
||||
}
|
||||
if (empty($member_info->wx_unionid) && !empty($unionid)) $member_info->wx_unionid = $unionid;
|
||||
return $login_service->login($member_info, MemberLoginTypeDict::WECHAT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -133,6 +133,7 @@ class CoreAddonCloudService extends CoreCloudBaseService
|
||||
return $build_log;
|
||||
}
|
||||
if ($last['percent'] == 100) {
|
||||
$addon = isset($install_task['addon_list']) ? implode(',', $install_task['addon_list']) : $addon;
|
||||
$build_log['data'][0] = $this->buildSuccess($addon, $build_log['data'][0], $install_task['timestamp']);
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ use think\db\exception\DbException;
|
||||
use think\db\exception\PDOException;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* 安装服务层
|
||||
@ -63,11 +64,14 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
|
||||
private $install_task = null;
|
||||
|
||||
private $addon_list = [];
|
||||
|
||||
public function __construct($addon)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->addon = $addon;
|
||||
$this->install_addon_path = $this->addon_path . $addon . DIRECTORY_SEPARATOR;
|
||||
$this->addon_list = explode(',', $addon);
|
||||
$this->addon = $this->addon_list[0];
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
$this->cache_key = "install_{$addon}";
|
||||
|
||||
@ -93,30 +97,17 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
*/
|
||||
public function installCheck()
|
||||
{
|
||||
$from_admin_dir = $this->install_addon_path . 'admin' . DIRECTORY_SEPARATOR;
|
||||
$from_web_dir = $this->install_addon_path . 'web' . DIRECTORY_SEPARATOR;
|
||||
$from_wap_dir = $this->install_addon_path . 'uni-app' . DIRECTORY_SEPARATOR;
|
||||
$from_resource_dir = $this->install_addon_path . 'resource' . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 放入的文件
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR;
|
||||
$to_web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR;
|
||||
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR;
|
||||
|
||||
if (!is_dir($this->root_path . 'admin' . DIRECTORY_SEPARATOR)) throw new CommonException('ADMIN_DIR_NOT_EXIST');
|
||||
if (!is_dir($this->root_path . 'web' . DIRECTORY_SEPARATOR)) throw new CommonException('WEB_DIR_NOT_EXIST');
|
||||
if (!is_dir($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR)) throw new CommonException('UNIAPP_DIR_NOT_EXIST');
|
||||
|
||||
// 配置文件
|
||||
$package_path = $this->install_addon_path . 'package' . DIRECTORY_SEPARATOR;
|
||||
$package_file = [];
|
||||
search_dir($package_path, $package_file);
|
||||
$package_file = array_map(function ($file) use ($package_path) {
|
||||
return str_replace($package_path . DIRECTORY_SEPARATOR, '', $file);
|
||||
}, $package_file);
|
||||
|
||||
$data = [
|
||||
// 目录检测
|
||||
'dir' => [
|
||||
@ -127,10 +118,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
]
|
||||
];
|
||||
|
||||
if (is_dir($from_admin_dir)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $from_admin_dir), 'status' => is_readable($from_admin_dir)];
|
||||
if (is_dir($from_web_dir)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $from_web_dir), 'status' => is_readable($from_web_dir)];
|
||||
if (is_dir($from_wap_dir)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $from_wap_dir), 'status' => is_readable($from_wap_dir)];
|
||||
if (is_dir($from_resource_dir)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $from_resource_dir), 'status' => is_readable($from_resource_dir)];
|
||||
if (is_dir($this->addon_path)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $this->addon_path), 'status' => is_readable($this->addon_path)];
|
||||
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_admin_dir), 'status' => is_dir($to_admin_dir) ? is_write($to_admin_dir) : mkdir($to_admin_dir, 0777, true)];
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_web_dir), 'status' => is_dir($to_web_dir) ? is_write($to_web_dir) : mkdir($to_web_dir, 0777, true)];
|
||||
@ -138,7 +126,8 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_resource_dir), 'status' => is_dir($to_resource_dir) ? is_write($to_resource_dir) : mkdir($to_resource_dir, 0777, true)];
|
||||
|
||||
// 校验niucloud/public下 wap web admin 目录及文件是否可读可写
|
||||
$check_res = checkDirPermissions(public_path() . 'wap');
|
||||
$check_res = checkDirPermissions($this->addon_path);
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'wap'));
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'admin'));
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'web'));
|
||||
|
||||
@ -153,13 +142,65 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
}
|
||||
}
|
||||
|
||||
$check_res = array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status')
|
||||
);
|
||||
// 检测插件
|
||||
$framework_version = config('version.version');
|
||||
$framework_version_arr = explode('.', $framework_version);
|
||||
|
||||
$data['addon_check'] = [];
|
||||
foreach ($this->addon_list as $addon) {
|
||||
$install_data = $this->getAddonConfig($addon);
|
||||
if (empty($install_data)) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => "未找到插件{$addon}的info.json文件",
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
$core_addon_service = new CoreAddonService();
|
||||
if (!empty($core_addon_service->getInfoByKey($addon))) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件已安装,不能重复安装',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
if (isset($install_data['support_app']) && !empty($install_data['support_app']) &&
|
||||
empty($core_addon_service->getInfoByKey($install_data['support_app'])) && !in_array($install_data['support_app'], $this->addon_list)) {
|
||||
$support_app_data = $this->getAddonConfig($install_data['support_app']);
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的主应用'. (empty($support_app_data) ? $install_data['support_app'] : $support_app_data['title']) .'插件还未安装,请先安装主应用',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
if (!isset($install_data['support_version']) || empty($install_data['support_version'])) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的info.json文件中未检测到匹配框架当前版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]的信息无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
$support_framework_arr = explode('.', $install_data['support_version']);
|
||||
if ($framework_version_arr[0].$framework_version_arr[1] != $support_framework_arr[0].$support_framework_arr[1]) {
|
||||
if ((float) "$support_framework_arr[0].$support_framework_arr[1]" < (float) "$framework_version_arr[0].$framework_version_arr[1]") {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的info.json文件中检测到支持的框架版本['. $install_data['support_version'] .']低于当前框架版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>',
|
||||
'status' => false
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 是否通过校验
|
||||
$data['is_pass'] = !in_array(false, $check_res);
|
||||
$data['is_pass'] = !in_array(false, array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status'),
|
||||
array_column($data['addon_check'], 'status')
|
||||
));
|
||||
$data['file_permission_is_pass'] = !in_array(false, array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status'),
|
||||
));
|
||||
Cache::set($this->cache_key . '_install_check', $data['is_pass']);
|
||||
return $data;
|
||||
}
|
||||
@ -170,58 +211,34 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
*/
|
||||
public function install(string $mode = 'local')
|
||||
{
|
||||
$core_addon_service = new CoreAddonService();
|
||||
if (!empty($core_addon_service->getInfoByKey($this->addon))) throw new AddonException('REPEAT_INSTALL');
|
||||
|
||||
$install_data = $this->getAddonConfig($this->addon);
|
||||
if (empty($install_data)) throw new AddonException('ADDON_INFO_FILE_NOT_EXIST');
|
||||
|
||||
$framework_version = config('version.version');
|
||||
$framework_version_arr = explode('.', $framework_version);
|
||||
|
||||
// 检测框架版本是否支持
|
||||
if (!isset($install_data['support_version']) || empty($install_data['support_version']))
|
||||
throw new AddonException('您要安装的插件或应用的info.json文件中未检测到匹配框架当前版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]的信息无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>');
|
||||
|
||||
$support_framework_arr = explode('.', $install_data['support_version']);
|
||||
if ($framework_version_arr[0].$framework_version_arr[1] != $support_framework_arr[0].$support_framework_arr[1]) {
|
||||
if ((float) "$support_framework_arr[0].$support_framework_arr[1]" < (float) "$framework_version_arr[0].$framework_version_arr[1]") {
|
||||
throw new AddonException('您要安装的插件或应用的info.json文件中检测到支持的框架版本['. $install_data['support_version'] .']低于当前框架版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>');
|
||||
}
|
||||
}
|
||||
|
||||
$check_res = Cache::get($this->cache_key . '_install_check');
|
||||
if (!$check_res) throw new CommonException('INSTALL_CHECK_NOT_PASS');
|
||||
|
||||
if ($this->install_task) throw new CommonException('ADDON_INSTALLING');
|
||||
$this->install_task = [ 'mode' => $mode, 'addon' => $this->addon, 'step' => [], 'timestamp' => time() ];
|
||||
$this->install_task = [ 'mode' => $mode, 'addon' => $this->addon, 'addon_list' => $this->addon_list, 'step' => [], 'fail_addon' => [], 'timestamp' => time() ];
|
||||
Cache::set('install_task', $this->install_task);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$install_step = ['installDir','installWap','installDepend'];
|
||||
// 备份前端目录
|
||||
$this->backupFrontend();
|
||||
|
||||
if (!empty($install_data['compile']) || $mode == 'cloud') {
|
||||
// 备份前端目录
|
||||
$install_step[] = 'backupFrontend';
|
||||
}
|
||||
$tips = [];
|
||||
if ($mode != 'cloud') $tips[] = get_lang('dict_addon.install_after_update');
|
||||
|
||||
// 检测插件是否存在编译内容
|
||||
if (!empty($install_data['compile'])) {
|
||||
$install_step[] = 'coverCompile';
|
||||
}
|
||||
foreach ($this->addon_list as $addon) {
|
||||
$this->install_task['addon'] = $addon;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
|
||||
if ($mode == 'cloud') {
|
||||
$install_step[] = 'cloudInstall';
|
||||
} else {
|
||||
$install_step[] = 'handleAddonInstall';
|
||||
}
|
||||
$this->addon = $addon;
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$install_data = $this->getAddonConfig($addon);
|
||||
|
||||
try {
|
||||
foreach ($install_step as $step) {
|
||||
$this->install_task['step'][] = $step;
|
||||
$this->$step();
|
||||
if ($step != 'handleAddonInstall') Cache::set('install_task', $this->install_task);
|
||||
$install_step = ['installDir','installDepend'];
|
||||
|
||||
// 检测插件是否存在编译内容
|
||||
if (!empty($install_data['compile'])) {
|
||||
$install_step[] = 'coverCompile';
|
||||
}
|
||||
|
||||
if ($mode != 'cloud') {
|
||||
@ -233,41 +250,57 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
return str_replace($package_path . DIRECTORY_SEPARATOR, '', $file);
|
||||
}, $package_file);
|
||||
|
||||
$tips = [get_lang('dict_addon.install_after_update')];
|
||||
if (in_array('admin-package.json', $package_file)) $tips[] = get_lang('dict_addon.install_after_admin_update');
|
||||
if (in_array('composer.json', $package_file)) $tips[] = get_lang('dict_addon.install_after_composer_update');
|
||||
if (in_array('uni-app-package.json', $package_file)) $tips[] = get_lang('dict_addon.install_after_wap_update');
|
||||
if (in_array('web-package.json', $package_file)) $tips[] = get_lang('dict_addon.install_after_web_update');
|
||||
return $tips;
|
||||
if (in_array('admin-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_admin_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_admin_update');
|
||||
if (in_array('composer.json', $package_file) && !in_array(get_lang('dict_addon.install_after_composer_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_composer_update');
|
||||
if (in_array('uni-app-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_wap_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_wap_update');
|
||||
if (in_array('web-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_web_update'), $tips) ) $tips[] = get_lang('dict_addon.install_after_web_update');
|
||||
}
|
||||
|
||||
try {
|
||||
$this->install_task['step'] = [];
|
||||
foreach ($install_step as $step) {
|
||||
$this->install_task['step'][] = $step;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
$this->$step();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->install_task['fail_addon'] = $this->addon;
|
||||
$this->installExceptionHandle($addon);
|
||||
if (count($this->addon_list) == 1) {
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
Log::write($install_data['title'] . '插件安装失败');
|
||||
Log::write($e->getTrace());
|
||||
$tips[] = $install_data['title'] . '插件安装失败';
|
||||
}
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
Cache::set('install_task', $this->install_task);
|
||||
$this->installExceptionHandle();
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
|
||||
$this->installWap();
|
||||
|
||||
if ($mode == 'cloud') {
|
||||
$this->install_task['tips'] = $tips;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
$this->cloudInstall();
|
||||
} else {
|
||||
$this->handleAddonInstall();
|
||||
}
|
||||
return empty($tips) ? true : $tips;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装异常处理
|
||||
* @return void
|
||||
*/
|
||||
public function installExceptionHandle() {
|
||||
public function installExceptionHandle($name = '') {
|
||||
$install_task = Cache::get('install_task');
|
||||
|
||||
if (in_array('installDir', $install_task['step'])) {
|
||||
foreach ($this->addon_list as $addon) {
|
||||
if (!empty($name) && $name != $addon) continue;
|
||||
@$this->uninstallDir();
|
||||
}
|
||||
|
||||
if (in_array('installWap', $install_task['step'])) {
|
||||
@$this->uninstallWap();
|
||||
}
|
||||
|
||||
if (in_array('backupFrontend', $install_task['step'])) {
|
||||
@$this->revertFrontendBackup();
|
||||
}
|
||||
|
||||
Cache::set('install_task', null);
|
||||
@$this->revertFrontendBackup();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -275,7 +308,10 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
* @return void
|
||||
*/
|
||||
public function cancleInstall() {
|
||||
if (Cache::get('install_task')) $this->installExceptionHandle();
|
||||
if (Cache::get('install_task')) {
|
||||
$this->installExceptionHandle();
|
||||
Cache::set('install_task', null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -411,25 +447,37 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
*/
|
||||
public function handleAddonInstall()
|
||||
{
|
||||
// 执行安装sql
|
||||
$this->installSql();
|
||||
// 安装菜单
|
||||
$this->installMenu();
|
||||
// 安装计划任务
|
||||
$this->installSchedule();
|
||||
|
||||
$core_addon_service = new CoreAddonService();
|
||||
$install_data = $this->getAddonConfig($this->addon);
|
||||
$install_data['icon'] = 'addon/' . $this->addon . '/icon.png';
|
||||
$core_addon_service->set($install_data);
|
||||
|
||||
$fail_addon = $this->install_task['fail_addon'] ?? [];
|
||||
|
||||
foreach ($this->addon_list as $addon) {
|
||||
if (in_array($addon, $fail_addon)) continue;
|
||||
|
||||
$this->addon = $addon;
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 执行安装sql
|
||||
$this->installSql();
|
||||
// 安装菜单
|
||||
$this->installMenu();
|
||||
// 安装计划任务
|
||||
$this->installSchedule();
|
||||
|
||||
$install_data = $this->getAddonConfig($this->addon);
|
||||
$install_data['icon'] = 'addon/' . $this->addon . '/icon.png';
|
||||
$core_addon_service->set($install_data);
|
||||
|
||||
//执行插件安装方法
|
||||
$class = "addon\\" . $this->addon . "\\" . 'Addon';
|
||||
if (class_exists($class)) {
|
||||
(new $class())->install();
|
||||
}
|
||||
}
|
||||
|
||||
//清理缓存
|
||||
Cache::tag(self::$cache_tag_name)->clear();
|
||||
//执行命令
|
||||
//执行插件安装方法
|
||||
$class = "addon\\" . $this->addon . "\\" . 'Addon';
|
||||
if (class_exists($class)) {
|
||||
(new $class())->install();
|
||||
}
|
||||
|
||||
// 清除插件安装中标识
|
||||
Cache::delete('install_task');
|
||||
Cache::delete($this->cache_key . '_install_check');
|
||||
@ -691,13 +739,13 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
||||
{
|
||||
|
||||
// 编译 diy-group 自定义组件代码文件
|
||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
// 编译 pages.json 页面路由代码文件
|
||||
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
// 编译 加载插件标题语言包
|
||||
$this->compileLocale($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||
$this->compileLocale($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -83,7 +83,12 @@ trait WapTrait
|
||||
}
|
||||
}
|
||||
if (!empty($addon)) {
|
||||
$addon_arr[] = $addon; // 追加新装插件
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
@ -122,7 +127,7 @@ trait WapTrait
|
||||
$content .= " </view>\n";
|
||||
$content .= " </template>\n";
|
||||
$content .= " <template v-if=\"diyStore.mode == '' && data.global && diyGroup.showCopyright.value && data.global.copyright && data.global.copyright.isShow\">\n";
|
||||
$content .= " <copy-right />\n";
|
||||
$content .= " <copy-right :textColor=\"data.global.copyright.textColor\" />\n";
|
||||
$content .= " </template>\n\n";
|
||||
$content .= " <template v-if=\"diyStore.mode == '' && data.global && data.global.bottomTabBar && data.global.bottomTabBar.isShow\">\n";
|
||||
$content .= " <view class=\"pt-[20rpx]\"></view>\n";
|
||||
@ -184,7 +189,7 @@ trait WapTrait
|
||||
* @param $compile_path
|
||||
* @return bool|int|void
|
||||
*/
|
||||
public function installPageCode($compile_path)
|
||||
public function installPageCode($compile_path, $addon = '')
|
||||
{
|
||||
if (!file_exists($this->geAddonPackagePath($this->addon) . 'uni-app-pages.php')) return;
|
||||
|
||||
@ -195,7 +200,25 @@ trait WapTrait
|
||||
}
|
||||
|
||||
$pages = [];
|
||||
$addon_arr = array_unique(array_merge([ $this->addon ], array_column(( new CoreAddonService() )->getInstallAddonList(), 'key')));
|
||||
|
||||
$addon_service = new CoreAddonService();
|
||||
$addon_list = $addon_service->getInstallAddonList();
|
||||
$addon_arr = [];
|
||||
if (!empty($addon_list)) {
|
||||
foreach ($addon_list as $k => $v) {
|
||||
$addon_arr[] = $v[ 'key' ];
|
||||
}
|
||||
}
|
||||
if (!empty($addon)) {
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
foreach ($addon_arr as $addon) {
|
||||
if (!file_exists($this->geAddonPackagePath($addon) . 'uni-app-pages.php')) continue;
|
||||
$uniapp_pages = require $this->geAddonPackagePath($addon) . 'uni-app-pages.php';
|
||||
@ -284,8 +307,16 @@ trait WapTrait
|
||||
$json = json_decode($app_json, true);
|
||||
// 清空当前安装/卸载的插件语言包
|
||||
foreach ($json as $jk => $jc) {
|
||||
if (strpos($jk, $addon) !== false) {
|
||||
unset($json[ $jk ]);
|
||||
if (is_array($addon)) {
|
||||
foreach ($addon as $key) {
|
||||
if (strpos($jk, $key) !== false) {
|
||||
unset($json[ $jk ]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (strpos($jk, $addon) !== false) {
|
||||
unset($json[ $jk ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$locale_data[ $cv ] = [
|
||||
@ -305,8 +336,16 @@ trait WapTrait
|
||||
$addon_arr[] = $v[ 'key' ];
|
||||
}
|
||||
}
|
||||
$addon_arr[] = $addon; // 追加新装插件
|
||||
if (!empty($addon)) {
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
foreach ($addon_arr as $k => $v) {
|
||||
$addon_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/' . $v . '/locale'); // 插件语言包根目录
|
||||
$addon_file_arr = getFileMap($addon_path, []);
|
||||
|
||||
@ -131,7 +131,6 @@ class CorePosterService extends BaseCoreService
|
||||
$condition[] = ['is_default', '=', 1];
|
||||
}
|
||||
$poster = (new Poster())->where($condition)->findOrEmpty();
|
||||
|
||||
try {
|
||||
|
||||
if ($poster->isEmpty()) {
|
||||
@ -146,7 +145,6 @@ class CorePosterService extends BaseCoreService
|
||||
}
|
||||
|
||||
if (empty($poster)) throw new CommonException('海报模板不存在');
|
||||
|
||||
$poster_data = [];
|
||||
$poster_data_arr = array_values(array_filter(event('GetPosterData', [
|
||||
'type' => $type,
|
||||
@ -154,7 +152,6 @@ class CorePosterService extends BaseCoreService
|
||||
'param' => $param,
|
||||
'channel' => $channel
|
||||
])));
|
||||
|
||||
// 合并模版数据
|
||||
foreach ($poster_data_arr as $k => $v) {
|
||||
$poster_data = array_merge($poster_data, $v);
|
||||
|
||||
@ -155,10 +155,10 @@ class CoreWeappService extends BaseCoreService
|
||||
$result = CoreOplatformService::weappVersion($site_id);
|
||||
if (isset($result['errcode']) && $result['errcode'] != 0) throw new CommonException($result['errmsg']);
|
||||
return [
|
||||
"release_version" => $result['release_info']['release_version'],
|
||||
"release_time" => date('Y-m-d H:i:s', $result['release_info']['release_time']),
|
||||
"exp_version" => $result['exp_info']['exp_version'] ?? '',
|
||||
"exp_time" => !empty($result['exp_info']['exp_time']) ? date('Y-m-d H:i:s', $result['exp_info']['exp_time']) : '',
|
||||
"release_version" => !empty($result['release_info']) ? $result['release_info']['release_version'] : '',
|
||||
"release_time" => !empty($result['release_info']) ? date('Y-m-d H:i:s', $result['release_info']['release_time']) : '',
|
||||
"exp_version" => !empty($result['exp_info']) ? ($result['exp_info']['exp_version'] ?? '') : '',
|
||||
"exp_time" => !empty($result['exp_info']) ? date('Y-m-d H:i:s', $result['exp_info']['exp_time']) : '',
|
||||
];
|
||||
}
|
||||
return [];
|
||||
|
||||
@ -17,6 +17,7 @@ use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
|
||||
use EasyWeChat\Kernel\Support\Collection;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* 微信小程序服务提供
|
||||
@ -39,12 +40,13 @@ class CoreWeappTemplateService extends BaseCoreService
|
||||
*/
|
||||
public function send(int $site_id, string $template_id, string $touser, array $data, string $page = ''){
|
||||
$api = CoreWeappService::appApiClient($site_id);
|
||||
$api->postJson('cgi-bin/message/subscribe/send', [
|
||||
$res = $api->postJson('cgi-bin/message/subscribe/send', [
|
||||
'template_id' => $template_id, // 所需下发的订阅模板id
|
||||
'touser' => $touser, // 接收者(用户)的 openid
|
||||
'page' => $page, // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
|
||||
'data' => $data,
|
||||
]);
|
||||
Log::write('小程序消息发送RESPONSE'.json_encode($res->toArray(),256));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -43,7 +43,8 @@ class CoreWechatConfigService extends BaseCoreService
|
||||
'token' => $info[ 'token' ] ?? '',
|
||||
'encoding_aes_key' => $info[ 'encoding_aes_key' ] ?? '',
|
||||
'encryption_type' => $info[ 'encryption_type' ] ?? 'not_encrypt',//加解密模式 not_encrypt 明文 compatible 兼容 safe 安全
|
||||
'is_authorization' => $info[ 'is_authorization' ] ?? 0
|
||||
'is_authorization' => $info[ 'is_authorization' ] ?? 0,
|
||||
'base_uri' => $info['base_uri'] ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ class CoreWechatService extends BaseCoreService
|
||||
'retry' => true, // 使用默认重试配置
|
||||
]
|
||||
);
|
||||
if (isset($wechat_config['base_uri']) && !empty($wechat_config['base_uri'])) $config['http']['base_uri'] = $wechat_config['base_uri'];
|
||||
return new Application($config);
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ class CoreOplatformService extends BaseCoreService
|
||||
'token' => $oplatform_config['token'],
|
||||
'aes_key' => $oplatform_config['aes_key'],// 明文模式请勿填写 EncodingAESKey
|
||||
'http' => [
|
||||
'timeout' => 5.0,
|
||||
'timeout' => 10,//若返回不及时会导致接口返回报错 9402205 (猜测)
|
||||
'retry' => true, // 使用默认重试配置
|
||||
]
|
||||
);
|
||||
|
||||
73
niucloud/app/upgrade/v119/Upgrade.php
Normal file
73
niucloud/app/upgrade/v119/Upgrade.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace app\upgrade\v119;
|
||||
|
||||
|
||||
use app\model\diy\Diy;
|
||||
use app\model\diy_form\DiyForm;
|
||||
|
||||
class Upgrade
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$this->handleDiyData();
|
||||
$this->handleDiyFormData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理自定义数据
|
||||
* @return void
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
private function handleDiyData()
|
||||
{
|
||||
$diy_model = new Diy();
|
||||
$where = [
|
||||
['value', '<>', ''],
|
||||
];
|
||||
$field = 'id,value';
|
||||
$list = $diy_model->where($where)->field($field)->select()->toArray();
|
||||
|
||||
if (!empty($list)) {
|
||||
foreach ($list as $k => $v) {
|
||||
$diy_data = json_decode($v['value'], true);
|
||||
$diy_data['global']['copyright']['textColor'] = '#ccc';
|
||||
$diy_data = json_encode($diy_data);
|
||||
$diy_model->where([['id', '=', $v['id']]])->update(['value' => $diy_data]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理万能表单数据
|
||||
* @return void
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
private function handleDiyFormData()
|
||||
{
|
||||
$diy_form_model = new DiyForm();
|
||||
$where = [
|
||||
['value', '<>', '']
|
||||
];
|
||||
$field = 'form_id,value';
|
||||
$list = $diy_form_model->where($where)->field($field)->select()->toArray();
|
||||
|
||||
if (!empty($list)) {
|
||||
foreach ($list as $k => $v) {
|
||||
$diy_data = $v['value'];
|
||||
if (!isset($diy_data['global']['copyright']['textColor'])) {
|
||||
$diy_data['global']['copyright']['textColor'] = '#ccc';
|
||||
}
|
||||
$diy_form_model->where([['form_id', '=', $v['form_id']]])->update(['value' => $diy_data]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
0
niucloud/app/upgrade/v119/upgrade.sql
Normal file
0
niucloud/app/upgrade/v119/upgrade.sql
Normal file
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'version' => '1.1.8',
|
||||
'code' => '202510300001'
|
||||
'version' => '1.1.9',
|
||||
'code' => '202511110001'
|
||||
];
|
||||
|
||||
@ -0,0 +1,840 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\addon;
|
||||
|
||||
use app\model\site\Site;
|
||||
use app\model\site\SiteGroup;
|
||||
use app\service\admin\sys\MenuService;
|
||||
use app\service\core\menu\CoreMenuService;
|
||||
use app\service\core\schedule\CoreScheduleInstallService;
|
||||
use core\exception\AddonException;
|
||||
use core\exception\CommonException;
|
||||
use core\util\Terminal;
|
||||
use think\db\exception\DbException;
|
||||
use think\db\exception\PDOException;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* 安装服务层
|
||||
* Class CoreInstallService
|
||||
* @package app\service\core\install
|
||||
*/
|
||||
class CoreAddonInstallService extends CoreAddonBaseService
|
||||
{
|
||||
use WapTrait;
|
||||
|
||||
public static $instance;
|
||||
/**
|
||||
* 需要迁移的文件,用于检测是否冲突
|
||||
* @var array[]
|
||||
*/
|
||||
public $install_files = [
|
||||
'admin' => [],
|
||||
'web' => [],
|
||||
'wap' => [],
|
||||
];
|
||||
private $files = [
|
||||
'niucloud' => [],
|
||||
'admin' => [],
|
||||
'web' => [],
|
||||
'wap' => [],
|
||||
'resource' => []
|
||||
];
|
||||
private $flow_path = [
|
||||
'file',
|
||||
'sql',
|
||||
'menu',
|
||||
'diy'
|
||||
];
|
||||
private $addon;
|
||||
private $install_addon_path;
|
||||
|
||||
private $cache_key = '';
|
||||
|
||||
private $install_task = null;
|
||||
|
||||
private $addon_list = [];
|
||||
|
||||
public function __construct($addon)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->addon_list = explode(',', $addon);
|
||||
$this->addon = $this->addon_list[0];
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
$this->cache_key = "install_{$addon}";
|
||||
|
||||
$this->install_task = Cache::get('install_task');
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化实例
|
||||
* @param string $addon
|
||||
* @return static
|
||||
*/
|
||||
public static function instance(string $addon)
|
||||
{
|
||||
if (is_null(self::$instance)) {
|
||||
self::$instance = new static($addon);
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装前检测
|
||||
* @return array
|
||||
*/
|
||||
public function installCheck()
|
||||
{
|
||||
// 放入的文件
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR;
|
||||
$to_web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon'. DIRECTORY_SEPARATOR;
|
||||
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR;
|
||||
|
||||
if (!is_dir($this->root_path . 'admin' . DIRECTORY_SEPARATOR)) throw new CommonException('ADMIN_DIR_NOT_EXIST');
|
||||
if (!is_dir($this->root_path . 'web' . DIRECTORY_SEPARATOR)) throw new CommonException('WEB_DIR_NOT_EXIST');
|
||||
if (!is_dir($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR)) throw new CommonException('UNIAPP_DIR_NOT_EXIST');
|
||||
|
||||
$data = [
|
||||
// 目录检测
|
||||
'dir' => [
|
||||
// 要求可读权限
|
||||
'is_readable' => [],
|
||||
// 要求可写权限
|
||||
'is_write' => []
|
||||
]
|
||||
];
|
||||
|
||||
if (is_dir($this->addon_path)) $data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $this->addon_path), 'status' => is_readable($this->addon_path)];
|
||||
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_admin_dir), 'status' => is_dir($to_admin_dir) ? is_write($to_admin_dir) : mkdir($to_admin_dir, 0777, true)];
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_web_dir), 'status' => is_dir($to_web_dir) ? is_write($to_web_dir) : mkdir($to_web_dir, 0777, true)];
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_wap_dir), 'status' => is_dir($to_wap_dir) ? is_write($to_wap_dir) : mkdir($to_wap_dir, 0777, true)];
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_resource_dir), 'status' => is_dir($to_resource_dir) ? is_write($to_resource_dir) : mkdir($to_resource_dir, 0777, true)];
|
||||
|
||||
// 校验niucloud/public下 wap web admin 目录及文件是否可读可写
|
||||
$check_res = checkDirPermissions($this->addon_path);
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'wap'));
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'admin'));
|
||||
$check_res = array_merge2($check_res, checkDirPermissions(public_path() . 'web'));
|
||||
|
||||
if (!empty($check_res['unreadable'])) {
|
||||
foreach ($check_res['unreadable'] as $item) {
|
||||
$data['dir']['is_readable'][] = ['dir' => str_replace(project_path(), '', $item),'status' => false];
|
||||
}
|
||||
}
|
||||
if (!empty($check_res['not_writable'])) {
|
||||
foreach ($check_res['not_writable'] as $item) {
|
||||
$data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $item),'status' => false];
|
||||
}
|
||||
}
|
||||
|
||||
// 检测插件
|
||||
$framework_version = config('version.version');
|
||||
$framework_version_arr = explode('.', $framework_version);
|
||||
|
||||
$data['addon_check'] = [];
|
||||
foreach ($this->addon_list as $addon) {
|
||||
$install_data = $this->getAddonConfig($addon);
|
||||
if (empty($install_data)) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => "未找到插件{$addon}的info.json文件",
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
$core_addon_service = new CoreAddonService();
|
||||
if (!empty($core_addon_service->getInfoByKey($addon))) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件已安装,不能重复安装',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
if (isset($install_data['support_app']) && !empty($install_data['support_app']) &&
|
||||
empty($core_addon_service->getInfoByKey($install_data['support_app'])) && !in_array($install_data['support_app'], $this->addon_list)) {
|
||||
$support_app_data = $this->getAddonConfig($install_data['support_app']);
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的主应用'. (empty($support_app_data) ? $install_data['support_app'] : $support_app_data['title']) .'插件还未安装,请先安装主应用',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
if (!isset($install_data['support_version']) || empty($install_data['support_version'])) {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的info.json文件中未检测到匹配框架当前版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]的信息无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>',
|
||||
'status' => false
|
||||
];
|
||||
continue;
|
||||
}
|
||||
$support_framework_arr = explode('.', $install_data['support_version']);
|
||||
if ($framework_version_arr[0].$framework_version_arr[1] != $support_framework_arr[0].$support_framework_arr[1]) {
|
||||
if ((float) "$support_framework_arr[0].$support_framework_arr[1]" < (float) "$framework_version_arr[0].$framework_version_arr[1]") {
|
||||
$data['addon_check'][] = [
|
||||
'msg' => $install_data['title'] . '插件的info.json文件中检测到支持的框架版本['. $install_data['support_version'] .']低于当前框架版本['. $framework_version_arr[0].'.'.$framework_version_arr[1] .'.*]无法安装,<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3244512" target="blank">点击查看相关手册</a>',
|
||||
'status' => false
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 是否通过校验
|
||||
$data['is_pass'] = !in_array(false, array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status'),
|
||||
array_column($data['addon_check'], 'status')
|
||||
));
|
||||
$data['file_permission_is_pass'] = !in_array(false, array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status'),
|
||||
));
|
||||
Cache::set($this->cache_key . '_install_check', $data['is_pass']);
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件安装
|
||||
* @return true
|
||||
*/
|
||||
public function install(string $mode = 'local')
|
||||
{
|
||||
$check_res = Cache::get($this->cache_key . '_install_check');
|
||||
if (!$check_res) throw new CommonException('INSTALL_CHECK_NOT_PASS');
|
||||
|
||||
if ($this->install_task) throw new CommonException('ADDON_INSTALLING');
|
||||
$this->install_task = [ 'mode' => $mode, 'addon' => $this->addon, 'addon_list' => $this->addon_list, 'step' => [], 'fail_addon' => [], 'timestamp' => time() ];
|
||||
Cache::set('install_task', $this->install_task);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
// 备份前端目录
|
||||
$this->backupFrontend();
|
||||
|
||||
$tips = [];
|
||||
if ($mode != 'cloud') $tips[] = get_lang('dict_addon.install_after_update');
|
||||
|
||||
foreach ($this->addon_list as $addon) {
|
||||
$this->install_task['addon'] = $addon;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
|
||||
$this->addon = $addon;
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$install_data = $this->getAddonConfig($addon);
|
||||
|
||||
$install_step = ['installDir','installDepend'];
|
||||
|
||||
// 检测插件是否存在编译内容
|
||||
if (!empty($install_data['compile'])) {
|
||||
$install_step[] = 'coverCompile';
|
||||
}
|
||||
|
||||
if ($mode != 'cloud') {
|
||||
// 配置文件
|
||||
$package_path = $this->install_addon_path . 'package' . DIRECTORY_SEPARATOR;
|
||||
$package_file = [];
|
||||
search_dir($package_path, $package_file);
|
||||
$package_file = array_map(function ($file) use ($package_path) {
|
||||
return str_replace($package_path . DIRECTORY_SEPARATOR, '', $file);
|
||||
}, $package_file);
|
||||
|
||||
if (in_array('admin-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_admin_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_admin_update');
|
||||
if (in_array('composer.json', $package_file) && !in_array(get_lang('dict_addon.install_after_composer_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_composer_update');
|
||||
if (in_array('uni-app-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_wap_update'), $tips)) $tips[] = get_lang('dict_addon.install_after_wap_update');
|
||||
if (in_array('web-package.json', $package_file) && !in_array(get_lang('dict_addon.install_after_web_update'), $tips) ) $tips[] = get_lang('dict_addon.install_after_web_update');
|
||||
}
|
||||
|
||||
try {
|
||||
$this->install_task['step'] = [];
|
||||
foreach ($install_step as $step) {
|
||||
$this->install_task['step'][] = $step;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
$this->$step();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->install_task['fail_addon'] = $this->addon;
|
||||
$this->installExceptionHandle($addon);
|
||||
if (count($this->addon_list) == 1) {
|
||||
throw new CommonException($e->getMessage());
|
||||
}
|
||||
Log::write($install_data['title'] . '插件安装失败');
|
||||
Log::write($e->getTrace());
|
||||
$tips[] = $install_data['title'] . '插件安装失败';
|
||||
}
|
||||
}
|
||||
|
||||
$this->installWap();
|
||||
|
||||
if ($mode == 'cloud') {
|
||||
$this->install_task['tips'] = $tips;
|
||||
Cache::set('install_task', $this->install_task);
|
||||
$this->cloudInstall();
|
||||
} else {
|
||||
$this->handleAddonInstall();
|
||||
}
|
||||
return empty($tips) ? true : $tips;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装异常处理
|
||||
* @return void
|
||||
*/
|
||||
public function installExceptionHandle($name = '') {
|
||||
$install_task = Cache::get('install_task');
|
||||
|
||||
foreach ($this->addon_list as $addon) {
|
||||
if (!empty($name) && $name != $addon) continue;
|
||||
@$this->uninstallDir();
|
||||
@$this->uninstallWap();
|
||||
}
|
||||
|
||||
@$this->revertFrontendBackup();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消安装任务
|
||||
* @return void
|
||||
*/
|
||||
public function cancleInstall() {
|
||||
if (Cache::get('install_task')) {
|
||||
$this->installExceptionHandle();
|
||||
Cache::set('install_task', null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取安装任务
|
||||
* @return mixed
|
||||
*/
|
||||
public function getInstallTask() {
|
||||
return $this->install_task;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装迁移复制文件
|
||||
* @return bool
|
||||
*/
|
||||
public function installDir()
|
||||
{
|
||||
$from_admin_dir = $this->install_addon_path . 'admin' . DIRECTORY_SEPARATOR;
|
||||
$from_web_dir = $this->install_addon_path . 'web' . DIRECTORY_SEPARATOR;
|
||||
$from_wap_dir = $this->install_addon_path . 'uni-app' . DIRECTORY_SEPARATOR;
|
||||
$from_resource_dir = $this->install_addon_path . 'resource' . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 放入的文件
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 安装admin管理端
|
||||
if (file_exists($from_admin_dir)) {
|
||||
dir_copy($from_admin_dir, $to_admin_dir, $this->files['admin'], exclude_dirs:['icon']);
|
||||
// 判断图标目录是否存在
|
||||
if (is_dir($from_admin_dir . 'icon')) {
|
||||
$addon_icon_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'styles' . DIRECTORY_SEPARATOR . 'icon' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon;
|
||||
dir_copy($from_admin_dir . 'icon', $addon_icon_dir);
|
||||
}
|
||||
// 编译后台图标库文件
|
||||
$this->compileAdminIcon();
|
||||
}
|
||||
|
||||
// 安装电脑端
|
||||
if (file_exists($from_web_dir)) {
|
||||
// 安装布局文件
|
||||
$layout = $from_web_dir . 'layouts';
|
||||
if (is_dir($layout)) {
|
||||
dir_copy($layout, $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'layouts');
|
||||
del_target_dir($layout, true);
|
||||
}
|
||||
dir_copy($from_web_dir, $to_web_dir, $this->files['web']);
|
||||
}
|
||||
|
||||
// 安装手机端
|
||||
if (file_exists($from_wap_dir)) {
|
||||
dir_copy($from_wap_dir, $to_wap_dir, $this->files['wap']);
|
||||
}
|
||||
|
||||
//安装资源文件
|
||||
if (file_exists($from_resource_dir)) {
|
||||
dir_copy($from_resource_dir, $to_resource_dir, $this->files['resource']);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译后台图标库文件
|
||||
* 图标开发注意事项,不能占用 iconfont、icon 关键词(会跟系统图标冲突),建议增加业务前缀,比如 旅游业:recharge
|
||||
* @return bool
|
||||
*/
|
||||
public function compileAdminIcon()
|
||||
{
|
||||
$compile_path = $this->root_path . str_replace('/', DIRECTORY_SEPARATOR, 'admin/src/styles/icon/');
|
||||
|
||||
$content = "";
|
||||
$root_path = $compile_path . 'addon'; // 插件图标根目录
|
||||
$file_arr = getFileMap($root_path);
|
||||
if (!empty($file_arr)) {
|
||||
foreach ($file_arr as $ck => $cv) {
|
||||
if (str_contains($cv, '.css')) {
|
||||
$path = str_replace($root_path . '/', '', $ck);
|
||||
$path = str_replace('/.css', '', $path);
|
||||
$content .= "@import \"addon/{$path}\";\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
file_put_contents($compile_path . 'addon-iconfont.css', $content);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function installSql()
|
||||
{
|
||||
$sql = $this->install_addon_path . 'sql' . DIRECTORY_SEPARATOR . 'install.sql';
|
||||
$this->executeSql($sql);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行sql
|
||||
* @param string $sql_file
|
||||
* @return bool
|
||||
*/
|
||||
public static function executeSql(string $sql_file): bool
|
||||
{
|
||||
if (is_file($sql_file)) {
|
||||
$sql = file_get_contents($sql_file);
|
||||
// 执行sql
|
||||
$sql_arr = parse_sql($sql);
|
||||
if (!empty($sql_arr)) {
|
||||
$prefix = config('database.connections.mysql.prefix');
|
||||
Db::startTrans();
|
||||
try {
|
||||
foreach ($sql_arr as $sql_line) {
|
||||
$sql_line = trim($sql_line);
|
||||
if (!empty($sql_line)) {
|
||||
$sql_line = str_ireplace('{{prefix}}', $prefix, $sql_line);
|
||||
$sql_line = str_ireplace('INSERT INTO ', 'INSERT IGNORE INTO ', $sql_line);
|
||||
Db::execute($sql_line);
|
||||
}
|
||||
}
|
||||
Db::commit();
|
||||
return true;
|
||||
} catch ( PDOException $e ) {
|
||||
Db::rollback();
|
||||
throw new AddonException($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行插件install方法
|
||||
* @return true
|
||||
*/
|
||||
public function handleAddonInstall()
|
||||
{
|
||||
$core_addon_service = new CoreAddonService();
|
||||
|
||||
$fail_addon = $this->install_task['fail_addon'] ?? [];
|
||||
|
||||
foreach ($this->addon_list as $addon) {
|
||||
if (in_array($addon, $fail_addon)) continue;
|
||||
|
||||
$this->addon = $addon;
|
||||
$this->install_addon_path = $this->addon_path . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 执行安装sql
|
||||
$this->installSql();
|
||||
// 安装菜单
|
||||
$this->installMenu();
|
||||
// 安装计划任务
|
||||
$this->installSchedule();
|
||||
|
||||
$install_data = $this->getAddonConfig($this->addon);
|
||||
$install_data['icon'] = 'addon/' . $this->addon . '/icon.png';
|
||||
$core_addon_service->set($install_data);
|
||||
|
||||
//执行插件安装方法
|
||||
$class = "addon\\" . $this->addon . "\\" . 'Addon';
|
||||
if (class_exists($class)) {
|
||||
(new $class())->install();
|
||||
}
|
||||
}
|
||||
|
||||
//清理缓存
|
||||
Cache::tag(self::$cache_tag_name)->clear();
|
||||
|
||||
// 清除插件安装中标识
|
||||
Cache::delete('install_task');
|
||||
Cache::delete($this->cache_key . '_install_check');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并依赖
|
||||
* @return void
|
||||
*/
|
||||
public function installDepend()
|
||||
{
|
||||
(new CoreDependService())->installDepend($this->addon);
|
||||
}
|
||||
|
||||
/**
|
||||
* 备份前端页面
|
||||
* @return void
|
||||
*/
|
||||
public function backupFrontend() {
|
||||
$backup_dir = runtime_path() . 'backup' . DIRECTORY_SEPARATOR . 'frontend' . DIRECTORY_SEPARATOR;
|
||||
if (is_dir($backup_dir)) del_target_dir($backup_dir, true);
|
||||
|
||||
foreach (['admin', 'wap', 'web'] as $port) {
|
||||
$to_dir = public_path() . $port;
|
||||
if (is_dir($to_dir)) {
|
||||
if (is_dir($backup_dir . $port)) del_target_dir($backup_dir . $port, true);
|
||||
// 备份原目录
|
||||
dir_copy($to_dir, $backup_dir . $port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 还原被覆盖前的文件
|
||||
* @return void
|
||||
*/
|
||||
public function revertFrontendBackup() {
|
||||
$backup_dir = runtime_path() . 'backup' . DIRECTORY_SEPARATOR . 'frontend' . DIRECTORY_SEPARATOR;
|
||||
$backup_file = [];
|
||||
|
||||
search_dir($backup_dir, $backup_file);
|
||||
|
||||
if (!empty($backup_file)) {
|
||||
dir_copy(public_path(), $backup_dir);
|
||||
@del_target_dir($backup_dir, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件编译文件覆盖
|
||||
* @return void
|
||||
*/
|
||||
public function coverCompile() {
|
||||
$compile = $this->getAddonConfig($this->addon)['compile'];
|
||||
foreach ($compile as $port) {
|
||||
$to_dir = public_path() . $port;
|
||||
$from_dir = $this->addon_path . 'compile' . DIRECTORY_SEPARATOR . $port;
|
||||
|
||||
if (is_dir($from_dir) && is_dir($to_dir)) {
|
||||
// 删除后覆盖目录
|
||||
del_target_dir($to_dir, true);
|
||||
dir_copy($from_dir, $to_dir . $port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 云安装
|
||||
* @return void
|
||||
*/
|
||||
public function cloudInstall() {
|
||||
(new CoreAddonCloudService())->cloudBuild($this->addon);
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件卸载环境检测
|
||||
* @return array|array[]
|
||||
*/
|
||||
public function uninstallCheck() {
|
||||
$data = [
|
||||
// 目录检测
|
||||
'dir' => [
|
||||
// 要求可读权限
|
||||
'is_readable' => [],
|
||||
// 要求可写权限
|
||||
'is_write' => []
|
||||
]
|
||||
];
|
||||
|
||||
// 将要删除的根目录
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
if (is_dir($to_admin_dir)) $data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_admin_dir), 'status' => is_write($to_admin_dir)];
|
||||
if (is_dir($to_web_dir)) $data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_web_dir), 'status' => is_write($to_web_dir)];
|
||||
if (is_dir($to_wap_dir)) $data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_wap_dir), 'status' => is_write($to_wap_dir)];
|
||||
if (is_dir($to_resource_dir)) $data['dir']['is_write'][] = ['dir' => str_replace(project_path(), '', $to_resource_dir), 'status' => is_write($to_resource_dir)];
|
||||
|
||||
$check_res = array_merge(
|
||||
array_column($data['dir']['is_readable'], 'status'),
|
||||
array_column($data['dir']['is_write'], 'status')
|
||||
);
|
||||
|
||||
// 是否通过校验
|
||||
$data['is_pass'] = !in_array(false, $check_res);
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载插件
|
||||
* @return true
|
||||
*/
|
||||
public function uninstall()
|
||||
{
|
||||
$site_groups = (new SiteGroup())->where([ ['app|addon', 'like', "%\"$this->addon\"%"] ])->column("group_id");
|
||||
if (!empty($site_groups)) {
|
||||
$site_num = (new Site())->where([ ['group_id', 'in', $site_groups] ])->count('site_id');
|
||||
if ($site_num) throw new CommonException('APP_NOT_ALLOW_UNINSTALL');
|
||||
}
|
||||
|
||||
(new CoreAddonDevelopBuildService())->build($this->addon);
|
||||
|
||||
//执行插件卸载方法
|
||||
$class = "addon\\" . $this->addon . "\\" . 'Addon';
|
||||
if (class_exists($class)) {
|
||||
(new $class())->uninstall();
|
||||
}
|
||||
$core_addon_service = new CoreAddonService();
|
||||
$addon_info = $core_addon_service->getInfoByKey($this->addon);
|
||||
if (empty($addon_info)) throw new AddonException('NOT_UNINSTALL');
|
||||
if (!$this->uninstallSql()) throw new AddonException('ADDON_SQL_FAIL');
|
||||
|
||||
// 卸载菜单
|
||||
$this->uninstallMenu();
|
||||
|
||||
// 卸载计划任务
|
||||
$this->uninstallSchedule();
|
||||
|
||||
// 卸载wap
|
||||
$this->uninstallWap();
|
||||
|
||||
// 还原备份
|
||||
if (!empty($addon_info['compile'])) (new CoreAddonCompileHandleService())->revertBackup();
|
||||
|
||||
$core_addon_service = new CoreAddonService();
|
||||
$core_addon_service->delByKey($this->addon);
|
||||
|
||||
//清理缓存
|
||||
Cache::tag(self::$cache_tag_name)->clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载数据库
|
||||
* @return true
|
||||
*/
|
||||
public function uninstallSql()
|
||||
{
|
||||
$sql = $this->install_addon_path . 'sql' . DIRECTORY_SEPARATOR . 'uninstall.sql';
|
||||
$this->executeSql($sql);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载插件
|
||||
* @return true
|
||||
*/
|
||||
public function uninstallDir()
|
||||
{
|
||||
// 将要删除的根目录
|
||||
$to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_web_dir = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_web_layouts = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_wap_dir = $this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
$to_resource_dir = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
|
||||
|
||||
// 卸载admin管理端
|
||||
if (is_dir($to_admin_dir)) del_target_dir($to_admin_dir, true);
|
||||
// 移除admin图标
|
||||
$addon_icon_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'styles' . DIRECTORY_SEPARATOR . 'icon' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon;
|
||||
if (is_dir($addon_icon_dir)) del_target_dir($addon_icon_dir, true);
|
||||
|
||||
// 编译后台图标库文件
|
||||
$this->compileAdminIcon();
|
||||
|
||||
// 卸载pc端
|
||||
if (is_dir($to_web_dir)) del_target_dir($to_web_dir, true);
|
||||
if (is_dir($to_web_layouts)) del_target_dir($to_web_layouts, true);
|
||||
|
||||
// 卸载手机端
|
||||
if (is_dir($to_wap_dir)) del_target_dir($to_wap_dir, true);
|
||||
|
||||
//删除资源文件
|
||||
if (is_dir($to_resource_dir)) del_target_dir($to_resource_dir, true);
|
||||
|
||||
//todo 卸载插件目录涉及到的空文件
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载菜单
|
||||
* @return true
|
||||
* @throws DbException
|
||||
*/
|
||||
public function uninstallMenu()
|
||||
{
|
||||
$core_menu_service = new CoreMenuService();
|
||||
$core_menu_service->deleteByAddon($this->addon);
|
||||
Cache::tag(MenuService::$cache_tag_name)->clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载计划任务
|
||||
* @return true
|
||||
*/
|
||||
public function uninstallSchedule()
|
||||
{
|
||||
(new CoreScheduleInstallService())->uninstallAddonSchedule($this->addon);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载手机端
|
||||
* @return void
|
||||
*/
|
||||
public function uninstallWap()
|
||||
{
|
||||
// 编译 diy-group 自定义组件代码文件
|
||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||
|
||||
// 编译 pages.json 页面路由代码文件
|
||||
$this->uninstallPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||
|
||||
// 编译 加载插件标题语言包
|
||||
$this->compileLocale($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装插件菜单
|
||||
* @return true
|
||||
*/
|
||||
public function installMenu()
|
||||
{
|
||||
(new CoreMenuService)->refreshAddonMenu($this->addon);
|
||||
Cache::tag(MenuService::$cache_tag_name)->clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装手机端
|
||||
* @return void
|
||||
*/
|
||||
public function installWap()
|
||||
{
|
||||
|
||||
// 编译 diy-group 自定义组件代码文件
|
||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
// 编译 pages.json 页面路由代码文件
|
||||
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
// 编译 加载插件标题语言包
|
||||
$this->compileLocale($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon_list);
|
||||
|
||||
}
|
||||
|
||||
public function download()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function edit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新composer依赖
|
||||
* @return true
|
||||
*/
|
||||
public function updateComposer()
|
||||
{
|
||||
$result = Terminal::execute(root_path(), 'composer update');
|
||||
if ($result !== true) {
|
||||
throw new CommonException($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新admin端依赖
|
||||
* @return true
|
||||
*/
|
||||
public function updateAdminDependencies()
|
||||
{
|
||||
$result = Terminal::execute(root_path() . '../admin/', 'npm install');
|
||||
if ($result !== true) {
|
||||
throw new CommonException($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新手机端依赖
|
||||
* @return true
|
||||
*/
|
||||
public function updateWapDependencies()
|
||||
{
|
||||
$result = Terminal::execute(root_path() . '../uni-app/', 'npm install');
|
||||
if ($result !== true) {
|
||||
throw new CommonException($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新web端依赖
|
||||
* @return true
|
||||
*/
|
||||
public function updateWebDependencies()
|
||||
{
|
||||
$result = Terminal::execute(root_path() . '../web/', 'npm install');
|
||||
if ($result !== true) {
|
||||
throw new CommonException($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装完成 销毁插件实例
|
||||
* @return true
|
||||
*/
|
||||
public function installComplete()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装计划任务
|
||||
* @return true
|
||||
*/
|
||||
public function installSchedule()
|
||||
{
|
||||
(new CoreScheduleInstallService())->installAddonSchedule($this->addon);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理编译之后的文件
|
||||
* @return true
|
||||
*/
|
||||
public function handleBuildFile() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
401
niucloud/niucloud/app/service/core/addon/WapTrait.php
Normal file
401
niucloud/niucloud/app/service/core/addon/WapTrait.php
Normal file
@ -0,0 +1,401 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网址:https://www.niucloud.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | niucloud团队 版权所有 开源版本可自由商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Niucloud Team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\service\core\addon;
|
||||
|
||||
|
||||
/**
|
||||
* 编译手机端文件
|
||||
*/
|
||||
trait WapTrait
|
||||
{
|
||||
|
||||
// TODO 主题色调 theme
|
||||
|
||||
// TODO 图标库 iconfont
|
||||
|
||||
/**
|
||||
* 编译 diy-group 自定义组件代码文件
|
||||
* @param $compile_path
|
||||
* @param $addon
|
||||
* @return false|int
|
||||
*/
|
||||
public function compileDiyComponentsCode($compile_path, $addon)
|
||||
{
|
||||
$content = "<template>\n";
|
||||
$content .= " <view class=\"diy-group\" id=\"componentList\">\n";
|
||||
$content .= " <top-tabbar :scrollBool=\"diyGroup.componentsScrollBool.TopTabbar\" v-if=\"data.global && Object.keys(data.global).length && data.global.topStatusBar && data.global.topStatusBar.isShow\" ref=\"topTabbarRef\" :data=\"data.global\" />\n";
|
||||
$content .= " <pop-ads v-if=\"data.global && Object.keys(data.global).length && data.global.popWindow && data.global.popWindow.show\" ref=\"popAbsRef\" :data=\"data.global\" />\n";
|
||||
$content .= " <template v-for=\"(component, index) in data.value\" :key=\"component.id\">\n";
|
||||
$content .= " <view v-show=\"component.componentIsShow\"\n";
|
||||
$content .= " @click=\"diyStore.changeCurrentIndex(index, component)\"\n";
|
||||
$content .= " :class=\"diyGroup.getComponentClass(index,component)\" :style=\"component.pageStyle\">\n";
|
||||
$content .= " <view class=\"relative\" :style=\"{ marginTop : component.margin.top < 0 ? (component.margin.top * 2) + 'rpx' : '0', marginBottom : component.margin.bottom < 0 ? (component.margin.bottom * 2) + 'rpx' : '0' }\">\n";
|
||||
$content .= " <!-- 装修模式下,设置负上边距后超出的内容,禁止选中设置 -->\n";
|
||||
$content .= " <view v-if=\"diyGroup.isShowPlaceHolder(index,component)\" class=\"absolute w-full z-1\" :style=\"{ height : (component.margin.top * 2 * -1) + 'rpx' }\" @click.stop=\"diyGroup.placeholderEvent\"></view>\n";
|
||||
|
||||
$root_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'app/components/diy'); // 系统自定义组件根目录
|
||||
$file_arr = getFileMap($root_path);
|
||||
|
||||
if (!empty($file_arr)) {
|
||||
foreach ($file_arr as $ck => $cv) {
|
||||
if (str_contains($cv, 'index.vue')) {
|
||||
|
||||
$path = str_replace($root_path . '/', '', $ck);
|
||||
$path = str_replace('/index.vue', '', $path);
|
||||
if ($path == 'group') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取自定义组件 key 关键词
|
||||
$name_arr = explode('-', $path);
|
||||
foreach ($name_arr as $k => $v) {
|
||||
// 首字母大写
|
||||
$name_arr[ $k ] = strtoupper($v[ 0 ] ?? '') . substr($v, 1);
|
||||
}
|
||||
$name = implode('', $name_arr);
|
||||
$file_name = 'diy-' . $path;
|
||||
|
||||
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
||||
$event_str = '$event';
|
||||
$content .= " <$file_name ref=\"diy{$name}Ref\" :component=\"component\" :global=\"data.global\" :index=\"index\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" @update:componentIsShow=\"component.componentIsShow = {$event_str}\" />\n";
|
||||
$content .= " </template>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 查询已安装的插件
|
||||
$addon_import_content = "";
|
||||
$addon_service = new CoreAddonService();
|
||||
$addon_list = $addon_service->getInstallAddonList();
|
||||
$addon_arr = [];
|
||||
if (!empty($addon_list)) {
|
||||
foreach ($addon_list as $k => $v) {
|
||||
$addon_arr[] = $v[ 'key' ];
|
||||
}
|
||||
}
|
||||
if (!empty($addon)) {
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
foreach ($addon_arr as $k => $v) {
|
||||
$addon_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/' . $v . '/components/diy'); // 插件自定义组件根目录
|
||||
$addon_file_arr = getFileMap($addon_path);
|
||||
if (!empty($addon_file_arr)) {
|
||||
foreach ($addon_file_arr as $ck => $cv) {
|
||||
if (str_contains($cv, 'index.vue')) {
|
||||
|
||||
$path = str_replace($addon_path . '/', '', $ck);
|
||||
$path = str_replace('/index.vue', '', $path);
|
||||
|
||||
// 获取自定义组件 key 关键词
|
||||
$name_arr = explode('-', $path);
|
||||
foreach ($name_arr as $nk => $nv) {
|
||||
// 首字母大写
|
||||
$name_arr[ $nk ] = strtoupper($nv[ 0 ] ?? '') . substr($nv, 1);
|
||||
}
|
||||
$name = implode('', $name_arr);
|
||||
$file_name = 'diy-' . $path;
|
||||
|
||||
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
||||
$event_str = '$event';
|
||||
$content .= " <$file_name ref=\"diy{$name}Ref\" :component=\"component\" :global=\"data.global\" :index=\"index\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" @update:componentIsShow=\"component.componentIsShow = {$event_str}\" />\n";
|
||||
|
||||
$content .= " </template>\n";
|
||||
|
||||
$addon_import_content .= " import diy{$name} from '@/addon/" . $v . "/components/diy/{$path}/index.vue';\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$content .= " </view>\n";
|
||||
$content .= " </view>\n";
|
||||
$content .= " </template>\n";
|
||||
$content .= " <template v-if=\"diyStore.mode == '' && data.global && diyGroup.showCopyright.value && data.global.copyright && data.global.copyright.isShow\">\n";
|
||||
$content .= " <copy-right :textColor=\"data.global.copyright.textColor\" />\n";
|
||||
$content .= " </template>\n\n";
|
||||
$content .= " <template v-if=\"diyStore.mode == '' && data.global && data.global.bottomTabBar && data.global.bottomTabBar.isShow\">\n";
|
||||
$content .= " <view class=\"pt-[20rpx]\"></view>\n";
|
||||
$content .= " <tabbar :addon=\"data.global.bottomTabBar.designNav.key\" />\n";
|
||||
$content .= " </template>\n";
|
||||
$content .= " </view>\n";
|
||||
$content .= "</template>\n";
|
||||
|
||||
$content .= "<script lang=\"ts\" setup>\n";
|
||||
|
||||
if (!empty($addon_import_content)) {
|
||||
$content .= $addon_import_content;
|
||||
}
|
||||
|
||||
$content .= " import topTabbar from '@/components/top-tabbar/top-tabbar.vue'\n";
|
||||
$content .= " import popAds from '@/components/pop-ads/pop-ads.vue'\n";
|
||||
$content .= " import useDiyStore from '@/app/stores/diy';\n";
|
||||
$content .= " import { useDiyGroup } from './useDiyGroup';\n";
|
||||
$content .= " import { ref,getCurrentInstance } from 'vue';\n\n";
|
||||
|
||||
$content .= " const props = defineProps(['data']);\n";
|
||||
$content .= " const instance: any = getCurrentInstance();\n";
|
||||
$content .= " const getFormRef = () => {\n";
|
||||
$content .= " return {\n";
|
||||
$content .= " componentRefs: instance.refs\n";
|
||||
$content .= " }\n";
|
||||
$content .= " }\n";
|
||||
|
||||
$content .= " const diyStore = useDiyStore();\n";
|
||||
$content .= " const diyGroup = useDiyGroup({\n";
|
||||
$content .= " ...props,\n";
|
||||
$content .= " getFormRef\n";
|
||||
$content .= " });\n";
|
||||
|
||||
$content .= " const data = ref(diyGroup.data);\n\n";
|
||||
|
||||
$content .= " // 监听页面加载完成\n";
|
||||
$content .= " diyGroup.onMounted();\n\n";
|
||||
|
||||
$content .= " // 监听滚动事件\n";
|
||||
$content .= " diyGroup.onPageScroll();\n";
|
||||
|
||||
$content .= " defineExpose({\n";
|
||||
$content .= " refresh: diyGroup.refresh,\n";
|
||||
$content .= " getFormRef\n";
|
||||
$content .= " })\n";
|
||||
|
||||
$content .= "</script>\n";
|
||||
|
||||
$content .= "<style lang=\"scss\" scoped>\n";
|
||||
$content .= " @import './index.scss';\n";
|
||||
$content .= "</style>\n";
|
||||
|
||||
return file_put_contents($compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/components/diy/group/index.vue'), $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译 pages.json 页面路由代码文件,// {{PAGE}}
|
||||
* @param $compile_path
|
||||
* @return bool|int|void
|
||||
*/
|
||||
public function installPageCode($compile_path, $addon = '')
|
||||
{
|
||||
if (!file_exists($this->geAddonPackagePath($this->addon) . 'uni-app-pages.php')) return;
|
||||
|
||||
$uniapp_pages = require $this->geAddonPackagePath($this->addon) . 'uni-app-pages.php';
|
||||
|
||||
if (empty($uniapp_pages[ 'pages' ])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pages = [];
|
||||
|
||||
$addon_service = new CoreAddonService();
|
||||
$addon_list = $addon_service->getInstallAddonList();
|
||||
$addon_arr = [];
|
||||
if (!empty($addon_list)) {
|
||||
foreach ($addon_list as $k => $v) {
|
||||
$addon_arr[] = $v[ 'key' ];
|
||||
}
|
||||
}
|
||||
if (!empty($addon)) {
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
foreach ($addon_arr as $addon) {
|
||||
if (!file_exists($this->geAddonPackagePath($addon) . 'uni-app-pages.php')) continue;
|
||||
$uniapp_pages = require $this->geAddonPackagePath($addon) . 'uni-app-pages.php';
|
||||
if (empty($uniapp_pages[ 'pages' ])) continue;
|
||||
|
||||
$page_begin = strtoupper($addon) . '_PAGE_BEGIN';
|
||||
$page_end = strtoupper($addon) . '_PAGE_END';
|
||||
|
||||
// 对0.2.0之前的版本做处理
|
||||
$uniapp_pages[ 'pages' ] = preg_replace_callback('/(.*)(\\r\\n.*\/\/ PAGE_END.*)/s', function ($match) {
|
||||
return $match[ 1 ] . ( substr($match[ 1 ], -1) == ',' ? '' : ',' ) . $match[ 2 ];
|
||||
}, $uniapp_pages[ 'pages' ]);
|
||||
|
||||
$uniapp_pages[ 'pages' ] = str_replace('PAGE_BEGIN', $page_begin, $uniapp_pages[ 'pages' ]);
|
||||
$uniapp_pages[ 'pages' ] = str_replace('PAGE_END', $page_end, $uniapp_pages[ 'pages' ]);
|
||||
$uniapp_pages[ 'pages' ] = str_replace('{{addon_name}}', $addon, $uniapp_pages[ 'pages' ]);
|
||||
|
||||
$pages[] = $uniapp_pages[ 'pages' ];
|
||||
}
|
||||
|
||||
$content = @file_get_contents($compile_path . "pages.json");
|
||||
$content = preg_replace_callback('/(.*\/\/ \{\{ PAGE_BEGAIN \}\})(.*)(\/\/ \{\{ PAGE_END \}\}.*)/s', function ($match) use ($pages) {
|
||||
return $match[ 1 ] . PHP_EOL . implode(PHP_EOL, $pages) . PHP_EOL . $match[ 3 ];
|
||||
}, $content);
|
||||
|
||||
// 找到页面路由文件 pages.json,写入内容
|
||||
return file_put_contents($compile_path . "pages.json", $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译 pages.json 页面路由代码文件
|
||||
* @param $compile_path
|
||||
* @return bool|int|void
|
||||
*/
|
||||
public function uninstallPageCode($compile_path)
|
||||
{
|
||||
if (!file_exists($this->geAddonPackagePath($this->addon) . 'uni-app-pages.php')) return;
|
||||
|
||||
$uniapp_pages = require $this->geAddonPackagePath($this->addon) . 'uni-app-pages.php';
|
||||
|
||||
if (empty($uniapp_pages[ 'pages' ])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pages = [];
|
||||
$addon_arr = array_diff(array_column(( new CoreAddonService() )->getInstallAddonList(), 'key'), [ $this->addon ]);
|
||||
|
||||
foreach ($addon_arr as $addon) {
|
||||
if (!file_exists($this->geAddonPackagePath($addon) . 'uni-app-pages.php')) continue;
|
||||
$uniapp_pages = require $this->geAddonPackagePath($addon) . 'uni-app-pages.php';
|
||||
if (empty($uniapp_pages[ 'pages' ])) continue;
|
||||
|
||||
$page_begin = strtoupper($addon) . '_PAGE_BEGIN';
|
||||
$page_end = strtoupper($addon) . '_PAGE_END';
|
||||
|
||||
$uniapp_pages[ 'pages' ] = str_replace('PAGE_BEGIN', $page_begin, $uniapp_pages[ 'pages' ]);
|
||||
$uniapp_pages[ 'pages' ] = str_replace('PAGE_END', $page_end, $uniapp_pages[ 'pages' ]);
|
||||
$uniapp_pages[ 'pages' ] = str_replace('{{addon_name}}', $addon, $uniapp_pages[ 'pages' ]);
|
||||
|
||||
$pages[] = $uniapp_pages[ 'pages' ];
|
||||
}
|
||||
|
||||
$content = @file_get_contents($compile_path . "pages.json");
|
||||
$content = preg_replace_callback('/(.*\/\/ \{\{ PAGE_BEGAIN \}\})(.*)(\/\/ \{\{ PAGE_END \}\}.*)/s', function ($match) use ($pages) {
|
||||
return $match[ 1 ] . PHP_EOL . implode(PHP_EOL, $pages) . PHP_EOL . $match[ 3 ];
|
||||
}, $content);
|
||||
// 找到页面路由文件 pages.json,写入内容
|
||||
return file_put_contents($compile_path . "pages.json", $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译 加载插件标题语言包
|
||||
* @param $compile_path
|
||||
* @param $addon
|
||||
*/
|
||||
public function compileLocale($compile_path, $addon)
|
||||
{
|
||||
$locale_data = [];
|
||||
|
||||
$root_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'locale'); // 系统语言包根目录
|
||||
$file_arr = getFileMap($root_path, []);
|
||||
if (!empty($file_arr)) {
|
||||
foreach ($file_arr as $ck => $cv) {
|
||||
if (str_contains($cv, '.json')) {
|
||||
$app_json = @file_get_contents($ck);
|
||||
$json = json_decode($app_json, true);
|
||||
// 清空当前安装/卸载的插件语言包
|
||||
foreach ($json as $jk => $jc) {
|
||||
if (is_array($addon)) {
|
||||
foreach ($addon as $key) {
|
||||
if (strpos($jk, $key) !== false) {
|
||||
unset($json[ $jk ]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (strpos($jk, $addon) !== false) {
|
||||
unset($json[ $jk ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$locale_data[ $cv ] = [
|
||||
'path' => $ck,
|
||||
'json' => $json
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 查询已安装的插件
|
||||
$addon_service = new CoreAddonService();
|
||||
$addon_list = $addon_service->getInstallAddonList();
|
||||
$addon_arr = [];
|
||||
if (!empty($addon_list)) {
|
||||
foreach ($addon_list as $k => $v) {
|
||||
$addon_arr[] = $v[ 'key' ];
|
||||
}
|
||||
}
|
||||
if (!empty($addon)) {
|
||||
// 追加新装插件
|
||||
if (is_array($addon)) {
|
||||
$addon_arr = array_merge($addon_arr, $addon);
|
||||
} else if (is_string($addon)) {
|
||||
$addon_arr[] = $addon;
|
||||
}
|
||||
}
|
||||
$addon_arr = array_unique($addon_arr);
|
||||
|
||||
foreach ($addon_arr as $k => $v) {
|
||||
$addon_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/' . $v . '/locale'); // 插件语言包根目录
|
||||
$addon_file_arr = getFileMap($addon_path, []);
|
||||
if (!empty($addon_file_arr)) {
|
||||
foreach ($addon_file_arr as $ck => $cv) {
|
||||
if (str_contains($cv, '.json')) {
|
||||
$json = @file_get_contents($ck);
|
||||
$json = json_decode($json, true);
|
||||
$addon_json = [];
|
||||
foreach ($json as $jk => $jv) {
|
||||
$addon_json[ $v . '.' . $jk ] = $jv;
|
||||
}
|
||||
if (isset($locale_data[ $cv ])) $locale_data[ $cv ][ 'json' ] = array_merge($locale_data[ $cv ][ 'json' ], $addon_json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($locale_data as $k => $v) {
|
||||
file_put_contents($v[ 'path' ], json_encode($v[ 'json' ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并manifest.json
|
||||
* @param string $compile_path
|
||||
* @param array $merge_data
|
||||
* @return void
|
||||
*/
|
||||
public function mergeManifestJson(string $compile_path, array $merge_data)
|
||||
{
|
||||
$manifest_json = str_replace('/', DIRECTORY_SEPARATOR, $compile_path . 'src/manifest.json');
|
||||
$manifest_content = $this->jsonStringToArray(file_get_contents($manifest_json));
|
||||
( new CoreAddonBaseService() )->writeArrayToJsonFile(array_merge2($manifest_content, $merge_data), $manifest_json);
|
||||
}
|
||||
|
||||
/**
|
||||
* json 字符串解析成数组
|
||||
* @param $string
|
||||
* @return array
|
||||
*/
|
||||
private function jsonStringToArray($string)
|
||||
{
|
||||
$list = explode("\n", $string);
|
||||
$json_array = [];
|
||||
foreach ($list as $index => $item) {
|
||||
if (strpos($item, '/*') === false) {
|
||||
$json_array[] = $item;
|
||||
}
|
||||
}
|
||||
return json_decode(implode(PHP_EOL, $json_array), true);
|
||||
}
|
||||
}
|
||||
1
niucloud/public/admin/assets/404-c51c0f49.js
Normal file
1
niucloud/public/admin/assets/404-c51c0f49.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as l,r as d,o as i,c as p,a as t,b as u,e as m,w as x,u as v,f,E as h,p as b,g,h as I,i as w,t as S}from"./index-6fd8f478.js";/* empty css */import{_ as B}from"./_plugin-vue_export-helper-c27b6911.js";const k=""+new URL("error-ab7e4004.png",import.meta.url).href,o=e=>(b("data-v-4f4088b5"),e=e(),g(),e),y={class:"error"},C={class:"flex items-center"},E=o(()=>t("div",null,[t("img",{class:"w-[240px]",src:k})],-1)),N={class:"text-left ml-[100px]"},R=o(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误!",-1)),U=o(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),V=o(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误,然后点击浏览器刷新按钮。",-1)),L={class:"mt-[40px]"},$=l({__name:"404",setup(e){let s=null;const a=d(5),n=f();return s=setInterval(()=>{a.value===0?(clearInterval(s),n.go(-1)):a.value--},1e3),i(()=>{s&&clearInterval(s)}),(r,c)=>{const _=h;return I(),p("div",y,[t("div",C,[u(r.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[m(_,{class:"bottom",onClick:c[0]||(c[0]=D=>v(n).go(-1))},{default:x(()=>[w(S(a.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const z=B($,[["__scopeId","data-v-4f4088b5"]]);export{z as default};
|
||||
1
niucloud/public/admin/assets/App-abda38f7.js
Normal file
1
niucloud/public/admin/assets/App-abda38f7.js
Normal file
@ -0,0 +1 @@
|
||||
import{dC as f}from"./index-6fd8f478.js";export{f as default};
|
||||
1
niucloud/public/admin/assets/Verify-1c2fe4fc.js
Normal file
1
niucloud/public/admin/assets/Verify-1c2fe4fc.js
Normal file
@ -0,0 +1 @@
|
||||
import z from"./VerifySlide-3eaafa00.js";import g from"./VerifyPoints-fd48ca90.js";import{Q as k,r as o,l as w,ba as T,Z as V,_ as B,h as p,c as u,a as c,i as N,C as y,x as d,s as C,bb as j,v}from"./index-6fd8f478.js";import{_ as O}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-f1634d30.js";const P={name:"Vue2Verify",components:{VerifySlide:z,VerifyPoints:g},props:{captchaType:{type:String,required:!0},figure:{type:Number},arith:{type:Number},mode:{type:String,default:"pop"},vSpace:{type:Number},explain:{type:String},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},blockSize:{type:Object},barSize:{type:Object}},setup(m){const{captchaType:i,figure:e,arith:t,mode:n,vSpace:h,explain:f,imgSize:Q,blockSize:R,barSize:W}=k(m),a=o(!1),r=o(void 0),s=o(void 0),l=o({}),S=w(()=>n.value=="pop"?a.value:!0),b=()=>{l.value.refresh&&l.value.refresh()},x=()=>{a.value=!1,b()},_=()=>{n.value=="pop"&&(a.value=!0)};return T(()=>{switch(i.value){case"blockPuzzle":r.value="2",s.value="VerifySlide";break;case"clickWord":r.value="",s.value="VerifyPoints";break}}),{clickShow:a,verifyType:r,componentType:s,instance:l,showBox:S,closeBox:x,show:_}}},D={key:0,class:"verifybox-top"},E=c("i",{class:"iconfont icon-close"},null,-1),q=[E];function I(m,i,e,t,n,h){return V((p(),u("div",{class:v(e.mode=="pop"?"mask":"")},[c("div",{class:v(e.mode=="pop"?"verifybox":""),style:d({"max-width":parseInt(e.imgSize.width)+30+"px"})},[e.mode=="pop"?(p(),u("div",D,[N(" 请完成安全验证 "),c("span",{class:"verifybox-close",onClick:i[0]||(i[0]=(...f)=>t.closeBox&&t.closeBox(...f))},q)])):y("",!0),c("div",{class:"verifybox-bottom",style:d({padding:e.mode=="pop"?"15px":"0"})},[t.componentType?(p(),C(j(t.componentType),{key:0,captchaType:e.captchaType,type:t.verifyType,figure:e.figure,arith:e.arith,mode:e.mode,vSpace:e.vSpace,explain:e.explain,imgSize:e.imgSize,blockSize:e.blockSize,barSize:e.barSize,ref:"instance"},null,8,["captchaType","type","figure","arith","mode","vSpace","explain","imgSize","blockSize","barSize"])):y("",!0)],4)],6)],2)),[[B,t.showBox]])}const J=O(P,[["render",I]]);export{J as default};
|
||||
1
niucloud/public/admin/assets/VerifyPoints-fd48ca90.js
Normal file
1
niucloud/public/admin/assets/VerifyPoints-fd48ca90.js
Normal file
@ -0,0 +1 @@
|
||||
import{r as F,a as V,b as K,c as Z}from"./index-f1634d30.js";import{Q as G,bc as Q,r as s,n as m,aZ as X,h as H,c as I,a as l,x as A,Z as Y,_ as U,F as $,W as ee,t as L,ax as te}from"./index-6fd8f478.js";import{_ as ae}from"./_plugin-vue_export-helper-c27b6911.js";const ie={name:"VerifyPoints",props:{mode:{type:String,default:"fixed"},captchaType:{type:String},vSpace:{type:Number,default:5},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},barSize:{type:Object,default(){return{width:"310px",height:"40px"}}}},setup(N,f){const{mode:_,captchaType:e,vSpace:R,imgSize:q,barSize:c}=G(N),{proxy:n}=Q(),h=s(""),z=s(3),p=m([]),a=m([]),o=s(1),O=s(""),w=m([]),v=s(""),u=m({imgHeight:0,imgWidth:0,barHeight:0,barWidth:0}),y=m([]),d=s(""),b=s(void 0),x=s(void 0),j=s(!0),C=s(!0),J=()=>{p.splice(0,p.length),a.splice(0,a.length),o.value=1,B(),te(()=>{const{imgHeight:i,imgWidth:t,barHeight:g,barWidth:r}=F(n);u.imgHeight=i,u.imgWidth=t,u.barHeight=g,u.barWidth=r,n.$parent.$emit("ready",n)})};X(()=>{J(),n.$el.onselectstart=function(){return!1}});const S=s(null),D=i=>{if(a.push(k(S,i)),o.value==z.value){o.value=T(k(S,i));const t=M(a,u);a.length=0,a.push(...t),setTimeout(()=>{const g=h.value?V(v.value+"---"+JSON.stringify(a),h.value):v.value+"---"+JSON.stringify(a),r={captchaType:e.value,captcha_code:h.value?V(JSON.stringify(a),h.value):JSON.stringify(a),captcha_key:v.value};K(r).then(P=>{P.code==1?(b.value="#4cae4c",x.value="#5cb85c",d.value="验证成功",C.value=!1,_.value=="pop"&&setTimeout(()=>{n.$parent.clickShow=!1,W()},1500),n.$parent.$emit("success",{captchaVerification:g})):(n.$parent.$emit("error",n),b.value="#d9534f",x.value="#d9534f",d.value="验证失败",setTimeout(()=>{W()},700))})},400)}o.value<z.value&&(o.value=T(k(S,i)))},k=function(i,t){const g=t.offsetX,r=t.offsetY;return{x:g,y:r}},T=function(i){return y.push(Object.assign({},i)),o.value+1},W=function(){y.splice(0,y.length),b.value="#000",x.value="#ddd",C.value=!0,p.splice(0,p.length),a.splice(0,a.length),o.value=1,B(),d.value="验证失败",j.value=!0};function B(){const i={captchaType:e.value};Z(i).then(t=>{t.code==1?(O.value=t.data.originalImageBase64,v.value=t.data.token,h.value=t.data.secretKey,w.value=t.data.wordList,d.value="请依次点击【"+w.value.join(",")+"】"):d.value=t.msg})}const M=function(i,t){return i.map(r=>{const P=Math.round(310*r.x/parseInt(t.imgWidth)),E=Math.round(155*r.y/parseInt(t.imgHeight));return{x:P,y:E}})};return{secretKey:h,checkNum:z,fontPos:p,checkPosArr:a,num:o,pointBackImgBase:O,pointTextList:w,backToken:v,setSize:u,tempPoints:y,text:d,barAreaColor:b,barAreaBorderColor:x,showRefresh:j,bindingClick:C,init:J,canvas:S,canvasClick:D,getMousePos:k,createPoint:T,refresh:W,getPictrue:B,pointTransfrom:M}}},ne={style:{position:"relative"}},se={class:"verify-img-out"},oe=l("i",{class:"iconfont icon-refresh"},null,-1),re=[oe],ce=["src"],le={class:"verify-msg"};function he(N,f,_,e,R,q){return H(),I("div",ne,[l("div",se,[l("div",{class:"verify-img-panel",style:A({width:e.setSize.imgWidth,height:e.setSize.imgHeight,"background-size":e.setSize.imgWidth+" "+e.setSize.imgHeight,"margin-bottom":_.vSpace+"px"})},[Y(l("div",{class:"verify-refresh",style:{"z-index":"3"},onClick:f[0]||(f[0]=(...c)=>e.refresh&&e.refresh(...c))},re,512),[[U,e.showRefresh]]),l("img",{src:"data:image/png;base64,"+e.pointBackImgBase,ref:"canvas",alt:"",style:{width:"100%",height:"100%",display:"block"},onClick:f[1]||(f[1]=c=>e.bindingClick?e.canvasClick(c):void 0)},null,8,ce),(H(!0),I($,null,ee(e.tempPoints,(c,n)=>(H(),I("div",{key:n,class:"point-area",style:A({"background-color":"#1abd6c",color:"#fff","z-index":9999,width:"20px",height:"20px","text-align":"center","line-height":"20px","border-radius":"50%",position:"absolute",top:parseInt(c.y-10)+"px",left:parseInt(c.x-10)+"px"})},L(n+1),5))),128))],4)]),l("div",{class:"verify-bar-area",style:A({width:e.setSize.imgWidth,color:this.barAreaColor,"border-color":this.barAreaBorderColor,"line-height":this.barSize.height})},[l("span",le,L(e.text),1)],4)])}const fe=ae(ie,[["render",he]]);export{fe as default};
|
||||
1
niucloud/public/admin/assets/VerifySlide-3eaafa00.js
Normal file
1
niucloud/public/admin/assets/VerifySlide-3eaafa00.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/access-2e5b6d7a.js
Normal file
1
niucloud/public/admin/assets/access-2e5b6d7a.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as V,y as B,f as N,r as x,aZ as S,h as T,c as j,e as o,w as s,a as t,t as n,u as e,q as a,i as h,B as q,aH as I,aI as R,E as $,a_ as D,a$ as F,b0 as H,K,b1 as M,a9 as P}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as Q}from"./aliapp-6b51f887.js";const U={class:"main-container"},Z={class:"flex justify-between items-center"},z={class:"text-page-title"},G={class:"p-[20px]"},J={class:"panel-title !text-sm"},L={class:"text-[14px] font-[700]"},O={class:"text-[#999]"},W={class:"mt-[20px] mb-[40px] h-[32px]"},X={class:"text-[14px] font-[700]"},Y={class:"text-[#999]"},tt={class:"mt-[20px] mb-[40px] h-[32px]"},et={class:"text-[14px] font-[700]"},st={class:"text-[#999]"},at=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),ot={class:"text-[14px] font-[700]"},nt={class:"text-[#999]"},lt={class:"flex justify-center"},ct={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pt={class:"mt-[22px] text-center"},it={class:"text-[12px]"},bt=V({__name:"access",setup(_t){const f=B(),d=N(),v=f.meta.title,_=x("/channel/aliapp"),p=x("");S(async()=>{const c=await Q();p.value=c.data.qr_code});const w=c=>{window.open(c,"_blank")},b=c=>{d.push({path:_.value})};return(c,l)=>{const g=I,y=R,m=$,i=D,C=F,u=H,E=K,k=M,A=P;return T(),j("div",U,[o(A,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",Z,[t("span",z,n(e(v)),1)]),o(y,{modelValue:_.value,"onUpdate:modelValue":l[0]||(l[0]=r=>_.value=r),class:"my-[20px]",onTabChange:b},{default:s(()=>[o(g,{label:e(a)("weappAccessFlow"),name:"/channel/aliapp"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",G,[t("h3",J,n(e(a)("weappInlet")),1),o(k,null,{default:s(()=>[o(u,{span:20},{default:s(()=>[o(C,{active:4,direction:"vertical"},{default:s(()=>[o(i,null,{title:s(()=>[t("p",L,n(e(a)("weappAttestation")),1)]),description:s(()=>[t("span",O,n(e(a)("weappAttest")),1),t("div",W,[o(m,{type:"primary",onClick:l[1]||(l[1]=r=>w("https://open.alipay.com/develop/manage"))},{default:s(()=>[h(n(e(a)("clickAccess")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",X,n(e(a)("weappSetting")),1)]),description:s(()=>[t("span",Y,n(e(a)("emplace")),1),t("div",tt,[o(m,{type:"primary",plain:"",onClick:l[2]||(l[2]=r=>e(d).push("/channel/aliapp/config"))},{default:s(()=>[h(n(e(a)("weappSettingBtn")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",et,n(e(a)("uploadVersion")),1)]),description:s(()=>[t("span",st,n(e(a)("releaseCourse")),1),at]),_:1}),o(i,null,{title:s(()=>[t("p",ot,n(e(a)("completeAccess")),1)]),description:s(()=>[t("span",nt,n(e(a)("releaseCourse")),1)]),_:1})]),_:1})]),_:1}),o(u,{span:4},{default:s(()=>[t("div",lt,[o(E,{class:"w-[180px] h-[180px]",src:p.value?e(q)(p.value):""},{error:s(()=>[t("div",ct,[t("span",null,n(p.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pt,[t("p",it,n(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{bt as default};
|
||||
1
niucloud/public/admin/assets/access-4fe0ff1c.js
Normal file
1
niucloud/public/admin/assets/access-4fe0ff1c.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/access-66c09970.js
Normal file
1
niucloud/public/admin/assets/access-66c09970.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as B,y as T,f as $,r as c,aZ as q,b5 as I,o as M,h as R,c as W,e,w as t,a,t as o,u as n,q as s,i as u,aH as A,aI as L,E as U,a_ as j,a$ as D,b0 as F,b1 as G,a9 as H}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as P}from"./wechat-1fe17a88.js";const Z={class:"main-container"},z={class:"flex justify-between items-center"},J={class:"text-page-title"},K={class:"p-[20px]"},O={class:"panel-title !text-sm"},Q={class:"text-[14px] font-[700]"},X={class:"text-[#999]"},Y={class:"mt-[20px] mb-[40px] h-[32px]"},tt={class:"text-[14px] font-[700]"},et={class:"mt-[20px] mb-[40px] h-[32px]"},nt={class:"text-[14px] font-[700]"},at={class:"mt-[20px] mb-[40px] h-[32px]"},dt=B({__name:"access",setup(st){const f=T(),_=$(),x=f.meta.title,r=c("/channel/app"),b=c(""),g=c({}),y=c({}),h=async()=>{await P().then(({data:l})=>{g.value=l,b.value=l.qr_code})};q(async()=>{await h(),await I().then(({data:l})=>{y.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&h()})}),M(()=>{document.removeEventListener("visibilitychange",()=>{})});const w=l=>{window.open(l,"_blank")},C=l=>{_.push({path:r.value})};return(l,i)=>{const v=A,E=L,d=U,m=j,k=D,V=F,S=G,N=H;return R(),W("div",Z,[e(N,{class:"card !border-none",shadow:"never"},{default:t(()=>[a("div",z,[a("span",J,o(n(x)),1)]),e(E,{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=p=>r.value=p),class:"my-[20px]",onTabChange:C},{default:t(()=>[e(v,{label:n(s)("accessFlow"),name:"/channel/app"},null,8,["label"]),e(v,{label:n(s)("versionManage"),name:"/channel/app/version"},null,8,["label"])]),_:1},8,["modelValue"]),a("div",K,[a("h3",O,o(n(s)("appInlet")),1),e(S,null,{default:t(()=>[e(V,{span:20},{default:t(()=>[e(k,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:t(()=>[e(m,null,{title:t(()=>[a("p",Q,o(n(s)("uniappApp")),1)]),description:t(()=>[a("span",X,o(n(s)("appAttestation1")),1),a("div",Y,[e(d,{type:"primary",onClick:i[1]||(i[1]=p=>w("https://dcloud.io/"))},{default:t(()=>[u(o(n(s)("toCreate")),1)]),_:1})])]),_:1}),e(m,null,{title:t(()=>[a("p",tt,o(n(s)("appSetting")),1)]),description:t(()=>[a("div",et,[e(d,{type:"primary",onClick:i[2]||(i[2]=p=>n(_).push("/channel/app/config"))},{default:t(()=>[u(o(n(s)("settingInfo")),1)]),_:1})])]),_:1}),e(m,null,{title:t(()=>[a("p",nt,o(n(s)("versionManage")),1)]),description:t(()=>[a("div",at,[e(d,{type:"primary",plain:"",onClick:i[3]||(i[3]=p=>n(_).push("/channel/app/version"))},{default:t(()=>[u(o(n(s)("releaseVersion")),1)]),_:1})])]),_:1})]),_:1})]),_:1})]),_:1})])]),_:1})])}}});export{dt as default};
|
||||
1
niucloud/public/admin/assets/access-eb502651.js
Normal file
1
niucloud/public/admin/assets/access-eb502651.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as W,y as $,f as j,r as u,aZ as F,b5 as I,o as R,h as w,c as y,e as a,w as s,a as n,t as o,u as e,q as t,i as r,F as U,s as z,B as L,aH as M,aI as D,E as G,a_ as H,a$ as K,b0 as P,K as Q,b1 as Z,a9 as J}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as O}from"./wechat-1fe17a88.js";import{a as X}from"./wxoplatform-32bd4d63.js";const Y={class:"main-container"},ee={class:"flex justify-between items-center"},te={class:"text-page-title"},ae={class:"p-[20px]"},se={class:"panel-title !text-sm"},ne={class:"text-[14px] font-[700]"},oe={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},ce={class:"text-[14px] font-[700]"},ie={class:"text-[#999]"},pe={class:"mt-[20px] mb-[40px] h-[32px]"},re={class:"text-[14px] font-[700]"},_e={class:"text-[#999]"},de={class:"mt-[20px] mb-[40px] h-[32px]"},me={class:"flex justify-center"},ue={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},he={class:"mt-[22px] text-center"},fe={class:"text-[12px]"},Be=W({__name:"access",setup(ve){const C=$(),_=j(),k=C.meta.title,h=u("/channel/wechat"),d=u(""),f=u({}),v=u({}),b=async()=>{await O().then(({data:l})=>{f.value=l,d.value=l.qr_code})};F(async()=>{await b(),await I().then(({data:l})=>{v.value=l}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&b()})}),R(()=>{document.removeEventListener("visibilitychange",()=>{})});const E=l=>{window.open(l,"_blank")},A=l=>{_.push({path:h.value})},S=()=>{X().then(({data:l})=>{window.open(l)})};return(l,c)=>{const m=M,B=D,i=G,x=H,V=K,g=P,q=Q,N=Z,T=J;return w(),y("div",Y,[a(T,{class:"card !border-none",shadow:"never"},{default:s(()=>[n("div",ee,[n("span",te,o(e(k)),1)]),a(B,{modelValue:h.value,"onUpdate:modelValue":c[0]||(c[0]=p=>h.value=p),class:"my-[20px]",onTabChange:A},{default:s(()=>[a(m,{label:e(t)("wechatAccessFlow"),name:"/channel/wechat"},null,8,["label"]),a(m,{label:e(t)("customMenu"),name:"/channel/wechat/menu"},null,8,["label"]),a(m,{label:e(t)("wechatTemplate"),name:"/channel/wechat/message"},null,8,["label"]),a(m,{label:e(t)("reply"),name:"/channel/wechat/reply"},null,8,["label"])]),_:1},8,["modelValue"]),n("div",ae,[n("h3",se,o(e(t)("wechatInlet")),1),a(N,null,{default:s(()=>[a(g,{span:20},{default:s(()=>[a(V,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:s(()=>[a(x,null,{title:s(()=>[n("p",ne,o(e(t)("wechatAttestation")),1)]),description:s(()=>[n("span",oe,o(e(t)("wechatAttestation1")),1),n("div",le,[a(i,{type:"primary",onClick:c[1]||(c[1]=p=>E("https://mp.weixin.qq.com/"))},{default:s(()=>[r(o(e(t)("clickAccess")),1)]),_:1})])]),_:1}),a(x,null,{title:s(()=>[n("p",ce,o(e(t)("wechatSetting")),1)]),description:s(()=>[n("span",ie,o(e(t)("wechatSetting1")),1),n("div",pe,[v.value.app_id&&v.value.app_secret?(w(),y(U,{key:0},[a(i,{type:"primary",onClick:c[2]||(c[2]=p=>e(_).push("/channel/wechat/config"))},{default:s(()=>[r(o(f.value.app_id?e(t)("seeConfig"):e(t)("clickSetting")),1)]),_:1}),a(i,{type:"primary",plain:"",onClick:S},{default:s(()=>[r(o(f.value.is_authorization?e(t)("refreshAuth"):e(t)("authWechat")),1)]),_:1})],64)):(w(),z(i,{key:1,type:"primary",onClick:c[3]||(c[3]=p=>e(_).push("/channel/wechat/config"))},{default:s(()=>[r(o(e(t)("clickSetting")),1)]),_:1}))])]),_:1}),a(x,null,{title:s(()=>[n("p",re,o(e(t)("wechatAccess")),1)]),description:s(()=>[n("span",_e,o(e(t)("wechatAccess")),1),n("div",de,[a(i,{type:"primary",plain:"",onClick:c[4]||(c[4]=p=>e(_).push("/channel/wechat/course"))},{default:s(()=>[r(o(e(t)("releaseCourse")),1)]),_:1})])]),_:1})]),_:1})]),_:1}),a(g,{span:4},{default:s(()=>[n("div",me,[a(q,{class:"w-[180px] h-[180px]",src:d.value?e(L)(d.value):""},{error:s(()=>[n("div",ue,[n("span",null,o(d.value?e(t)("fileErr"):e(t)("emptyQrCode")),1)])]),_:1},8,["src"])]),n("div",he,[n("p",fe,o(e(t)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Be as default};
|
||||
1
niucloud/public/admin/assets/account-7d793e2e.js
Normal file
1
niucloud/public/admin/assets/account-7d793e2e.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/add-member-ba484d8e.js
Normal file
1
niucloud/public/admin/assets/add-member-ba484d8e.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-03eaad7d.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./member-08ee6cb9.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{d as I,r as m,n as L,l as R,q as o,h as N,s as M,w as d,a as j,e as s,i as k,t as C,u as t,Z as z,bY as A,L as O,M as T,N as Z,E as K,V as S,a3 as Y}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{p as G,z as J,A as Q}from"./member-08ee6cb9.js";const W={class:"dialog-footer"},me=I({__name:"add-member",emits:["complete"],setup(X,{expose:$,emit:x}){const p=m(!1),i=m(!1),b=m(!1);let f="",c="";const w=m(!0),v=m(!0),g=m(!0),_={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},r=L({..._}),y=m(),P=R(()=>({member_no:[{required:!0,message:o("memberNoPlaceholder"),trigger:"blur"},{validator:B,trigger:"blur"}],mobile:[{required:!0,message:o("mobilePlaceholder"),trigger:"blur"},{validator:D,trigger:"blur"}],password:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"},{validator:E,trigger:"blur"}]})),D=(n,e,a)=>{e&&!/^1[3-9]\d{9}$/.test(e)?a(new Error(o("mobileHint"))):a()},E=(n,e,a)=>{e!=r.password?a(o("doubleCipherHint")):a()},B=(n,e,a)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?a(new Error(o("memberNoHint"))):a()},U=async()=>{await J().then(n=>{c=n.data}).catch(()=>{})},q=async n=>{if(i.value||!n)return;const e=Q;await n.validate(async a=>{if(a){if(i.value=!0,b.value)return;b.value=!0,e(r).then(V=>{i.value=!1,b.value=!1,p.value=!1,x("complete")}).catch(()=>{i.value=!1,b.value=!1})}})};return $({showDialog:p,setFormData:async(n=null)=>{if(i.value=!0,Object.assign(r,_),f=o("addMember"),n){f=o("updateMember");const e=await(await G(n.member_id)).data;e&&Object.keys(r).forEach(a=>{e[a]!=null&&(r[a]=e[a])})}else await U(),r.member_no=c,r.init_member_no=c;i.value=!1}}),(n,e)=>{const a=O,u=T,V=Z,h=K,F=S,H=Y;return N(),M(F,{modelValue:p.value,"onUpdate:modelValue":e[14]||(e[14]=l=>p.value=l),title:t(f),width:"500px","destroy-on-close":!0},{footer:d(()=>[j("span",W,[s(h,{onClick:e[12]||(e[12]=l=>p.value=!1)},{default:d(()=>[k(C(t(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:i.value,onClick:e[13]||(e[13]=l=>q(y.value))},{default:d(()=>[k(C(t(o)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[z((N(),M(V,{model:r,"label-width":"90px",ref_key:"formRef",ref:y,rules:t(P),class:"page-form"},{default:d(()=>[s(u,{label:t(o)("memberNo"),prop:"member_no"},{default:d(()=>[s(a,{modelValue:r.member_no,"onUpdate:modelValue":e[0]||(e[0]=l=>r.member_no=l),modelModifiers:{trim:!0},clearable:"",maxlength:"20",placeholder:t(o)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("mobile"),prop:"mobile"},{default:d(()=>[s(a,{modelValue:r.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>r.mobile=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("mobilePlaceholder"),maxlength:"11",onKeyup:e[2]||(e[2]=l=>t(A)(l)),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("nickname")},{default:d(()=>[s(a,{modelValue:r.nickname,"onUpdate:modelValue":e[3]||(e[3]=l=>r.nickname=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("nickNamePlaceholder"),class:"input-width",maxlength:"10","show-word-limit":"",readonly:w.value,onClick:e[4]||(e[4]=l=>w.value=!1),onBlur:e[5]||(e[5]=l=>w.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("password"),prop:"password"},{default:d(()=>[s(a,{modelValue:r.password,"onUpdate:modelValue":e[6]||(e[6]=l=>r.password=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:v.value,onClick:e[7]||(e[7]=l=>v.value=!1),onBlur:e[8]||(e[8]=l=>v.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(a,{modelValue:r.password_copy,"onUpdate:modelValue":e[9]||(e[9]=l=>r.password_copy=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:g.value,onClick:e[10]||(e[10]=l=>g.value=!1),onBlur:e[11]||(e[11]=l=>g.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[H,i.value]])]),_:1},8,["modelValue","title"])}}});export{me as _};
|
||||
1
niucloud/public/admin/assets/add-table-355500df.js
Normal file
1
niucloud/public/admin/assets/add-table-355500df.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-1159c8a5.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./tools-1d3824c5.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{d as L,f as N,r as c,n as k,l as E,h as p,s as _,w as o,a as b,Z as x,u as t,t as f,q as n,e as d,i as B,aj as z,L as q,E as F,ak as P,V as U,a3 as j}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{k as G,l as I}from"./tools-1d3824c5.js";const le=L({__name:"add-table",setup(M,{expose:h}){const g=N(),m=c(!1),s=c(""),e=k({loading:!0,data:[],searchParam:{table_name:"",table_content:""}}),v=E(()=>e.data.filter(a=>!s.value||a.Name.toLowerCase().includes(s.value.toLowerCase())||a.Comment.toLowerCase().includes(s.value.toLowerCase()))),u=()=>{e.loading=!0,G().then(a=>{e.loading=!1,e.data=a.data}).catch(()=>{e.loading=!1})};u();const w=a=>{const l=a.Name;e.loading=!0,I({table_name:l}).then(i=>{e.loading=!1,m.value=!1,g.push({path:"/tools/code/edit",query:{id:i.data.id}})}).catch(()=>{e.loading=!1})};return h({showDialog:m,setFormData:async(a=null)=>{u()}}),(a,l)=>{const i=z,C=q,V=F,D=P,y=U,T=j;return p(),_(y,{modelValue:m.value,"onUpdate:modelValue":l[1]||(l[1]=r=>m.value=r),title:t(n)("addCode"),width:"800px","destroy-on-close":!0},{default:o(()=>[b("div",null,[x((p(),_(D,{data:t(v),size:"large",height:"400"},{empty:o(()=>[b("span",null,f(e.loading?"":t(n)("emptyData")),1)]),default:o(()=>[d(i,{prop:"Name",label:t(n)("tableName"),"min-width":"150"},null,8,["label"]),d(i,{prop:"Comment",label:t(n)("tableComment"),"min-width":"120"},null,8,["label"]),d(i,{align:"right","min-width":"150"},{header:o(()=>[d(C,{modelValue:s.value,"onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r),modelModifiers:{trim:!0},size:"small",placeholder:t(n)("searchPlaceholder")},null,8,["modelValue","placeholder"])]),default:o(r=>[d(V,{size:"small",type:"primary",onClick:S=>w(r.row)},{default:o(()=>[B(f(t(n)("addBtn")),1)]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[T,e.loading]])])]),_:1},8,["modelValue","title"])}}});export{le as _};
|
||||
1
niucloud/public/admin/assets/add-theme-a998e55b.js
Normal file
1
niucloud/public/admin/assets/add-theme-a998e55b.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as e}from"./add-theme.vue_vue_type_script_setup_true_lang-cf38677e.js";const o=Object.freeze(Object.defineProperty({__proto__:null,default:e},Symbol.toStringTag,{value:"Module"}));export{o as _};
|
||||
@ -0,0 +1 @@
|
||||
import{d as U,r as d,n as h,l as B,h as N,s as R,w as n,a as q,e as o,i as v,u as _,a6 as F,L as I,M as O,bI as $,N as j,E as A,V as S}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import{u as T}from"./diy-e1949c05.js";const z={class:"dialog-footer"},X=U({__name:"add-theme",emits:["confirm"],setup(L,{expose:g,emit:V}){const y=T(),s=d(!1),i=d(!1),b={title:"",label:"",value:"",tip:""};let f=[];const m=d(""),l=h({...b}),k=r=>{f=r.key,m.value="";for(const e in l)l[e]="";r.data&&Object.keys(r.data).length&&(m.value="edit",Object.keys(l).forEach((e,t)=>{l[e]=r.data[e]?r.data[e]:""})),s.value=!0},p=d(),x=B(()=>({title:[{required:!0,message:"请输入颜色名称",trigger:"blur"}],value:[{required:!0,validator:(r,e,t)=>{e?t():t("请输入颜色value值")},trigger:["blur","change"]}],label:[{required:!0,message:"请输入颜色key值",trigger:"blur"},{validator:(r,e,t)=>{const u=/^[a-zA-Z0-9-]+$/;f.indexOf(e)!=-1&&t("新增颜色key值与已存在颜色key值命名重复,请修改命名"),u.test(e)?t():t("颜色key值只能输入字母、数字和连字符")},trigger:"blur"}]})),w=async r=>{var e;i.value||await((e=p.value)==null?void 0:e.validate(async t=>{i.value||(i.value=!0,t&&(i.value=!1,V("confirm",F(l)),s.value=!1))}))};return g({dialogThemeVisible:s,open:k}),(r,e)=>{const t=I,u=O,E=$,C=j,c=A,D=S;return N(),R(D,{modelValue:s.value,"onUpdate:modelValue":e[6]||(e[6]=a=>s.value=a),title:"新增颜色",width:"550px","align-center":""},{footer:n(()=>[q("div",z,[o(c,{onClick:e[4]||(e[4]=a=>s.value=!1)},{default:n(()=>[v("取消")]),_:1}),o(c,{type:"primary",onClick:e[5]||(e[5]=a=>w(p.value))},{default:n(()=>[v("保存")]),_:1})])]),default:n(()=>[o(C,{model:l,"label-width":"120px",ref_key:"formRef",ref:p,rules:_(x)},{default:n(()=>[o(u,{label:"名字",prop:"title"},{default:n(()=>[o(t,{modelValue:l.title,"onUpdate:modelValue":e[0]||(e[0]=a=>l.title=a),class:"!w-[250px]",maxlength:"7",placeholder:"请输入颜色名称"},null,8,["modelValue"])]),_:1}),o(u,{label:"颜色key值",prop:"label"},{default:n(()=>[o(t,{modelValue:l.label,"onUpdate:modelValue":e[1]||(e[1]=a=>l.label=a),class:"!w-[250px]",maxlength:"20",disabled:m.value=="edit",placeholder:"请输入颜色key值"},null,8,["modelValue","disabled"])]),_:1}),o(u,{label:"颜色value值",prop:"value"},{default:n(()=>[o(E,{modelValue:l.value,"onUpdate:modelValue":e[2]||(e[2]=a=>l.value=a),"show-alpha":"",predefine:_(y).predefineColors},null,8,["modelValue","predefine"])]),_:1}),o(u,{label:"颜色提示"},{default:n(()=>[o(t,{modelValue:l.tip,"onUpdate:modelValue":e[3]||(e[3]=a=>l.tip=a),class:"!w-[250px]",placeholder:"请输入颜色提示"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue"])}}});export{X as _};
|
||||
1
niucloud/public/admin/assets/addon-8de9fa57.js
Normal file
1
niucloud/public/admin/assets/addon-8de9fa57.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as t}from"./index-6fd8f478.js";function d(n){return t.get("addon/local",n)}function o(n){return t.post(`addon/install/${n.addon}`,n)}function a(n){return t.post(`addon/cloudinstall/${n.addon}`,n)}function s(n){return t.post(`addon/uninstall/${n.addon}`,n,{showSuccessMessage:!0})}function l(n){return t.get(`addon/install/check/${n}`)}function u(){return t.get("addon/installtask")}function i(n){return t.get(`addon/cloudinstall/${n}`)}function r(n){return t.get(`addon/uninstall/check/${n}`)}function c(n){return t.put(`addon/install/cancel/${n}`,{},{showErrorMessage:!1})}function g(){return t.get("addon/list/install")}function f(){return t.get("home/site/group/app_list")}function p(){return t.get("addon/init")}function A(){return t.get("app/index")}function h(){return t.get("index/adv_list")}export{g as a,A as b,h as c,p as d,d as e,u as f,f as g,a as h,o as i,i as j,r as k,c as l,l as p,s as u};
|
||||
1
niucloud/public/admin/assets/adminlogin-c42253c7.js
Normal file
1
niucloud/public/admin/assets/adminlogin-c42253c7.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as F,y as w,r as b,n as C,h as f,c as y,Z as B,s as D,w as r,e as o,a as l,t as n,u as a,q as i,i as k,ch as I,a6 as N,ci as U,b7 as L,M as R,a9 as S,N as T,E as j,a3 as q}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import A from"./index-68fc6f03.js";import"./el-form-item-4ed993c7.js";/* empty css *//* empty css */import"./index.vue_vue_type_style_index_0_lang-e1fd86ac.js";/* empty css *//* empty css */import"./attachment-ebf503f5.js";import"./index.vue_vue_type_script_setup_true_lang-80dd73f7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-4a53fa0a.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-9a3bbef3.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./sortable.esm-be94e56d.js";const M={class:"main-container"},O={class:"text-[16px] text-[#1D1F3A] font-bold mb-4"},Z={class:"panel-title !text-[14px] bg-[#F4F5F7] p-3 border-[#E6E6E6] border-solid border-b-[1px]"},$={class:"form-tip"},z={class:"box-card mt-[20px] !border-none"},G={class:"panel-title !text-[14px] bg-[#F4F5F7] p-3 border-[#E6E6E6] border-solid border-b-[1px]"},H={class:"form-tip"},J={class:"fixed-footer-wrap"},K={class:"fixed-footer"},Nt=F({__name:"adminlogin",setup(P){const g=w().meta.title,m=b(!0),_=b(),e=C({is_captcha:0,is_site_captcha:0,bg:"",site_bg:""});(async()=>{const p=await(await I()).data;Object.keys(e).forEach(t=>{e[t]=p[t]}),m.value=!1})();const v=async p=>{m.value||!p||await p.validate(t=>{if(t){const d=N(e);U(d).then(()=>{m.value=!1}).catch(()=>{m.value=!1})}})};return(p,t)=>{const d=L,c=R,u=A,h=S,x=T,V=j,E=q;return f(),y("div",M,[B((f(),D(x,{class:"page-form",model:e,"label-width":"150px",ref_key:"ruleFormRef",ref:_},{default:r(()=>[o(h,{class:"box-card !border-none",shadow:"never"},{default:r(()=>[l("h3",O,n(a(g)),1),l("h3",Z,n(a(i)("admin")),1),o(c,{label:a(i)("isCaptcha")},{default:r(()=>[o(d,{modelValue:e.is_captcha,"onUpdate:modelValue":t[0]||(t[0]=s=>e.is_captcha=s),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1},8,["label"]),o(c,{label:a(i)("bgImg")},{default:r(()=>[o(u,{modelValue:e.bg,"onUpdate:modelValue":t[1]||(t[1]=s=>e.bg=s)},null,8,["modelValue"]),l("div",$,n(a(i)("adminBgImgTip")),1)]),_:1},8,["label"]),l("div",z,[l("h3",G,n(a(i)("site")),1),o(c,{label:a(i)("isCaptcha")},{default:r(()=>[o(d,{modelValue:e.is_site_captcha,"onUpdate:modelValue":t[2]||(t[2]=s=>e.is_site_captcha=s),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1},8,["label"]),o(c,{label:a(i)("bgImg")},{default:r(()=>[o(u,{modelValue:e.site_bg,"onUpdate:modelValue":t[3]||(t[3]=s=>e.site_bg=s)},null,8,["modelValue"]),l("div",H,n(a(i)("siteBgImgTip")),1)]),_:1},8,["label"])])]),_:1})]),_:1},8,["model"])),[[E,m.value]]),l("div",J,[l("div",K,[o(V,{type:"primary",onClick:t[4]||(t[4]=s=>v(_.value))},{default:r(()=>[k(n(a(i)("save")),1)]),_:1})])])])}}});export{Nt as default};
|
||||
1
niucloud/public/admin/assets/agreement-16c8661f.js
Normal file
1
niucloud/public/admin/assets/agreement-16c8661f.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as v,y,n as k,f as x,h as m,c as E,e as a,w as o,a as i,t as r,u as t,Z as C,s as B,q as n,i as p,cj as N,aj as T,E as j,ak as D,a9 as L,a3 as A}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const V={class:"main-container"},R={class:"flex justify-between items-center"},$={class:"text-page-title"},q={class:"mt-[20px]"},X=v({__name:"agreement",setup(z){const _=y().meta.title,e=k({loading:!0,data:[]});(()=>{e.loading=!0,e.data=[],N().then(l=>{Object.keys(l.data).forEach(d=>e.data.push(l.data[d])),e.loading=!1}).catch(()=>{e.loading=!1})})();const u=x(),g=l=>{u.push(`/setting/agreement/edit?key=${l.agreement_key}`)};return(l,d)=>{const s=T,h=j,f=D,b=L,w=A;return m(),E("div",V,[a(b,{class:"box-card !border-none",shadow:"never"},{default:o(()=>[i("div",R,[i("span",$,r(t(_)),1)]),i("div",q,[C((m(),B(f,{data:e.data,size:"large"},{empty:o(()=>[i("span",null,r(e.loading?"":t(n)("emptyData")),1)]),default:o(()=>[a(s,{prop:"type_name",label:t(n)("typeName"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),a(s,{prop:"title",label:t(n)("title"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),a(s,{label:t(n)("updateTime"),"min-width":"180",align:"center"},{default:o(({row:c})=>[p(r(c.update_time||""),1)]),_:1},8,["label"]),a(s,{label:t(n)("operation"),align:"right",fixed:"right",width:"100"},{default:o(({row:c})=>[a(h,{type:"primary",link:"",onClick:Z=>g(c)},{default:o(()=>[p(r(t(n)("config")),1)]),_:2},1032,["onClick"])]),_:1},8,["label"])]),_:1},8,["data"])),[[w,e.loading]])])]),_:1})])}}});export{X as default};
|
||||
1
niucloud/public/admin/assets/agreement_edit-2a13e976.js
Normal file
1
niucloud/public/admin/assets/agreement_edit-2a13e976.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as q,y as M,f as P,r as y,ck as S,n as T,l as $,q as r,h,c as I,e as a,w as s,u as n,b3 as U,Z as j,s as A,a as w,i as k,t as x,cl as L,cm as O,b4 as H,a9 as Z,L as z,M as G,N as J,E as K,a3 as Q}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css */import{_ as W}from"./index.vue_vue_type_script_setup_true_lang-5a405f05.js";import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_style_index_0_lang-e1fd86ac.js";/* empty css *//* empty css */import"./attachment-ebf503f5.js";import"./index.vue_vue_type_script_setup_true_lang-80dd73f7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-4a53fa0a.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-9a3bbef3.js";import"./_plugin-vue_export-helper-c27b6911.js";const X={class:"main-container"},Y={class:"fixed-footer-wrap"},ee={class:"fixed-footer"},Se=q({__name:"agreement_edit",setup(te){const d=M(),V=P(),_=d.query.key||"",i=y(!1),E=S(),B=d.meta.title,f={agreement_key:"",content:"",title:"",agreement_key_name:""},t=T({...f});i.value=!0,_&&(async(m="")=>{Object.assign(t,f);const e=await(await L(m)).data;Object.keys(t).forEach(o=>{e[o]!=null&&(t[o]=e[o])}),i.value=!1})(_);const g=y(),D=$(()=>({title:[{required:!0,message:r("titlePlaceholder"),trigger:"blur"}],content:[{required:!0,trigger:["blur","change"],validator:(m,e,o)=>{if(e==="")o(new Error(r("contentPlaceholder")));else{if(e.length<5||e.length>1e5)return o(new Error(r("contentMaxTips"))),!1;o()}}}]})),C=async m=>{i.value||!m||await m.validate(async e=>{if(e){i.value=!0;const o=t;o.key=t.agreement_key,O(o).then(c=>{i.value=!1,p()}).catch(()=>{i.value=!1})}})},p=()=>{E.removeTab(d.path),V.push({path:"/setting/agreement"})};return(m,e)=>{const o=H,c=Z,v=z,u=G,F=W,N=J,b=K,R=Q;return h(),I("div",X,[a(c,{class:"card !border-none",shadow:"never"},{default:s(()=>[a(o,{content:n(B),icon:n(U),onBack:e[0]||(e[0]=l=>p())},null,8,["content","icon"])]),_:1}),j((h(),A(c,{class:"box-card mt-[15px] !border-none",shadow:"never"},{default:s(()=>[a(N,{model:t,"label-width":"90px",ref_key:"formRef",ref:g,rules:n(D),class:"page-form"},{default:s(()=>[a(u,{label:n(r)("type")},{default:s(()=>[a(v,{modelValue:t.agreement_key_name,"onUpdate:modelValue":e[1]||(e[1]=l=>t.agreement_key_name=l),modelModifiers:{trim:!0},readonly:"",class:"input-width"},null,8,["modelValue"])]),_:1},8,["label"]),a(u,{label:n(r)("title"),prop:"title"},{default:s(()=>[a(v,{modelValue:t.title,"onUpdate:modelValue":e[2]||(e[2]=l=>t.title=l),modelModifiers:{trim:!0},clearable:"",placeholder:n(r)("titlePlaceholder"),class:"input-width",maxlength:"20"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a(u,{label:n(r)("content"),prop:"content"},{default:s(()=>[a(F,{modelValue:t.content,"onUpdate:modelValue":e[3]||(e[3]=l=>t.content=l)},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"])]),_:1})),[[R,i.value]]),w("div",Y,[w("div",ee,[a(b,{type:"primary",onClick:e[4]||(e[4]=l=>C(g.value))},{default:s(()=>[k(x(n(r)("save")),1)]),_:1}),a(b,{onClick:e[5]||(e[5]=l=>p())},{default:s(()=>[k(x(n(r)("cancel")),1)]),_:1})])])])}}});export{Se as default};
|
||||
1
niucloud/public/admin/assets/aliapp-6b51f887.js
Normal file
1
niucloud/public/admin/assets/aliapp-6b51f887.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as t}from"./index-6fd8f478.js";function e(){return t.get("aliapp/config")}function p(a){return t.put("aliapp/config",a,{showSuccessMessage:!0})}function n(){return t.get("aliapp/static")}export{n as a,e as g,p as s};
|
||||
1
niucloud/public/admin/assets/app-c876f7a6.js
Normal file
1
niucloud/public/admin/assets/app-c876f7a6.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as n}from"./index-6fd8f478.js";function t(){return n.get("channel/app/config")}function r(e){return n.put("channel/app/config",e,{showSuccessMessage:!0})}function a(e){return n.get("channel/app/version",{params:e})}function o(e){return n.get(`channel/app/version/${e}`)}function u(){return n.get("channel/app/platfrom")}function i(e){return n.post("channel/app/version",e,{showSuccessMessage:!0})}function c(e){return n.put(`channel/app/version/${e.id}`,e,{showSuccessMessage:!0})}function p(e){return n.delete(`channel/app/version/${e.id}`)}function g(e){return n.get(`channel/app/build/log/${e}`)}function f(e){return n.put(`channel/app/version/${e}/release`,{},{showSuccessMessage:!0})}function l(e){return n.post("channel/app/generate_sing_cert",e,{showSuccessMessage:!0})}export{a,g as b,u as c,p as d,c as e,i as f,t as g,o as h,l as i,f as r,r as s};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as o}from"./app-version-edit.vue_vue_type_style_index_0_lang-6c9d6b3b.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_style_index_0_lang-24610787.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import"./app-c876f7a6.js";import"./generate-sing-cert.vue_vue_type_script_setup_true_lang-5cf89bff.js";export{o as default};
|
||||
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/app_manage-a43229de.js
Normal file
1
niucloud/public/admin/assets/app_manage-a43229de.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as I,f as V,j as M,r as y,n as N,Z as R,h as l,c as x,a as e,t as s,u as a,q as o,e as u,w as c,F as j,W as D,B as T,s as $,i as q,C as k,ca as b,H as w,E as z,K as H,b9 as K,cb as O,ab as P,a3 as U,p as W,g as Z}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{_ as G}from"./apply_empty-cdca3e85.js";import{a as J}from"./addon-8de9fa57.js";import{_ as Q}from"./_plugin-vue_export-helper-c27b6911.js";const X=""+new URL("app_store_default-c0531792.png",import.meta.url).href,h=_=>(W("data-v-8a156fb4"),_=_(),Z(),_),Y={class:"box-border pt-[68px] px-[76px] overview-top"},ee={key:0},te={class:"flex justify-between items-center"},se={class:"font-[600] text-[26px] text-[#222] leading-[37px]"},ae={class:"font-[500] text-[14px] text-[#222] leading-[20px] mt-[12px]"},oe=h(()=>e("div",{class:"mr-[9px] text-[#3F3F3F] iconfont iconxiazai01"},null,-1)),ne={class:"font-[600] text-[14px] text-[#222] leading-[20px]"},pe={class:"flex flex-wrap mt-[40px]"},ce=["onClick"],ie={class:"bg-[#F7FAFB] py-[18px] px-[24px] flex items-center app-item-head"},re=h(()=>e("div",{class:"image-slot"},[e("img",{class:"w-[40px] h-[40px] rounded-[8px]",src:X})],-1)),le={class:"py-[18px] px-[24px]"},_e={class:"font-[600] leading-[1] text-[14px] text-[#222]"},de={class:"text-[13px] text-[#6D7278] leading-[18px] mt-[6px] truncate"},xe=h(()=>e("div",{class:"w-[230px] mx-auto"},[e("img",{src:G,class:"max-w-full",alt:""})],-1)),ue={class:"flex items-center"},me=I({__name:"app_manage",setup(_){const v=V(),m=M(),n=y(!0),d=N({appList:[]}),f=y({});(()=>{n.value=!0,J().then(p=>{Object.values(p.data).forEach((t,i)=>{t.type=="app"&&d.appList.push(t)}),m.routers.forEach((t,i)=>{t.children&&t.children.length?(t.name=b(t.children),f.value[t.meta.app]=b(t.children)):f.value[t.meta.app]=t.name}),n.value=!1}).catch(()=>{n.value=!1})})();const L=p=>{w.set({key:"menuAppStorage",data:p.key}),w.set({key:"plugMenuTypeStorage",data:""});const t=m.appMenuList;t.push(p.key),m.setAppMenuList(t);const i=f.value[p.key];v.push({name:i})},g=()=>{v.push("/app_manage/app_store")};return(p,t)=>{const i=z,F=H,E=K,S=O,C=P,A=U;return R((l(),x("div",Y,[d.appList&&!n.value?(l(),x("div",ee,[e("div",te,[e("div",null,[e("div",se,s(a(o)("app")),1),e("div",ae,s(a(o)("versionInfo"))+" "+s(a(o)("currentVersion")),1)]),u(i,{onClick:g,class:"px-[15px]"},{default:c(()=>[oe,e("span",ne,s(a(o)("appStore")),1)]),_:1})]),e("div",pe,[(l(!0),x(j,null,D(d.appList,(r,B)=>(l(),x("div",{key:B,class:"app-item w-[280px] box-border !bg-[#fff] rounded-[6px] cursor-pointer mr-[20px] mb-[20px] overflow-hidden",onClick:he=>L(r)},[e("div",ie,[u(F,{class:"w-[44px] h-[44px] rounded-[8px]",src:a(T)(r.icon),fit:"contain"},{error:c(()=>[re]),_:2},1032,["src"])]),e("div",le,[e("div",_e,s(r.title),1),u(E,{class:"box-item",effect:"light",content:r.desc,placement:"bottom-start"},{default:c(()=>[e("div",de,s(r.desc),1)]),_:2},1032,["content"])])],8,ce))),128)),!d.appList.length&&!n.value?(l(),$(C,{key:0,class:"mx-auto overview-empty"},{image:c(()=>[xe]),description:c(()=>[e("p",ue,[e("span",null,s(a(o)("descriptionLeft")),1),u(S,{type:"primary",onClick:g,class:"mx-[5px]"},{default:c(()=>[q(s(a(o)("link")),1)]),_:1}),e("span",null,s(a(o)("descriptionRight")),1)])]),_:1})):k("",!0)])])):k("",!0)])),[[A,n.value]])}}});const Be=Q(me,[["__scopeId","data-v-8a156fb4"]]);export{Be as default};
|
||||
1
niucloud/public/admin/assets/attachment-8a3e4857.js
Normal file
1
niucloud/public/admin/assets/attachment-8a3e4857.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as f,y as h,r as y,h as m,c as s,e,w as o,a as i,t as b,u as p,F as v,W as x,q as g,aH as V,aI as w,a9 as E}from"./index-6fd8f478.js";/* empty css *//* empty css */import k from"./attachment-ebf503f5.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-80dd73f7.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-4a53fa0a.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-9a3bbef3.js";import"./_plugin-vue_export-helper-c27b6911.js";const B={class:"main-container attachment-container"},C={class:"flex justify-between items-center mb-[20px]"},N={class:"text-page-title"},it=f({__name:"attachment",setup(T){const l=h().meta.title,a=["image","video","icon"],n=y(a[0]);return(j,r)=>{const c=V,_=w,d=E;return m(),s("div",B,[e(d,{class:"box-card !border-none full-container",shadow:"never"},{default:o(()=>[i("div",C,[i("span",N,b(p(l)),1)]),e(_,{modelValue:n.value,"onUpdate:modelValue":r[0]||(r[0]=t=>n.value=t),"tab-position":"top"},{default:o(()=>[(m(),s(v,null,x(a,(t,u)=>e(c,{label:p(g)(t),name:t,key:u},{default:o(()=>[e(k,{scene:"attachment",type:t},null,8,["type"])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})])}}});export{it as default};
|
||||
1
niucloud/public/admin/assets/attachment-ebf503f5.js
Normal file
1
niucloud/public/admin/assets/attachment-ebf503f5.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/authorize-36a18d22.js
Normal file
1
niucloud/public/admin/assets/authorize-36a18d22.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/backup_records-9082c9a8.js
Normal file
1
niucloud/public/admin/assets/backup_records-9082c9a8.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/balance-67d8684a.js
Normal file
1
niucloud/public/admin/assets/balance-67d8684a.js
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
import{d as b,r as d,n as w,I as m,l as g,R as c,h as F,s as E,w as i,e as n,a,Z as N,i as R,_ as j,aF as B,L as C,M as I,N as O}from"./index-6fd8f478.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css */const k={class:"flex items-center"},D=a("span",{class:"ml-[10px] el-form-item__label"},"消费折扣",-1),M={class:"w-[120px]"},U=a("div",{class:"text-sm text-gray-400 mb-[5px]"},"会员购买产品默认折扣,需要商品设置参与会员折扣有效",-1),A=b({__name:"benefits-discount",props:{modelValue:{type:Object,default:()=>({})}},emits:["update:modelValue"],setup(p,{expose:_,emit:f}){const v=p,e=d({is_use:0,discount:""}),r=d(null),x=w({discount:[{validator:(l,t,s)=>{e.value.is_use&&(m.empty(e.value.discount)&&s("请输入折扣"),m.decimal(e.value.discount,1)||s("折扣格式错误"),(parseFloat(e.value.discount)<0||parseFloat(e.value.discount)>9.9)&&s("折扣只能输入0~9.9之间的值"),e.value.discount<0&&s("折扣不能小于0")),s()}}]}),o=g({get(){return v.modelValue},set(l){f("update:modelValue",l)}});return c(()=>o.value,(l,t)=>{(!t||!Object.keys(t).length)&&Object.keys(l).length&&(e.value=o.value)},{immediate:!0}),c(()=>e.value,()=>{o.value=e.value},{deep:!0}),_({verify:async()=>{var t;let l=!0;return await((t=r.value)==null?void 0:t.validate(s=>{l=s})),l}}),(l,t)=>{const s=B,V=C,h=I,y=O;return F(),E(y,{ref_key:"formRef",ref:r,model:e.value,rules:x},{default:i(()=>[n(h,{label:"",prop:"discount",class:"!mb-[10px]"},{default:i(()=>[a("div",null,[a("div",k,[n(s,{modelValue:e.value.is_use,"onUpdate:modelValue":t[0]||(t[0]=u=>e.value.is_use=u),"true-label":1,"false-label":0,label:"",size:"large"},null,8,["modelValue"]),D,N(a("div",M,[n(V,{modelValue:e.value.discount,"onUpdate:modelValue":t[1]||(t[1]=u=>e.value.discount=u),modelModifiers:{trim:!0},clearable:""},{append:i(()=>[R("折")]),_:1},8,["modelValue"])],512),[[j,e.value.is_use]])]),U])]),_:1})]),_:1},8,["model","rules"])}}});export{A as default};
|
||||
1
niucloud/public/admin/assets/cash_out-9657ac3e.js
Normal file
1
niucloud/public/admin/assets/cash_out-9657ac3e.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as U,y as O,r as b,n as V,h as u,c as E,e as n,w as s,a as i,t as m,u as o,Z as z,s as p,q as l,bW as k,C as f,i as v,F as L,W as S,b7 as j,M as G,L as H,aD as I,aE as K,aF as P,bD as q,a9 as X,N as Z,E as $,a3 as J}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{d as Q,W as Y,X as ee}from"./member-08ee6cb9.js";const te={class:"main-container"},ae={class:"flex justify-between items-center"},oe={class:"text-page-title"},se={class:"text-[12px] text-[#999] leading-[24px]"},le=i("span",{class:"ml-2"},"%",-1),ne={class:"text-[12px] text-[#999] leading-[24px]"},re={class:"fixed-footer-wrap"},ie={class:"fixed-footer"},Fe=U({__name:"cash_out",setup(de){const C=O().meta.title,c=b(!0),g=b(),t=V({is_auto_transfer:"0",is_auto_verify:"0",is_open:"0",min:"0",rate:"0",transfer_type:[]}),y=b([]);(async()=>{y.value=await(await Q()).data})(),(async()=>{const d=await(await Y()).data;Object.keys(t).forEach(e=>{d[e]!=null&&(t[e]=d[e])}),c.value=!1})();const R=V({min:[{validator:(d,e,r)=>{Number(e)<.01?r(new Error(l("cashWithdrawalAmountHint"))):r()},trigger:"blur"}],rate:[{validator:(d,e,r)=>{Number(e)>100||Number(e)<0?r(new Error(l("commissionRatioHint"))):r()},trigger:"blur"}]}),F=async d=>{c.value||!d||await d.validate(e=>{if(e){const r={...t};ee(r).then(()=>{c.value=!1}).catch(()=>{c.value=!1})}})};return(d,e)=>{const r=j,_=G,h=H,x=I,N=K,D=P,T=q,w=X,W=Z,A=$,B=J;return u(),E("div",te,[n(w,{class:"box-card !border-none",shadow:"never"},{default:s(()=>[i("div",ae,[i("span",oe,m(o(C)),1)]),z((u(),p(W,{class:"page-form mt-[20px]",model:t,"label-width":"150px",ref_key:"ruleFormRef",ref:g,rules:R},{default:s(()=>[n(w,{class:"box-card !border-none",shadow:"never"},{default:s(()=>[n(_,{label:o(l)("isOpen")},{default:s(()=>[n(r,{modelValue:t.is_open,"onUpdate:modelValue":e[0]||(e[0]=a=>t.is_open=a),"active-value":"1","inactive-value":"0"},null,8,["modelValue"])]),_:1},8,["label"]),t.is_open?(u(),p(_,{key:0,label:o(l)("cashWithdrawalAmount"),prop:"min"},{default:s(()=>[i("div",null,[n(h,{modelValue:t.min,"onUpdate:modelValue":e[1]||(e[1]=a=>t.min=a),modelModifiers:{trim:!0},onKeyup:e[2]||(e[2]=a=>o(k)(a)),class:"input-width",placeholder:o(l)("cashWithdrawalAmountPlaceholder")},null,8,["modelValue","placeholder"]),i("div",se,m(o(l)("minTips")),1)])]),_:1},8,["label"])):f("",!0),t.is_open?(u(),p(_,{key:1,label:o(l)("commissionRatio"),prop:"rate"},{default:s(()=>[n(h,{modelValue:t.rate,"onUpdate:modelValue":e[3]||(e[3]=a=>t.rate=a),modelModifiers:{trim:!0},onKeyup:e[4]||(e[4]=a=>o(k)(a)),class:"input-width",placeholder:o(l)("commissionRatioPlaceholder")},null,8,["modelValue","placeholder"]),le]),_:1},8,["label"])):f("",!0),t.is_open?(u(),p(_,{key:2,label:o(l)("audit"),class:"items-center"},{default:s(()=>[n(N,{modelValue:t.is_auto_verify,"onUpdate:modelValue":e[5]||(e[5]=a=>t.is_auto_verify=a)},{default:s(()=>[n(x,{label:"0",size:"large"},{default:s(()=>[v(m(o(l)("manualAudit")),1)]),_:1}),n(x,{label:"1",size:"large"},{default:s(()=>[v(m(o(l)("automaticAudit")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"])):f("",!0),t.is_open?(u(),p(_,{key:3,label:o(l)("transferMode"),class:"items-baseline"},{default:s(()=>[i("div",null,[n(T,{modelValue:t.transfer_type,"onUpdate:modelValue":e[6]||(e[6]=a=>t.transfer_type=a),size:"large"},{default:s(()=>[(u(!0),E(L,null,S(y.value,(a,M)=>(u(),p(D,{label:a.key,key:"a"+M},{default:s(()=>[v(m(a.name),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"]),i("div",ne,m(o(l)("transferModeTips")),1)])]),_:1},8,["label"])):f("",!0)]),_:1})]),_:1},8,["model","rules"])),[[B,c.value]])]),_:1}),i("div",re,[i("div",ie,[n(A,{type:"primary",onClick:e[7]||(e[7]=a=>F(g.value))},{default:s(()=>[v(m(o(l)("save")),1)]),_:1})])])])}}});export{Fe as default};
|
||||
1
niucloud/public/admin/assets/cash_out-ab35406c.js
Normal file
1
niucloud/public/admin/assets/cash_out-ab35406c.js
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
const e="公众号名称",c="公众号原始ID",t="公众号二维码",o="建议尺寸上传430px*430px宽高的二维码",n="开发者ID",a="开发者ID是公众号开发识别码,配合开发者密码可调用公众号的接口能力。",s="开发者密码",i="开发者密码是校验公众号开发者身份的密码,具有极高的安全性",p="业务域名",h="JS接口安全域名",r="网页授权域名",l="公众号信息",d="公众号开发信息",w="消息推送配置",T="功能设置",g="在微信公众平台中,点击 设置与开发>公众号设置>功能设置,设置业务域名 JS接口安全域名 网页授权域名",S="必须为英文或数字,长度为3-32字符。",A="消息加密密钥由43位字符组成,可随机修改,字符范围为A-Z,a-z,0-9。",m="消息加解密方式",f="明文模式",P="兼容模式",D="安全模式(推荐)",M="请输入公众号名称",u="请输入公众号原始ID",y="请输入开发者ID",I="请输入开发者密码",b="请输入Token",x="请输入EncodingAESKey",B="明文模式下,不使用消息体加解密功能,安全系数较低",U="兼容模式下,明文、密文将共存,方便开发者调试和维护",k="安全模式下,消息包为纯密文,需要开发者加密和解密,安全系数高",K="借权域名",v="",E="默认留空,填写后将替换https://open.weixin.gg.com/获取授权!",N={wechatName:e,wechatOriginal:c,wechatQrcode:t,wechatQrcodeTips:o,wechatAppid:n,wechatAppidTips:a,wechatAppsecret:s,wechatAppsecretTips:i,businessDomain:p,jsSecureDomain:h,webAuthDomain:r,wechatInfo:l,wechatDevelopInfo:d,theServerSetting:w,functionSetting:T,functionSettingTips:g,tokenTips:S,encodingAESKeyTips:A,encryptionType:m,cleartextMode:f,compatibleMode:P,safeMode:D,wechatNamePlaceholder:M,wechatOriginalPlaceholder:u,appidPlaceholder:y,appSecretPlaceholder:I,tokenPlaceholder:b,encodingAesKeyPlaceholder:x,cleartextModeTips:B,compatibleModeTips:U,safeModeTips:k,wechatBaseUri:K,wechatBaseUriPlaceholder:v,wechatBaseUriTips:E};export{I as appSecretPlaceholder,y as appidPlaceholder,p as businessDomain,f as cleartextMode,B as cleartextModeTips,P as compatibleMode,U as compatibleModeTips,N as default,A as encodingAESKeyTips,x as encodingAesKeyPlaceholder,m as encryptionType,T as functionSetting,g as functionSettingTips,h as jsSecureDomain,D as safeMode,k as safeModeTips,w as theServerSetting,b as tokenPlaceholder,S as tokenTips,r as webAuthDomain,n as wechatAppid,a as wechatAppidTips,s as wechatAppsecret,i as wechatAppsecretTips,K as wechatBaseUri,v as wechatBaseUriPlaceholder,E as wechatBaseUriTips,d as wechatDevelopInfo,l as wechatInfo,e as wechatName,M as wechatNamePlaceholder,c as wechatOriginal,u as wechatOriginalPlaceholder,t as wechatQrcode,o as wechatQrcodeTips};
|
||||
1
niucloud/public/admin/assets/cloud_compile-f60c806e.js
Normal file
1
niucloud/public/admin/assets/cloud_compile-f60c806e.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/code-c1530eec.js
Normal file
1
niucloud/public/admin/assets/code-c1530eec.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/commission-798e3489.js
Normal file
1
niucloud/public/admin/assets/commission-798e3489.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/config-0d421202.js
Normal file
1
niucloud/public/admin/assets/config-0d421202.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as M,y as B,f as N,r as v,n as U,l as R,h as b,c as T,e as a,w as s,u as t,Z as D,s as $,a as n,t as d,q as l,i as m,b4 as L,a9 as P,L as F,E as K,M as O,N as S,a3 as j}from"./index-6fd8f478.js";/* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{g as q,s as H}from"./app-c876f7a6.js";const Z={class:"main-container"},z={class:"panel-title !text-sm"},G={class:"form-tip flex items-center"},J={class:"form-tip"},Q={class:"form-tip"},W={class:"panel-title !text-sm"},X={class:"form-tip"},Y={class:"fixed-footer-wrap"},ee={class:"fixed-footer"},ce=M({__name:"config",setup(ae){const V=B(),y=N(),g=V.meta.title,r=v(!0),o=U({uni_app_id:"",app_name:"",android_app_key:"",application_id:"",wechat_app_id:"",wechat_app_secret:""}),f=v(),k=R(()=>({}));q().then(i=>{Object.assign(o,i.data),r.value=!1});const x=async i=>{r.value||!i||await i.validate(async e=>{e&&(r.value=!0,H(o).then(()=>{r.value=!1}).catch(()=>{r.value=!1}))})},h=i=>{window.open(i)},A=()=>{y.push("/channel/app")};return(i,e)=>{const C=L,_=P,c=F,w=K,u=O,I=S,E=j;return b(),T("div",Z,[a(_,{class:"card !border-none",shadow:"never"},{default:s(()=>[a(C,{content:t(g),icon:i.ArrowLeft,onBack:e[0]||(e[0]=p=>A())},null,8,["content","icon"])]),_:1}),D((b(),$(I,{class:"page-form mt-[15px]",model:o,"label-width":"170px",ref_key:"formRef",ref:f,rules:t(k)},{default:s(()=>[a(_,{class:"box-card !border-none mt-[15px]",shadow:"never"},{default:s(()=>[n("h3",z,d(t(l)("appInfo")),1),a(u,{label:t(l)("uniAppId"),prop:"uni_app_id"},{default:s(()=>[a(c,{modelValue:o.uni_app_id,"onUpdate:modelValue":e[1]||(e[1]=p=>o.uni_app_id=p),modelModifiers:{trim:!0},placeholder:"",class:"input-width",clearable:""},null,8,["modelValue"]),n("div",G,[m(d(t(l)("uniAppIdTips"))+" ",1),a(w,{link:"",type:"primary",onClick:e[2]||(e[2]=p=>h("https://www.dcloud.io/"))},{default:s(()=>[m(d(t(l)("toCreate")),1)]),_:1})])]),_:1},8,["label"]),a(u,{label:t(l)("appName"),prop:"app_name"},{default:s(()=>[a(c,{modelValue:o.app_name,"onUpdate:modelValue":e[3]||(e[3]=p=>o.app_name=p),modelModifiers:{trim:!0},placeholder:"",class:"input-width",clearable:""},null,8,["modelValue"])]),_:1},8,["label"]),a(u,{label:t(l)("androidAppKey"),prop:"android_app_key"},{default:s(()=>[a(c,{modelValue:o.android_app_key,"onUpdate:modelValue":e[4]||(e[4]=p=>o.android_app_key=p),modelModifiers:{trim:!0},placeholder:"",class:"input-width",clearable:""},null,8,["modelValue"]),n("div",J,[m(d(t(l)("androidAppKeyTips"))+" ",1),n("span",{class:"text-primary cursor-pointer",onClick:e[5]||(e[5]=p=>h("https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey.html"))},"查看详情")])]),_:1},8,["label"]),a(u,{label:t(l)("applicationId"),prop:"application_id"},{default:s(()=>[a(c,{modelValue:o.application_id,"onUpdate:modelValue":e[6]||(e[6]=p=>o.application_id=p),modelModifiers:{trim:!0},placeholder:"",class:"input-width",clearable:""},null,8,["modelValue"]),n("div",Q,d(t(l)("applicationIdTips")),1)]),_:1},8,["label"])]),_:1}),a(_,{class:"box-card !border-none mt-[15px]",shadow:"never"},{default:s(()=>[n("h3",W,d(t(l)("wechatAppInfo")),1),a(u,{label:t(l)("wechatAppid"),prop:"app_id"},{default:s(()=>[a(c,{modelValue:o.wechat_app_id,"onUpdate:modelValue":e[7]||(e[7]=p=>o.wechat_app_id=p),modelModifiers:{trim:!0},placeholder:t(l)("appidPlaceholder"),class:"input-width",clearable:""},null,8,["modelValue","placeholder"]),n("div",X,d(t(l)("wechatAppidTips")),1)]),_:1},8,["label"]),a(u,{label:t(l)("wechatAppsecret"),prop:"app_secret"},{default:s(()=>[a(c,{modelValue:o.wechat_app_secret,"onUpdate:modelValue":e[8]||(e[8]=p=>o.wechat_app_secret=p),modelModifiers:{trim:!0},placeholder:t(l)("appSecretPlaceholder"),class:"input-width",clearable:""},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["model","rules"])),[[E,r.value]]),n("div",Y,[n("div",ee,[a(w,{type:"primary",loading:r.value,onClick:e[9]||(e[9]=p=>x(f.value))},{default:s(()=>[m(d(t(l)("save")),1)]),_:1},8,["loading"])])])])}}});export{ce as default};
|
||||
1
niucloud/public/admin/assets/config-3606e95c.js
Normal file
1
niucloud/public/admin/assets/config-3606e95c.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/config-9d02a1ce.js
Normal file
1
niucloud/public/admin/assets/config-9d02a1ce.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/config-bb43bddf.js
Normal file
1
niucloud/public/admin/assets/config-bb43bddf.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as b,d as S,y as B,r as v,n as R,b8 as D,b2 as F,R as I,$ as g,q as o,h as M,c as $,e as a,w as l,a as r,t as u,u as i,i as j,b7 as H,M as O,L as U,N as L,a9 as P,E as T}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{_ as z}from"./_plugin-vue_export-helper-c27b6911.js";function A(){return b.get("channel/h5/config")}function G(_){return b.put("channel/h5/config",_,{showSuccessMessage:!0})}const J={class:"main-container"},K={class:"flex justify-between items-center"},Q={class:"text-page-title"},W={class:"fixed-footer-wrap"},X={class:"fixed-footer"},Y=S({__name:"config",setup(_){const h=B().meta.title,n=v(!0),e=R({is_open:!0,request_url:""}),d=v();A().then(t=>{Object.assign(e,t.data),e.is_open=Boolean(Number(e.is_open)),n.value=!1}),D().then(t=>{e.request_url=t.data.wap_url+"/"});const{copy:y,isSupported:w,copied:m}=F(),x=t=>{if(!w.value){g({message:o("notSupportCopy"),type:"warning"});return}y(t)};I(m,()=>{m.value&&g({message:o("copySuccess"),type:"success"})});const C=()=>{window.open(e.request_url)},E=async t=>{n.value||!t||await t.validate(async s=>{if(s){n.value=!0;const c={...e};c.is_open=Number(c.is_open),G(c).then(()=>{n.value=!1}).catch(()=>{n.value=!1})}})};return(t,s)=>{const c=H,f=O,N=U,k=L,q=P,V=T;return M(),$("div",J,[a(q,{class:"box-card !border-none",shadow:"never"},{default:l(()=>[r("div",K,[r("span",Q,u(i(h)),1)]),a(k,{class:"page-form mt-[20px]",model:e,"label-width":"150px",ref_key:"formRef",ref:d},{default:l(()=>[a(f,{label:i(o)("isOpen")},{default:l(()=>[a(c,{modelValue:e.is_open,"onUpdate:modelValue":s[0]||(s[0]=p=>e.is_open=p)},null,8,["modelValue"])]),_:1},8,["label"]),a(f,{label:i(o)("h5DomainName")},{default:l(()=>[a(N,{"model-value":e.request_url,class:"input-width",readonly:!0},{append:l(()=>[r("div",{class:"cursor-pointer",onClick:s[1]||(s[1]=p=>x(e.request_url))},u(i(o)("copy")),1)]),_:1},8,["model-value"]),r("span",{class:"ml-2 cursor-pointer visit-btn",onClick:C},u(i(o)("clickVisit")),1)]),_:1},8,["label"])]),_:1},8,["model"])]),_:1}),r("div",W,[r("div",X,[a(V,{type:"primary",loading:n.value,onClick:s[2]||(s[2]=p=>E(d.value))},{default:l(()=>[j(u(i(o)("save")),1)]),_:1},8,["loading"])])])])}}});const ie=z(Y,[["__scopeId","data-v-8a5349bf"]]);export{ie as default};
|
||||
1
niucloud/public/admin/assets/config-cb694029.js
Normal file
1
niucloud/public/admin/assets/config-cb694029.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as b,d as S,y as B,r as v,n as R,b8 as D,b2 as F,R as I,$ as g,q as a,h as M,c as P,e as n,w as l,a as r,t as u,u as i,i as $,b7 as j,M as O,L as U,N as L,a9 as T,E as z}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{_ as A}from"./_plugin-vue_export-helper-c27b6911.js";function G(){return b.get("channel/pc/config")}function H(_){return b.put("channel/pc/config",_,{showSuccessMessage:!0})}const J={class:"main-container"},K={class:"flex justify-between items-center"},Q={class:"text-page-title"},W={class:"fixed-footer-wrap"},X={class:"fixed-footer"},Y=S({__name:"config",setup(_){const y=B().meta.title,o=v(!0),e=R({is_open:!1,request_url:""}),d=v();D().then(t=>{e.request_url=t.data.web_url+"/",o.value=!1}),G().then(t=>{Object.assign(e,t.data),e.is_open=Boolean(Number(e.is_open)),o.value=!1});const{copy:w,isSupported:h,copied:m}=F(),x=t=>{if(!h.value){g({message:a("notSupportCopy"),type:"warning"});return}w(t)};I(m,()=>{m.value&&g({message:a("copySuccess"),type:"success"})});const C=()=>{window.open(e.request_url)},E=async t=>{o.value||!t||await t.validate(async s=>{if(s){o.value=!0;const c={...e};c.is_open=Number(c.is_open),H(c).then(()=>{o.value=!1}).catch(()=>{o.value=!1})}})};return(t,s)=>{const c=j,f=O,N=U,k=L,q=T,V=z;return M(),P("div",J,[n(q,{class:"box-card !border-none",shadow:"never"},{default:l(()=>[r("div",K,[r("span",Q,u(i(y)),1)]),n(k,{class:"page-form mt-[20px]",model:e,"label-width":"150px",ref_key:"formRef",ref:d},{default:l(()=>[n(f,{label:i(a)("isOpen")},{default:l(()=>[n(c,{modelValue:e.is_open,"onUpdate:modelValue":s[0]||(s[0]=p=>e.is_open=p)},null,8,["modelValue"])]),_:1},8,["label"]),n(f,{label:i(a)("pCDomainName")},{default:l(()=>[n(N,{"model-value":e.request_url,class:"input-width",readonly:!0},{append:l(()=>[r("div",{class:"cursor-pointer",onClick:s[1]||(s[1]=p=>x(e.request_url))},u(i(a)("copy")),1)]),_:1},8,["model-value"]),r("span",{class:"ml-2 cursor-pointer visit-btn",onClick:C},u(i(a)("clickVisit")),1)]),_:1},8,["label"])]),_:1},8,["model"])]),_:1}),r("div",W,[r("div",X,[n(V,{type:"primary",loading:o.value,onClick:s[2]||(s[2]=p=>E(d.value))},{default:l(()=>[$(u(i(a)("save")),1)]),_:1},8,["loading"])])])])}}});const ie=A(Y,[["__scopeId","data-v-2f7e1e13"]]);export{ie as default};
|
||||
1
niucloud/public/admin/assets/config-ede748d5.js
Normal file
1
niucloud/public/admin/assets/config-ede748d5.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/copyright-bd81f5f3.js
Normal file
1
niucloud/public/admin/assets/copyright-bd81f5f3.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/course-6e325b39.js
Normal file
1
niucloud/public/admin/assets/course-6e325b39.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as u,y as h,f,h as b,c as g,e as r,w as i,u as t,b3 as v,a as e,i as o,t as s,q as n,b4 as y,a9 as k,E as T}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css */const E=""+new URL("weapp_1-7017a047.png",import.meta.url).href,R=""+new URL("weapp_2-8fac7fa5.png",import.meta.url).href,B=""+new URL("weapp_3-07a2249e.png",import.meta.url).href,L=""+new URL("weapp_4-d837a9b1.png",import.meta.url).href,U={class:"main-container"},j={class:"flex"},C=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"1")],-1),N={class:"flex items-center text-[14px]"},q=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:E})],-1),O={class:"flex mt-[40px]"},V=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"2")],-1),F={class:"flex items-center text-[14px]"},S=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:R})],-1),A={class:"flex mt-[40px]"},D=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"3")],-1),H={class:"flex items-center text-[14px]"},K={class:"text-primary"},P=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:B})],-1),$={class:"flex mt-[40px]"},z=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"4")],-1),G={class:"flex items-center text-[14px]"},I=e("span",{class:"text-primary"},"URL / Token / EncondingAESKey",-1),J=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:L})],-1),te=u({__name:"course",setup(M){const p=h(),l=f(),d=p.meta.title,_=()=>{l.push("/channel/weapp")},m=()=>{window.open("https://mp.weixin.qq.com/","_blank")};return(Q,a)=>{const x=y,c=k,w=T;return b(),g("div",U,[r(c,{class:"card !border-none",shadow:"never"},{default:i(()=>[r(x,{content:t(d),icon:t(v),onBack:a[0]||(a[0]=W=>_())},null,8,["content","icon"])]),_:1}),r(c,{class:"box-card mt-[15px] !border-none",shadow:"never"},{default:i(()=>[e("div",j,[C,e("div",null,[e("p",N,[o(s(t(n)("writingTipsOne1")),1),r(w,{link:"",type:"primary",onClick:m},{default:i(()=>[o(s(t(n)("writingTipsOne2")),1)]),_:1}),o(","+s(t(n)("writingTipsOne3")),1)]),q])]),e("div",O,[V,e("div",null,[e("p",F,s(t(n)("writingTipsTwo1")),1),S])]),e("div",A,[D,e("div",null,[e("p",H,[o(s(t(n)("writingTipsThree1")),1),e("span",K,s(t(n)("writingTipsThree2")),1)]),P])]),e("div",$,[z,e("div",null,[e("p",G,[o(s(t(n)("writingTipsFour1")),1),I,o(s(t(n)("writingTipsFour2")),1)]),J])])]),_:1})])}}});export{te as default};
|
||||
1
niucloud/public/admin/assets/course-9f3862aa.js
Normal file
1
niucloud/public/admin/assets/course-9f3862aa.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as v,y as b,f as R,r as C,n as T,h as k,c as L,e as t,w as a,u as e,b3 as U,a as s,i as r,t as o,q as n,b4 as j,a9 as E,E as B,b0 as N,b1 as O}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import{g as V}from"./wechat-1fe17a88.js";const q=""+new URL("alipay1-029c00a2.png",import.meta.url).href,D=""+new URL("alipay2-f74219b9.png",import.meta.url).href,H=""+new URL("alipay3-0895ce6e.png",import.meta.url).href,P=""+new URL("alipay4-92fef352.png",import.meta.url).href,S=""+new URL("alipay4_1-ad9b08e3.jpg",import.meta.url).href,W=""+new URL("alipay4_2-cbaa820b.jpg",import.meta.url).href,$=""+new URL("alipay4_3-4a213289.jpg",import.meta.url).href,z=""+new URL("alipay4_4-7924cbdd.jpg",import.meta.url).href,A=""+new URL("alipay5-6dba1989.png",import.meta.url).href,F=""+new URL("alipay6-f1e18995.png",import.meta.url).href,G=""+new URL("alipay7-c805d7c0.png",import.meta.url).href,I=""+new URL("alipay8-3097d150.png",import.meta.url).href,J={class:"main-container"},K={class:"flex"},M=s("div",{class:"min-w-[60px]"},[s("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"1")],-1),Q={class:"flex items-center text-[14px]"},X=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:q})],-1),Y={class:"flex items-center text-[14px] mt-[20px]"},Z=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:D})],-1),ss=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:H})],-1),es={class:"flex mt-[40px]"},ts=s("div",{class:"min-w-[60px]"},[s("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"2")],-1),as={class:"flex items-center text-[14px]"},os={class:"w-[100%] mt-[10px] flex flex-wrap"},ns=s("div",{class:"w-[100%]"},[s("img",{class:"w-[100%]",src:P})],-1),is=s("div",{class:"w-[100%]"},[s("img",{class:"w-[100%]",src:S})],-1),rs=s("div",{class:"w-[100%]"},[s("img",{class:"w-[100%]",src:W})],-1),cs=s("div",{class:"w-[100%]"},[s("img",{class:"w-[100%]",src:$})],-1),ps=s("div",{class:"w-[100%]"},[s("img",{class:"w-[100%]",src:z})],-1),ls={class:"flex mt-[40px]"},_s=s("div",{class:"min-w-[60px]"},[s("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"3")],-1),ms={class:"flex items-center text-[14px]"},ds=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:A})],-1),xs=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:F})],-1),us={class:"flex items-center text-[14px] mt-[20px]"},ws=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:G})],-1),hs={class:"flex items-center text-[14px] mt-[20px]"},fs=s("div",{class:"w-[100%] mt-[10px]"},[s("img",{class:"w-[100%]",src:I})],-1),Ls=v({__name:"course",setup(ys){const _=b(),m=R(),d=()=>{m.push("/channel/aliapp")},x=_.meta.title,u=C(!0),w=T({wechat_name:"",wechat_original:"",app_id:"",app_secret:"",qr_code:"",token:"",encoding_aes_key:"",encryption_type:"not_encrypt"});V().then(c=>{Object.assign(w,c.data),u.value=!1});const h=()=>{window.open("https://open.alipay.com/develop/manage","_blank")};return(c,p)=>{const f=j,l=E,y=B,i=N,g=O;return k(),L("div",J,[t(l,{class:"card !border-none",shadow:"never"},{default:a(()=>[t(f,{content:e(x),icon:e(U),onBack:p[0]||(p[0]=gs=>d())},null,8,["content","icon"])]),_:1}),t(l,{class:"box-card mt-[15px] !border-none",shadow:"never"},{default:a(()=>[s("div",K,[M,s("div",null,[s("p",Q,[r(o(e(n)("alipayCourseTipsOne1"))+"--",1),t(y,{link:"",type:"primary",onClick:h},{default:a(()=>[r(o(e(n)("alipayCourseTipsOne2")),1)]),_:1}),r(", "+o(e(n)("alipayCourseTipsOne3")),1)]),X,s("p",Y,o(e(n)("alipayCourseTipsTwo1")),1),Z,ss])]),s("div",es,[ts,s("div",null,[s("p",as,o(e(n)("alipayCourseTipsTwo2")),1),s("div",os,[ns,s("div",null,[t(g,{gutter:20},{default:a(()=>[t(i,{span:6},{default:a(()=>[is]),_:1}),t(i,{span:6},{default:a(()=>[rs]),_:1}),t(i,{span:6},{default:a(()=>[cs]),_:1}),t(i,{span:6},{default:a(()=>[ps]),_:1})]),_:1})])])])]),s("div",ls,[_s,s("div",null,[s("p",ms,o(e(n)("alipayCourseTipsThree1")),1),ds,xs,s("p",us,o(e(n)("alipayCourseTipsThree2")),1),ws,s("p",hs,o(e(n)("alipayCourseTipsThree3")),1),fs])])]),_:1})])}}});export{Ls as default};
|
||||
1
niucloud/public/admin/assets/course-a5bb185b.js
Normal file
1
niucloud/public/admin/assets/course-a5bb185b.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as f,y as g,f as v,r as y,n as b,h as k,c as T,e as a,w as r,u as t,b3 as E,a as e,i as o,t as s,q as n,b4 as R,a9 as O,E as B}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css */import{g as C}from"./wechat-1fe17a88.js";const L=""+new URL("wechat_1-0a26d3a6.png",import.meta.url).href,U=""+new URL("wechat_4-94a271d5.png",import.meta.url).href,j=""+new URL("wechat_2-0513f476.png",import.meta.url).href,q=""+new URL("wechat_3-0a96f3fe.png",import.meta.url).href,N={class:"main-container"},V={class:"flex"},D=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"1")],-1),S={class:"flex items-center text-[14px]"},A=e("span",{class:"text-primary"},"URL / Token / EncondingAESKey",-1),H=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:L})],-1),K={class:"flex items-center text-[14px] mt-[20px]"},P=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:U})],-1),W={class:"flex mt-[40px]"},$=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"2")],-1),z={class:"flex items-center text-[14px]"},F=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:j})],-1),G={class:"flex mt-[40px]"},I=e("div",{class:"min-w-[60px]"},[e("span",{class:"flex justify-center items-center block w-[40px] h-[40px] border-[1px] border-primary rounded-[999px] text-primary"},"3")],-1),J={class:"flex items-center text-[14px]"},M={class:"text-primary"},Q=e("div",{class:"w-[100%] mt-[10px]"},[e("img",{class:"w-[100%]",src:q})],-1),ae=f({__name:"course",setup(X){const l=g().meta.title,_=v(),d=()=>{_.push("/channel/wechat")},m=y(!0),x=b({wechat_name:"",wechat_original:"",app_id:"",app_secret:"",qr_code:"",token:"",encoding_aes_key:"",encryption_type:"not_encrypt"});C().then(i=>{Object.assign(x,i.data),m.value=!1});const h=()=>{window.open("https://mp.weixin.qq.com/","_blank")};return(i,c)=>{const w=R,p=O,u=B;return k(),T("div",N,[a(p,{class:"card !border-none",shadow:"never"},{default:r(()=>[a(w,{content:t(l),icon:t(E),onBack:c[0]||(c[0]=Z=>d())},null,8,["content","icon"])]),_:1}),a(p,{class:"box-card mt-[15px] pt-[20px] !border-none",shadow:"never"},{default:r(()=>[e("div",V,[D,e("div",null,[e("p",S,[o(s(t(n)("writingTipsOne1"))+"--",1),a(u,{link:"",type:"primary",onClick:h},{default:r(()=>[o(s(t(n)("writingTipsOne2")),1)]),_:1}),o(", "+s(t(n)("writingTipsOne3")),1),A,o(s(t(n)("writingTipsOne4")),1)]),H,e("p",K,s(t(n)("writingTipsOne5")),1),P])]),e("div",W,[$,e("div",null,[e("p",z,s(t(n)("writingTipsTwo1")),1),F])]),e("div",G,[I,e("div",null,[e("p",J,[o(s(t(n)("writingTipsThree1")),1),e("span",M,s(t(n)("writingTipsThree2")),1)]),Q])])]),_:1})])}}});export{ae as default};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as o}from"./create-site-limit.vue_vue_type_script_setup_true_lang-3ab70be6.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./user-26797620.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{d as B,r as f,l as F,q as o,R as q,h as d,s as v,w as a,a as x,e as s,i as g,t as p,u as r,Z as P,c as C,F as R,W as I,C as M,a4 as Z,a1 as O,M as T,L as $,N as j,E as W,V as z,a3 as A}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{e as H,a as J,b as K}from"./user-26797620.js";const Q={key:0,class:"text-[12px] text-[#a9a9a9] leading-normal mt-[5px]"},X={class:"dialog-footer"},ce=B({__name:"create-site-limit",props:{siteGroup:{type:Object,default:()=>({})},uid:{type:Number,default:0}},emits:["complete"],setup(w,{expose:y,emit:L}){const c=w,u=f(!1),b=f(null),t=f({id:0,uid:c.uid,group_id:"",num:1,month:1}),m=f(!1),S=F(()=>({group_id:[{required:!0,message:o("siteGroupPlaceholder"),trigger:"blur"}],num:[{required:!0,message:o("numPlaceholder"),trigger:"blur"},{validator:(i,e,n)=>{e<=0&&n(o("numCannotLtZero")),n()}}],month:[{required:!0,message:o("monthPlaceholder"),trigger:"blur"},{validator:(i,e,n)=>{e<=0&&n(o("monthCannotLtZero")),n()}}]})),E=async i=>{m.value||!i||await i.validate(async e=>{e&&(m.value=!0,(t.value.id?H:J)(t.value).then(()=>{m.value=!1,u.value=!1,L("complete")}).catch(()=>{m.value=!1}))})},N=(i=0)=>{i?K(i).then(({data:e})=>{t.value=e,u.value=!0}):u.value=!0};return q(()=>u.value,()=>{u.value||(t.value={id:0,uid:c.uid,group_id:"",num:1,month:1})}),y({setFormData:N,loading:m}),(i,e)=>{const n=Z,U=O,_=T,V=$,D=j,h=W,G=z,k=A;return d(),v(G,{modelValue:u.value,"onUpdate:modelValue":e[5]||(e[5]=l=>u.value=l),title:r(o)("userCreateSiteLimit"),width:"700px","destroy-on-close":!0},{footer:a(()=>[x("span",X,[s(h,{onClick:e[3]||(e[3]=l=>u.value=!1)},{default:a(()=>[g(p(r(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:m.value,onClick:e[4]||(e[4]=l=>E(b.value))},{default:a(()=>[g(p(r(o)("confirm")),1)]),_:1},8,["loading"])])]),default:a(()=>[P((d(),v(D,{model:t.value,"label-width":"130px",ref_key:"formRef",ref:b,rules:r(S),class:"page-form",autocomplete:"off"},{default:a(()=>[s(_,{label:r(o)("siteGroup"),prop:"group_id"},{default:a(()=>[s(U,{modelValue:t.value.group_id,"onUpdate:modelValue":e[0]||(e[0]=l=>t.value.group_id=l),placeholder:r(o)("siteGroupPlaceholder"),disabled:t.value.id},{default:a(()=>[(d(!0),C(R,null,I(c.siteGroup,l=>(d(),v(n,{label:l.group_name,value:l.group_id},null,8,["label","value"]))),256))]),_:1},8,["modelValue","placeholder","disabled"])]),_:1},8,["label"]),s(_,{label:r(o)("createSiteNum"),prop:"num"},{default:a(()=>[x("div",null,[s(V,{modelValue:t.value.num,"onUpdate:modelValue":e[1]||(e[1]=l=>t.value.num=l),modelModifiers:{number:!0,trim:!0},class:"!w-[150px]"},null,8,["modelValue"]),t.value.group_id?(d(),C("p",Q,p(r(o)("createdSiteNum"))+":"+p(c.siteGroup[t.value.group_id].site_num),1)):M("",!0)])]),_:1},8,["label"]),s(_,{label:r(o)("createSiteTimeLimit"),prop:"month"},{default:a(()=>[s(V,{modelValue:t.value.month,"onUpdate:modelValue":e[2]||(e[2]=l=>t.value.month=l),modelModifiers:{number:!0,trim:!0},class:"!w-[150px]"},{append:a(()=>[g(p(r(o)("month")),1)]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[k,m.value]])]),_:1},8,["modelValue","title"])}}});export{ce as _};
|
||||
1
niucloud/public/admin/assets/cron-info-0e28aecc.js
Normal file
1
niucloud/public/admin/assets/cron-info-0e28aecc.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./cron-info.vue_vue_type_script_setup_true_lang-f235518e.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{d as E,r as m,n as V,l as N,h as r,s as h,w as e,a as n,e as o,i as B,t as l,u as a,q as s,Z as F,c as b,M as T,N as C,E as O,V as R,a3 as j}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";const I={class:"input-width"},S={class:"input-width"},q={key:0,class:"input-width"},J={key:1,class:"input-width"},L={class:"input-width"},M={class:"input-width"},U={class:"input-width"},Z={class:"input-width"},$={class:"input-width"},z={class:"input-width"},A={class:"input-width"},G={class:"dialog-footer"},at=E({__name:"cron-info",setup(H,{expose:v}){const c=m(!1),u=m(!0),p={count:0,create_time:"",crond_length:"",crond_type:"",crond_type_name:"",data:"",delete_time:"",last_time:"",next_time:"",status_desc:"",title:"",type:"",type_name:"",update_time:""},t=V({...p}),y=m(),w=N(()=>({}));return v({showDialog:c,setFormData:async(_=null)=>{u.value=!0,Object.assign(t,p),_&&Object.keys(t).forEach(d=>{_[d]!=null&&(t[d]=_[d])}),u.value=!1}}),(_,d)=>{const i=T,g=C,x=O,D=R,k=j;return r(),h(D,{modelValue:c.value,"onUpdate:modelValue":d[1]||(d[1]=f=>c.value=f),title:a(s)("cronInfo"),width:"550px","destroy-on-close":!0},{footer:e(()=>[n("span",G,[o(x,{type:"primary",onClick:d[0]||(d[0]=f=>c.value=!1)},{default:e(()=>[B(l(a(s)("confirm")),1)]),_:1})])]),default:e(()=>[F((r(),h(g,{model:t,"label-width":"110px",ref_key:"formRef",ref:y,rules:a(w),class:"page-form"},{default:e(()=>[o(i,{label:a(s)("title")},{default:e(()=>[n("div",I,l(t.title),1)]),_:1},8,["label"]),o(i,{label:a(s)("typeName")},{default:e(()=>[n("div",S,l(t.type_name),1)]),_:1},8,["label"]),o(i,{label:a(s)("crondType")},{default:e(()=>[t.type=="crond"?(r(),b("div",q,l(t.crond_length)+" "+l(t.crond_type_name),1)):(r(),b("div",J,l(a(s)("cron")),1))]),_:1},8,["label"]),o(i,{label:a(s)("count")},{default:e(()=>[n("div",L,l(t.count),1)]),_:1},8,["label"]),o(i,{label:a(s)("task")},{default:e(()=>[n("div",M,l(t.task),1)]),_:1},8,["label"]),o(i,{label:a(s)("data")},{default:e(()=>[n("div",U,l(JSON.stringify(t.data)),1)]),_:1},8,["label"]),o(i,{label:a(s)("statusDesc")},{default:e(()=>[n("div",Z,l(t.status_desc),1)]),_:1},8,["label"]),o(i,{label:a(s)("lastTime")},{default:e(()=>[n("div",$,l(t.last_time),1)]),_:1},8,["label"]),o(i,{label:a(s)("nextTime")},{default:e(()=>[n("div",z,l(t.next_time),1)]),_:1},8,["label"]),o(i,{label:a(s)("createTime")},{default:e(()=>[n("div",A,l(t.create_time),1)]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[k,u.value]])]),_:1},8,["modelValue","title"])}}});export{at as _};
|
||||
32
niucloud/public/admin/assets/dark-848704e9.js
Normal file
32
niucloud/public/admin/assets/dark-848704e9.js
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
import{d as _,l as d,B as r,h as a,c as n,F as u,W as p,s as f,u as s,v as g,K as v}from"./index-6fd8f478.js";/* empty css *//* empty css */const h=_({__name:"detail-form-image",props:{data:{type:Object,default:()=>({})}},setup(i){const e=i,o=d(()=>e.data.handle_field_value.map(t=>r(t)));return(t,x)=>{const c=v;return a(),n("div",null,[(a(!0),n(u,null,p(e.data.handle_field_value,(m,l)=>(a(),f(c,{src:s(r)(m),class:g(["w-[70px] h-[70px]",{"mr-[5px]":l+1<e.data.handle_field_value.length}]),fit:"contain","preview-src-list":s(o),"zoom-rate":1.2,"max-scale":7,"min-scale":.2,"initial-index":l,"hide-on-click-modal":!0},null,8,["src","class","preview-src-list","zoom-rate","min-scale","initial-index"]))),256))])}}}),B=Object.freeze(Object.defineProperty({__proto__:null,default:h},Symbol.toStringTag,{value:"Module"}));export{B as _};
|
||||
@ -0,0 +1 @@
|
||||
import{d as o,h as r,c as _,t as a}from"./index-6fd8f478.js";import{_ as n}from"./_plugin-vue_export-helper-c27b6911.js";const s={class:"form-render"},d=o({__name:"detail-form-render",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e;return(l,p)=>(r(),_("div",s,a(t.data.render_value),1))}});const c=n(d,[["__scopeId","data-v-2b402684"]]),u=Object.freeze(Object.defineProperty({__proto__:null,default:c},Symbol.toStringTag,{value:"Module"}));export{u as _};
|
||||
1
niucloud/public/admin/assets/detail-member-65d10fea.js
Normal file
1
niucloud/public/admin/assets/detail-member-65d10fea.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./detail-member.vue_vue_type_script_setup_true_lang-94a3ebc4.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css */import"./member_head-d9fd7b2c.js";import"./member-08ee6cb9.js";import"./member-point-edit.vue_vue_type_script_setup_true_lang-9250666e.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import"./member-balance-edit.vue_vue_type_script_setup_true_lang-3bc51c19.js";import"./edit-member.vue_vue_type_script_setup_true_lang-eb43d177.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index-68fc6f03.js";/* empty css */import"./index.vue_vue_type_style_index_0_lang-e1fd86ac.js";import"./attachment-ebf503f5.js";import"./index.vue_vue_type_script_setup_true_lang-80dd73f7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-4a53fa0a.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-9a3bbef3.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./sortable.esm-be94e56d.js";export{o as default};
|
||||
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/detection-f68901b4.js
Normal file
1
niucloud/public/admin/assets/detection-f68901b4.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as w,r as f,a5 as b,Z as y,h as i,c as d,s as k,w as n,a as l,t as _,u as t,q as a,e,C as S,aj as C,ak as B,a0 as E,a9 as z,a3 as D}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{w as N}from"./tools-1d3824c5.js";const V={class:"main-container min-h-[70vh]"},j={class:"panel-title !text-sm"},I={class:"text-[14px]"},T={class:"mt-[20px]"},q={class:"panel-title !text-sm"},L={class:"text-[14px]"},O={class:"mt-[20px]"},Z={class:"panel-title !text-sm"},A={class:"text-[14px]"},F={key:0},G={key:1},H={class:"mt-[20px]"},J={class:"panel-title !text-sm"},K={class:"text-[14px]"},M={key:0},P={key:1},ie=w({__name:"detection",setup(Q){const o=f({}),p=f(!0);return(()=>{N().then(u=>{o.value=u.data,p.value=!1})})(),(u,U)=>{const s=C,r=B,h=b("Select"),c=E,v=b("CloseBold"),g=z,x=D;return y((i(),d("div",V,[Object.keys(o.value).length?(i(),k(g,{key:0,class:"box-card !border-none",shadow:"never"},{default:n(()=>[l("div",null,[l("h3",j,_(t(a)("serverInformation")),1),l("div",I,[e(r,{data:o.value.server,size:"large"},{default:n(()=>[e(s,{prop:"name",label:t(a)("environment"),align:"left","min-width":"200"},null,8,["label"]),e(s,{prop:"server",label:t(a)("version"),align:"left","min-width":"140"},null,8,["label"])]),_:1},8,["data"])])]),l("div",T,[l("h3",q,_(t(a)("systemDemand")),1),l("div",L,[e(r,{data:o.value.server_version,size:"large"},{default:n(()=>[e(s,{prop:"name",label:t(a)("environment"),align:"left","min-width":"200"},null,8,["label"]),e(s,{prop:"demand",label:t(a)("demand"),align:"left","min-width":"140"},null,8,["label"]),e(s,{prop:"server",label:t(a)("version"),align:"left","min-width":"140"},null,8,["label"])]),_:1},8,["data"])])]),l("div",O,[l("h3",Z,_(t(a)("authorityStatus")),1),l("div",A,[e(r,{data:o.value.system_variables,size:"large"},{default:n(()=>[e(s,{prop:"name",label:t(a)("name"),align:"left","min-width":"200"},null,8,["label"]),e(s,{prop:"need",label:t(a)("demand"),align:"left","min-width":"140"},null,8,["label"]),e(s,{label:t(a)("status"),align:"left","min-width":"140"},{default:n(({row:m})=>[m.status?(i(),d("span",F,[e(c,{color:"green"},{default:n(()=>[e(h)]),_:1})])):(i(),d("span",G,[e(c,{color:"red"},{default:n(()=>[e(v)]),_:1})]))]),_:1},8,["label"])]),_:1},8,["data"])])]),l("div",H,[l("h3",J,_(t(a)("process")),1),l("div",K,[e(r,{data:o.value.process,size:"large"},{default:n(()=>[e(s,{prop:"name",label:t(a)("name"),align:"left","min-width":"200"},null,8,["label"]),e(s,{prop:"need",label:t(a)("demand"),align:"left","min-width":"140"},null,8,["label"]),e(s,{label:t(a)("status"),align:"left","min-width":"140"},{default:n(({row:m})=>[m.status?(i(),d("span",M,[e(c,{color:"green"},{default:n(()=>[e(h)]),_:1})])):(i(),d("span",P,[e(c,{color:"red"},{default:n(()=>[e(v)]),_:1})]))]),_:1},8,["label"])]),_:1},8,["data"])])])]),_:1})):S("",!0)])),[[x,p.value]])}}});export{ie as default};
|
||||
1
niucloud/public/admin/assets/developer_token-d0bbbae3.js
Normal file
1
niucloud/public/admin/assets/developer_token-d0bbbae3.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as w,r as i,cs as E,n as y,q as l,h as _,c as V,e as n,w as s,Z as B,s as D,a as c,t as d,u as r,i as T,ct as C,L as N,M as R,E as q,N as F,a9 as I,a3 as L}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */const M={class:"main-container"},P={class:"panel-title !text-sm"},S={class:"text-[14px] text-[#a9a9a9] leading-tight mt-[10px]"},J=w({__name:"developer_token",setup(U){const e=i(!0),o=i({token:""});E().then(({data:t})=>{e.value=!1,t.token&&(o.value=t)});const u=i(),v=y({token:[{required:!0,message:l("tokenPlaceholder"),trigger:"blur"}]}),f=async t=>{e.value||!t||await t.validate(async a=>{a&&(e.value=!0,C(o.value).then(()=>{e.value=!1}).catch(()=>{e.value=!1}))})};return(t,a)=>{const k=N,m=R,h=q,g=F,x=I,b=L;return _(),V("div",M,[n(x,{class:"box-card !border-none",shadow:"never"},{default:s(()=>[B((_(),D(g,{class:"page-form",model:o.value,"label-width":"0",ref_key:"formRef",ref:u,rules:v},{default:s(()=>[c("h3",P,d(r(l)("developerTokenEdit")),1),n(m,{label:"",prop:"token"},{default:s(()=>[c("div",null,[n(k,{modelValue:o.value.token,"onUpdate:modelValue":a[0]||(a[0]=p=>o.value.token=p),modelModifiers:{trim:!0},placeholder:r(l)("tokenPlaceholder"),class:"input-width",clearable:"",maxlength:"30"},null,8,["modelValue","placeholder"])]),c("div",S,d(r(l)("tokenTips")),1)]),_:1}),n(m,{label:""},{default:s(()=>[n(h,{type:"primary",loading:e.value,onClick:a[1]||(a[1]=p=>f(u.value))},{default:s(()=>[T(d(r(l)("save")),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model","rules"])),[[b,e.value]])]),_:1})])}}});export{J as default};
|
||||
1
niucloud/public/admin/assets/dict-283c3be2.js
Normal file
1
niucloud/public/admin/assets/dict-283c3be2.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as e}from"./index-6fd8f478.js";function c(t){return e.get("dict/dict",{params:t})}function i(t){return e.get(`dict/dict/${t}`)}function u(t){return e.post("dict/dict",t,{showErrorMessage:!0,showSuccessMessage:!0})}function o(t){return e.put(`dict/dict/${t.id}`,t,{showErrorMessage:!0,showSuccessMessage:!0})}function n(t){return e.delete(`dict/dict/${t}`,{showErrorMessage:!0,showSuccessMessage:!0})}function a(t,s){return e.put(`dict/dictionary/${t}`,s,{showErrorMessage:!0,showSuccessMessage:!0})}function d(){return e.get("dict/all")}export{u as a,c as b,d as c,n as d,o as e,i as g,a as s};
|
||||
1
niucloud/public/admin/assets/dict-d687cbb7.js
Normal file
1
niucloud/public/admin/assets/dict-d687cbb7.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./dict.vue_vue_type_style_index_0_lang-9d9ce62b.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./dict-283c3be2.js";export{o as default};
|
||||
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/diy-c2743b21.js
Normal file
1
niucloud/public/admin/assets/diy-c2743b21.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as t}from"./index-6fd8f478.js";function i(e){return t.get("diy/diy",{params:e})}function u(e){return t.get("diy/carousel_search",{params:e})}function n(e){return t.post("diy/diy",e,{showSuccessMessage:!0})}function r(e){return t.put(`diy/diy/${e.id}`,e,{showSuccessMessage:!0})}function o(e){return t.put(`diy/use/${e.id}`,e,{showSuccessMessage:!0})}function a(e){return t.put("diy/diy/share",e,{showSuccessMessage:!0})}function c(e){return t.delete(`diy/diy/${e}`,{showSuccessMessage:!0})}function g(e){return t.get("diy/init",{params:e})}function y(e){return t.get("diy/link",{params:e})}function d(e){return t.get("diy/bottom",{params:e})}function f(e){return t.get("diy/bottom/config",{params:e})}function h(e){return t.post("diy/bottom",e,{showSuccessMessage:!0})}function p(e){return t.get("diy/template",{params:e})}function m(e){return t.get("diy/template/pages",{params:e})}function D(e){return t.get("diy/route",{params:e})}function l(){return t.get("diy/route/apps")}function S(e){return t.get("diy/route/info",{params:e})}function w(e){return t.put("diy/route/share",e,{showSuccessMessage:!0})}function M(e){return t.get("diy/decorate",{params:e})}function P(e){return t.put("diy/change",e,{showSuccessMessage:!0})}function T(e){return t.get("diy/apps")}function L(e){return t.post("diy/copy",e,{showSuccessMessage:!0})}function k(e){return t.get("diy/page_link",{params:e})}function B(e){return t.get("diy/theme/color",{params:e})}function $(e){return t.get("diy/theme",{params:e})}function b(e){return t.post("diy/theme/add",e)}function C(e){return t.put(`diy/theme/edit/${e.id}`,e,{showSuccessMessage:!0})}function R(e){return t.delete(`diy/theme/delete/${e}`,{showSuccessMessage:!0})}function A(e){return t.post("diy/theme",e,{showSuccessMessage:!0})}export{h as A,$ as B,k as C,u as a,d as b,b as c,R as d,C as e,B as f,y as g,m as h,g as i,r as j,n as k,M as l,P as m,T as n,p as o,i as p,o as q,L as r,A as s,c as t,a as u,l as v,D as w,S as x,w as y,f as z};
|
||||
1
niucloud/public/admin/assets/diy-e1949c05.js
Normal file
1
niucloud/public/admin/assets/diy-e1949c05.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/diy_form-febbd1b0.js
Normal file
1
niucloud/public/admin/assets/diy_form-febbd1b0.js
Normal file
@ -0,0 +1 @@
|
||||
import{P as t}from"./index-6fd8f478.js";function s(e){return t.get("diy/form",{params:e})}function o(e){return t.get("diy/form/list",{params:e})}function i(e){return t.get("diy/form/select",{params:e})}function u(e){return t.post("diy/form",e,{showSuccessMessage:!0})}function n(e){return t.put(`diy/form/${e.form_id}`,e,{showSuccessMessage:!0})}function m(e){return t.put("diy/form/share",e,{showSuccessMessage:!0})}function c(e){return t.put("diy/form/delete",e,{showSuccessMessage:!0})}function f(e){return t.get("diy/form/init",{params:e})}function a(e){return t.get("diy/form/fields/list",{params:e})}function d(e){return t.get("diy/form/records/field/stat",{params:e})}function g(e){return t.get("diy/form/template",{params:e})}function y(e){return t.put("diy/form/status",e,{showErrorMessage:!0,showSuccessMessage:!0})}function F(e){return t.get("diy/form/type")}function p(e){return t.get(`diy/form/write/${e}`)}function l(e){return t.put("diy/form/write",e,{showSuccessMessage:!0})}function S(e){return t.get(`diy/form/submit/${e}`)}function h(e){return t.put("diy/form/submit",e,{showSuccessMessage:!0})}function w(e){return t.get("diy/form/records",{params:e})}function D(e){return t.put("diy/form/records/delete",e,{showSuccessMessage:!0})}function M(e){return t.get("diy/form/records/member/stat",{params:e})}function b(e){return t.post("diy/form/copy",e,{showSuccessMessage:!0})}export{F as a,S as b,p as c,l as d,h as e,g as f,i as g,n as h,f as i,u as j,y as k,s as l,b as m,c as n,m as o,D as p,w as q,M as r,a as s,d as t,o as u};
|
||||
1
niucloud/public/admin/assets/edit-03b4fc9d.css
Normal file
1
niucloud/public/admin/assets/edit-03b4fc9d.css
Normal file
@ -0,0 +1 @@
|
||||
.el-collapse-item__wrap{border-bottom:none}.el-collapse-item__content{padding-bottom:0}.el-collapse-item__header{font-size:var(--el-font-size-base)}.display-block .el-form-item__content{display:block}.edit-component-wrap .content-wrap .edit-attr-item-wrap,.edit-component-wrap .style-wrap .edit-attr-item-wrap{border-top:2px solid var(--el-color-info-light-8);padding-top:20px}.edit-component-wrap .content-wrap .edit-attr-item-wrap:first-of-type,.edit-component-wrap .style-wrap .edit-attr-item-wrap:first-of-type{border-top:none;padding-top:0}.diy-nav-slider .el-slider__input{width:100px}.full-container[data-v-c52a9bdb]{height:calc(100vh - 60px)}.preview-iframe[data-v-c52a9bdb]{height:calc(100vh - 160px)}.component-list[data-v-c52a9bdb]{background:var(--el-bg-color)}.component-list ul li[data-v-c52a9bdb]:not(.disabled):hover{color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.diy-view-wrap[data-v-c52a9bdb]{background:var(--el-bg-color-page)}.diy-view-wrap .preview-head[data-v-c52a9bdb]{background-image:url(./diy_preview_head-8c072698.png);background-color:var(--el-bg-color)}.quick-action[data-v-c52a9bdb],.edit-attribute-wrap[data-v-c52a9bdb]{background:var(--el-bg-color)}.edit-attribute-wrap .box-card[data-v-c52a9bdb]{border:none}.diy-view-wrap .preview-head[data-v-c52a9bdb]{padding:28px 15px 0}.diy-view-wrap .preview-head .content-wrap[data-v-c52a9bdb]{height:30px}.diy-view-wrap .preview-head.style-1 .content-wrap .title-wrap[data-v-c52a9bdb]{height:30px;line-height:30px}.diy-view-wrap .preview-head.style-2 .content-wrap .title-wrap[data-v-c52a9bdb]{display:flex;align-items:center}.diy-view-wrap .preview-head.style-2 .content-wrap .title-wrap>div[data-v-c52a9bdb]{height:30px;line-height:30px;max-width:150px;font-size:14px}.diy-view-wrap .preview-head.style-2 .content-wrap .title-wrap>div[data-v-c52a9bdb]:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;max-width:200px}.diy-view-wrap .preview-head.style-3 .content-wrap[data-v-c52a9bdb]{display:flex;align-items:center}.diy-view-wrap .preview-head.style-3 .content-wrap .title-wrap[data-v-c52a9bdb]{height:30px;max-width:85px;margin-right:5px;display:flex;align-items:center;justify-content:center}.diy-view-wrap .preview-head.style-3 .content-wrap .search[data-v-c52a9bdb]{flex:1;padding-right:10px;padding-left:31px;position:relative;background-color:#fff;text-align:left;border-radius:30px;height:30px;line-height:30px;border:1px solid #eeeeee;color:#666;display:flex;align-items:center;margin-right:105px;overflow:hidden;box-sizing:border-box}.diy-view-wrap .preview-head.style-3 .content-wrap .search span[data-v-c52a9bdb]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.diy-view-wrap .preview-head.style-3 .content-wrap .search .iconfont[data-v-c52a9bdb]{color:#909399;font-size:16px;margin-right:5px}.diy-view-wrap .preview-head.style-4 .content-wrap[data-v-c52a9bdb]{display:flex;align-items:center}.diy-view-wrap .preview-head.style-4 .content-wrap .title-wrap[data-v-c52a9bdb]{flex:none;margin:0 5px;max-width:180px;font-size:14px}
|
||||
1
niucloud/public/admin/assets/edit-10c323a7.js
Normal file
1
niucloud/public/admin/assets/edit-10c323a7.js
Normal file
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/edit-83d6b988.js
Normal file
1
niucloud/public/admin/assets/edit-83d6b988.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
niucloud/public/admin/assets/edit-associated-1194e535.js
Normal file
1
niucloud/public/admin/assets/edit-associated-1194e535.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as o}from"./edit-associated.vue_vue_type_script_setup_true_async_true_lang-ff88dd33.js";import"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./tools-1d3824c5.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{d as S,r as s,l as I,q as a,h as u,s as f,w as d,a as O,e as t,i as C,t as M,u as n,c as _,F as b,W as h,ay as W,a6 as q,a4 as j,a1 as z,M as H,L as J,N as Q,E as X,V as Y}from"./index-6fd8f478.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as Z,m as ee,n as le}from"./tools-1d3824c5.js";const ae={class:"dialog-footer"},_e=S({__name:"edit-associated",props:{table_name:{type:String,required:!0}},emits:["complete"],setup(E,{expose:K,emit:N}){const U=E,m=s(!1),x=s(""),V={type:"has_one",name:"",addon:"system",model:"",local_key:"",foreign_key:""},o=s({...V}),g=s(),T=I(()=>({type:[{required:!0,message:a("associatedTypePlaceholder"),trigger:"change"}],name:[{required:!0,message:a("associatedNamePlaceholder"),trigger:"blur"}],addon:[{required:!0,message:a("addonsPlaceholder"),trigger:"change"}],model:[{required:!0,message:a("associatedModelPlaceholder"),trigger:"change"}],local_key:[{required:!0,message:a("localKeyPlaceholder"),trigger:"change"}],foreign_key:[{required:!0,message:a("foreignKeyPlaceholder"),trigger:"blur"}]})),k=s([]),w=r=>{ee(r).then(e=>{k.value=e.data})},P=s([]),A=r=>{le({table_name:r}).then(e=>{P.value=e.data})},v=s([]);(async()=>{const{data:r}=await Z({});v.value=[{title:"系统",key:"system"}],v.value.push(...r),w({addon:"system"})})();const B=r=>{o.value.model="",w({addon:r})},L=r=>{var e;(e=g.value)==null||e.clearValidate(),r()},G=async r=>{r&&await r.validate(async e=>{e&&(N("complete",W(o.value)),m.value=!1)})};return K({showDialog:m,setFormData:async(r=null)=>{A(U.table_name),r?o.value=q(r):o.value=q(V),m.value=!0}}),(r,e)=>{const p=j,c=z,i=H,D=J,R=Q,F=X,$=Y;return u(),f($,{modelValue:m.value,"onUpdate:modelValue":e[8]||(e[8]=l=>m.value=l),title:x.value,width:"500px","before-close":L,"destroy-on-close":!0},{footer:d(()=>[O("span",ae,[t(F,{onClick:e[6]||(e[6]=l=>m.value=!1)},{default:d(()=>[C(M(n(a)("cancel")),1)]),_:1}),t(F,{type:"primary",onClick:e[7]||(e[7]=l=>G(g.value))},{default:d(()=>[C(M(n(a)("confirm")),1)]),_:1})])]),default:d(()=>[t(R,{model:o.value,"label-width":"120px",ref_key:"formRef",ref:g,rules:n(T),class:"page-form"},{default:d(()=>[t(i,{label:n(a)("associatedType"),prop:"type"},{default:d(()=>[t(c,{placeholder:n(a)("associatedTypePlaceholder"),modelValue:o.value.type,"onUpdate:modelValue":e[0]||(e[0]=l=>o.value.type=l),class:"input-width"},{default:d(()=>[t(p,{label:n(a)("hasOne"),value:"has_one"},null,8,["label"]),t(p,{label:n(a)("hasMany"),value:"has_many"},null,8,["label"])]),_:1},8,["placeholder","modelValue"])]),_:1},8,["label"]),t(i,{label:n(a)("associatedName"),prop:"name"},{default:d(()=>[t(D,{modelValue:o.value.name,"onUpdate:modelValue":e[1]||(e[1]=l=>o.value.name=l),modelModifiers:{trim:!0},placeholder:n(a)("associatedNamePlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),t(i,{label:n(a)("addons"),prop:"addon"},{default:d(()=>[t(c,{modelValue:o.value.addon,"onUpdate:modelValue":e[2]||(e[2]=l=>o.value.addon=l),placeholder:n(a)("addonsPlaceholder"),class:"input-width",onChange:B},{default:d(()=>[(u(!0),_(b,null,h(v.value,(l,y)=>(u(),f(p,{label:l.title,value:l.key,key:y},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),t(i,{label:n(a)("associatedModel"),prop:"model"},{default:d(()=>[t(c,{placeholder:n(a)("associatedModelPlaceholder"),modelValue:o.value.model,"onUpdate:modelValue":e[3]||(e[3]=l=>o.value.model=l),class:"input-width",filterable:""},{default:d(()=>[(u(!0),_(b,null,h(k.value,l=>(u(),f(p,{label:l,value:l,key:l},null,8,["label","value"]))),128))]),_:1},8,["placeholder","modelValue"])]),_:1},8,["label"]),t(i,{prop:"local_key",label:n(a)("localKey")},{default:d(()=>[t(c,{class:"input-width",placeholder:n(a)("localKeyPlaceholder"),modelValue:o.value.local_key,"onUpdate:modelValue":e[4]||(e[4]=l=>o.value.local_key=l)},{default:d(()=>[(u(!0),_(b,null,h(P.value,(l,y)=>(u(),f(p,{label:`${l.name}:${l.comment}`,value:l.name,key:y},null,8,["label","value"]))),128))]),_:1},8,["placeholder","modelValue"])]),_:1},8,["label"]),t(i,{label:n(a)("foreignKey"),prop:"foreign_key"},{default:d(()=>[t(D,{modelValue:o.value.foreign_key,"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.foreign_key=l),modelModifiers:{trim:!0},placeholder:n(a)("foreignKeyPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title"])}}});export{_e as _};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user