UNPKG

vimo-dt

Version:

A Vue2.x UI Project For Mobile & HyBrid

149 lines (131 loc) 4.33 kB
'use strict'; 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;