Commit 2adc6a81 authored by 郭志伟's avatar 郭志伟

Merge branch 'feat/textLogin' into 'master'

Feat/text login

See merge request !33
parents 3aabf6d3 5dc836c8
...@@ -7,6 +7,7 @@ import { release } from '@/.sentryclirc'; ...@@ -7,6 +7,7 @@ import { release } from '@/.sentryclirc';
import '@/service/qg.service'; import '@/service/qg.service';
import SaDirective from '@qg/citrus-ui/src/helper/directives/saTrack.directive.js'; import SaDirective from '@qg/citrus-ui/src/helper/directives/saTrack.directive.js';
import config from '@qg/citrus-ui/src/config/index.js'; import config from '@qg/citrus-ui/src/config/index.js';
import { EventBus } from '@qg/citrus-ui/src/helper/service/eventBus';
import { getParameterByName } from '../../../service/utils.service'; import { getParameterByName } from '../../../service/utils.service';
import lazyload from '@qg/cherry-ui/src/lazyload/index'; import lazyload from '@qg/cherry-ui/src/lazyload/index';
...@@ -31,7 +32,7 @@ if (EASY_ENV_IS_BROWSER) { ...@@ -31,7 +32,7 @@ if (EASY_ENV_IS_BROWSER) {
const fromHost = getParameterByName('fromHost', window.location.href); const fromHost = getParameterByName('fromHost', window.location.href);
if (isSafari.test(navigator.userAgent) && fromHost?.indexOf('xc.bmall') === -1 && fromHost?.indexOf('tob') === -1) { if (isSafari.test(navigator.userAgent) && fromHost?.indexOf('xc.bmall') === -1 && fromHost?.indexOf('tob') === -1) {
window.onpageshow = function(e) { window.onpageshow = function(e) {
if (e.persisted || (window.performance && window.performance.navigation.type == 2)) { if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
window.location.reload(); window.location.reload();
} }
}; };
...@@ -39,6 +40,16 @@ if (EASY_ENV_IS_BROWSER) { ...@@ -39,6 +40,16 @@ if (EASY_ENV_IS_BROWSER) {
Vue.use(lazyload); Vue.use(lazyload);
const saDirective = new SaDirective(); const saDirective = new SaDirective();
Vue.directive('track', saDirective.directive); Vue.directive('track', saDirective.directive);
window.xyqbNativeEvent = function(res) {
const json = typeof res === 'string' ? JSON.parse(res) : res;
console.log('xyqbNativeEvent toggle');
if (json.event === 'loginAndLogoutNotification') {
EventBus.$emit('NATIVE_EVENT_LOGIN', json);
}
if (json.event === 'getTokenSuccess') {
EventBus.$emit('NATIVE_EVENT_GET_TOKEN', json);
}
};
} }
@Component({ @Component({
name: 'Layout' name: 'Layout'
......
...@@ -3,5 +3,6 @@ declare var EASY_ENV_IS_BROWSER: boolean; ...@@ -3,5 +3,6 @@ declare var EASY_ENV_IS_BROWSER: boolean;
type PlainObject<T = any> = { [key: string]: T }; type PlainObject<T = any> = { [key: string]: T };
interface Window { interface Window {
__INITIAL_STATE__: string | any; __INITIAL_STATE__: string | any;
xyqbNativeEvent: any;
} }
declare var apollo: any; declare var apollo: any;
...@@ -7,13 +7,17 @@ import GridItem from '../../component/VueGridLayout/GridItem.vue'; ...@@ -7,13 +7,17 @@ import GridItem from '../../component/VueGridLayout/GridItem.vue';
import TransformStyleMixin from '@/page/mixins/transformStyle.mixin'; import TransformStyleMixin from '@/page/mixins/transformStyle.mixin';
import SaMixin from '@/page/mixins/sa.mixin'; import SaMixin from '@/page/mixins/sa.mixin';
import { getStyle, debounce, isApp } from '@/service/utils.service'; import { getStyle, debounce, isApp } from '@/service/utils.service';
import { EventBus } from '@qg/citrus-ui/src/helper/service/eventBus';
import { setAppTitleColor } from '@/service/color.service'; import { setAppTitleColor } from '@/service/color.service';
import localStorage from '@/service/localStorage.service';
@Component({ components: { FreedomContainer, GridLayout, GridItem, PageBottomTip }, name: 'Activity'}) @Component({ components: { FreedomContainer, GridLayout, GridItem, PageBottomTip }, name: 'Activity'})
export default class Activity extends Mixins(TransformStyleMixin, SaMixin) { export default class Activity extends Mixins(TransformStyleMixin, SaMixin) {
@Getter('pageData') pageData; @Getter('pageData') pageData;
@State(state => state.activity.pageInfo.pageName) pageName; @State(state => state.activity.pageInfo.pageName) pageName;
@State(state => state.activity.pageInfo.appLoginState) appLoginState;
@State(state => state.activity.gridLayout.rowHeight) rowHeight; @State(state => state.activity.gridLayout.rowHeight) rowHeight;
@Mutation('SET_PAGE_ELEMENTS') setPageElement; @Mutation('SET_PAGE_ELEMENTS') setPageElement;
@Mutation('UPDATE_APP_LOGIN_STATE') updateAppLoginState;
@Provide() editor = this; @Provide() editor = this;
isEditor: boolean = false; isEditor: boolean = false;
...@@ -54,6 +58,12 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) { ...@@ -54,6 +58,12 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) {
if (lastGridItemPoint.w > this.bottomInfo.w) { this.bottomInfo.w = lastGridItemPoint.w; } if (lastGridItemPoint.w > this.bottomInfo.w) { this.bottomInfo.w = lastGridItemPoint.w; }
this.bottomInfo.y = this.bottomInfo.y + lastGridItemPoint.y + lastGridItemPoint.h; this.bottomInfo.y = this.bottomInfo.y + lastGridItemPoint.y + lastGridItemPoint.h;
} }
if (isApp) {
// 当页面数据改变,并且渲染完成后改变app 标题栏颜色
this.$nextTick(() => {
debounce(setAppTitleColor(this.pageData.props.titleBgColor), 300);
});
}
} }
@Watch('pageName', { immediate: true }) @Watch('pageName', { immediate: true })
...@@ -78,7 +88,22 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) { ...@@ -78,7 +88,22 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) {
mounted() { mounted() {
this.targetEle = document.querySelector('body'); this.targetEle = document.querySelector('body');
this.showBackTop = true; this.showBackTop = true;
isApp && setAppTitleColor(this.pageData.props.titleBgColor); this.pageVisibilityChange();
if (EASY_ENV_IS_BROWSER) {
EventBus.$on('NATIVE_EVENT_LOGIN', json => {
console.log('xyqbNativeEvent got', json);
if (json.event === 'loginAndLogoutNotification') {
const appData = json.data || {};
if (appData && appData.login) {
localStorage.set('vccToken', appData.token);
this.updateAppLoginState(true);
} else {
this.updateAppLoginState(false);
localStorage.remove('vccToken');
}
}
});
}
} }
fetchApi(options) { fetchApi(options) {
const { store, route } = options; const { store, route } = options;
...@@ -121,7 +146,28 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) { ...@@ -121,7 +146,28 @@ export default class Activity extends Mixins(TransformStyleMixin, SaMixin) {
hideBottomBtns(state) { hideBottomBtns(state) {
this.showBackTop = state; this.showBackTop = state;
} }
pageVisibilityChange() {
if (EASY_ENV_IS_NODE) { return; }
let hidden = 'hidden';
let visibilityChange = 'visibilitychange';
if (typeof document.hidden !== 'undefined') {
hidden = 'hidden';
visibilityChange = 'visibilitychange';
} else if (typeof document.webkitHidden !== 'undefined') {
hidden = 'webkitHidden';
visibilityChange = 'webkitvisibilitychange';
}
window.addEventListener(visibilityChange, () => {
this.handleChange(document[hidden]);
}, false);
}
handleChange(state) {
if (!state) {
if (isApp) {
setAppTitleColor(this.pageData.props.titleBgColor);
}
}
}
modfiTabsStyle() { modfiTabsStyle() {
const tabsEle = document.querySelector('.tabs'); const tabsEle = document.querySelector('.tabs');
// console.log('tabsEle', tabsEle); // console.log('tabsEle', tabsEle);
......
import api from '@/api/editor.api'; import api from '@/api/editor.api';
import { Module, GetterTree, ActionTree, MutationTree } from 'vuex'; import { Module, GetterTree, ActionTree, MutationTree } from 'vuex';
import Vue from 'vue'; import Vue from 'vue';
import { UPDATE_PAGE_INFO, SET_PAGE_INFO, SET_PAGE_DATA, SET_PAGE_ELEMENTS, SET_ELEMENT_POINT} from './type'; import { UPDATE_PAGE_INFO, SET_PAGE_INFO, SET_PAGE_DATA, SET_PAGE_ELEMENTS, SET_ELEMENT_POINT, UPDATE_APP_LOGIN_STATE } from './type';
import RootState from '../../state'; import RootState from '../../state';
import EditorState, { PageInfo, defaultState, Page, PageElement } from './state'; import EditorState, { PageInfo, defaultState, Page, PageElement } from './state';
...@@ -41,6 +41,9 @@ export default class EditorModule implements Module<EditorState, RootState> { ...@@ -41,6 +41,9 @@ export default class EditorModule implements Module<EditorState, RootState> {
[SET_PAGE_DATA](state, data) { [SET_PAGE_DATA](state, data) {
state.pageInfo.page = data; state.pageInfo.page = data;
}, },
[UPDATE_APP_LOGIN_STATE](state, data) {
state.pageInfo.appLoginState = data;
},
[SET_PAGE_ELEMENTS](state, data) { [SET_PAGE_ELEMENTS](state, data) {
if (data) { (state.pageInfo.page as Page).elements = data; } if (data) { (state.pageInfo.page as Page).elements = data; }
}, },
......
...@@ -47,6 +47,7 @@ export interface PageInfo { ...@@ -47,6 +47,7 @@ export interface PageInfo {
coverImage?: string; coverImage?: string;
isTemplate?: number; isTemplate?: number;
isPublish?: number | boolean; isPublish?: number | boolean;
appLoginState?: boolean;
} }
export const defaultState = { export const defaultState = {
......
...@@ -13,4 +13,5 @@ export const UPDATE_COMMON_STYLE = 'UPDATE_COMMON_STYLE'; ...@@ -13,4 +13,5 @@ export const UPDATE_COMMON_STYLE = 'UPDATE_COMMON_STYLE';
export const UPDATE_PAGE_STYLE = 'UPDATE_PAGE_STYLE'; export const UPDATE_PAGE_STYLE = 'UPDATE_PAGE_STYLE';
export const UPDATE_PAGE_PROPS = 'UPDATE_PAGE_PROPS'; export const UPDATE_PAGE_PROPS = 'UPDATE_PAGE_PROPS';
export const SET_PAGE_ELEMENTS = 'SET_PAGE_ELEMENTS'; export const SET_PAGE_ELEMENTS = 'SET_PAGE_ELEMENTS';
export const SET_ELEMENT_POINT = 'SET_ELEMENT_POINT'; export const SET_ELEMENT_POINT = 'SET_ELEMENT_POINT';
\ No newline at end of file export const UPDATE_APP_LOGIN_STATE = 'UPDATE_APP_LOGIN_STATE';
\ No newline at end of file
...@@ -4,7 +4,7 @@ import Cookies from './cookieStorage.service'; ...@@ -4,7 +4,7 @@ import Cookies from './cookieStorage.service';
import localStorage from './localStorage.service'; import localStorage from './localStorage.service';
// formXcxPage:标识是从小程序跳转过来的; // formXcxPage:标识是从小程序跳转过来的;
const localStorageParams = ['creditToken', 'vccToken', 'vccChannel', 'sonVccChannel', 'formXcxPage']; const localStorageParams = ['creditToken', 'vccToken', 'vccChannel', 'sonVccChannel', 'formXcxPage'];
const cookiesParams = ['h', 'vccToken']; const cookiesParams = ['h'];
export default { export default {
// token校验,整个流程都是登陆后的 // token校验,整个流程都是登陆后的
......
...@@ -161,70 +161,4 @@ export const throttle = (event, time) => { ...@@ -161,70 +161,4 @@ export const throttle = (event, time) => {
}, time); }, time);
} }
} }
}
// RGB转HEX
export function rgbToHex(r, g, b) {
const hex = ((r << 16) | (g << 8) | b).toString(16);
return "#" + new Array(Math.abs(hex.length - 7)).join("0") + hex;
}
// HEX转RGB
export function hexToRgb(hex) {
var rgb = [];
for (let i = 1; i < 7; i += 2) {
rgb.push(parseInt("0x" + hex.slice(i, i + 2)));
}
return rgb;
}
// 计算RGB渐变色色值
export function gradient(startColor, endColor, step) {
// 将 hex 转换为rgb
let sColor = hexToRgb(startColor);
let eColor = hexToRgb(endColor);
// 计算R\G\B每一步的差值
let rStep = (eColor[0] - sColor[0]) / step;
let gStep = (eColor[1] - sColor[1]) / step;
let bStep = (eColor[2] - sColor[2]) / step;
let gradientColorArr = [];
for (let i = 0; i < step; i++) {
// 计算每一步的hex值
gradientColorArr.push(
rgbToHex(
parseInt(rStep * i + sColor[0]),
parseInt(gStep * i + sColor[1]),
parseInt(bStep * i + sColor[2])
)
);
}
return gradientColorArr;
}
export function colorToRgb(color) {
// 16进制颜色值的正则
let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 把颜色值变成小写
color = color.toLowerCase();
if (reg.test(color)) {
// 如果只有三位的值,需变成六位,如:#fff => #ffffff
if (color.length === 4) {
let colorNew = "#";
for (let i = 1; i < 4; i += 1) {
colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
}
color = colorNew;
}
// 处理六位的颜色值,转为RGB
let colorChange = [];
for (let i = 1; i < 7; i += 2) {
colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
}
return "RGB(" + colorChange.join(",") + ")";
} else {
return color;
}
}
// RGB TO RGBA
export function rgbToRgba(rgb, opacity) {
return rgb.replace(")", `, ${opacity})`);
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ declare var EASY_ENV_IS_NODE: boolean; ...@@ -5,6 +5,7 @@ declare var EASY_ENV_IS_NODE: boolean;
interface Window { interface Window {
__INITIAL_STATE__: any; __INITIAL_STATE__: any;
xyqbNativeEvent: any;
} }
declare module 'axios' { declare module 'axios' {
......
{ {
"apiHost": "https://quantum-blocks-vcc2.liangkebang.net", "apiHost": "https://quantum-blocks-test1.liangkebang.net",
"h5Host": "https://quantum-h5-vcc2.liangkebang.net", "h5Host": "https://quantum-h5-test1.liangkebang.net",
"opapiHost": "https://opapi-vcc2.liangkebang.net", "opapiHost": "https://opapi-test1.liangkebang.net",
"passportHost": "https://passportapi-vcc2.liangkebang.net", "passportHost": "https://passportapi-test1.liangkebang.net",
"kdspHost": "https://talos-vcc2.liangkebang.net", "kdspHost": "https://talos-test1.liangkebang.net",
"loginUrl": "", "loginUrl": "",
"h5ShopHost": "https://tenet-vcc2.liangkebang.net/#", "h5ShopHost": "https://tenet-test1.liangkebang.net/#",
"qiniuUpHost": "https://up-z0.qiniup.com", "qiniuUpHost": "https://up-z0.qiniup.com",
"qiniuHost": "https://appsync.lkbang.net" "qiniuHost": "https://appsync.lkbang.net"
} }
\ No newline at end of file
...@@ -29,8 +29,8 @@ export default (appInfo: EggAppConfig) => { ...@@ -29,8 +29,8 @@ export default (appInfo: EggAppConfig) => {
exports.redis = { exports.redis = {
client: { client: {
port: 31565, // Redis port port: 32625, // Redis port
host: '172.17.5.13', // Redis host host: '172.17.5.17', // Redis host
password: '', password: '',
db: 0 db: 0
} }
......
...@@ -1658,13 +1658,13 @@ ...@@ -1658,13 +1658,13 @@
} }
}, },
"@qg/citrus-ui": { "@qg/citrus-ui": {
"version": "0.2.20", "version": "0.2.25",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.2.20.tgz", "resolved": "http://npmprivate.quantgroups.com/@qg%2fcitrus-ui/-/citrus-ui-0.2.25.tgz",
"integrity": "sha512-eKyAqqsUgk34ztLfnL7XyCbariEtkVv30FltCfxm/zx9QhqzFLmB54VR6/F3lOeGQveQcT/NE9hXHsC9K+QjaQ==", "integrity": "sha512-61YOK7ybUD7cPn3WS91Pvin6r+yjCubNq21+D2E/mINb7yjzyhokkRkunU9aQ03U88KRpccXkR+MfhUP3pnvOA==",
"requires": { "requires": {
"@better-scroll/core": "^2.1.1", "@better-scroll/core": "^2.1.1",
"@qg/cherry-ui": "^2.21.1", "@qg/cherry-ui": "^2.21.1",
"@qg/js-bridge": "^1.1.11", "@qg/js-bridge": "^1.1.12",
"axios": "^0.21.1", "axios": "^0.21.1",
"intersection-observer": "^0.12.0", "intersection-observer": "^0.12.0",
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",
...@@ -1672,22 +1672,12 @@ ...@@ -1672,22 +1672,12 @@
"swiper": "^4.5.1", "swiper": "^4.5.1",
"vuex": "^3.6.0", "vuex": "^3.6.0",
"weixin-js-sdk": "^1.6.0" "weixin-js-sdk": "^1.6.0"
},
"dependencies": {
"@qg/js-bridge": {
"version": "1.1.11",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fjs-bridge/-/js-bridge-1.1.11.tgz",
"integrity": "sha512-WVvkSUg2zcc2nblzYGxM/bVo+VDcANy/dw7vcbxLoW1Jega9Jm2d5FGSb7uS6m4746waghUUqcAWNJZ0Q5yeqA==",
"requires": {
"rollup": "^2.41.3"
}
}
} }
}, },
"@qg/js-bridge": { "@qg/js-bridge": {
"version": "1.1.7", "version": "1.1.12",
"resolved": "http://npmprivate.quantgroups.com/@qg%2fjs-bridge/-/js-bridge-1.1.7.tgz", "resolved": "http://npmprivate.quantgroups.com/@qg%2fjs-bridge/-/js-bridge-1.1.12.tgz",
"integrity": "sha512-t9ucNc5OFntMxhz5E1UFWZJsIM2CGbmgiyjzoOtpJL1s32s2liPnLXrRfnbryYJEiLNzNyhXQUbA0Z1qZlqq3w==" "integrity": "sha512-KhSbaGMJvGZ7CNrl6nIhD56vAKwDCx6kjwm26UeCBb8KAAb2JjgRe3pIAw/XHjC5WZXjlwfwx6hwrgslQiFyxA=="
}, },
"@tootallnate/once": { "@tootallnate/once": {
"version": "1.1.2", "version": "1.1.2",
...@@ -20876,22 +20866,6 @@ ...@@ -20876,22 +20866,6 @@
"resolved": "http://npmprivate.quantgroups.com/rndm/-/rndm-1.2.0.tgz", "resolved": "http://npmprivate.quantgroups.com/rndm/-/rndm-1.2.0.tgz",
"integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=" "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
}, },
"rollup": {
"version": "2.56.2",
"resolved": "http://npmprivate.quantgroups.com/rollup/-/rollup-2.56.2.tgz",
"integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==",
"requires": {
"fsevents": "~2.3.2"
},
"dependencies": {
"fsevents": {
"version": "2.3.2",
"resolved": "http://npmprivate.quantgroups.com/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"optional": true
}
}
},
"run-async": { "run-async": {
"version": "2.4.1", "version": "2.4.1",
"resolved": "http://npmprivate.quantgroups.com/run-async/-/run-async-2.4.1.tgz", "resolved": "http://npmprivate.quantgroups.com/run-async/-/run-async-2.4.1.tgz",
...@@ -20956,9 +20930,9 @@ ...@@ -20956,9 +20930,9 @@
} }
}, },
"sa-sdk-javascript": { "sa-sdk-javascript": {
"version": "1.18.12", "version": "1.18.13",
"resolved": "http://npmprivate.quantgroups.com/sa-sdk-javascript/-/sa-sdk-javascript-1.18.12.tgz", "resolved": "http://npmprivate.quantgroups.com/sa-sdk-javascript/-/sa-sdk-javascript-1.18.13.tgz",
"integrity": "sha512-D4ov1/fwhYKdUoG2bvX1gjSgMY2/5oIyGH3g1dH8pTLfJB1L3dHXXTSz18u1mJ1TfbGIcgCtgVCH3kd8B7FF2Q==" "integrity": "sha512-nS8OlmEnXeX/fAnjBrxjJTS6Dp3F2DfGm/XP+xpvcBXQ+GDXWL3saSCT66pRhhE2SSCZ+6WCDDLh03fMK7+PXg=="
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.2.1", "version": "5.2.1",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment