Commit 0af2f0177c4baeec5c72ff08eba3c5b7a55ebd89

Authored by xp.Huang
2 parents 046bdba6 b7edaf3c

Merge branch 'ww' into 'main'

feat: according device select page size

See merge request huang/thingskit-drawio!33
@@ -14,7 +14,7 @@ const GLOBAL_TOKEN = (() => { @@ -14,7 +14,7 @@ const GLOBAL_TOKEN = (() => {
14 const common = ls.get(GLOBAL_STORAGE_KEY) 14 const common = ls.get(GLOBAL_STORAGE_KEY)
15 return { 15 return {
16 token: common && common.JWT_TOKEN && common.JWT_TOKEN.value, 16 token: common && common.JWT_TOKEN && common.JWT_TOKEN.value,
17 - refreshToken: common && common.JWT_TOKEN && common.JWT_TOKEN.value, 17 + refreshToken: common && common.REFRESH_TOKEN && common.REFRESH_TOKEN.value,
18 } 18 }
19 })() 19 })()
20 20
@@ -56,7 +56,7 @@ const createStorage = ( @@ -56,7 +56,7 @@ const createStorage = (
56 timeout = null, 56 timeout = null,
57 hasEncrypt = !isDEV, 57 hasEncrypt = !isDEV,
58 } = {}) => { 58 } = {}) => {
59 - if (hasEncrypt && [ key.length, iv.length ].some((item) => item !== 16)) { 59 + if (hasEncrypt && [key.length, iv.length].some((item) => item !== 16)) {
60 throw new Error('When hasEncrypt is true, the key or iv must be 16 bits!'); 60 throw new Error('When hasEncrypt is true, the key or iv must be 16 bits!');
61 } 61 }
62 62
@@ -86,7 +86,7 @@ const createStorage = ( @@ -86,7 +86,7 @@ const createStorage = (
86 } 86 }
87 87
88 getKey(key) { 88 getKey(key) {
89 - return `${ this.prefixKey }${ key }`.toUpperCase(); 89 + return `${this.prefixKey}${key}`.toUpperCase();
90 } 90 }
91 91
92 /** 92 /**
@@ -110,6 +110,19 @@ const createStorage = ( @@ -110,6 +110,19 @@ const createStorage = (
110 this.storage.setItem(this.getKey(key), stringifyValue); 110 this.storage.setItem(this.getKey(key), stringifyValue);
111 } 111 }
112 112
  113 + generatorValue(key, value, expire = timeout) {
  114 + const stringData = {
  115 + value,
  116 + time: Date.now(),
  117 + expire: !isNullOrUnDef(expire) ? new Date().getTime() + expire * 1000 : null,
  118 + };
  119 + const stringifyValue = this.hasEncrypt
  120 + ? this.encryption.encryptByAES(stringData)
  121 + : stringData;
  122 +
  123 + return stringifyValue
  124 + }
  125 +
113 /** 126 /**
114 *Read cache 127 *Read cache
115 * @param {string} key 128 * @param {string} key
@@ -117,17 +130,20 @@ const createStorage = ( @@ -117,17 +130,20 @@ const createStorage = (
117 * @memberof Cache 130 * @memberof Cache
118 */ 131 */
119 get(key, def = null) { 132 get(key, def = null) {
  133 + console.log(this.getKey(key))
120 const val = this.storage.getItem(this.getKey(key)); 134 const val = this.storage.getItem(this.getKey(key));
121 if (!val) return def; 135 if (!val) return def;
122 136
123 try { 137 try {
124 const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val; 138 const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val;
125 const data = JSON.parse(decVal); 139 const data = JSON.parse(decVal);
  140 + console.log(data)
126 const { value, expire } = data; 141 const { value, expire } = data;
127 - if (isNullOrUnDef(expire) || expire >= new Date().getTime()) {  
128 - return value;  
129 - }  
130 - this.remove(key); 142 + // if (isNullOrUnDef(expire) || expire >= new Date().getTime()) {
  143 + // return value;
  144 + // }
  145 + return value
  146 + // this.remove(key);
131 } catch (e) { 147 } catch (e) {
132 return def; 148 return def;
133 } 149 }
@@ -150,4 +166,4 @@ const createStorage = ( @@ -150,4 +166,4 @@ const createStorage = (
150 } 166 }
151 }; 167 };
152 return new WebStorage(); 168 return new WebStorage();
153 -}  
  169 +}
