vimo-dt
Version:
A Vue2.x UI Project For Mobile & HyBrid
149 lines (131 loc) • 4.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = require('../../util/type');
var _picker = require('../picker');
var _picker2 = _interopRequireDefault(_picker);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var CityPicker = {
present: function present(options) {
var startCode = options.startCode || '1';
var selectedCity = options.selectedCity;
if (!selectedCity || !(0, _type.isArray)(selectedCity) || (0, _type.isArray)(selectedCity) && (selectedCity.length === 0 || selectedCity.length > 3)) {
selectedCity = ['110000', '110100'];
}
if ((0, _type.isArray)(selectedCity)) {
if (selectedCity.length === 2 && !selectedCity[0]) {
selectedCity = ['110000', '110100'];
}
if (selectedCity.length === 3 && (!selectedCity[0] || !selectedCity[1])) {
selectedCity = ['110000', '110100', '110101'];
}
}
var provinceCode = selectedCity[0];
var cityCode = selectedCity[1];
var districtCode = selectedCity[2];
var defaultFetchData = function defaultFetchData() {
return new Promise(function (resolve) {
return resolve([]);
});
};
var fetchData = options.fetchData || defaultFetchData;
var columns = [];
fetchData(startCode).then(function (data) {
if (data && (0, _type.isArray)(data) && data.length > 0) {
columns = [{
name: 'province',
selectedIndex: getCodeIndex(provinceCode, data),
align: 'right',
options: data
}];
console.assert(provinceCode, 'provinceCode数据为空, 请检查代码!');
fetchData(provinceCode).then(function (data) {
columns.push({
name: 'city',
selectedIndex: getCodeIndex(cityCode, data),
align: 'left',
options: data
});
if (districtCode) {
fetchData(cityCode).then(function (data) {
columns.push({
name: 'district',
selectedIndex: getCodeIndex(districtCode, data),
align: 'left',
options: data
});
initPicker(columns);
});
} else {
initPicker(columns);
}
});
} else {
console.error('CityPicker无法获取省份数据, 请检查代码');
}
});
function getCodeIndex() {
var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var data = arguments[1];
code = code.toString();
if (code) {
for (var i = 0, len = data.length; len > i; i++) {
var item = data[i];
if (item.value && item.value.toString() === code) {
return i;
}
}
}
return 0;
}
function initPicker(columns) {
if (columns.length > 2) {
columns.forEach(function (column) {
column.optionsWidth = '80px';
});
}
var data = {
cssClass: 'small-text',
isH5: true,
buttons: [{
role: 'cancel',
text: '取消',
handler: function handler() {
'use strict';
options.onCancel && options.onCancel();
}
}, {
text: '确定',
handler: function handler(data) {
options.onSelect && options.onSelect(data);
}
}],
columns: columns,
onSelect: onSelectHandler
};
_picker2.default.present(data);
}
function onSelectHandler(data) {
if (data.columnIndex === 0) {
fetchData(data.value).then(function (data) {
columns[1].options = data;
_picker2.default.resetColumn(1);
if (columns[1].options[0] && selectedCity.length > 2) {
fetchData(columns[1].options[0].value).then(function (data) {
columns[2].options = data;
_picker2.default.resetColumn(2);
});
}
});
}
if (data.columnIndex === 1 && selectedCity.length > 2) {
fetchData(data.value).then(function (data) {
columns[2].options = data;
_picker2.default.resetColumn(2);
});
}
}
}
};
exports.default = CityPicker;