export default {
  /* 提供页面间存在数据传递需要的通用规范 */
  data() {
    return {
      prevData: {}
    }
  },
  created() {
    this.prevData = JSON.parse(decodeURIComponent(this.$route.query.data || '{}'))
    console.log('received prev data:', this.prevData)
  },
  methods: {
    // transferUrl方法是给上一个页面用的
    // config是下一个页面需要的数据格式
    // extra是额外的参数提供源，可以是数组，如果当前页面存在prevData，方法会自动引入，不用2次传入
    transferData(config, extra) {
      if (!config) return {}
      let source = {
        ...this.prevData
      }
      if (extra) {
        if (Array.isArray(extra)) {
          extra.forEach(single => source = {
            ...source,
            ...single
          })
        } else {
          source = {
            ...source,
            ...extra
          }
        }
      }
      // pick
      let nextData = {}
      let nextKeys = Array.isArray(config) ? config : Object.keys(config)
      nextKeys.forEach(key => nextData[key] = source[key])
      return nextData
    },
    transferTo: function(path, config, extra, useReplace = false) {
      if (typeof config === 'boolean') useReplace = config
      if (typeof extra === 'boolean') useReplace = extra
      if (!extra && typeof config === 'object') extra = config
      const nextData = this.transferData(config, extra)
      console.log('transfer next data:', nextData)
      // 以此解决query会将所有参数转化为string的问题
      const location = {
        path: path,
        query: { data: encodeURIComponent(JSON.stringify(nextData)) }
      }
      return useReplace ? this.$router.replace(location) : this.$router.push(location)
    }
  }
}