@@ -5027,6 +5027,31 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { @@ -5027,6 +5027,31 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) {
5027 function getSaveContent() { 5027 function getSaveContent() {
5028 defHttp.get('/yt/configuration/center/getConfigurationInfo/'+Editor.configurationId) 5028 defHttp.get('/yt/configuration/center/getConfigurationInfo/'+Editor.configurationId)
5029 .then(function (response) { 5029 .then(function (response) {
  5030 + console.log({response})
  5031 + const { configurationContentList: [ data = {}] = [] } = response || {}
  5032 + const phoneFlag = data.platform
  5033 + const pageSizeControl = PageSetupDialog.getFormats
  5034 + PageSetupDialog.getFormats = function () {
  5035 + if (phoneFlag === 'phone') {
  5036 + return [
  5037 + {key: 'iPhone 8', title: 'iPhone 8', format: new mxRectangle(0, 0, 375, 667)},
  5038 + {key: 'iPhone 8 Plus', title: 'iPhone 8 Plus', format: new mxRectangle(0, 0, 415, 737)},
  5039 + {key: 'iPhone X/XS', title: 'iPhone X/XS', format: new mxRectangle(0, 0, 376, 813)},
  5040 + {key: 'iPhone XR/XS Max', title: 'iPhone XR/XS Max', format: new mxRectangle(0, 0, 415, 897)},
  5041 + {key: 'iPad 4', title: 'iPad 4', format: new mxRectangle(0, 0, 709, 1025)},
  5042 + {key: 'Galaxy S9', title: 'Galaxy S9', format: new mxRectangle(0, 0, 361, 741)},
  5043 + {key: 'Galaxy S10E', title: 'Galaxy S10E', format: new mxRectangle(0, 0, 361, 741)},
  5044 + {key: 'Galaxy S10E', title: 'Galaxy S10E', format: new mxRectangle(0, 0, 361, 741)},
  5045 + {key: 'Galaxy S10/S10+', title: 'Galaxy S10/S10+', format: new mxRectangle(0, 0, 413, 870)},
  5046 + {key: 'Pixel 2', title: 'Pixel 2', format: new mxRectangle(0, 0, 413, 732)},
  5047 + {key: 'Pixel 3', title: 'Pixel 3', format: new mxRectangle(0, 0, 413, 825)},
  5048 + {key: 'Pixel 3', title: 'Pixel 3', format: new mxRectangle(0, 0, 413, 825)},
  5049 + {key: 'Pixel XL', title: 'Pixel XL', format: new mxRectangle(0, 0, 413, 848)},
  5050 + {key: 'custom', title: mxResources.get('custom'), format: null}
  5051 + ]
  5052 + }
  5053 + return pageSizeControl.apply(this, arguments)
  5054 + }
5030 Editor.configurationName = response.configurationName + ".drawio"; 5055 Editor.configurationName = response.configurationName + ".drawio";
5031 if(response.configurationContentList.length > 0){ 5056 if(response.configurationContentList.length > 0){
5032 response.configurationContentList.forEach((item)=>{ 5057 response.configurationContentList.forEach((item)=>{
@@ -2065,24 +2065,33 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page @@ -2065,24 +2065,33 @@ PageSetupDialog.addPageFormatPanel = function(div, namePostfix, pageFormat, page
2065 */ 2065 */
2066 PageSetupDialog.getFormats = function() 2066 PageSetupDialog.getFormats = function()
2067 { 2067 {
2068 - return [{key: 'letter', title: 'US-Letter (8,5" x 11")', format: mxConstants.PAGE_FORMAT_LETTER_PORTRAIT},  
2069 - {key: 'legal', title: 'US-Legal (8,5" x 14")', format: new mxRectangle(0, 0, 850, 1400)},  
2070 - {key: 'tabloid', title: 'US-Tabloid (11" x 17")', format: new mxRectangle(0, 0, 1100, 1700)},  
2071 - {key: 'executive', title: 'US-Executive (7" x 10")', format: new mxRectangle(0, 0, 700, 1000)},  
2072 - {key: 'a0', title: 'A0 (841 mm x 1189 mm)', format: new mxRectangle(0, 0, 3300, 4681)},  
2073 - {key: 'a1', title: 'A1 (594 mm x 841 mm)', format: new mxRectangle(0, 0, 2339, 3300)},  
2074 - {key: 'a2', title: 'A2 (420 mm x 594 mm)', format: new mxRectangle(0, 0, 1654, 2336)},  
2075 - {key: 'a3', title: 'A3 (297 mm x 420 mm)', format: new mxRectangle(0, 0, 1169, 1654)},  
2076 - {key: 'a4', title: 'A4 (210 mm x 297 mm)', format: mxConstants.PAGE_FORMAT_A4_PORTRAIT},  
2077 - {key: 'a5', title: 'A5 (148 mm x 210 mm)', format: new mxRectangle(0, 0, 583, 827)},  
2078 - {key: 'a6', title: 'A6 (105 mm x 148 mm)', format: new mxRectangle(0, 0, 413, 583)},  
2079 - {key: 'a7', title: 'A7 (74 mm x 105 mm)', format: new mxRectangle(0, 0, 291, 413)},  
2080 - {key: 'b4', title: 'B4 (250 mm x 353 mm)', format: new mxRectangle(0, 0, 980, 1390)},  
2081 - {key: 'b5', title: 'B5 (176 mm x 250 mm)', format: new mxRectangle(0, 0, 690, 980)},  
2082 - {key: '16-9', title: '16:9 (1600 x 900)', format: new mxRectangle(0, 0, 900, 1600)},  
2083 - {key: '16-10', title: '16:10 (1920 x 1200)', format: new mxRectangle(0, 0, 1200, 1920)},  
2084 - {key: '4-3', title: '4:3 (1600 x 1200)', format: new mxRectangle(0, 0, 1200, 1600)},  
2085 - {key: 'custom', title: mxResources.get('custom'), format: null}]; 2068 + // HACK thingsKit 页面尺寸控制
  2069 +
  2070 + return [
  2071 + {key: '1920 * 1080', title: '1920 * 1080(推荐尺寸)', format: new mxRectangle(0, 0, 1080, 1920)},
  2072 + {key: '1060 * 520', title: '1060 * 520', format: new mxRectangle(0, 0, 520, 1060)},
  2073 + {key: '1440 * 900', title: '1440 * 900', format: new mxRectangle(0, 0, 900, 1440)},
  2074 + {key: '1366 * 768', title: '1366* 768', format: new mxRectangle(0, 0, 768, 1366)},
  2075 + {key: 'custom', title: mxResources.get('custom'), format: null}
  2076 + ]
  2077 + // return [{key: 'letter', title: 'US-Letter (8,5" x 11")', format: mxConstants.PAGE_FORMAT_LETTER_PORTRAIT},
  2078 + // {key: 'legal', title: 'US-Legal (8,5" x 14")', format: new mxRectangle(0, 0, 850, 1400)},
  2079 + // {key: 'tabloid', title: 'US-Tabloid (11" x 17")', format: new mxRectangle(0, 0, 1100, 1700)},
  2080 + // {key: 'executive', title: 'US-Executive (7" x 10")', format: new mxRectangle(0, 0, 700, 1000)},
  2081 + // {key: 'a0', title: 'A0 (841 mm x 1189 mm)', format: new mxRectangle(0, 0, 3300, 4681)},
  2082 + // {key: 'a1', title: 'A1 (594 mm x 841 mm)', format: new mxRectangle(0, 0, 2339, 3300)},
  2083 + // {key: 'a2', title: 'A2 (420 mm x 594 mm)', format: new mxRectangle(0, 0, 1654, 2336)},
  2084 + // {key: 'a3', title: 'A3 (297 mm x 420 mm)', format: new mxRectangle(0, 0, 1169, 1654)},
  2085 + // {key: 'a4', title: 'A4 (210 mm x 297 mm)', format: mxConstants.PAGE_FORMAT_A4_PORTRAIT},
  2086 + // {key: 'a5', title: 'A5 (148 mm x 210 mm)', format: new mxRectangle(0, 0, 583, 827)},
  2087 + // {key: 'a6', title: 'A6 (105 mm x 148 mm)', format: new mxRectangle(0, 0, 413, 583)},
  2088 + // {key: 'a7', title: 'A7 (74 mm x 105 mm)', format: new mxRectangle(0, 0, 291, 413)},
  2089 + // {key: 'b4', title: 'B4 (250 mm x 353 mm)', format: new mxRectangle(0, 0, 980, 1390)},
  2090 + // {key: 'b5', title: 'B5 (176 mm x 250 mm)', format: new mxRectangle(0, 0, 690, 980)},
  2091 + // {key: '16-9', title: '16:9 (1600 x 900)', format: new mxRectangle(0, 0, 900, 1600)},
  2092 + // {key: '16-10', title: '16:10 (1920 x 1200)', format: new mxRectangle(0, 0, 1200, 1920)},
  2093 + // {key: '4-3', title: '4:3 (1600 x 1200)', format: new mxRectangle(0, 0, 1200, 1600)},
  2094 + // {key: 'custom', title: mxResources.get('custom'), format: null}];
2086 }; 2095 };
2087 2096
2088 /** 2097 /**
@@ -2366,6 +2366,8 @@ EditorUi.prototype.initCanvas = function() @@ -2366,6 +2366,8 @@ EditorUi.prototype.initCanvas = function()
2366 var t = graph.view.translate; 2366 var t = graph.view.translate;
2367 graph.view.setTranslate(Math.floor(t.x + cx / s), Math.floor(t.y + cy / s)); 2367 graph.view.setTranslate(Math.floor(t.x + cx / s), Math.floor(t.y + cy / s));
2368 } 2368 }
  2369 + // HACK thingsKit 设置视图起点为0, 0
  2370 + graph.view.setTranslate(0, 0)
2369 } 2371 }
2370 }); 2372 });
2371 2373
  1 +let requestQueue = []
  2 +
  3 +const JWT_TOKEN_KEY = 'JWT_TOKEN';
  4 +const REFRESH_TOKEN_KEY = 'REFRESH_TOKEN';
1 /** 5 /**
2 * custom http request 6 * custom http request
3 */ 7 */
@@ -16,7 +20,11 @@ function createAxios(options) { @@ -16,7 +20,11 @@ function createAxios(options) {
16 20
17 instance.interceptors.request.use((config) => { 21 instance.interceptors.request.use((config) => {
18 config.headers["X-Authorization"] = "Bearer " + GLOBAL_TOKEN.token 22 config.headers["X-Authorization"] = "Bearer " + GLOBAL_TOKEN.token
  23 +
19 return config 24 return config
  25 + }, (error) => {
  26 + console.log(error)
  27 + return error
20 }) 28 })
21 29
22 /** 30 /**
@@ -28,10 +36,73 @@ function createAxios(options) { @@ -28,10 +36,73 @@ function createAxios(options) {
28 }, 36 },
29 function (error) { 37 function (error) {
30 if (error.response.status == 401) { 38 if (error.response.status == 401) {
31 - layer.alert('登录超时,请重新登录'); 39 + // layer.alert('登录超时,请重新登录');
  40 + // const config = error.config
  41 + // const url = config.url
  42 + // const method = config.method
  43 + // const data = config.data
  44 + // const flag = requestQueue.find(item => item.url === url)
  45 + // if (!flag) {
  46 + // console.log(url, method, data)
  47 + // requestQueue.push({ url, method, data })
  48 + // }
  49 +
  50 + doRefreshToken()
32 } 51 }
33 return Promise.reject(error); 52 return Promise.reject(error);
34 } 53 }
35 ); 54 );
36 return instance; 55 return instance;
37 } 56 }
  57 +
  58 +
  59 +/**
  60 + * @description refresh token
  61 + * @param {} params
  62 + * @returns
  63 + */
  64 +function doRefreshToken(params) {
  65 + const refreshToken = GLOBAL_TOKEN.refreshToken
  66 + console.log(GLOBAL_TOKEN)
  67 + return new Promise((resolve, reject) => {
  68 + axios.post('/api/auth/token',
  69 + { refreshToken },
  70 + {
  71 + headers: {
  72 + "content-type": "application/json; charset=UTF-8",
  73 + "X-Authorization": "Bearer " + GLOBAL_TOKEN.token,
  74 + },
  75 + })
  76 + .then(res => {
  77 +
  78 + // 存储token
  79 + const { refreshToken, token } = res.data
  80 + Object.assign(GLOBAL_TOKEN, { refreshToken, token })
  81 + const ls = createStorage({ storage: localStorage })
  82 + const originData = ls.get(GLOBAL_STORAGE_KEY)
  83 + const newRefreshToken = ls.generatorValue(REFRESH_TOKEN_KEY, refreshToken, true)
  84 + const newToken = ls.generatorValue(REFRESH_TOKEN_KEY, token, true)
  85 + console.log(Object.assign(originData, { [REFRESH_TOKEN_KEY]: newRefreshToken, [JWT_TOKEN_KEY]: newToken }))
  86 + ls.set(GLOBAL_STORAGE_KEY, Object.assign(originData, { [REFRESH_TOKEN_KEY]: newRefreshToken, [JWT_TOKEN_KEY]: newToken }), true)
  87 +
  88 + // try {
  89 + // requestQueue.forEach(item => {
  90 + // const { method, url, data } = item
  91 + // console.log({ item })
  92 + // defHttp[method](url, data)
  93 + // })
  94 + // requestQueue = []
  95 + // } catch (error) {
  96 +
  97 + // }
  98 +
  99 + window.location.reload()
  100 + resolve()
  101 + })
  102 + .catch((error) => {
  103 + const { origin } = window.location
  104 + window.location.href = `${origin}/login`
  105 + reject(error)
  106 + })
  107 + })
  108 +}