' +
'';
}
/** 构建省/市两级联动:填充选项并按已有值回选(兼容旧格式:湖南衡阳 / 湖南省衡阳市 / 北京市-东城区) */
function initAreaCascade(areas) {
var provMap = {}; // code -> name
var childMap = {}; // parent_code -> [{code,name}]
(areas || []).forEach(function (a) {
if (!a.parent_code) {
provMap[a.code] = a.name;
} else {
(childMap[a.parent_code] = childMap[a.parent_code] || []).push({ code: a.code, name: a.name });
}
});
var provCodes = Object.keys(provMap);
function fillProv($box) {
var html = '';
provCodes.forEach(function (code) {
html += '';
});
$box.find('.area-prov').html(html);
}
function fillCity($box, provCode) {
var html = '';
(childMap[provCode] || []).forEach(function (c) {
html += '';
});
$box.find('.area-city').html(html);
}
function combine($box) {
var target = $box.data('target');
var provName = $box.find('.area-prov option:selected').text();
var cityName = $box.find('.area-city option:selected').text();
var provShort = provName ? stripAreaSuffix(provName) : '';
var cityShort = cityName ? stripAreaSuffix(cityName) : '';
var val = provShort;
// 直辖市(省/市同名)只存省
if (cityShort && cityShort !== provShort) val += cityShort;
$box.closest('.form-item').find('input[name="' + target + '"]').val(val);
}
/** 按短名匹配省(如 湖南 / 新疆 / 北京) */
function matchProv(shortName) {
var sorted = provCodes.slice().sort(function (a, b) { return b.length - a.length; });
for (var i = 0; i < sorted.length; i++) {
if (stripAreaSuffix(provMap[sorted[i]]) === shortName) return sorted[i];
}
return '';
}
/** 按短名匹配市 */
function matchCity(provCode, shortName) {
var list = childMap[provCode] || [];
for (var i = 0; i < list.length; i++) {
if (stripAreaSuffix(list[i].name) === shortName) return list[i].code;
}
return '';
}
/** 解析已有值 -> [省短名, 市短名](兼容 湖南衡阳 / 湖南省衡阳市 / 北京市-东城区 等格式) */
function parseValue(value) {
var v = String(value || '').trim();
if (!v) return ['', ''];
if (v.indexOf('-') >= 0) {
var parts = v.split('-');
return [stripAreaSuffix(parts[0]), parts[1] ? stripAreaSuffix(parts[1]) : ''];
}
// 无分隔符:最长省名前缀匹配
var sorted = provCodes.slice().sort(function (a, b) { return b.length - a.length; });
for (var i = 0; i < sorted.length; i++) {
var pShort = stripAreaSuffix(provMap[sorted[i]]);
if (pShort && v.indexOf(pShort) === 0) {
var rest = v.substring(pShort.length);
return [pShort, rest];
}
}
return ['', v];
}
$('.area-cascade').each(function () {
var $box = $(this);
var target = $box.data('target');
var current = $box.closest('.form-item').find('input[name="' + target + '"]').val() || '';
var parsed = parseValue(current);
var provShort = parsed[0];
var cityShort = parsed[1];
fillProv($box);
var provCode = provShort ? matchProv(provShort) : '';
if (!provCode) return;
$box.find('.area-prov').val(provCode);
fillCity($box, provCode);
// 直辖市:市=省本身
if (cityShort === provShort) {
var muniCode = matchCity(provCode, cityShort);
if (muniCode) $box.find('.area-city').val(muniCode);
return;
}
var cityCode = cityShort ? matchCity(provCode, cityShort) : '';
if (cityCode) $box.find('.area-city').val(cityCode);
});
// 联动事件
$('.area-cascade').off('change.area').on('change.area', '.area-prov', function () {
var $box = $(this).closest('.area-cascade');
fillCity($box, $(this).val());
combine($box);
});
$('.area-cascade').off('change.areaCity').on('change.areaCity', '.area-city', function () {
combine($(this).closest('.area-cascade'));
});
}
/** 国籍是否为中国大陆/港澳台(此时家乡置灰不可填) */
function isCnNationality(n) {
var v = String(n || '').trim();
return v === '中国' || v === '中国香港' || v === '中国澳门' || v === '中国台湾';
}
/** 工作履历行模板 */
function expRowHtml(e) {
e = e || {};
var empty = function (v) { return (v === null || v === undefined) ? '' : v; };
var opts = '';
companyOptions.forEach(function (c) {
opts += '';
});
return '
' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'
';
}
function openForm(person, accounts, phone, email, experiences) {
var isEdit = !!person;
var p = person || {};
var pPhone = phone || '';
var pEmail = email || '';
// Tab1 基本信息
var baseHtml =
'