Files
SMANAGE/backup/GERP old/User/config.html
T

240 lines
13 KiB
HTML

<style>
.layui-form-label {width: 120px !important;padding: 9px 0 !important;}
.layui-input-block {margin-left: 150px !important;}
@media screen and (max-width: 768px) {
.layui-form-label {width: 80px !important;}
.layui-input-block {margin-left: 110px !important;}
}
.form-required::after {content: '*';color: #ff4d4f;margin-left: 4px;}
.layui-form-item {margin-bottom: 25px;clear: both;}
.submit-area {margin-top: 30px;padding-top: 20px;border-top: 1px solid #eee;}
.layui-form-radio {margin-right: 30px !important;margin-top: 3px !important;}
.card-container {margin-bottom: 20px;}
</style>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<!-- 个人信息表单卡片 -->
<div class="layui-card card-container">
<div class="layui-card-header">
<i class="layui-icon layui-icon-user" style="margin-right: 8px;"></i>个人信息设置
</div>
<div class="layui-card-body">
<form class="layui-form" id="configForm" lay-filter="configForm">
<div id="formContainer"></div>
<div class="layui-form-item submit-area">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" type="submit" lay-submit>
<i class="layui-icon layui-icon-release"></i> 立即提交
</button>
<button type="reset" class="layui-btn layui-btn-primary">
<i class="layui-icon layui-icon-refresh"></i> 重置
</button>
</div>
</div>
</form>
</div>
</div>
<!-- 密码修改表单卡片 -->
<div class="layui-card card-container">
<div class="layui-card-header">
<i class="layui-icon layui-icon-lock" style="margin-right: 8px;"></i>密码修改
</div>
<div class="layui-card-body">
<form class="layui-form" id="passwordForm" lay-filter="passwordForm">
<div id="passwordFormContainer"></div>
<div class="layui-form-item submit-area">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" type="submit" lay-submit>
<i class="layui-icon layui-icon-release"></i> 确认修改
</button>
<button type="reset" class="layui-btn layui-btn-primary">
<i class="layui-icon layui-icon-refresh"></i> 重置
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
var globalLoadIndex = null;
const formConfig = [
{field: 'UserName',label: '昵称',type: 'input',placeholder: '请输入您的昵称',verify: 'required',required: true,autocomplete: 'off'},
{field: 'UserGender',label: '性别',type: 'radio',required: true,options: [{value: '-1',title: '未选择'},{value: '1',title: '男'},{value: '0',title: '女'}]},
{field: 'UserPersonalSignature',label: '简介',type: 'input',placeholder: '请输入个人简介(选填)',verify: '',required: false,autocomplete: 'off',affix: 'clear'},
{field: 'UserEmail',label: '邮箱',type: 'input',placeholder: '请输入您的邮箱(必填)(需重新验证)',verify: 'emailOptional',required: true,autocomplete: 'off'},
{field: 'UserTele',label: '手机号',type: 'input',placeholder: '请输入您的手机号(选填)',verify: 'phoneOptional',required: false,autocomplete: 'off',affix: 'clear',className: 'demo-phone'}
];
const passwordFormConfig = [
{field: 'UserPassword',label: '原密码',type: 'input',inputType: 'password',placeholder: '请输入原密码',verify: 'required',required: true,autocomplete: 'off'},
{field: 'UserNewPassword',label: '新密码',type: 'input',inputType: 'password',placeholder: '请输入新密码',verify: 'newPassword',required: true,autocomplete: 'off'},
{field: 'UserNewPasswordConfirm',label: '确认新密码',type: 'input',inputType: 'password',placeholder: '请再次输入新密码',verify: 'confirmPassword',required: true,autocomplete: 'off'}
];
window.onload = function() {
layui.use(['form', 'jquery', 'layer'], function () {
const $ = layui.jquery;
const form = layui.form;
const layer = layui.layer;
globalLoadIndex = layer.load(2);
try {
renderForm(formConfig, $, 'formContainer');
renderForm(passwordFormConfig, $, 'passwordFormContainer');
form.render();
fetchUserConfig(form, $, layer);
bindFormSubmit(form, $, layer);
bindPasswordFormSubmit(form, $, layer);
} catch (error) {
console.error('表单初始化异常:', error);
layer.close(globalLoadIndex);
Toast.error('初始化失败', '表单加载出错,请刷新页面重试', 3000);
}
});
};
function renderForm(config, $, containerId) {
const formContainer = $('#' + containerId);
let formHtml = '';
config.forEach((field) => {
let itemHtml = `<div class="layui-form-item" id="form-item-${field.field}">`;
itemHtml += `<label class="layui-form-label ${field.required ? 'form-required' : ''}">${field.label}</label>`;
itemHtml += `<div class="layui-input-block">`;
switch(field.type) {
case 'input':
itemHtml += `<input type="${field.inputType || 'text'}" name="${field.field}" lay-verify="${field.verify || ''}" placeholder="${field.placeholder || ''}" autocomplete="${field.autocomplete || 'off'}" class="layui-input ${field.className || ''}" ${field.affix ? `lay-affix="${field.affix}"` : ''} ${field.reqtext ? `lay-reqtext="${field.reqtext}"` : ''} id="input-${field.field}">`;
break;
case 'radio':
field.options.forEach((option) => {
itemHtml += `<input type="radio" name="${field.field}" value="${option.value}" title="${option.title}" lay-skin="primary" id="radio-${field.field}-${option.value}">`;
});
break;
}
itemHtml += `</div></div>`;
formHtml += itemHtml;
});
formContainer.html(formHtml);
}
function fetchUserConfig(form, $, layer) {
fetch('/API/User/RequestPersonalConfig', {
method: 'GET',
mode: 'cors',
credentials: 'include',
headers: {'Accept': 'application/json'}
})
.then(response => {
if (!response.ok) throw new Error(`HTTP 错误,状态码:${response.status}`);
return response.json();
})
.then(apiData => {
const userData = apiData.data || {};
formConfig.forEach(field => {
const fieldName = field.field;
let value = userData[fieldName] === null ? '' : userData[fieldName];
value = value !== undefined ? value : '';
if (field.type === 'radio') {
const radioValue = String(value);
$(`input[name="${fieldName}"]`).prop('checked', false);
const $targetRadio = $(`input[name="${fieldName}"][value="${radioValue}"]`);
if ($targetRadio.length > 0) $targetRadio.prop('checked', true);
else $(`input[name="${fieldName}"][value="-1"]`).prop('checked', true);
} else $(`input[name="${fieldName}"]`).val(value);
});
form.render('radio');
layer.close(globalLoadIndex);
})
.catch(error => {
console.error('获取用户配置失败:', error);
layer.close(globalLoadIndex);
if (typeof Toast !== 'undefined') Toast.error('配置获取操作', `获取用户信息出错:${error.message}`, 3000);
else layer.msg(`获取用户信息出错:${error.message}`, {icon: 5, time: 3000});
});
}
function bindFormSubmit(form, $, layer) {
form.on('submit(configForm)', function(data) {
const loadIndex = layer.load(2);
const formData = new FormData($('#configForm')[0]);
fetch('/API/User/ModifyPersonalConfig', {
method: 'POST',
body: formData,
credentials: 'include'
})
.then(response => {
layer.close(loadIndex);
return response.json();
})
.then(result => {
if (result.code === 0) {
if (typeof Toast !== 'undefined') Toast.success('配置变更操作', result.msg || '修改成功', 3000);
else layer.msg(result.msg || '修改成功', {icon: 6, time: 2000});
if (window.parent && window.parent.document && typeof TempLate === 'function') TempLate("/API/User/UserInformation", window.parent.document);
} else {
if (typeof Toast !== 'undefined') Toast.error('配置变更操作', `操作失败:${result.error || result.msg || '未知错误'}`, 3000);
else layer.msg(`操作失败:${result.error || result.msg || '未知错误'}`, {icon: 5, time: 3000});
console.error('配置更新失败:', result);
}
if (result.reload) window.parent.location.reload();
})
.catch(error => {
layer.close(loadIndex);
if (typeof Toast !== 'undefined') Toast.error('配置变更操作', `请求失败:${error.message}`, 3000);
else layer.msg(`请求失败:${error.message}`, {icon: 5, time: 3000});
console.error('提交异常:', error);
});
return false;
});
}
function bindPasswordFormSubmit(form, $, layer) {
form.on('submit(passwordForm)', function(data) {
const loadIndex = layer.load(2);
const formData = new FormData($('#passwordForm')[0]);
fetch('/API/User/ModifyPassword', {
method: 'POST',
body: formData,
credentials: 'include'
})
.then(response => {
layer.close(loadIndex);
return response.json();
})
.then(result => {
if (result.code === 0) {
if (typeof Toast !== 'undefined') Toast.success('密码修改', result.msg, 3000);
else layer.msg(result.msg, {icon: 6, time: 2000});
setTimeout(() => {
if (window.parent && window.parent.location) window.parent.location.href = "https://ugm.gvsds.com/Auth/DeleteAllCookies";
else location.href = "https://ugm.gvsds.com/Auth/DeleteAllCookies";
}, 2000);
} else {
if (typeof Toast !== 'undefined') Toast.error('密码修改', result.msg, 3000);
else layer.msg(result.msg, {icon: 5, time: 3000});
}
})
.catch(error => {
layer.close(loadIndex);
if (typeof Toast !== 'undefined') Toast.error('密码修改', `请求失败:${error.message}`, 3000);
else layer.msg(`请求失败:${error.message}`, {icon: 5, time: 3000});
console.error('密码修改异常:', error);
});
return false;
});
}
layui.use('form', function() {
const form = layui.form;
form.verify({
phoneOptional: function(value) {if (value.trim() !== '' && !/^1[3-9]\d{9}$/.test(value)) return '手机号格式不正确';},
emailOptional: function(value) {if (value.trim() !== '' && !/^[\w.-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}$/.test(value)) return '邮箱格式不正确';},
required: [/\S+/,'此字段不能为空'],
newPassword: function(value) {
// if (value.length < 6 || value.length > 16) return '新密码长度必须为6-16位';
if (!/^[\w@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+$/.test(value)) return '新密码只能包含字母、数字和特殊字符';
},
confirmPassword: function(value) {
const newPwd = layui.$('input[name="UserNewPassword"]').val();
if (value !== newPwd) return '两次输入的新密码不一致';
}
});
});
</script>