captain-ui
Version:
有赞vue wap业务组件库
214 lines (178 loc) • 5.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
require("vant/es/toast/style");
var _toast = _interopRequireDefault(require("vant/es/toast"));
require("vant/es/cell-group/style");
var _cellGroup = _interopRequireDefault(require("vant/es/cell-group"));
require("vant/es/icon/style");
var _icon = _interopRequireDefault(require("vant/es/icon"));
require("vant/es/cell/style");
var _cell = _interopRequireDefault(require("vant/es/cell"));
require("vant/es/popup/style");
var _popup = _interopRequireDefault(require("vant/es/popup"));
var _local_storage = _interopRequireDefault(require("@youzan/utils/browser/local_storage"));
var _ajax = _interopRequireDefault(require("../../../common/ajax"));
var COUNTRY_SELECT_HASH = 'show-country';
var COUNTRY_HEADER_HEIGHT = 36;
var COUNTRY_ITEM_HEIGHT = 44;
var _default = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('van-popup', {
staticClass: "cap-login__country",
attrs: {
"lock-on-scroll": "",
"position": "right",
"close-on-click-overlay": false
},
model: {
value: _vm.value,
callback: function callback($$v) {
_vm.value = $$v;
},
expression: "value"
}
}, [_c('div', {
ref: "selects",
staticClass: "cap-login__country-selects"
}, _vm._l(_vm.countryList, function (countryGroup) {
return _c('div', {
key: countryGroup.category
}, [countryGroup.category !== 'default' ? _c('div', {
staticClass: "cap-login__country-category",
attrs: {
"id": countryGroup.category
}
}, [_vm._v("\n " + _vm._s(countryGroup.category) + "\n ")]) : _vm._e(), _c('van-cell-group', {
attrs: {
"border": false
}
}, _vm._l(countryGroup.data, function (countryItem) {
return _c('van-cell', {
key: countryItem.code,
attrs: {
"title": _vm._f("getCountryBrief")(countryItem)
},
on: {
"click": function click($event) {
_vm.hideCountrySelect(countryItem);
}
}
}, [_vm.country == countryItem.code ? _c('template', {
slot: "right-icon"
}, [_c('van-icon', {
staticClass: "van-cell__right-icon cap-login__country-selected",
attrs: {
"name": "success"
}
})], 1) : _vm._e()], 2);
}), 1)], 1);
}), 0), _c('div', {
staticClass: "cap-login__country-panel"
}, [_vm._l(_vm.countryList, function (countryGroup) {
return [countryGroup.category !== 'default' ? _c('a', {
key: countryGroup.category,
on: {
"click": function click($event) {
_vm.scrollPageTo(countryGroup.category);
}
}
}, [_vm._v("\n " + _vm._s(countryGroup.category) + "\n ")]) : _vm._e()];
})], 2)]);
},
components: {
'van-popup': _popup.default,
'van-cell': _cell.default,
'van-icon': _icon.default,
'van-cell-group': _cellGroup.default
},
filters: {
getCountryBrief: function getCountryBrief(data) {
return data.name + " " + data.code;
}
},
props: {
value: Boolean,
country: String,
countryListUrl: String
},
data: function data() {
var countryListStr = _local_storage.default.getItem('sso_country_list');
var countryList = null;
try {
countryList = JSON.parse(countryListStr);
} catch (e) {}
return {
countryList: countryList
};
},
watch: {
value: function value(newVal) {
if (newVal && !this.countryList) {
this.fetchCountryList();
}
}
},
created: function created() {
window.addEventListener('hashchange', this.handleHashChange);
},
destroyed: function destroyed() {
window.removeEventListener('hashchange', this.handleHashChange);
},
methods: {
hideCountrySelect: function hideCountrySelect(country) {
this.$emit('change', country);
window.history.back();
},
handleHashChange: function handleHashChange(event) {
var oldURL = event.oldURL;
var newURL = event.newURL;
var countrySelectHash = '#' + COUNTRY_SELECT_HASH;
if (oldURL.indexOf(countrySelectHash) !== -1 && newURL.indexOf(countrySelectHash) === -1) {
this.$emit('input', false);
}
},
fetchCountryList: function fetchCountryList() {
var _this = this;
_toast.default.loading();
(0, _ajax.default)({
url: this.countryListUrl
}).then(function (res) {
// 这个接口返回200为成功,醉了
if (+res.code !== 200) {
(0, _toast.default)(res.msg);
_this.hideCountrySelect();
return;
}
_toast.default.clear();
var countryList = res.data;
try {
_local_storage.default.setItem('sso_country_list', JSON.stringify(countryList));
} catch (e) {}
_this.countryList = countryList;
}).catch(function () {
_this.hideCountrySelect();
(0, _toast.default)('网络出了点问题,请稍后重试');
});
},
scrollPageTo: function scrollPageTo(id) {
var totalHeight = 0;
for (var index = 0; index < this.countryList.length; index++) {
var countryGroup = this.countryList[index] || {};
if (countryGroup.category === id) {
break;
}
if (countryGroup.category !== 'default') {
totalHeight += COUNTRY_HEADER_HEIGHT;
}
totalHeight += COUNTRY_ITEM_HEIGHT * (countryGroup.data || []).length;
}
this.$refs.selects.scrollTop = totalHeight;
}
}
};
exports.default = _default;