11import localforage from "localforage" ;
22
33export const TabItem = function ( ) {
4- this . id = "" ;
5- this . title = "" ;
6- this . url = "" ;
4+ this . id = "" ;
5+ this . title = "" ;
6+ this . url = "" ;
77}
88
99export var WorkSpaceItem = function ( ) {
10- this . fid = "" ; // 主键ID
11- this . workSpaceName = "" ; // 工作区名称
12- this . saveDataTime = "" ; // 保存时间
13- this . spaceTabs = [ ] ; // 工作区中的页面
10+ this . fid = "" ; // 主键ID
11+ this . workSpaceName = "" ; // 工作区名称
12+ this . saveDataTime = "" ; // 保存时间
13+ this . spaceTabs = [ ] ; // 工作区中的页面
1414}
1515/**
1616 * 地址让获取参数
1717 * @param variable 地址栏参数名称
1818 * @returns {string|boolean } 参数数据
1919 */
2020export const getQueryVariable = ( variable ) => {
21- const hashUrl = window . location . hash
22- const query = hashUrl . split ( '?' ) [ 1 ]
23- const vars = query . split ( '&' )
24- for ( const element of vars ) {
25- const pair = element . split ( '=' )
26- if ( pair [ 0 ] === variable ) {
27- return pair [ 1 ]
28- }
21+ const hashUrl = window . location . hash
22+ const query = hashUrl . split ( '?' ) [ 1 ]
23+ const vars = query . split ( '&' )
24+ for ( const element of vars ) {
25+ const pair = element . split ( '=' )
26+ if ( pair [ 0 ] === variable ) {
27+ return pair [ 1 ]
2928 }
30- return ''
29+ }
30+ return ''
3131}
3232
3333/**
@@ -37,22 +37,54 @@ export const getQueryVariable = (variable) => {
3737 * @param serialization 是否序列化
3838 */
3939export const saveData = async ( key , data , serialization = true ) => {
40- console . debug ( "saveData key:" , key + " data:" , data )
41- if ( serialization ) {
42- data = JSON . stringify ( data )
43- }
44- await localforage . setItem ( key , data )
40+ console . debug ( "saveData key:" , key + " data:" , data )
41+ if ( serialization ) {
42+ data = JSON . stringify ( data )
43+ }
44+ await localforage . setItem ( key , data )
4545}
4646
4747export const getData = ( key , serialization = true ) => {
48- return new Promise ( ( resolve , reject ) => {
49- localforage . getItem ( key ) . then ( ( data ) => {
50- if ( serialization ) {
51- data = JSON . parse ( data )
52- }
53- resolve ( data )
54- } ) . catch ( ( err ) => {
55- reject ( err )
56- } )
48+ return new Promise ( ( resolve , reject ) => {
49+ localforage . getItem ( key ) . then ( ( data ) => {
50+ if ( serialization ) {
51+ data = JSON . parse ( data )
52+ }
53+ resolve ( data )
54+ } ) . catch ( ( err ) => {
55+ reject ( err )
5756 } )
58- }
57+ } )
58+ }
59+
60+ /**
61+ * 合并数据(将本地的数据合并到上传的数据中)
62+ * @param data1 需要合并的数据(上传的)
63+ * @param data2 需要合并的数据(本地的)
64+ * @returns {*[] }
65+ */
66+ export const mergeData = ( data1 , data2 ) => {
67+ const mergedData = [ ...data1 ] ;
68+ data2 . forEach ( newItem => {
69+ const existingItemIndex = mergedData . findIndex ( item => item . fid === newItem . fid ) ;
70+ if ( existingItemIndex === - 1 ) {
71+ // 如果新数据的fid不存在,则添加新的工作空间
72+ mergedData . push ( newItem ) ;
73+ } else {
74+ // 如果fid已经存在,合并spaceTabs
75+ const existingItem = mergedData [ existingItemIndex ] ;
76+ newItem . spaceTabs . forEach ( newTab => {
77+ // 判断是否存在相同title和url的tab
78+ const existingTabIndex = existingItem . spaceTabs . findIndex ( tab => tab . title === newTab . title && tab . url === newTab . url ) ;
79+ if ( existingTabIndex === - 1 ) {
80+ // 如果tab不存在,添加新的tab
81+ existingItem . spaceTabs . push ( newTab ) ;
82+ } else {
83+ // 如果tab已经存在,可以选择合并字段或者跳过
84+ console . log ( `Tab 已存在:${ newTab . title } - ${ newTab . url } ` ) ;
85+ }
86+ } ) ;
87+ }
88+ } ) ;
89+ return mergedData ;
90+ }
0 commit comments