陶杰
2024-09-11 8840efb29d8818afcfd2176914bcf4811d9c60fe
mixin/mixin.js
@@ -1,506 +1,279 @@
import {
    mapState
   mapState
} from 'vuex'
import store from "../store";
import environments from '@/environments'
// import environments from '@/environments'
const mixinsCommon = {
    computed: {
        ...mapState({
            hasLogin: state => {
                // console.log('computed hasLogin',state.hasLogin,state)
                return state.hasLogin || false
            },
            selftype: state => {
                return (state.currentInfo || {}).type || ''
            },
            currentInfo: state => {
                return state.currentInfo || {}
            },
            cache_address: state => {
                return state.cache_address || {}
            },
            cache_user: state => {
                return state.currentInfo || {}
            },
            sign: state => {
                return state.sign || {}
            },
            // currentEnId: state=>{
            //    // console.log('currentEnId',state.currentInfo.enId,state.currentInfo)
            //    return state.currentInfo.enId || ''
            // }
        }),
    },
    data() {
        return {
            list: [],
            query: {},
            page: {
                size: 10,
                current: 1,
                total: 0,
            },
            style: {
                'color': '#fff'
            },
            listApi: '',
            regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
            regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
   computed: {
      ...mapState({
         hasLogin: state => {
            // console.log('computed hasLogin',state.hasLogin,state)
            return state.hasLogin || false
         },
         selftype: state => {
            return (state.currentInfo || {}).type || ''
         },
         currentInfo: state => {
            return state.currentInfo || {}
         },
         cache_address: state => {
            return state.cache_address || {}
         },
         cache_user: state => {
            return state.currentInfo || {}
         },
         sign: state => {
            return state.sign || {}
         },
         // currentEnId: state=>{
         //    // console.log('currentEnId',state.currentInfo.enId,state.currentInfo)
         //    return state.currentInfo.enId || ''
         // }
      }),
   },
   data() {
      return {
         list: [],
         query: {},
         page: {
            size: 10,
            current: 1,
            total: 0,
         },
         style: {
            'color': '#fff'
         },
         listApi: '',
         // regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
         // regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
         regUserName: '',
         regAvatarUrl: '',
      }
   },
   methods: {
      copyTxt(txt) {
         uni.setClipboardData({
            data: txt, //要被复制的内容
            success: () => { //复制成功的回调函数
               uni.showToast({ //提示
                  title: '复制成功'
               })
            }
         })
      },
      onChooseavatar(e) {
         let self = this;
         let {
            avatarUrl
         } = e.detail;
         this.regAvatarUrl = avatarUrl
         console.log('avatarUrl', this.regAvatarUrl)
      },
      onBindblur(e) {
         this.regUserName = e.detail.value; // 获取微信昵称
      },
      onBindinput(e) {
         this.regUserName = e.detail.value; // 获取微信昵称
      },
        }
    },
    methods: {
        onChooseavatar(e) {
            let self = this;
            let {
                avatarUrl
            } = e.detail;
            this.regAvatarUrl = avatarUrl
            console.log('avatarUrl', this.regAvatarUrl)
        },
        onBindblur(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        onBindinput(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        randomAccess(min, max) {
            return Math.floor(Math.random() * (min - max) + max)
        },
        getRandomName(NameLength) {
            let name = ""
            for (let i = 0; i < NameLength; i++) {
                let unicodeNum = ""
                unicodeNum = this.randomAccess(0x4e00, 0x9fa5).toString(16)
                name += this.decodeUnicode(unicodeNum)
            }
            return name
        },
        decodeUnicode(str) {
            //Unicode显示方式是\u4e00
            str = "\\u" + str
            str = str.replace(/\\/g, "%");
            //转换中文
            str = unescape(str);
            //将其他受影响的转换回原来
            str = str.replace(/%/g, "\\");
            return str;
        },
        async onWxCheckSubmit() {
            if (this.regUserName == '微信用户') {
                this.$message.showToast('昵称不合规,不可以叫做:微信用户哈~')
                return
            }
            //保存一下
            //先上传图片
            if (this.regAvatarUrl ===
                'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png') {
                var picture = this.regAvatarUrl
                //更新接口
                this.$message.showLoading()
                const {
                    code
                } = await this.$http.request('post', "/api/current/user/update", {
                    data: {
                        ...this.dto,
                        nickName: this.regUserName,
                        picture: picture
                    }
                })
                this.$message.hideLoading()
                this.$forceUpdate()
                if (code == 0) {
                    this.$refs.popup_info.close()
                    this.$message.showToast('设置成功')
                    this.currentInfo.picture = picture
                    this.currentInfo.nickName = this.regUserName
                } else {
                }
            } else {
                this.$http.upload(this.regAvatarUrl).then(async res => {
                    var picture = res.data && res.data.length > 0 && res.data[0].url || ''
                    //更新接口
                    this.$message.showLoading()
                    const {
                        code
                    } = await this.$http.request('post', "/api/current/user/update", {
                        data: {
                            ...this.currentInfo,
                            nickName: this.regUserName,
                            picture: picture
                        }
                    })
                    this.$message.hideLoading()
                    this.$forceUpdate()
                    if (code == 0) {
                        this.$refs.popup_info.close()
                        this.$message.showToast('设置成功')
                        this.currentInfo.picture = picture
                        this.currentInfo.nickName = this.regUserName
                    } else {
                    }
                })
            }
        },
      handleContact(e) {
         console.log(e.detail.path)
         console.log(e.detail.query)
      },
        async getUserProfile(e) {
            this.$message.showLoading()
            const res = await wx.getUserProfile({
                desc: '用于完善会员资料',
            });
            console.log(res);
            this.$message.hideLoading()
            this.login_Wx(res.userInfo.avatarUrl, res.userInfo.nickName)
        },
        login_Wx(imgurl, nickname) {
            //获取openId
            // /wx/jscode2session
            let inviter = this.$storage.getItem('inviter') || ''
            let inviterName = this.$storage.getItem('inviterName') || ''
            //有效24小时
            if (inviter) {
                var inviterTime = this.$storage.getItem('inviterTime')
                if (new Date().getTime() > parseInt(inviterTime) + 1000 * 3600 * 24) {
                    inviter = ''
                    inviterName = ''
                    this.$storage.removeItem('inviter')
                    this.$storage.removeItem('inviterTime')
                    this.$storage.removeItem('inviterName')
                }
            }
      previewImg(url) {
         if (url) {
            uni.previewImage({
               urls: [url]
            })
         }
      },
      checkFormValues(dto, keys) {
         if (keys) {
            for (var key of keys) {
               if (!dto[key]) {
                  return false
               }
            }
         }
         return true
      },
      async refreshList(type = 'get') {
         this.page.current = 1
         await this.getList(type)
      },
      async getList(type = 'get') {
         if (this.listApi) {
            this.$message.showLoading()
            const {
               data
            } = await this.$http.request(type, this.listApi, {
               params: {
                  ...this.query,
                  ...this.page
               },
               data: {
                  ...this.query,
                  ...this.page
               }
            })
            if (data) {
               if (data && Array.isArray(data)) {
                  this.list = data || []
                  this.page.total = data.length || 0
               } else {
                  if (this.page.current === 1) {
                     this.list = data.records || []
                  } else {
                     //根据id去重正常
                     var ids = []
                     var idsMap = {}
                     for (var item of this.list) {
                        ids.push(item.id)
                        if (item.id) {
                           idsMap[item.id] = item
                        }
                     }
                     var hasnew = false
                     for (var item of data.records) {
                        if (ids.indexOf(item.id) < 0) {
                           this.list.push(item)
                        } else {
                           //最好更新一下
                           idsMap[item.id] = {
                              ...idsMap[item.id],
                              ...item, //覆盖了
                           }
                           hasnew = true
                        }
                     }
                     if (hasnew) {
                        this.$forceUpdate()
                     }
                  }
                  this.page.total = data.total || 0
               }
               if (this.getList_after) {
                  this.getList_after()
               }
            }
            this.$message.hideLoading()
         }
      },
      async getMore(type = 'get') {
         if (this.page.total > this.page.current * this.page.size) {
            this.page.current += 1
            await this.getList(type)
         }
      },
      backHome() {
         uni.reLaunch({
            url: '/pages/home/home'
         })
      },
      goto(url, check = false) {
         if (check) {
            console.log('currentInfo', this.currentInfo)
            if (!this.currentInfo.id) {
               this.$message.showToast('请先登陆')
               return
            }
         }
         uni.navigateTo({
            url
         })
      },
      backpage() {
         // this.$router.go(-1)
         uni.navigateBack()
      }
      // #ifdef APP || H5
      ,
      async appdownload(url, name = '') {
         await this.$message.confirm('确定下载此文件吗')
         let _this = this
         if (url) {
            // var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
            // uni.downloadFile({
            //    url: url2,
            //    success: (res) => {
            //       if (res.statusCode === 200) {
            //          _this.$message.showToast('下载成功')
            //       } else {
            //          console.log(res)
            //          _this.$message.showToast('下载失败')
            //       }
            //    },
            //    fail: (res) => {
            //       console.log(res)
            //       _this.$message.showToast('下载失败')
            //    }
            // });
            _this.$message.showLoading()
            uni.downloadFile({
               url: url, //下载地址接口返回
               success: (data) => {
                  _this.$message.hideLoading()
                  console.log('success', data)
                  if (data.statusCode === 200) {
                     //文件保存到本地
                     uni.saveFile({
                        tempFilePath: data.tempFilePath, //临时路径
                        success: function(res) {
                           uni.showToast({
                              icon: 'none',
                              mask: true,
                              title: '文件已保存:' + res
                                 .savedFilePath, //保存路径
                              duration: 2000,
                           });
                           setTimeout(() => {
                              //打开文档查看
                              uni.openDocument({
                                 filePath: res.savedFilePath,
                                 success: function(res) {
                                    // console.log('打开文档成功');
                                 }
                              });
                           }, 2000)
                        },
                        fail: (err) => {
                           console.log(err);
                           uni.showToast({
                              icon: 'none',
                              mask: true,
                              title: '下载成功保存失败',
                           });
                        },
                     });
                  }
               },
               fail: (err) => {
                  _this.$message.hideLoading()
                  console.log(err);
                  uni.showToast({
                     icon: 'none',
                     mask: true,
                     title: '失败请重新下载',
                  });
               },
            });
         }
      }
      // #endif
            const tmp = this;
            this.$message.showLoading()
            this.openid = this.$storage.getItem('openid');
            this.tel = this.$storage.getItem('tel');
            console.log('info,info,info,info,info,info', this.openid, this.tel);
            if (!!this.openid && !!this.tel) {
                // this.login = true;
            } else {
                // this.login = false;
                console.log('wx.login');
                wx.login({
                    success: async res => {
                        if (res.code) {
                            //微信登录成功 已拿到code
                            // tmp.login = true;
                            // tmp.jsCode = res.code; //保存获取到的code
                            console.log('abcd', res.code);
                            // this.$http.request('post',`/api/login/wechat`,{data:{code:tmp.jsCode}})
                            this.$storage.setItem('jsCode', res.code);
                            const res2 = await wx.getUserInfo();
                            console.log('res', res2);
                            this.tcode = res.code || ''
                            // if (nickname == '微信用户' || true) {
                            //    //跳出弹出框,获取具体用户信息
                            //    tmp.$message.hideLoading()
                            //    this.$refs.popup_info.open()
                            // } else {
                            await this.$store.dispatch('loginwx', {
                                code: res.code,
                                imgurl: imgurl,
                                nickname: nickname,
                                inviter: inviter
                            });
                            tmp.$message.hideLoading()
                            this.$forceUpdate()
                            //延迟,如果用户昵称是微信用户的话?
                            setTimeout(() => {
                                if (tmp.currentInfo && tmp.currentInfo.id) {
                                    if (tmp.currentInfo.nickName == '微信用户') {
                                        tmp.$refs.popup_info && tmp.$refs.popup_info.open()
                                    }
                                }
                            }, 500)
                            // }
                        } else {
                            tmp.$message.hideLoading()
                            tmp.$message.showToast('微信登录失败');
                        }
                    },
                    error: res => {
                        console.log('wx.login error', res);
                        tmp.$message.hideLoading()
                        tmp.$message.showToast('微信授权失败');
                    }
                });
            }
        },
        previewImg(url) {
            if (url) {
                uni.previewImage({
                    urls: [url]
                })
            }
        },
        checkFormValues(dto, keys) {
            if (keys) {
                for (var key of keys) {
                    if (!dto[key]) {
                        return false
                    }
                }
            }
            return true
        },
        async refreshList() {
            this.page.current = 1
            await this.getList()
        },
        async getList(type = 'get') {
            if (this.listApi) {
                this.$message.showLoading()
                const {
                    data
                } = await this.$http.request(type, this.listApi, {
                    params: {
                        ...this.query,
                        ...this.page
                    },
                    data: {
                        ...this.query,
                        ...this.page
                    }
                })
                if (data) {
                    if (this.page.current == 1) {
                        this.list = data.records || []
                    } else {
                        //根据id去重正常
                        var ids = []
                        for (var item of this.list) {
                            ids.push(item.id)
                        }
                        for (var item of data.records) {
                            if (ids.indexOf(item.id) < 0) {
                                this.list.push(item)
                            }
                        }
                    }
                    this.page.total = data.total || 0
                }
                this.$message.hideLoading()
            }
        },
        async getMore(type = 'get') {
            if (this.page.total > this.page.current * this.page.size) {
                this.page.current += 1
                await this.getList(type)
            }
        },
        backHome() {
            uni.reLaunch({
                url: '/pages/home/home'
            })
        },
        goto(url, check = false) {
            if (check) {
                console.log('currentInfo', this.currentInfo)
                if (!this.currentInfo.id) {
                    this.$message.showToast('请先登陆')
                    return
                }
            }
            uni.navigateTo({
                url
            })
        },
        backpage() {
            // this.$router.go(-1)
            uni.navigateBack()
        }
        // #ifdef APP || H5
        ,
        async appdownload(url, name = '') {
            await this.$message.confirm('确定下载此文件吗')
            let _this = this
            if (url) {
                // var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
                // uni.downloadFile({
                //    url: url2,
                //    success: (res) => {
                //       if (res.statusCode === 200) {
                //          _this.$message.showToast('下载成功')
                //       } else {
                //          console.log(res)
                //          _this.$message.showToast('下载失败')
                //       }
                //    },
                //    fail: (res) => {
                //       console.log(res)
                //       _this.$message.showToast('下载失败')
                //    }
                // });
                _this.$message.showLoading()
                uni.downloadFile({
                    url: url, //下载地址接口返回
                    success: (data) => {
                        _this.$message.hideLoading()
                        console.log('success', data)
                        if (data.statusCode === 200) {
                            //文件保存到本地
                            uni.saveFile({
                                tempFilePath: data.tempFilePath, //临时路径
                                success: function (res) {
                                    uni.showToast({
                                        icon: 'none',
                                        mask: true,
                                        title: '文件已保存:' + res
                                            .savedFilePath, //保存路径
                                        duration: 2000,
                                    });
                                    setTimeout(() => {
                                        //打开文档查看
                                        uni.openDocument({
                                            filePath: res.savedFilePath,
                                            success: function (res) {
                                                // console.log('打开文档成功');
                                            }
                                        });
                                    }, 2000)
                                },
                                fail: (err) => {
                                    console.log(err);
                                    uni.showToast({
                                        icon: 'none',
                                        mask: true,
                                        title: '下载成功保存失败',
                                    });
                                },
                            });
                        }
                    },
                    fail: (err) => {
                        _this.$message.hideLoading()
                        console.log(err);
                        uni.showToast({
                            icon: 'none',
                            mask: true,
                            title: '失败请重新下载',
                        });
                    },
                });
            }
        }
        // #endif
        // #ifdef MP
        ,
        async wxdownload(url, name = '') {
            await this.$message.confirm('是否要下载此文件')
            var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
            let that = this
            that.$message.showLoading()
            // wx.sa
            // wx.downloadFile({
            //    url: url2,
            //    success: res => {
            //       that.$message.showToast('下载成功')
            //    },
            //    fail: res => {
            //       that.$message.showToast('下载失败')
            //    },
            //    complete: res => {
            //       that.$message.hideLoading()
            //    }
            // })
            wx.downloadFile({
                url: url,
                timeout: 120000,
                success(res) {
                    that.$message.hideLoading()
                    console.log('res', res)
                    if (res.statusCode === 200) {
                        const filePath = res.tempFilePath
                        if (filePath.endsWith('.jpg') ||
                            filePath.endsWith('.jpeg') ||
                            filePath.endsWith('.png') ||
                            filePath.endsWith('.jpg')) {
                            wx.saveImageToPhotosAlbum({
                                filePath: filePath,
                                success: function (res) {
                                    that.$message.showToast('保存图片成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        } else if (filePath.endsWith('.mp4') ||
                            filePath.endsWith('.flv') ||
                            filePath.endsWith('.avi') ||
                            filePath.endsWith('.wmv') ||
                            filePath.endsWith('.mpeg')) {
                            wx.saveVideoToPhotosAlbum({
                                filePath: filePath,
                                success: function (res) {
                                    that.$message.showToast('保存视频成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        } else {
                            wx.openDocument({
                                filePath: filePath,
                                showMenu: true, //关键点
                                success: function (res) {
                                    console.log('打开文档成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        }
                    } else {
                        that.$message.showToast('下载失败,服务器内部错误')
                    }
                },
                fail: res => {
                    that.$message.hideLoading()
                    that.$message.showToast('下载失败')
                },
                complete: res => {
                }
            })
        }
        // #endif
        // #ifdef PUB_CUSTOMER
        ,
        async submitShopping(dto) {
         //提交到购物车中
            this.$message.showLoading()
            await this.$store.dispatch('submitShopping',dto);
            this.$message.hideLoading()
        }
        // #endif
    }
   }
}
export default mixinsCommon