2024-08-31 01:03:37 +08:00

328 lines
14 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(){
// 比较版本号7.1.19 >= 5.3
var compareVers = function (ver1, ver2) {
ver1 = ver1.toString();
ver2 = ver2.toString();
const pVer1 = ver1.split('.').map(Number);
const pVer2 = ver2.split('.').map(Number);
const mxLen = Math.max(pVer1.length, pVer2.length);
for (var i = 0; i < mxLen; i++) {
const v1 = pVer1[i] || 0;
const v2 = pVer2[i] || 0;
if (v1 > v2) return 1;
if (v1 < v2) return -1;
}
return 0;
}
// 环境检测项赋值
var envView = function(){
var errList = [];
var chkList = ['path_writable', 'php_version', 'allow_url_fopen']; // 检查项
var $table = $(".step-box.env .env-table");
request('install/index/env', {}, function(result){
tips && tips.close();
if (!result || !result.code) {
Tips.tips(LNG['admin.install.envReqErr'], 'warning', 3000);
$table.find('.row-state .icon').removeClass().addClass('icon icon-warn ri-more-fill');
return false;
}
var data = result.data;
$table.find('.env-item-list>p').each(function(){
var key = $(this).attr('class');
var val = data[key];
var txt = '';
switch (key) {
case 'path_writable':
if (val !== true) {
txt = '<span title-timeout="100" title="sudo chmod -Rf 777 '+val+'">'+val+'</span>';
val = false;
}
break;
case 'php_version':
txt = val;
val = compareVers(val, 5.3) > 0 ? true : false;
break;
case 'php_bit':
txt = val;
val = val == 64 ? true : false;
break;
default:break;
}
if (txt) $(this).find('.row-value').html(txt);
var state = val === true ? 'success' : 'error';
$(this).find('.row-state .icon').removeClass().addClass('icon icon-'+state);
if (val !== true) errList.push(key);
});
var button = errList.length ? LNG['common.skip'] : LNG['common.nextStep'];
$table.find(".form-target-save").removeClass('hidden');
$table.find(".form-save-button").text(button);
// 使用帮助
if(errList.length) $table.find("a.help").removeClass('hidden');
});
// 绑定点击事件
$table.delegate('.form-save-button', 'click', function(){
var errs = _.intersection(errList, chkList);
if(!errs.length) return stepNext(this, 1);
var errMsg = [LNG['admin.install.ensureNoError']];
_.each(errs, function(value, i){
errMsg.push((i+1)+'.'+$table.find("."+value+">span:eq(0)").text());
});
Tips.tips(errMsg.join('<br/>'), false, 3000);
});
}
// 数据库配置提交
var dbSave = function(FormData, update){
var update = update || false;
var formMaker = new kodApi.formMaker({formData:FormData });
formMaker.renderTarget($(".step-box.db .db-table"));
if(update) {
$(".step-box.db .db-table").find('button,input').prop('disabled', true);
$(".step-box.db .info-alert").removeClass('hidden');
}
$(".step-box.db .form-save-button").text(LNG['common.ok']);
$(".step-box.db .form-save-button").click(function(){
var data = formMaker.getValue();
if(!data) return false;
var _this = this;
data = $.extend({}, {action: 'db'}, data);
var tips = Tips.loadingMask($('.content-main'),false,0.2);
request('install/index/save', data, function(result){
tips.close();
// 是否删除已存在数据库
if(result.info && result.info == '10001'){
$.dialog.confirm(result.data,function(){
data.del = 1;
dbSaveSet(_this, data);
});
return false;
}
var delay = null;
if(!result.code || (result.info && result.info == '10000')) delay = 5000;
var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
Tips.close(msg, result.code, delay);
if(!result.code) return;
stepNext(_this, 2);
}, function(){
tips.close();
});
});
}
/**
* 数据库配置(删除旧数据)提交
* @param {*} _this
* @param {*} data
*/
var dbSaveSet = function(_this, data){
var tips = Tips.loadingMask($('.content-main'),false,0.2);
request('install/index/save', data, function(result){
tips.close();
var delay = !result.code ? 5000 : null;
var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
Tips.close(msg, result.code, delay);
if(!result.code) return;
stepNext(_this, 2);
}, function(){
tips.close();
});
}
/**
* 管理员账号提交
* @param {*} formMaker
* @returns
*/
var userSave = function (formMaker) {
var data = formMaker.getValue();
Events.trigger('install.userSetStart',data);
if(!data || !data.name || !data.password || !data.password2) return false;
if (data.password != data.password2) {
formMaker.setValue('password2', '');
Tips.tips(LNG['user.rootPwdEqual'], 'warning');
return false;
}
delete data.password2;
// var _this = this;
var _this = '.step-box.user .form-save-button'; // 为了和旧版统一,实际没有必要
data = $.extend({}, {action: 'user'}, data);
var tips = Tips.loadingMask($('.content-main'),false,0.2);
request('install/index/save', data, function(result){
tips.close();
var delay = !result.code ? 5000 : null;
var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
Tips.close(msg, result.code, delay);
if(!result.code) return;
// 显示admin账号密码
name = data.name;
password = data.password;
LocalData.del('fileHistoryLastPath-1');
var update = result.info || 0;
stepLast(_this, update); // 安装成功,提示登录
}, function(){
tips.close();
});
}
/**
* 数据库、缓存配置
*/
var dbView = function(){
var package = './app/controller/install/static/package.html'
requireAsync(package, function(FormData){
// 获取json数据
FormData = FormData.replace(/\n/g,"").replace(/\r/g,""); //去掉字符串中的换行符
FormData = FormData.replace(/\n/g,"").replace(/\s|\xA0/g,""); //去掉字符串中的所有空格
FormData = eval('(' + FormData + ')'); //将字符串解析成json对象
FormData.redisMore.info.openMore.display = LNG['common.more']+' <b class="caret"></b>';
FormData.redisMore.info.openMore.className = 'btn btn-default btn-sm';
request('install/index/env', {db: 1}, function(result){
if(_.isEmpty(result.data)) return dbSave(FormData);
_.each(FormData, function(value, key){
if(result.data[key]) value.value = result.data[key];
});
dbSave(FormData, true);
});
});
}
/**
* 管理员账号配置
*/
var name = '';
var password = '';
var userView = function(fast){
var auto = $('.install-box .install-fast').attr('auto');
var formData = {
"name":{
"type":"input",
"value":auto || 'admin',
// "display":"<i class='font-icon ri-user-line-3'></i>",
"display":LNG['user.account'],
"attr":{"placeholder":LNG['user.inputName']},
"desc":LNG['user.rootName'],
"require":"1"
},
"password":{
"type":"password",
"value":'',
// "display":"<i class='font-icon ri-key-line'></i>",
"display":LNG['common.password'],
"attr":{"placeholder":LNG['user.inputPwd']},
"desc":LNG['user.rootPwd'],
"require":"1"
},
"password2":{
"type":"password",
"value":'',
// "display":"<i class='font-icon ri-key-line'></i>",
"display":LNG['common.password'],
"attr":{"placeholder":LNG['user.inputPwd']},
"desc":LNG['user.rootPwdRepeat'],
"require":"1"
},
};
var formMaker = new kodApi.formMaker({formData:formData });
formMaker.renderTarget($(".step-box.user .user-table"));
Events.trigger('install.userSetReady',formMaker);
tips && tips.close();
$(".step-box.user .form-save-button").text(LNG['common.ok']);
$('.step-box.user .form-box input').keyEnter(function(){userSave(formMaker);});
$(".step-box.user .form-save-button").click(function(){userSave(formMaker);});
}
// 下一步
var stepNext = function(_this, index){
$(_this).parents('.check-result').find('.progress-box>div:eq('+index+')').addClass('active');
$(_this).parents('.check-result').find('.step-box').addClass('hidden');
$(_this).parents('.step-box').next().removeClass('hidden');
}
// 最后一步
var stepLast = function(_this, update){
$(_this).parents('.check-result').find('.title-box,.progress-box').addClass('hidden');
$(_this).parents('.content-main').children('.link').removeClass('hidden');
$(_this).parents('.check-result').find('.step-box').addClass('hidden');
$(_this).parents('.step-box').next().removeClass('hidden');
// 跳转登录
if(update) $(".step-box.msg .title").text(LNG['admin.install.updateSuccess']);
var text = LNG['user.account']+": "+name+"&nbsp;&nbsp;&nbsp;&nbsp;"+LNG['common.password']+": "+password;
$(".step-box.msg .desc").html(text);
var count = 5;
var timer = null;
timer = setInterval(function () {
if (count > 0) {
count = count - 1;
$('.content-main .link .delay').text(count);
} else {
clearInterval(timer);
window.location.href = $('.content-main .link a').attr('href');
}
}, 1000);
}
var request = function(url, data, callback, callbackError){
// 兼容处理: https://qastack.cn/programming/26261001/warning-about-http-raw-post-data-being-deprecated
data = data || {};
data._installTime = time();
$.ajax({
url:API_HOST + url,
data:data,
type: 'POST',
dataType:'json',
error: function (xhr, textStatus, errorThrown) {
if(callbackError) callbackError();
var error = xhr.responseText;
var dialog = $.dialog.list['ajaxErrorDialog'];
if(error && !_.trim(error)) return;// 有内容,但内容为空白则不处理;
Tips.close(LNG['explorer.systemError'], false);
if (xhr.status == 0 && error == '') {
error = LNG['explorer.networkError'];
}
error = '<div class="ajaxError" style="font-size:14px;padding:40px;color:#FF9800;">' + error + '</div>';
if (!dialog) {
$.dialog({
id: 'ajaxErrorDialog',
padding: 0,
width: '60%',
height: '65%',
fixed: true,
resize: true,
title: 'Ajax Error',
content: ''
});
}
$.iframeHtml($(".ajaxErrorDialog .aui-content"), error);
},
success: function(data) {
callback(data);
}
});
}
var tips = window.Tips ? window.Tips.loadingMask() : null;
Events.bind('windowReady',function(){
try {
// 检测是否为一键安装,一键安装直接展示账号界面
var fast = parseInt($('.install-box .install-fast').attr('fast'));
if(!fast) {
envView(); // 1.环境配置
dbView(); // 2.数据库配置
}
userView(fast); // 3.管理员账号配置
new kodApi.copyright();
$(".content-main-message .body").perfectScroll();
} catch(e) {
tips && tips.close();
console.error(e);
var msg = LNG['admin.install.pageError']+'<hr>'+e;
Tips.notify({icon:"error",title:LNG['common.tips'],content:msg});
_.delay(function(){
if ($('.progress-box>.active:last').attr('data') == 'env') {
var $env = $(".step-box.env");
if (!$env.hasClass('hidden') && $env.find('.form-target-save').hasClass('hidden')) {
$env.find('.env-table .row-state .icon').removeClass().addClass('icon icon-warn ri-more-fill');
}
}
}, 1000);
}
});
})();