123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- export const tools = {
- filters: {
- },
- computed: {
- },
- methods: {
- //富文本的回调
- navigate(e) {
- if (e.href && e.href.indexOf('http') == -1) { //不完整的链接
- //详情
- let res = e.href.match(new RegExp("(a)|(\\d+)", 'g'));
- if (res.length == 2) {
- this.$u.route('/pages/article/detail', {
- id: res[1]
- });
- return;
- }
- // #ifdef MP
- this.$util.uniCopy({
- content: this.vuex_config.upload.cdnurl + e.href,
- success: () => {
- this.$u.toast('链接已复制,请在浏览器中打开')
- }
- })
- // #endif
- // #ifndef MP
- window.open(this.vuex_config.upload.cdnurl + e.href);
- // #endif
- }
- },
- //预览图片
- lookImage(index) {
- uni.previewImage({
- current: index,
- urls: this.imagesList,
- longPressActions: {
- itemList: ['发送给朋友', '保存图片', '收藏'],
- success: function(data) {
- console.log(data)
- },
- fail: function(err) {
- console.log(err.errMsg);
- }
- }
- });
- },
- //复制url
- copyUrl() {
- this.$util.uniCopy({
- content: window.location.href,
- success: () => {
- this.$u.toast('复制成功,请去粘贴发送给好友吧');
- },
- error: () => {
- console.log('复制失败!')
- }
- })
- },
- //cdnurl
- cdnurl(url) {
- if (!/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/.test(url)) {
- return this.vuex_config.upload.cdnurl + url;
- };
- return url;
- },
- //页面跳转
- goPage(path, auth) {
- if (path == 'out') {
- this.$u.vuex('vuex_token', '');
- this.$u.vuex('vuex_user', {});
- return;
- }
- if (auth && !this.vuex_token) {
- this.$u.route('/pages/login/mobilelogin');
- return;
- }
- let type = 'navigateTo';
-
- // #ifdef MP-WEIXIN
- //优化当pages超过5个时的处理
- let pages = getCurrentPages();
- type = pages.length >= 4 ? 'redirectTo' : type;
- // #endif
-
- uni.$u.route({
- url: path,
- type: type,
- complete(e) {
- console.log(e, path)
- }
- })
- }
- }
- }
- //点赞
- export const vote = {
- methods: {
- likes: async function() {
- const value = uni.getStorageSync(`${this.id}_${this.vuex_user.id}`);
- if (value == this.id) {
- this.$u.toast('您已经点过赞了')
- return;
- }
- let res = await this.$api.getArchivesVote({
- id: this.id,
- type: 'like'
- })
- this.$u.toast(res.msg);
- if (!res.code) {
- return;
- };
- //先在前端限制
- uni.setStorageSync(`${this.id}_${this.vuex_user.id}`, this.id);
- this.$set(this.archivesInfo, 'likes', res.data.likes)
- },
- collection(id, type) {
- this.$api.addCollection({
- aid: id,
- type: type
- }).then(res => {
- this.$u.toast(res.msg)
- })
- }
- }
- }
- //修改头像的事件
- export const avatar = {
- methods: {
- chooseAvatar() {
- uni.$on('uAvatarCropper', this.upload);
- this.$u.route({
- // 关于此路径,请见下方"注意事项"
- url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
- // 内部已设置以下默认参数值,可不传这些参数
- params: {
- // 输出图片宽度,高等于宽,单位px
- destWidth: 300,
- // 裁剪框宽度,高等于宽,单位px
- rectWidth: 300,
- // 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可
- fileType: 'jpg'
- }
- });
- },
- upload: async function(path) {
- uni.$off('uAvatarCropper', this.upload);
- // 可以在此上传到服务端
- try {
- let res = await this.$api.goUpload({
- filePath: path
- });
- if (!res.code) {
- this.$u.toast(res.msg);
- };
- this.form.avatar = res.data.url;
- this.url = res.data.fullurl;
- if (typeof this.editAvatar == 'function') {
- this.editAvatar();
- }
- } catch (e) {
- console.error(e);
- this.$u.toast('图片上传失败!');
- }
- }
- }
- }
- //form
- export const formRule = {
- methods: {
- //表单验证
- getRules(row) {
- let arr = row.rule.split(';');
- let rule_arr = [];
- arr.forEach(item => {
- item = this.$u.trim(item);
- switch (item) {
- case 'required':
- case 'checked':
- rule_arr.push({
- validator: (rule, value, callback) => {
- if (typeof value == 'string') {
- value = value.replace(/<[^>]+>/g, "").replace(/\s/ig, "");
- }
- return !(this.$u.test.empty(value));
- },
- message: row.title + '不能为空',
- // 可以单个或者同时写两个触发验证方式
- trigger: ['change', 'blur']
- });
- break;
- case 'digits': //数字校验
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.digits(value);
- },
- message: '请填写数字',
- trigger: ['change', 'blur']
- });
- break;
- case 'letters': //字母校验
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.letter(value);
- },
- message: '请填写字母',
- trigger: ['change', 'blur']
- });
- break;
- case 'date': //日期校验
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.date(value);
- },
- message: '请填写正确日期格式',
- trigger: ['change', 'blur']
- });
- break;
- case 'time': //时间校验
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(value);
- },
- message: '请填写正确时间格式',
- trigger: ['change', 'blur']
- });
- break;
- case 'email': //邮箱校验
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.email(value);
- },
- message: '请填写正确邮箱',
- trigger: ['change', 'blur']
- });
- break;
- case 'url': //网址
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.url(value);
- },
- message: '请填写正确网址',
- trigger: ['change', 'blur']
- });
- break;
- case 'qq': //qq
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^[1-9][0-9]{4,10}$/.test(value);
- },
- message: '请填写正确QQ号码',
- trigger: ['change', 'blur']
- });
- break;
- case 'IDcard': //身份证
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.idCard(value);
- },
- message: '请填写正确身份证件号',
- trigger: ['change', 'blur']
- });
- break;
- case 'tel': //电话
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^\d{3}-\d{8}$|^\d{4}-\d{7,8}$/.test(value);
- },
- message: '请填写正确电话号码',
- trigger: ['change', 'blur']
- });
- break;
- case 'mobile': //手机
- rule_arr.push({
- validator: (rule, value, callback) => {
- return this.$u.test.mobile(value);
- },
- message: '请填写正确手机号码',
- trigger: ['change', 'blur']
- });
- break;
- case 'zipcode': //邮编
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
- .test(value);
- },
- message: '请填写正确邮编',
- trigger: ['change', 'blur']
- });
- break;
- case 'chinese': //中文
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/
- .test(
- value
- );
- },
- message: '请填写中文',
- trigger: ['change', 'blur']
- });
- break;
- case 'username': //用户名
- rule_arr.push({
- validator: (rule, value, callback) => {
- return /^[a-zA-Z0-9_]{3,12}$/.test(value);
- },
- message: '请填写3-12位数字、字母、下划线',
- trigger: ['change', 'blur']
- });
- break;
- case 'password': //密码
- rule_arr.push({
- validator: (rule, value, callback) => {
- let val = this.$u.trim(value, 'all');
- if (val != value) {
- return false;
- }
- return /^[0-9a-zA-Z!@#$%^&*?]{6,16}$/.test(value);
- },
- message: '请填写6-16位字符,不能包含空格',
- trigger: ['change', 'blur']
- });
- break;
- }
- });
- //多选额外的判断
- if (row.type == 'checkbox') {
- //最少
- if (row.minimum > 0) {
- rule_arr.push({
- validator: (rule, value, callback) => {
- if (!value) {
- return false;
- }
- let arr = value.split(',')
- return arr.length >= row.minimum;
- },
- message: '最少必须选择' + row.minimum + '项',
- // 可以单个或者同时写两个触发验证方式
- trigger: ['change', 'blur']
- });
- }
- }
- if (['checkbox', 'selects', 'images', 'files'].indexOf(row.type) != -1) {
- //最多
- if (row.maximum > 0) {
- rule_arr.push({
- validator: (rule, value, callback) => {
- if (!value) {
- return false;
- }
- let arr = value.split(',')
- return arr.length <= row.maximum;
- },
- message: '最多只能选择' + row.maximum + '项',
- // 可以单个或者同时写两个触发验证方式
- trigger: ['change', 'blur']
- });
- }
- }
- return rule_arr;
- }
- }
- }
- //登录成功跳转
- export const loginfunc = {
- methods: {
- //登录成功
- success(index = 1) {
- //不在H5
- // #ifndef H5
- uni.$u.route({
- type: 'back',
- delta: index
- })
- // #endif
- // 在H5 刷新导致路由丢失
- // #ifdef H5
- var pages = getCurrentPages();
- //有上次页面,关闭所有页面,到此页面,是从授权的,授权页面被刷新过,路由栈丢失
- if (pages.length <= 1 || pages[0].route == 'pages/login/auth') {
- //默认到首页
- uni.reLaunch({
- url: (this.vuex_lasturl || '/pages/index/index'),
- complete(res) {
- console.log(res)
- }
- })
- return;
- }
- uni.$u.route({
- type: 'back',
- delta: index
- })
- // #endif
- },
- // #ifdef H5
- async goAuth() {
- if (this.$util.isWeiXinBrowser()) {
- let url = '';
- if (window.location.hash != '') {
- url = window.location.origin + window.location.pathname + '?hashpath=/pages/login/auth'
- } else {
- url = window.location.origin + window.location.pathname.replace(/pages.*/,
- 'pages/login/auth');
- };
- let res = await this.$api.getAuthUrl({
- platform: 'wechat',
- url: url
- });
- if (!res.code) {
- this.$u.toast(res.msg);
- return;
- }
- var pages = getCurrentPages();
- let len = pages.length;
- if (len > 1) {
- let url = pages[len - 1].route;
- if (url.includes('login')) {
- //找到上一个不是登录页面
- for (let i = len - 1; i >= 0; i--) {
- if (!pages[i].route.includes('login')) {
- this.$u.vuex('vuex_lasturl', '/' + pages[i].route + this.$u.queryParams(pages[i]
- .options));
- break;
- }
- }
- } else {
- this.$u.vuex('vuex_lasturl', '/' + url + this.$u.queryParams(pages[pages.length - 1]
- .options))
- }
- }
- window.location.href = res.data;
- }
- },
- // #endif
- // #ifdef APP-PLUS
- goAppLogin(index = 1) {
- let that = this;
- var all, Service;
- // 1.发送请求获取code
- plus.oauth.getServices(
- function(Services) {
- all = Services;
- Object.keys(all).some(key => {
- if (all[key].id == 'weixin') {
- Service = all[key];
- }
- });
- Service.authorize(
- async function(e) {
- console.log(e);
- let res = await that.$api.goAppLogin({
- code: e.code,
- scope: e.scope
- });
- if (!res.code) {
- that.$u.toast(res.msg);
- return;
- }
- if (res.data.user) {
- that.$u.vuex('vuex_token', res.data.user.token);
- that.$u.vuex('vuex_user', res.data.user || {});
- that.success(index);
- return;
- }
- that.$u.vuex('vuex_third', res.data.third);
- that.$u.route('/pages/login/register?bind=bind');
- },
- function(e) {
- that.$u.toast('授权失败!');
- }
- );
- },
- function(err) {
- console.log(err);
- that.$u.toast('授权失败!');
- }
- );
- }
- // #endif
- }
- }
|