12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <template>
- <view @click="gotoPage()"><slot></slot></view>
- </template>
- <script>
- const navType = {
- push: 'push',
- replace: 'replace',
- replaceAll: 'replaceAll',
- pushTab: 'pushTab'
- };
- export default {
- props: {
- to: {
- type: [String, Object],
- },
- stopNavto: {
- type: Boolean,
- default: false
- },
- navType: {
- type: String,
- default: 'push'
- },
- level: {
- type: Number,
- default: 1
- },
- append: {
- type: Boolean,
- default: false
- }
- },
- methods: {
- formatNav(text) {
- if (text != null && text.constructor === String) {
- text = text.replace(/\'/g, '');
- text = text.replace(/(\w+)(?=:)/g, function(val) {
- return `"${val}"`;
- });
- text = text.replace(/:\s*([^,{}\s"]+)/g, function(val) {
- const arr = val.split(':');
- return `:"${arr[1].trim()}"`;
- });
- try {
- text = JSON.parse(text);
- } catch (e) {}
- }
- if (this.append) {
- let pathArr = this.$Route.path.split('/');
- pathArr.splice(pathArr.length - this.level, this.level);
- pathArr = pathArr.join('/');
- if (text.constructor === Object) {
- if (text.path) {
- text.path = pathArr + text.path;
- }
- } else {
- text = pathArr + text;
- }
- }
- return text;
- },
- gotoPage() {
- if (this.stopNavto) {
- return true;
- }
- const type = navType[this.navType];
- if (type == null) {
- return console.error(` "navType" unknown type \n\n value:${Object.values(navType).join('、')}`);
- }
- const navInfo = this.formatNav(this.to);
- this.$Router[type](navInfo);
- }
- }
- };
- </script>
- <style></style>
|